@recursyve/ngx-material-components 22.0.0 → 22.2.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/_sass/_override-utils.scss +31 -0
- package/colorpicker/_index.scss +1 -0
- package/colorpicker/_theme.scss +19 -0
- package/fesm2022/recursyve-ngx-material-components-chip-list.mjs +2 -2
- package/fesm2022/recursyve-ngx-material-components-chip-list.mjs.map +1 -1
- package/fesm2022/recursyve-ngx-material-components-colorpicker.mjs +237 -0
- package/fesm2022/recursyve-ngx-material-components-colorpicker.mjs.map +1 -0
- package/fesm2022/recursyve-ngx-material-components-dropzone.mjs +23 -7
- package/fesm2022/recursyve-ngx-material-components-dropzone.mjs.map +1 -1
- package/fesm2022/recursyve-ngx-material-components-form-field-error.mjs +174 -33
- package/fesm2022/recursyve-ngx-material-components-form-field-error.mjs.map +1 -1
- package/fesm2022/recursyve-ngx-material-components-timepicker.mjs +550 -0
- package/fesm2022/recursyve-ngx-material-components-timepicker.mjs.map +1 -0
- package/fesm2022/recursyve-ngx-material-components-typeahead.mjs +24 -12
- package/fesm2022/recursyve-ngx-material-components-typeahead.mjs.map +1 -1
- package/package.json +16 -4
- package/timepicker/_index.scss +1 -0
- package/timepicker/_theme.scss +41 -0
- package/types/recursyve-ngx-material-components-colorpicker.d.ts +77 -0
- package/types/recursyve-ngx-material-components-dropzone.d.ts +8 -1
- package/types/recursyve-ngx-material-components-form-field-error.d.ts +25 -3
- package/types/recursyve-ngx-material-components-timepicker.d.ts +99 -0
- package/types/recursyve-ngx-material-components-typeahead.d.ts +3 -0
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Input, ChangeDetectionStrategy, ViewEncapsulation, Component,
|
|
2
|
+
import { InjectionToken, Input, ChangeDetectionStrategy, ViewEncapsulation, Component, inject, DestroyRef, ElementRef, ViewContainerRef, Directive, input, contentChild, effect } from '@angular/core';
|
|
3
3
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
4
4
|
import { MatError, MatFormField } from '@angular/material/form-field';
|
|
5
5
|
import { combineLatest, startWith } from 'rxjs';
|
|
6
6
|
import { trigger, transition, style, animate } from '@angular/animations';
|
|
7
|
+
import { FormField } from '@angular/forms/signals';
|
|
7
8
|
|
|
8
9
|
const PatternErrorTransformer = (error, details) => {
|
|
9
10
|
if (details["requiredPattern"]) {
|
|
@@ -56,6 +57,9 @@ const DefaultErrorTransformers = {
|
|
|
56
57
|
max: MaxErrorTransformer
|
|
57
58
|
};
|
|
58
59
|
|
|
60
|
+
const NICE_FORM_FIELD_ERROR_TRANSFORMERS = new InjectionToken("nice_form_field_error_transformers");
|
|
61
|
+
const NICE_FORM_FIELD_ERROR_TRANSLATER = new InjectionToken("nice_form_field_error_translater");
|
|
62
|
+
|
|
59
63
|
class NiceFormErrorComponent {
|
|
60
64
|
message = "";
|
|
61
65
|
increment = 0;
|
|
@@ -109,8 +113,56 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImpor
|
|
|
109
113
|
type: Input
|
|
110
114
|
}] } });
|
|
111
115
|
|
|
112
|
-
|
|
113
|
-
|
|
116
|
+
class FormFieldErrorDisplay {
|
|
117
|
+
elementRef;
|
|
118
|
+
viewContainerRef;
|
|
119
|
+
translater;
|
|
120
|
+
ref = null;
|
|
121
|
+
constructor(elementRef, viewContainerRef, translater) {
|
|
122
|
+
this.elementRef = elementRef;
|
|
123
|
+
this.viewContainerRef = viewContainerRef;
|
|
124
|
+
this.translater = translater;
|
|
125
|
+
}
|
|
126
|
+
setError(text, params) {
|
|
127
|
+
this.ensureComponent();
|
|
128
|
+
if (text) {
|
|
129
|
+
this.elementRef.nativeElement.classList.add("form-error-show");
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
this.elementRef.nativeElement.classList.remove("form-error-show");
|
|
133
|
+
}
|
|
134
|
+
this.ref.instance.error = text.length > 0 ? this.translater(text, params) : text;
|
|
135
|
+
}
|
|
136
|
+
setErrorText(text) {
|
|
137
|
+
this.ensureComponent();
|
|
138
|
+
if (text) {
|
|
139
|
+
this.elementRef.nativeElement.classList.add("form-error-show");
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
this.elementRef.nativeElement.classList.remove("form-error-show");
|
|
143
|
+
}
|
|
144
|
+
this.ref.instance.error = text;
|
|
145
|
+
}
|
|
146
|
+
ensureComponent() {
|
|
147
|
+
if (this.ref) {
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
this.ref = this.viewContainerRef.createComponent(NiceFormErrorComponent);
|
|
151
|
+
const wrapper = this.elementRef.nativeElement
|
|
152
|
+
.getElementsByClassName("mat-mdc-form-field-subscript-wrapper")
|
|
153
|
+
.item(0);
|
|
154
|
+
if (!wrapper) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
const hint = this.elementRef.nativeElement.getElementsByClassName("mat-mdc-form-field-hint").item(0);
|
|
158
|
+
this.ref.location.nativeElement.style.position = "absolute";
|
|
159
|
+
this.ref.location.nativeElement.style.top = hint ? "16px" : "0";
|
|
160
|
+
if (hint) {
|
|
161
|
+
wrapper.classList.add("override-height");
|
|
162
|
+
}
|
|
163
|
+
wrapper.prepend(this.ref.location.nativeElement);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
114
166
|
|
|
115
167
|
class NiceFormFieldErrorDirective {
|
|
116
168
|
destroyRef = inject(DestroyRef);
|
|
@@ -119,29 +171,29 @@ class NiceFormFieldErrorDirective {
|
|
|
119
171
|
formField = inject(MatFormField);
|
|
120
172
|
transformers = inject(NICE_FORM_FIELD_ERROR_TRANSFORMERS);
|
|
121
173
|
translater = inject(NICE_FORM_FIELD_ERROR_TRANSLATER);
|
|
122
|
-
|
|
174
|
+
display = new FormFieldErrorDisplay(this.elementRef, this.viewContainerRef, this.translater);
|
|
123
175
|
control = null;
|
|
124
176
|
onChange = () => {
|
|
125
177
|
if (this.control === null || this.control.pending) {
|
|
126
178
|
return;
|
|
127
179
|
}
|
|
128
180
|
if (this.control.valid || this.control.untouched) {
|
|
129
|
-
this.setError("", {});
|
|
181
|
+
this.display.setError("", {});
|
|
130
182
|
return;
|
|
131
183
|
}
|
|
132
184
|
for (const error in this.control.errors) {
|
|
133
185
|
const details = this.control.errors[error];
|
|
134
186
|
if (typeof details !== "object") {
|
|
135
|
-
this.setError(`errors.${error}`, {});
|
|
187
|
+
this.display.setError(`errors.${error}`, {});
|
|
136
188
|
continue;
|
|
137
189
|
}
|
|
138
190
|
const transformer = this.transformers[error];
|
|
139
191
|
if (!transformer) {
|
|
140
|
-
this.setError(`errors.${error}`, {});
|
|
192
|
+
this.display.setError(`errors.${error}`, {});
|
|
141
193
|
continue;
|
|
142
194
|
}
|
|
143
195
|
const { key, params } = transformer(error, details);
|
|
144
|
-
this.setError(`errors.${key}`, params ?? {});
|
|
196
|
+
this.display.setError(`errors.${key}`, params ?? {});
|
|
145
197
|
}
|
|
146
198
|
};
|
|
147
199
|
ngAfterViewInit() {
|
|
@@ -155,37 +207,125 @@ class NiceFormFieldErrorDirective {
|
|
|
155
207
|
.subscribe(() => this.onChange());
|
|
156
208
|
}
|
|
157
209
|
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
210
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: NiceFormFieldErrorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
211
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.0", type: NiceFormFieldErrorDirective, isStandalone: true, selector: "[niceFormFieldError]", ngImport: i0 });
|
|
212
|
+
}
|
|
213
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: NiceFormFieldErrorDirective, decorators: [{
|
|
214
|
+
type: Directive,
|
|
215
|
+
args: [{ selector: "[niceFormFieldError]", standalone: true }]
|
|
216
|
+
}] });
|
|
217
|
+
|
|
218
|
+
const SIGNAL_TO_REACTIVE_ERROR_KEY = {
|
|
219
|
+
minLength: "minlength",
|
|
220
|
+
maxLength: "maxlength"
|
|
221
|
+
};
|
|
222
|
+
function signalErrorToValidationErrors(error) {
|
|
223
|
+
const details = error;
|
|
224
|
+
switch (error.kind) {
|
|
225
|
+
case "minLength":
|
|
226
|
+
return { requiredLength: details["minLength"] };
|
|
227
|
+
case "maxLength":
|
|
228
|
+
return { requiredLength: details["maxLength"] };
|
|
229
|
+
case "pattern":
|
|
230
|
+
return { requiredPattern: String(details["pattern"] ?? "") };
|
|
231
|
+
default:
|
|
232
|
+
return details;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
const SignalDefaultErrorTransformers = {
|
|
236
|
+
...DefaultErrorTransformers,
|
|
237
|
+
minLength: (_, details) => DefaultErrorTransformers["minlength"]("minlength", details),
|
|
238
|
+
maxLength: (_, details) => DefaultErrorTransformers["maxlength"]("maxlength", details)
|
|
239
|
+
};
|
|
240
|
+
function resolveSignalFormError(error, transformers) {
|
|
241
|
+
if (error.message) {
|
|
242
|
+
return { text: error.message, params: {}, direct: true };
|
|
243
|
+
}
|
|
244
|
+
const reactiveKey = SIGNAL_TO_REACTIVE_ERROR_KEY[error.kind] ?? error.kind;
|
|
245
|
+
const hasCustomTransformer = Object.hasOwn(transformers, error.kind);
|
|
246
|
+
const transformer = hasCustomTransformer
|
|
247
|
+
? transformers[error.kind]
|
|
248
|
+
: transformers[reactiveKey];
|
|
249
|
+
if (!transformer) {
|
|
250
|
+
return { text: `errors.${reactiveKey}`, params: {} };
|
|
251
|
+
}
|
|
252
|
+
const details = hasCustomTransformer
|
|
253
|
+
? error
|
|
254
|
+
: signalErrorToValidationErrors(error);
|
|
255
|
+
if (typeof details !== "object") {
|
|
256
|
+
return { text: `errors.${reactiveKey}`, params: {} };
|
|
257
|
+
}
|
|
258
|
+
const { key, params } = transformer(reactiveKey, details);
|
|
259
|
+
return { text: `errors.${key}`, params: (params ?? {}) };
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
class NiceSignalFormFieldErrorDirective {
|
|
263
|
+
elementRef = inject((ElementRef));
|
|
264
|
+
formField = inject(MatFormField);
|
|
265
|
+
transformers = inject(NICE_FORM_FIELD_ERROR_TRANSFORMERS);
|
|
266
|
+
translater = inject(NICE_FORM_FIELD_ERROR_TRANSLATER);
|
|
267
|
+
viewContainerRef = inject(ViewContainerRef);
|
|
268
|
+
/**
|
|
269
|
+
* The signal form field to watch. When omitted, the directive resolves the `[formField]`
|
|
270
|
+
* binding from a descendant control inside the `mat-form-field`.
|
|
271
|
+
*/
|
|
272
|
+
field = input(/* @ts-ignore */
|
|
273
|
+
...(ngDevMode ? [undefined, { debugName: "field" }] : /* istanbul ignore next */ []));
|
|
274
|
+
formFieldDirective = contentChild(FormField, { ...(ngDevMode ? { debugName: "formFieldDirective" } : /* istanbul ignore next */ {}), descendants: true });
|
|
275
|
+
display = new FormFieldErrorDisplay(this.elementRef, this.viewContainerRef, this.translater);
|
|
276
|
+
signalTransformers = {
|
|
277
|
+
...SignalDefaultErrorTransformers,
|
|
278
|
+
...this.transformers
|
|
279
|
+
};
|
|
280
|
+
constructor() {
|
|
281
|
+
effect(() => {
|
|
282
|
+
const state = this.resolveFieldState();
|
|
283
|
+
if (state === null || state.pending()) {
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
if (state.valid() || (!state.touched() && !state.dirty())) {
|
|
287
|
+
this.display.setError("", {});
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
for (const error of this.resolveErrors(state.errors())) {
|
|
291
|
+
const resolved = resolveSignalFormError(error, this.signalTransformers);
|
|
292
|
+
if (resolved.direct) {
|
|
293
|
+
this.display.setErrorText(resolved.text);
|
|
294
|
+
continue;
|
|
170
295
|
}
|
|
171
|
-
|
|
296
|
+
this.display.setError(resolved.text, resolved.params);
|
|
172
297
|
}
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
resolveFieldState() {
|
|
301
|
+
const fieldInput = this.field();
|
|
302
|
+
if (fieldInput) {
|
|
303
|
+
return fieldInput();
|
|
173
304
|
}
|
|
174
|
-
|
|
175
|
-
|
|
305
|
+
const formFieldDirective = this.formFieldDirective();
|
|
306
|
+
if (formFieldDirective) {
|
|
307
|
+
return formFieldDirective.state();
|
|
176
308
|
}
|
|
177
|
-
|
|
178
|
-
|
|
309
|
+
const ngControl = this.formField._control?.ngControl;
|
|
310
|
+
if (ngControl?.field) {
|
|
311
|
+
return ngControl.field();
|
|
179
312
|
}
|
|
180
|
-
|
|
313
|
+
return null;
|
|
181
314
|
}
|
|
182
|
-
|
|
183
|
-
|
|
315
|
+
resolveErrors(stateErrors) {
|
|
316
|
+
const formFieldDirective = this.formFieldDirective();
|
|
317
|
+
if (formFieldDirective) {
|
|
318
|
+
return formFieldDirective.errors();
|
|
319
|
+
}
|
|
320
|
+
return stateErrors;
|
|
321
|
+
}
|
|
322
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: NiceSignalFormFieldErrorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
323
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "22.0.0", type: NiceSignalFormFieldErrorDirective, isStandalone: true, selector: "[niceSignalFormFieldError]", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "formFieldDirective", first: true, predicate: FormField, descendants: true, isSignal: true }], ngImport: i0 });
|
|
184
324
|
}
|
|
185
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type:
|
|
325
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: NiceSignalFormFieldErrorDirective, decorators: [{
|
|
186
326
|
type: Directive,
|
|
187
|
-
args: [{ selector: "[
|
|
188
|
-
}] });
|
|
327
|
+
args: [{ selector: "[niceSignalFormFieldError]", standalone: true }]
|
|
328
|
+
}], ctorParameters: () => [], propDecorators: { field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: false }] }], formFieldDirective: [{ type: i0.ContentChild, args: [i0.forwardRef(() => FormField), { ...{ descendants: true }, isSignal: true }] }] } });
|
|
189
329
|
|
|
190
330
|
function provideFormFieldError(options) {
|
|
191
331
|
return [
|
|
@@ -193,7 +333,8 @@ function provideFormFieldError(options) {
|
|
|
193
333
|
provide: NICE_FORM_FIELD_ERROR_TRANSFORMERS,
|
|
194
334
|
useValue: {
|
|
195
335
|
...DefaultErrorTransformers,
|
|
196
|
-
...options.errorTransformers
|
|
336
|
+
...options.errorTransformers,
|
|
337
|
+
...options.signalErrorTransformers
|
|
197
338
|
}
|
|
198
339
|
},
|
|
199
340
|
{
|
|
@@ -207,5 +348,5 @@ function provideFormFieldError(options) {
|
|
|
207
348
|
* Generated bundle index. Do not edit.
|
|
208
349
|
*/
|
|
209
350
|
|
|
210
|
-
export { DefaultErrorTransformers, LengthErrorTransformer, MaskErrorTransformer, MaxErrorTransformer, MinErrorTransformer, NiceFormErrorComponent, NiceFormFieldErrorDirective, PatternErrorTransformer, provideFormFieldError };
|
|
351
|
+
export { DefaultErrorTransformers, LengthErrorTransformer, MaskErrorTransformer, MaxErrorTransformer, MinErrorTransformer, NiceFormErrorComponent, NiceFormFieldErrorDirective, NiceSignalFormFieldErrorDirective, PatternErrorTransformer, provideFormFieldError };
|
|
211
352
|
//# sourceMappingURL=recursyve-ngx-material-components-form-field-error.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recursyve-ngx-material-components-form-field-error.mjs","sources":["../../../src/material-components/form-field-error/error-transformer.ts","../../../src/material-components/form-field-error/form-field-error.ts","../../../src/material-components/form-field-error/constant.ts","../../../src/material-components/form-field-error/form-field-error.directive.ts","../../../src/material-components/form-field-error/provider.ts","../../../src/material-components/form-field-error/recursyve-ngx-material-components-form-field-error.ts"],"sourcesContent":["import { ValidationErrors } from \"@angular/forms\";\n\nexport type TransformedError = { key: string; params?: Record<string, string> };\nexport type ErrorTransformer = (error: string, details: ValidationErrors) => TransformedError;\nexport type ErrorTransformers = Record<string, ErrorTransformer>;\n\nexport const PatternErrorTransformer: ErrorTransformer = (error: string, details: ValidationErrors) => {\n if (details[\"requiredPattern\"]) {\n return {\n key: details[\"requiredPattern\"]\n }\n }\n\n return { key: error };\n};\n\nexport const MaskErrorTransformer: ErrorTransformer = (error: string, details: ValidationErrors) => {\n if (details[\"requiredMask\"]) {\n return {\n key: details[\"requiredMask\"]\n }\n }\n\n return { key: error };\n};\n\nexport const LengthErrorTransformer: ErrorTransformer = (error: string, details: ValidationErrors) => {\n return {\n key: error,\n params: {\n value: details[\"requiredLength\"]\n }\n };\n};\n\nexport const MinErrorTransformer: ErrorTransformer = (error: string, details: ValidationErrors) => {\n return {\n key: error,\n params: {\n min: details[\"min\"],\n actual: details[\"actual\"]\n }\n };\n};\n\nexport const MaxErrorTransformer: ErrorTransformer = (error: string, details: ValidationErrors) => {\n return {\n key: error,\n params: {\n max: details[\"max\"],\n actual: details[\"actual\"]\n }\n };\n};\n\nexport const DefaultErrorTransformers: ErrorTransformers = {\n pattern: PatternErrorTransformer,\n mask: MaskErrorTransformer,\n minlength: LengthErrorTransformer,\n maxlength: LengthErrorTransformer,\n min: MinErrorTransformer,\n max: MaxErrorTransformer\n};\n","import { animate, style, transition, trigger } from \"@angular/animations\";\nimport { Component, Input, ViewEncapsulation, ChangeDetectionStrategy } from \"@angular/core\";\nimport { MatError } from \"@angular/material/form-field\";\n\n@Component({\n selector: \"nice-form-field-error\",\n template: `\n @if (message) {\n <div [@animation]=\"increment\">\n <mat-error>{{ message }}</mat-error>\n </div>\n }\n `,\n styleUrls: [\"./form-field-error.scss\"],\n animations: [\n trigger(\"animation\", [\n transition(\":increment\", [style({ opacity: 0 }), animate(\"200ms ease-in\", style({ opacity: 1 }))]),\n transition(\":enter\", [\n style({ opacity: 0, transform: \"translateY(-1rem)\" }),\n animate(\"200ms ease-in\", style({ opacity: 1, transform: \"translateY(0)\" }))\n ]),\n transition(\":leave\", [animate(\"200ms ease-out\", style({ opacity: 0, transform: \"translateY(-1rem)\" }))])\n ])\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [\n MatError\n ]\n})\nexport class NiceFormErrorComponent {\n public message = \"\";\n public increment = 0;\n\n @Input()\n public set error(value: string) {\n if (value) {\n if (this.message !== value) {\n this.increment++;\n }\n }\n this.message = value;\n }\n}\n","import { InjectionToken } from \"@angular/core\";\n\nexport const NICE_FORM_FIELD_ERROR_TRANSFORMERS = new InjectionToken(\"nice_form_field_error_transformers\");\nexport const NICE_FORM_FIELD_ERROR_TRANSLATER = new InjectionToken(\"nice_form_field_error_translater\");\n","import {\n AfterViewInit,\n ComponentRef,\n DestroyRef,\n Directive,\n ElementRef,\n inject,\n ViewContainerRef\n} from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { AbstractControlDirective, NgControl } from \"@angular/forms\";\nimport { MatFormField } from \"@angular/material/form-field\";\nimport { NiceTranslater } from \"@recursyve/ngx-material-components/common\";\nimport { combineLatest, startWith } from \"rxjs\";\n\nimport { NiceFormErrorComponent } from \"./form-field-error\";\nimport { ErrorTransformers } from \"./error-transformer\";\nimport { NICE_FORM_FIELD_ERROR_TRANSFORMERS, NICE_FORM_FIELD_ERROR_TRANSLATER } from \"./constant\";\n\n@Directive({ selector: \"[niceFormFieldError]\", standalone: true })\nexport class NiceFormFieldErrorDirective implements AfterViewInit {\n private readonly destroyRef = inject(DestroyRef);\n private readonly elementRef = inject(ElementRef);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly formField = inject(MatFormField);\n private readonly transformers = inject<ErrorTransformers>(NICE_FORM_FIELD_ERROR_TRANSFORMERS);\n private readonly translater = inject<NiceTranslater>(NICE_FORM_FIELD_ERROR_TRANSLATER);\n\n private ref: ComponentRef<NiceFormErrorComponent> | null = null ;\n private control: NgControl | AbstractControlDirective | null = null;\n\n public onChange = () => {\n if (this.control === null || this.control.pending) {\n return;\n }\n\n if (this.control.valid || this.control.untouched) {\n this.setError(\"\", {});\n return;\n }\n\n for (const error in this.control.errors) {\n const details = this.control.errors[error];\n if (typeof details !== \"object\") {\n this.setError(`errors.${error}`, {});\n continue;\n }\n\n const transformer = this.transformers[error];\n if (!transformer) {\n this.setError(`errors.${error}`, {});\n continue;\n }\n\n const { key, params } = transformer(error, details);\n this.setError(`errors.${key}`, params ?? {});\n }\n }\n\n public ngAfterViewInit(): void {\n this.control = this.formField._control.ngControl;\n\n if (this.control !== null && this.control.statusChanges !== null) {\n combineLatest([\n this.formField._control.stateChanges,\n this.control.statusChanges.pipe(startWith(this.control.status))\n ])\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.onChange());\n }\n }\n\n public setError(text: string, params: Record<string, string>): void {\n if (!this.ref) {\n this.ref = this.viewContainerRef.createComponent(NiceFormErrorComponent);\n if (this.elementRef.nativeElement.getElementsByClassName(\"mat-mdc-form-field-subscript-wrapper\").item(0)) {\n const hint = this.elementRef.nativeElement.getElementsByClassName(\"mat-mdc-form-field-hint\").item(0);\n (this.ref.location.nativeElement as HTMLDivElement).style.position = \"absolute\";\n (this.ref.location.nativeElement as HTMLDivElement).style.top = hint ? \"16px\" : \"0\";\n\n const wrapper = this.elementRef.nativeElement\n .getElementsByClassName(\"mat-mdc-form-field-subscript-wrapper\")\n .item(0);\n if (hint) {\n wrapper.classList.add(\"override-height\");\n }\n\n wrapper.prepend(this.ref.location.nativeElement);\n }\n }\n\n if (text) {\n this.elementRef.nativeElement.classList.add(\"form-error-show\");\n } else {\n this.elementRef.nativeElement.classList.remove(\"form-error-show\");\n }\n\n this.ref.instance.error = text.length > 0 ? this.translater(text, params) : text;\n }\n}\n","import { Provider } from \"@angular/core\";\nimport { NICE_FORM_FIELD_ERROR_TRANSFORMERS, NICE_FORM_FIELD_ERROR_TRANSLATER } from \"./constant\";\nimport { NiceFormFieldErrorsOptions } from \"./options\";\nimport { DefaultErrorTransformers } from \"./error-transformer\";\n\nexport function provideFormFieldError(options: NiceFormFieldErrorsOptions): Provider[] {\n return [\n {\n provide: NICE_FORM_FIELD_ERROR_TRANSFORMERS,\n useValue: {\n ...DefaultErrorTransformers,\n ...options.errorTransformers\n }\n },\n {\n provide: NICE_FORM_FIELD_ERROR_TRANSLATER,\n ...options.translater\n }\n ];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"recursyve-ngx-material-components-form-field-error.mjs","sources":["../../../src/material-components/form-field-error/error-transformer.ts","../../../src/material-components/form-field-error/constant.ts","../../../src/material-components/form-field-error/form-field-error.ts","../../../src/material-components/form-field-error/form-field-error-display.ts","../../../src/material-components/form-field-error/form-field-error.directive.ts","../../../src/material-components/form-field-error/signal-error-transformer.ts","../../../src/material-components/form-field-error/signal-form-field-error.directive.ts","../../../src/material-components/form-field-error/provider.ts","../../../src/material-components/form-field-error/recursyve-ngx-material-components-form-field-error.ts"],"sourcesContent":["import { ValidationErrors } from \"@angular/forms\";\n\nexport type TransformedError = { key: string; params?: Record<string, string> };\nexport type ErrorTransformer = (error: string, details: ValidationErrors) => TransformedError;\nexport type ErrorTransformers = Record<string, ErrorTransformer>;\n\nexport const PatternErrorTransformer: ErrorTransformer = (error: string, details: ValidationErrors) => {\n if (details[\"requiredPattern\"]) {\n return {\n key: details[\"requiredPattern\"]\n }\n }\n\n return { key: error };\n};\n\nexport const MaskErrorTransformer: ErrorTransformer = (error: string, details: ValidationErrors) => {\n if (details[\"requiredMask\"]) {\n return {\n key: details[\"requiredMask\"]\n }\n }\n\n return { key: error };\n};\n\nexport const LengthErrorTransformer: ErrorTransformer = (error: string, details: ValidationErrors) => {\n return {\n key: error,\n params: {\n value: details[\"requiredLength\"]\n }\n };\n};\n\nexport const MinErrorTransformer: ErrorTransformer = (error: string, details: ValidationErrors) => {\n return {\n key: error,\n params: {\n min: details[\"min\"],\n actual: details[\"actual\"]\n }\n };\n};\n\nexport const MaxErrorTransformer: ErrorTransformer = (error: string, details: ValidationErrors) => {\n return {\n key: error,\n params: {\n max: details[\"max\"],\n actual: details[\"actual\"]\n }\n };\n};\n\nexport const DefaultErrorTransformers: ErrorTransformers = {\n pattern: PatternErrorTransformer,\n mask: MaskErrorTransformer,\n minlength: LengthErrorTransformer,\n maxlength: LengthErrorTransformer,\n min: MinErrorTransformer,\n max: MaxErrorTransformer\n};\n","import { InjectionToken } from \"@angular/core\";\n\nexport const NICE_FORM_FIELD_ERROR_TRANSFORMERS = new InjectionToken(\"nice_form_field_error_transformers\");\nexport const NICE_FORM_FIELD_ERROR_TRANSLATER = new InjectionToken(\"nice_form_field_error_translater\");\n","import { animate, style, transition, trigger } from \"@angular/animations\";\nimport { Component, Input, ViewEncapsulation, ChangeDetectionStrategy } from \"@angular/core\";\nimport { MatError } from \"@angular/material/form-field\";\n\n@Component({\n selector: \"nice-form-field-error\",\n template: `\n @if (message) {\n <div [@animation]=\"increment\">\n <mat-error>{{ message }}</mat-error>\n </div>\n }\n `,\n styleUrls: [\"./form-field-error.scss\"],\n animations: [\n trigger(\"animation\", [\n transition(\":increment\", [style({ opacity: 0 }), animate(\"200ms ease-in\", style({ opacity: 1 }))]),\n transition(\":enter\", [\n style({ opacity: 0, transform: \"translateY(-1rem)\" }),\n animate(\"200ms ease-in\", style({ opacity: 1, transform: \"translateY(0)\" }))\n ]),\n transition(\":leave\", [animate(\"200ms ease-out\", style({ opacity: 0, transform: \"translateY(-1rem)\" }))])\n ])\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [\n MatError\n ]\n})\nexport class NiceFormErrorComponent {\n public message = \"\";\n public increment = 0;\n\n @Input()\n public set error(value: string) {\n if (value) {\n if (this.message !== value) {\n this.increment++;\n }\n }\n this.message = value;\n }\n}\n","import { ComponentRef, ElementRef, ViewContainerRef } from \"@angular/core\";\nimport { NiceTranslater } from \"@recursyve/ngx-material-components/common\";\n\nimport { NiceFormErrorComponent } from \"./form-field-error\";\n\nexport class FormFieldErrorDisplay {\n private ref: ComponentRef<NiceFormErrorComponent> | null = null;\n\n constructor(\n private readonly elementRef: ElementRef<HTMLElement>,\n private readonly viewContainerRef: ViewContainerRef,\n private readonly translater: NiceTranslater\n ) {}\n\n public setError(text: string, params: Record<string, string>): void {\n this.ensureComponent();\n\n if (text) {\n this.elementRef.nativeElement.classList.add(\"form-error-show\");\n } else {\n this.elementRef.nativeElement.classList.remove(\"form-error-show\");\n }\n\n this.ref!.instance.error = text.length > 0 ? this.translater(text, params) : text;\n }\n\n public setErrorText(text: string): void {\n this.ensureComponent();\n\n if (text) {\n this.elementRef.nativeElement.classList.add(\"form-error-show\");\n } else {\n this.elementRef.nativeElement.classList.remove(\"form-error-show\");\n }\n\n this.ref!.instance.error = text;\n }\n\n private ensureComponent(): void {\n if (this.ref) {\n return;\n }\n\n this.ref = this.viewContainerRef.createComponent(NiceFormErrorComponent);\n const wrapper = this.elementRef.nativeElement\n .getElementsByClassName(\"mat-mdc-form-field-subscript-wrapper\")\n .item(0);\n\n if (!wrapper) {\n return;\n }\n\n const hint = this.elementRef.nativeElement.getElementsByClassName(\"mat-mdc-form-field-hint\").item(0);\n (this.ref.location.nativeElement as HTMLDivElement).style.position = \"absolute\";\n (this.ref.location.nativeElement as HTMLDivElement).style.top = hint ? \"16px\" : \"0\";\n\n if (hint) {\n wrapper.classList.add(\"override-height\");\n }\n\n wrapper.prepend(this.ref.location.nativeElement);\n }\n}\n","import {\n AfterViewInit,\n DestroyRef,\n Directive,\n ElementRef,\n inject,\n ViewContainerRef\n} from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { AbstractControlDirective, NgControl } from \"@angular/forms\";\nimport { MatFormField } from \"@angular/material/form-field\";\nimport { NiceTranslater } from \"@recursyve/ngx-material-components/common\";\nimport { combineLatest, startWith } from \"rxjs\";\n\nimport { ErrorTransformers } from \"./error-transformer\";\nimport { NICE_FORM_FIELD_ERROR_TRANSFORMERS, NICE_FORM_FIELD_ERROR_TRANSLATER } from \"./constant\";\nimport { FormFieldErrorDisplay } from \"./form-field-error-display\";\n\n@Directive({ selector: \"[niceFormFieldError]\", standalone: true })\nexport class NiceFormFieldErrorDirective implements AfterViewInit {\n private readonly destroyRef = inject(DestroyRef);\n private readonly elementRef = inject(ElementRef);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly formField = inject(MatFormField);\n private readonly transformers = inject<ErrorTransformers>(NICE_FORM_FIELD_ERROR_TRANSFORMERS);\n private readonly translater = inject<NiceTranslater>(NICE_FORM_FIELD_ERROR_TRANSLATER);\n\n private readonly display = new FormFieldErrorDisplay(this.elementRef, this.viewContainerRef, this.translater);\n private control: NgControl | AbstractControlDirective | null = null;\n\n public onChange = () => {\n if (this.control === null || this.control.pending) {\n return;\n }\n\n if (this.control.valid || this.control.untouched) {\n this.display.setError(\"\", {});\n return;\n }\n\n for (const error in this.control.errors) {\n const details = this.control.errors[error];\n if (typeof details !== \"object\") {\n this.display.setError(`errors.${error}`, {});\n continue;\n }\n\n const transformer = this.transformers[error];\n if (!transformer) {\n this.display.setError(`errors.${error}`, {});\n continue;\n }\n\n const { key, params } = transformer(error, details);\n this.display.setError(`errors.${key}`, params ?? {});\n }\n }\n\n public ngAfterViewInit(): void {\n this.control = this.formField._control.ngControl;\n\n if (this.control !== null && this.control.statusChanges !== null) {\n combineLatest([\n this.formField._control.stateChanges,\n this.control.statusChanges.pipe(startWith(this.control.status))\n ])\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.onChange());\n }\n }\n\n}\n","import { ValidationError } from \"@angular/forms/signals\";\nimport { ValidationErrors } from \"@angular/forms\";\n\nimport { DefaultErrorTransformers, ErrorTransformers } from \"./error-transformer\";\n\nconst SIGNAL_TO_REACTIVE_ERROR_KEY: Record<string, string> = {\n minLength: \"minlength\",\n maxLength: \"maxlength\"\n};\n\nfunction signalErrorToValidationErrors(error: ValidationError.WithFieldTree): ValidationErrors {\n const details = error as ValidationErrors;\n\n switch (error.kind) {\n case \"minLength\":\n return { requiredLength: details[\"minLength\"] };\n case \"maxLength\":\n return { requiredLength: details[\"maxLength\"] };\n case \"pattern\":\n return { requiredPattern: String(details[\"pattern\"] ?? \"\") };\n default:\n return details;\n }\n}\n\nexport const SignalDefaultErrorTransformers: ErrorTransformers = {\n ...DefaultErrorTransformers,\n minLength: (_, details) => DefaultErrorTransformers[\"minlength\"](\"minlength\", details),\n maxLength: (_, details) => DefaultErrorTransformers[\"maxlength\"](\"maxlength\", details)\n};\n\nexport function resolveSignalFormError(\n error: ValidationError.WithFieldTree,\n transformers: ErrorTransformers\n): { text: string; params: Record<string, string>; direct?: boolean } {\n if (error.message) {\n return { text: error.message, params: {}, direct: true };\n }\n\n const reactiveKey = SIGNAL_TO_REACTIVE_ERROR_KEY[error.kind] ?? error.kind;\n const hasCustomTransformer = Object.hasOwn(transformers, error.kind);\n const transformer = hasCustomTransformer\n ? transformers[error.kind]\n : transformers[reactiveKey];\n\n if (!transformer) {\n return { text: `errors.${reactiveKey}`, params: {} };\n }\n\n const details = hasCustomTransformer\n ? (error as ValidationErrors)\n : signalErrorToValidationErrors(error);\n\n if (typeof details !== \"object\") {\n return { text: `errors.${reactiveKey}`, params: {} };\n }\n\n const { key, params } = transformer(reactiveKey, details);\n return { text: `errors.${key}`, params: (params ?? {}) as Record<string, string> };\n}\n","import { contentChild, Directive, effect, ElementRef, inject, input, ViewContainerRef } from \"@angular/core\";\nimport { Field, FormField } from \"@angular/forms/signals\";\nimport { MatFormField } from \"@angular/material/form-field\";\nimport { NiceTranslater } from \"@recursyve/ngx-material-components/common\";\n\nimport { NICE_FORM_FIELD_ERROR_TRANSFORMERS, NICE_FORM_FIELD_ERROR_TRANSLATER } from \"./constant\";\nimport { ErrorTransformers } from \"./error-transformer\";\nimport { FormFieldErrorDisplay } from \"./form-field-error-display\";\nimport { resolveSignalFormError, SignalDefaultErrorTransformers } from \"./signal-error-transformer\";\n\n@Directive({ selector: \"[niceSignalFormFieldError]\", standalone: true })\nexport class NiceSignalFormFieldErrorDirective {\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly formField = inject(MatFormField);\n private readonly transformers = inject<ErrorTransformers>(NICE_FORM_FIELD_ERROR_TRANSFORMERS);\n private readonly translater = inject<NiceTranslater>(NICE_FORM_FIELD_ERROR_TRANSLATER);\n private readonly viewContainerRef = inject(ViewContainerRef);\n\n /**\n * The signal form field to watch. When omitted, the directive resolves the `[formField]`\n * binding from a descendant control inside the `mat-form-field`.\n */\n public readonly field = input<Field<unknown>>();\n\n private readonly formFieldDirective = contentChild(FormField, { descendants: true });\n private readonly display = new FormFieldErrorDisplay(this.elementRef, this.viewContainerRef, this.translater);\n private readonly signalTransformers: ErrorTransformers = {\n ...SignalDefaultErrorTransformers,\n ...this.transformers\n };\n\n constructor() {\n effect(() => {\n const state = this.resolveFieldState();\n if (state === null || state.pending()) {\n return;\n }\n\n if (state.valid() || (!state.touched() && !state.dirty())) {\n this.display.setError(\"\", {});\n return;\n }\n\n for (const error of this.resolveErrors(state.errors())) {\n const resolved = resolveSignalFormError(error, this.signalTransformers);\n\n if (resolved.direct) {\n this.display.setErrorText(resolved.text);\n continue;\n }\n\n this.display.setError(resolved.text, resolved.params);\n }\n });\n }\n\n private resolveFieldState() {\n const fieldInput = this.field();\n if (fieldInput) {\n return fieldInput();\n }\n\n const formFieldDirective = this.formFieldDirective();\n if (formFieldDirective) {\n return formFieldDirective.state();\n }\n\n const ngControl = this.formField._control?.ngControl as { field?: Field<unknown> } | null;\n if (ngControl?.field) {\n return ngControl.field();\n }\n\n return null;\n }\n\n private resolveErrors(stateErrors: ReturnType<ReturnType<Field<unknown>>[\"errors\"]>) {\n const formFieldDirective = this.formFieldDirective();\n if (formFieldDirective) {\n return formFieldDirective.errors();\n }\n\n return stateErrors;\n }\n}\n","import { Provider } from \"@angular/core\";\nimport { NICE_FORM_FIELD_ERROR_TRANSFORMERS, NICE_FORM_FIELD_ERROR_TRANSLATER } from \"./constant\";\nimport { NiceFormFieldErrorsOptions } from \"./options\";\nimport { DefaultErrorTransformers } from \"./error-transformer\";\n\nexport function provideFormFieldError(options: NiceFormFieldErrorsOptions): Provider[] {\n return [\n {\n provide: NICE_FORM_FIELD_ERROR_TRANSFORMERS,\n useValue: {\n ...DefaultErrorTransformers,\n ...options.errorTransformers,\n ...options.signalErrorTransformers\n }\n },\n {\n provide: NICE_FORM_FIELD_ERROR_TRANSLATER,\n ...options.translater\n }\n ];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|