@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.
Files changed (23) hide show
  1. package/_sass/_override-utils.scss +31 -0
  2. package/colorpicker/_index.scss +1 -0
  3. package/colorpicker/_theme.scss +19 -0
  4. package/fesm2022/recursyve-ngx-material-components-chip-list.mjs +2 -2
  5. package/fesm2022/recursyve-ngx-material-components-chip-list.mjs.map +1 -1
  6. package/fesm2022/recursyve-ngx-material-components-colorpicker.mjs +237 -0
  7. package/fesm2022/recursyve-ngx-material-components-colorpicker.mjs.map +1 -0
  8. package/fesm2022/recursyve-ngx-material-components-dropzone.mjs +23 -7
  9. package/fesm2022/recursyve-ngx-material-components-dropzone.mjs.map +1 -1
  10. package/fesm2022/recursyve-ngx-material-components-form-field-error.mjs +174 -33
  11. package/fesm2022/recursyve-ngx-material-components-form-field-error.mjs.map +1 -1
  12. package/fesm2022/recursyve-ngx-material-components-timepicker.mjs +550 -0
  13. package/fesm2022/recursyve-ngx-material-components-timepicker.mjs.map +1 -0
  14. package/fesm2022/recursyve-ngx-material-components-typeahead.mjs +24 -12
  15. package/fesm2022/recursyve-ngx-material-components-typeahead.mjs.map +1 -1
  16. package/package.json +16 -4
  17. package/timepicker/_index.scss +1 -0
  18. package/timepicker/_theme.scss +41 -0
  19. package/types/recursyve-ngx-material-components-colorpicker.d.ts +77 -0
  20. package/types/recursyve-ngx-material-components-dropzone.d.ts +8 -1
  21. package/types/recursyve-ngx-material-components-form-field-error.d.ts +25 -3
  22. package/types/recursyve-ngx-material-components-timepicker.d.ts +99 -0
  23. 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, InjectionToken, inject, DestroyRef, ElementRef, ViewContainerRef, Directive } from '@angular/core';
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
- const NICE_FORM_FIELD_ERROR_TRANSFORMERS = new InjectionToken("nice_form_field_error_transformers");
113
- const NICE_FORM_FIELD_ERROR_TRANSLATER = new InjectionToken("nice_form_field_error_translater");
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
- ref = null;
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
- setError(text, params) {
159
- if (!this.ref) {
160
- this.ref = this.viewContainerRef.createComponent(NiceFormErrorComponent);
161
- if (this.elementRef.nativeElement.getElementsByClassName("mat-mdc-form-field-subscript-wrapper").item(0)) {
162
- const hint = this.elementRef.nativeElement.getElementsByClassName("mat-mdc-form-field-hint").item(0);
163
- this.ref.location.nativeElement.style.position = "absolute";
164
- this.ref.location.nativeElement.style.top = hint ? "16px" : "0";
165
- const wrapper = this.elementRef.nativeElement
166
- .getElementsByClassName("mat-mdc-form-field-subscript-wrapper")
167
- .item(0);
168
- if (hint) {
169
- wrapper.classList.add("override-height");
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
- wrapper.prepend(this.ref.location.nativeElement);
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
- if (text) {
175
- this.elementRef.nativeElement.classList.add("form-error-show");
305
+ const formFieldDirective = this.formFieldDirective();
306
+ if (formFieldDirective) {
307
+ return formFieldDirective.state();
176
308
  }
177
- else {
178
- this.elementRef.nativeElement.classList.remove("form-error-show");
309
+ const ngControl = this.formField._control?.ngControl;
310
+ if (ngControl?.field) {
311
+ return ngControl.field();
179
312
  }
180
- this.ref.instance.error = text.length > 0 ? this.translater(text, params) : text;
313
+ return null;
181
314
  }
182
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: NiceFormFieldErrorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
183
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.0", type: NiceFormFieldErrorDirective, isStandalone: true, selector: "[niceFormFieldError]", ngImport: i0 });
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: NiceFormFieldErrorDirective, decorators: [{
325
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: NiceSignalFormFieldErrorDirective, decorators: [{
186
326
  type: Directive,
187
- args: [{ selector: "[niceFormFieldError]", standalone: true }]
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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"}