@spartan-ng/cli 1.8.3-beta.2 → 1.9.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/generators.json +10 -0
- package/package.json +1 -1
- package/src/generators/healthcheck/generator.js +2 -0
- package/src/generators/healthcheck/generator.js.map +1 -1
- package/src/generators/healthcheck/healthchecks/brn-input-otp-max-length-rename.js +2 -2
- package/src/generators/healthcheck/healthchecks/brn-input-otp-max-length-rename.js.map +1 -1
- package/src/generators/healthcheck/healthchecks/hlm-input-otp.d.ts +2 -0
- package/src/generators/healthcheck/healthchecks/hlm-input-otp.js +48 -0
- package/src/generators/healthcheck/healthchecks/hlm-input-otp.js.map +1 -0
- package/src/generators/migrate-brn-input-otp-max-length/generator.js +1 -1
- package/src/generators/migrate-brn-input-otp-max-length/generator.js.map +1 -1
- package/src/generators/migrate-input-otp/compat.d.ts +2 -0
- package/src/generators/migrate-input-otp/compat.js +6 -0
- package/src/generators/migrate-input-otp/compat.js.map +1 -0
- package/src/generators/migrate-input-otp/generator.d.ts +4 -0
- package/src/generators/migrate-input-otp/generator.js +281 -0
- package/src/generators/migrate-input-otp/generator.js.map +1 -0
- package/src/generators/migrate-input-otp/schema.d.ts +3 -0
- package/src/generators/migrate-input-otp/schema.json +14 -0
- package/src/generators/migrate-input-otp/utils.d.ts +35 -0
- package/src/generators/migrate-input-otp/utils.js +265 -0
- package/src/generators/migrate-input-otp/utils.js.map +1 -0
- package/src/generators/ui/libs/avatar/files/lib/hlm-avatar-image.ts.template +1 -1
- package/src/generators/ui/libs/avatar/files/lib/hlm-avatar.ts.template +5 -14
- package/src/generators/ui/libs/input-otp/files/lib/hlm-input-otp.ts.template +50 -4
- package/src/generators/ui/supported-ui-libraries.json +46 -44
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.findInputOtpElements = findInputOtpElements;
|
|
4
|
+
exports.findOpeningTags = findOpeningTags;
|
|
5
|
+
exports.parseAttributes = parseAttributes;
|
|
6
|
+
exports.attributeName = attributeName;
|
|
7
|
+
exports.serializeAttributes = serializeAttributes;
|
|
8
|
+
exports.isHelmAttribute = isHelmAttribute;
|
|
9
|
+
exports.hasHelmAttribute = hasHelmAttribute;
|
|
10
|
+
exports.hasContainerStyles = hasContainerStyles;
|
|
11
|
+
exports.splitInputAttributes = splitInputAttributes;
|
|
12
|
+
exports.renameAttribute = renameAttribute;
|
|
13
|
+
exports.addAttributesToExistingInput = addAttributesToExistingInput;
|
|
14
|
+
exports.hasInputOtpInputDirective = hasInputOtpInputDirective;
|
|
15
|
+
const INPUT_OTP_TAG = 'brn-input-otp';
|
|
16
|
+
const INPUT_OTP_CLOSE_TAG = `</${INPUT_OTP_TAG}>`;
|
|
17
|
+
function findInputOtpElements(content) {
|
|
18
|
+
const elements = [];
|
|
19
|
+
let index = 0;
|
|
20
|
+
while (index < content.length) {
|
|
21
|
+
const openStart = content.indexOf(`<${INPUT_OTP_TAG}`, index);
|
|
22
|
+
if (openStart === -1) {
|
|
23
|
+
break;
|
|
24
|
+
}
|
|
25
|
+
const nameEnd = openStart + INPUT_OTP_TAG.length + 1;
|
|
26
|
+
const nextChar = content[nameEnd];
|
|
27
|
+
if (nextChar && /[\w-]/.test(nextChar)) {
|
|
28
|
+
index = nameEnd;
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
const openTagEnd = findTagEnd(content, nameEnd);
|
|
32
|
+
if (openTagEnd === -1) {
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
const rawAttrs = content.slice(nameEnd, openTagEnd - 1);
|
|
36
|
+
const selfClosing = /\/\s*$/.test(rawAttrs);
|
|
37
|
+
const attrs = selfClosing ? rawAttrs.replace(/\/\s*$/, '') : rawAttrs;
|
|
38
|
+
if (selfClosing) {
|
|
39
|
+
elements.push({
|
|
40
|
+
start: openStart,
|
|
41
|
+
end: openTagEnd,
|
|
42
|
+
openTagEnd,
|
|
43
|
+
closeTagStart: null,
|
|
44
|
+
attrs,
|
|
45
|
+
inner: '',
|
|
46
|
+
selfClosing: true,
|
|
47
|
+
});
|
|
48
|
+
index = openTagEnd;
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
const closeTagStart = content.indexOf(INPUT_OTP_CLOSE_TAG, openTagEnd);
|
|
52
|
+
if (closeTagStart === -1) {
|
|
53
|
+
index = openTagEnd;
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
const closeTagEnd = closeTagStart + INPUT_OTP_CLOSE_TAG.length;
|
|
57
|
+
elements.push({
|
|
58
|
+
start: openStart,
|
|
59
|
+
end: closeTagEnd,
|
|
60
|
+
openTagEnd,
|
|
61
|
+
closeTagStart,
|
|
62
|
+
attrs,
|
|
63
|
+
inner: content.slice(openTagEnd, closeTagStart),
|
|
64
|
+
selfClosing: false,
|
|
65
|
+
});
|
|
66
|
+
index = closeTagEnd;
|
|
67
|
+
}
|
|
68
|
+
return elements;
|
|
69
|
+
}
|
|
70
|
+
function findOpeningTags(content, tagName) {
|
|
71
|
+
const tags = [];
|
|
72
|
+
const prefix = `<${tagName}`;
|
|
73
|
+
let index = 0;
|
|
74
|
+
while (index < content.length) {
|
|
75
|
+
const tagStart = content.indexOf(prefix, index);
|
|
76
|
+
if (tagStart === -1) {
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
const nameEnd = tagStart + prefix.length;
|
|
80
|
+
const nextChar = content[nameEnd];
|
|
81
|
+
if (nextChar && /[\w-]/.test(nextChar)) {
|
|
82
|
+
index = nameEnd;
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
const tagEnd = findTagEnd(content, nameEnd);
|
|
86
|
+
if (tagEnd === -1) {
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
const rawAttrs = content.slice(nameEnd, tagEnd - 1);
|
|
90
|
+
const selfClosing = /\/\s*$/.test(rawAttrs);
|
|
91
|
+
tags.push({
|
|
92
|
+
start: tagStart,
|
|
93
|
+
end: tagEnd,
|
|
94
|
+
attrs: selfClosing ? rawAttrs.replace(/\/\s*$/, '') : rawAttrs,
|
|
95
|
+
selfClosing,
|
|
96
|
+
});
|
|
97
|
+
index = tagEnd;
|
|
98
|
+
}
|
|
99
|
+
return tags;
|
|
100
|
+
}
|
|
101
|
+
function parseAttributes(attrs) {
|
|
102
|
+
const attributes = [];
|
|
103
|
+
let index = 0;
|
|
104
|
+
while (index < attrs.length) {
|
|
105
|
+
while (index < attrs.length && /\s/.test(attrs[index])) {
|
|
106
|
+
index++;
|
|
107
|
+
}
|
|
108
|
+
if (index >= attrs.length) {
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
const start = index;
|
|
112
|
+
while (index < attrs.length && !/[\s=]/.test(attrs[index])) {
|
|
113
|
+
index++;
|
|
114
|
+
}
|
|
115
|
+
const name = attrs.slice(start, index);
|
|
116
|
+
if (!name) {
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
while (index < attrs.length && /\s/.test(attrs[index])) {
|
|
120
|
+
index++;
|
|
121
|
+
}
|
|
122
|
+
let value = null;
|
|
123
|
+
if (attrs[index] === '=') {
|
|
124
|
+
index++;
|
|
125
|
+
while (index < attrs.length && /\s/.test(attrs[index])) {
|
|
126
|
+
index++;
|
|
127
|
+
}
|
|
128
|
+
if (attrs[index] === '"' || attrs[index] === "'") {
|
|
129
|
+
const quote = attrs[index];
|
|
130
|
+
index++;
|
|
131
|
+
const valueStart = index;
|
|
132
|
+
while (index < attrs.length && attrs[index] !== quote) {
|
|
133
|
+
index++;
|
|
134
|
+
}
|
|
135
|
+
value = attrs.slice(valueStart, index);
|
|
136
|
+
if (attrs[index] === quote) {
|
|
137
|
+
index++;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
const valueStart = index;
|
|
142
|
+
while (index < attrs.length && !/\s/.test(attrs[index])) {
|
|
143
|
+
index++;
|
|
144
|
+
}
|
|
145
|
+
value = attrs.slice(valueStart, index);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
attributes.push({
|
|
149
|
+
name,
|
|
150
|
+
raw: attrs.slice(start, index),
|
|
151
|
+
value,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
return attributes;
|
|
155
|
+
}
|
|
156
|
+
function attributeName(attribute) {
|
|
157
|
+
return attribute.name.replace(/^\[\(?/, '').replace(/\)?\]$/, '');
|
|
158
|
+
}
|
|
159
|
+
function serializeAttributes(attributes) {
|
|
160
|
+
return attributes.length ? ` ${attributes.map((attribute) => attribute.raw).join(' ')}` : '';
|
|
161
|
+
}
|
|
162
|
+
function isHelmAttribute(attribute) {
|
|
163
|
+
const name = attributeName(attribute);
|
|
164
|
+
return name === 'hlmInputOtp' || name === 'hlm';
|
|
165
|
+
}
|
|
166
|
+
function hasHelmAttribute(attributes) {
|
|
167
|
+
return attributes.some(isHelmAttribute);
|
|
168
|
+
}
|
|
169
|
+
function hasContainerStyles(attributes) {
|
|
170
|
+
return attributes.some((attribute) => attributeName(attribute) === 'containerStyles');
|
|
171
|
+
}
|
|
172
|
+
const INPUT_ATTRIBUTE_RENAMES = {
|
|
173
|
+
inputClass: 'class',
|
|
174
|
+
inputAutocomplete: 'autocomplete',
|
|
175
|
+
};
|
|
176
|
+
function splitInputAttributes(attributes) {
|
|
177
|
+
const rootAttrs = [];
|
|
178
|
+
const inputAttrs = [];
|
|
179
|
+
for (const attribute of attributes) {
|
|
180
|
+
const name = attributeName(attribute);
|
|
181
|
+
const renamed = INPUT_ATTRIBUTE_RENAMES[name];
|
|
182
|
+
if (renamed) {
|
|
183
|
+
inputAttrs.push(renameAttribute(attribute, name, renamed));
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
if (name === 'inputStyles' || name === 'inputMode') {
|
|
187
|
+
inputAttrs.push(attribute);
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
rootAttrs.push(attribute);
|
|
191
|
+
}
|
|
192
|
+
return { rootAttrs, inputAttrs };
|
|
193
|
+
}
|
|
194
|
+
function renameAttribute(attribute, from, to) {
|
|
195
|
+
const name = attribute.name.replace(from, to);
|
|
196
|
+
return {
|
|
197
|
+
...attribute,
|
|
198
|
+
name,
|
|
199
|
+
raw: attribute.raw.replace(attribute.name, name),
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
function addAttributesToExistingInput(content, inputAttrs) {
|
|
203
|
+
if (inputAttrs.length === 0) {
|
|
204
|
+
return content;
|
|
205
|
+
}
|
|
206
|
+
for (const tag of findOpeningTags(content, 'input')) {
|
|
207
|
+
const attrs = parseAttributes(tag.attrs);
|
|
208
|
+
if (!attrs.some((attribute) => attributeName(attribute) === 'brnInputOtpInput')) {
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
const merged = mergeAttributes(attrs, inputAttrs);
|
|
212
|
+
const replacement = `<input${serializeAttributes(merged)} />`;
|
|
213
|
+
return content.slice(0, tag.start) + replacement + content.slice(tag.end);
|
|
214
|
+
}
|
|
215
|
+
return content;
|
|
216
|
+
}
|
|
217
|
+
function hasInputOtpInputDirective(content) {
|
|
218
|
+
return findOpeningTags(content, 'input').some((tag) => parseAttributes(tag.attrs).some((attribute) => attributeName(attribute) === 'brnInputOtpInput'));
|
|
219
|
+
}
|
|
220
|
+
function mergeAttributes(existing, added) {
|
|
221
|
+
const merged = [...existing];
|
|
222
|
+
const isClassBindingPair = (current, incoming) => (current.name === 'class' && incoming.name === '[class]') ||
|
|
223
|
+
(current.name === '[class]' && incoming.name === 'class');
|
|
224
|
+
for (const attribute of added) {
|
|
225
|
+
const name = attributeName(attribute);
|
|
226
|
+
const index = merged.findIndex((current) => attributeName(current) === name && !isClassBindingPair(current, attribute));
|
|
227
|
+
if (index === -1) {
|
|
228
|
+
merged.push(attribute);
|
|
229
|
+
continue;
|
|
230
|
+
}
|
|
231
|
+
if (name === 'class' && !attribute.name.startsWith('[') && !merged[index].name.startsWith('[')) {
|
|
232
|
+
const values = [merged[index].value, attribute.value]
|
|
233
|
+
.filter((value) => !!value)
|
|
234
|
+
.join(' ')
|
|
235
|
+
.split(/\s+/)
|
|
236
|
+
.filter(Boolean);
|
|
237
|
+
const value = Array.from(new Set(values)).join(' ');
|
|
238
|
+
merged[index] = { name: 'class', raw: `class="${value}"`, value };
|
|
239
|
+
continue;
|
|
240
|
+
}
|
|
241
|
+
merged[index] = attribute;
|
|
242
|
+
}
|
|
243
|
+
return merged;
|
|
244
|
+
}
|
|
245
|
+
function findTagEnd(content, from) {
|
|
246
|
+
let quote = null;
|
|
247
|
+
for (let index = from; index < content.length; index++) {
|
|
248
|
+
const char = content[index];
|
|
249
|
+
if (quote) {
|
|
250
|
+
if (char === quote) {
|
|
251
|
+
quote = null;
|
|
252
|
+
}
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
if (char === '"' || char === "'") {
|
|
256
|
+
quote = char;
|
|
257
|
+
continue;
|
|
258
|
+
}
|
|
259
|
+
if (char === '>') {
|
|
260
|
+
return index + 1;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
return -1;
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/generators/migrate-input-otp/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import { classes } from '<%- importAlias %>/utils';
|
|
|
5
5
|
@Directive({
|
|
6
6
|
selector: 'img[hlmAvatarImage]',
|
|
7
7
|
exportAs: 'hlmAvatarImage',
|
|
8
|
-
hostDirectives: [BrnAvatarImage],
|
|
8
|
+
hostDirectives: [{ directive: BrnAvatarImage, inputs: ['hostStyles'] }],
|
|
9
9
|
host: {
|
|
10
10
|
'data-slot': 'avatar-image',
|
|
11
11
|
},
|
|
@@ -1,29 +1,20 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Directive, input } from '@angular/core';
|
|
2
2
|
import { BrnAvatar } from '@spartan-ng/brain/avatar';
|
|
3
3
|
import { classes } from '<%- importAlias %>/utils';
|
|
4
4
|
|
|
5
|
-
@
|
|
6
|
-
selector: 'hlm-avatar',
|
|
5
|
+
@Directive({
|
|
6
|
+
selector: '[hlmAvatar],hlm-avatar',
|
|
7
7
|
exportAs: 'hlmAvatar',
|
|
8
|
-
|
|
8
|
+
hostDirectives: [BrnAvatar],
|
|
9
9
|
host: {
|
|
10
10
|
'data-slot': 'avatar',
|
|
11
11
|
'[attr.data-size]': 'size()',
|
|
12
12
|
},
|
|
13
|
-
template: `
|
|
14
|
-
@if (_image()?.canShow()) {
|
|
15
|
-
<ng-content select="[hlmAvatarImage],[brnAvatarImage]" />
|
|
16
|
-
} @else {
|
|
17
|
-
<ng-content select="[hlmAvatarFallback],[brnAvatarFallback]" />
|
|
18
|
-
}
|
|
19
|
-
<ng-content />
|
|
20
|
-
`,
|
|
21
13
|
})
|
|
22
|
-
export class HlmAvatar
|
|
14
|
+
export class HlmAvatar {
|
|
23
15
|
public readonly size = input<'default' | 'sm' | 'lg'>('default');
|
|
24
16
|
|
|
25
17
|
constructor() {
|
|
26
|
-
super();
|
|
27
18
|
classes(
|
|
28
19
|
() =>
|
|
29
20
|
'spartan-avatar group/avatar after:border-border relative flex shrink-0 select-none after:absolute after:inset-0 after:border after:mix-blend-darken dark:after:mix-blend-lighten',
|
|
@@ -1,12 +1,58 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';
|
|
2
|
+
import { BrnInputOtp, BrnInputOtpInput, type InputMode } from '@spartan-ng/brain/input-otp';
|
|
3
|
+
import { classes, hlm } from '<%- importAlias %>/utils';
|
|
4
|
+
import type { ClassValue } from 'clsx';
|
|
3
5
|
|
|
4
|
-
@
|
|
5
|
-
selector: '
|
|
6
|
+
@Component({
|
|
7
|
+
selector: 'hlm-input-otp',
|
|
6
8
|
exportAs: 'hlmInputOtp',
|
|
9
|
+
imports: [BrnInputOtpInput],
|
|
10
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
11
|
+
hostDirectives: [
|
|
12
|
+
{
|
|
13
|
+
directive: BrnInputOtp,
|
|
14
|
+
inputs: [
|
|
15
|
+
'length',
|
|
16
|
+
'value',
|
|
17
|
+
'disabled',
|
|
18
|
+
'inputId',
|
|
19
|
+
'hostStyles',
|
|
20
|
+
'autofocus',
|
|
21
|
+
'transformPaste',
|
|
22
|
+
'mask',
|
|
23
|
+
'maskChar',
|
|
24
|
+
'slotPattern',
|
|
25
|
+
],
|
|
26
|
+
outputs: ['valueChange', 'completed'],
|
|
27
|
+
},
|
|
28
|
+
],
|
|
7
29
|
host: { 'data-slot': 'input-otp' },
|
|
30
|
+
template: `
|
|
31
|
+
<ng-content />
|
|
32
|
+
<input
|
|
33
|
+
brnInputOtpInput
|
|
34
|
+
[autocomplete]="inputAutocomplete()"
|
|
35
|
+
[inputMode]="inputMode()"
|
|
36
|
+
[class]="_inputClass()"
|
|
37
|
+
[inputStyles]="inputStyles()"
|
|
38
|
+
/>
|
|
39
|
+
`,
|
|
8
40
|
})
|
|
9
41
|
export class HlmInputOtp {
|
|
42
|
+
/** Custom autocomplete attribute applied to the input element */
|
|
43
|
+
public readonly inputAutocomplete = input<'one-time-code' | 'off'>('one-time-code');
|
|
44
|
+
|
|
45
|
+
/** Virtual keyboard appearance on mobile */
|
|
46
|
+
public readonly inputMode = input<InputMode>('numeric');
|
|
47
|
+
|
|
48
|
+
/** Classes applied to the input element. */
|
|
49
|
+
public readonly inputClass = input<ClassValue>('');
|
|
50
|
+
|
|
51
|
+
/** Overrides the default styles applied to the input element. */
|
|
52
|
+
public readonly inputStyles = input<string | undefined>(undefined);
|
|
53
|
+
|
|
54
|
+
protected readonly _inputClass = computed(() => hlm('disabled:cursor-not-allowed', this.inputClass()));
|
|
55
|
+
|
|
10
56
|
constructor() {
|
|
11
57
|
classes(() => 'spartan-input-otp flex items-center has-disabled:opacity-50');
|
|
12
58
|
}
|