@ng-forge/dynamic-forms-material 0.6.1 → 0.8.0-next.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.
|
@@ -65,21 +65,21 @@ function createAriaDescribedBySignal(errorsToDisplay, errorId, hintId, hasHint)
|
|
|
65
65
|
class MatCheckboxFieldComponent {
|
|
66
66
|
materialConfig = inject(MATERIAL_CONFIG, { optional: true });
|
|
67
67
|
elementRef = inject((ElementRef));
|
|
68
|
-
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : []));
|
|
69
|
-
key = input.required(...(ngDevMode ? [{ debugName: "key" }] : []));
|
|
68
|
+
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : /* istanbul ignore next */ []));
|
|
69
|
+
key = input.required(...(ngDevMode ? [{ debugName: "key" }] : /* istanbul ignore next */ []));
|
|
70
70
|
// Properties
|
|
71
|
-
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : []));
|
|
72
|
-
placeholder = input(...(ngDevMode ? [undefined, { debugName: "placeholder" }] : []));
|
|
73
|
-
className = input('', ...(ngDevMode ? [{ debugName: "className" }] : []));
|
|
74
|
-
tabIndex = input(...(ngDevMode ? [undefined, { debugName: "tabIndex" }] : []));
|
|
75
|
-
props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : []));
|
|
76
|
-
meta = input(...(ngDevMode ? [undefined, { debugName: "meta" }] : []));
|
|
77
|
-
validationMessages = input(...(ngDevMode ? [undefined, { debugName: "validationMessages" }] : []));
|
|
78
|
-
defaultValidationMessages = input(...(ngDevMode ? [undefined, { debugName: "defaultValidationMessages" }] : []));
|
|
79
|
-
effectiveDisableRipple = computed(() => this.props()?.disableRipple ?? this.materialConfig?.disableRipple ?? false, ...(ngDevMode ? [{ debugName: "effectiveDisableRipple" }] : []));
|
|
71
|
+
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
|
|
72
|
+
placeholder = input(...(ngDevMode ? [undefined, { debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
73
|
+
className = input('', ...(ngDevMode ? [{ debugName: "className" }] : /* istanbul ignore next */ []));
|
|
74
|
+
tabIndex = input(...(ngDevMode ? [undefined, { debugName: "tabIndex" }] : /* istanbul ignore next */ []));
|
|
75
|
+
props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : /* istanbul ignore next */ []));
|
|
76
|
+
meta = input(...(ngDevMode ? [undefined, { debugName: "meta" }] : /* istanbul ignore next */ []));
|
|
77
|
+
validationMessages = input(...(ngDevMode ? [undefined, { debugName: "validationMessages" }] : /* istanbul ignore next */ []));
|
|
78
|
+
defaultValidationMessages = input(...(ngDevMode ? [undefined, { debugName: "defaultValidationMessages" }] : /* istanbul ignore next */ []));
|
|
79
|
+
effectiveDisableRipple = computed(() => this.props()?.disableRipple ?? this.materialConfig?.disableRipple ?? false, ...(ngDevMode ? [{ debugName: "effectiveDisableRipple" }] : /* istanbul ignore next */ []));
|
|
80
80
|
resolvedErrors = createResolvedErrorsSignal(this.field, this.validationMessages, this.defaultValidationMessages);
|
|
81
81
|
showErrors = shouldShowErrors(this.field);
|
|
82
|
-
errorsToDisplay = computed(() => (this.showErrors() ? this.resolvedErrors() : []), ...(ngDevMode ? [{ debugName: "errorsToDisplay" }] : []));
|
|
82
|
+
errorsToDisplay = computed(() => (this.showErrors() ? this.resolvedErrors() : []), ...(ngDevMode ? [{ debugName: "errorsToDisplay" }] : /* istanbul ignore next */ []));
|
|
83
83
|
constructor() {
|
|
84
84
|
// Apply meta attributes to the internal checkbox input
|
|
85
85
|
setupMetaTracking(this.elementRef, this.meta, {
|
|
@@ -90,18 +90,18 @@ class MatCheckboxFieldComponent {
|
|
|
90
90
|
// Accessibility
|
|
91
91
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
92
92
|
/** Unique ID for the hint element, used for aria-describedby */
|
|
93
|
-
hintId = computed(() => `${this.key()}-hint`, ...(ngDevMode ? [{ debugName: "hintId" }] : []));
|
|
93
|
+
hintId = computed(() => `${this.key()}-hint`, ...(ngDevMode ? [{ debugName: "hintId" }] : /* istanbul ignore next */ []));
|
|
94
94
|
/** Base ID for error elements, used for aria-describedby */
|
|
95
|
-
errorId = computed(() => `${this.key()}-error`, ...(ngDevMode ? [{ debugName: "errorId" }] : []));
|
|
95
|
+
errorId = computed(() => `${this.key()}-error`, ...(ngDevMode ? [{ debugName: "errorId" }] : /* istanbul ignore next */ []));
|
|
96
96
|
/** aria-invalid: true when field is invalid AND touched, false otherwise */
|
|
97
97
|
ariaInvalid = computed(() => {
|
|
98
98
|
const fieldState = this.field()();
|
|
99
99
|
return fieldState.invalid() && fieldState.touched();
|
|
100
|
-
}, ...(ngDevMode ? [{ debugName: "ariaInvalid" }] : []));
|
|
100
|
+
}, ...(ngDevMode ? [{ debugName: "ariaInvalid" }] : /* istanbul ignore next */ []));
|
|
101
101
|
/** aria-required: true if field is required, null otherwise (to remove attribute) */
|
|
102
102
|
ariaRequired = computed(() => {
|
|
103
103
|
return this.field()().required?.() === true ? true : null;
|
|
104
|
-
}, ...(ngDevMode ? [{ debugName: "ariaRequired" }] : []));
|
|
104
|
+
}, ...(ngDevMode ? [{ debugName: "ariaRequired" }] : /* istanbul ignore next */ []));
|
|
105
105
|
/** aria-describedby: links to hint and error messages for screen readers */
|
|
106
106
|
ariaDescribedBy = createAriaDescribedBySignal(this.errorsToDisplay, this.errorId, this.hintId, () => !!this.props()?.hint);
|
|
107
107
|
/**
|
|
@@ -144,8 +144,8 @@ class MatCheckboxFieldComponent {
|
|
|
144
144
|
}
|
|
145
145
|
}
|
|
146
146
|
});
|
|
147
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
148
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
147
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: MatCheckboxFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
148
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: MatCheckboxFieldComponent, isStandalone: true, selector: "df-mat-checkbox", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, meta: { classPropertyName: "meta", publicName: "meta", isSignal: true, isRequired: false, transformFunction: null }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "className()", "id": "`${key()}`", "attr.data-testid": "key()", "attr.hidden": "field()().hidden() || null" } }, ngImport: i0, template: `
|
|
149
149
|
@let f = field();
|
|
150
150
|
@let checkboxId = key() + '-checkbox';
|
|
151
151
|
|
|
@@ -171,7 +171,7 @@ class MatCheckboxFieldComponent {
|
|
|
171
171
|
}
|
|
172
172
|
`, isInline: true, styles: [":host{--df-field-gap: .5rem;--df-label-font-weight: 500;--df-label-color: inherit;--df-hint-color: rgba(0, 0, 0, .6);--df-hint-font-size: .875rem;--df-error-color: #f44336;--df-error-font-size: .875rem;display:block;width:100%}:host([hidden]){display:none!important}.df-mat-field{display:flex;flex-direction:column;gap:var(--df-field-gap);width:100%}.df-mat-label{font-weight:var(--df-label-font-weight);color:var(--df-label-color)}.df-mat-hint{color:var(--df-hint-color);font-size:var(--df-hint-font-size)}.df-mat-error{color:var(--df-error-color);font-size:var(--df-error-font-size)}\n"], dependencies: [{ kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: FormField, selector: "[formField]", inputs: ["formField"], exportAs: ["formField"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
173
173
|
}
|
|
174
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
174
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: MatCheckboxFieldComponent, decorators: [{
|
|
175
175
|
type: Component,
|
|
176
176
|
args: [{ selector: 'df-mat-checkbox', imports: [MatCheckbox, FormField, MatError, DynamicTextPipe, AsyncPipe], template: `
|
|
177
177
|
@let f = field();
|
|
@@ -213,51 +213,58 @@ var matCheckbox_component = /*#__PURE__*/Object.freeze({
|
|
|
213
213
|
class MatDatepickerFieldComponent {
|
|
214
214
|
materialConfig = inject(MATERIAL_CONFIG, { optional: true });
|
|
215
215
|
elementRef = inject((ElementRef));
|
|
216
|
-
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : []));
|
|
217
|
-
key = input.required(...(ngDevMode ? [{ debugName: "key" }] : []));
|
|
216
|
+
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : /* istanbul ignore next */ []));
|
|
217
|
+
key = input.required(...(ngDevMode ? [{ debugName: "key" }] : /* istanbul ignore next */ []));
|
|
218
218
|
constructor() {
|
|
219
219
|
setupMetaTracking(this.elementRef, this.meta, { selector: 'input' });
|
|
220
220
|
}
|
|
221
|
-
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : []));
|
|
222
|
-
placeholder = input(...(ngDevMode ? [undefined, { debugName: "placeholder" }] : []));
|
|
223
|
-
className = input('', ...(ngDevMode ? [{ debugName: "className" }] : []));
|
|
224
|
-
tabIndex = input(...(ngDevMode ? [undefined, { debugName: "tabIndex" }] : []));
|
|
225
|
-
minDate = input(null, ...(ngDevMode ? [{ debugName: "minDate" }] : []));
|
|
226
|
-
maxDate = input(null, ...(ngDevMode ? [{ debugName: "maxDate" }] : []));
|
|
227
|
-
startAt = input(null, ...(ngDevMode ? [{ debugName: "startAt" }] : []));
|
|
228
|
-
props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : []));
|
|
229
|
-
meta = input(...(ngDevMode ? [undefined, { debugName: "meta" }] : []));
|
|
230
|
-
validationMessages = input(...(ngDevMode ? [undefined, { debugName: "validationMessages" }] : []));
|
|
231
|
-
defaultValidationMessages = input(...(ngDevMode ? [undefined, { debugName: "defaultValidationMessages" }] : []));
|
|
232
|
-
effectiveAppearance = computed(() => this.props()?.appearance ?? this.materialConfig?.appearance ?? 'outline', ...(ngDevMode ? [{ debugName: "effectiveAppearance" }] : []));
|
|
233
|
-
effectiveSubscriptSizing = computed(() => this.props()?.subscriptSizing ?? this.materialConfig?.subscriptSizing ?? 'dynamic', ...(ngDevMode ? [{ debugName: "effectiveSubscriptSizing" }] : []));
|
|
221
|
+
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
|
|
222
|
+
placeholder = input(...(ngDevMode ? [undefined, { debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
223
|
+
className = input('', ...(ngDevMode ? [{ debugName: "className" }] : /* istanbul ignore next */ []));
|
|
224
|
+
tabIndex = input(...(ngDevMode ? [undefined, { debugName: "tabIndex" }] : /* istanbul ignore next */ []));
|
|
225
|
+
minDate = input(null, ...(ngDevMode ? [{ debugName: "minDate" }] : /* istanbul ignore next */ []));
|
|
226
|
+
maxDate = input(null, ...(ngDevMode ? [{ debugName: "maxDate" }] : /* istanbul ignore next */ []));
|
|
227
|
+
startAt = input(null, ...(ngDevMode ? [{ debugName: "startAt" }] : /* istanbul ignore next */ []));
|
|
228
|
+
props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : /* istanbul ignore next */ []));
|
|
229
|
+
meta = input(...(ngDevMode ? [undefined, { debugName: "meta" }] : /* istanbul ignore next */ []));
|
|
230
|
+
validationMessages = input(...(ngDevMode ? [undefined, { debugName: "validationMessages" }] : /* istanbul ignore next */ []));
|
|
231
|
+
defaultValidationMessages = input(...(ngDevMode ? [undefined, { debugName: "defaultValidationMessages" }] : /* istanbul ignore next */ []));
|
|
232
|
+
effectiveAppearance = computed(() => this.props()?.appearance ?? this.materialConfig?.appearance ?? 'outline', ...(ngDevMode ? [{ debugName: "effectiveAppearance" }] : /* istanbul ignore next */ []));
|
|
233
|
+
effectiveSubscriptSizing = computed(() => this.props()?.subscriptSizing ?? this.materialConfig?.subscriptSizing ?? 'dynamic', ...(ngDevMode ? [{ debugName: "effectiveSubscriptSizing" }] : /* istanbul ignore next */ []));
|
|
234
|
+
effectiveFloatLabel = computed(() => this.props()?.floatLabel ?? this.materialConfig?.floatLabel ?? 'auto', ...(ngDevMode ? [{ debugName: "effectiveFloatLabel" }] : /* istanbul ignore next */ []));
|
|
235
|
+
effectiveHideRequiredMarker = computed(() => this.props()?.hideRequiredMarker ?? this.materialConfig?.hideRequiredMarker ?? false, ...(ngDevMode ? [{ debugName: "effectiveHideRequiredMarker" }] : /* istanbul ignore next */ []));
|
|
234
236
|
resolvedErrors = createResolvedErrorsSignal(this.field, this.validationMessages, this.defaultValidationMessages);
|
|
235
237
|
showErrors = shouldShowErrors(this.field);
|
|
236
|
-
errorsToDisplay = computed(() => (this.showErrors() ? this.resolvedErrors() : []), ...(ngDevMode ? [{ debugName: "errorsToDisplay" }] : []));
|
|
238
|
+
errorsToDisplay = computed(() => (this.showErrors() ? this.resolvedErrors() : []), ...(ngDevMode ? [{ debugName: "errorsToDisplay" }] : /* istanbul ignore next */ []));
|
|
237
239
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
238
240
|
// Accessibility
|
|
239
241
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
240
242
|
/** Unique ID for the hint element, used for aria-describedby */
|
|
241
|
-
hintId = computed(() => `${this.key()}-hint`, ...(ngDevMode ? [{ debugName: "hintId" }] : []));
|
|
243
|
+
hintId = computed(() => `${this.key()}-hint`, ...(ngDevMode ? [{ debugName: "hintId" }] : /* istanbul ignore next */ []));
|
|
242
244
|
/** Base ID for error elements, used for aria-describedby */
|
|
243
|
-
errorId = computed(() => `${this.key()}-error`, ...(ngDevMode ? [{ debugName: "errorId" }] : []));
|
|
245
|
+
errorId = computed(() => `${this.key()}-error`, ...(ngDevMode ? [{ debugName: "errorId" }] : /* istanbul ignore next */ []));
|
|
244
246
|
/** aria-invalid: true when field is invalid AND touched, false otherwise */
|
|
245
247
|
ariaInvalid = computed(() => {
|
|
246
248
|
const fieldState = this.field()();
|
|
247
249
|
return fieldState.invalid() && fieldState.touched();
|
|
248
|
-
}, ...(ngDevMode ? [{ debugName: "ariaInvalid" }] : []));
|
|
250
|
+
}, ...(ngDevMode ? [{ debugName: "ariaInvalid" }] : /* istanbul ignore next */ []));
|
|
249
251
|
/** aria-required: true if field is required, null otherwise (to remove attribute) */
|
|
250
252
|
ariaRequired = computed(() => {
|
|
251
253
|
return this.field()().required?.() === true ? true : null;
|
|
252
|
-
}, ...(ngDevMode ? [{ debugName: "ariaRequired" }] : []));
|
|
254
|
+
}, ...(ngDevMode ? [{ debugName: "ariaRequired" }] : /* istanbul ignore next */ []));
|
|
253
255
|
/** aria-describedby: links to hint and error messages for screen readers */
|
|
254
256
|
ariaDescribedBy = createAriaDescribedBySignal(this.errorsToDisplay, this.errorId, this.hintId, () => !!this.props()?.hint);
|
|
255
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
256
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
257
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: MatDatepickerFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
258
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: MatDatepickerFieldComponent, isStandalone: true, selector: "df-mat-datepicker", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null }, startAt: { classPropertyName: "startAt", publicName: "startAt", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, meta: { classPropertyName: "meta", publicName: "meta", isSignal: true, isRequired: false, transformFunction: null }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "id": "`${key()}`", "class": "className()", "attr.data-testid": "key()", "attr.hidden": "field()().hidden() || null" } }, providers: [provideNativeDateAdapter()], ngImport: i0, template: `
|
|
257
259
|
@let f = field();
|
|
258
260
|
@let inputId = key() + '-input';
|
|
259
261
|
|
|
260
|
-
<mat-form-field
|
|
262
|
+
<mat-form-field
|
|
263
|
+
[appearance]="effectiveAppearance()"
|
|
264
|
+
[subscriptSizing]="effectiveSubscriptSizing()"
|
|
265
|
+
[floatLabel]="effectiveFloatLabel()"
|
|
266
|
+
[hideRequiredMarker]="effectiveHideRequiredMarker()"
|
|
267
|
+
>
|
|
261
268
|
@if (label(); as label) {
|
|
262
269
|
<mat-label>{{ label | dynamicText | async }}</mat-label>
|
|
263
270
|
}
|
|
@@ -287,7 +294,7 @@ class MatDatepickerFieldComponent {
|
|
|
287
294
|
</mat-form-field>
|
|
288
295
|
`, isInline: true, styles: [":host{--df-field-gap: .5rem;--df-label-font-weight: 500;--df-label-color: inherit;--df-hint-color: rgba(0, 0, 0, .6);--df-hint-font-size: .875rem;--df-error-color: #f44336;--df-error-font-size: .875rem;display:block;width:100%}:host([hidden]){display:none!important}.df-mat-field{display:flex;flex-direction:column;gap:var(--df-field-gap);width:100%}.df-mat-label{font-weight:var(--df-label-font-weight);color:var(--df-label-color)}.df-mat-hint{color:var(--df-hint-color);font-size:var(--df-hint-font-size)}.df-mat-error{color:var(--df-error-color);font-size:var(--df-error-font-size)}\n", "mat-form-field{width:100%}\n"], dependencies: [{ kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "component", type: MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: FormField, selector: "[formField]", inputs: ["formField"], exportAs: ["formField"] }, { kind: "directive", type: MatError$1, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
289
296
|
}
|
|
290
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
297
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: MatDatepickerFieldComponent, decorators: [{
|
|
291
298
|
type: Component,
|
|
292
299
|
args: [{ selector: 'df-mat-datepicker', imports: [
|
|
293
300
|
MatFormField,
|
|
@@ -311,7 +318,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
311
318
|
@let f = field();
|
|
312
319
|
@let inputId = key() + '-input';
|
|
313
320
|
|
|
314
|
-
<mat-form-field
|
|
321
|
+
<mat-form-field
|
|
322
|
+
[appearance]="effectiveAppearance()"
|
|
323
|
+
[subscriptSizing]="effectiveSubscriptSizing()"
|
|
324
|
+
[floatLabel]="effectiveFloatLabel()"
|
|
325
|
+
[hideRequiredMarker]="effectiveHideRequiredMarker()"
|
|
326
|
+
>
|
|
315
327
|
@if (label(); as label) {
|
|
316
328
|
<mat-label>{{ label | dynamicText | async }}</mat-label>
|
|
317
329
|
}
|
|
@@ -350,16 +362,16 @@ var matDatepicker_component = /*#__PURE__*/Object.freeze({
|
|
|
350
362
|
class MatInputFieldComponent {
|
|
351
363
|
materialConfig = inject(MATERIAL_CONFIG, { optional: true });
|
|
352
364
|
elementRef = inject((ElementRef));
|
|
353
|
-
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : []));
|
|
354
|
-
key = input.required(...(ngDevMode ? [{ debugName: "key" }] : []));
|
|
355
|
-
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : []));
|
|
356
|
-
placeholder = input(...(ngDevMode ? [undefined, { debugName: "placeholder" }] : []));
|
|
357
|
-
className = input('', ...(ngDevMode ? [{ debugName: "className" }] : []));
|
|
358
|
-
tabIndex = input(...(ngDevMode ? [undefined, { debugName: "tabIndex" }] : []));
|
|
359
|
-
props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : []));
|
|
360
|
-
meta = input(...(ngDevMode ? [undefined, { debugName: "meta" }] : []));
|
|
361
|
-
validationMessages = input(...(ngDevMode ? [undefined, { debugName: "validationMessages" }] : []));
|
|
362
|
-
defaultValidationMessages = input(...(ngDevMode ? [undefined, { debugName: "defaultValidationMessages" }] : []));
|
|
365
|
+
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : /* istanbul ignore next */ []));
|
|
366
|
+
key = input.required(...(ngDevMode ? [{ debugName: "key" }] : /* istanbul ignore next */ []));
|
|
367
|
+
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
|
|
368
|
+
placeholder = input(...(ngDevMode ? [undefined, { debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
369
|
+
className = input('', ...(ngDevMode ? [{ debugName: "className" }] : /* istanbul ignore next */ []));
|
|
370
|
+
tabIndex = input(...(ngDevMode ? [undefined, { debugName: "tabIndex" }] : /* istanbul ignore next */ []));
|
|
371
|
+
props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : /* istanbul ignore next */ []));
|
|
372
|
+
meta = input(...(ngDevMode ? [undefined, { debugName: "meta" }] : /* istanbul ignore next */ []));
|
|
373
|
+
validationMessages = input(...(ngDevMode ? [undefined, { debugName: "validationMessages" }] : /* istanbul ignore next */ []));
|
|
374
|
+
defaultValidationMessages = input(...(ngDevMode ? [undefined, { debugName: "defaultValidationMessages" }] : /* istanbul ignore next */ []));
|
|
363
375
|
constructor() {
|
|
364
376
|
setupMetaTracking(this.elementRef, this.meta, { selector: 'input' });
|
|
365
377
|
}
|
|
@@ -368,12 +380,12 @@ class MatInputFieldComponent {
|
|
|
368
380
|
* Used to imperatively sync the readonly attribute since Angular Signal Forms'
|
|
369
381
|
* [field] directive doesn't sync FieldState.readonly() to the DOM.
|
|
370
382
|
*/
|
|
371
|
-
inputRef = viewChild('inputRef', ...(ngDevMode ? [{ debugName: "inputRef" }] : []));
|
|
383
|
+
inputRef = viewChild('inputRef', ...(ngDevMode ? [{ debugName: "inputRef" }] : /* istanbul ignore next */ []));
|
|
372
384
|
/**
|
|
373
385
|
* Computed signal that extracts the readonly state from the field.
|
|
374
386
|
* Used by the effect to reactively sync the readonly attribute to the DOM.
|
|
375
387
|
*/
|
|
376
|
-
isReadonly = computed(() => this.field()().readonly(), ...(ngDevMode ? [{ debugName: "isReadonly" }] : []));
|
|
388
|
+
isReadonly = computed(() => this.field()().readonly(), ...(ngDevMode ? [{ debugName: "isReadonly" }] : /* istanbul ignore next */ []));
|
|
377
389
|
/**
|
|
378
390
|
* Workaround: Angular Signal Forms' [field] directive does NOT sync the readonly
|
|
379
391
|
* attribute to the DOM, even though FieldState.readonly() returns the correct value.
|
|
@@ -401,35 +413,42 @@ class MatInputFieldComponent {
|
|
|
401
413
|
}
|
|
402
414
|
},
|
|
403
415
|
});
|
|
404
|
-
effectiveAppearance = computed(() => this.props()?.appearance ?? this.materialConfig?.appearance ?? 'outline', ...(ngDevMode ? [{ debugName: "effectiveAppearance" }] : []));
|
|
405
|
-
effectiveSubscriptSizing = computed(() => this.props()?.subscriptSizing ?? this.materialConfig?.subscriptSizing ?? 'dynamic', ...(ngDevMode ? [{ debugName: "effectiveSubscriptSizing" }] : []));
|
|
416
|
+
effectiveAppearance = computed(() => this.props()?.appearance ?? this.materialConfig?.appearance ?? 'outline', ...(ngDevMode ? [{ debugName: "effectiveAppearance" }] : /* istanbul ignore next */ []));
|
|
417
|
+
effectiveSubscriptSizing = computed(() => this.props()?.subscriptSizing ?? this.materialConfig?.subscriptSizing ?? 'dynamic', ...(ngDevMode ? [{ debugName: "effectiveSubscriptSizing" }] : /* istanbul ignore next */ []));
|
|
418
|
+
effectiveFloatLabel = computed(() => this.props()?.floatLabel ?? this.materialConfig?.floatLabel ?? 'auto', ...(ngDevMode ? [{ debugName: "effectiveFloatLabel" }] : /* istanbul ignore next */ []));
|
|
419
|
+
effectiveHideRequiredMarker = computed(() => this.props()?.hideRequiredMarker ?? this.materialConfig?.hideRequiredMarker ?? false, ...(ngDevMode ? [{ debugName: "effectiveHideRequiredMarker" }] : /* istanbul ignore next */ []));
|
|
406
420
|
resolvedErrors = createResolvedErrorsSignal(this.field, this.validationMessages, this.defaultValidationMessages);
|
|
407
421
|
showErrors = shouldShowErrors(this.field);
|
|
408
|
-
errorsToDisplay = computed(() => (this.showErrors() ? this.resolvedErrors() : []), ...(ngDevMode ? [{ debugName: "errorsToDisplay" }] : []));
|
|
422
|
+
errorsToDisplay = computed(() => (this.showErrors() ? this.resolvedErrors() : []), ...(ngDevMode ? [{ debugName: "errorsToDisplay" }] : /* istanbul ignore next */ []));
|
|
409
423
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
410
424
|
// Accessibility
|
|
411
425
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
412
426
|
/** Unique ID for the hint element, used for aria-describedby */
|
|
413
|
-
hintId = computed(() => `${this.key()}-hint`, ...(ngDevMode ? [{ debugName: "hintId" }] : []));
|
|
427
|
+
hintId = computed(() => `${this.key()}-hint`, ...(ngDevMode ? [{ debugName: "hintId" }] : /* istanbul ignore next */ []));
|
|
414
428
|
/** Base ID for error elements, used for aria-describedby */
|
|
415
|
-
errorId = computed(() => `${this.key()}-error`, ...(ngDevMode ? [{ debugName: "errorId" }] : []));
|
|
429
|
+
errorId = computed(() => `${this.key()}-error`, ...(ngDevMode ? [{ debugName: "errorId" }] : /* istanbul ignore next */ []));
|
|
416
430
|
/** aria-invalid: true when field is invalid AND touched, false otherwise */
|
|
417
431
|
ariaInvalid = computed(() => {
|
|
418
432
|
const fieldState = this.field()();
|
|
419
433
|
return fieldState.invalid() && fieldState.touched();
|
|
420
|
-
}, ...(ngDevMode ? [{ debugName: "ariaInvalid" }] : []));
|
|
434
|
+
}, ...(ngDevMode ? [{ debugName: "ariaInvalid" }] : /* istanbul ignore next */ []));
|
|
421
435
|
/** aria-required: true if field is required, null otherwise (to remove attribute) */
|
|
422
436
|
ariaRequired = computed(() => {
|
|
423
437
|
return this.field()().required?.() === true ? true : null;
|
|
424
|
-
}, ...(ngDevMode ? [{ debugName: "ariaRequired" }] : []));
|
|
438
|
+
}, ...(ngDevMode ? [{ debugName: "ariaRequired" }] : /* istanbul ignore next */ []));
|
|
425
439
|
/** aria-describedby: links to hint and error messages for screen readers */
|
|
426
440
|
ariaDescribedBy = createAriaDescribedBySignal(this.errorsToDisplay, this.errorId, this.hintId, () => !!this.props()?.hint);
|
|
427
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
428
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
441
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: MatInputFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
442
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: MatInputFieldComponent, isStandalone: true, selector: "df-mat-input", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, meta: { classPropertyName: "meta", publicName: "meta", isSignal: true, isRequired: false, transformFunction: null }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "id": "`${key()}`", "attr.data-testid": "key()", "class": "className()", "attr.hidden": "field()().hidden() || null" } }, viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["inputRef"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
429
443
|
@let f = field();
|
|
430
444
|
@let inputId = key() + '-input';
|
|
431
445
|
|
|
432
|
-
<mat-form-field
|
|
446
|
+
<mat-form-field
|
|
447
|
+
[appearance]="effectiveAppearance()"
|
|
448
|
+
[subscriptSizing]="effectiveSubscriptSizing()"
|
|
449
|
+
[floatLabel]="effectiveFloatLabel()"
|
|
450
|
+
[hideRequiredMarker]="effectiveHideRequiredMarker()"
|
|
451
|
+
>
|
|
433
452
|
@if (label()) {
|
|
434
453
|
<mat-label>{{ label() | dynamicText | async }}</mat-label>
|
|
435
454
|
}
|
|
@@ -453,13 +472,18 @@ class MatInputFieldComponent {
|
|
|
453
472
|
</mat-form-field>
|
|
454
473
|
`, isInline: true, styles: [":host{--df-field-gap: .5rem;--df-label-font-weight: 500;--df-label-color: inherit;--df-hint-color: rgba(0, 0, 0, .6);--df-hint-font-size: .875rem;--df-error-color: #f44336;--df-error-font-size: .875rem;display:block;width:100%}:host([hidden]){display:none!important}.df-mat-field{display:flex;flex-direction:column;gap:var(--df-field-gap);width:100%}.df-mat-label{font-weight:var(--df-label-font-weight);color:var(--df-label-color)}.df-mat-hint{color:var(--df-hint-color);font-size:var(--df-hint-font-size)}.df-mat-error{color:var(--df-error-color);font-size:var(--df-error-font-size)}\n", "mat-form-field{width:100%}\n"], dependencies: [{ kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: FormField, selector: "[formField]", inputs: ["formField"], exportAs: ["formField"] }, { kind: "directive", type: MatError$1, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
455
474
|
}
|
|
456
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
475
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: MatInputFieldComponent, decorators: [{
|
|
457
476
|
type: Component,
|
|
458
477
|
args: [{ selector: 'df-mat-input', imports: [MatFormField, MatLabel, MatInput, MatHint, FormField, MatError$1, DynamicTextPipe, AsyncPipe], template: `
|
|
459
478
|
@let f = field();
|
|
460
479
|
@let inputId = key() + '-input';
|
|
461
480
|
|
|
462
|
-
<mat-form-field
|
|
481
|
+
<mat-form-field
|
|
482
|
+
[appearance]="effectiveAppearance()"
|
|
483
|
+
[subscriptSizing]="effectiveSubscriptSizing()"
|
|
484
|
+
[floatLabel]="effectiveFloatLabel()"
|
|
485
|
+
[hideRequiredMarker]="effectiveHideRequiredMarker()"
|
|
486
|
+
>
|
|
463
487
|
@if (label()) {
|
|
464
488
|
<mat-label>{{ label() | dynamicText | async }}</mat-label>
|
|
465
489
|
}
|
|
@@ -496,19 +520,19 @@ var matInput_component = /*#__PURE__*/Object.freeze({
|
|
|
496
520
|
|
|
497
521
|
class MatMultiCheckboxFieldComponent {
|
|
498
522
|
elementRef = inject((ElementRef));
|
|
499
|
-
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : []));
|
|
500
|
-
key = input.required(...(ngDevMode ? [{ debugName: "key" }] : []));
|
|
501
|
-
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : []));
|
|
502
|
-
placeholder = input(...(ngDevMode ? [undefined, { debugName: "placeholder" }] : []));
|
|
503
|
-
className = input('', ...(ngDevMode ? [{ debugName: "className" }] : []));
|
|
504
|
-
tabIndex = input(...(ngDevMode ? [undefined, { debugName: "tabIndex" }] : []));
|
|
505
|
-
options = input([], ...(ngDevMode ? [{ debugName: "options" }] : []));
|
|
506
|
-
props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : []));
|
|
507
|
-
meta = input(...(ngDevMode ? [undefined, { debugName: "meta" }] : []));
|
|
523
|
+
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : /* istanbul ignore next */ []));
|
|
524
|
+
key = input.required(...(ngDevMode ? [{ debugName: "key" }] : /* istanbul ignore next */ []));
|
|
525
|
+
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
|
|
526
|
+
placeholder = input(...(ngDevMode ? [undefined, { debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
527
|
+
className = input('', ...(ngDevMode ? [{ debugName: "className" }] : /* istanbul ignore next */ []));
|
|
528
|
+
tabIndex = input(...(ngDevMode ? [undefined, { debugName: "tabIndex" }] : /* istanbul ignore next */ []));
|
|
529
|
+
options = input([], ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
|
|
530
|
+
props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : /* istanbul ignore next */ []));
|
|
531
|
+
meta = input(...(ngDevMode ? [undefined, { debugName: "meta" }] : /* istanbul ignore next */ []));
|
|
508
532
|
valueViewModel = linkedSignal(() => {
|
|
509
533
|
const currentValues = this.field()().value();
|
|
510
534
|
return this.options().filter((option) => currentValues.includes(option.value));
|
|
511
|
-
}, { ...(ngDevMode ? { debugName: "valueViewModel" } : {}), equal: isEqual });
|
|
535
|
+
}, { ...(ngDevMode ? { debugName: "valueViewModel" } : /* istanbul ignore next */ {}), equal: isEqual });
|
|
512
536
|
/** Computed map of checked option values for O(1) lookup in template */
|
|
513
537
|
checkedValuesMap = computed(() => {
|
|
514
538
|
const map = {};
|
|
@@ -516,7 +540,7 @@ class MatMultiCheckboxFieldComponent {
|
|
|
516
540
|
map[String(opt.value)] = true;
|
|
517
541
|
}
|
|
518
542
|
return map;
|
|
519
|
-
}, ...(ngDevMode ? [{ debugName: "checkedValuesMap" }] : []));
|
|
543
|
+
}, ...(ngDevMode ? [{ debugName: "checkedValuesMap" }] : /* istanbul ignore next */ []));
|
|
520
544
|
constructor() {
|
|
521
545
|
// Apply meta attributes to all checkbox inputs, re-apply when options change
|
|
522
546
|
setupMetaTracking(this.elementRef, this.meta, {
|
|
@@ -548,31 +572,31 @@ class MatMultiCheckboxFieldComponent {
|
|
|
548
572
|
}
|
|
549
573
|
});
|
|
550
574
|
}
|
|
551
|
-
validationMessages = input(...(ngDevMode ? [undefined, { debugName: "validationMessages" }] : []));
|
|
552
|
-
defaultValidationMessages = input(...(ngDevMode ? [undefined, { debugName: "defaultValidationMessages" }] : []));
|
|
575
|
+
validationMessages = input(...(ngDevMode ? [undefined, { debugName: "validationMessages" }] : /* istanbul ignore next */ []));
|
|
576
|
+
defaultValidationMessages = input(...(ngDevMode ? [undefined, { debugName: "defaultValidationMessages" }] : /* istanbul ignore next */ []));
|
|
553
577
|
resolvedErrors = createResolvedErrorsSignal(this.field, this.validationMessages, this.defaultValidationMessages);
|
|
554
578
|
showErrors = shouldShowErrors(this.field);
|
|
555
|
-
errorsToDisplay = computed(() => (this.showErrors() ? this.resolvedErrors() : []), ...(ngDevMode ? [{ debugName: "errorsToDisplay" }] : []));
|
|
579
|
+
errorsToDisplay = computed(() => (this.showErrors() ? this.resolvedErrors() : []), ...(ngDevMode ? [{ debugName: "errorsToDisplay" }] : /* istanbul ignore next */ []));
|
|
556
580
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
557
581
|
// Accessibility
|
|
558
582
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
559
583
|
/** Unique ID for the hint element, used for aria-describedby */
|
|
560
|
-
hintId = computed(() => `${this.key()}-hint`, ...(ngDevMode ? [{ debugName: "hintId" }] : []));
|
|
584
|
+
hintId = computed(() => `${this.key()}-hint`, ...(ngDevMode ? [{ debugName: "hintId" }] : /* istanbul ignore next */ []));
|
|
561
585
|
/** Base ID for error elements, used for aria-describedby */
|
|
562
|
-
errorId = computed(() => `${this.key()}-error`, ...(ngDevMode ? [{ debugName: "errorId" }] : []));
|
|
586
|
+
errorId = computed(() => `${this.key()}-error`, ...(ngDevMode ? [{ debugName: "errorId" }] : /* istanbul ignore next */ []));
|
|
563
587
|
/** aria-invalid: true when field is invalid AND touched, false otherwise */
|
|
564
588
|
ariaInvalid = computed(() => {
|
|
565
589
|
const fieldState = this.field()();
|
|
566
590
|
return fieldState.invalid() && fieldState.touched();
|
|
567
|
-
}, ...(ngDevMode ? [{ debugName: "ariaInvalid" }] : []));
|
|
591
|
+
}, ...(ngDevMode ? [{ debugName: "ariaInvalid" }] : /* istanbul ignore next */ []));
|
|
568
592
|
/** aria-required: true if field is required, null otherwise (to remove attribute) */
|
|
569
593
|
ariaRequired = computed(() => {
|
|
570
594
|
return this.field()().required?.() === true ? true : null;
|
|
571
|
-
}, ...(ngDevMode ? [{ debugName: "ariaRequired" }] : []));
|
|
595
|
+
}, ...(ngDevMode ? [{ debugName: "ariaRequired" }] : /* istanbul ignore next */ []));
|
|
572
596
|
/** aria-describedby: links to hint and error messages for screen readers */
|
|
573
597
|
ariaDescribedBy = createAriaDescribedBySignal(this.errorsToDisplay, this.errorId, this.hintId, () => !!this.props()?.hint);
|
|
574
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
575
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
598
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: MatMultiCheckboxFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
599
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: MatMultiCheckboxFieldComponent, isStandalone: true, selector: "df-mat-multi-checkbox", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, meta: { classPropertyName: "meta", publicName: "meta", isSignal: true, isRequired: false, transformFunction: null }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "className() || \"\"", "id": "`${key()}`", "attr.data-testid": "key()", "attr.hidden": "field()().hidden() || null" } }, ngImport: i0, template: `
|
|
576
600
|
@let f = field();
|
|
577
601
|
@let checkboxGroupId = key() + '-checkbox-group';
|
|
578
602
|
@let checked = checkedValuesMap();
|
|
@@ -609,7 +633,7 @@ class MatMultiCheckboxFieldComponent {
|
|
|
609
633
|
}
|
|
610
634
|
`, isInline: true, styles: [":host{--df-field-gap: .5rem;--df-label-font-weight: 500;--df-label-color: inherit;--df-hint-color: rgba(0, 0, 0, .6);--df-hint-font-size: .875rem;--df-error-color: #f44336;--df-error-font-size: .875rem;display:block;width:100%}:host([hidden]){display:none!important}.df-mat-field{display:flex;flex-direction:column;gap:var(--df-field-gap);width:100%}.df-mat-label{font-weight:var(--df-label-font-weight);color:var(--df-label-color)}.df-mat-hint{color:var(--df-hint-color);font-size:var(--df-hint-font-size)}.df-mat-error{color:var(--df-error-color);font-size:var(--df-error-font-size)}\n"], dependencies: [{ kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
611
635
|
}
|
|
612
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
636
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: MatMultiCheckboxFieldComponent, decorators: [{
|
|
613
637
|
type: Component,
|
|
614
638
|
args: [{ selector: 'df-mat-multi-checkbox', imports: [MatCheckbox, MatError, DynamicTextPipe, AsyncPipe], template: `
|
|
615
639
|
@let f = field();
|
|
@@ -661,20 +685,20 @@ var matMultiCheckbox_component = /*#__PURE__*/Object.freeze({
|
|
|
661
685
|
|
|
662
686
|
class MatRadioFieldComponent {
|
|
663
687
|
elementRef = inject((ElementRef));
|
|
664
|
-
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : []));
|
|
665
|
-
key = input.required(...(ngDevMode ? [{ debugName: "key" }] : []));
|
|
666
|
-
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : []));
|
|
667
|
-
placeholder = input(...(ngDevMode ? [undefined, { debugName: "placeholder" }] : []));
|
|
668
|
-
className = input('', ...(ngDevMode ? [{ debugName: "className" }] : []));
|
|
669
|
-
tabIndex = input(...(ngDevMode ? [undefined, { debugName: "tabIndex" }] : []));
|
|
670
|
-
options = input([], ...(ngDevMode ? [{ debugName: "options" }] : []));
|
|
671
|
-
props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : []));
|
|
672
|
-
meta = input(...(ngDevMode ? [undefined, { debugName: "meta" }] : []));
|
|
673
|
-
validationMessages = input(...(ngDevMode ? [undefined, { debugName: "validationMessages" }] : []));
|
|
674
|
-
defaultValidationMessages = input(...(ngDevMode ? [undefined, { debugName: "defaultValidationMessages" }] : []));
|
|
688
|
+
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : /* istanbul ignore next */ []));
|
|
689
|
+
key = input.required(...(ngDevMode ? [{ debugName: "key" }] : /* istanbul ignore next */ []));
|
|
690
|
+
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
|
|
691
|
+
placeholder = input(...(ngDevMode ? [undefined, { debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
692
|
+
className = input('', ...(ngDevMode ? [{ debugName: "className" }] : /* istanbul ignore next */ []));
|
|
693
|
+
tabIndex = input(...(ngDevMode ? [undefined, { debugName: "tabIndex" }] : /* istanbul ignore next */ []));
|
|
694
|
+
options = input([], ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
|
|
695
|
+
props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : /* istanbul ignore next */ []));
|
|
696
|
+
meta = input(...(ngDevMode ? [undefined, { debugName: "meta" }] : /* istanbul ignore next */ []));
|
|
697
|
+
validationMessages = input(...(ngDevMode ? [undefined, { debugName: "validationMessages" }] : /* istanbul ignore next */ []));
|
|
698
|
+
defaultValidationMessages = input(...(ngDevMode ? [undefined, { debugName: "defaultValidationMessages" }] : /* istanbul ignore next */ []));
|
|
675
699
|
resolvedErrors = createResolvedErrorsSignal(this.field, this.validationMessages, this.defaultValidationMessages);
|
|
676
700
|
showErrors = shouldShowErrors(this.field);
|
|
677
|
-
errorsToDisplay = computed(() => (this.showErrors() ? this.resolvedErrors() : []), ...(ngDevMode ? [{ debugName: "errorsToDisplay" }] : []));
|
|
701
|
+
errorsToDisplay = computed(() => (this.showErrors() ? this.resolvedErrors() : []), ...(ngDevMode ? [{ debugName: "errorsToDisplay" }] : /* istanbul ignore next */ []));
|
|
678
702
|
constructor() {
|
|
679
703
|
// Apply meta attributes to all radio inputs, re-apply when options change
|
|
680
704
|
setupMetaTracking(this.elementRef, this.meta, {
|
|
@@ -686,22 +710,22 @@ class MatRadioFieldComponent {
|
|
|
686
710
|
// Accessibility
|
|
687
711
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
688
712
|
/** Unique ID for the hint element, used for aria-describedby */
|
|
689
|
-
hintId = computed(() => `${this.key()}-hint`, ...(ngDevMode ? [{ debugName: "hintId" }] : []));
|
|
713
|
+
hintId = computed(() => `${this.key()}-hint`, ...(ngDevMode ? [{ debugName: "hintId" }] : /* istanbul ignore next */ []));
|
|
690
714
|
/** Base ID for error elements, used for aria-describedby */
|
|
691
|
-
errorId = computed(() => `${this.key()}-error`, ...(ngDevMode ? [{ debugName: "errorId" }] : []));
|
|
715
|
+
errorId = computed(() => `${this.key()}-error`, ...(ngDevMode ? [{ debugName: "errorId" }] : /* istanbul ignore next */ []));
|
|
692
716
|
/** aria-invalid: true when field is invalid AND touched, false otherwise */
|
|
693
717
|
ariaInvalid = computed(() => {
|
|
694
718
|
const fieldState = this.field()();
|
|
695
719
|
return fieldState.invalid() && fieldState.touched();
|
|
696
|
-
}, ...(ngDevMode ? [{ debugName: "ariaInvalid" }] : []));
|
|
720
|
+
}, ...(ngDevMode ? [{ debugName: "ariaInvalid" }] : /* istanbul ignore next */ []));
|
|
697
721
|
/** aria-required: true if field is required, null otherwise (to remove attribute) */
|
|
698
722
|
ariaRequired = computed(() => {
|
|
699
723
|
return this.field()().required?.() === true ? true : null;
|
|
700
|
-
}, ...(ngDevMode ? [{ debugName: "ariaRequired" }] : []));
|
|
724
|
+
}, ...(ngDevMode ? [{ debugName: "ariaRequired" }] : /* istanbul ignore next */ []));
|
|
701
725
|
/** aria-describedby: links to hint and error messages for screen readers */
|
|
702
726
|
ariaDescribedBy = createAriaDescribedBySignal(this.errorsToDisplay, this.errorId, this.hintId, () => !!this.props()?.hint);
|
|
703
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
704
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
727
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: MatRadioFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
728
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: MatRadioFieldComponent, isStandalone: true, selector: "df-mat-radio", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, meta: { classPropertyName: "meta", publicName: "meta", isSignal: true, isRequired: false, transformFunction: null }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "className() || \"\"", "id": "`${key()}`", "attr.data-testid": "key()", "attr.hidden": "field()().hidden() || null" } }, ngImport: i0, template: `
|
|
705
729
|
@let f = field();
|
|
706
730
|
@let radioGroupId = key() + '-radio-group';
|
|
707
731
|
|
|
@@ -735,7 +759,7 @@ class MatRadioFieldComponent {
|
|
|
735
759
|
}
|
|
736
760
|
`, isInline: true, styles: [":host{--df-field-gap: .5rem;--df-label-font-weight: 500;--df-label-color: inherit;--df-hint-color: rgba(0, 0, 0, .6);--df-hint-font-size: .875rem;--df-error-color: #f44336;--df-error-font-size: .875rem;display:block;width:100%}:host([hidden]){display:none!important}.df-mat-field{display:flex;flex-direction:column;gap:var(--df-field-gap);width:100%}.df-mat-label{font-weight:var(--df-label-font-weight);color:var(--df-label-color)}.df-mat-hint{color:var(--df-hint-color);font-size:var(--df-hint-font-size)}.df-mat-error{color:var(--df-error-color);font-size:var(--df-error-font-size)}\n"], dependencies: [{ kind: "directive", type: MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "directive", type: FormField, selector: "[formField]", inputs: ["formField"], exportAs: ["formField"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
737
761
|
}
|
|
738
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
762
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: MatRadioFieldComponent, decorators: [{
|
|
739
763
|
type: Component,
|
|
740
764
|
args: [{ selector: 'df-mat-radio', imports: [MatRadioGroup, MatRadioButton, FormField, MatError, DynamicTextPipe, AsyncPipe], template: `
|
|
741
765
|
@let f = field();
|
|
@@ -785,22 +809,24 @@ var matRadio_component = /*#__PURE__*/Object.freeze({
|
|
|
785
809
|
class MatSelectFieldComponent {
|
|
786
810
|
materialConfig = inject(MATERIAL_CONFIG, { optional: true });
|
|
787
811
|
elementRef = inject((ElementRef));
|
|
788
|
-
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : []));
|
|
789
|
-
key = input.required(...(ngDevMode ? [{ debugName: "key" }] : []));
|
|
790
|
-
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : []));
|
|
791
|
-
placeholder = input(...(ngDevMode ? [undefined, { debugName: "placeholder" }] : []));
|
|
792
|
-
className = input('', ...(ngDevMode ? [{ debugName: "className" }] : []));
|
|
793
|
-
tabIndex = input(...(ngDevMode ? [undefined, { debugName: "tabIndex" }] : []));
|
|
794
|
-
options = input([], ...(ngDevMode ? [{ debugName: "options" }] : []));
|
|
795
|
-
props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : []));
|
|
796
|
-
meta = input(...(ngDevMode ? [undefined, { debugName: "meta" }] : []));
|
|
797
|
-
validationMessages = input(...(ngDevMode ? [undefined, { debugName: "validationMessages" }] : []));
|
|
798
|
-
defaultValidationMessages = input(...(ngDevMode ? [undefined, { debugName: "defaultValidationMessages" }] : []));
|
|
799
|
-
effectiveAppearance = computed(() => this.props()?.appearance ?? this.materialConfig?.appearance ?? 'outline', ...(ngDevMode ? [{ debugName: "effectiveAppearance" }] : []));
|
|
800
|
-
effectiveSubscriptSizing = computed(() => this.props()?.subscriptSizing ?? this.materialConfig?.subscriptSizing ?? 'dynamic', ...(ngDevMode ? [{ debugName: "effectiveSubscriptSizing" }] : []));
|
|
812
|
+
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : /* istanbul ignore next */ []));
|
|
813
|
+
key = input.required(...(ngDevMode ? [{ debugName: "key" }] : /* istanbul ignore next */ []));
|
|
814
|
+
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
|
|
815
|
+
placeholder = input(...(ngDevMode ? [undefined, { debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
816
|
+
className = input('', ...(ngDevMode ? [{ debugName: "className" }] : /* istanbul ignore next */ []));
|
|
817
|
+
tabIndex = input(...(ngDevMode ? [undefined, { debugName: "tabIndex" }] : /* istanbul ignore next */ []));
|
|
818
|
+
options = input([], ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
|
|
819
|
+
props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : /* istanbul ignore next */ []));
|
|
820
|
+
meta = input(...(ngDevMode ? [undefined, { debugName: "meta" }] : /* istanbul ignore next */ []));
|
|
821
|
+
validationMessages = input(...(ngDevMode ? [undefined, { debugName: "validationMessages" }] : /* istanbul ignore next */ []));
|
|
822
|
+
defaultValidationMessages = input(...(ngDevMode ? [undefined, { debugName: "defaultValidationMessages" }] : /* istanbul ignore next */ []));
|
|
823
|
+
effectiveAppearance = computed(() => this.props()?.appearance ?? this.materialConfig?.appearance ?? 'outline', ...(ngDevMode ? [{ debugName: "effectiveAppearance" }] : /* istanbul ignore next */ []));
|
|
824
|
+
effectiveSubscriptSizing = computed(() => this.props()?.subscriptSizing ?? this.materialConfig?.subscriptSizing ?? 'dynamic', ...(ngDevMode ? [{ debugName: "effectiveSubscriptSizing" }] : /* istanbul ignore next */ []));
|
|
825
|
+
effectiveFloatLabel = computed(() => this.props()?.floatLabel ?? this.materialConfig?.floatLabel ?? 'auto', ...(ngDevMode ? [{ debugName: "effectiveFloatLabel" }] : /* istanbul ignore next */ []));
|
|
826
|
+
effectiveHideRequiredMarker = computed(() => this.props()?.hideRequiredMarker ?? this.materialConfig?.hideRequiredMarker ?? false, ...(ngDevMode ? [{ debugName: "effectiveHideRequiredMarker" }] : /* istanbul ignore next */ []));
|
|
801
827
|
resolvedErrors = createResolvedErrorsSignal(this.field, this.validationMessages, this.defaultValidationMessages);
|
|
802
828
|
showErrors = shouldShowErrors(this.field);
|
|
803
|
-
errorsToDisplay = computed(() => (this.showErrors() ? this.resolvedErrors() : []), ...(ngDevMode ? [{ debugName: "errorsToDisplay" }] : []));
|
|
829
|
+
errorsToDisplay = computed(() => (this.showErrors() ? this.resolvedErrors() : []), ...(ngDevMode ? [{ debugName: "errorsToDisplay" }] : /* istanbul ignore next */ []));
|
|
804
830
|
defaultCompare = Object.is;
|
|
805
831
|
constructor() {
|
|
806
832
|
// mat-select has no native input - apply meta to mat-select element
|
|
@@ -812,26 +838,31 @@ class MatSelectFieldComponent {
|
|
|
812
838
|
// Accessibility
|
|
813
839
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
814
840
|
/** Unique ID for the hint element, used for aria-describedby */
|
|
815
|
-
hintId = computed(() => `${this.key()}-hint`, ...(ngDevMode ? [{ debugName: "hintId" }] : []));
|
|
841
|
+
hintId = computed(() => `${this.key()}-hint`, ...(ngDevMode ? [{ debugName: "hintId" }] : /* istanbul ignore next */ []));
|
|
816
842
|
/** Base ID for error elements, used for aria-describedby */
|
|
817
|
-
errorId = computed(() => `${this.key()}-error`, ...(ngDevMode ? [{ debugName: "errorId" }] : []));
|
|
843
|
+
errorId = computed(() => `${this.key()}-error`, ...(ngDevMode ? [{ debugName: "errorId" }] : /* istanbul ignore next */ []));
|
|
818
844
|
/** aria-invalid: true when field is invalid AND touched, false otherwise */
|
|
819
845
|
ariaInvalid = computed(() => {
|
|
820
846
|
const fieldState = this.field()();
|
|
821
847
|
return fieldState.invalid() && fieldState.touched();
|
|
822
|
-
}, ...(ngDevMode ? [{ debugName: "ariaInvalid" }] : []));
|
|
848
|
+
}, ...(ngDevMode ? [{ debugName: "ariaInvalid" }] : /* istanbul ignore next */ []));
|
|
823
849
|
/** aria-required: true if field is required, null otherwise (to remove attribute) */
|
|
824
850
|
ariaRequired = computed(() => {
|
|
825
851
|
return this.field()().required?.() === true ? true : null;
|
|
826
|
-
}, ...(ngDevMode ? [{ debugName: "ariaRequired" }] : []));
|
|
852
|
+
}, ...(ngDevMode ? [{ debugName: "ariaRequired" }] : /* istanbul ignore next */ []));
|
|
827
853
|
/** aria-describedby: links to hint and error messages for screen readers */
|
|
828
854
|
ariaDescribedBy = createAriaDescribedBySignal(this.errorsToDisplay, this.errorId, this.hintId, () => !!this.props()?.hint);
|
|
829
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
830
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
855
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: MatSelectFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
856
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: MatSelectFieldComponent, isStandalone: true, selector: "df-mat-select", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, meta: { classPropertyName: "meta", publicName: "meta", isSignal: true, isRequired: false, transformFunction: null }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "id": "`${key()}`", "attr.data-testid": "key()", "class": "className()", "attr.hidden": "field()().hidden() || null" } }, ngImport: i0, template: `
|
|
831
857
|
@let f = field();
|
|
832
858
|
@let selectId = key() + '-select';
|
|
833
859
|
|
|
834
|
-
<mat-form-field
|
|
860
|
+
<mat-form-field
|
|
861
|
+
[appearance]="effectiveAppearance()"
|
|
862
|
+
[subscriptSizing]="effectiveSubscriptSizing()"
|
|
863
|
+
[floatLabel]="effectiveFloatLabel()"
|
|
864
|
+
[hideRequiredMarker]="effectiveHideRequiredMarker()"
|
|
865
|
+
>
|
|
835
866
|
@if (label(); as label) {
|
|
836
867
|
<mat-label>{{ label | dynamicText | async }}</mat-label>
|
|
837
868
|
}
|
|
@@ -861,13 +892,18 @@ class MatSelectFieldComponent {
|
|
|
861
892
|
</mat-form-field>
|
|
862
893
|
`, isInline: true, styles: [":host{--df-field-gap: .5rem;--df-label-font-weight: 500;--df-label-color: inherit;--df-hint-color: rgba(0, 0, 0, .6);--df-hint-font-size: .875rem;--df-error-color: #f44336;--df-error-font-size: .875rem;display:block;width:100%}:host([hidden]){display:none!important}.df-mat-field{display:flex;flex-direction:column;gap:var(--df-field-gap);width:100%}.df-mat-label{font-weight:var(--df-label-font-weight);color:var(--df-label-color)}.df-mat-hint{color:var(--df-hint-color);font-size:var(--df-hint-font-size)}.df-mat-error{color:var(--df-error-color);font-size:var(--df-error-font-size)}\n", "mat-form-field{width:100%}\n"], dependencies: [{ kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: FormField, selector: "[formField]", inputs: ["formField"], exportAs: ["formField"] }, { kind: "directive", type: MatError$1, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
863
894
|
}
|
|
864
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
895
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: MatSelectFieldComponent, decorators: [{
|
|
865
896
|
type: Component,
|
|
866
897
|
args: [{ selector: 'df-mat-select', imports: [MatFormField, MatLabel, MatSelect, MatOption, MatHint, FormField, MatError$1, DynamicTextPipe, AsyncPipe], template: `
|
|
867
898
|
@let f = field();
|
|
868
899
|
@let selectId = key() + '-select';
|
|
869
900
|
|
|
870
|
-
<mat-form-field
|
|
901
|
+
<mat-form-field
|
|
902
|
+
[appearance]="effectiveAppearance()"
|
|
903
|
+
[subscriptSizing]="effectiveSubscriptSizing()"
|
|
904
|
+
[floatLabel]="effectiveFloatLabel()"
|
|
905
|
+
[hideRequiredMarker]="effectiveHideRequiredMarker()"
|
|
906
|
+
>
|
|
871
907
|
@if (label(); as label) {
|
|
872
908
|
<mat-label>{{ label | dynamicText | async }}</mat-label>
|
|
873
909
|
}
|
|
@@ -910,42 +946,42 @@ var matSelect_component = /*#__PURE__*/Object.freeze({
|
|
|
910
946
|
|
|
911
947
|
class MatSliderFieldComponent {
|
|
912
948
|
elementRef = inject((ElementRef));
|
|
913
|
-
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : []));
|
|
914
|
-
key = input.required(...(ngDevMode ? [{ debugName: "key" }] : []));
|
|
949
|
+
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : /* istanbul ignore next */ []));
|
|
950
|
+
key = input.required(...(ngDevMode ? [{ debugName: "key" }] : /* istanbul ignore next */ []));
|
|
915
951
|
constructor() {
|
|
916
952
|
setupMetaTracking(this.elementRef, this.meta, { selector: 'input' });
|
|
917
953
|
}
|
|
918
|
-
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : []));
|
|
919
|
-
placeholder = input(...(ngDevMode ? [undefined, { debugName: "placeholder" }] : []));
|
|
920
|
-
className = input('', ...(ngDevMode ? [{ debugName: "className" }] : []));
|
|
921
|
-
tabIndex = input(...(ngDevMode ? [undefined, { debugName: "tabIndex" }] : []));
|
|
922
|
-
props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : []));
|
|
923
|
-
meta = input(...(ngDevMode ? [undefined, { debugName: "meta" }] : []));
|
|
924
|
-
validationMessages = input(...(ngDevMode ? [undefined, { debugName: "validationMessages" }] : []));
|
|
925
|
-
defaultValidationMessages = input(...(ngDevMode ? [undefined, { debugName: "defaultValidationMessages" }] : []));
|
|
954
|
+
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
|
|
955
|
+
placeholder = input(...(ngDevMode ? [undefined, { debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
956
|
+
className = input('', ...(ngDevMode ? [{ debugName: "className" }] : /* istanbul ignore next */ []));
|
|
957
|
+
tabIndex = input(...(ngDevMode ? [undefined, { debugName: "tabIndex" }] : /* istanbul ignore next */ []));
|
|
958
|
+
props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : /* istanbul ignore next */ []));
|
|
959
|
+
meta = input(...(ngDevMode ? [undefined, { debugName: "meta" }] : /* istanbul ignore next */ []));
|
|
960
|
+
validationMessages = input(...(ngDevMode ? [undefined, { debugName: "validationMessages" }] : /* istanbul ignore next */ []));
|
|
961
|
+
defaultValidationMessages = input(...(ngDevMode ? [undefined, { debugName: "defaultValidationMessages" }] : /* istanbul ignore next */ []));
|
|
926
962
|
resolvedErrors = createResolvedErrorsSignal(this.field, this.validationMessages, this.defaultValidationMessages);
|
|
927
963
|
showErrors = shouldShowErrors(this.field);
|
|
928
|
-
errorsToDisplay = computed(() => (this.showErrors() ? this.resolvedErrors() : []), ...(ngDevMode ? [{ debugName: "errorsToDisplay" }] : []));
|
|
964
|
+
errorsToDisplay = computed(() => (this.showErrors() ? this.resolvedErrors() : []), ...(ngDevMode ? [{ debugName: "errorsToDisplay" }] : /* istanbul ignore next */ []));
|
|
929
965
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
930
966
|
// Accessibility
|
|
931
967
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
932
968
|
/** Unique ID for the hint element, used for aria-describedby */
|
|
933
|
-
hintId = computed(() => `${this.key()}-hint`, ...(ngDevMode ? [{ debugName: "hintId" }] : []));
|
|
969
|
+
hintId = computed(() => `${this.key()}-hint`, ...(ngDevMode ? [{ debugName: "hintId" }] : /* istanbul ignore next */ []));
|
|
934
970
|
/** Base ID for error elements, used for aria-describedby */
|
|
935
|
-
errorId = computed(() => `${this.key()}-error`, ...(ngDevMode ? [{ debugName: "errorId" }] : []));
|
|
971
|
+
errorId = computed(() => `${this.key()}-error`, ...(ngDevMode ? [{ debugName: "errorId" }] : /* istanbul ignore next */ []));
|
|
936
972
|
/** aria-required: true when field has required validation, null otherwise */
|
|
937
973
|
ariaRequired = computed(() => {
|
|
938
974
|
return this.field()().required?.() === true ? true : null;
|
|
939
|
-
}, ...(ngDevMode ? [{ debugName: "ariaRequired" }] : []));
|
|
975
|
+
}, ...(ngDevMode ? [{ debugName: "ariaRequired" }] : /* istanbul ignore next */ []));
|
|
940
976
|
/** aria-invalid: true when field is invalid AND touched, false otherwise */
|
|
941
977
|
ariaInvalid = computed(() => {
|
|
942
978
|
const fieldState = this.field()();
|
|
943
979
|
return fieldState.invalid() && fieldState.touched();
|
|
944
|
-
}, ...(ngDevMode ? [{ debugName: "ariaInvalid" }] : []));
|
|
980
|
+
}, ...(ngDevMode ? [{ debugName: "ariaInvalid" }] : /* istanbul ignore next */ []));
|
|
945
981
|
/** aria-describedby: links to hint and error messages for screen readers */
|
|
946
982
|
ariaDescribedBy = createAriaDescribedBySignal(this.errorsToDisplay, this.errorId, this.hintId, () => !!this.props()?.hint);
|
|
947
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
948
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
983
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: MatSliderFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
984
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: MatSliderFieldComponent, isStandalone: true, selector: "df-mat-slider", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, meta: { classPropertyName: "meta", publicName: "meta", isSignal: true, isRequired: false, transformFunction: null }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "className()", "id": "`${key()}`", "attr.data-testid": "key()", "attr.hidden": "field()().hidden() || null" } }, ngImport: i0, template: `
|
|
949
985
|
@let f = field();
|
|
950
986
|
@let inputId = key() + '-input';
|
|
951
987
|
|
|
@@ -980,7 +1016,7 @@ class MatSliderFieldComponent {
|
|
|
980
1016
|
}
|
|
981
1017
|
`, isInline: true, styles: [":host{--df-field-gap: .5rem;--df-label-font-weight: 500;--df-label-color: inherit;--df-hint-color: rgba(0, 0, 0, .6);--df-hint-font-size: .875rem;--df-error-color: #f44336;--df-error-font-size: .875rem;display:block;width:100%}:host([hidden]){display:none!important}.df-mat-field{display:flex;flex-direction:column;gap:var(--df-field-gap);width:100%}.df-mat-label{font-weight:var(--df-label-font-weight);color:var(--df-label-color)}.df-mat-hint{color:var(--df-hint-color);font-size:var(--df-hint-font-size)}.df-mat-error{color:var(--df-error-color);font-size:var(--df-error-font-size)}\n", ".slider-container{width:100%}\n"], dependencies: [{ kind: "component", type: MatSlider, selector: "mat-slider", inputs: ["disabled", "discrete", "showTickMarks", "min", "color", "disableRipple", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "directive", type: MatSliderThumb, selector: "input[matSliderThumb]", inputs: ["value"], outputs: ["valueChange", "dragStart", "dragEnd"], exportAs: ["matSliderThumb"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: FormField, selector: "[formField]", inputs: ["formField"], exportAs: ["formField"] }, { kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
982
1018
|
}
|
|
983
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1019
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: MatSliderFieldComponent, decorators: [{
|
|
984
1020
|
type: Component,
|
|
985
1021
|
args: [{ selector: 'df-mat-slider', imports: [MatSlider, MatSliderThumb, MatError, DynamicTextPipe, AsyncPipe, FormField], template: `
|
|
986
1022
|
@let f = field();
|
|
@@ -1031,20 +1067,20 @@ var matSlider_component = /*#__PURE__*/Object.freeze({
|
|
|
1031
1067
|
class MatButtonFieldComponent {
|
|
1032
1068
|
eventBus = inject(EventBus);
|
|
1033
1069
|
arrayContext = inject(ARRAY_CONTEXT, { optional: true });
|
|
1034
|
-
key = input.required(...(ngDevMode ? [{ debugName: "key" }] : []));
|
|
1035
|
-
label = input.required(...(ngDevMode ? [{ debugName: "label" }] : []));
|
|
1036
|
-
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
|
|
1037
|
-
hidden = input(false, ...(ngDevMode ? [{ debugName: "hidden" }] : []));
|
|
1038
|
-
tabIndex = input(...(ngDevMode ? [undefined, { debugName: "tabIndex" }] : []));
|
|
1039
|
-
className = input('', ...(ngDevMode ? [{ debugName: "className" }] : []));
|
|
1070
|
+
key = input.required(...(ngDevMode ? [{ debugName: "key" }] : /* istanbul ignore next */ []));
|
|
1071
|
+
label = input.required(...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
1072
|
+
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
1073
|
+
hidden = input(false, ...(ngDevMode ? [{ debugName: "hidden" }] : /* istanbul ignore next */ []));
|
|
1074
|
+
tabIndex = input(...(ngDevMode ? [undefined, { debugName: "tabIndex" }] : /* istanbul ignore next */ []));
|
|
1075
|
+
className = input('', ...(ngDevMode ? [{ debugName: "className" }] : /* istanbul ignore next */ []));
|
|
1040
1076
|
/** Event to dispatch on click. Optional for submit buttons (native form submit handles it). */
|
|
1041
|
-
event = input(...(ngDevMode ? [undefined, { debugName: "event" }] : []));
|
|
1042
|
-
eventArgs = input(...(ngDevMode ? [undefined, { debugName: "eventArgs" }] : []));
|
|
1043
|
-
props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : []));
|
|
1044
|
-
eventContext = input(...(ngDevMode ? [undefined, { debugName: "eventContext" }] : []));
|
|
1077
|
+
event = input(...(ngDevMode ? [undefined, { debugName: "event" }] : /* istanbul ignore next */ []));
|
|
1078
|
+
eventArgs = input(...(ngDevMode ? [undefined, { debugName: "eventArgs" }] : /* istanbul ignore next */ []));
|
|
1079
|
+
props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : /* istanbul ignore next */ []));
|
|
1080
|
+
eventContext = input(...(ngDevMode ? [undefined, { debugName: "eventContext" }] : /* istanbul ignore next */ []));
|
|
1045
1081
|
/** Resolved button type - defaults to 'button' if not specified in props */
|
|
1046
|
-
buttonType = computed(() => this.props()?.type ?? 'button', ...(ngDevMode ? [{ debugName: "buttonType" }] : []));
|
|
1047
|
-
buttonTestId = computed(() => `${this.buttonType()}-${this.key()}`, ...(ngDevMode ? [{ debugName: "buttonTestId" }] : []));
|
|
1082
|
+
buttonType = computed(() => this.props()?.type ?? 'button', ...(ngDevMode ? [{ debugName: "buttonType" }] : /* istanbul ignore next */ []));
|
|
1083
|
+
buttonTestId = computed(() => `${this.buttonType()}-${this.key()}`, ...(ngDevMode ? [{ debugName: "buttonTestId" }] : /* istanbul ignore next */ []));
|
|
1048
1084
|
/**
|
|
1049
1085
|
* Handle button click.
|
|
1050
1086
|
* - For submit buttons (type="submit"): do nothing, native form submit handles it
|
|
@@ -1084,8 +1120,8 @@ class MatButtonFieldComponent {
|
|
|
1084
1120
|
this.eventBus.dispatch(event);
|
|
1085
1121
|
}
|
|
1086
1122
|
}
|
|
1087
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1088
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.
|
|
1123
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: MatButtonFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1124
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.8", type: MatButtonFieldComponent, isStandalone: true, selector: "df-mat-button", inputs: { key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, hidden: { classPropertyName: "hidden", publicName: "hidden", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, event: { classPropertyName: "event", publicName: "event", isSignal: true, isRequired: false, transformFunction: null }, eventArgs: { classPropertyName: "eventArgs", publicName: "eventArgs", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, eventContext: { classPropertyName: "eventContext", publicName: "eventContext", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "id": "`${key()}`", "attr.data-testid": "key()", "class": "className()", "attr.hidden": "hidden() || null" } }, ngImport: i0, template: `
|
|
1089
1125
|
@let buttonId = key() + '-button';
|
|
1090
1126
|
<button
|
|
1091
1127
|
mat-raised-button
|
|
@@ -1100,7 +1136,7 @@ class MatButtonFieldComponent {
|
|
|
1100
1136
|
</button>
|
|
1101
1137
|
`, isInline: true, styles: [":host{--df-field-gap: .5rem;--df-label-font-weight: 500;--df-label-color: inherit;--df-hint-color: rgba(0, 0, 0, .6);--df-hint-font-size: .875rem;--df-error-color: #f44336;--df-error-font-size: .875rem;display:block;width:100%}:host([hidden]){display:none!important}.df-mat-field{display:flex;flex-direction:column;gap:var(--df-field-gap);width:100%}.df-mat-label{font-weight:var(--df-label-font-weight);color:var(--df-label-color)}.df-mat-hint{color:var(--df-hint-color);font-size:var(--df-hint-font-size)}.df-mat-error{color:var(--df-error-color);font-size:var(--df-error-font-size)}\n", "button{min-width:fit-content}\n"], dependencies: [{ kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1102
1138
|
}
|
|
1103
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1139
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: MatButtonFieldComponent, decorators: [{
|
|
1104
1140
|
type: Component,
|
|
1105
1141
|
args: [{ selector: 'df-mat-button', imports: [MatButton, DynamicTextPipe, AsyncPipe], host: {
|
|
1106
1142
|
'[id]': '`${key()}`',
|
|
@@ -1133,16 +1169,16 @@ var matButton_component = /*#__PURE__*/Object.freeze({
|
|
|
1133
1169
|
class MatTextareaFieldComponent {
|
|
1134
1170
|
materialConfig = inject(MATERIAL_CONFIG, { optional: true });
|
|
1135
1171
|
elementRef = inject((ElementRef));
|
|
1136
|
-
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : []));
|
|
1137
|
-
key = input.required(...(ngDevMode ? [{ debugName: "key" }] : []));
|
|
1138
|
-
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : []));
|
|
1139
|
-
placeholder = input(...(ngDevMode ? [undefined, { debugName: "placeholder" }] : []));
|
|
1140
|
-
className = input('', ...(ngDevMode ? [{ debugName: "className" }] : []));
|
|
1141
|
-
tabIndex = input(...(ngDevMode ? [undefined, { debugName: "tabIndex" }] : []));
|
|
1142
|
-
props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : []));
|
|
1143
|
-
meta = input(...(ngDevMode ? [undefined, { debugName: "meta" }] : []));
|
|
1144
|
-
validationMessages = input(...(ngDevMode ? [undefined, { debugName: "validationMessages" }] : []));
|
|
1145
|
-
defaultValidationMessages = input(...(ngDevMode ? [undefined, { debugName: "defaultValidationMessages" }] : []));
|
|
1172
|
+
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : /* istanbul ignore next */ []));
|
|
1173
|
+
key = input.required(...(ngDevMode ? [{ debugName: "key" }] : /* istanbul ignore next */ []));
|
|
1174
|
+
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
|
|
1175
|
+
placeholder = input(...(ngDevMode ? [undefined, { debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
1176
|
+
className = input('', ...(ngDevMode ? [{ debugName: "className" }] : /* istanbul ignore next */ []));
|
|
1177
|
+
tabIndex = input(...(ngDevMode ? [undefined, { debugName: "tabIndex" }] : /* istanbul ignore next */ []));
|
|
1178
|
+
props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : /* istanbul ignore next */ []));
|
|
1179
|
+
meta = input(...(ngDevMode ? [undefined, { debugName: "meta" }] : /* istanbul ignore next */ []));
|
|
1180
|
+
validationMessages = input(...(ngDevMode ? [undefined, { debugName: "validationMessages" }] : /* istanbul ignore next */ []));
|
|
1181
|
+
defaultValidationMessages = input(...(ngDevMode ? [undefined, { debugName: "defaultValidationMessages" }] : /* istanbul ignore next */ []));
|
|
1146
1182
|
constructor() {
|
|
1147
1183
|
setupMetaTracking(this.elementRef, this.meta, { selector: 'textarea' });
|
|
1148
1184
|
}
|
|
@@ -1151,12 +1187,12 @@ class MatTextareaFieldComponent {
|
|
|
1151
1187
|
* Used to imperatively sync the readonly attribute since Angular Signal Forms'
|
|
1152
1188
|
* [field] directive doesn't sync FieldState.readonly() to the DOM.
|
|
1153
1189
|
*/
|
|
1154
|
-
textareaRef = viewChild('textareaRef', ...(ngDevMode ? [{ debugName: "textareaRef" }] : []));
|
|
1190
|
+
textareaRef = viewChild('textareaRef', ...(ngDevMode ? [{ debugName: "textareaRef" }] : /* istanbul ignore next */ []));
|
|
1155
1191
|
/**
|
|
1156
1192
|
* Computed signal that extracts the readonly state from the field.
|
|
1157
1193
|
* Used by the effect to reactively sync the readonly attribute to the DOM.
|
|
1158
1194
|
*/
|
|
1159
|
-
isReadonly = computed(() => this.field()().readonly(), ...(ngDevMode ? [{ debugName: "isReadonly" }] : []));
|
|
1195
|
+
isReadonly = computed(() => this.field()().readonly(), ...(ngDevMode ? [{ debugName: "isReadonly" }] : /* istanbul ignore next */ []));
|
|
1160
1196
|
/**
|
|
1161
1197
|
* Workaround: Angular Signal Forms' [field] directive does NOT sync the readonly
|
|
1162
1198
|
* attribute to the DOM, even though FieldState.readonly() returns the correct value.
|
|
@@ -1184,35 +1220,42 @@ class MatTextareaFieldComponent {
|
|
|
1184
1220
|
}
|
|
1185
1221
|
},
|
|
1186
1222
|
});
|
|
1187
|
-
effectiveAppearance = computed(() => this.props()?.appearance ?? this.materialConfig?.appearance ?? 'outline', ...(ngDevMode ? [{ debugName: "effectiveAppearance" }] : []));
|
|
1188
|
-
effectiveSubscriptSizing = computed(() => this.props()?.subscriptSizing ?? this.materialConfig?.subscriptSizing ?? 'dynamic', ...(ngDevMode ? [{ debugName: "effectiveSubscriptSizing" }] : []));
|
|
1223
|
+
effectiveAppearance = computed(() => this.props()?.appearance ?? this.materialConfig?.appearance ?? 'outline', ...(ngDevMode ? [{ debugName: "effectiveAppearance" }] : /* istanbul ignore next */ []));
|
|
1224
|
+
effectiveSubscriptSizing = computed(() => this.props()?.subscriptSizing ?? this.materialConfig?.subscriptSizing ?? 'dynamic', ...(ngDevMode ? [{ debugName: "effectiveSubscriptSizing" }] : /* istanbul ignore next */ []));
|
|
1225
|
+
effectiveFloatLabel = computed(() => this.props()?.floatLabel ?? this.materialConfig?.floatLabel ?? 'auto', ...(ngDevMode ? [{ debugName: "effectiveFloatLabel" }] : /* istanbul ignore next */ []));
|
|
1226
|
+
effectiveHideRequiredMarker = computed(() => this.props()?.hideRequiredMarker ?? this.materialConfig?.hideRequiredMarker ?? false, ...(ngDevMode ? [{ debugName: "effectiveHideRequiredMarker" }] : /* istanbul ignore next */ []));
|
|
1189
1227
|
resolvedErrors = createResolvedErrorsSignal(this.field, this.validationMessages, this.defaultValidationMessages);
|
|
1190
1228
|
showErrors = shouldShowErrors(this.field);
|
|
1191
|
-
errorsToDisplay = computed(() => (this.showErrors() ? this.resolvedErrors() : []), ...(ngDevMode ? [{ debugName: "errorsToDisplay" }] : []));
|
|
1229
|
+
errorsToDisplay = computed(() => (this.showErrors() ? this.resolvedErrors() : []), ...(ngDevMode ? [{ debugName: "errorsToDisplay" }] : /* istanbul ignore next */ []));
|
|
1192
1230
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
1193
1231
|
// Accessibility
|
|
1194
1232
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
1195
1233
|
/** Unique ID for the hint element, used for aria-describedby */
|
|
1196
|
-
hintId = computed(() => `${this.key()}-hint`, ...(ngDevMode ? [{ debugName: "hintId" }] : []));
|
|
1234
|
+
hintId = computed(() => `${this.key()}-hint`, ...(ngDevMode ? [{ debugName: "hintId" }] : /* istanbul ignore next */ []));
|
|
1197
1235
|
/** Base ID for error elements, used for aria-describedby */
|
|
1198
|
-
errorId = computed(() => `${this.key()}-error`, ...(ngDevMode ? [{ debugName: "errorId" }] : []));
|
|
1236
|
+
errorId = computed(() => `${this.key()}-error`, ...(ngDevMode ? [{ debugName: "errorId" }] : /* istanbul ignore next */ []));
|
|
1199
1237
|
/** aria-invalid: true when field is invalid AND touched, false otherwise */
|
|
1200
1238
|
ariaInvalid = computed(() => {
|
|
1201
1239
|
const fieldState = this.field()();
|
|
1202
1240
|
return fieldState.invalid() && fieldState.touched();
|
|
1203
|
-
}, ...(ngDevMode ? [{ debugName: "ariaInvalid" }] : []));
|
|
1241
|
+
}, ...(ngDevMode ? [{ debugName: "ariaInvalid" }] : /* istanbul ignore next */ []));
|
|
1204
1242
|
/** aria-required: true if field is required, null otherwise (to remove attribute) */
|
|
1205
1243
|
ariaRequired = computed(() => {
|
|
1206
1244
|
return this.field()().required?.() === true ? true : null;
|
|
1207
|
-
}, ...(ngDevMode ? [{ debugName: "ariaRequired" }] : []));
|
|
1245
|
+
}, ...(ngDevMode ? [{ debugName: "ariaRequired" }] : /* istanbul ignore next */ []));
|
|
1208
1246
|
/** aria-describedby: links to hint and error messages for screen readers */
|
|
1209
1247
|
ariaDescribedBy = createAriaDescribedBySignal(this.errorsToDisplay, this.errorId, this.hintId, () => !!this.props()?.hint);
|
|
1210
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1211
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
1248
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: MatTextareaFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1249
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: MatTextareaFieldComponent, isStandalone: true, selector: "df-mat-textarea", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, meta: { classPropertyName: "meta", publicName: "meta", isSignal: true, isRequired: false, transformFunction: null }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "id": "`${key()}`", "attr.data-testid": "key()", "class": "className()", "attr.hidden": "field()().hidden() || null" } }, viewQueries: [{ propertyName: "textareaRef", first: true, predicate: ["textareaRef"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
1212
1250
|
@let f = field();
|
|
1213
1251
|
@let textareaId = key() + '-textarea';
|
|
1214
1252
|
|
|
1215
|
-
<mat-form-field
|
|
1253
|
+
<mat-form-field
|
|
1254
|
+
[appearance]="effectiveAppearance()"
|
|
1255
|
+
[subscriptSizing]="effectiveSubscriptSizing()"
|
|
1256
|
+
[floatLabel]="effectiveFloatLabel()"
|
|
1257
|
+
[hideRequiredMarker]="effectiveHideRequiredMarker()"
|
|
1258
|
+
>
|
|
1216
1259
|
@if (label()) {
|
|
1217
1260
|
<mat-label>{{ label() | dynamicText | async }}</mat-label>
|
|
1218
1261
|
}
|
|
@@ -1238,13 +1281,18 @@ class MatTextareaFieldComponent {
|
|
|
1238
1281
|
</mat-form-field>
|
|
1239
1282
|
`, isInline: true, styles: [":host{--df-field-gap: .5rem;--df-label-font-weight: 500;--df-label-color: inherit;--df-hint-color: rgba(0, 0, 0, .6);--df-hint-font-size: .875rem;--df-error-color: #f44336;--df-error-font-size: .875rem;display:block;width:100%}:host([hidden]){display:none!important}.df-mat-field{display:flex;flex-direction:column;gap:var(--df-field-gap);width:100%}.df-mat-label{font-weight:var(--df-label-font-weight);color:var(--df-label-color)}.df-mat-hint{color:var(--df-hint-color);font-size:var(--df-hint-font-size)}.df-mat-error{color:var(--df-error-color);font-size:var(--df-error-font-size)}\n", "mat-form-field{width:100%}\n"], dependencies: [{ kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: FormField, selector: "[formField]", inputs: ["formField"], exportAs: ["formField"] }, { kind: "directive", type: MatError$1, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1240
1283
|
}
|
|
1241
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1284
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: MatTextareaFieldComponent, decorators: [{
|
|
1242
1285
|
type: Component,
|
|
1243
1286
|
args: [{ selector: 'df-mat-textarea', imports: [MatFormField, MatLabel, MatInput, MatHint, FormField, MatError$1, DynamicTextPipe, AsyncPipe], template: `
|
|
1244
1287
|
@let f = field();
|
|
1245
1288
|
@let textareaId = key() + '-textarea';
|
|
1246
1289
|
|
|
1247
|
-
<mat-form-field
|
|
1290
|
+
<mat-form-field
|
|
1291
|
+
[appearance]="effectiveAppearance()"
|
|
1292
|
+
[subscriptSizing]="effectiveSubscriptSizing()"
|
|
1293
|
+
[floatLabel]="effectiveFloatLabel()"
|
|
1294
|
+
[hideRequiredMarker]="effectiveHideRequiredMarker()"
|
|
1295
|
+
>
|
|
1248
1296
|
@if (label()) {
|
|
1249
1297
|
<mat-label>{{ label() | dynamicText | async }}</mat-label>
|
|
1250
1298
|
}
|
|
@@ -1284,20 +1332,20 @@ var matTextarea_component = /*#__PURE__*/Object.freeze({
|
|
|
1284
1332
|
class MatToggleFieldComponent {
|
|
1285
1333
|
materialConfig = inject(MATERIAL_CONFIG, { optional: true });
|
|
1286
1334
|
elementRef = inject((ElementRef));
|
|
1287
|
-
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : []));
|
|
1288
|
-
key = input.required(...(ngDevMode ? [{ debugName: "key" }] : []));
|
|
1289
|
-
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : []));
|
|
1290
|
-
placeholder = input(...(ngDevMode ? [undefined, { debugName: "placeholder" }] : []));
|
|
1291
|
-
className = input('', ...(ngDevMode ? [{ debugName: "className" }] : []));
|
|
1292
|
-
tabIndex = input(...(ngDevMode ? [undefined, { debugName: "tabIndex" }] : []));
|
|
1293
|
-
props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : []));
|
|
1294
|
-
meta = input(...(ngDevMode ? [undefined, { debugName: "meta" }] : []));
|
|
1295
|
-
validationMessages = input(...(ngDevMode ? [undefined, { debugName: "validationMessages" }] : []));
|
|
1296
|
-
defaultValidationMessages = input(...(ngDevMode ? [undefined, { debugName: "defaultValidationMessages" }] : []));
|
|
1297
|
-
effectiveDisableRipple = computed(() => this.props()?.disableRipple ?? this.materialConfig?.disableRipple ?? false, ...(ngDevMode ? [{ debugName: "effectiveDisableRipple" }] : []));
|
|
1335
|
+
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : /* istanbul ignore next */ []));
|
|
1336
|
+
key = input.required(...(ngDevMode ? [{ debugName: "key" }] : /* istanbul ignore next */ []));
|
|
1337
|
+
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
|
|
1338
|
+
placeholder = input(...(ngDevMode ? [undefined, { debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
1339
|
+
className = input('', ...(ngDevMode ? [{ debugName: "className" }] : /* istanbul ignore next */ []));
|
|
1340
|
+
tabIndex = input(...(ngDevMode ? [undefined, { debugName: "tabIndex" }] : /* istanbul ignore next */ []));
|
|
1341
|
+
props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : /* istanbul ignore next */ []));
|
|
1342
|
+
meta = input(...(ngDevMode ? [undefined, { debugName: "meta" }] : /* istanbul ignore next */ []));
|
|
1343
|
+
validationMessages = input(...(ngDevMode ? [undefined, { debugName: "validationMessages" }] : /* istanbul ignore next */ []));
|
|
1344
|
+
defaultValidationMessages = input(...(ngDevMode ? [undefined, { debugName: "defaultValidationMessages" }] : /* istanbul ignore next */ []));
|
|
1345
|
+
effectiveDisableRipple = computed(() => this.props()?.disableRipple ?? this.materialConfig?.disableRipple ?? false, ...(ngDevMode ? [{ debugName: "effectiveDisableRipple" }] : /* istanbul ignore next */ []));
|
|
1298
1346
|
resolvedErrors = createResolvedErrorsSignal(this.field, this.validationMessages, this.defaultValidationMessages);
|
|
1299
1347
|
showErrors = shouldShowErrors(this.field);
|
|
1300
|
-
errorsToDisplay = computed(() => (this.showErrors() ? this.resolvedErrors() : []), ...(ngDevMode ? [{ debugName: "errorsToDisplay" }] : []));
|
|
1348
|
+
errorsToDisplay = computed(() => (this.showErrors() ? this.resolvedErrors() : []), ...(ngDevMode ? [{ debugName: "errorsToDisplay" }] : /* istanbul ignore next */ []));
|
|
1301
1349
|
constructor() {
|
|
1302
1350
|
// Apply meta attributes to the internal toggle button
|
|
1303
1351
|
// Note: mat-slide-toggle uses <button role="switch"> instead of <input type="checkbox">
|
|
@@ -1309,18 +1357,18 @@ class MatToggleFieldComponent {
|
|
|
1309
1357
|
// Accessibility
|
|
1310
1358
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
1311
1359
|
/** Unique ID for the hint element, used for aria-describedby */
|
|
1312
|
-
hintId = computed(() => `${this.key()}-hint`, ...(ngDevMode ? [{ debugName: "hintId" }] : []));
|
|
1360
|
+
hintId = computed(() => `${this.key()}-hint`, ...(ngDevMode ? [{ debugName: "hintId" }] : /* istanbul ignore next */ []));
|
|
1313
1361
|
/** Base ID for error elements, used for aria-describedby */
|
|
1314
|
-
errorId = computed(() => `${this.key()}-error`, ...(ngDevMode ? [{ debugName: "errorId" }] : []));
|
|
1362
|
+
errorId = computed(() => `${this.key()}-error`, ...(ngDevMode ? [{ debugName: "errorId" }] : /* istanbul ignore next */ []));
|
|
1315
1363
|
/** aria-invalid: true when field is invalid AND touched, false otherwise */
|
|
1316
1364
|
ariaInvalid = computed(() => {
|
|
1317
1365
|
const fieldState = this.field()();
|
|
1318
1366
|
return fieldState.invalid() && fieldState.touched();
|
|
1319
|
-
}, ...(ngDevMode ? [{ debugName: "ariaInvalid" }] : []));
|
|
1367
|
+
}, ...(ngDevMode ? [{ debugName: "ariaInvalid" }] : /* istanbul ignore next */ []));
|
|
1320
1368
|
/** aria-required: true if field is required, null otherwise (to remove attribute) */
|
|
1321
1369
|
ariaRequired = computed(() => {
|
|
1322
1370
|
return this.field()().required?.() === true ? true : null;
|
|
1323
|
-
}, ...(ngDevMode ? [{ debugName: "ariaRequired" }] : []));
|
|
1371
|
+
}, ...(ngDevMode ? [{ debugName: "ariaRequired" }] : /* istanbul ignore next */ []));
|
|
1324
1372
|
/** aria-describedby: links to hint and error messages for screen readers */
|
|
1325
1373
|
ariaDescribedBy = createAriaDescribedBySignal(this.errorsToDisplay, this.errorId, this.hintId, () => !!this.props()?.hint);
|
|
1326
1374
|
/**
|
|
@@ -1359,8 +1407,8 @@ class MatToggleFieldComponent {
|
|
|
1359
1407
|
}
|
|
1360
1408
|
}
|
|
1361
1409
|
});
|
|
1362
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1363
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
1410
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: MatToggleFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1411
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: MatToggleFieldComponent, isStandalone: true, selector: "df-mat-toggle", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, meta: { classPropertyName: "meta", publicName: "meta", isSignal: true, isRequired: false, transformFunction: null }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "className()", "id": "`${key()}`", "attr.data-testid": "key()", "attr.hidden": "field()().hidden() || null" } }, ngImport: i0, template: `
|
|
1364
1412
|
@let f = field();
|
|
1365
1413
|
@let toggleId = key() + '-toggle';
|
|
1366
1414
|
|
|
@@ -1386,7 +1434,7 @@ class MatToggleFieldComponent {
|
|
|
1386
1434
|
}
|
|
1387
1435
|
`, isInline: true, styles: [":host{--df-field-gap: .5rem;--df-label-font-weight: 500;--df-label-color: inherit;--df-hint-color: rgba(0, 0, 0, .6);--df-hint-font-size: .875rem;--df-error-color: #f44336;--df-error-font-size: .875rem;display:block;width:100%}:host([hidden]){display:none!important}.df-mat-field{display:flex;flex-direction:column;gap:var(--df-field-gap);width:100%}.df-mat-label{font-weight:var(--df-label-font-weight);color:var(--df-label-color)}.df-mat-hint{color:var(--df-hint-color);font-size:var(--df-hint-font-size)}.df-mat-error{color:var(--df-error-color);font-size:var(--df-error-font-size)}\n"], dependencies: [{ kind: "component", type: MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: FormField, selector: "[formField]", inputs: ["formField"], exportAs: ["formField"] }, { kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1388
1436
|
}
|
|
1389
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1437
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: MatToggleFieldComponent, decorators: [{
|
|
1390
1438
|
type: Component,
|
|
1391
1439
|
args: [{ selector: 'df-mat-toggle', imports: [MatSlideToggle, FormField, MatError, DynamicTextPipe, AsyncPipe], template: `
|
|
1392
1440
|
@let f = field();
|
|
@@ -1514,6 +1562,13 @@ function buttonFieldMapper(fieldDef) {
|
|
|
1514
1562
|
* disabled state resolution based on form validity and options.
|
|
1515
1563
|
*/
|
|
1516
1564
|
|
|
1565
|
+
/**
|
|
1566
|
+
* Base definition for button field types that don't use the `field` input.
|
|
1567
|
+
* Button fields render immediately without waiting for form value integration.
|
|
1568
|
+
*/
|
|
1569
|
+
const BUTTON_FIELD_TYPES_BASE = {
|
|
1570
|
+
renderReadyWhen: [],
|
|
1571
|
+
};
|
|
1517
1572
|
/**
|
|
1518
1573
|
* Material Design field type definitions
|
|
1519
1574
|
* Follows the FieldTypeDefinition interface for proper registry integration
|
|
@@ -1524,107 +1579,126 @@ const MATERIAL_FIELD_TYPES = [
|
|
|
1524
1579
|
loadComponent: () => Promise.resolve().then(function () { return matInput_component; }),
|
|
1525
1580
|
mapper: valueFieldMapper,
|
|
1526
1581
|
propsToMeta: ['type'],
|
|
1582
|
+
scope: ['text-input', 'numeric'],
|
|
1527
1583
|
},
|
|
1528
1584
|
{
|
|
1529
1585
|
name: MatField.Select,
|
|
1530
1586
|
loadComponent: () => Promise.resolve().then(function () { return matSelect_component; }),
|
|
1531
1587
|
mapper: optionsFieldMapper,
|
|
1588
|
+
scope: 'single-select',
|
|
1532
1589
|
},
|
|
1533
1590
|
{
|
|
1534
1591
|
name: MatField.Checkbox,
|
|
1535
1592
|
loadComponent: () => Promise.resolve().then(function () { return matCheckbox_component; }),
|
|
1536
1593
|
mapper: checkboxFieldMapper,
|
|
1594
|
+
scope: 'boolean',
|
|
1537
1595
|
},
|
|
1538
1596
|
{
|
|
1539
1597
|
name: MatField.Button,
|
|
1540
1598
|
loadComponent: () => Promise.resolve().then(function () { return matButton_component; }),
|
|
1541
1599
|
mapper: buttonFieldMapper,
|
|
1542
1600
|
valueHandling: 'exclude',
|
|
1601
|
+
...BUTTON_FIELD_TYPES_BASE,
|
|
1543
1602
|
},
|
|
1544
1603
|
{
|
|
1545
1604
|
name: MatField.Submit,
|
|
1546
1605
|
loadComponent: () => Promise.resolve().then(function () { return matButton_component; }),
|
|
1547
1606
|
mapper: submitButtonFieldMapper,
|
|
1548
1607
|
valueHandling: 'exclude',
|
|
1608
|
+
...BUTTON_FIELD_TYPES_BASE,
|
|
1549
1609
|
},
|
|
1550
1610
|
{
|
|
1551
1611
|
name: MatField.Next,
|
|
1552
1612
|
loadComponent: () => Promise.resolve().then(function () { return matButton_component; }),
|
|
1553
1613
|
mapper: nextButtonFieldMapper,
|
|
1554
1614
|
valueHandling: 'exclude',
|
|
1615
|
+
...BUTTON_FIELD_TYPES_BASE,
|
|
1555
1616
|
},
|
|
1556
1617
|
{
|
|
1557
1618
|
name: MatField.Previous,
|
|
1558
1619
|
loadComponent: () => Promise.resolve().then(function () { return matButton_component; }),
|
|
1559
1620
|
mapper: previousButtonFieldMapper,
|
|
1560
1621
|
valueHandling: 'exclude',
|
|
1622
|
+
...BUTTON_FIELD_TYPES_BASE,
|
|
1561
1623
|
},
|
|
1562
1624
|
{
|
|
1563
1625
|
name: MatField.AddArrayItem,
|
|
1564
1626
|
loadComponent: () => Promise.resolve().then(function () { return matButton_component; }),
|
|
1565
1627
|
mapper: addArrayItemButtonMapper,
|
|
1566
1628
|
valueHandling: 'exclude',
|
|
1629
|
+
...BUTTON_FIELD_TYPES_BASE,
|
|
1567
1630
|
},
|
|
1568
1631
|
{
|
|
1569
1632
|
name: MatField.PrependArrayItem,
|
|
1570
1633
|
loadComponent: () => Promise.resolve().then(function () { return matButton_component; }),
|
|
1571
1634
|
mapper: prependArrayItemButtonMapper,
|
|
1572
1635
|
valueHandling: 'exclude',
|
|
1636
|
+
...BUTTON_FIELD_TYPES_BASE,
|
|
1573
1637
|
},
|
|
1574
1638
|
{
|
|
1575
1639
|
name: MatField.InsertArrayItem,
|
|
1576
1640
|
loadComponent: () => Promise.resolve().then(function () { return matButton_component; }),
|
|
1577
1641
|
mapper: insertArrayItemButtonMapper,
|
|
1578
1642
|
valueHandling: 'exclude',
|
|
1643
|
+
...BUTTON_FIELD_TYPES_BASE,
|
|
1579
1644
|
},
|
|
1580
1645
|
{
|
|
1581
1646
|
name: MatField.RemoveArrayItem,
|
|
1582
1647
|
loadComponent: () => Promise.resolve().then(function () { return matButton_component; }),
|
|
1583
1648
|
mapper: removeArrayItemButtonMapper,
|
|
1584
1649
|
valueHandling: 'exclude',
|
|
1650
|
+
...BUTTON_FIELD_TYPES_BASE,
|
|
1585
1651
|
},
|
|
1586
1652
|
{
|
|
1587
1653
|
name: MatField.PopArrayItem,
|
|
1588
1654
|
loadComponent: () => Promise.resolve().then(function () { return matButton_component; }),
|
|
1589
1655
|
mapper: popArrayItemButtonMapper,
|
|
1590
1656
|
valueHandling: 'exclude',
|
|
1657
|
+
...BUTTON_FIELD_TYPES_BASE,
|
|
1591
1658
|
},
|
|
1592
1659
|
{
|
|
1593
1660
|
name: MatField.ShiftArrayItem,
|
|
1594
1661
|
loadComponent: () => Promise.resolve().then(function () { return matButton_component; }),
|
|
1595
1662
|
mapper: shiftArrayItemButtonMapper,
|
|
1596
1663
|
valueHandling: 'exclude',
|
|
1664
|
+
...BUTTON_FIELD_TYPES_BASE,
|
|
1597
1665
|
},
|
|
1598
1666
|
{
|
|
1599
1667
|
name: MatField.Textarea,
|
|
1600
1668
|
loadComponent: () => Promise.resolve().then(function () { return matTextarea_component; }),
|
|
1601
1669
|
mapper: valueFieldMapper,
|
|
1602
1670
|
propsToMeta: ['rows', 'cols'],
|
|
1671
|
+
scope: 'text-input',
|
|
1603
1672
|
},
|
|
1604
1673
|
{
|
|
1605
1674
|
name: MatField.Radio,
|
|
1606
1675
|
loadComponent: () => Promise.resolve().then(function () { return matRadio_component; }),
|
|
1607
1676
|
mapper: optionsFieldMapper,
|
|
1677
|
+
scope: 'single-select',
|
|
1608
1678
|
},
|
|
1609
1679
|
{
|
|
1610
1680
|
name: MatField.MultiCheckbox,
|
|
1611
1681
|
loadComponent: () => Promise.resolve().then(function () { return matMultiCheckbox_component; }),
|
|
1612
1682
|
mapper: optionsFieldMapper,
|
|
1683
|
+
scope: 'multi-select',
|
|
1613
1684
|
},
|
|
1614
1685
|
{
|
|
1615
1686
|
name: MatField.Datepicker,
|
|
1616
1687
|
loadComponent: () => Promise.resolve().then(function () { return matDatepicker_component; }),
|
|
1617
1688
|
mapper: datepickerFieldMapper,
|
|
1689
|
+
scope: 'date',
|
|
1618
1690
|
},
|
|
1619
1691
|
{
|
|
1620
1692
|
name: MatField.Slider,
|
|
1621
1693
|
loadComponent: () => Promise.resolve().then(function () { return matSlider_component; }),
|
|
1622
1694
|
mapper: valueFieldMapper,
|
|
1695
|
+
scope: 'numeric',
|
|
1623
1696
|
},
|
|
1624
1697
|
{
|
|
1625
1698
|
name: MatField.Toggle,
|
|
1626
1699
|
loadComponent: () => Promise.resolve().then(function () { return matToggle_component; }),
|
|
1627
1700
|
mapper: checkboxFieldMapper,
|
|
1701
|
+
scope: 'boolean',
|
|
1628
1702
|
},
|
|
1629
1703
|
];
|
|
1630
1704
|
|
|
@@ -1634,54 +1708,19 @@ const MATERIAL_FIELD_TYPES = [
|
|
|
1634
1708
|
* all Material Design field types provided by this library.
|
|
1635
1709
|
*/
|
|
1636
1710
|
|
|
1637
|
-
/**
|
|
1638
|
-
* Configure dynamic forms with Material Design field types.
|
|
1639
|
-
* Provides all Material Design field types for use with provideDynamicForm.
|
|
1640
|
-
*
|
|
1641
|
-
* @param config - Optional global configuration for Material form fields
|
|
1642
|
-
*
|
|
1643
|
-
* @example
|
|
1644
|
-
* ```typescript
|
|
1645
|
-
* // Application-level setup
|
|
1646
|
-
* import { ApplicationConfig } from '@angular/core';
|
|
1647
|
-
* import { provideDynamicForm } from '@ng-forge/dynamic-form';
|
|
1648
|
-
* import { withMaterialFields } from '@ng-forge/dynamic-form-material';
|
|
1649
|
-
*
|
|
1650
|
-
* export const appConfig: ApplicationConfig = {
|
|
1651
|
-
* providers: [
|
|
1652
|
-
* provideDynamicForm(...withMaterialFields())
|
|
1653
|
-
* ]
|
|
1654
|
-
* };
|
|
1655
|
-
* ```
|
|
1656
|
-
*
|
|
1657
|
-
* @example
|
|
1658
|
-
* ```typescript
|
|
1659
|
-
* // With global configuration
|
|
1660
|
-
* export const appConfig: ApplicationConfig = {
|
|
1661
|
-
* providers: [
|
|
1662
|
-
* provideDynamicForm(
|
|
1663
|
-
* ...withMaterialFields({
|
|
1664
|
-
* appearance: 'fill',
|
|
1665
|
-
* subscriptSizing: 'fixed'
|
|
1666
|
-
* })
|
|
1667
|
-
* )
|
|
1668
|
-
* ]
|
|
1669
|
-
* };
|
|
1670
|
-
* ```
|
|
1671
|
-
*
|
|
1672
|
-
* @returns Array of field type definitions for Material Design components
|
|
1673
|
-
*/
|
|
1674
1711
|
function withMaterialFields(config) {
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
fields.__configProviders = [
|
|
1678
|
-
{
|
|
1679
|
-
provide: MATERIAL_CONFIG,
|
|
1680
|
-
useValue: config,
|
|
1681
|
-
},
|
|
1682
|
-
];
|
|
1712
|
+
if (!config) {
|
|
1713
|
+
return MATERIAL_FIELD_TYPES;
|
|
1683
1714
|
}
|
|
1684
|
-
|
|
1715
|
+
const fieldsWithConfig = [
|
|
1716
|
+
...MATERIAL_FIELD_TYPES,
|
|
1717
|
+
{
|
|
1718
|
+
ɵkind: 'material-config',
|
|
1719
|
+
ɵproviders: [{ provide: MATERIAL_CONFIG, useValue: config }],
|
|
1720
|
+
},
|
|
1721
|
+
];
|
|
1722
|
+
// Safe: this preserves all material field definitions and appends exactly one config feature.
|
|
1723
|
+
return fieldsWithConfig;
|
|
1685
1724
|
}
|
|
1686
1725
|
|
|
1687
1726
|
// Field components
|