@ng-forge/dynamic-forms-bootstrap 0.2.0 → 0.3.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.
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { AsyncPipe } from '@angular/common';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
|
-
import { inject, input, computed, ChangeDetectionStrategy, Component, viewChild, effect,
|
|
3
|
+
import { inject, input, computed, ChangeDetectionStrategy, Component, ElementRef, viewChild, effect, Directive, InjectionToken, afterRenderEffect, linkedSignal, model, isSignal } from '@angular/core';
|
|
4
4
|
import { EventBus, ARRAY_CONTEXT, resolveTokens, DynamicTextPipe, buildBaseInputs, FIELD_SIGNAL_CONTEXT, resolveSubmitButtonDisabled, resolveNextButtonDisabled, NextPageEvent, PreviousPageEvent, DynamicFormLogger, AddArrayItemEvent, RemoveArrayItemEvent } from '@ng-forge/dynamic-forms';
|
|
5
|
-
import {
|
|
6
|
-
import { createResolvedErrorsSignal, shouldShowErrors, isEqual, valueFieldMapper, optionsFieldMapper, checkboxFieldMapper, datepickerFieldMapper } from '@ng-forge/dynamic-forms/integration';
|
|
5
|
+
import { FormField } from '@angular/forms/signals';
|
|
6
|
+
import { createResolvedErrorsSignal, shouldShowErrors, setupMetaTracking, isEqual, valueFieldMapper, optionsFieldMapper, checkboxFieldMapper, datepickerFieldMapper } from '@ng-forge/dynamic-forms/integration';
|
|
7
7
|
import { explicitEffect } from 'ngxtension/explicit-effect';
|
|
8
8
|
|
|
9
9
|
class BsButtonFieldComponent {
|
|
@@ -78,10 +78,11 @@ class BsButtonFieldComponent {
|
|
|
78
78
|
this.eventBus.dispatch(event);
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
82
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.
|
|
81
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: BsButtonFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
82
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.8", type: BsButtonFieldComponent, isStandalone: true, selector: "df-bs-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()", "hidden": "hidden()" } }, ngImport: i0, template: `
|
|
83
|
+
@let buttonId = key() + '-button';
|
|
83
84
|
<button
|
|
84
|
-
[id]="
|
|
85
|
+
[id]="buttonId"
|
|
85
86
|
[type]="buttonType()"
|
|
86
87
|
[disabled]="disabled()"
|
|
87
88
|
[class]="buttonClasses()"
|
|
@@ -91,9 +92,9 @@ class BsButtonFieldComponent {
|
|
|
91
92
|
>
|
|
92
93
|
{{ label() | dynamicText | async }}
|
|
93
94
|
</button>
|
|
94
|
-
`, isInline: true, styles: [":host{--df-
|
|
95
|
+
`, isInline: true, styles: [":host{--df-field-gap: .5rem;--df-label-font-weight: 500;--df-label-color: inherit;--df-hint-color: var(--bs-secondary-color, #6c757d);--df-hint-font-size: .875rem;--df-error-color: var(--bs-danger, #dc3545);--df-error-font-size: .875rem}.df-bs-field{display:flex;flex-direction:column;gap:var(--df-field-gap);width:100%;margin-bottom:1rem}.df-bs-label{font-weight:var(--df-label-font-weight);color:var(--df-label-color);margin-bottom:0}.df-bs-hint{color:var(--df-hint-color);font-size:var(--df-hint-font-size);margin-top:.25rem}.df-bs-field:has(.df-bs-hint){margin-bottom:.5rem}:host([hidden]){display:none!important}\n"], dependencies: [{ kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
95
96
|
}
|
|
96
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
97
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: BsButtonFieldComponent, decorators: [{
|
|
97
98
|
type: Component,
|
|
98
99
|
args: [{ selector: 'df-bs-button', imports: [DynamicTextPipe, AsyncPipe], host: {
|
|
99
100
|
'[id]': '`${key()}`',
|
|
@@ -101,8 +102,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
101
102
|
'[class]': 'className()',
|
|
102
103
|
'[hidden]': 'hidden()',
|
|
103
104
|
}, template: `
|
|
105
|
+
@let buttonId = key() + '-button';
|
|
104
106
|
<button
|
|
105
|
-
[id]="
|
|
107
|
+
[id]="buttonId"
|
|
106
108
|
[type]="buttonType()"
|
|
107
109
|
[disabled]="disabled()"
|
|
108
110
|
[class]="buttonClasses()"
|
|
@@ -112,7 +114,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
112
114
|
>
|
|
113
115
|
{{ label() | dynamicText | async }}
|
|
114
116
|
</button>
|
|
115
|
-
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{--df-
|
|
117
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{--df-field-gap: .5rem;--df-label-font-weight: 500;--df-label-color: inherit;--df-hint-color: var(--bs-secondary-color, #6c757d);--df-hint-font-size: .875rem;--df-error-color: var(--bs-danger, #dc3545);--df-error-font-size: .875rem}.df-bs-field{display:flex;flex-direction:column;gap:var(--df-field-gap);width:100%;margin-bottom:1rem}.df-bs-label{font-weight:var(--df-label-font-weight);color:var(--df-label-color);margin-bottom:0}.df-bs-hint{color:var(--df-hint-color);font-size:var(--df-hint-font-size);margin-top:.25rem}.df-bs-field:has(.df-bs-hint){margin-bottom:.5rem}:host([hidden]){display:none!important}\n"] }]
|
|
116
118
|
}], propDecorators: { key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], hidden: [{ type: i0.Input, args: [{ isSignal: true, alias: "hidden", required: false }] }], tabIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabIndex", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], event: [{ type: i0.Input, args: [{ isSignal: true, alias: "event", required: false }] }], eventArgs: [{ type: i0.Input, args: [{ isSignal: true, alias: "eventArgs", required: false }] }], props: [{ type: i0.Input, args: [{ isSignal: true, alias: "props", required: false }] }], eventContext: [{ type: i0.Input, args: [{ isSignal: true, alias: "eventContext", required: false }] }] } });
|
|
117
119
|
|
|
118
120
|
var bsButton_component = /*#__PURE__*/Object.freeze({
|
|
@@ -123,6 +125,7 @@ var bsButton_component = /*#__PURE__*/Object.freeze({
|
|
|
123
125
|
// Public API - component
|
|
124
126
|
|
|
125
127
|
class BsCheckboxFieldComponent {
|
|
128
|
+
elementRef = inject((ElementRef));
|
|
126
129
|
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : []));
|
|
127
130
|
key = input.required(...(ngDevMode ? [{ debugName: "key" }] : []));
|
|
128
131
|
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : []));
|
|
@@ -132,11 +135,13 @@ class BsCheckboxFieldComponent {
|
|
|
132
135
|
props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : []));
|
|
133
136
|
validationMessages = input(...(ngDevMode ? [undefined, { debugName: "validationMessages" }] : []));
|
|
134
137
|
defaultValidationMessages = input(...(ngDevMode ? [undefined, { debugName: "defaultValidationMessages" }] : []));
|
|
138
|
+
meta = input(...(ngDevMode ? [undefined, { debugName: "meta" }] : []));
|
|
135
139
|
resolvedErrors = createResolvedErrorsSignal(this.field, this.validationMessages, this.defaultValidationMessages);
|
|
136
140
|
showErrors = shouldShowErrors(this.field);
|
|
137
141
|
errorsToDisplay = computed(() => (this.showErrors() ? this.resolvedErrors() : []), ...(ngDevMode ? [{ debugName: "errorsToDisplay" }] : []));
|
|
138
142
|
checkboxInput = viewChild('checkboxInput', ...(ngDevMode ? [{ debugName: "checkboxInput" }] : []));
|
|
139
143
|
constructor() {
|
|
144
|
+
setupMetaTracking(this.elementRef, this.meta, { selector: 'input[type="checkbox"]' });
|
|
140
145
|
// Handle indeterminate state
|
|
141
146
|
effect(() => {
|
|
142
147
|
const indeterminate = this.props()?.indeterminate;
|
|
@@ -169,10 +174,9 @@ class BsCheckboxFieldComponent {
|
|
|
169
174
|
});
|
|
170
175
|
return ids.length > 0 ? ids.join(' ') : null;
|
|
171
176
|
}, ...(ngDevMode ? [{ debugName: "ariaDescribedBy" }] : []));
|
|
172
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
173
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.
|
|
174
|
-
@let f = field();
|
|
175
|
-
@let ariaInvalid = this.ariaInvalid(); @let ariaRequired = this.ariaRequired();
|
|
177
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: BsCheckboxFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
178
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: BsCheckboxFieldComponent, isStandalone: true, selector: "df-bs-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 }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null }, meta: { classPropertyName: "meta", publicName: "meta", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "className()", "id": "`${key()}`", "attr.data-testid": "key()", "attr.hidden": "field()().hidden() || null" } }, viewQueries: [{ propertyName: "checkboxInput", first: true, predicate: ["checkboxInput"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
179
|
+
@let f = field(); @let checkboxId = key() + '-checkbox'; @let ariaInvalid = this.ariaInvalid(); @let ariaRequired = this.ariaRequired();
|
|
176
180
|
@let ariaDescribedBy = this.ariaDescribedBy();
|
|
177
181
|
|
|
178
182
|
<div
|
|
@@ -185,17 +189,16 @@ class BsCheckboxFieldComponent {
|
|
|
185
189
|
<input
|
|
186
190
|
#checkboxInput
|
|
187
191
|
type="checkbox"
|
|
188
|
-
[
|
|
189
|
-
[id]="
|
|
192
|
+
[formField]="f"
|
|
193
|
+
[id]="checkboxId"
|
|
190
194
|
class="form-check-input"
|
|
191
195
|
[class.is-invalid]="f().invalid() && f().touched()"
|
|
192
196
|
[attr.tabindex]="tabIndex()"
|
|
193
197
|
[attr.aria-invalid]="ariaInvalid"
|
|
194
198
|
[attr.aria-required]="ariaRequired"
|
|
195
199
|
[attr.aria-describedby]="ariaDescribedBy"
|
|
196
|
-
[attr.hidden]="f().hidden() || null"
|
|
197
200
|
/>
|
|
198
|
-
<label [for]="
|
|
201
|
+
<label [for]="checkboxId" class="form-check-label">
|
|
199
202
|
{{ label() | dynamicText | async }}
|
|
200
203
|
</label>
|
|
201
204
|
</div>
|
|
@@ -208,13 +211,12 @@ class BsCheckboxFieldComponent {
|
|
|
208
211
|
@for (error of errorsToDisplay(); track error.kind; let i = $index) {
|
|
209
212
|
<div class="invalid-feedback d-block" [id]="errorId() + '-' + i" role="alert">{{ error.message }}</div>
|
|
210
213
|
}
|
|
211
|
-
`, isInline: true, styles: [":host{--df-
|
|
214
|
+
`, isInline: true, styles: [":host{--df-field-gap: .5rem;--df-label-font-weight: 500;--df-label-color: inherit;--df-hint-color: var(--bs-secondary-color, #6c757d);--df-hint-font-size: .875rem;--df-error-color: var(--bs-danger, #dc3545);--df-error-font-size: .875rem}.df-bs-field{display:flex;flex-direction:column;gap:var(--df-field-gap);width:100%;margin-bottom:1rem}.df-bs-label{font-weight:var(--df-label-font-weight);color:var(--df-label-color);margin-bottom:0}.df-bs-hint{color:var(--df-hint-color);font-size:var(--df-hint-font-size);margin-top:.25rem}.df-bs-field:has(.df-bs-hint){margin-bottom:.5rem}:host([hidden]){display:none!important}\n", ":host{display:block}:host([hidden]){display:none!important}\n"], dependencies: [{ kind: "directive", type: FormField, selector: "[formField]", inputs: ["formField"] }, { kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
212
215
|
}
|
|
213
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
216
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: BsCheckboxFieldComponent, decorators: [{
|
|
214
217
|
type: Component,
|
|
215
|
-
args: [{ selector: 'df-bs-checkbox', imports: [
|
|
216
|
-
@let f = field();
|
|
217
|
-
@let ariaInvalid = this.ariaInvalid(); @let ariaRequired = this.ariaRequired();
|
|
218
|
+
args: [{ selector: 'df-bs-checkbox', imports: [FormField, DynamicTextPipe, AsyncPipe], template: `
|
|
219
|
+
@let f = field(); @let checkboxId = key() + '-checkbox'; @let ariaInvalid = this.ariaInvalid(); @let ariaRequired = this.ariaRequired();
|
|
218
220
|
@let ariaDescribedBy = this.ariaDescribedBy();
|
|
219
221
|
|
|
220
222
|
<div
|
|
@@ -227,17 +229,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
227
229
|
<input
|
|
228
230
|
#checkboxInput
|
|
229
231
|
type="checkbox"
|
|
230
|
-
[
|
|
231
|
-
[id]="
|
|
232
|
+
[formField]="f"
|
|
233
|
+
[id]="checkboxId"
|
|
232
234
|
class="form-check-input"
|
|
233
235
|
[class.is-invalid]="f().invalid() && f().touched()"
|
|
234
236
|
[attr.tabindex]="tabIndex()"
|
|
235
237
|
[attr.aria-invalid]="ariaInvalid"
|
|
236
238
|
[attr.aria-required]="ariaRequired"
|
|
237
239
|
[attr.aria-describedby]="ariaDescribedBy"
|
|
238
|
-
[attr.hidden]="f().hidden() || null"
|
|
239
240
|
/>
|
|
240
|
-
<label [for]="
|
|
241
|
+
<label [for]="checkboxId" class="form-check-label">
|
|
241
242
|
{{ label() | dynamicText | async }}
|
|
242
243
|
</label>
|
|
243
244
|
</div>
|
|
@@ -255,8 +256,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
255
256
|
'[id]': '`${key()}`',
|
|
256
257
|
'[attr.data-testid]': 'key()',
|
|
257
258
|
'[attr.hidden]': 'field()().hidden() || null',
|
|
258
|
-
}, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{--df-
|
|
259
|
-
}], ctorParameters: () => [], propDecorators: { field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }], key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], tabIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabIndex", required: false }] }], props: [{ type: i0.Input, args: [{ isSignal: true, alias: "props", required: false }] }], validationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "validationMessages", required: false }] }], defaultValidationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultValidationMessages", required: false }] }], checkboxInput: [{ type: i0.ViewChild, args: ['checkboxInput', { isSignal: true }] }] } });
|
|
259
|
+
}, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{--df-field-gap: .5rem;--df-label-font-weight: 500;--df-label-color: inherit;--df-hint-color: var(--bs-secondary-color, #6c757d);--df-hint-font-size: .875rem;--df-error-color: var(--bs-danger, #dc3545);--df-error-font-size: .875rem}.df-bs-field{display:flex;flex-direction:column;gap:var(--df-field-gap);width:100%;margin-bottom:1rem}.df-bs-label{font-weight:var(--df-label-font-weight);color:var(--df-label-color);margin-bottom:0}.df-bs-hint{color:var(--df-hint-color);font-size:var(--df-hint-font-size);margin-top:.25rem}.df-bs-field:has(.df-bs-hint){margin-bottom:.5rem}:host([hidden]){display:none!important}\n", ":host{display:block}:host([hidden]){display:none!important}\n"] }]
|
|
260
|
+
}], ctorParameters: () => [], propDecorators: { field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }], key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], tabIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabIndex", required: false }] }], props: [{ type: i0.Input, args: [{ isSignal: true, alias: "props", required: false }] }], validationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "validationMessages", required: false }] }], defaultValidationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultValidationMessages", required: false }] }], meta: [{ type: i0.Input, args: [{ isSignal: true, alias: "meta", required: false }] }], checkboxInput: [{ type: i0.ViewChild, args: ['checkboxInput', { isSignal: true }] }] } });
|
|
260
261
|
|
|
261
262
|
var bsCheckbox_component = /*#__PURE__*/Object.freeze({
|
|
262
263
|
__proto__: null,
|
|
@@ -298,10 +299,10 @@ class InputConstraintsDirective {
|
|
|
298
299
|
nativeElement.removeAttribute('step');
|
|
299
300
|
}
|
|
300
301
|
});
|
|
301
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
302
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.0.
|
|
302
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InputConstraintsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
303
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.0.8", type: InputConstraintsDirective, isStandalone: true, selector: "[dfBsInputConstraints]", inputs: { dfMin: { classPropertyName: "dfMin", publicName: "dfMin", isSignal: true, isRequired: false, transformFunction: null }, dfMax: { classPropertyName: "dfMax", publicName: "dfMax", isSignal: true, isRequired: false, transformFunction: null }, dfStep: { classPropertyName: "dfStep", publicName: "dfStep", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
|
|
303
304
|
}
|
|
304
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
305
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InputConstraintsDirective, decorators: [{
|
|
305
306
|
type: Directive,
|
|
306
307
|
args: [{
|
|
307
308
|
selector: '[dfBsInputConstraints]',
|
|
@@ -309,6 +310,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
309
310
|
}], propDecorators: { dfMin: [{ type: i0.Input, args: [{ isSignal: true, alias: "dfMin", required: false }] }], dfMax: [{ type: i0.Input, args: [{ isSignal: true, alias: "dfMax", required: false }] }], dfStep: [{ type: i0.Input, args: [{ isSignal: true, alias: "dfStep", required: false }] }] } });
|
|
310
311
|
|
|
311
312
|
class BsDatepickerFieldComponent {
|
|
313
|
+
elementRef = inject((ElementRef));
|
|
312
314
|
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : []));
|
|
313
315
|
key = input.required(...(ngDevMode ? [{ debugName: "key" }] : []));
|
|
314
316
|
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : []));
|
|
@@ -321,9 +323,13 @@ class BsDatepickerFieldComponent {
|
|
|
321
323
|
props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : []));
|
|
322
324
|
validationMessages = input(...(ngDevMode ? [undefined, { debugName: "validationMessages" }] : []));
|
|
323
325
|
defaultValidationMessages = input(...(ngDevMode ? [undefined, { debugName: "defaultValidationMessages" }] : []));
|
|
326
|
+
meta = input(...(ngDevMode ? [undefined, { debugName: "meta" }] : []));
|
|
324
327
|
resolvedErrors = createResolvedErrorsSignal(this.field, this.validationMessages, this.defaultValidationMessages);
|
|
325
328
|
showErrors = shouldShowErrors(this.field);
|
|
326
329
|
errorsToDisplay = computed(() => (this.showErrors() ? this.resolvedErrors() : []), ...(ngDevMode ? [{ debugName: "errorsToDisplay" }] : []));
|
|
330
|
+
constructor() {
|
|
331
|
+
setupMetaTracking(this.elementRef, this.meta, { selector: 'input' });
|
|
332
|
+
}
|
|
327
333
|
// Helper methods to convert Date to string for HTML attributes
|
|
328
334
|
minAsString = computed(() => {
|
|
329
335
|
const min = this.minDate();
|
|
@@ -356,17 +362,17 @@ class BsDatepickerFieldComponent {
|
|
|
356
362
|
});
|
|
357
363
|
return ids.length > 0 ? ids.join(' ') : null;
|
|
358
364
|
}, ...(ngDevMode ? [{ debugName: "ariaDescribedBy" }] : []));
|
|
359
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
360
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.
|
|
365
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: BsDatepickerFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
366
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: BsDatepickerFieldComponent, isStandalone: true, selector: "df-bs-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 }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null }, meta: { classPropertyName: "meta", publicName: "meta", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "id": "`${key()}`", "attr.data-testid": "key()", "class": "className()", "attr.hidden": "field()().hidden() || null" } }, ngImport: i0, template: `
|
|
361
367
|
@let f = field(); @let p = props(); @let ariaInvalid = this.ariaInvalid(); @let ariaRequired = this.ariaRequired();
|
|
362
|
-
@let ariaDescribedBy = this.ariaDescribedBy();
|
|
368
|
+
@let ariaDescribedBy = this.ariaDescribedBy(); @let inputId = key() + '-input';
|
|
363
369
|
@if (p?.floatingLabel) {
|
|
364
370
|
<!-- Floating label variant -->
|
|
365
371
|
<div class="form-floating mb-3">
|
|
366
372
|
<input
|
|
367
373
|
dfBsInputConstraints
|
|
368
|
-
[
|
|
369
|
-
[id]="
|
|
374
|
+
[formField]="f"
|
|
375
|
+
[id]="inputId"
|
|
370
376
|
type="date"
|
|
371
377
|
[placeholder]="(placeholder() | dynamicText | async) ?? ''"
|
|
372
378
|
[dfMin]="minAsString()"
|
|
@@ -382,7 +388,7 @@ class BsDatepickerFieldComponent {
|
|
|
382
388
|
[class.is-valid]="f().valid() && f().touched() && p?.validFeedback"
|
|
383
389
|
/>
|
|
384
390
|
@if (label()) {
|
|
385
|
-
<label [for]="
|
|
391
|
+
<label [for]="inputId">{{ label() | dynamicText | async }}</label>
|
|
386
392
|
}
|
|
387
393
|
@if (p?.validFeedback && f().valid() && f().touched()) {
|
|
388
394
|
<div class="valid-feedback d-block">
|
|
@@ -397,13 +403,13 @@ class BsDatepickerFieldComponent {
|
|
|
397
403
|
<!-- Standard variant -->
|
|
398
404
|
<div class="mb-3">
|
|
399
405
|
@if (label()) {
|
|
400
|
-
<label [for]="
|
|
406
|
+
<label [for]="inputId" class="form-label">{{ label() | dynamicText | async }}</label>
|
|
401
407
|
}
|
|
402
408
|
|
|
403
409
|
<input
|
|
404
410
|
dfBsInputConstraints
|
|
405
|
-
[
|
|
406
|
-
[id]="
|
|
411
|
+
[formField]="f"
|
|
412
|
+
[id]="inputId"
|
|
407
413
|
type="date"
|
|
408
414
|
[placeholder]="(placeholder() | dynamicText | async) ?? ''"
|
|
409
415
|
[dfMin]="minAsString()"
|
|
@@ -434,20 +440,20 @@ class BsDatepickerFieldComponent {
|
|
|
434
440
|
}
|
|
435
441
|
</div>
|
|
436
442
|
}
|
|
437
|
-
`, isInline: true, styles: [":host{--df-
|
|
443
|
+
`, isInline: true, styles: [":host{--df-field-gap: .5rem;--df-label-font-weight: 500;--df-label-color: inherit;--df-hint-color: var(--bs-secondary-color, #6c757d);--df-hint-font-size: .875rem;--df-error-color: var(--bs-danger, #dc3545);--df-error-font-size: .875rem}.df-bs-field{display:flex;flex-direction:column;gap:var(--df-field-gap);width:100%;margin-bottom:1rem}.df-bs-label{font-weight:var(--df-label-font-weight);color:var(--df-label-color);margin-bottom:0}.df-bs-hint{color:var(--df-hint-color);font-size:var(--df-hint-font-size);margin-top:.25rem}.df-bs-field:has(.df-bs-hint){margin-bottom:.5rem}:host([hidden]){display:none!important}\n", ":host([hidden]){display:none!important}\n"], dependencies: [{ kind: "directive", type: FormField, selector: "[formField]", inputs: ["formField"] }, { kind: "directive", type: InputConstraintsDirective, selector: "[dfBsInputConstraints]", inputs: ["dfMin", "dfMax", "dfStep"] }, { kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
438
444
|
}
|
|
439
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
445
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: BsDatepickerFieldComponent, decorators: [{
|
|
440
446
|
type: Component,
|
|
441
|
-
args: [{ selector: 'df-bs-datepicker', imports: [
|
|
447
|
+
args: [{ selector: 'df-bs-datepicker', imports: [FormField, DynamicTextPipe, AsyncPipe, InputConstraintsDirective], template: `
|
|
442
448
|
@let f = field(); @let p = props(); @let ariaInvalid = this.ariaInvalid(); @let ariaRequired = this.ariaRequired();
|
|
443
|
-
@let ariaDescribedBy = this.ariaDescribedBy();
|
|
449
|
+
@let ariaDescribedBy = this.ariaDescribedBy(); @let inputId = key() + '-input';
|
|
444
450
|
@if (p?.floatingLabel) {
|
|
445
451
|
<!-- Floating label variant -->
|
|
446
452
|
<div class="form-floating mb-3">
|
|
447
453
|
<input
|
|
448
454
|
dfBsInputConstraints
|
|
449
|
-
[
|
|
450
|
-
[id]="
|
|
455
|
+
[formField]="f"
|
|
456
|
+
[id]="inputId"
|
|
451
457
|
type="date"
|
|
452
458
|
[placeholder]="(placeholder() | dynamicText | async) ?? ''"
|
|
453
459
|
[dfMin]="minAsString()"
|
|
@@ -463,7 +469,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
463
469
|
[class.is-valid]="f().valid() && f().touched() && p?.validFeedback"
|
|
464
470
|
/>
|
|
465
471
|
@if (label()) {
|
|
466
|
-
<label [for]="
|
|
472
|
+
<label [for]="inputId">{{ label() | dynamicText | async }}</label>
|
|
467
473
|
}
|
|
468
474
|
@if (p?.validFeedback && f().valid() && f().touched()) {
|
|
469
475
|
<div class="valid-feedback d-block">
|
|
@@ -478,13 +484,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
478
484
|
<!-- Standard variant -->
|
|
479
485
|
<div class="mb-3">
|
|
480
486
|
@if (label()) {
|
|
481
|
-
<label [for]="
|
|
487
|
+
<label [for]="inputId" class="form-label">{{ label() | dynamicText | async }}</label>
|
|
482
488
|
}
|
|
483
489
|
|
|
484
490
|
<input
|
|
485
491
|
dfBsInputConstraints
|
|
486
|
-
[
|
|
487
|
-
[id]="
|
|
492
|
+
[formField]="f"
|
|
493
|
+
[id]="inputId"
|
|
488
494
|
type="date"
|
|
489
495
|
[placeholder]="(placeholder() | dynamicText | async) ?? ''"
|
|
490
496
|
[dfMin]="minAsString()"
|
|
@@ -520,8 +526,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
520
526
|
'[attr.data-testid]': 'key()',
|
|
521
527
|
'[class]': 'className()',
|
|
522
528
|
'[attr.hidden]': 'field()().hidden() || null',
|
|
523
|
-
}, styles: [":host{--df-
|
|
524
|
-
}], propDecorators: { field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }], key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], tabIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabIndex", required: false }] }], minDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "minDate", required: false }] }], maxDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxDate", required: false }] }], startAt: [{ type: i0.Input, args: [{ isSignal: true, alias: "startAt", required: false }] }], props: [{ type: i0.Input, args: [{ isSignal: true, alias: "props", required: false }] }], validationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "validationMessages", required: false }] }], defaultValidationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultValidationMessages", required: false }] }] } });
|
|
529
|
+
}, styles: [":host{--df-field-gap: .5rem;--df-label-font-weight: 500;--df-label-color: inherit;--df-hint-color: var(--bs-secondary-color, #6c757d);--df-hint-font-size: .875rem;--df-error-color: var(--bs-danger, #dc3545);--df-error-font-size: .875rem}.df-bs-field{display:flex;flex-direction:column;gap:var(--df-field-gap);width:100%;margin-bottom:1rem}.df-bs-label{font-weight:var(--df-label-font-weight);color:var(--df-label-color);margin-bottom:0}.df-bs-hint{color:var(--df-hint-color);font-size:var(--df-hint-font-size);margin-top:.25rem}.df-bs-field:has(.df-bs-hint){margin-bottom:.5rem}:host([hidden]){display:none!important}\n", ":host([hidden]){display:none!important}\n"] }]
|
|
530
|
+
}], ctorParameters: () => [], propDecorators: { field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }], key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], tabIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabIndex", required: false }] }], minDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "minDate", required: false }] }], maxDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxDate", required: false }] }], startAt: [{ type: i0.Input, args: [{ isSignal: true, alias: "startAt", required: false }] }], props: [{ type: i0.Input, args: [{ isSignal: true, alias: "props", required: false }] }], validationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "validationMessages", required: false }] }], defaultValidationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultValidationMessages", required: false }] }], meta: [{ type: i0.Input, args: [{ isSignal: true, alias: "meta", required: false }] }] } });
|
|
525
531
|
|
|
526
532
|
var bsDatepicker_component = /*#__PURE__*/Object.freeze({
|
|
527
533
|
__proto__: null,
|
|
@@ -553,8 +559,17 @@ const BOOTSTRAP_CONFIG = new InjectionToken('BOOTSTRAP_CONFIG');
|
|
|
553
559
|
|
|
554
560
|
class BsInputFieldComponent {
|
|
555
561
|
bootstrapConfig = inject(BOOTSTRAP_CONFIG, { optional: true });
|
|
562
|
+
elementRef = inject((ElementRef));
|
|
556
563
|
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : []));
|
|
557
564
|
key = input.required(...(ngDevMode ? [{ debugName: "key" }] : []));
|
|
565
|
+
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : []));
|
|
566
|
+
placeholder = input(...(ngDevMode ? [undefined, { debugName: "placeholder" }] : []));
|
|
567
|
+
className = input('', ...(ngDevMode ? [{ debugName: "className" }] : []));
|
|
568
|
+
tabIndex = input(...(ngDevMode ? [undefined, { debugName: "tabIndex" }] : []));
|
|
569
|
+
props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : []));
|
|
570
|
+
validationMessages = input(...(ngDevMode ? [undefined, { debugName: "validationMessages" }] : []));
|
|
571
|
+
defaultValidationMessages = input(...(ngDevMode ? [undefined, { debugName: "defaultValidationMessages" }] : []));
|
|
572
|
+
meta = input(...(ngDevMode ? [undefined, { debugName: "meta" }] : []));
|
|
558
573
|
/**
|
|
559
574
|
* Reference to the native input element.
|
|
560
575
|
* Used to imperatively sync the readonly attribute since Angular Signal Forms'
|
|
@@ -587,13 +602,9 @@ class BsInputFieldComponent {
|
|
|
587
602
|
}
|
|
588
603
|
},
|
|
589
604
|
});
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
tabIndex = input(...(ngDevMode ? [undefined, { debugName: "tabIndex" }] : []));
|
|
594
|
-
props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : []));
|
|
595
|
-
validationMessages = input(...(ngDevMode ? [undefined, { debugName: "validationMessages" }] : []));
|
|
596
|
-
defaultValidationMessages = input(...(ngDevMode ? [undefined, { debugName: "defaultValidationMessages" }] : []));
|
|
605
|
+
constructor() {
|
|
606
|
+
setupMetaTracking(this.elementRef, this.meta, { selector: 'input' });
|
|
607
|
+
}
|
|
597
608
|
effectiveSize = computed(() => this.props()?.size ?? this.bootstrapConfig?.size, ...(ngDevMode ? [{ debugName: "effectiveSize" }] : []));
|
|
598
609
|
effectiveFloatingLabel = computed(() => this.props()?.floatingLabel ?? this.bootstrapConfig?.floatingLabel ?? false, ...(ngDevMode ? [{ debugName: "effectiveFloatingLabel" }] : []));
|
|
599
610
|
resolvedErrors = createResolvedErrorsSignal(this.field, this.validationMessages, this.defaultValidationMessages);
|
|
@@ -627,10 +638,11 @@ class BsInputFieldComponent {
|
|
|
627
638
|
});
|
|
628
639
|
return ids.length > 0 ? ids.join(' ') : null;
|
|
629
640
|
}, ...(ngDevMode ? [{ debugName: "ariaDescribedBy" }] : []));
|
|
630
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
631
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.
|
|
641
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: BsInputFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
642
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: BsInputFieldComponent, isStandalone: true, selector: "df-bs-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 }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null }, meta: { classPropertyName: "meta", publicName: "meta", 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: `
|
|
632
643
|
@let f = field(); @let p = props(); @let effectiveSize = this.effectiveSize();
|
|
633
644
|
@let effectiveFloatingLabel = this.effectiveFloatingLabel();
|
|
645
|
+
@let inputId = key() + '-input';
|
|
634
646
|
@let ariaInvalid = this.ariaInvalid(); @let ariaRequired = this.ariaRequired();
|
|
635
647
|
@let ariaDescribedBy = this.ariaDescribedBy();
|
|
636
648
|
@if (effectiveFloatingLabel) {
|
|
@@ -638,9 +650,9 @@ class BsInputFieldComponent {
|
|
|
638
650
|
<div class="form-floating mb-3">
|
|
639
651
|
<input
|
|
640
652
|
#inputRef
|
|
653
|
+
[formField]="f"
|
|
654
|
+
[id]="inputId"
|
|
641
655
|
[type]="p?.type ?? 'text'"
|
|
642
|
-
[field]="f"
|
|
643
|
-
[id]="key()"
|
|
644
656
|
[placeholder]="(placeholder() | dynamicText | async) ?? ''"
|
|
645
657
|
[attr.tabindex]="tabIndex()"
|
|
646
658
|
[attr.aria-invalid]="ariaInvalid"
|
|
@@ -654,7 +666,7 @@ class BsInputFieldComponent {
|
|
|
654
666
|
[class.is-valid]="f().valid() && f().touched() && p?.validFeedback"
|
|
655
667
|
/>
|
|
656
668
|
@if (label()) {
|
|
657
|
-
<label [for]="
|
|
669
|
+
<label [for]="inputId">{{ label() | dynamicText | async }}</label>
|
|
658
670
|
}
|
|
659
671
|
@if (p?.validFeedback && f().valid() && f().touched()) {
|
|
660
672
|
<div class="valid-feedback d-block">
|
|
@@ -669,13 +681,13 @@ class BsInputFieldComponent {
|
|
|
669
681
|
<!-- Standard variant -->
|
|
670
682
|
<div class="mb-3">
|
|
671
683
|
@if (label()) {
|
|
672
|
-
<label [for]="
|
|
684
|
+
<label [for]="inputId" class="form-label">{{ label() | dynamicText | async }}</label>
|
|
673
685
|
}
|
|
674
686
|
<input
|
|
675
687
|
#inputRef
|
|
688
|
+
[formField]="f"
|
|
689
|
+
[id]="inputId"
|
|
676
690
|
[type]="p?.type ?? 'text'"
|
|
677
|
-
[field]="f"
|
|
678
|
-
[id]="key()"
|
|
679
691
|
[placeholder]="(placeholder() | dynamicText | async) ?? ''"
|
|
680
692
|
[attr.tabindex]="tabIndex()"
|
|
681
693
|
[attr.aria-invalid]="ariaInvalid"
|
|
@@ -703,13 +715,14 @@ class BsInputFieldComponent {
|
|
|
703
715
|
}
|
|
704
716
|
</div>
|
|
705
717
|
}
|
|
706
|
-
`, isInline: true, styles: [":host{--df-
|
|
718
|
+
`, isInline: true, styles: [":host{--df-field-gap: .5rem;--df-label-font-weight: 500;--df-label-color: inherit;--df-hint-color: var(--bs-secondary-color, #6c757d);--df-hint-font-size: .875rem;--df-error-color: var(--bs-danger, #dc3545);--df-error-font-size: .875rem}.df-bs-field{display:flex;flex-direction:column;gap:var(--df-field-gap);width:100%;margin-bottom:1rem}.df-bs-label{font-weight:var(--df-label-font-weight);color:var(--df-label-color);margin-bottom:0}.df-bs-hint{color:var(--df-hint-color);font-size:var(--df-hint-font-size);margin-top:.25rem}.df-bs-field:has(.df-bs-hint){margin-bottom:.5rem}:host([hidden]){display:none!important}\n", ":host([hidden]){display:none!important}\n"], dependencies: [{ kind: "directive", type: FormField, selector: "[formField]", inputs: ["formField"] }, { kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
707
719
|
}
|
|
708
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
720
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: BsInputFieldComponent, decorators: [{
|
|
709
721
|
type: Component,
|
|
710
|
-
args: [{ selector: 'df-bs-input', imports: [
|
|
722
|
+
args: [{ selector: 'df-bs-input', imports: [FormField, DynamicTextPipe, AsyncPipe], template: `
|
|
711
723
|
@let f = field(); @let p = props(); @let effectiveSize = this.effectiveSize();
|
|
712
724
|
@let effectiveFloatingLabel = this.effectiveFloatingLabel();
|
|
725
|
+
@let inputId = key() + '-input';
|
|
713
726
|
@let ariaInvalid = this.ariaInvalid(); @let ariaRequired = this.ariaRequired();
|
|
714
727
|
@let ariaDescribedBy = this.ariaDescribedBy();
|
|
715
728
|
@if (effectiveFloatingLabel) {
|
|
@@ -717,9 +730,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
717
730
|
<div class="form-floating mb-3">
|
|
718
731
|
<input
|
|
719
732
|
#inputRef
|
|
733
|
+
[formField]="f"
|
|
734
|
+
[id]="inputId"
|
|
720
735
|
[type]="p?.type ?? 'text'"
|
|
721
|
-
[field]="f"
|
|
722
|
-
[id]="key()"
|
|
723
736
|
[placeholder]="(placeholder() | dynamicText | async) ?? ''"
|
|
724
737
|
[attr.tabindex]="tabIndex()"
|
|
725
738
|
[attr.aria-invalid]="ariaInvalid"
|
|
@@ -733,7 +746,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
733
746
|
[class.is-valid]="f().valid() && f().touched() && p?.validFeedback"
|
|
734
747
|
/>
|
|
735
748
|
@if (label()) {
|
|
736
|
-
<label [for]="
|
|
749
|
+
<label [for]="inputId">{{ label() | dynamicText | async }}</label>
|
|
737
750
|
}
|
|
738
751
|
@if (p?.validFeedback && f().valid() && f().touched()) {
|
|
739
752
|
<div class="valid-feedback d-block">
|
|
@@ -748,13 +761,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
748
761
|
<!-- Standard variant -->
|
|
749
762
|
<div class="mb-3">
|
|
750
763
|
@if (label()) {
|
|
751
|
-
<label [for]="
|
|
764
|
+
<label [for]="inputId" class="form-label">{{ label() | dynamicText | async }}</label>
|
|
752
765
|
}
|
|
753
766
|
<input
|
|
754
767
|
#inputRef
|
|
768
|
+
[formField]="f"
|
|
769
|
+
[id]="inputId"
|
|
755
770
|
[type]="p?.type ?? 'text'"
|
|
756
|
-
[field]="f"
|
|
757
|
-
[id]="key()"
|
|
758
771
|
[placeholder]="(placeholder() | dynamicText | async) ?? ''"
|
|
759
772
|
[attr.tabindex]="tabIndex()"
|
|
760
773
|
[attr.aria-invalid]="ariaInvalid"
|
|
@@ -787,8 +800,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
787
800
|
'[attr.data-testid]': 'key()',
|
|
788
801
|
'[class]': 'className()',
|
|
789
802
|
'[attr.hidden]': 'field()().hidden() || null',
|
|
790
|
-
}, styles: [":host{--df-
|
|
791
|
-
}], propDecorators: { field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }], key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: true }] }],
|
|
803
|
+
}, styles: [":host{--df-field-gap: .5rem;--df-label-font-weight: 500;--df-label-color: inherit;--df-hint-color: var(--bs-secondary-color, #6c757d);--df-hint-font-size: .875rem;--df-error-color: var(--bs-danger, #dc3545);--df-error-font-size: .875rem}.df-bs-field{display:flex;flex-direction:column;gap:var(--df-field-gap);width:100%;margin-bottom:1rem}.df-bs-label{font-weight:var(--df-label-font-weight);color:var(--df-label-color);margin-bottom:0}.df-bs-hint{color:var(--df-hint-color);font-size:var(--df-hint-font-size);margin-top:.25rem}.df-bs-field:has(.df-bs-hint){margin-bottom:.5rem}:host([hidden]){display:none!important}\n", ":host([hidden]){display:none!important}\n"] }]
|
|
804
|
+
}], ctorParameters: () => [], propDecorators: { field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }], key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], tabIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabIndex", required: false }] }], props: [{ type: i0.Input, args: [{ isSignal: true, alias: "props", required: false }] }], validationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "validationMessages", required: false }] }], defaultValidationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultValidationMessages", required: false }] }], meta: [{ type: i0.Input, args: [{ isSignal: true, alias: "meta", required: false }] }], inputRef: [{ type: i0.ViewChild, args: ['inputRef', { isSignal: true }] }] } });
|
|
792
805
|
|
|
793
806
|
var bsInput_component = /*#__PURE__*/Object.freeze({
|
|
794
807
|
__proto__: null,
|
|
@@ -796,6 +809,7 @@ var bsInput_component = /*#__PURE__*/Object.freeze({
|
|
|
796
809
|
});
|
|
797
810
|
|
|
798
811
|
class BsMultiCheckboxFieldComponent {
|
|
812
|
+
elementRef = inject((ElementRef));
|
|
799
813
|
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : []));
|
|
800
814
|
key = input.required(...(ngDevMode ? [{ debugName: "key" }] : []));
|
|
801
815
|
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : []));
|
|
@@ -806,6 +820,7 @@ class BsMultiCheckboxFieldComponent {
|
|
|
806
820
|
props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : []));
|
|
807
821
|
validationMessages = input(...(ngDevMode ? [undefined, { debugName: "validationMessages" }] : []));
|
|
808
822
|
defaultValidationMessages = input(...(ngDevMode ? [undefined, { debugName: "defaultValidationMessages" }] : []));
|
|
823
|
+
meta = input(...(ngDevMode ? [undefined, { debugName: "meta" }] : []));
|
|
809
824
|
resolvedErrors = createResolvedErrorsSignal(this.field, this.validationMessages, this.defaultValidationMessages);
|
|
810
825
|
showErrors = shouldShowErrors(this.field);
|
|
811
826
|
errorsToDisplay = computed(() => (this.showErrors() ? this.resolvedErrors() : []), ...(ngDevMode ? [{ debugName: "errorsToDisplay" }] : []));
|
|
@@ -814,6 +829,7 @@ class BsMultiCheckboxFieldComponent {
|
|
|
814
829
|
return this.options().filter((option) => currentValues.includes(option.value));
|
|
815
830
|
}, { ...(ngDevMode ? { debugName: "valueViewModel" } : {}), equal: isEqual });
|
|
816
831
|
constructor() {
|
|
832
|
+
setupMetaTracking(this.elementRef, this.meta, { selector: 'input[type="checkbox"]', dependents: [this.options] });
|
|
817
833
|
explicitEffect([this.valueViewModel], ([selectedOptions]) => {
|
|
818
834
|
const selectedValues = selectedOptions.map((option) => option.value);
|
|
819
835
|
if (!isEqual(selectedValues, this.field()().value())) {
|
|
@@ -865,8 +881,8 @@ class BsMultiCheckboxFieldComponent {
|
|
|
865
881
|
});
|
|
866
882
|
return ids.length > 0 ? ids.join(' ') : null;
|
|
867
883
|
}, ...(ngDevMode ? [{ debugName: "ariaDescribedBy" }] : []));
|
|
868
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
869
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.
|
|
884
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: BsMultiCheckboxFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
885
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: BsMultiCheckboxFieldComponent, isStandalone: true, selector: "df-bs-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 }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null }, meta: { classPropertyName: "meta", publicName: "meta", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "className() || \"\"", "id": "`${key()}`", "attr.data-testid": "key()", "attr.hidden": "field()().hidden() || null" } }, ngImport: i0, template: `
|
|
870
886
|
@let f = field();
|
|
871
887
|
@let ariaInvalid = this.ariaInvalid(); @let ariaRequired = this.ariaRequired();
|
|
872
888
|
@let ariaDescribedBy = this.ariaDescribedBy();
|
|
@@ -910,9 +926,9 @@ class BsMultiCheckboxFieldComponent {
|
|
|
910
926
|
@for (error of errorsToDisplay(); track error.kind; let i = $index) {
|
|
911
927
|
<div class="invalid-feedback d-block" [id]="errorId() + '-' + i" role="alert">{{ error.message }}</div>
|
|
912
928
|
}
|
|
913
|
-
`, isInline: true, styles: [":host{--df-
|
|
929
|
+
`, isInline: true, styles: [":host{--df-field-gap: .5rem;--df-label-font-weight: 500;--df-label-color: inherit;--df-hint-color: var(--bs-secondary-color, #6c757d);--df-hint-font-size: .875rem;--df-error-color: var(--bs-danger, #dc3545);--df-error-font-size: .875rem}.df-bs-field{display:flex;flex-direction:column;gap:var(--df-field-gap);width:100%;margin-bottom:1rem}.df-bs-label{font-weight:var(--df-label-font-weight);color:var(--df-label-color);margin-bottom:0}.df-bs-hint{color:var(--df-hint-color);font-size:var(--df-hint-font-size);margin-top:.25rem}.df-bs-field:has(.df-bs-hint){margin-bottom:.5rem}:host([hidden]){display:none!important}\n", ":host{display:block}.checkbox-group{margin-bottom:.5rem}:host([hidden]){display:none!important}\n"], dependencies: [{ kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
914
930
|
}
|
|
915
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
931
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: BsMultiCheckboxFieldComponent, decorators: [{
|
|
916
932
|
type: Component,
|
|
917
933
|
args: [{ selector: 'df-bs-multi-checkbox', imports: [DynamicTextPipe, AsyncPipe], template: `
|
|
918
934
|
@let f = field();
|
|
@@ -963,8 +979,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
963
979
|
'[id]': '`${key()}`',
|
|
964
980
|
'[attr.data-testid]': 'key()',
|
|
965
981
|
'[attr.hidden]': 'field()().hidden() || null',
|
|
966
|
-
}, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{--df-
|
|
967
|
-
}], ctorParameters: () => [], propDecorators: { field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }], key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], tabIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabIndex", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], props: [{ type: i0.Input, args: [{ isSignal: true, alias: "props", required: false }] }], validationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "validationMessages", required: false }] }], defaultValidationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultValidationMessages", required: false }] }] } });
|
|
982
|
+
}, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{--df-field-gap: .5rem;--df-label-font-weight: 500;--df-label-color: inherit;--df-hint-color: var(--bs-secondary-color, #6c757d);--df-hint-font-size: .875rem;--df-error-color: var(--bs-danger, #dc3545);--df-error-font-size: .875rem}.df-bs-field{display:flex;flex-direction:column;gap:var(--df-field-gap);width:100%;margin-bottom:1rem}.df-bs-label{font-weight:var(--df-label-font-weight);color:var(--df-label-color);margin-bottom:0}.df-bs-hint{color:var(--df-hint-color);font-size:var(--df-hint-font-size);margin-top:.25rem}.df-bs-field:has(.df-bs-hint){margin-bottom:.5rem}:host([hidden]){display:none!important}\n", ":host{display:block}.checkbox-group{margin-bottom:.5rem}:host([hidden]){display:none!important}\n"] }]
|
|
983
|
+
}], ctorParameters: () => [], propDecorators: { field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }], key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], tabIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabIndex", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], props: [{ type: i0.Input, args: [{ isSignal: true, alias: "props", required: false }] }], validationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "validationMessages", required: false }] }], defaultValidationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultValidationMessages", required: false }] }], meta: [{ type: i0.Input, args: [{ isSignal: true, alias: "meta", required: false }] }] } });
|
|
968
984
|
|
|
969
985
|
var bsMultiCheckbox_component = /*#__PURE__*/Object.freeze({
|
|
970
986
|
__proto__: null,
|
|
@@ -972,8 +988,9 @@ var bsMultiCheckbox_component = /*#__PURE__*/Object.freeze({
|
|
|
972
988
|
});
|
|
973
989
|
|
|
974
990
|
class BsRadioGroupComponent {
|
|
975
|
-
|
|
976
|
-
|
|
991
|
+
elementRef = inject((ElementRef));
|
|
992
|
+
// Value model - FormField directive binds form value to this
|
|
993
|
+
value = model(undefined, ...(ngDevMode ? [{ debugName: "value" }] : []));
|
|
977
994
|
// Optional FormValueControl properties - Field directive will bind these
|
|
978
995
|
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
|
|
979
996
|
readonly = input(false, ...(ngDevMode ? [{ debugName: "readonly" }] : []));
|
|
@@ -982,8 +999,12 @@ class BsRadioGroupComponent {
|
|
|
982
999
|
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : []));
|
|
983
1000
|
options = input.required(...(ngDevMode ? [{ debugName: "options" }] : []));
|
|
984
1001
|
properties = input(...(ngDevMode ? [undefined, { debugName: "properties" }] : []));
|
|
1002
|
+
meta = input(...(ngDevMode ? [undefined, { debugName: "meta" }] : []));
|
|
985
1003
|
// Accessibility - this will be provided by parent component through input
|
|
986
1004
|
ariaDescribedBy = input(null, ...(ngDevMode ? [{ debugName: "ariaDescribedBy" }] : []));
|
|
1005
|
+
constructor() {
|
|
1006
|
+
setupMetaTracking(this.elementRef, this.meta, { selector: 'input[type="radio"]', dependents: [this.options] });
|
|
1007
|
+
}
|
|
987
1008
|
/**
|
|
988
1009
|
* Handle radio button change event
|
|
989
1010
|
*/
|
|
@@ -992,8 +1013,8 @@ class BsRadioGroupComponent {
|
|
|
992
1013
|
this.value.set(newValue);
|
|
993
1014
|
}
|
|
994
1015
|
}
|
|
995
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
996
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.
|
|
1016
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: BsRadioGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1017
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: BsRadioGroupComponent, isStandalone: true, selector: "df-bs-radio-group", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, properties: { classPropertyName: "properties", publicName: "properties", isSignal: true, isRequired: false, transformFunction: null }, meta: { classPropertyName: "meta", publicName: "meta", isSignal: true, isRequired: false, transformFunction: null }, ariaDescribedBy: { classPropertyName: "ariaDescribedBy", publicName: "ariaDescribedBy", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, ngImport: i0, template: `
|
|
997
1018
|
@let props = properties();
|
|
998
1019
|
@let ariaDescribedBy = this.ariaDescribedBy();
|
|
999
1020
|
@if (props?.buttonGroup) {
|
|
@@ -1043,7 +1064,7 @@ class BsRadioGroupComponent {
|
|
|
1043
1064
|
}
|
|
1044
1065
|
`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1045
1066
|
}
|
|
1046
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
1067
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: BsRadioGroupComponent, decorators: [{
|
|
1047
1068
|
type: Component,
|
|
1048
1069
|
args: [{ selector: 'df-bs-radio-group', imports: [DynamicTextPipe, AsyncPipe], template: `
|
|
1049
1070
|
@let props = properties();
|
|
@@ -1094,9 +1115,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
1094
1115
|
}
|
|
1095
1116
|
}
|
|
1096
1117
|
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block}\n"] }]
|
|
1097
|
-
}], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required:
|
|
1118
|
+
}], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: true }] }], properties: [{ type: i0.Input, args: [{ isSignal: true, alias: "properties", required: false }] }], meta: [{ type: i0.Input, args: [{ isSignal: true, alias: "meta", required: false }] }], ariaDescribedBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaDescribedBy", required: false }] }] } });
|
|
1098
1119
|
|
|
1099
1120
|
class BsRadioFieldComponent {
|
|
1121
|
+
elementRef = inject((ElementRef));
|
|
1100
1122
|
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : []));
|
|
1101
1123
|
key = input.required(...(ngDevMode ? [{ debugName: "key" }] : []));
|
|
1102
1124
|
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : []));
|
|
@@ -1105,10 +1127,17 @@ class BsRadioFieldComponent {
|
|
|
1105
1127
|
tabIndex = input(...(ngDevMode ? [undefined, { debugName: "tabIndex" }] : []));
|
|
1106
1128
|
options = input([], ...(ngDevMode ? [{ debugName: "options" }] : []));
|
|
1107
1129
|
props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : []));
|
|
1130
|
+
meta = input(...(ngDevMode ? [undefined, { debugName: "meta" }] : []));
|
|
1108
1131
|
validationMessages = input(...(ngDevMode ? [undefined, { debugName: "validationMessages" }] : []));
|
|
1109
1132
|
defaultValidationMessages = input(...(ngDevMode ? [undefined, { debugName: "defaultValidationMessages" }] : []));
|
|
1110
1133
|
resolvedErrors = createResolvedErrorsSignal(this.field, this.validationMessages, this.defaultValidationMessages);
|
|
1111
1134
|
showErrors = shouldShowErrors(this.field);
|
|
1135
|
+
constructor() {
|
|
1136
|
+
setupMetaTracking(this.elementRef, this.meta, {
|
|
1137
|
+
selector: 'input[type="radio"]',
|
|
1138
|
+
dependents: [this.options],
|
|
1139
|
+
});
|
|
1140
|
+
}
|
|
1112
1141
|
errorsToDisplay = computed(() => (this.showErrors() ? this.resolvedErrors() : []), ...(ngDevMode ? [{ debugName: "errorsToDisplay" }] : []));
|
|
1113
1142
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
1114
1143
|
// Accessibility
|
|
@@ -1133,8 +1162,8 @@ class BsRadioFieldComponent {
|
|
|
1133
1162
|
});
|
|
1134
1163
|
return ids.length > 0 ? ids.join(' ') : null;
|
|
1135
1164
|
}, ...(ngDevMode ? [{ debugName: "ariaDescribedBy" }] : []));
|
|
1136
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
1137
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.
|
|
1165
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: BsRadioFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1166
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: BsRadioFieldComponent, isStandalone: true, selector: "df-bs-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: { "id": "`${key()}`", "attr.data-testid": "key()", "class": "className()", "attr.hidden": "field()().hidden() || null" } }, ngImport: i0, template: `
|
|
1138
1167
|
@let f = field();
|
|
1139
1168
|
@let ariaDescribedBy = this.ariaDescribedBy();
|
|
1140
1169
|
|
|
@@ -1144,7 +1173,7 @@ class BsRadioFieldComponent {
|
|
|
1144
1173
|
}
|
|
1145
1174
|
|
|
1146
1175
|
<df-bs-radio-group
|
|
1147
|
-
[
|
|
1176
|
+
[formField]="$any(f)"
|
|
1148
1177
|
[label]="label()"
|
|
1149
1178
|
[options]="options()"
|
|
1150
1179
|
[properties]="props()"
|
|
@@ -1158,11 +1187,11 @@ class BsRadioFieldComponent {
|
|
|
1158
1187
|
<div class="invalid-feedback d-block" [id]="errorId() + '-' + i" role="alert">{{ error.message }}</div>
|
|
1159
1188
|
}
|
|
1160
1189
|
</div>
|
|
1161
|
-
`, isInline: true, styles: [":host{--df-
|
|
1190
|
+
`, isInline: true, styles: [":host{--df-field-gap: .5rem;--df-label-font-weight: 500;--df-label-color: inherit;--df-hint-color: var(--bs-secondary-color, #6c757d);--df-hint-font-size: .875rem;--df-error-color: var(--bs-danger, #dc3545);--df-error-font-size: .875rem}.df-bs-field{display:flex;flex-direction:column;gap:var(--df-field-gap);width:100%;margin-bottom:1rem}.df-bs-label{font-weight:var(--df-label-font-weight);color:var(--df-label-color);margin-bottom:0}.df-bs-hint{color:var(--df-hint-color);font-size:var(--df-hint-font-size);margin-top:.25rem}.df-bs-field:has(.df-bs-hint){margin-bottom:.5rem}:host([hidden]){display:none!important}\n", ":host{display:block}:host([hidden]){display:none!important}\n"], dependencies: [{ kind: "component", type: BsRadioGroupComponent, selector: "df-bs-radio-group", inputs: ["value", "disabled", "readonly", "name", "label", "options", "properties", "meta", "ariaDescribedBy"], outputs: ["valueChange"] }, { kind: "directive", type: FormField, selector: "[formField]", inputs: ["formField"] }, { kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1162
1191
|
}
|
|
1163
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
1192
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: BsRadioFieldComponent, decorators: [{
|
|
1164
1193
|
type: Component,
|
|
1165
|
-
args: [{ selector: 'df-bs-radio', imports: [BsRadioGroupComponent,
|
|
1194
|
+
args: [{ selector: 'df-bs-radio', imports: [BsRadioGroupComponent, FormField, DynamicTextPipe, AsyncPipe], template: `
|
|
1166
1195
|
@let f = field();
|
|
1167
1196
|
@let ariaDescribedBy = this.ariaDescribedBy();
|
|
1168
1197
|
|
|
@@ -1172,7 +1201,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
1172
1201
|
}
|
|
1173
1202
|
|
|
1174
1203
|
<df-bs-radio-group
|
|
1175
|
-
[
|
|
1204
|
+
[formField]="$any(f)"
|
|
1176
1205
|
[label]="label()"
|
|
1177
1206
|
[options]="options()"
|
|
1178
1207
|
[properties]="props()"
|
|
@@ -1191,8 +1220,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
1191
1220
|
'[attr.data-testid]': 'key()',
|
|
1192
1221
|
'[class]': 'className()',
|
|
1193
1222
|
'[attr.hidden]': 'field()().hidden() || null',
|
|
1194
|
-
}, styles: [":host{--df-
|
|
1195
|
-
}], propDecorators: { field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }], key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], tabIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabIndex", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], props: [{ type: i0.Input, args: [{ isSignal: true, alias: "props", required: false }] }], validationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "validationMessages", required: false }] }], defaultValidationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultValidationMessages", required: false }] }] } });
|
|
1223
|
+
}, styles: [":host{--df-field-gap: .5rem;--df-label-font-weight: 500;--df-label-color: inherit;--df-hint-color: var(--bs-secondary-color, #6c757d);--df-hint-font-size: .875rem;--df-error-color: var(--bs-danger, #dc3545);--df-error-font-size: .875rem}.df-bs-field{display:flex;flex-direction:column;gap:var(--df-field-gap);width:100%;margin-bottom:1rem}.df-bs-label{font-weight:var(--df-label-font-weight);color:var(--df-label-color);margin-bottom:0}.df-bs-hint{color:var(--df-hint-color);font-size:var(--df-hint-font-size);margin-top:.25rem}.df-bs-field:has(.df-bs-hint){margin-bottom:.5rem}:host([hidden]){display:none!important}\n", ":host{display:block}:host([hidden]){display:none!important}\n"] }]
|
|
1224
|
+
}], ctorParameters: () => [], propDecorators: { field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }], key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], tabIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabIndex", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], props: [{ type: i0.Input, args: [{ isSignal: true, alias: "props", required: false }] }], meta: [{ type: i0.Input, args: [{ isSignal: true, alias: "meta", required: false }] }], validationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "validationMessages", required: false }] }], defaultValidationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultValidationMessages", required: false }] }] } });
|
|
1196
1225
|
|
|
1197
1226
|
var bsRadio_component = /*#__PURE__*/Object.freeze({
|
|
1198
1227
|
__proto__: null,
|
|
@@ -1200,6 +1229,7 @@ var bsRadio_component = /*#__PURE__*/Object.freeze({
|
|
|
1200
1229
|
});
|
|
1201
1230
|
|
|
1202
1231
|
class BsSelectFieldComponent {
|
|
1232
|
+
elementRef = inject((ElementRef));
|
|
1203
1233
|
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : []));
|
|
1204
1234
|
key = input.required(...(ngDevMode ? [{ debugName: "key" }] : []));
|
|
1205
1235
|
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : []));
|
|
@@ -1210,9 +1240,13 @@ class BsSelectFieldComponent {
|
|
|
1210
1240
|
props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : []));
|
|
1211
1241
|
validationMessages = input(...(ngDevMode ? [undefined, { debugName: "validationMessages" }] : []));
|
|
1212
1242
|
defaultValidationMessages = input(...(ngDevMode ? [undefined, { debugName: "defaultValidationMessages" }] : []));
|
|
1243
|
+
meta = input(...(ngDevMode ? [undefined, { debugName: "meta" }] : []));
|
|
1213
1244
|
resolvedErrors = createResolvedErrorsSignal(this.field, this.validationMessages, this.defaultValidationMessages);
|
|
1214
1245
|
showErrors = shouldShowErrors(this.field);
|
|
1215
1246
|
errorsToDisplay = computed(() => (this.showErrors() ? this.resolvedErrors() : []), ...(ngDevMode ? [{ debugName: "errorsToDisplay" }] : []));
|
|
1247
|
+
constructor() {
|
|
1248
|
+
setupMetaTracking(this.elementRef, this.meta, { selector: 'select' });
|
|
1249
|
+
}
|
|
1216
1250
|
defaultCompare = Object.is;
|
|
1217
1251
|
isSelected(optionValue, fieldValue) {
|
|
1218
1252
|
const compareWith = this.props()?.compareWith || this.defaultCompare;
|
|
@@ -1244,19 +1278,18 @@ class BsSelectFieldComponent {
|
|
|
1244
1278
|
});
|
|
1245
1279
|
return ids.length > 0 ? ids.join(' ') : null;
|
|
1246
1280
|
}, ...(ngDevMode ? [{ debugName: "ariaDescribedBy" }] : []));
|
|
1247
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
1248
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.
|
|
1249
|
-
@let f = field();
|
|
1250
|
-
@let ariaInvalid = this.ariaInvalid(); @let ariaRequired = this.ariaRequired();
|
|
1281
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: BsSelectFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1282
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: BsSelectFieldComponent, isStandalone: true, selector: "df-bs-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 }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null }, meta: { classPropertyName: "meta", publicName: "meta", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "id": "`${key()}`", "attr.data-testid": "key()", "class": "className()", "attr.hidden": "field()().hidden() || null" } }, ngImport: i0, template: `
|
|
1283
|
+
@let f = field(); @let selectId = key() + '-select'; @let ariaInvalid = this.ariaInvalid(); @let ariaRequired = this.ariaRequired();
|
|
1251
1284
|
@let ariaDescribedBy = this.ariaDescribedBy();
|
|
1252
1285
|
|
|
1253
1286
|
<div class="mb-3">
|
|
1254
1287
|
@if (label(); as label) {
|
|
1255
|
-
<label [for]="
|
|
1288
|
+
<label [for]="selectId" class="form-label">{{ label | dynamicText | async }}</label>
|
|
1256
1289
|
}
|
|
1257
1290
|
<select
|
|
1258
|
-
[
|
|
1259
|
-
[id]="
|
|
1291
|
+
[formField]="f"
|
|
1292
|
+
[id]="selectId"
|
|
1260
1293
|
class="form-select"
|
|
1261
1294
|
[class.form-select-sm]="props()?.size === 'sm'"
|
|
1262
1295
|
[class.form-select-lg]="props()?.size === 'lg'"
|
|
@@ -1284,22 +1317,21 @@ class BsSelectFieldComponent {
|
|
|
1284
1317
|
<div class="invalid-feedback d-block" [id]="errorId() + '-' + i" role="alert">{{ error.message }}</div>
|
|
1285
1318
|
}
|
|
1286
1319
|
</div>
|
|
1287
|
-
`, isInline: true, styles: [":host{--df-
|
|
1320
|
+
`, isInline: true, styles: [":host{--df-field-gap: .5rem;--df-label-font-weight: 500;--df-label-color: inherit;--df-hint-color: var(--bs-secondary-color, #6c757d);--df-hint-font-size: .875rem;--df-error-color: var(--bs-danger, #dc3545);--df-error-font-size: .875rem}.df-bs-field{display:flex;flex-direction:column;gap:var(--df-field-gap);width:100%;margin-bottom:1rem}.df-bs-label{font-weight:var(--df-label-font-weight);color:var(--df-label-color);margin-bottom:0}.df-bs-hint{color:var(--df-hint-color);font-size:var(--df-hint-font-size);margin-top:.25rem}.df-bs-field:has(.df-bs-hint){margin-bottom:.5rem}:host([hidden]){display:none!important}\n", ":host([hidden]){display:none!important}\n"], dependencies: [{ kind: "directive", type: FormField, selector: "[formField]", inputs: ["formField"] }, { kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1288
1321
|
}
|
|
1289
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
1322
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: BsSelectFieldComponent, decorators: [{
|
|
1290
1323
|
type: Component,
|
|
1291
|
-
args: [{ selector: 'df-bs-select', imports: [
|
|
1292
|
-
@let f = field();
|
|
1293
|
-
@let ariaInvalid = this.ariaInvalid(); @let ariaRequired = this.ariaRequired();
|
|
1324
|
+
args: [{ selector: 'df-bs-select', imports: [FormField, DynamicTextPipe, AsyncPipe], template: `
|
|
1325
|
+
@let f = field(); @let selectId = key() + '-select'; @let ariaInvalid = this.ariaInvalid(); @let ariaRequired = this.ariaRequired();
|
|
1294
1326
|
@let ariaDescribedBy = this.ariaDescribedBy();
|
|
1295
1327
|
|
|
1296
1328
|
<div class="mb-3">
|
|
1297
1329
|
@if (label(); as label) {
|
|
1298
|
-
<label [for]="
|
|
1330
|
+
<label [for]="selectId" class="form-label">{{ label | dynamicText | async }}</label>
|
|
1299
1331
|
}
|
|
1300
1332
|
<select
|
|
1301
|
-
[
|
|
1302
|
-
[id]="
|
|
1333
|
+
[formField]="f"
|
|
1334
|
+
[id]="selectId"
|
|
1303
1335
|
class="form-select"
|
|
1304
1336
|
[class.form-select-sm]="props()?.size === 'sm'"
|
|
1305
1337
|
[class.form-select-lg]="props()?.size === 'lg'"
|
|
@@ -1332,8 +1364,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
1332
1364
|
'[attr.data-testid]': 'key()',
|
|
1333
1365
|
'[class]': 'className()',
|
|
1334
1366
|
'[attr.hidden]': 'field()().hidden() || null',
|
|
1335
|
-
}, styles: [":host{--df-
|
|
1336
|
-
}], propDecorators: { field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }], key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], tabIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabIndex", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], props: [{ type: i0.Input, args: [{ isSignal: true, alias: "props", required: false }] }], validationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "validationMessages", required: false }] }], defaultValidationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultValidationMessages", required: false }] }] } });
|
|
1367
|
+
}, styles: [":host{--df-field-gap: .5rem;--df-label-font-weight: 500;--df-label-color: inherit;--df-hint-color: var(--bs-secondary-color, #6c757d);--df-hint-font-size: .875rem;--df-error-color: var(--bs-danger, #dc3545);--df-error-font-size: .875rem}.df-bs-field{display:flex;flex-direction:column;gap:var(--df-field-gap);width:100%;margin-bottom:1rem}.df-bs-label{font-weight:var(--df-label-font-weight);color:var(--df-label-color);margin-bottom:0}.df-bs-hint{color:var(--df-hint-color);font-size:var(--df-hint-font-size);margin-top:.25rem}.df-bs-field:has(.df-bs-hint){margin-bottom:.5rem}:host([hidden]){display:none!important}\n", ":host([hidden]){display:none!important}\n"] }]
|
|
1368
|
+
}], ctorParameters: () => [], propDecorators: { field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }], key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], tabIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabIndex", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], props: [{ type: i0.Input, args: [{ isSignal: true, alias: "props", required: false }] }], validationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "validationMessages", required: false }] }], defaultValidationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultValidationMessages", required: false }] }], meta: [{ type: i0.Input, args: [{ isSignal: true, alias: "meta", required: false }] }] } });
|
|
1337
1369
|
|
|
1338
1370
|
var bsSelect_component = /*#__PURE__*/Object.freeze({
|
|
1339
1371
|
__proto__: null,
|
|
@@ -1341,6 +1373,7 @@ var bsSelect_component = /*#__PURE__*/Object.freeze({
|
|
|
1341
1373
|
});
|
|
1342
1374
|
|
|
1343
1375
|
class BsSliderFieldComponent {
|
|
1376
|
+
elementRef = inject((ElementRef));
|
|
1344
1377
|
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : []));
|
|
1345
1378
|
key = input.required(...(ngDevMode ? [{ debugName: "key" }] : []));
|
|
1346
1379
|
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : []));
|
|
@@ -1353,9 +1386,13 @@ class BsSliderFieldComponent {
|
|
|
1353
1386
|
props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : []));
|
|
1354
1387
|
validationMessages = input(...(ngDevMode ? [undefined, { debugName: "validationMessages" }] : []));
|
|
1355
1388
|
defaultValidationMessages = input(...(ngDevMode ? [undefined, { debugName: "defaultValidationMessages" }] : []));
|
|
1389
|
+
meta = input(...(ngDevMode ? [undefined, { debugName: "meta" }] : []));
|
|
1356
1390
|
resolvedErrors = createResolvedErrorsSignal(this.field, this.validationMessages, this.defaultValidationMessages);
|
|
1357
1391
|
showErrors = shouldShowErrors(this.field);
|
|
1358
1392
|
errorsToDisplay = computed(() => (this.showErrors() ? this.resolvedErrors() : []), ...(ngDevMode ? [{ debugName: "errorsToDisplay" }] : []));
|
|
1393
|
+
constructor() {
|
|
1394
|
+
setupMetaTracking(this.elementRef, this.meta, { selector: 'input' });
|
|
1395
|
+
}
|
|
1359
1396
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
1360
1397
|
// Accessibility
|
|
1361
1398
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
@@ -1379,15 +1416,14 @@ class BsSliderFieldComponent {
|
|
|
1379
1416
|
});
|
|
1380
1417
|
return ids.length > 0 ? ids.join(' ') : null;
|
|
1381
1418
|
}, ...(ngDevMode ? [{ debugName: "ariaDescribedBy" }] : []));
|
|
1382
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
1383
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.
|
|
1384
|
-
@let f = field();
|
|
1385
|
-
@let ariaInvalid = this.ariaInvalid(); @let ariaRequired = this.ariaRequired();
|
|
1419
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: BsSliderFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1420
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: BsSliderFieldComponent, isStandalone: true, selector: "df-bs-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 }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", 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 }, meta: { classPropertyName: "meta", publicName: "meta", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "className()", "id": "`${key()}`", "attr.data-testid": "key()", "attr.hidden": "field()().hidden() || null" } }, ngImport: i0, template: `
|
|
1421
|
+
@let f = field(); @let inputId = key() + '-input'; @let ariaInvalid = this.ariaInvalid(); @let ariaRequired = this.ariaRequired();
|
|
1386
1422
|
@let ariaDescribedBy = this.ariaDescribedBy();
|
|
1387
1423
|
|
|
1388
1424
|
<div class="mb-3">
|
|
1389
1425
|
@if (label(); as label) {
|
|
1390
|
-
<label [for]="
|
|
1426
|
+
<label [for]="inputId" class="form-label">
|
|
1391
1427
|
{{ label | dynamicText | async }}
|
|
1392
1428
|
@if (props()?.showValue) {
|
|
1393
1429
|
<span class="ms-2 badge bg-secondary"> {{ props()?.valuePrefix }}{{ f().value() }}{{ props()?.valueSuffix }} </span>
|
|
@@ -1398,8 +1434,8 @@ class BsSliderFieldComponent {
|
|
|
1398
1434
|
<input
|
|
1399
1435
|
type="range"
|
|
1400
1436
|
dfBsInputConstraints
|
|
1401
|
-
[
|
|
1402
|
-
[id]="
|
|
1437
|
+
[formField]="f"
|
|
1438
|
+
[id]="inputId"
|
|
1403
1439
|
[dfMin]="props()?.min ?? min()"
|
|
1404
1440
|
[dfMax]="props()?.max ?? max()"
|
|
1405
1441
|
[dfStep]="props()?.step ?? step()"
|
|
@@ -1419,18 +1455,17 @@ class BsSliderFieldComponent {
|
|
|
1419
1455
|
<div class="invalid-feedback d-block" [id]="errorId() + '-' + i" role="alert">{{ error.message }}</div>
|
|
1420
1456
|
}
|
|
1421
1457
|
</div>
|
|
1422
|
-
`, isInline: true, styles: [":host{--df-
|
|
1458
|
+
`, isInline: true, styles: [":host{--df-field-gap: .5rem;--df-label-font-weight: 500;--df-label-color: inherit;--df-hint-color: var(--bs-secondary-color, #6c757d);--df-hint-font-size: .875rem;--df-error-color: var(--bs-danger, #dc3545);--df-error-font-size: .875rem}.df-bs-field{display:flex;flex-direction:column;gap:var(--df-field-gap);width:100%;margin-bottom:1rem}.df-bs-label{font-weight:var(--df-label-font-weight);color:var(--df-label-color);margin-bottom:0}.df-bs-hint{color:var(--df-hint-color);font-size:var(--df-hint-font-size);margin-top:.25rem}.df-bs-field:has(.df-bs-hint){margin-bottom:.5rem}:host([hidden]){display:none!important}\n", ":host{display:block}:host([hidden]){display:none!important}\n"], dependencies: [{ kind: "directive", type: FormField, selector: "[formField]", inputs: ["formField"] }, { kind: "directive", type: InputConstraintsDirective, selector: "[dfBsInputConstraints]", inputs: ["dfMin", "dfMax", "dfStep"] }, { kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1423
1459
|
}
|
|
1424
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
1460
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: BsSliderFieldComponent, decorators: [{
|
|
1425
1461
|
type: Component,
|
|
1426
|
-
args: [{ selector: 'df-bs-slider', imports: [
|
|
1427
|
-
@let f = field();
|
|
1428
|
-
@let ariaInvalid = this.ariaInvalid(); @let ariaRequired = this.ariaRequired();
|
|
1462
|
+
args: [{ selector: 'df-bs-slider', imports: [FormField, DynamicTextPipe, AsyncPipe, InputConstraintsDirective], template: `
|
|
1463
|
+
@let f = field(); @let inputId = key() + '-input'; @let ariaInvalid = this.ariaInvalid(); @let ariaRequired = this.ariaRequired();
|
|
1429
1464
|
@let ariaDescribedBy = this.ariaDescribedBy();
|
|
1430
1465
|
|
|
1431
1466
|
<div class="mb-3">
|
|
1432
1467
|
@if (label(); as label) {
|
|
1433
|
-
<label [for]="
|
|
1468
|
+
<label [for]="inputId" class="form-label">
|
|
1434
1469
|
{{ label | dynamicText | async }}
|
|
1435
1470
|
@if (props()?.showValue) {
|
|
1436
1471
|
<span class="ms-2 badge bg-secondary"> {{ props()?.valuePrefix }}{{ f().value() }}{{ props()?.valueSuffix }} </span>
|
|
@@ -1441,8 +1476,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
1441
1476
|
<input
|
|
1442
1477
|
type="range"
|
|
1443
1478
|
dfBsInputConstraints
|
|
1444
|
-
[
|
|
1445
|
-
[id]="
|
|
1479
|
+
[formField]="f"
|
|
1480
|
+
[id]="inputId"
|
|
1446
1481
|
[dfMin]="props()?.min ?? min()"
|
|
1447
1482
|
[dfMax]="props()?.max ?? max()"
|
|
1448
1483
|
[dfStep]="props()?.step ?? step()"
|
|
@@ -1467,8 +1502,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
1467
1502
|
'[id]': '`${key()}`',
|
|
1468
1503
|
'[attr.data-testid]': 'key()',
|
|
1469
1504
|
'[attr.hidden]': 'field()().hidden() || null',
|
|
1470
|
-
}, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{--df-
|
|
1471
|
-
}], propDecorators: { field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }], key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], tabIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabIndex", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], step: [{ type: i0.Input, args: [{ isSignal: true, alias: "step", required: false }] }], props: [{ type: i0.Input, args: [{ isSignal: true, alias: "props", required: false }] }], validationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "validationMessages", required: false }] }], defaultValidationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultValidationMessages", required: false }] }] } });
|
|
1505
|
+
}, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{--df-field-gap: .5rem;--df-label-font-weight: 500;--df-label-color: inherit;--df-hint-color: var(--bs-secondary-color, #6c757d);--df-hint-font-size: .875rem;--df-error-color: var(--bs-danger, #dc3545);--df-error-font-size: .875rem}.df-bs-field{display:flex;flex-direction:column;gap:var(--df-field-gap);width:100%;margin-bottom:1rem}.df-bs-label{font-weight:var(--df-label-font-weight);color:var(--df-label-color);margin-bottom:0}.df-bs-hint{color:var(--df-hint-color);font-size:var(--df-hint-font-size);margin-top:.25rem}.df-bs-field:has(.df-bs-hint){margin-bottom:.5rem}:host([hidden]){display:none!important}\n", ":host{display:block}:host([hidden]){display:none!important}\n"] }]
|
|
1506
|
+
}], ctorParameters: () => [], propDecorators: { field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }], key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], tabIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabIndex", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], step: [{ type: i0.Input, args: [{ isSignal: true, alias: "step", required: false }] }], props: [{ type: i0.Input, args: [{ isSignal: true, alias: "props", required: false }] }], validationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "validationMessages", required: false }] }], defaultValidationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultValidationMessages", required: false }] }], meta: [{ type: i0.Input, args: [{ isSignal: true, alias: "meta", required: false }] }] } });
|
|
1472
1507
|
|
|
1473
1508
|
var bsSlider_component = /*#__PURE__*/Object.freeze({
|
|
1474
1509
|
__proto__: null,
|
|
@@ -1476,6 +1511,7 @@ var bsSlider_component = /*#__PURE__*/Object.freeze({
|
|
|
1476
1511
|
});
|
|
1477
1512
|
|
|
1478
1513
|
class BsTextareaFieldComponent {
|
|
1514
|
+
elementRef = inject((ElementRef));
|
|
1479
1515
|
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : []));
|
|
1480
1516
|
key = input.required(...(ngDevMode ? [{ debugName: "key" }] : []));
|
|
1481
1517
|
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : []));
|
|
@@ -1485,9 +1521,13 @@ class BsTextareaFieldComponent {
|
|
|
1485
1521
|
props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : []));
|
|
1486
1522
|
validationMessages = input(...(ngDevMode ? [undefined, { debugName: "validationMessages" }] : []));
|
|
1487
1523
|
defaultValidationMessages = input(...(ngDevMode ? [undefined, { debugName: "defaultValidationMessages" }] : []));
|
|
1524
|
+
meta = input(...(ngDevMode ? [undefined, { debugName: "meta" }] : []));
|
|
1488
1525
|
resolvedErrors = createResolvedErrorsSignal(this.field, this.validationMessages, this.defaultValidationMessages);
|
|
1489
1526
|
showErrors = shouldShowErrors(this.field);
|
|
1490
1527
|
errorsToDisplay = computed(() => (this.showErrors() ? this.resolvedErrors() : []), ...(ngDevMode ? [{ debugName: "errorsToDisplay" }] : []));
|
|
1528
|
+
constructor() {
|
|
1529
|
+
setupMetaTracking(this.elementRef, this.meta, { selector: 'textarea' });
|
|
1530
|
+
}
|
|
1491
1531
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
1492
1532
|
// Accessibility
|
|
1493
1533
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
@@ -1511,18 +1551,17 @@ class BsTextareaFieldComponent {
|
|
|
1511
1551
|
});
|
|
1512
1552
|
return ids.length > 0 ? ids.join(' ') : null;
|
|
1513
1553
|
}, ...(ngDevMode ? [{ debugName: "ariaDescribedBy" }] : []));
|
|
1514
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
1515
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.
|
|
1554
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: BsTextareaFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1555
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: BsTextareaFieldComponent, isStandalone: true, selector: "df-bs-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 }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null }, meta: { classPropertyName: "meta", publicName: "meta", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "id": "`${key()}`", "attr.data-testid": "key()", "class": "className()", "attr.hidden": "field()().hidden() || null" } }, ngImport: i0, template: `
|
|
1516
1556
|
@let f = field(); @let p = props(); @let ariaInvalid = this.ariaInvalid(); @let ariaRequired = this.ariaRequired();
|
|
1517
|
-
@let ariaDescribedBy = this.ariaDescribedBy();
|
|
1557
|
+
@let ariaDescribedBy = this.ariaDescribedBy(); @let textareaId = key() + '-textarea';
|
|
1518
1558
|
@if (p?.floatingLabel) {
|
|
1519
1559
|
<!-- Floating label variant -->
|
|
1520
1560
|
<div class="form-floating mb-3">
|
|
1521
1561
|
<textarea
|
|
1522
|
-
[
|
|
1523
|
-
[id]="
|
|
1562
|
+
[formField]="f"
|
|
1563
|
+
[id]="textareaId"
|
|
1524
1564
|
[placeholder]="(placeholder() | dynamicText | async) ?? ''"
|
|
1525
|
-
[rows]="p?.rows || 4"
|
|
1526
1565
|
[attr.tabindex]="tabIndex()"
|
|
1527
1566
|
[attr.aria-invalid]="ariaInvalid"
|
|
1528
1567
|
[attr.aria-required]="ariaRequired"
|
|
@@ -1535,7 +1574,7 @@ class BsTextareaFieldComponent {
|
|
|
1535
1574
|
></textarea>
|
|
1536
1575
|
|
|
1537
1576
|
@if (label()) {
|
|
1538
|
-
<label [for]="
|
|
1577
|
+
<label [for]="textareaId">{{ label() | dynamicText | async }}</label>
|
|
1539
1578
|
}
|
|
1540
1579
|
@if (p?.validFeedback && f().valid() && f().touched()) {
|
|
1541
1580
|
<div class="valid-feedback d-block">
|
|
@@ -1550,14 +1589,13 @@ class BsTextareaFieldComponent {
|
|
|
1550
1589
|
<!-- Standard variant -->
|
|
1551
1590
|
<div class="mb-3">
|
|
1552
1591
|
@if (label()) {
|
|
1553
|
-
<label [for]="
|
|
1592
|
+
<label [for]="textareaId" class="form-label">{{ label() | dynamicText | async }}</label>
|
|
1554
1593
|
}
|
|
1555
1594
|
|
|
1556
1595
|
<textarea
|
|
1557
|
-
[
|
|
1558
|
-
[id]="
|
|
1596
|
+
[formField]="f"
|
|
1597
|
+
[id]="textareaId"
|
|
1559
1598
|
[placeholder]="(placeholder() | dynamicText | async) ?? ''"
|
|
1560
|
-
[rows]="p?.rows || 4"
|
|
1561
1599
|
[attr.tabindex]="tabIndex()"
|
|
1562
1600
|
[attr.aria-invalid]="ariaInvalid"
|
|
1563
1601
|
[attr.aria-required]="ariaRequired"
|
|
@@ -1584,21 +1622,20 @@ class BsTextareaFieldComponent {
|
|
|
1584
1622
|
}
|
|
1585
1623
|
</div>
|
|
1586
1624
|
}
|
|
1587
|
-
`, isInline: true, styles: [":host{--df-
|
|
1625
|
+
`, isInline: true, styles: [":host{--df-field-gap: .5rem;--df-label-font-weight: 500;--df-label-color: inherit;--df-hint-color: var(--bs-secondary-color, #6c757d);--df-hint-font-size: .875rem;--df-error-color: var(--bs-danger, #dc3545);--df-error-font-size: .875rem}.df-bs-field{display:flex;flex-direction:column;gap:var(--df-field-gap);width:100%;margin-bottom:1rem}.df-bs-label{font-weight:var(--df-label-font-weight);color:var(--df-label-color);margin-bottom:0}.df-bs-hint{color:var(--df-hint-color);font-size:var(--df-hint-font-size);margin-top:.25rem}.df-bs-field:has(.df-bs-hint){margin-bottom:.5rem}:host([hidden]){display:none!important}\n", ":host([hidden]){display:none!important}\n"], dependencies: [{ kind: "directive", type: FormField, selector: "[formField]", inputs: ["formField"] }, { kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1588
1626
|
}
|
|
1589
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
1627
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: BsTextareaFieldComponent, decorators: [{
|
|
1590
1628
|
type: Component,
|
|
1591
|
-
args: [{ selector: 'df-bs-textarea', imports: [
|
|
1629
|
+
args: [{ selector: 'df-bs-textarea', imports: [FormField, DynamicTextPipe, AsyncPipe], template: `
|
|
1592
1630
|
@let f = field(); @let p = props(); @let ariaInvalid = this.ariaInvalid(); @let ariaRequired = this.ariaRequired();
|
|
1593
|
-
@let ariaDescribedBy = this.ariaDescribedBy();
|
|
1631
|
+
@let ariaDescribedBy = this.ariaDescribedBy(); @let textareaId = key() + '-textarea';
|
|
1594
1632
|
@if (p?.floatingLabel) {
|
|
1595
1633
|
<!-- Floating label variant -->
|
|
1596
1634
|
<div class="form-floating mb-3">
|
|
1597
1635
|
<textarea
|
|
1598
|
-
[
|
|
1599
|
-
[id]="
|
|
1636
|
+
[formField]="f"
|
|
1637
|
+
[id]="textareaId"
|
|
1600
1638
|
[placeholder]="(placeholder() | dynamicText | async) ?? ''"
|
|
1601
|
-
[rows]="p?.rows || 4"
|
|
1602
1639
|
[attr.tabindex]="tabIndex()"
|
|
1603
1640
|
[attr.aria-invalid]="ariaInvalid"
|
|
1604
1641
|
[attr.aria-required]="ariaRequired"
|
|
@@ -1611,7 +1648,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
1611
1648
|
></textarea>
|
|
1612
1649
|
|
|
1613
1650
|
@if (label()) {
|
|
1614
|
-
<label [for]="
|
|
1651
|
+
<label [for]="textareaId">{{ label() | dynamicText | async }}</label>
|
|
1615
1652
|
}
|
|
1616
1653
|
@if (p?.validFeedback && f().valid() && f().touched()) {
|
|
1617
1654
|
<div class="valid-feedback d-block">
|
|
@@ -1626,14 +1663,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
1626
1663
|
<!-- Standard variant -->
|
|
1627
1664
|
<div class="mb-3">
|
|
1628
1665
|
@if (label()) {
|
|
1629
|
-
<label [for]="
|
|
1666
|
+
<label [for]="textareaId" class="form-label">{{ label() | dynamicText | async }}</label>
|
|
1630
1667
|
}
|
|
1631
1668
|
|
|
1632
1669
|
<textarea
|
|
1633
|
-
[
|
|
1634
|
-
[id]="
|
|
1670
|
+
[formField]="f"
|
|
1671
|
+
[id]="textareaId"
|
|
1635
1672
|
[placeholder]="(placeholder() | dynamicText | async) ?? ''"
|
|
1636
|
-
[rows]="p?.rows || 4"
|
|
1637
1673
|
[attr.tabindex]="tabIndex()"
|
|
1638
1674
|
[attr.aria-invalid]="ariaInvalid"
|
|
1639
1675
|
[attr.aria-required]="ariaRequired"
|
|
@@ -1665,8 +1701,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
1665
1701
|
'[attr.data-testid]': 'key()',
|
|
1666
1702
|
'[class]': 'className()',
|
|
1667
1703
|
'[attr.hidden]': 'field()().hidden() || null',
|
|
1668
|
-
}, styles: [":host{--df-
|
|
1669
|
-
}], propDecorators: { field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }], key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], tabIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabIndex", required: false }] }], props: [{ type: i0.Input, args: [{ isSignal: true, alias: "props", required: false }] }], validationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "validationMessages", required: false }] }], defaultValidationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultValidationMessages", required: false }] }] } });
|
|
1704
|
+
}, styles: [":host{--df-field-gap: .5rem;--df-label-font-weight: 500;--df-label-color: inherit;--df-hint-color: var(--bs-secondary-color, #6c757d);--df-hint-font-size: .875rem;--df-error-color: var(--bs-danger, #dc3545);--df-error-font-size: .875rem}.df-bs-field{display:flex;flex-direction:column;gap:var(--df-field-gap);width:100%;margin-bottom:1rem}.df-bs-label{font-weight:var(--df-label-font-weight);color:var(--df-label-color);margin-bottom:0}.df-bs-hint{color:var(--df-hint-color);font-size:var(--df-hint-font-size);margin-top:.25rem}.df-bs-field:has(.df-bs-hint){margin-bottom:.5rem}:host([hidden]){display:none!important}\n", ":host([hidden]){display:none!important}\n"] }]
|
|
1705
|
+
}], ctorParameters: () => [], propDecorators: { field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }], key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], tabIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabIndex", required: false }] }], props: [{ type: i0.Input, args: [{ isSignal: true, alias: "props", required: false }] }], validationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "validationMessages", required: false }] }], defaultValidationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultValidationMessages", required: false }] }], meta: [{ type: i0.Input, args: [{ isSignal: true, alias: "meta", required: false }] }] } });
|
|
1670
1706
|
|
|
1671
1707
|
var bsTextarea_component = /*#__PURE__*/Object.freeze({
|
|
1672
1708
|
__proto__: null,
|
|
@@ -1674,6 +1710,7 @@ var bsTextarea_component = /*#__PURE__*/Object.freeze({
|
|
|
1674
1710
|
});
|
|
1675
1711
|
|
|
1676
1712
|
class BsToggleFieldComponent {
|
|
1713
|
+
elementRef = inject((ElementRef));
|
|
1677
1714
|
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : []));
|
|
1678
1715
|
key = input.required(...(ngDevMode ? [{ debugName: "key" }] : []));
|
|
1679
1716
|
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : []));
|
|
@@ -1683,9 +1720,13 @@ class BsToggleFieldComponent {
|
|
|
1683
1720
|
props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : []));
|
|
1684
1721
|
validationMessages = input(...(ngDevMode ? [undefined, { debugName: "validationMessages" }] : []));
|
|
1685
1722
|
defaultValidationMessages = input(...(ngDevMode ? [undefined, { debugName: "defaultValidationMessages" }] : []));
|
|
1723
|
+
meta = input(...(ngDevMode ? [undefined, { debugName: "meta" }] : []));
|
|
1686
1724
|
resolvedErrors = createResolvedErrorsSignal(this.field, this.validationMessages, this.defaultValidationMessages);
|
|
1687
1725
|
showErrors = shouldShowErrors(this.field);
|
|
1688
1726
|
errorsToDisplay = computed(() => (this.showErrors() ? this.resolvedErrors() : []), ...(ngDevMode ? [{ debugName: "errorsToDisplay" }] : []));
|
|
1727
|
+
constructor() {
|
|
1728
|
+
setupMetaTracking(this.elementRef, this.meta, { selector: 'input[type="checkbox"]' });
|
|
1729
|
+
}
|
|
1689
1730
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
1690
1731
|
// Accessibility
|
|
1691
1732
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
@@ -1709,10 +1750,9 @@ class BsToggleFieldComponent {
|
|
|
1709
1750
|
});
|
|
1710
1751
|
return ids.length > 0 ? ids.join(' ') : null;
|
|
1711
1752
|
}, ...(ngDevMode ? [{ debugName: "ariaDescribedBy" }] : []));
|
|
1712
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
1713
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.
|
|
1714
|
-
@let f = field();
|
|
1715
|
-
@let ariaInvalid = this.ariaInvalid(); @let ariaRequired = this.ariaRequired();
|
|
1753
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: BsToggleFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1754
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: BsToggleFieldComponent, isStandalone: true, selector: "df-bs-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 }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null }, meta: { classPropertyName: "meta", publicName: "meta", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "className()", "id": "`${key()}`", "attr.data-testid": "key()", "attr.hidden": "field()().hidden() || null" } }, ngImport: i0, template: `
|
|
1755
|
+
@let f = field(); @let inputId = key() + '-input'; @let ariaInvalid = this.ariaInvalid(); @let ariaRequired = this.ariaRequired();
|
|
1716
1756
|
@let ariaDescribedBy = this.ariaDescribedBy();
|
|
1717
1757
|
|
|
1718
1758
|
<div
|
|
@@ -1725,17 +1765,16 @@ class BsToggleFieldComponent {
|
|
|
1725
1765
|
>
|
|
1726
1766
|
<input
|
|
1727
1767
|
type="checkbox"
|
|
1728
|
-
[
|
|
1729
|
-
[id]="
|
|
1768
|
+
[formField]="f"
|
|
1769
|
+
[id]="inputId"
|
|
1730
1770
|
class="form-check-input"
|
|
1731
1771
|
[class.is-invalid]="f().invalid() && f().touched()"
|
|
1732
1772
|
[attr.tabindex]="tabIndex()"
|
|
1733
1773
|
[attr.aria-invalid]="ariaInvalid"
|
|
1734
1774
|
[attr.aria-required]="ariaRequired"
|
|
1735
1775
|
[attr.aria-describedby]="ariaDescribedBy"
|
|
1736
|
-
[attr.hidden]="f().hidden() || null"
|
|
1737
1776
|
/>
|
|
1738
|
-
<label [for]="
|
|
1777
|
+
<label [for]="inputId" class="form-check-label">
|
|
1739
1778
|
{{ label() | dynamicText | async }}
|
|
1740
1779
|
</label>
|
|
1741
1780
|
</div>
|
|
@@ -1748,13 +1787,12 @@ class BsToggleFieldComponent {
|
|
|
1748
1787
|
@for (error of errorsToDisplay(); track error.kind; let i = $index) {
|
|
1749
1788
|
<div class="invalid-feedback d-block" [id]="errorId() + '-' + i" role="alert">{{ error.message }}</div>
|
|
1750
1789
|
}
|
|
1751
|
-
`, isInline: true, styles: [":host{--df-
|
|
1790
|
+
`, isInline: true, styles: [":host{--df-field-gap: .5rem;--df-label-font-weight: 500;--df-label-color: inherit;--df-hint-color: var(--bs-secondary-color, #6c757d);--df-hint-font-size: .875rem;--df-error-color: var(--bs-danger, #dc3545);--df-error-font-size: .875rem}.df-bs-field{display:flex;flex-direction:column;gap:var(--df-field-gap);width:100%;margin-bottom:1rem}.df-bs-label{font-weight:var(--df-label-font-weight);color:var(--df-label-color);margin-bottom:0}.df-bs-hint{color:var(--df-hint-color);font-size:var(--df-hint-font-size);margin-top:.25rem}.df-bs-field:has(.df-bs-hint){margin-bottom:.5rem}:host([hidden]){display:none!important}\n", ":host{display:block}:host([hidden]){display:none!important}.form-switch-sm .form-check-input{width:1.75rem;height:1rem;font-size:.875rem}.form-switch-lg .form-check-input{width:3rem;height:1.75rem;font-size:1.125rem}\n"], dependencies: [{ kind: "directive", type: FormField, selector: "[formField]", inputs: ["formField"] }, { kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1752
1791
|
}
|
|
1753
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
1792
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: BsToggleFieldComponent, decorators: [{
|
|
1754
1793
|
type: Component,
|
|
1755
|
-
args: [{ selector: 'df-bs-toggle', imports: [
|
|
1756
|
-
@let f = field();
|
|
1757
|
-
@let ariaInvalid = this.ariaInvalid(); @let ariaRequired = this.ariaRequired();
|
|
1794
|
+
args: [{ selector: 'df-bs-toggle', imports: [FormField, DynamicTextPipe, AsyncPipe], template: `
|
|
1795
|
+
@let f = field(); @let inputId = key() + '-input'; @let ariaInvalid = this.ariaInvalid(); @let ariaRequired = this.ariaRequired();
|
|
1758
1796
|
@let ariaDescribedBy = this.ariaDescribedBy();
|
|
1759
1797
|
|
|
1760
1798
|
<div
|
|
@@ -1767,17 +1805,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
1767
1805
|
>
|
|
1768
1806
|
<input
|
|
1769
1807
|
type="checkbox"
|
|
1770
|
-
[
|
|
1771
|
-
[id]="
|
|
1808
|
+
[formField]="f"
|
|
1809
|
+
[id]="inputId"
|
|
1772
1810
|
class="form-check-input"
|
|
1773
1811
|
[class.is-invalid]="f().invalid() && f().touched()"
|
|
1774
1812
|
[attr.tabindex]="tabIndex()"
|
|
1775
1813
|
[attr.aria-invalid]="ariaInvalid"
|
|
1776
1814
|
[attr.aria-required]="ariaRequired"
|
|
1777
1815
|
[attr.aria-describedby]="ariaDescribedBy"
|
|
1778
|
-
[attr.hidden]="f().hidden() || null"
|
|
1779
1816
|
/>
|
|
1780
|
-
<label [for]="
|
|
1817
|
+
<label [for]="inputId" class="form-check-label">
|
|
1781
1818
|
{{ label() | dynamicText | async }}
|
|
1782
1819
|
</label>
|
|
1783
1820
|
</div>
|
|
@@ -1795,8 +1832,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
1795
1832
|
'[id]': '`${key()}`',
|
|
1796
1833
|
'[attr.data-testid]': 'key()',
|
|
1797
1834
|
'[attr.hidden]': 'field()().hidden() || null',
|
|
1798
|
-
}, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{--df-
|
|
1799
|
-
}], propDecorators: { field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }], key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], tabIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabIndex", required: false }] }], props: [{ type: i0.Input, args: [{ isSignal: true, alias: "props", required: false }] }], validationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "validationMessages", required: false }] }], defaultValidationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultValidationMessages", required: false }] }] } });
|
|
1835
|
+
}, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{--df-field-gap: .5rem;--df-label-font-weight: 500;--df-label-color: inherit;--df-hint-color: var(--bs-secondary-color, #6c757d);--df-hint-font-size: .875rem;--df-error-color: var(--bs-danger, #dc3545);--df-error-font-size: .875rem}.df-bs-field{display:flex;flex-direction:column;gap:var(--df-field-gap);width:100%;margin-bottom:1rem}.df-bs-label{font-weight:var(--df-label-font-weight);color:var(--df-label-color);margin-bottom:0}.df-bs-hint{color:var(--df-hint-color);font-size:var(--df-hint-font-size);margin-top:.25rem}.df-bs-field:has(.df-bs-hint){margin-bottom:.5rem}:host([hidden]){display:none!important}\n", ":host{display:block}:host([hidden]){display:none!important}.form-switch-sm .form-check-input{width:1.75rem;height:1rem;font-size:.875rem}.form-switch-lg .form-check-input{width:3rem;height:1.75rem;font-size:1.125rem}\n"] }]
|
|
1836
|
+
}], ctorParameters: () => [], propDecorators: { field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }], key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], tabIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabIndex", required: false }] }], props: [{ type: i0.Input, args: [{ isSignal: true, alias: "props", required: false }] }], validationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "validationMessages", required: false }] }], defaultValidationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultValidationMessages", required: false }] }], meta: [{ type: i0.Input, args: [{ isSignal: true, alias: "meta", required: false }] }] } });
|
|
1800
1837
|
|
|
1801
1838
|
var bsToggle_component = /*#__PURE__*/Object.freeze({
|
|
1802
1839
|
__proto__: null,
|
|
@@ -2087,6 +2124,7 @@ const BOOTSTRAP_FIELD_TYPES = [
|
|
|
2087
2124
|
name: BsField.Input,
|
|
2088
2125
|
loadComponent: () => Promise.resolve().then(function () { return bsInput_component; }),
|
|
2089
2126
|
mapper: valueFieldMapper,
|
|
2127
|
+
propsToMeta: ['type'],
|
|
2090
2128
|
},
|
|
2091
2129
|
{
|
|
2092
2130
|
name: BsField.Select,
|
|
@@ -2138,6 +2176,7 @@ const BOOTSTRAP_FIELD_TYPES = [
|
|
|
2138
2176
|
name: BsField.Textarea,
|
|
2139
2177
|
loadComponent: () => Promise.resolve().then(function () { return bsTextarea_component; }),
|
|
2140
2178
|
mapper: valueFieldMapper,
|
|
2179
|
+
propsToMeta: ['rows'],
|
|
2141
2180
|
},
|
|
2142
2181
|
{
|
|
2143
2182
|
name: BsField.Radio,
|