@fundamental-ngx/platform 0.64.0-rc.9 → 0.64.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,15 +1,15 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, ContentChild, Input, ChangeDetectionStrategy, ViewEncapsulation, Component, Directive, Inject, Injectable, forwardRef, EventEmitter, inject, DestroyRef, TemplateRef, ElementRef, booleanAttribute, ViewChildren, ContentChildren, ViewChild, Output, Optional, Self, SkipSelf, Attribute, NgModule, input, HostListener, Injector, computed, Pipe, ChangeDetectorRef, signal, effect, isDevMode, Renderer2, LOCALE_ID } from '@angular/core';
2
+ import { InjectionToken, Input, Optional, Inject, Directive, ContentChild, ChangeDetectionStrategy, ViewEncapsulation, Component, Injectable, forwardRef, EventEmitter, inject, DestroyRef, TemplateRef, ElementRef, booleanAttribute, ViewChildren, ContentChildren, ViewChild, Output, Self, SkipSelf, Attribute, NgModule, input, HostListener, Injector, computed, Pipe, ChangeDetectorRef, signal, effect, isDevMode, Renderer2, LOCALE_ID } from '@angular/core';
3
3
  import * as i1$4 from '@fundamental-ngx/cdk/forms';
4
4
  import { FD_FORM_FIELD, FD_FORM_FIELD_CONTROL, CvaControl, CvaDirective } from '@fundamental-ngx/cdk/forms';
5
5
  import * as i1 from '@fundamental-ngx/platform/shared';
6
6
  import { ColumnLayoutGridClass, ResponsiveBreakPointConfig, RESPONSIVE_BREAKPOINTS_CONFIG, BaseInput, InLineLayoutCollectionBaseInput, coerceArraySafe, MatchingStrategy, CollectionBaseInput, isOptionItem, isJsObject, isFunction, isDataSource, ArrayMultiInputDataSource, ObservableMultiInputDataSource, isString, MultiInputDataSource, DATA_PROVIDERS, FormFieldGroup, FormGroupContainer, ArrayComboBoxDataSource, ObservableComboBoxDataSource, ComboBoxDataSource, FDP_DO_CHECK, FDP_FORM_SUBMIT, ArrayMultiComboBoxDataSource, ObservableMultiComboBoxDataSource, isSelectableOptionItem, MultiComboBoxDataSource } from '@fundamental-ngx/platform/shared';
7
- import * as i1$1 from '@angular/forms';
8
- import { Validators, FormControl, FormGroup, FormsModule, ReactiveFormsModule, ControlContainer, NgForm, NgControl, FormGroupDirective } from '@angular/forms';
9
- import * as i2 from '@fundamental-ngx/cdk/utils';
10
- import { uniqBy, RangeSelector, KeyUtil, TemplateDirective, InitialFocusDirective, DisplayFnPipe, warnOnce, DynamicComponentService, merge as merge$1, cloneDeep, isFunction as isFunction$1, selectStrategy, resizeObservable, FocusTrapService, SearchHighlightPipe, destroyObservable, RtlService, OnlyDigitsDirective } from '@fundamental-ngx/cdk/utils';
11
7
  import * as i2$2 from 'rxjs';
12
8
  import { Subject, BehaviorSubject, combineLatest, filter, tap, Subscription, isObservable, fromEvent, merge, of, timer, interval } from 'rxjs';
9
+ import * as i1$1 from '@angular/forms';
10
+ import { Validators, FormControl, FormGroup, FormsModule, ReactiveFormsModule, NgControl, ControlContainer, NgForm, FormGroupDirective } from '@angular/forms';
11
+ import * as i2 from '@fundamental-ngx/cdk/utils';
12
+ import { uniqBy, RangeSelector, KeyUtil, TemplateDirective, InitialFocusDirective, DisplayFnPipe, warnOnce, DynamicComponentService, merge as merge$1, cloneDeep, isFunction as isFunction$1, selectStrategy, FocusTrapService, SearchHighlightPipe, resizeObservable, destroyObservable, RtlService, OnlyDigitsDirective } from '@fundamental-ngx/cdk/utils';
13
13
  import { distinctUntilChanged, map, switchMap, startWith, debounceTime, tap as tap$1, filter as filter$1, take, takeUntil, skip } from 'rxjs/operators';
14
14
  import * as i3 from '@angular/common';
15
15
  import { NgTemplateOutlet, CommonModule, NgClass, KeyValuePipe, formatNumber } from '@angular/common';
@@ -84,91 +84,68 @@ const DefaultGapLayout = {
84
84
  S: 0
85
85
  };
86
86
 
87
- /**
88
- * Returns form state based on priority.
89
- * @param states Error states of the form fields.
90
- * @param priorityStates Array of prioritized states.
91
- * @returns first found form state of `priorityStates`.
92
- */
93
- function getFormState(states, priorityStates = ['error', 'warning', 'information', 'success', 'default']) {
94
- let priorityState = 'default';
95
- priorityStates.some((state) => {
96
- const firstErrorState = states.find((formState) => formState === state);
97
- if (!firstErrorState) {
98
- return false;
99
- }
100
- priorityState = firstErrorState;
87
+ const FDP_FORM_ERROR_DIRECTIVE = new InjectionToken('FdpFormErrorDirective');
88
+
89
+ class FormFieldErrorDescriptionDirective {
90
+ /** @hidden */
91
+ constructor(templateRef, _formFieldErrorDirective) {
92
+ this.templateRef = templateRef;
93
+ this._formFieldErrorDirective = _formFieldErrorDirective;
94
+ this._formFieldErrorDirective?.registerDescription(this);
95
+ }
96
+ /** @hidden */
97
+ static ngTemplateContextGuard(dir, ctx) {
101
98
  return true;
102
- });
103
- return priorityState;
99
+ }
100
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FormFieldErrorDescriptionDirective, deps: [{ token: i0.TemplateRef }, { token: FDP_FORM_ERROR_DIRECTIVE, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
101
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.5", type: FormFieldErrorDescriptionDirective, isStandalone: true, selector: "[fdpFormFieldErrorDescription]", inputs: { fdpFormFieldErrorDescriptionAs: "fdpFormFieldErrorDescriptionAs" }, ngImport: i0 }); }
104
102
  }
103
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FormFieldErrorDescriptionDirective, decorators: [{
104
+ type: Directive,
105
+ args: [{
106
+ selector: '[fdpFormFieldErrorDescription]',
107
+ standalone: true
108
+ }]
109
+ }], ctorParameters: () => [{ type: i0.TemplateRef }, { type: undefined, decorators: [{
110
+ type: Optional
111
+ }, {
112
+ type: Inject,
113
+ args: [FDP_FORM_ERROR_DIRECTIVE]
114
+ }] }], propDecorators: { fdpFormFieldErrorDescriptionAs: [{
115
+ type: Input
116
+ }] } });
105
117
 
106
- /**
107
- * This extends core implementation to support richer extensibility and instead of relying
108
- * only on ng-content selector this will allow you to put any content as trigger.
109
- *
110
- * Let's think of u
111
- */
112
- class InputMessageGroupWithTemplate extends FormInputMessageGroupComponent {
113
- constructor() {
114
- super(...arguments);
115
- /**
116
- * To allow user to determine what event he wants to trigger the messages to show
117
- * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp).
118
- */
119
- this.triggers = [
120
- {
121
- trigger: 'focusin',
122
- openAction: true,
123
- closeAction: false
124
- },
125
- {
126
- trigger: 'focusout',
127
- openAction: false,
128
- closeAction: true
129
- }
130
- ];
131
- /** @hidden Translated aria-label for the popover body (#14260). Overrides the core key with the platform key. */
132
- this._popoverAriaLabel = resolveTranslationSignalFn()('platformInputMessageGroup.popoverAriaLabel');
118
+ class FormFieldErrorHeadingDirective {
119
+ /** @hidden */
120
+ constructor(templateRef, _formFieldErrorDirective) {
121
+ this.templateRef = templateRef;
122
+ this._formFieldErrorDirective = _formFieldErrorDirective;
123
+ this._formFieldErrorDirective?.registerHeading(this);
133
124
  }
134
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: InputMessageGroupWithTemplate, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
135
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.5", type: InputMessageGroupWithTemplate, isStandalone: true, selector: "fdp-input-message-group", inputs: { triggers: "triggers" }, queries: [{ propertyName: "triggerItemTemplate", first: true, predicate: ["triggerItem"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<fd-popover\n #popover\n (isOpenChange)=\"openChanged($event)\"\n additionalBodyClass=\"fd-popover__body--input-message-group\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n [closeOnEscapeKey]=\"closeOnEscapeKey\"\n [fillControlMode]=\"fillControlMode\"\n [isOpen]=\"isOpen\"\n [placement]=\"placement\"\n [triggers]=\"triggers\"\n [disableScrollbar]=\"true\"\n [focusAutoCapture]=\"false\"\n [focusTrapped]=\"false\"\n [restoreFocusOnClose]=\"false\"\n [bodyAriaLabel]=\"_popoverAriaLabel()\"\n class=\"fd-form-input-message-group fd-popover--input-message-group\"\n>\n <fd-popover-control>\n <ng-template [ngTemplateOutlet]=\"triggerItemTemplate\"></ng-template>\n </fd-popover-control>\n <fd-popover-body>\n <ng-content></ng-content>\n </fd-popover-body>\n</fd-popover>\n", styles: [".fd-popover-container-custom--message{flex-grow:1}.fd-popover-container-custom{border:none}.fd-popover__control{cursor:auto!important}fdp-input-message-group .fd-popover-custom{display:inline}fdp-input-message-group .fd-datetime .fd-popover-custom{display:inline-block}.fd-popover__body.fd-popover__body--input-message-group{margin-top:0!important;z-index:999}\n"], dependencies: [{ kind: "component", type: PopoverComponent, selector: "fd-popover", inputs: ["config", "title", "trigger", "id", "mobile", "mobileConfig", "preventSpaceKeyScroll", "placement", "maxWidth", "fillControlMode", "closeOnOutsideClick", "closeOnEscapeKey", "disabled", "triggers", "focusTrapped", "focusAutoCapture", "restoreFocusOnClose", "noArrow", "disableScrollbar", "appendTo", "placementContainer", "scrollStrategy", "cdkPositions", "applyOverlay", "additionalBodyClass", "additionalTriggerClass", "closeOnNavigation", "fixedPosition", "resizable", "bodyAriaLabel", "bodyRole", "bodyAriaLabelledBy", "isOpen"], outputs: ["triggerChange", "isOpenChange", "beforeOpen"] }, { kind: "component", type: PopoverControlComponent, selector: "fd-popover-control, [fdPopoverControl]" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: PopoverBodyComponent, selector: "fd-popover-body", inputs: ["minWidth", "maxWidth", "minHeight", "maxHeight"], outputs: ["onClose"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
125
+ /** @hidden */
126
+ static ngTemplateContextGuard(dir, ctx) {
127
+ return true;
128
+ }
129
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FormFieldErrorHeadingDirective, deps: [{ token: i0.TemplateRef }, { token: FDP_FORM_ERROR_DIRECTIVE, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
130
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.5", type: FormFieldErrorHeadingDirective, isStandalone: true, selector: "[fdpFormFieldErrorHeading]", inputs: { fdpFormFieldErrorHeadingAs: "fdpFormFieldErrorHeadingAs", fdpFormFieldErrorHeadingType: "fdpFormFieldErrorHeadingType" }, ngImport: i0 }); }
136
131
  }
137
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: InputMessageGroupWithTemplate, decorators: [{
138
- type: Component,
139
- args: [{ selector: 'fdp-input-message-group', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [PopoverComponent, PopoverControlComponent, NgTemplateOutlet, PopoverBodyComponent], template: "<fd-popover\n #popover\n (isOpenChange)=\"openChanged($event)\"\n additionalBodyClass=\"fd-popover__body--input-message-group\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n [closeOnEscapeKey]=\"closeOnEscapeKey\"\n [fillControlMode]=\"fillControlMode\"\n [isOpen]=\"isOpen\"\n [placement]=\"placement\"\n [triggers]=\"triggers\"\n [disableScrollbar]=\"true\"\n [focusAutoCapture]=\"false\"\n [focusTrapped]=\"false\"\n [restoreFocusOnClose]=\"false\"\n [bodyAriaLabel]=\"_popoverAriaLabel()\"\n class=\"fd-form-input-message-group fd-popover--input-message-group\"\n>\n <fd-popover-control>\n <ng-template [ngTemplateOutlet]=\"triggerItemTemplate\"></ng-template>\n </fd-popover-control>\n <fd-popover-body>\n <ng-content></ng-content>\n </fd-popover-body>\n</fd-popover>\n", styles: [".fd-popover-container-custom--message{flex-grow:1}.fd-popover-container-custom{border:none}.fd-popover__control{cursor:auto!important}fdp-input-message-group .fd-popover-custom{display:inline}fdp-input-message-group .fd-datetime .fd-popover-custom{display:inline-block}.fd-popover__body.fd-popover__body--input-message-group{margin-top:0!important;z-index:999}\n"] }]
140
- }], propDecorators: { triggers: [{
132
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FormFieldErrorHeadingDirective, decorators: [{
133
+ type: Directive,
134
+ args: [{
135
+ selector: '[fdpFormFieldErrorHeading]',
136
+ standalone: true
137
+ }]
138
+ }], ctorParameters: () => [{ type: i0.TemplateRef }, { type: undefined, decorators: [{
139
+ type: Optional
140
+ }, {
141
+ type: Inject,
142
+ args: [FDP_FORM_ERROR_DIRECTIVE]
143
+ }] }], propDecorators: { fdpFormFieldErrorHeadingAs: [{
144
+ type: Input
145
+ }], fdpFormFieldErrorHeadingType: [{
141
146
  type: Input
142
- }], triggerItemTemplate: [{
143
- type: ContentChild,
144
- args: ['triggerItem', { static: false }]
145
147
  }] } });
146
148
 
147
- const defaultFormFieldHintOptions = {
148
- placement: 'right',
149
- position: 'after',
150
- trigger: [
151
- { trigger: 'mouseenter', openAction: true, closeAction: false },
152
- { trigger: 'mouseleave', openAction: false, closeAction: true },
153
- { trigger: 'focusin', openAction: true, closeAction: false },
154
- { trigger: 'focusout', openAction: false, closeAction: true }
155
- ],
156
- glyph: 'hint',
157
- target: 'auto'
158
- };
159
-
160
- const FDP_FORM_FIELD_HINT_OPTIONS_DEFAULT = new InjectionToken('Form field default hint options', {
161
- factory: () => defaultFormFieldHintOptions
162
- });
163
- const FDP_FORM_FIELD_HINT_LAYOUT_CONFIG = new InjectionToken('Configuration for setting default values for configuring how places for inline help are coming', {
164
- factory: () => ({
165
- hintOnInputBreakpoints: ['M', 'L', 'XL'],
166
- hintPlaceMinSize: 1
167
- })
168
- });
169
-
170
- const FDP_FORM_ERROR_DIRECTIVE = new InjectionToken('FdpFormErrorDirective');
171
-
172
149
  class FormFieldErrorDirective {
173
150
  /** Error type. Defines which type to return. Either self, or from heading directive. */
174
151
  get type() {
@@ -255,6 +232,89 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
255
232
  type: Input
256
233
  }] } });
257
234
 
235
+ /**
236
+ * Returns form state based on priority.
237
+ * @param states Error states of the form fields.
238
+ * @param priorityStates Array of prioritized states.
239
+ * @returns first found form state of `priorityStates`.
240
+ */
241
+ function getFormState(states, priorityStates = ['error', 'warning', 'information', 'success', 'default']) {
242
+ let priorityState = 'default';
243
+ priorityStates.some((state) => {
244
+ const firstErrorState = states.find((formState) => formState === state);
245
+ if (!firstErrorState) {
246
+ return false;
247
+ }
248
+ priorityState = firstErrorState;
249
+ return true;
250
+ });
251
+ return priorityState;
252
+ }
253
+
254
+ /**
255
+ * This extends core implementation to support richer extensibility and instead of relying
256
+ * only on ng-content selector this will allow you to put any content as trigger.
257
+ *
258
+ * Let's think of u
259
+ */
260
+ class InputMessageGroupWithTemplate extends FormInputMessageGroupComponent {
261
+ constructor() {
262
+ super(...arguments);
263
+ /**
264
+ * To allow user to determine what event he wants to trigger the messages to show
265
+ * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp).
266
+ */
267
+ this.triggers = [
268
+ {
269
+ trigger: 'focusin',
270
+ openAction: true,
271
+ closeAction: false
272
+ },
273
+ {
274
+ trigger: 'focusout',
275
+ openAction: false,
276
+ closeAction: true
277
+ }
278
+ ];
279
+ /** @hidden Translated aria-label for the popover body (#14260). Overrides the core key with the platform key. */
280
+ this._popoverAriaLabel = resolveTranslationSignalFn()('platformInputMessageGroup.popoverAriaLabel');
281
+ }
282
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: InputMessageGroupWithTemplate, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
283
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.5", type: InputMessageGroupWithTemplate, isStandalone: true, selector: "fdp-input-message-group", inputs: { triggers: "triggers" }, queries: [{ propertyName: "triggerItemTemplate", first: true, predicate: ["triggerItem"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<fd-popover\n #popover\n (isOpenChange)=\"openChanged($event)\"\n additionalBodyClass=\"fd-popover__body--input-message-group\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n [closeOnEscapeKey]=\"closeOnEscapeKey\"\n [fillControlMode]=\"fillControlMode\"\n [isOpen]=\"isOpen\"\n [placement]=\"placement\"\n [triggers]=\"triggers\"\n [disableScrollbar]=\"true\"\n [focusAutoCapture]=\"false\"\n [focusTrapped]=\"false\"\n [restoreFocusOnClose]=\"false\"\n [bodyAriaLabel]=\"_popoverAriaLabel()\"\n class=\"fd-form-input-message-group fd-popover--input-message-group\"\n>\n <fd-popover-control>\n <ng-template [ngTemplateOutlet]=\"triggerItemTemplate\"></ng-template>\n </fd-popover-control>\n <fd-popover-body>\n <ng-content></ng-content>\n </fd-popover-body>\n</fd-popover>\n", styles: [".fd-popover-container-custom--message{flex-grow:1}.fd-popover-container-custom{border:none}.fd-popover__control{cursor:auto!important}fdp-input-message-group .fd-popover-custom{display:inline}fdp-input-message-group .fd-datetime .fd-popover-custom{display:inline-block}.fd-popover__body.fd-popover__body--input-message-group{margin-top:0!important;z-index:999}\n"], dependencies: [{ kind: "component", type: PopoverComponent, selector: "fd-popover", inputs: ["config", "title", "trigger", "id", "mobile", "mobileConfig", "preventSpaceKeyScroll", "placement", "maxWidth", "fillControlMode", "closeOnOutsideClick", "closeOnEscapeKey", "disabled", "triggers", "focusTrapped", "focusAutoCapture", "restoreFocusOnClose", "noArrow", "disableScrollbar", "appendTo", "placementContainer", "scrollStrategy", "cdkPositions", "applyOverlay", "additionalBodyClass", "additionalTriggerClass", "closeOnNavigation", "fixedPosition", "resizable", "bodyAriaLabel", "bodyRole", "bodyAriaLabelledBy", "isOpen"], outputs: ["triggerChange", "isOpenChange", "beforeOpen"] }, { kind: "component", type: PopoverControlComponent, selector: "fd-popover-control, [fdPopoverControl]" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: PopoverBodyComponent, selector: "fd-popover-body", inputs: ["minWidth", "maxWidth", "minHeight", "maxHeight"], outputs: ["onClose"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
284
+ }
285
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: InputMessageGroupWithTemplate, decorators: [{
286
+ type: Component,
287
+ args: [{ selector: 'fdp-input-message-group', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [PopoverComponent, PopoverControlComponent, NgTemplateOutlet, PopoverBodyComponent], template: "<fd-popover\n #popover\n (isOpenChange)=\"openChanged($event)\"\n additionalBodyClass=\"fd-popover__body--input-message-group\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n [closeOnEscapeKey]=\"closeOnEscapeKey\"\n [fillControlMode]=\"fillControlMode\"\n [isOpen]=\"isOpen\"\n [placement]=\"placement\"\n [triggers]=\"triggers\"\n [disableScrollbar]=\"true\"\n [focusAutoCapture]=\"false\"\n [focusTrapped]=\"false\"\n [restoreFocusOnClose]=\"false\"\n [bodyAriaLabel]=\"_popoverAriaLabel()\"\n class=\"fd-form-input-message-group fd-popover--input-message-group\"\n>\n <fd-popover-control>\n <ng-template [ngTemplateOutlet]=\"triggerItemTemplate\"></ng-template>\n </fd-popover-control>\n <fd-popover-body>\n <ng-content></ng-content>\n </fd-popover-body>\n</fd-popover>\n", styles: [".fd-popover-container-custom--message{flex-grow:1}.fd-popover-container-custom{border:none}.fd-popover__control{cursor:auto!important}fdp-input-message-group .fd-popover-custom{display:inline}fdp-input-message-group .fd-datetime .fd-popover-custom{display:inline-block}.fd-popover__body.fd-popover__body--input-message-group{margin-top:0!important;z-index:999}\n"] }]
288
+ }], propDecorators: { triggers: [{
289
+ type: Input
290
+ }], triggerItemTemplate: [{
291
+ type: ContentChild,
292
+ args: ['triggerItem', { static: false }]
293
+ }] } });
294
+
295
+ const defaultFormFieldHintOptions = {
296
+ placement: 'right',
297
+ position: 'after',
298
+ trigger: [
299
+ { trigger: 'mouseenter', openAction: true, closeAction: false },
300
+ { trigger: 'mouseleave', openAction: false, closeAction: true },
301
+ { trigger: 'focusin', openAction: true, closeAction: false },
302
+ { trigger: 'focusout', openAction: false, closeAction: true }
303
+ ],
304
+ glyph: 'hint',
305
+ target: 'auto'
306
+ };
307
+
308
+ const FDP_FORM_FIELD_HINT_OPTIONS_DEFAULT = new InjectionToken('Form field default hint options', {
309
+ factory: () => defaultFormFieldHintOptions
310
+ });
311
+ const FDP_FORM_FIELD_HINT_LAYOUT_CONFIG = new InjectionToken('Configuration for setting default values for configuring how places for inline help are coming', {
312
+ factory: () => ({
313
+ hintOnInputBreakpoints: ['M', 'L', 'XL'],
314
+ hintPlaceMinSize: 1
315
+ })
316
+ });
317
+
258
318
  class FormFieldControlExtrasComponent {
259
319
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FormFieldControlExtrasComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
260
320
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.5", type: FormFieldControlExtrasComponent, isStandalone: true, selector: "fdp-form-field-extras", ngImport: i0, template: '<ng-content></ng-content>', isInline: true, styles: [":host{display:flex;white-space:normal}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
@@ -4991,71 +5051,104 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
4991
5051
  type: Input
4992
5052
  }] } });
4993
5053
 
4994
- class FormFieldErrorDescriptionDirective {
5054
+ const formFieldProvider = {
5055
+ provide: FD_FORM_FIELD,
5056
+ useExisting: forwardRef(() => FormGeneratorFieldComponent)
5057
+ };
5058
+ const formGroupChildProvider$1 = {
5059
+ provide: FORM_GROUP_CHILD_FIELD_TOKEN,
5060
+ useExisting: forwardRef(() => FormGeneratorFieldComponent)
5061
+ };
5062
+ class FormGeneratorFieldComponent {
4995
5063
  /** @hidden */
4996
- constructor(templateRef, _formFieldErrorDirective) {
4997
- this.templateRef = templateRef;
4998
- this._formFieldErrorDirective = _formFieldErrorDirective;
4999
- this._formFieldErrorDirective?.registerDescription(this);
5064
+ get _placeholder() {
5065
+ if (!this.field) {
5066
+ return '';
5067
+ }
5068
+ if (this.field.formItem?.placeholder) {
5069
+ return this.field.formItem?.placeholder;
5070
+ }
5071
+ if (this.field.formItem?.useMessageAsPlaceholder) {
5072
+ return this.field.formItem?.message;
5073
+ }
5074
+ return '';
5000
5075
  }
5001
5076
  /** @hidden */
5002
- static ngTemplateContextGuard(dir, ctx) {
5003
- return true;
5077
+ constructor(_fgService) {
5078
+ this._fgService = _fgService;
5079
+ /** @hidden */
5080
+ this._errorModels = [];
5004
5081
  }
5005
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FormFieldErrorDescriptionDirective, deps: [{ token: i0.TemplateRef }, { token: FDP_FORM_ERROR_DIRECTIVE, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
5006
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.5", type: FormFieldErrorDescriptionDirective, isStandalone: true, selector: "[fdpFormFieldErrorDescription]", inputs: { fdpFormFieldErrorDescriptionAs: "fdpFormFieldErrorDescriptionAs" }, ngImport: i0 }); }
5007
- }
5008
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FormFieldErrorDescriptionDirective, decorators: [{
5009
- type: Directive,
5010
- args: [{
5011
- selector: '[fdpFormFieldErrorDescription]',
5012
- standalone: true
5013
- }]
5014
- }], ctorParameters: () => [{ type: i0.TemplateRef }, { type: undefined, decorators: [{
5015
- type: Optional
5016
- }, {
5017
- type: Inject,
5018
- args: [FDP_FORM_ERROR_DIRECTIVE]
5019
- }] }], propDecorators: { fdpFormFieldErrorDescriptionAs: [{
5020
- type: Input
5021
- }] } });
5022
-
5023
- class FormFieldErrorHeadingDirective {
5024
5082
  /** @hidden */
5025
- constructor(templateRef, _formFieldErrorDirective) {
5026
- this.templateRef = templateRef;
5027
- this._formFieldErrorDirective = _formFieldErrorDirective;
5028
- this._formFieldErrorDirective?.registerHeading(this);
5083
+ ngOnInit() {
5084
+ this._errorModels = this._getErrors();
5029
5085
  }
5030
5086
  /** @hidden */
5031
- static ngTemplateContextGuard(dir, ctx) {
5032
- return true;
5087
+ _errorsTrackBy(_, error) {
5088
+ return error.type;
5033
5089
  }
5034
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FormFieldErrorHeadingDirective, deps: [{ token: i0.TemplateRef }, { token: FDP_FORM_ERROR_DIRECTIVE, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
5035
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.5", type: FormFieldErrorHeadingDirective, isStandalone: true, selector: "[fdpFormFieldErrorHeading]", inputs: { fdpFormFieldErrorHeadingAs: "fdpFormFieldErrorHeadingAs", fdpFormFieldErrorHeadingType: "fdpFormFieldErrorHeadingType" }, ngImport: i0 }); }
5090
+ /** @hidden */
5091
+ _isAdvancedError(error) {
5092
+ return error.heading && error.description && error.type;
5093
+ }
5094
+ /** @hidden */
5095
+ _getErrors() {
5096
+ const registeredErrors = this._fgService.validationErrorHints;
5097
+ const returnErrors = [
5098
+ {
5099
+ type: `${this.field.formItem.name}Validator`,
5100
+ value: null
5101
+ }
5102
+ ];
5103
+ Object.entries(registeredErrors).forEach((type) => {
5104
+ const [errorType, errorValue] = type;
5105
+ returnErrors.push({
5106
+ type: errorType,
5107
+ value: errorValue
5108
+ });
5109
+ });
5110
+ return returnErrors;
5111
+ }
5112
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FormGeneratorFieldComponent, deps: [{ token: FormGeneratorService }], target: i0.ɵɵFactoryTarget.Component }); }
5113
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: FormGeneratorFieldComponent, isStandalone: true, selector: "fdp-form-generator-field", inputs: { field: "field", form: "form", i18n: "i18n", formFieldName: "formFieldName", formGroupNamePath: "formGroupNamePath", rank: "rank", shouldShow: "shouldShow", hintOptions: "hintOptions" }, providers: [formFieldProvider, formGroupChildProvider$1], viewQueries: [{ propertyName: "fieldRenderer", first: true, predicate: i0.forwardRef(() => FormFieldComponent), descendants: true }], ngImport: i0, template: "<fdp-form-field\n [hint]=\"hintOptions\"\n [placeholder]=\"_placeholder\"\n [id]=\"field.formItem.id || formFieldName\"\n [column]=\"field.formItem.guiOptions?.column || 1\"\n [columnLayout]=\"$safeNavigationMigration(field.formItem.guiOptions?.columnLayout)\"\n [colon]=\"field.formItem.guiOptions?.appendColon === true\"\n [label]=\"field.formItem.message\"\n [validators]=\"field.formItem.validators || []\"\n [required]=\"field.formItem.required\"\n [rank]=\"rank\"\n [labelColumnLayout]=\"$safeNavigationMigration(field.formItem.guiOptions?.labelColumnLayout)\"\n [fieldColumnLayout]=\"$safeNavigationMigration(field.formItem.guiOptions?.fieldColumnLayout)\"\n [gapColumnLayout]=\"$safeNavigationMigration(field.formItem.guiOptions?.gapColumnLayout)\"\n [noLabelLayout]=\"field.formItem.guiOptions?.noLabelLayout || false\"\n [formGroup]=\"form\"\n #formField\n>\n @for (error of _errorModels; track _errorsTrackBy($index, error)) {\n <span *fdpFormFieldError=\"error.type; let directiveError\">\n @if (_isAdvancedError(directiveError)) {\n @if (directiveError.heading) {\n <span *fdpFormFieldErrorHeading=\"let validationError; type: directiveError.type\">\n {{ validationError.heading }}\n </span>\n }\n @if (directiveError.description) {\n <span *fdpFormFieldErrorDescription=\"let validationError\">\n {{ validationError.description }}\n </span>\n }\n } @else {\n <span *fdpFormFieldErrorHeading=\"let validationError\">\n {{ error.value ? error.value : validationError }}\n </span>\n }\n </span>\n }\n <ng-container\n [formField]=\"formField\"\n [form]=\"form\"\n [formGroupNamePath]=\"formGroupNamePath\"\n fdpDynamicFormControl\n [id]=\"field.formItem.id || formFieldName\"\n [name]=\"formFieldName\"\n [formItem]=\"field.formItem\"\n >\n </ng-container>\n</fdp-form-field>\n", dependencies: [{ kind: "component", type: FormFieldComponent, selector: "fdp-form-field", inputs: ["label", "id", "hint", "noLabelLayout", "validators", "rank", "placeholder", "column", "columnLayout", "labelColumnLayout", "fieldColumnLayout", "gapColumnLayout", "i18Strings", "required", "editable", "columns", "disabled", "colon", "formGroupContainer"], outputs: ["onChange", "onColumnChange"] }, { kind: "directive", type: FormFieldErrorDirective, selector: "[fdpFormFieldError]", inputs: ["fdpFormFieldErrorAs", "fdpFormFieldError", "fdpFormFieldErrorType"] }, { kind: "directive", type: FormFieldErrorHeadingDirective, selector: "[fdpFormFieldErrorHeading]", inputs: ["fdpFormFieldErrorHeadingAs", "fdpFormFieldErrorHeadingType"] }, { kind: "directive", type: FormFieldErrorDescriptionDirective, selector: "[fdpFormFieldErrorDescription]", inputs: ["fdpFormFieldErrorDescriptionAs"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: DynamicFormControlDirective, selector: "[fdpDynamicFormControl]", inputs: ["formItem", "id", "name", "form", "formGroupNamePath", "formField"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
5036
5114
  }
5037
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FormFieldErrorHeadingDirective, decorators: [{
5038
- type: Directive,
5039
- args: [{
5040
- selector: '[fdpFormFieldErrorHeading]',
5041
- standalone: true
5042
- }]
5043
- }], ctorParameters: () => [{ type: i0.TemplateRef }, { type: undefined, decorators: [{
5044
- type: Optional
5045
- }, {
5046
- type: Inject,
5047
- args: [FDP_FORM_ERROR_DIRECTIVE]
5048
- }] }], propDecorators: { fdpFormFieldErrorHeadingAs: [{
5115
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FormGeneratorFieldComponent, decorators: [{
5116
+ type: Component,
5117
+ args: [{ selector: 'fdp-form-generator-field', providers: [formFieldProvider, formGroupChildProvider$1], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
5118
+ FormFieldComponent,
5119
+ FormFieldErrorDirective,
5120
+ FormFieldErrorHeadingDirective,
5121
+ FormFieldErrorDescriptionDirective,
5122
+ FormsModule,
5123
+ ReactiveFormsModule,
5124
+ DynamicFormControlDirective
5125
+ ], template: "<fdp-form-field\n [hint]=\"hintOptions\"\n [placeholder]=\"_placeholder\"\n [id]=\"field.formItem.id || formFieldName\"\n [column]=\"field.formItem.guiOptions?.column || 1\"\n [columnLayout]=\"$safeNavigationMigration(field.formItem.guiOptions?.columnLayout)\"\n [colon]=\"field.formItem.guiOptions?.appendColon === true\"\n [label]=\"field.formItem.message\"\n [validators]=\"field.formItem.validators || []\"\n [required]=\"field.formItem.required\"\n [rank]=\"rank\"\n [labelColumnLayout]=\"$safeNavigationMigration(field.formItem.guiOptions?.labelColumnLayout)\"\n [fieldColumnLayout]=\"$safeNavigationMigration(field.formItem.guiOptions?.fieldColumnLayout)\"\n [gapColumnLayout]=\"$safeNavigationMigration(field.formItem.guiOptions?.gapColumnLayout)\"\n [noLabelLayout]=\"field.formItem.guiOptions?.noLabelLayout || false\"\n [formGroup]=\"form\"\n #formField\n>\n @for (error of _errorModels; track _errorsTrackBy($index, error)) {\n <span *fdpFormFieldError=\"error.type; let directiveError\">\n @if (_isAdvancedError(directiveError)) {\n @if (directiveError.heading) {\n <span *fdpFormFieldErrorHeading=\"let validationError; type: directiveError.type\">\n {{ validationError.heading }}\n </span>\n }\n @if (directiveError.description) {\n <span *fdpFormFieldErrorDescription=\"let validationError\">\n {{ validationError.description }}\n </span>\n }\n } @else {\n <span *fdpFormFieldErrorHeading=\"let validationError\">\n {{ error.value ? error.value : validationError }}\n </span>\n }\n </span>\n }\n <ng-container\n [formField]=\"formField\"\n [form]=\"form\"\n [formGroupNamePath]=\"formGroupNamePath\"\n fdpDynamicFormControl\n [id]=\"field.formItem.id || formFieldName\"\n [name]=\"formFieldName\"\n [formItem]=\"field.formItem\"\n >\n </ng-container>\n</fdp-form-field>\n" }]
5126
+ }], ctorParameters: () => [{ type: FormGeneratorService }], propDecorators: { field: [{
5049
5127
  type: Input
5050
- }], fdpFormFieldErrorHeadingType: [{
5128
+ }], form: [{
5129
+ type: Input
5130
+ }], i18n: [{
5131
+ type: Input
5132
+ }], formFieldName: [{
5133
+ type: Input
5134
+ }], formGroupNamePath: [{
5051
5135
  type: Input
5136
+ }], rank: [{
5137
+ type: Input
5138
+ }], shouldShow: [{
5139
+ type: Input
5140
+ }], hintOptions: [{
5141
+ type: Input
5142
+ }], fieldRenderer: [{
5143
+ type: ViewChild,
5144
+ args: [forwardRef(() => FormFieldComponent)]
5052
5145
  }] } });
5053
5146
 
5054
5147
  const formFieldGroupProvider = {
5055
5148
  provide: FormFieldGroup,
5056
5149
  useExisting: forwardRef(() => FormFieldGroupComponent)
5057
5150
  };
5058
- const formGroupChildProvider$1 = {
5151
+ const formGroupChildProvider = {
5059
5152
  provide: FORM_GROUP_CHILD_FIELD_TOKEN,
5060
5153
  useExisting: forwardRef(() => FormFieldGroupComponent)
5061
5154
  };
@@ -5134,11 +5227,11 @@ class FormFieldGroupComponent {
5134
5227
  this.formGroupContainer.removeFormFieldGroup(this);
5135
5228
  }
5136
5229
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FormFieldGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5137
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.5", type: FormFieldGroupComponent, isStandalone: true, selector: "fdp-form-field-group", inputs: { label: "label", formName: "formName", formGroupContainer: "formGroupContainer", labelColumnLayout: "labelColumnLayout", fieldColumnLayout: "fieldColumnLayout", gapColumnLayout: "gapColumnLayout", hintOptions: "hintOptions" }, providers: [formFieldGroupProvider, formGroupChildProvider$1], queries: [{ propertyName: "fields", predicate: FD_FORM_FIELD, descendants: true }], ngImport: i0, template: ` <ng-content></ng-content>`, isInline: true, styles: [".fd-form-group{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.fd-form-group:after,.fd-form-group:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-form-group--inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.fd-form-group--with-spacing{gap:.625rem}.fd-form-group__header{border:0;-webkit-box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:var(--sapGroup_TitleBackground);border-bottom:var(--sapGroup_TitleBorderWidth) solid var(--sapGroup_TitleBorderColor);box-sizing:border-box;min-height:var(--sapElement_LineHeight);padding-inline:var(--fdFormGroupPaddingInline,1rem);width:100%}.fd-form-group__header:after,.fd-form-group__header:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-form-group__header--no-padding{--fdFormGroupPaddingInline:0}.fd-form-group__header--no-border{border-bottom:none}.fd-form-group__header-text{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapGroup_TitleTextColor);font-family:var(--sapFontFamily);font-family:var(--sapFontHeaderFamily);font-size:var(--sapFontSize);font-size:var(--sapGroup_Title_FontSize);font-weight:400;font-weight:700;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;overflow:hidden;padding-block:0;padding-inline:0;text-overflow:ellipsis;white-space:nowrap}.fd-form-group__header-text:after,.fd-form-group__header-text:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-form-group__header-text--wrap{overflow:visible;text-overflow:clip;white-space:normal}\n/*! Bundled license information:\n\nfundamental-styles/dist/form-group.css:\n (*!\n * Fundamental Library Styles v0.41.8\n * Copyright (c) 2026 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n *)\n*/\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
5230
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.5", type: FormFieldGroupComponent, isStandalone: true, selector: "fdp-form-field-group", inputs: { label: "label", formName: "formName", formGroupContainer: "formGroupContainer", labelColumnLayout: "labelColumnLayout", fieldColumnLayout: "fieldColumnLayout", gapColumnLayout: "gapColumnLayout", hintOptions: "hintOptions" }, providers: [formFieldGroupProvider, formGroupChildProvider], queries: [{ propertyName: "fields", predicate: FD_FORM_FIELD, descendants: true }], ngImport: i0, template: ` <ng-content></ng-content>`, isInline: true, styles: [".fd-form-group{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.fd-form-group:after,.fd-form-group:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-form-group--inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.fd-form-group--with-spacing{gap:.625rem}.fd-form-group__header{border:0;-webkit-box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:var(--sapGroup_TitleBackground);border-bottom:var(--sapGroup_TitleBorderWidth) solid var(--sapGroup_TitleBorderColor);box-sizing:border-box;min-height:var(--sapElement_LineHeight);padding-inline:var(--fdFormGroupPaddingInline,1rem);width:100%}.fd-form-group__header:after,.fd-form-group__header:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-form-group__header--no-padding{--fdFormGroupPaddingInline:0}.fd-form-group__header--no-border{border-bottom:none}.fd-form-group__header-text{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapGroup_TitleTextColor);font-family:var(--sapFontFamily);font-family:var(--sapFontHeaderFamily);font-size:var(--sapFontSize);font-size:var(--sapGroup_Title_FontSize);font-weight:400;font-weight:700;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;overflow:hidden;padding-block:0;padding-inline:0;text-overflow:ellipsis;white-space:nowrap}.fd-form-group__header-text:after,.fd-form-group__header-text:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-form-group__header-text--wrap{overflow:visible;text-overflow:clip;white-space:normal}\n/*! Bundled license information:\n\nfundamental-styles/dist/form-group.css:\n (*!\n * Fundamental Library Styles v0.41.8\n * Copyright (c) 2026 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n *)\n*/\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
5138
5231
  }
5139
5232
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FormFieldGroupComponent, decorators: [{
5140
5233
  type: Component,
5141
- args: [{ selector: 'fdp-form-field-group', template: ` <ng-content></ng-content>`, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [formFieldGroupProvider, formGroupChildProvider$1], standalone: true, styles: [".fd-form-group{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.fd-form-group:after,.fd-form-group:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-form-group--inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.fd-form-group--with-spacing{gap:.625rem}.fd-form-group__header{border:0;-webkit-box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:var(--sapGroup_TitleBackground);border-bottom:var(--sapGroup_TitleBorderWidth) solid var(--sapGroup_TitleBorderColor);box-sizing:border-box;min-height:var(--sapElement_LineHeight);padding-inline:var(--fdFormGroupPaddingInline,1rem);width:100%}.fd-form-group__header:after,.fd-form-group__header:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-form-group__header--no-padding{--fdFormGroupPaddingInline:0}.fd-form-group__header--no-border{border-bottom:none}.fd-form-group__header-text{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapGroup_TitleTextColor);font-family:var(--sapFontFamily);font-family:var(--sapFontHeaderFamily);font-size:var(--sapFontSize);font-size:var(--sapGroup_Title_FontSize);font-weight:400;font-weight:700;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;overflow:hidden;padding-block:0;padding-inline:0;text-overflow:ellipsis;white-space:nowrap}.fd-form-group__header-text:after,.fd-form-group__header-text:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-form-group__header-text--wrap{overflow:visible;text-overflow:clip;white-space:normal}\n/*! Bundled license information:\n\nfundamental-styles/dist/form-group.css:\n (*!\n * Fundamental Library Styles v0.41.8\n * Copyright (c) 2026 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n *)\n*/\n"] }]
5234
+ args: [{ selector: 'fdp-form-field-group', template: ` <ng-content></ng-content>`, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [formFieldGroupProvider, formGroupChildProvider], standalone: true, styles: [".fd-form-group{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.fd-form-group:after,.fd-form-group:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-form-group--inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.fd-form-group--with-spacing{gap:.625rem}.fd-form-group__header{border:0;-webkit-box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:var(--sapGroup_TitleBackground);border-bottom:var(--sapGroup_TitleBorderWidth) solid var(--sapGroup_TitleBorderColor);box-sizing:border-box;min-height:var(--sapElement_LineHeight);padding-inline:var(--fdFormGroupPaddingInline,1rem);width:100%}.fd-form-group__header:after,.fd-form-group__header:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-form-group__header--no-padding{--fdFormGroupPaddingInline:0}.fd-form-group__header--no-border{border-bottom:none}.fd-form-group__header-text{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapGroup_TitleTextColor);font-family:var(--sapFontFamily);font-family:var(--sapFontHeaderFamily);font-size:var(--sapFontSize);font-size:var(--sapGroup_Title_FontSize);font-weight:400;font-weight:700;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;overflow:hidden;padding-block:0;padding-inline:0;text-overflow:ellipsis;white-space:nowrap}.fd-form-group__header-text:after,.fd-form-group__header-text:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-form-group__header-text--wrap{overflow:visible;text-overflow:clip;white-space:normal}\n/*! Bundled license information:\n\nfundamental-styles/dist/form-group.css:\n (*!\n * Fundamental Library Styles v0.41.8\n * Copyright (c) 2026 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n *)\n*/\n"] }]
5142
5235
  }], propDecorators: { label: [{
5143
5236
  type: Input
5144
5237
  }], formName: [{
@@ -5158,27 +5251,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
5158
5251
  args: [FD_FORM_FIELD, { descendants: true }]
5159
5252
  }] } });
5160
5253
 
5161
- class FormGroupHeaderComponent {
5162
- constructor() {
5163
- /** Whether the header should wrap on multiple lines */
5164
- this.allowWrap = input(false, { ...(ngDevMode ? { debugName: "allowWrap" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
5165
- /** Fields Group */
5166
- this.fieldGroup = input(null, /* @ts-ignore */
5167
- ...(ngDevMode ? [{ debugName: "fieldGroup" }] : /* istanbul ignore next */ []));
5168
- /** Hint options */
5169
- this.hintOptions = computed(() => this.fieldGroup()?.hintOptions, /* @ts-ignore */
5170
- ...(ngDevMode ? [{ debugName: "hintOptions" }] : /* istanbul ignore next */ []));
5171
- }
5172
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FormGroupHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5173
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: FormGroupHeaderComponent, isStandalone: true, selector: "[fdp-form-group-header]", inputs: { allowWrap: { classPropertyName: "allowWrap", publicName: "allowWrap", isSignal: true, isRequired: false, transformFunction: null }, fieldGroup: { classPropertyName: "fieldGroup", publicName: "fieldGroup", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "fd-form-group__header" }, ngImport: i0, template: "@if (fieldGroup() && hintOptions()?.position === 'before') {\n <ng-template [ngTemplateOutlet]=\"inlineHelpRef\"></ng-template>\n}\n<h6 class=\"fd-form-group__header-text\" [class.fd-form-group__header-text--wrap]=\"allowWrap()\">\n {{ fieldGroup()?.label }}\n</h6>\n@if (fieldGroup() && hintOptions()?.position === 'after') {\n <ng-template [ngTemplateOutlet]=\"inlineHelpRef\"></ng-template>\n}\n<ng-template #inlineHelpRef>\n @if (hintOptions(); as options) {\n <span fd-link [undecorated]=\"true\">\n <fd-icon\n [style.vertical-align]=\"'middle'\"\n [fd-inline-help]=\"options.content\"\n [glyph]=\"options.glyph\"\n [placement]=\"options.placement ?? null\"\n [triggers]=\"options.trigger ?? []\"\n tabindex=\"0\"\n ></fd-icon>\n </span>\n }\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: LinkComponent, selector: "[fdLink], [fd-link]", inputs: ["emphasized", "disabled", "inverted", "subtle", "undecorated", "touchTarget"] }, { kind: "component", type: IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "size", "class", "ariaLabel", "ariaHidden"], outputs: ["ariaHiddenChange"] }, { kind: "directive", type: InlineHelpDirective, selector: "[fd-inline-help]:not([fd-inline-help-template]), [fd-inline-help-template]:not([fd-inline-help])", inputs: ["fd-inline-help", "placement", "triggers", "closeOnOutsideClick", "additionalBodyClass", "disabled", "bodyId", "bodyRole", "noArrow", "closeOnEscapeKey", "closeOnNavigation", "restoreFocusOnClose", "appendTo", "fixedPosition", "maxWidth", "scrollStrategy"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
5174
- }
5175
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FormGroupHeaderComponent, decorators: [{
5176
- type: Component,
5177
- args: [{ selector: '[fdp-form-group-header]', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
5178
- class: 'fd-form-group__header'
5179
- }, imports: [NgTemplateOutlet, LinkComponent, IconComponent, InlineHelpDirective], template: "@if (fieldGroup() && hintOptions()?.position === 'before') {\n <ng-template [ngTemplateOutlet]=\"inlineHelpRef\"></ng-template>\n}\n<h6 class=\"fd-form-group__header-text\" [class.fd-form-group__header-text--wrap]=\"allowWrap()\">\n {{ fieldGroup()?.label }}\n</h6>\n@if (fieldGroup() && hintOptions()?.position === 'after') {\n <ng-template [ngTemplateOutlet]=\"inlineHelpRef\"></ng-template>\n}\n<ng-template #inlineHelpRef>\n @if (hintOptions(); as options) {\n <span fd-link [undecorated]=\"true\">\n <fd-icon\n [style.vertical-align]=\"'middle'\"\n [fd-inline-help]=\"options.content\"\n [glyph]=\"options.glyph\"\n [placement]=\"options.placement ?? null\"\n [triggers]=\"options.trigger ?? []\"\n tabindex=\"0\"\n ></fd-icon>\n </span>\n }\n</ng-template>\n" }]
5180
- }], propDecorators: { allowWrap: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowWrap", required: false }] }], fieldGroup: [{ type: i0.Input, args: [{ isSignal: true, alias: "fieldGroup", required: false }] }] } });
5181
-
5182
5254
  class Field {
5183
5255
  /** @hidden */
5184
5256
  constructor(name, rank, renderer, column) {
@@ -5197,832 +5269,170 @@ class FieldGroup {
5197
5269
  }
5198
5270
  }
5199
5271
 
5200
- class FieldGroupRowValuePipe {
5201
- /** @hidden */
5202
- transform(row) {
5203
- return row.value instanceof FieldGroup ? row.value.fields : row.value;
5204
- }
5205
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FieldGroupRowValuePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
5206
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.5", ngImport: i0, type: FieldGroupRowValuePipe, isStandalone: true, name: "fieldGroupRowValue" }); }
5272
+ /** @hidden */
5273
+ function isFieldChild(child) {
5274
+ return child instanceof FormFieldComponent;
5207
5275
  }
5208
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FieldGroupRowValuePipe, decorators: [{
5209
- type: Pipe,
5276
+ /** @hidden */
5277
+ function isFieldGroupWrapperChild(child) {
5278
+ return child instanceof FormGeneratorFieldComponent;
5279
+ }
5280
+ /** @hidden */
5281
+ function isFieldGroupChild(child) {
5282
+ return child instanceof FormFieldGroupComponent;
5283
+ }
5284
+ /** @hidden */
5285
+ function getFormField(field) {
5286
+ return isFieldGroupWrapperChild(field) ? field.fieldRenderer : field;
5287
+ }
5288
+ /** @hidden */
5289
+ function getField(field) {
5290
+ field = isFieldGroupWrapperChild(field) ? field.fieldRenderer : field;
5291
+ return new Field(field.id, field.rank, field.renderer, field.column);
5292
+ }
5293
+
5294
+ /**
5295
+ * @deprecated
5296
+ * Use direct imports of components and directives.
5297
+ */
5298
+ class PlatformAutoCompleteModule {
5299
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformAutoCompleteModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
5300
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.5", ngImport: i0, type: PlatformAutoCompleteModule, imports: [AutoCompleteDirective], exports: [AutoCompleteDirective] }); }
5301
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformAutoCompleteModule }); }
5302
+ }
5303
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformAutoCompleteModule, decorators: [{
5304
+ type: NgModule,
5210
5305
  args: [{
5211
- name: 'fieldGroupRowValue',
5212
- standalone: true
5306
+ imports: [AutoCompleteDirective],
5307
+ exports: [AutoCompleteDirective]
5213
5308
  }]
5214
5309
  }] });
5215
5310
 
5216
5311
  /**
5217
- * @license
5218
- * F. Kolar
5219
- *
5220
- * Licensed under the Apache License, Version 2.0 (the "License");
5221
- * you may not use this file except in compliance with the License.
5222
- * You may obtain a copy of the License at
5223
- *
5224
- * http://www.apache.org/licenses/LICENSE-2.0
5225
- *
5226
- * Unless required by applicable law or agreed to in writing, software
5227
- * distributed under the License is distributed on an "AS IS" BASIS,
5228
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
5229
- * See the License for the specific language governing permissions and
5230
- * limitations under the License.
5231
- *
5232
- *
5312
+ * @deprecated
5313
+ * Use direct imports of components and directives.
5233
5314
  */
5234
- const formGroupProvider = {
5235
- provide: FormGroupContainer,
5236
- useExisting: forwardRef(() => FormGroupComponent)
5237
- };
5238
- let formGroupUniqueId = 0;
5239
- /**
5240
- *
5241
- * FormGroup represent high order container aggregating FormFields and ability to distribute these
5242
- * fields into columns. It mainly hides implementation details that we need to deal with every
5243
- * time we are building a form. We have input fields , error managements, different states,
5244
- * hints and many more.
5245
- *
5246
- * Well behaved form that has information side by side in multiple
5247
- * columns needs to also know how to merge properly.
5248
- *
5249
- * Just to get the idea about the structure without actual input components inside
5250
- *
5251
- * ```html
5252
- * <fdp-form-group [hintPlacement]="'inline'" columnLayout="XL2-L2-M1-S1">
5253
- * <fdp-form-field [id]="'Field A'" [rank]="10" column="1">
5254
- * </fdp-form-field>
5255
- *
5256
- * <fdp-form-field [id]="'Field B'" [rank]="30" column="1">
5257
- * </fdp-form-field>
5258
- *
5259
- * <fdp-form-field [id]="'Field C'" [rank]="20" column="1">
5260
- * </fdp-form-field>
5261
- *
5262
- * <fdp-form-field [id]="Field D" [rank]="20" column="2">
5263
- * </fdp-form-field>
5264
- *
5265
- *
5266
- * <fdp-form-field [id]="'Field E'" [rank]="30" column="2">
5267
- * </fdp-form-field>
5268
- * </fdp-form-group>
5315
+ class PlatformCheckboxModule {
5316
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformCheckboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
5317
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.5", ngImport: i0, type: PlatformCheckboxModule, imports: [CheckboxComponent], exports: [CheckboxComponent] }); }
5318
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformCheckboxModule, imports: [CheckboxComponent] }); }
5319
+ }
5320
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformCheckboxModule, decorators: [{
5321
+ type: NgModule,
5322
+ args: [{
5323
+ imports: [CheckboxComponent],
5324
+ exports: [CheckboxComponent]
5325
+ }]
5326
+ }] });
5269
5327
 
5270
- *
5271
- * ````
5272
- *
5273
- *
5274
- * Which can be translated like this
5275
- * [Field A] - First column, rank 10
5276
- * [Field B] - First column, rank 30
5277
- * [Field C] - First column, rank 20
5278
- * [Field D] - Second column, rank 20
5279
- * [Field E] - Second column, rank 30
5280
- *
5281
- * What we expect that it creates following form with two column layout:
5282
- * [Field A] [Field D]
5283
- * [Field C] [Field E]
5284
- * [Field B]
5285
- *
5286
- * You can see all is sorted accordingly by rank (C goes before B).
5287
- *
5288
- * When you move into smaller device and all is merged into one columns the naive solution would be:
5289
- *
5290
- * [Field A]
5291
- * [Field C]
5292
- * [Field B]
5293
- * [Field D]
5294
- * [Field E]
5295
- *
5296
- * The fields needs to restructure according to their original positioning. When Field D was on the
5297
- * top why we should move it to the bottom? The more correct solution should be following.
5298
- *
5299
- * [Field A]
5300
- * [Field D]
5301
- * [Field C]
5302
- * [Field E]
5303
- * [Field B]
5304
- *
5305
- * Fields nicely merge together. they don't wrap.
5306
- *
5307
- *
5308
- * Besides this layout support it also wraps form functionality and it can work with FormGroup.
5309
- * You can also decide if you want your form with <form> element or without it.
5310
- *
5311
- *
5312
- */
5313
- class FormGroupComponent {
5314
- /**
5315
- * Defines column layout for inline items.
5316
- */
5317
- set inlineColumnLayout(value) {
5318
- this._inlineColumnLayout = normalizeColumnLayout(value);
5319
- this._updateInlineColumnLayout();
5320
- }
5321
- get inlineColumnLayout() {
5322
- return this._inlineColumnLayout;
5323
- }
5328
+ const COMBOBOX_COMPONENT = new InjectionToken('ComboboxInterface');
5329
+
5330
+ class ComboboxMobileComponent extends MobileModeBase {
5324
5331
  /** @hidden */
5325
- constructor() {
5326
- /** Id for the form group element */
5327
- this.id = `fdp-form-group-${formGroupUniqueId++}`;
5328
- /** Indicates if group is editable */
5329
- this.editable = true;
5330
- /** Indicates when labels should not be displayed */
5331
- this.noLabelLayout = false;
5332
- /**
5333
- * Defines label's column layout.
5334
- */
5335
- this.labelColumnLayout = DefaultHorizontalLabelLayout;
5336
- /**
5337
- * Defines field's column layout.
5338
- */
5339
- this.fieldColumnLayout = DefaultHorizontalFieldLayout;
5340
- /**
5341
- * Defines gap column layout.
5342
- */
5343
- this.gapColumnLayout = DefaultGapLayout;
5344
- /** Whether to hide form's main title. Default is false. */
5345
- this.hideMainTItle = false;
5346
- /** Whether to wrap all the provided content in a `<form>` */
5347
- this.useForm = false;
5348
- /** Whether all form items should have identical layout provided for form group */
5349
- this.unifiedLayout = true;
5350
- /**
5351
- * onSubmit event
5352
- */
5353
- this.onSubmit = new EventEmitter();
5354
- /**
5355
- * @hidden
5356
- * Packed fields which should be rendered
5357
- */
5358
- this.formRows = {};
5359
- /** @hidden */
5360
- this.contentDensityObserver = inject(ContentDensityObserver);
5361
- /** @hidden */
5362
- this._destroyRef = inject(DestroyRef);
5363
- /** @hidden */
5364
- this._inlineColumnLayout = DefaultVerticalFieldLayout;
5365
- /**
5366
- * @hidden
5367
- *
5368
- * List of direct FdpFormGroup's children.
5369
- *
5370
- * Since "formGroupChildren" uses "{ descendants: true }" option that means
5371
- * "formGroupChildren" will keep track of nested FdpFormGroup fields as well.
5372
- * This list relies on the injection mechanism so nested FdpFormGroup's fields/fieldGroups
5373
- * will be omitted
5332
+ constructor(comboboxComponent) {
5333
+ super(comboboxComponent, MobileModeControl.COMBOBOX);
5334
+ /** @hidden
5335
+ * For internal usage
5336
+ * Control element, which will be rendered inside dialog.
5337
+ * List element, which will be rendered inside dialog.
5374
5338
  */
5375
- this._formGroupDirectChildren = [];
5376
- /** @hidden */
5377
- this._subscriptions = new Subscription();
5378
- /** @hidden */
5379
- this._cd = inject(ChangeDetectorRef);
5380
- /** @hidden */
5381
- this._elementRef = inject(ElementRef);
5382
- /** @hidden */
5383
- this._formContainer = inject(ControlContainer, { optional: true });
5384
- /** @hidden */
5385
- this._defaultHintOptions = inject(FDP_FORM_FIELD_HINT_OPTIONS_DEFAULT);
5386
- /** @hidden used for template side Type correction */
5387
- this.$fieldGroup = (f) => f;
5388
- this.formGroup = (this._formContainer ? this._formContainer.control : new FormGroup({}));
5389
- }
5390
- /** @hidden */
5391
- ngOnChanges(changes) {
5392
- this.buildComponentCssClass();
5393
- if (changes.hint) {
5394
- if (typeof this.hint === 'string' || this.hint instanceof TemplateRef) {
5395
- this._hintOptions = {
5396
- ...this._defaultHintOptions,
5397
- content: this.hint
5398
- };
5399
- }
5400
- else {
5401
- this._hintOptions = {
5402
- ...this._defaultHintOptions,
5403
- ...this.hint
5404
- };
5405
- }
5406
- }
5339
+ this.childContent = null;
5407
5340
  }
5408
5341
  /** @hidden */
5409
5342
  ngOnInit() {
5410
- if (!this.formGroup) {
5411
- this.formGroup = new FormGroup({});
5412
- }
5413
- this.buildComponentCssClass();
5414
- this._updateInlineColumnLayout();
5415
- }
5416
- /** @hidden */
5417
- ngAfterContentInit() {
5418
- this.i18Strings = this.i18Strings ? this.i18Strings : this.i18Template;
5419
- this._setUserLayout();
5420
- this._updateFieldByColumn();
5421
- this._updateFormFieldsProperties();
5422
- this._listenToFormGroupChildren();
5423
- this._listenFormFieldColumnChange();
5424
- this._cd.markForCheck();
5425
- }
5426
- /** @hidden */
5427
- ngAfterViewInit() {
5428
- this.i18Strings = this.i18Strings ? this.i18Strings : this.i18Template;
5429
- this._setUserLayout();
5430
- this._updateFieldByColumn();
5431
- this._updateFormFieldsProperties();
5432
- this._listenToFormGroupChildren();
5433
- this._listenFormFieldColumnChange();
5434
- this._trackFormGroupResize();
5435
- this._cd.markForCheck();
5436
- this._cd.detectChanges();
5437
- }
5438
- /** @hidden */
5439
- ngOnDestroy() {
5440
- this._subscriptions.unsubscribe();
5441
- }
5442
- /** @hidden */
5443
- addFormField(formField) {
5444
- // It's needed to set default FormField properties
5445
- // on early stage otherwise validation errors
5446
- // will be thrown on FormField level (e.g. i18string are not defined)
5447
- this._updateFormFieldProperties(formField);
5448
- // keep track of directly registered children
5449
- this._addDirectFormGroupChild(formField);
5450
- }
5451
- /** @hidden */
5452
- removeFormField(formField) {
5453
- this._removeDirectFormGroupChild(formField);
5343
+ this._listenOnMultiInputOpenChange();
5454
5344
  }
5455
5345
  /** @hidden */
5456
- addFormFieldGroup(formFieldGroup) {
5457
- this._addDirectFormGroupChild(formFieldGroup);
5346
+ handleDismiss() {
5347
+ this.dialogRef.dismiss();
5348
+ this._component.dialogDismiss(this._selectedBackup);
5458
5349
  }
5459
5350
  /** @hidden */
5460
- removeFormFieldGroup(formFieldGroup) {
5461
- this._removeDirectFormGroupChild(formFieldGroup);
5351
+ handleApprove() {
5352
+ this.dialogRef.close();
5353
+ this._component.dialogApprove();
5462
5354
  }
5463
5355
  /** @hidden */
5464
- addFormControl(name, control) {
5465
- this.formGroup.setControl(name, control);
5466
- // letting control to set value. when provided value is 'false'.
5467
- if (this.object) {
5468
- control.patchValue(this.object[name]);
5356
+ _toggleDialog(open) {
5357
+ if (!open) {
5358
+ return;
5359
+ }
5360
+ this._selectedBackup = this._component.inputText;
5361
+ if (!this._dialogService.hasOpenDialogs()) {
5362
+ this._open();
5469
5363
  }
5470
5364
  }
5471
5365
  /** @hidden */
5472
- removeFormControl(name) {
5473
- this.formGroup.removeControl(name);
5474
- }
5475
- /** @hidden */
5476
- trackByFn(index) {
5477
- return index;
5478
- }
5479
- /** @hidden */
5480
- trackByFieldName(index, field) {
5481
- return field ? field.name : undefined;
5482
- }
5483
- /** @hidden */
5484
- buildComponentCssClass() {
5485
- return ['fd-container', this.class];
5366
+ _listenOnMultiInputOpenChange() {
5367
+ this._component.openChange
5368
+ .pipe(takeUntilDestroyed(this._destroyRef))
5369
+ .subscribe((isOpen) => this._toggleDialog(isOpen));
5486
5370
  }
5487
5371
  /** @hidden */
5488
- _listenToFormGroupChildren() {
5489
- this.formGroupChildren.changes.subscribe(() => {
5490
- this._updateFieldByColumn();
5491
- this._cd.markForCheck();
5372
+ _open() {
5373
+ this.dialogRef = this._dialogService.open(this.dialogTemplate, {
5374
+ mobile: true,
5375
+ disablePaddings: true,
5376
+ ...this.dialogConfig,
5377
+ backdropClickCloseable: false,
5378
+ container: this._elementRef.nativeElement
5492
5379
  });
5493
- }
5494
- /** @hidden */
5495
- _listenFormFieldColumnChange() {
5496
- this.formGroupChildren.forEach((field) => field.onColumnChange?.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {
5497
- this._updateFieldByColumn();
5498
- this._cd.markForCheck();
5499
- }));
5500
- }
5501
- /**
5502
- * @hidden
5503
- * Assign a fields or field group to specified columns with rank.
5504
- * if `columnLayoutType` is given a fields without column property will set on last column.
5505
- * Otherwise the fields set 1 column.
5506
- */
5507
- _updateFieldByColumn() {
5508
- const formChildren = this._getFormGroupChildren();
5509
- const rows = {};
5510
- let rowNumber = 0;
5511
- let columns = {};
5512
- for (const child of formChildren) {
5513
- if (isFieldChild(child)) {
5514
- const field = getField(child);
5515
- const columnNumber = this._validateFieldColumn(child.column);
5516
- if (!columns[columnNumber]) {
5517
- columns[columnNumber] = [];
5518
- }
5519
- columns[columnNumber].push(field);
5520
- }
5521
- if (isFieldGroupChild(child)) {
5522
- const fieldGroupColumns = {};
5523
- if (Object.keys(columns).length) {
5524
- rows[rowNumber] = columns;
5525
- columns = {};
5526
- rowNumber++;
5380
+ // Have to fire "detectChanges" to fix "ExpressionChangedAfterItHasBeenCheckedError"
5381
+ this.dialogRef.afterLoaded.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {
5382
+ this._component.detectChanges();
5383
+ });
5384
+ const refSub = this.dialogRef.afterClosed.subscribe({
5385
+ error: (type) => {
5386
+ if (type === 'escape') {
5387
+ this._component.dialogDismiss(this._selectedBackup);
5388
+ refSub.unsubscribe();
5527
5389
  }
5528
- const groupFields = child.fields.map((field) => getField(field));
5529
- groupFields.forEach((groupField) => {
5530
- const columnNumber = this._validateFieldColumn(groupField.column);
5531
- if (!fieldGroupColumns[columnNumber]) {
5532
- fieldGroupColumns[columnNumber] = [];
5533
- }
5534
- fieldGroupColumns[columnNumber].push(groupField);
5535
- });
5536
- rows[rowNumber] = new FieldGroup(child.label, fieldGroupColumns, child.hintOptions);
5537
- rowNumber++;
5538
5390
  }
5539
- }
5540
- rows[rowNumber] = columns;
5541
- this.formRows = rows;
5391
+ });
5542
5392
  }
5543
- /** @hidden Validate column number */
5544
- _validateFieldColumn(columnNumber) {
5545
- if (this.columnLayout && columnNumber) {
5546
- if (isNaN(columnNumber)) {
5547
- throw new Error('Input a valid column number');
5548
- }
5549
- if (columnNumber > this.xlColumnsNumber) {
5550
- throw new Error(`Columns cannot be more than ${this.xlColumnsNumber}`);
5551
- }
5552
- return columnNumber;
5553
- }
5554
- return this.xlColumnsNumber;
5555
- }
5556
- /** @hidden */
5557
- _updateFormFieldsProperties() {
5558
- this._getFormGroupChildren().forEach((formField) => {
5559
- if (isFieldChild(formField)) {
5560
- this._updateFormFieldProperties(formField);
5561
- }
5562
- if (isFieldGroupChild(formField)) {
5563
- formField.fields.forEach((field) => this._updateFormFieldProperties(getFormField(field)));
5564
- }
5565
- });
5566
- }
5567
- /**
5568
- * @hidden
5569
- * Pass some global properties to each field. Even formGroup cna be inject directly inside form
5570
- * field we are using here a setter method to initialize the
5571
- *
5572
- */
5573
- _updateFormFieldProperties(formField) {
5574
- if (this.unifiedLayout) {
5575
- formField.editable = this.editable;
5576
- formField.noLabelLayout = this.noLabelLayout;
5577
- }
5578
- formField.setDefaultColumnLayout();
5579
- formField.i18Strings = formField.i18Strings ? formField.i18Strings : this.i18Strings;
5580
- formField.setErrorDirectives(this._errorDirectives);
5581
- }
5582
- /**
5583
- * @hidden
5584
- * if `columnLayoutType` is given, set those column layouts appropriately. Otherwise, a layout will set on 1 column
5585
- */
5586
- _setUserLayout() {
5587
- if (this.columnLayout) {
5588
- this._getColumnNumbers(this.columnLayout);
5589
- if (isNaN(this.xlColumnsNumber) || isNaN(this.lgColumnsNumber) || isNaN(this.mdColumnsNumber)) {
5590
- throw new Error('Input a valid number for columns');
5591
- }
5592
- if (this.xlColumnsNumber > 12 || this.lgColumnsNumber > 12 || this.mdColumnsNumber > 12) {
5593
- throw new Error('Columns cannot be more than 12');
5594
- }
5595
- const lgColumns = 12 / this.lgColumnsNumber;
5596
- const mdColumns = 12 / this.mdColumnsNumber;
5597
- const xlColumns = 12 / this.xlColumnsNumber;
5598
- // for `lg` single-column layout, Styles does not use any class, and providing `fd-col-lg--12` has unintended side-effects
5599
- // therefore, we remove the lg class for single-column layout
5600
- if (lgColumns === 12) {
5601
- this.xlCol = `fd-col-xl--${xlColumns} fd-col-md--${mdColumns}`;
5602
- }
5603
- else {
5604
- this.xlCol = `fd-col-xl--${xlColumns} fd-col-md--${mdColumns} fd-col-lg--${lgColumns}`;
5605
- }
5606
- }
5607
- else {
5608
- this.xlCol = `fd-col-xl--12 fd-col-md--12 fd-col-lg--12`;
5609
- }
5610
- }
5611
- /** @hidden */
5612
- _getColumnNumbers(layout) {
5613
- const [xl, lg, md] = layout.split('-');
5614
- this.xlColumnsNumber = parseInt(xl.slice(2, xl.length), 10);
5615
- this.lgColumnsNumber = parseInt(lg.slice(1, lg.length), 10);
5616
- this.mdColumnsNumber = parseInt(md.slice(1, md.length), 10);
5617
- }
5618
- /** @hidden */
5619
- _addDirectFormGroupChild(child) {
5620
- if (this._formGroupDirectChildren.indexOf(child) > -1) {
5621
- return;
5622
- }
5623
- this._formGroupDirectChildren.push(child);
5624
- }
5625
- /** @hidden */
5626
- _removeDirectFormGroupChild(child) {
5627
- this._formGroupDirectChildren = this._formGroupDirectChildren.filter((_child) => _child !== child);
5628
- }
5629
- /**
5630
- * @hidden
5631
- * Get direct form group children in the original order
5632
- */
5633
- _getFormGroupChildren() {
5634
- if (!this.formGroupChildren) {
5635
- return [];
5636
- }
5637
- const children = this.formGroupChildren
5638
- .toArray()
5639
- .map((child) => (isFieldGroupWrapperChild(child) ? child.fieldRenderer : child));
5640
- return children.filter((child) => this._formGroupDirectChildren.includes(child));
5641
- }
5642
- /** @hidden */
5643
- _updateInlineColumnLayout() {
5644
- this._inlineColumnLayoutClass = generateColumnClass(this.inlineColumnLayout);
5645
- }
5646
- /**
5647
- * @hidden
5648
- * have to trigger change detection here in order to re-check contents
5649
- * inside "FormField.renderer" template every time component's dimensions changed
5650
- */
5651
- _trackFormGroupResize() {
5652
- this._subscriptions.add(resizeObservable(this._elementRef.nativeElement)
5653
- .pipe(debounceTime(20))
5654
- .subscribe(() => this._cd.markForCheck()));
5655
- }
5656
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FormGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5657
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: FormGroupComponent, isStandalone: true, selector: "fdp-form-group", inputs: { id: "id", name: "name", editable: "editable", noLabelLayout: "noLabelLayout", class: "class", hint: "hint", inlineColumnLayout: "inlineColumnLayout", labelColumnLayout: "labelColumnLayout", fieldColumnLayout: "fieldColumnLayout", gapColumnLayout: "gapColumnLayout", formGroup: "formGroup", topTitle: "topTitle", mainTitle: "mainTitle", hideMainTItle: "hideMainTItle", object: "object", i18Strings: "i18Strings", useForm: ["useForm", "useForm", booleanAttribute], columnLayout: "columnLayout", unifiedLayout: "unifiedLayout" }, outputs: { onSubmit: "onSubmit" }, providers: [formGroupProvider, FormFieldLayoutService, contentDensityObserverProviders()], queries: [{ propertyName: "i18Template", first: true, predicate: ["i18n"], descendants: true, static: true }, { propertyName: "formGroupChildren", predicate: FORM_GROUP_CHILD_FIELD_TOKEN, descendants: true }, { propertyName: "_errorDirectives", predicate: FormFieldErrorDirective }], viewQueries: [{ propertyName: "nativeForm", first: true, predicate: ["nativeForm"], descendants: true, read: NgForm }], usesOnChanges: true, ngImport: i0, template: "@if (useForm) {\n <form #nativeForm (ngSubmit)=\"onSubmit.emit($event)\" [id]=\"id\" [name]=\"name\">\n <ng-template [ngTemplateOutlet]=\"body\"></ng-template>\n </form>\n} @else {\n <!-- Render fields and field groups with assigned columns -->\n <ng-template [ngTemplateOutlet]=\"fields\"></ng-template>\n}\n<ng-template #body>\n <!-- Render fields and field groups with assigned columns -->\n <ng-template [ngTemplateOutlet]=\"fields\"></ng-template>\n</ng-template>\n<ng-template #fields>\n @if (mainTitle && !hideMainTItle) {\n <div class=\"fd-form-header\">\n <ng-template [ngTemplateOutlet]=\"mainTitleTemplate\"></ng-template>\n </div>\n }\n <div\n class=\"fd-container fd-form-layout-grid-container\"\n [class.is-compact]=\"contentDensityObserver.isCompactSignal()\"\n >\n @for (column of formRows | keyvalue; track $index) {\n <div class=\"fd-row\">\n @for (fields of column | fieldGroupRowValue | keyvalue; track $index) {\n @if ($fieldGroup(column.value); as value) {\n @if (value.label && $index === 0) {\n <div class=\"fd-row fd-form-item\">\n <div class=\"fd-col\" [class]=\"xlCol\">\n <div fdp-form-group-header [fieldGroup]=\"$index === 0 ? value : null\"></div>\n </div>\n </div>\n }\n }\n\n <div class=\"fd-col fd-form-group\" [class]=\"xlCol\">\n @for (field of fields.value; track trackByFieldName($index, field)) {\n <div class=\"fd-row fd-form-item\">\n <div class=\"fd-col\" [class]=\"_inlineColumnLayoutClass\" [style.order]=\"field.rank\">\n <ng-template [ngTemplateOutlet]=\"field?.renderer || null\"></ng-template>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n</ng-template>\n<!-- For nested form-group -->\n<ng-content select=\"fdp-form-group\"></ng-content>\n<ng-template #mainTitleTemplate>\n @if (_hintOptions && _hintOptions.content && _hintOptions.position === 'before') {\n <ng-template [ngTemplateOutlet]=\"hintTemplate\"></ng-template>\n }\n <h5 class=\"fd-form-header__text\">\n {{ mainTitle }}\n </h5>\n @if (_hintOptions && _hintOptions.content && _hintOptions.position === 'after') {\n <ng-template [ngTemplateOutlet]=\"hintTemplate\"></ng-template>\n }\n <ng-template #hintTemplate>\n <span fd-link [undecorated]=\"true\">\n <fd-icon\n [fd-inline-help]=\"_hintOptions!.content\"\n [glyph]=\"_hintOptions!.glyph\"\n [placement]=\"_hintOptions!.placement ?? null\"\n [triggers]=\"_hintOptions!.trigger ?? []\"\n tabindex=\"0\"\n ></fd-icon>\n </span>\n </ng-template>\n</ng-template>\n", styles: [".fd-col,.fd-container,.fd-row{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0}.fd-col:after,.fd-col:before,.fd-container:after,.fd-container:before,.fd-row:after,.fd-row:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-container{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;padding-block:0;padding-inline:.25rem;position:relative}.fd-container .fd-row{margin-inline:-.25rem;min-width:calc(100% + .5rem)}.fd-container>.fd-row>.fd-col{padding-block:.25rem}.fd-container.fd-container--no-gap .fd-row,.fd-container.fd-container--no-horizontal-gap .fd-row{margin-inline:0}.fd-container.fd-container--no-gap .fd-row .fd-col,.fd-container.fd-container--no-horizontal-gap .fd-row .fd-col{padding-inline:0}.fd-container.fd-container--no-gap>.fd-row>.fd-col,.fd-container.fd-container--no-vertical-gap>.fd-row>.fd-col{padding-block:0}.fd-container[dir=rtl],[dir=rtl] .fd-container{direction:rtl}.fd-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;min-width:100%;position:relative}.fd-col{max-width:100%;min-width:100%;padding-inline:.25rem}.fd-col--0{max-width:0;min-width:0%}.fd-col--offset-0{-webkit-margin-start:0;margin-inline-start:0}.fd-col--offset-after-0{-webkit-margin-end:0;margin-inline-end:0}.fd-col--1{max-width:8.3333333333%;min-width:8.3333333333%}.fd-col--offset-1{-webkit-margin-start:8.3333333333%;margin-inline-start:8.3333333333%}.fd-col--offset-after-1{-webkit-margin-end:8.3333333333%;margin-inline-end:8.3333333333%}.fd-col--2{max-width:16.6666666667%;min-width:16.6666666667%}.fd-col--offset-2{-webkit-margin-start:16.6666666667%;margin-inline-start:16.6666666667%}.fd-col--offset-after-2{-webkit-margin-end:16.6666666667%;margin-inline-end:16.6666666667%}.fd-col--3{max-width:25%;min-width:25%}.fd-col--offset-3{-webkit-margin-start:25%;margin-inline-start:25%}.fd-col--offset-after-3{-webkit-margin-end:25%;margin-inline-end:25%}.fd-col--4{max-width:33.3333333333%;min-width:33.3333333333%}.fd-col--offset-4{-webkit-margin-start:33.3333333333%;margin-inline-start:33.3333333333%}.fd-col--offset-after-4{-webkit-margin-end:33.3333333333%;margin-inline-end:33.3333333333%}.fd-col--5{max-width:41.6666666667%;min-width:41.6666666667%}.fd-col--offset-5{-webkit-margin-start:41.6666666667%;margin-inline-start:41.6666666667%}.fd-col--offset-after-5{-webkit-margin-end:41.6666666667%;margin-inline-end:41.6666666667%}.fd-col--6{max-width:50%;min-width:50%}.fd-col--offset-6{-webkit-margin-start:50%;margin-inline-start:50%}.fd-col--offset-after-6{-webkit-margin-end:50%;margin-inline-end:50%}.fd-col--7{max-width:58.3333333333%;min-width:58.3333333333%}.fd-col--offset-7{-webkit-margin-start:58.3333333333%;margin-inline-start:58.3333333333%}.fd-col--offset-after-7{-webkit-margin-end:58.3333333333%;margin-inline-end:58.3333333333%}.fd-col--8{max-width:66.6666666667%;min-width:66.6666666667%}.fd-col--offset-8{-webkit-margin-start:66.6666666667%;margin-inline-start:66.6666666667%}.fd-col--offset-after-8{-webkit-margin-end:66.6666666667%;margin-inline-end:66.6666666667%}.fd-col--9{max-width:75%;min-width:75%}.fd-col--offset-9{-webkit-margin-start:75%;margin-inline-start:75%}.fd-col--offset-after-9{-webkit-margin-end:75%;margin-inline-end:75%}.fd-col--10{max-width:83.3333333333%;min-width:83.3333333333%}.fd-col--offset-10{-webkit-margin-start:83.3333333333%;margin-inline-start:83.3333333333%}.fd-col--offset-after-10{-webkit-margin-end:83.3333333333%;margin-inline-end:83.3333333333%}.fd-col--11{max-width:91.6666666667%;min-width:91.6666666667%}.fd-col--offset-11{-webkit-margin-start:91.6666666667%;margin-inline-start:91.6666666667%}.fd-col--offset-after-11{-webkit-margin-end:91.6666666667%;margin-inline-end:91.6666666667%}.fd-col--12{max-width:100%;min-width:100%}.fd-col--offset-12{-webkit-margin-start:100%;margin-inline-start:100%}.fd-col--offset-after-12{-webkit-margin-end:100%;margin-inline-end:100%}.fd-col--full{max-width:none;min-width:8.3333333333%;-webkit-box-flex:1;-ms-flex:1;flex:1}.fd-col--wrap{-ms-flex-wrap:wrap;flex-wrap:wrap}@media(width>=600px){.fd-container{padding-block:0;padding-inline:.5rem}.fd-container .fd-row{margin-inline:-.5rem;min-width:calc(100% + 1rem)}.fd-container>.fd-row>.fd-col{padding-block:.5rem}.fd-col{padding-inline:.5rem}.fd-col-md--0{max-width:0;min-width:0%}.fd-col-md--offset-0{-webkit-margin-start:0;margin-inline-start:0}.fd-col-md--offset-after-0{-webkit-margin-end:0;margin-inline-end:0}.fd-col-md--1{max-width:8.3333333333%;min-width:8.3333333333%}.fd-col-md--offset-1{-webkit-margin-start:8.3333333333%;margin-inline-start:8.3333333333%}.fd-col-md--offset-after-1{-webkit-margin-end:8.3333333333%;margin-inline-end:8.3333333333%}.fd-col-md--2{max-width:16.6666666667%;min-width:16.6666666667%}.fd-col-md--offset-2{-webkit-margin-start:16.6666666667%;margin-inline-start:16.6666666667%}.fd-col-md--offset-after-2{-webkit-margin-end:16.6666666667%;margin-inline-end:16.6666666667%}.fd-col-md--3{max-width:25%;min-width:25%}.fd-col-md--offset-3{-webkit-margin-start:25%;margin-inline-start:25%}.fd-col-md--offset-after-3{-webkit-margin-end:25%;margin-inline-end:25%}.fd-col-md--4{max-width:33.3333333333%;min-width:33.3333333333%}.fd-col-md--offset-4{-webkit-margin-start:33.3333333333%;margin-inline-start:33.3333333333%}.fd-col-md--offset-after-4{-webkit-margin-end:33.3333333333%;margin-inline-end:33.3333333333%}.fd-col-md--5{max-width:41.6666666667%;min-width:41.6666666667%}.fd-col-md--offset-5{-webkit-margin-start:41.6666666667%;margin-inline-start:41.6666666667%}.fd-col-md--offset-after-5{-webkit-margin-end:41.6666666667%;margin-inline-end:41.6666666667%}.fd-col-md--6{max-width:50%;min-width:50%}.fd-col-md--offset-6{-webkit-margin-start:50%;margin-inline-start:50%}.fd-col-md--offset-after-6{-webkit-margin-end:50%;margin-inline-end:50%}.fd-col-md--7{max-width:58.3333333333%;min-width:58.3333333333%}.fd-col-md--offset-7{-webkit-margin-start:58.3333333333%;margin-inline-start:58.3333333333%}.fd-col-md--offset-after-7{-webkit-margin-end:58.3333333333%;margin-inline-end:58.3333333333%}.fd-col-md--8{max-width:66.6666666667%;min-width:66.6666666667%}.fd-col-md--offset-8{-webkit-margin-start:66.6666666667%;margin-inline-start:66.6666666667%}.fd-col-md--offset-after-8{-webkit-margin-end:66.6666666667%;margin-inline-end:66.6666666667%}.fd-col-md--9{max-width:75%;min-width:75%}.fd-col-md--offset-9{-webkit-margin-start:75%;margin-inline-start:75%}.fd-col-md--offset-after-9{-webkit-margin-end:75%;margin-inline-end:75%}.fd-col-md--10{max-width:83.3333333333%;min-width:83.3333333333%}.fd-col-md--offset-10{-webkit-margin-start:83.3333333333%;margin-inline-start:83.3333333333%}.fd-col-md--offset-after-10{-webkit-margin-end:83.3333333333%;margin-inline-end:83.3333333333%}.fd-col-md--11{max-width:91.6666666667%;min-width:91.6666666667%}.fd-col-md--offset-11{-webkit-margin-start:91.6666666667%;margin-inline-start:91.6666666667%}.fd-col-md--offset-after-11{-webkit-margin-end:91.6666666667%;margin-inline-end:91.6666666667%}.fd-col-md--12{max-width:100%;min-width:100%}.fd-col-md--offset-12{-webkit-margin-start:100%;margin-inline-start:100%}.fd-col-md--offset-after-12{-webkit-margin-end:100%;margin-inline-end:100%}}@media(width>=1024px){.fd-col-lg--0{max-width:0;min-width:0%}.fd-col-lg--offset-0{-webkit-margin-start:0;margin-inline-start:0}.fd-col-lg--offset-after-0{-webkit-margin-end:0;margin-inline-end:0}.fd-col-lg--1{max-width:8.3333333333%;min-width:8.3333333333%}.fd-col-lg--offset-1{-webkit-margin-start:8.3333333333%;margin-inline-start:8.3333333333%}.fd-col-lg--offset-after-1{-webkit-margin-end:8.3333333333%;margin-inline-end:8.3333333333%}.fd-col-lg--2{max-width:16.6666666667%;min-width:16.6666666667%}.fd-col-lg--offset-2{-webkit-margin-start:16.6666666667%;margin-inline-start:16.6666666667%}.fd-col-lg--offset-after-2{-webkit-margin-end:16.6666666667%;margin-inline-end:16.6666666667%}.fd-col-lg--3{max-width:25%;min-width:25%}.fd-col-lg--offset-3{-webkit-margin-start:25%;margin-inline-start:25%}.fd-col-lg--offset-after-3{-webkit-margin-end:25%;margin-inline-end:25%}.fd-col-lg--4{max-width:33.3333333333%;min-width:33.3333333333%}.fd-col-lg--offset-4{-webkit-margin-start:33.3333333333%;margin-inline-start:33.3333333333%}.fd-col-lg--offset-after-4{-webkit-margin-end:33.3333333333%;margin-inline-end:33.3333333333%}.fd-col-lg--5{max-width:41.6666666667%;min-width:41.6666666667%}.fd-col-lg--offset-5{-webkit-margin-start:41.6666666667%;margin-inline-start:41.6666666667%}.fd-col-lg--offset-after-5{-webkit-margin-end:41.6666666667%;margin-inline-end:41.6666666667%}.fd-col-lg--6{max-width:50%;min-width:50%}.fd-col-lg--offset-6{-webkit-margin-start:50%;margin-inline-start:50%}.fd-col-lg--offset-after-6{-webkit-margin-end:50%;margin-inline-end:50%}.fd-col-lg--7{max-width:58.3333333333%;min-width:58.3333333333%}.fd-col-lg--offset-7{-webkit-margin-start:58.3333333333%;margin-inline-start:58.3333333333%}.fd-col-lg--offset-after-7{-webkit-margin-end:58.3333333333%;margin-inline-end:58.3333333333%}.fd-col-lg--8{max-width:66.6666666667%;min-width:66.6666666667%}.fd-col-lg--offset-8{-webkit-margin-start:66.6666666667%;margin-inline-start:66.6666666667%}.fd-col-lg--offset-after-8{-webkit-margin-end:66.6666666667%;margin-inline-end:66.6666666667%}.fd-col-lg--9{max-width:75%;min-width:75%}.fd-col-lg--offset-9{-webkit-margin-start:75%;margin-inline-start:75%}.fd-col-lg--offset-after-9{-webkit-margin-end:75%;margin-inline-end:75%}.fd-col-lg--10{max-width:83.3333333333%;min-width:83.3333333333%}.fd-col-lg--offset-10{-webkit-margin-start:83.3333333333%;margin-inline-start:83.3333333333%}.fd-col-lg--offset-after-10{-webkit-margin-end:83.3333333333%;margin-inline-end:83.3333333333%}.fd-col-lg--11{max-width:91.6666666667%;min-width:91.6666666667%}.fd-col-lg--offset-11{-webkit-margin-start:91.6666666667%;margin-inline-start:91.6666666667%}.fd-col-lg--offset-after-11{-webkit-margin-end:91.6666666667%;margin-inline-end:91.6666666667%}.fd-col-lg--12{max-width:100%;min-width:100%}.fd-col-lg--offset-12{-webkit-margin-start:100%;margin-inline-start:100%}.fd-col-lg--offset-after-12{-webkit-margin-end:100%;margin-inline-end:100%}}@media(width>=1440px){.fd-col-xl--0{max-width:0;min-width:0%}.fd-col-xl--offset-0{-webkit-margin-start:0;margin-inline-start:0}.fd-col-xl--offset-after-0{-webkit-margin-end:0;margin-inline-end:0}.fd-col-xl--1{max-width:8.3333333333%;min-width:8.3333333333%}.fd-col-xl--offset-1{-webkit-margin-start:8.3333333333%;margin-inline-start:8.3333333333%}.fd-col-xl--offset-after-1{-webkit-margin-end:8.3333333333%;margin-inline-end:8.3333333333%}.fd-col-xl--2{max-width:16.6666666667%;min-width:16.6666666667%}.fd-col-xl--offset-2{-webkit-margin-start:16.6666666667%;margin-inline-start:16.6666666667%}.fd-col-xl--offset-after-2{-webkit-margin-end:16.6666666667%;margin-inline-end:16.6666666667%}.fd-col-xl--3{max-width:25%;min-width:25%}.fd-col-xl--offset-3{-webkit-margin-start:25%;margin-inline-start:25%}.fd-col-xl--offset-after-3{-webkit-margin-end:25%;margin-inline-end:25%}.fd-col-xl--4{max-width:33.3333333333%;min-width:33.3333333333%}.fd-col-xl--offset-4{-webkit-margin-start:33.3333333333%;margin-inline-start:33.3333333333%}.fd-col-xl--offset-after-4{-webkit-margin-end:33.3333333333%;margin-inline-end:33.3333333333%}.fd-col-xl--5{max-width:41.6666666667%;min-width:41.6666666667%}.fd-col-xl--offset-5{-webkit-margin-start:41.6666666667%;margin-inline-start:41.6666666667%}.fd-col-xl--offset-after-5{-webkit-margin-end:41.6666666667%;margin-inline-end:41.6666666667%}.fd-col-xl--6{max-width:50%;min-width:50%}.fd-col-xl--offset-6{-webkit-margin-start:50%;margin-inline-start:50%}.fd-col-xl--offset-after-6{-webkit-margin-end:50%;margin-inline-end:50%}.fd-col-xl--7{max-width:58.3333333333%;min-width:58.3333333333%}.fd-col-xl--offset-7{-webkit-margin-start:58.3333333333%;margin-inline-start:58.3333333333%}.fd-col-xl--offset-after-7{-webkit-margin-end:58.3333333333%;margin-inline-end:58.3333333333%}.fd-col-xl--8{max-width:66.6666666667%;min-width:66.6666666667%}.fd-col-xl--offset-8{-webkit-margin-start:66.6666666667%;margin-inline-start:66.6666666667%}.fd-col-xl--offset-after-8{-webkit-margin-end:66.6666666667%;margin-inline-end:66.6666666667%}.fd-col-xl--9{max-width:75%;min-width:75%}.fd-col-xl--offset-9{-webkit-margin-start:75%;margin-inline-start:75%}.fd-col-xl--offset-after-9{-webkit-margin-end:75%;margin-inline-end:75%}.fd-col-xl--10{max-width:83.3333333333%;min-width:83.3333333333%}.fd-col-xl--offset-10{-webkit-margin-start:83.3333333333%;margin-inline-start:83.3333333333%}.fd-col-xl--offset-after-10{-webkit-margin-end:83.3333333333%;margin-inline-end:83.3333333333%}.fd-col-xl--11{max-width:91.6666666667%;min-width:91.6666666667%}.fd-col-xl--offset-11{-webkit-margin-start:91.6666666667%;margin-inline-start:91.6666666667%}.fd-col-xl--offset-after-11{-webkit-margin-end:91.6666666667%;margin-inline-end:91.6666666667%}.fd-col-xl--12{max-width:100%;min-width:100%}.fd-col-xl--offset-12{-webkit-margin-start:100%;margin-inline-start:100%}.fd-col-xl--offset-after-12{-webkit-margin-end:100%;margin-inline-end:100%}}.fd-container.fd-form-layout-grid-container .fd-form-group,.fd-container.fd-form-layout-grid-container.fd-form-group{padding-block:1rem!important;padding-inline:1rem!important}.fd-container.fd-form-layout-grid-container .fd-form-group .fd-form-group,.fd-container.fd-form-layout-grid-container.fd-form-group .fd-form-group{padding-block:0!important;padding-inline:0!important}.fd-container.fd-form-layout-grid-container .fd-form-group .fd-form-item .fd-form-label,.fd-container.fd-form-layout-grid-container.fd-form-group .fd-form-item .fd-form-label{-webkit-margin-end:0;margin-inline-end:0;white-space:normal}.fd-container.fd-form-layout-grid-container .fd-form-group .fd-form-item .fd-form-label--colon,.fd-container.fd-form-layout-grid-container.fd-form-group .fd-form-item .fd-form-label--colon{-webkit-padding-end:.25rem;padding-inline-end:.25rem}.fd-container.fd-form-layout-grid-container .fd-form-group .fd-form-item .fd-form-label--required,.fd-container.fd-form-layout-grid-container.fd-form-group .fd-form-item .fd-form-label--required{-webkit-padding-end:.5rem;padding-inline-end:.5rem}.fd-container.fd-form-layout-grid-container .fd-form-group .fd-form-item .fd-form-label--required.fd-form-label--colon,.fd-container.fd-form-layout-grid-container.fd-form-group .fd-form-item .fd-form-label--required.fd-form-label--colon{-webkit-padding-end:.75rem;padding-inline-end:.75rem}.fd-container.fd-form-layout-grid-container .fd-row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.fd-container.fd-form-layout-grid-container .fd-row .fd-col{overflow:hidden;padding-block:0;text-overflow:ellipsis;white-space:nowrap}.fd-container.fd-form-layout-grid-container .fd-row .fd-col:not(.fd-form-group){-ms-flex-item-align:center;align-self:center}@media(width>=0){.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--vertical .fd-form-group .fd-form-item,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--vertical.fd-form-group .fd-form-item{margin-top:.625rem}.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--vertical .fd-form-group .fd-form-item:first-of-type,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--vertical.fd-form-group .fd-form-item:first-of-type{margin-top:0}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--1>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--1>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--1>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--2>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--2>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--2>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--3>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--3>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--3>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--4>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--4>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--4>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--5>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--5>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--5>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--6>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--6>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--6>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--7>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--7>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--7>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--8>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--8>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--8>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--9>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--9>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--9>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--10>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--10>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--10>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--11>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--11>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--11>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--12>.fd-form-label,.fd-container.fd-form-layout-grid-container .fd-row .fd-col>.fd-form-label{float:left;text-align:start;width:auto;-webkit-padding-after:.125rem;padding-block-end:.125rem}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--12>.fd-form-label[dir=rtl],.fd-container.fd-form-layout-grid-container .fd-row .fd-col>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--12>.fd-form-label,[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col>.fd-form-label{float:right}}@media(width>=0)and (width<=599px){.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container .fd-form-group .fd-form-item,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container.fd-form-group .fd-form-item{margin-top:.625rem}.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container .fd-form-group .fd-form-item:first-of-type,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container.fd-form-group .fd-form-item:first-of-type{margin-top:0}}@media(width>=600px){.fd-container.fd-form-layout-grid-container{padding-block:0;padding-inline:.25rem}.fd-container.fd-form-layout-grid-container .fd-row{margin-block:0;margin-inline:-.25rem;min-width:calc(100% + .5rem)}.fd-container.fd-form-layout-grid-container .fd-row .fd-col{padding-block:0;padding-inline:.25rem}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--1>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--1>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--1>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--2>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--2>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--2>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--3>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--3>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--3>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--4>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--4>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--4>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--5>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--5>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--5>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--6>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--6>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--6>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--7>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--7>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--7>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--8>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--8>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--8>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--9>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--9>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--9>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--10>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--10>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--10>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--11>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--11>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--11>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--12>.fd-form-label,.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md>.fd-form-label{float:left;text-align:start;width:auto;-webkit-padding-after:.125rem;padding-block-end:.125rem}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--12>.fd-form-label[dir=rtl],.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--12>.fd-form-label,[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md>.fd-form-label{float:right}}@media(width>=600px)and (width<=1023px){.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--md-vertical .fd-form-group .fd-form-item,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--md-vertical.fd-form-group .fd-form-item{margin-top:.625rem}.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--md-vertical .fd-form-group .fd-form-item:first-of-type,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--md-vertical.fd-form-group .fd-form-item:first-of-type{margin-top:0}}@media(width>=1024px){.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--1>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--1>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--1>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--2>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--2>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--2>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--3>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--3>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--3>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--4>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--4>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--4>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--5>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--5>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--5>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--6>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--6>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--6>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--7>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--7>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--7>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--8>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--8>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--8>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--9>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--9>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--9>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--10>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--10>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--10>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--11>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--11>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--11>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--12>.fd-form-label,.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg>.fd-form-label{float:left;text-align:start;width:auto;-webkit-padding-after:.125rem;padding-block-end:.125rem}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--12>.fd-form-label[dir=rtl],.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--12>.fd-form-label,[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg>.fd-form-label{float:right}}@media(width>=1024px)and (width<=1443px){.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--lg-vertical .fd-form-group .fd-form-item,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--lg-vertical.fd-form-group .fd-form-item{margin-top:.625rem}.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--lg-vertical .fd-form-group .fd-form-item:first-of-type,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--lg-vertical.fd-form-group .fd-form-item:first-of-type{margin-top:0}}@media(width>=1440px){.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--xl-vertical .fd-form-group .fd-form-item,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--xl-vertical.fd-form-group .fd-form-item{margin-top:.625rem}.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--xl-vertical .fd-form-group .fd-form-item:first-of-type,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--xl-vertical.fd-form-group .fd-form-item:first-of-type{margin-top:0}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--1>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--1>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--1>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--2>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--2>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--2>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--3>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--3>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--3>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--4>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--4>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--4>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--5>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--5>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--5>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--6>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--6>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--6>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--7>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--7>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--7>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--8>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--8>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--8>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--9>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--9>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--9>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--10>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--10>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--10>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--11>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--11>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--11>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--12>.fd-form-label,.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl>.fd-form-label{float:left;text-align:start;width:auto;-webkit-padding-after:.125rem;padding-block-end:.125rem}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--12>.fd-form-label[dir=rtl],.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--12>.fd-form-label,[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl>.fd-form-label{float:right}}.fd-section{background-color:var(--sapToolbar_Background);border:0;border-bottom:none;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-block:1rem 1.5rem;padding-inline:0;padding-inline:.5rem}.fd-section:after,.fd-section:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-section:after{clear:both;content:\"\";display:table}@media(min-width:600px){.fd-section{padding-inline:2rem}}@media(min-width:1440px){.fd-section{padding-inline:3rem}}.fd-section--no-border,.fd-section:last-child{border-bottom:0}.fd-section--bleed,.fd-section--full-bleed{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0}.fd-section--bleed:after,.fd-section--bleed:before,.fd-section--full-bleed:after,.fd-section--full-bleed:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-section--bleed .fd-section__footer,.fd-section--bleed .fd-section__header,.fd-section--full-bleed .fd-section__footer,.fd-section--full-bleed .fd-section__header{padding-inline:.5rem}@media(min-width:600px){.fd-section--bleed .fd-section__footer,.fd-section--bleed .fd-section__header,.fd-section--full-bleed .fd-section__footer,.fd-section--full-bleed .fd-section__header{padding-inline:2rem}}@media(min-width:1440px){.fd-section--bleed .fd-section__footer,.fd-section--bleed .fd-section__header,.fd-section--full-bleed .fd-section__footer,.fd-section--full-bleed .fd-section__header{padding-inline:3rem}}.fd-section__header{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;min-height:1.5rem;padding-block:0;padding-inline:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-margin-after:1.5rem;margin-block-end:1.5rem}.fd-section__header:after,.fd-section__header:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-section__title{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapTitleColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-size:var(--sapFontHeader2Size);font-weight:400;forced-color-adjust:none;line-height:normal;line-height:2rem;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-margin-after:0;margin-block-end:0}.fd-section__title:after,.fd-section__title:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-section__actions{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-margin-start:auto;margin-inline-start:auto}.fd-section__actions:after,.fd-section__actions:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-section__footer{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.fd-section__footer:after,.fd-section__footer:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-form-group{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.fd-form-group:after,.fd-form-group:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-form-group--inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.fd-form-group--with-spacing{gap:.625rem}.fd-form-group__header{border:0;-webkit-box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:var(--sapGroup_TitleBackground);border-bottom:var(--sapGroup_TitleBorderWidth) solid var(--sapGroup_TitleBorderColor);box-sizing:border-box;min-height:var(--sapElement_LineHeight);padding-inline:var(--fdFormGroupPaddingInline,1rem);width:100%}.fd-form-group__header:after,.fd-form-group__header:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-form-group__header--no-padding{--fdFormGroupPaddingInline:0}.fd-form-group__header--no-border{border-bottom:none}.fd-form-group__header-text{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapGroup_TitleTextColor);font-family:var(--sapFontFamily);font-family:var(--sapFontHeaderFamily);font-size:var(--sapFontSize);font-size:var(--sapGroup_Title_FontSize);font-weight:400;font-weight:700;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;overflow:hidden;padding-block:0;padding-inline:0;text-overflow:ellipsis;white-space:nowrap}.fd-form-group__header-text:after,.fd-form-group__header-text:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-form-group__header-text--wrap{overflow:visible;text-overflow:clip;white-space:normal}.fd-form-header{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:var(--sapGroup_TitleBackground);-webkit-box-shadow:0 var(--fdFormHeader_Border_Width) 0 var(--sapGroup_TitleBorderColor);box-shadow:0 var(--fdFormHeader_Border_Width) 0 var(--sapGroup_TitleBorderColor);height:var(--sapElement_LineHeight);padding-inline:1rem;width:100%}.fd-form-header:after,.fd-form-header:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-form-header__text{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapGroup_TitleTextColor);font-family:var(--sapFontFamily);font-family:var(--sapFontHeaderFamily);font-size:var(--sapFontSize);font-size:var(--sapGroup_Title_FontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;overflow:hidden;padding-block:0;padding-inline:0;text-overflow:ellipsis;white-space:nowrap}.fd-form-header__text:after,.fd-form-header__text:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}fdp-form-group{display:block}fdp-form-group .fd-form-group{display:block}fdp-form-group .fd-form-group.fd-form-group--inline{display:flex;flex-wrap:wrap;justify-content:flex-start}fdp-form-group .fd-form-group__header{padding-inline:1rem}fdp-form-group .fd-row:empty{display:none}fdp-form-group .fd-form-group__header{margin-block-start:1rem}.fd-form-label{overflow:hidden}\n/*! Bundled license information:\n\nfundamental-styles/dist/form-header.css:\n (*!\n * Fundamental Library Styles v0.41.8\n * Copyright (c) 2026 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n *)\n*/\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: FormGroupHeaderComponent, selector: "[fdp-form-group-header]", inputs: ["allowWrap", "fieldGroup"] }, { kind: "component", type: LinkComponent, selector: "[fdLink], [fd-link]", inputs: ["emphasized", "disabled", "inverted", "subtle", "undecorated", "touchTarget"] }, { kind: "component", type: IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "size", "class", "ariaLabel", "ariaHidden"], outputs: ["ariaHiddenChange"] }, { kind: "directive", type: InlineHelpDirective, selector: "[fd-inline-help]:not([fd-inline-help-template]), [fd-inline-help-template]:not([fd-inline-help])", inputs: ["fd-inline-help", "placement", "triggers", "closeOnOutsideClick", "additionalBodyClass", "disabled", "bodyId", "bodyRole", "noArrow", "closeOnEscapeKey", "closeOnNavigation", "restoreFocusOnClose", "appendTo", "fixedPosition", "maxWidth", "scrollStrategy"] }, { kind: "ngmodule", type: ContentDensityModule }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: FieldGroupRowValuePipe, name: "fieldGroupRowValue" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
5393
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ComboboxMobileComponent, deps: [{ token: COMBOBOX_COMPONENT }], target: i0.ɵɵFactoryTarget.Component }); }
5394
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: ComboboxMobileComponent, isStandalone: true, selector: "fdp-combobox-mobile", viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n @if (mobileConfig.title) {\n <h1 fd-title>{{ mobileConfig.title }}</h1>\n }\n @if (mobileConfig.hasCloseButton) {\n <button fd-dialog-close-button [mobile]=\"true\" (click)=\"handleDismiss()\"></button>\n }\n <ng-template fdkTemplate=\"subheader\">\n <div fd-bar-middle>\n <fd-bar-element [fullWidth]=\"true\">\n <ng-template [ngTemplateOutlet]=\"childContent?.controlTemplate || null\"></ng-template>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body>\n <ng-template [ngTemplateOutlet]=\"childContent?.listTemplate || null\"></ng-template>\n </fd-dialog-body>\n <fd-dialog-footer>\n @if (mobileConfig.approveButtonText) {\n <fd-button-bar fdType=\"emphasized\" [label]=\"mobileConfig.approveButtonText!\" (click)=\"handleApprove()\">\n </fd-button-bar>\n }\n @if (mobileConfig.cancelButtonText) {\n <fd-button-bar [label]=\"mobileConfig.cancelButtonText!\" (click)=\"handleDismiss()\"> </fd-button-bar>\n }\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: DialogModule }, { kind: "component", type: i1$2.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: i1$2.DialogBodyComponent, selector: "fd-dialog-body", inputs: ["disablePaddings"] }, { kind: "component", type: i1$2.DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: i1$2.DialogHeaderComponent, selector: "fd-dialog-header", inputs: ["inShellbar"] }, { kind: "component", type: i1$2.DialogCloseButtonComponent, selector: "[fd-dialog-close-button]", inputs: ["mobile", "title", "ariaLabel"] }, { kind: "directive", type: i1$2.DialogTemplateDirective, selector: "[fdDialogTemplate]", inputs: ["fdDialogTemplateConfig"] }, { kind: "directive", type: i2.TemplateDirective, selector: "[fdkTemplate]", inputs: ["fdkTemplate"] }, { kind: "directive", type: i3$1.BarMiddleDirective, selector: "[fd-bar-middle]", inputs: ["stackContentsVertically"] }, { kind: "directive", type: i3$1.BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth"] }, { kind: "component", type: i3$1.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabelledby", "id"] }, { kind: "component", type: i4.TitleComponent, selector: "[fd-title], [fdTitle]", inputs: ["twoLineClamp", "headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "ngmodule", type: BarModule }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
5658
5395
  }
5659
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FormGroupComponent, decorators: [{
5396
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ComboboxMobileComponent, decorators: [{
5660
5397
  type: Component,
5661
- args: [{ selector: 'fdp-form-group', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [formGroupProvider, FormFieldLayoutService, contentDensityObserverProviders()], imports: [
5662
- FormsModule,
5398
+ args: [{ selector: 'fdp-combobox-mobile', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [
5399
+ DialogModule,
5400
+ TitleComponent,
5401
+ TemplateDirective,
5402
+ BarModule,
5663
5403
  NgTemplateOutlet,
5664
- FormGroupHeaderComponent,
5665
- LinkComponent,
5666
- IconComponent,
5667
- InlineHelpDirective,
5668
- KeyValuePipe,
5669
- FieldGroupRowValuePipe,
5670
- ContentDensityModule
5671
- ], template: "@if (useForm) {\n <form #nativeForm (ngSubmit)=\"onSubmit.emit($event)\" [id]=\"id\" [name]=\"name\">\n <ng-template [ngTemplateOutlet]=\"body\"></ng-template>\n </form>\n} @else {\n <!-- Render fields and field groups with assigned columns -->\n <ng-template [ngTemplateOutlet]=\"fields\"></ng-template>\n}\n<ng-template #body>\n <!-- Render fields and field groups with assigned columns -->\n <ng-template [ngTemplateOutlet]=\"fields\"></ng-template>\n</ng-template>\n<ng-template #fields>\n @if (mainTitle && !hideMainTItle) {\n <div class=\"fd-form-header\">\n <ng-template [ngTemplateOutlet]=\"mainTitleTemplate\"></ng-template>\n </div>\n }\n <div\n class=\"fd-container fd-form-layout-grid-container\"\n [class.is-compact]=\"contentDensityObserver.isCompactSignal()\"\n >\n @for (column of formRows | keyvalue; track $index) {\n <div class=\"fd-row\">\n @for (fields of column | fieldGroupRowValue | keyvalue; track $index) {\n @if ($fieldGroup(column.value); as value) {\n @if (value.label && $index === 0) {\n <div class=\"fd-row fd-form-item\">\n <div class=\"fd-col\" [class]=\"xlCol\">\n <div fdp-form-group-header [fieldGroup]=\"$index === 0 ? value : null\"></div>\n </div>\n </div>\n }\n }\n\n <div class=\"fd-col fd-form-group\" [class]=\"xlCol\">\n @for (field of fields.value; track trackByFieldName($index, field)) {\n <div class=\"fd-row fd-form-item\">\n <div class=\"fd-col\" [class]=\"_inlineColumnLayoutClass\" [style.order]=\"field.rank\">\n <ng-template [ngTemplateOutlet]=\"field?.renderer || null\"></ng-template>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n</ng-template>\n<!-- For nested form-group -->\n<ng-content select=\"fdp-form-group\"></ng-content>\n<ng-template #mainTitleTemplate>\n @if (_hintOptions && _hintOptions.content && _hintOptions.position === 'before') {\n <ng-template [ngTemplateOutlet]=\"hintTemplate\"></ng-template>\n }\n <h5 class=\"fd-form-header__text\">\n {{ mainTitle }}\n </h5>\n @if (_hintOptions && _hintOptions.content && _hintOptions.position === 'after') {\n <ng-template [ngTemplateOutlet]=\"hintTemplate\"></ng-template>\n }\n <ng-template #hintTemplate>\n <span fd-link [undecorated]=\"true\">\n <fd-icon\n [fd-inline-help]=\"_hintOptions!.content\"\n [glyph]=\"_hintOptions!.glyph\"\n [placement]=\"_hintOptions!.placement ?? null\"\n [triggers]=\"_hintOptions!.trigger ?? []\"\n tabindex=\"0\"\n ></fd-icon>\n </span>\n </ng-template>\n</ng-template>\n", styles: [".fd-col,.fd-container,.fd-row{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0}.fd-col:after,.fd-col:before,.fd-container:after,.fd-container:before,.fd-row:after,.fd-row:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-container{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;padding-block:0;padding-inline:.25rem;position:relative}.fd-container .fd-row{margin-inline:-.25rem;min-width:calc(100% + .5rem)}.fd-container>.fd-row>.fd-col{padding-block:.25rem}.fd-container.fd-container--no-gap .fd-row,.fd-container.fd-container--no-horizontal-gap .fd-row{margin-inline:0}.fd-container.fd-container--no-gap .fd-row .fd-col,.fd-container.fd-container--no-horizontal-gap .fd-row .fd-col{padding-inline:0}.fd-container.fd-container--no-gap>.fd-row>.fd-col,.fd-container.fd-container--no-vertical-gap>.fd-row>.fd-col{padding-block:0}.fd-container[dir=rtl],[dir=rtl] .fd-container{direction:rtl}.fd-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;min-width:100%;position:relative}.fd-col{max-width:100%;min-width:100%;padding-inline:.25rem}.fd-col--0{max-width:0;min-width:0%}.fd-col--offset-0{-webkit-margin-start:0;margin-inline-start:0}.fd-col--offset-after-0{-webkit-margin-end:0;margin-inline-end:0}.fd-col--1{max-width:8.3333333333%;min-width:8.3333333333%}.fd-col--offset-1{-webkit-margin-start:8.3333333333%;margin-inline-start:8.3333333333%}.fd-col--offset-after-1{-webkit-margin-end:8.3333333333%;margin-inline-end:8.3333333333%}.fd-col--2{max-width:16.6666666667%;min-width:16.6666666667%}.fd-col--offset-2{-webkit-margin-start:16.6666666667%;margin-inline-start:16.6666666667%}.fd-col--offset-after-2{-webkit-margin-end:16.6666666667%;margin-inline-end:16.6666666667%}.fd-col--3{max-width:25%;min-width:25%}.fd-col--offset-3{-webkit-margin-start:25%;margin-inline-start:25%}.fd-col--offset-after-3{-webkit-margin-end:25%;margin-inline-end:25%}.fd-col--4{max-width:33.3333333333%;min-width:33.3333333333%}.fd-col--offset-4{-webkit-margin-start:33.3333333333%;margin-inline-start:33.3333333333%}.fd-col--offset-after-4{-webkit-margin-end:33.3333333333%;margin-inline-end:33.3333333333%}.fd-col--5{max-width:41.6666666667%;min-width:41.6666666667%}.fd-col--offset-5{-webkit-margin-start:41.6666666667%;margin-inline-start:41.6666666667%}.fd-col--offset-after-5{-webkit-margin-end:41.6666666667%;margin-inline-end:41.6666666667%}.fd-col--6{max-width:50%;min-width:50%}.fd-col--offset-6{-webkit-margin-start:50%;margin-inline-start:50%}.fd-col--offset-after-6{-webkit-margin-end:50%;margin-inline-end:50%}.fd-col--7{max-width:58.3333333333%;min-width:58.3333333333%}.fd-col--offset-7{-webkit-margin-start:58.3333333333%;margin-inline-start:58.3333333333%}.fd-col--offset-after-7{-webkit-margin-end:58.3333333333%;margin-inline-end:58.3333333333%}.fd-col--8{max-width:66.6666666667%;min-width:66.6666666667%}.fd-col--offset-8{-webkit-margin-start:66.6666666667%;margin-inline-start:66.6666666667%}.fd-col--offset-after-8{-webkit-margin-end:66.6666666667%;margin-inline-end:66.6666666667%}.fd-col--9{max-width:75%;min-width:75%}.fd-col--offset-9{-webkit-margin-start:75%;margin-inline-start:75%}.fd-col--offset-after-9{-webkit-margin-end:75%;margin-inline-end:75%}.fd-col--10{max-width:83.3333333333%;min-width:83.3333333333%}.fd-col--offset-10{-webkit-margin-start:83.3333333333%;margin-inline-start:83.3333333333%}.fd-col--offset-after-10{-webkit-margin-end:83.3333333333%;margin-inline-end:83.3333333333%}.fd-col--11{max-width:91.6666666667%;min-width:91.6666666667%}.fd-col--offset-11{-webkit-margin-start:91.6666666667%;margin-inline-start:91.6666666667%}.fd-col--offset-after-11{-webkit-margin-end:91.6666666667%;margin-inline-end:91.6666666667%}.fd-col--12{max-width:100%;min-width:100%}.fd-col--offset-12{-webkit-margin-start:100%;margin-inline-start:100%}.fd-col--offset-after-12{-webkit-margin-end:100%;margin-inline-end:100%}.fd-col--full{max-width:none;min-width:8.3333333333%;-webkit-box-flex:1;-ms-flex:1;flex:1}.fd-col--wrap{-ms-flex-wrap:wrap;flex-wrap:wrap}@media(width>=600px){.fd-container{padding-block:0;padding-inline:.5rem}.fd-container .fd-row{margin-inline:-.5rem;min-width:calc(100% + 1rem)}.fd-container>.fd-row>.fd-col{padding-block:.5rem}.fd-col{padding-inline:.5rem}.fd-col-md--0{max-width:0;min-width:0%}.fd-col-md--offset-0{-webkit-margin-start:0;margin-inline-start:0}.fd-col-md--offset-after-0{-webkit-margin-end:0;margin-inline-end:0}.fd-col-md--1{max-width:8.3333333333%;min-width:8.3333333333%}.fd-col-md--offset-1{-webkit-margin-start:8.3333333333%;margin-inline-start:8.3333333333%}.fd-col-md--offset-after-1{-webkit-margin-end:8.3333333333%;margin-inline-end:8.3333333333%}.fd-col-md--2{max-width:16.6666666667%;min-width:16.6666666667%}.fd-col-md--offset-2{-webkit-margin-start:16.6666666667%;margin-inline-start:16.6666666667%}.fd-col-md--offset-after-2{-webkit-margin-end:16.6666666667%;margin-inline-end:16.6666666667%}.fd-col-md--3{max-width:25%;min-width:25%}.fd-col-md--offset-3{-webkit-margin-start:25%;margin-inline-start:25%}.fd-col-md--offset-after-3{-webkit-margin-end:25%;margin-inline-end:25%}.fd-col-md--4{max-width:33.3333333333%;min-width:33.3333333333%}.fd-col-md--offset-4{-webkit-margin-start:33.3333333333%;margin-inline-start:33.3333333333%}.fd-col-md--offset-after-4{-webkit-margin-end:33.3333333333%;margin-inline-end:33.3333333333%}.fd-col-md--5{max-width:41.6666666667%;min-width:41.6666666667%}.fd-col-md--offset-5{-webkit-margin-start:41.6666666667%;margin-inline-start:41.6666666667%}.fd-col-md--offset-after-5{-webkit-margin-end:41.6666666667%;margin-inline-end:41.6666666667%}.fd-col-md--6{max-width:50%;min-width:50%}.fd-col-md--offset-6{-webkit-margin-start:50%;margin-inline-start:50%}.fd-col-md--offset-after-6{-webkit-margin-end:50%;margin-inline-end:50%}.fd-col-md--7{max-width:58.3333333333%;min-width:58.3333333333%}.fd-col-md--offset-7{-webkit-margin-start:58.3333333333%;margin-inline-start:58.3333333333%}.fd-col-md--offset-after-7{-webkit-margin-end:58.3333333333%;margin-inline-end:58.3333333333%}.fd-col-md--8{max-width:66.6666666667%;min-width:66.6666666667%}.fd-col-md--offset-8{-webkit-margin-start:66.6666666667%;margin-inline-start:66.6666666667%}.fd-col-md--offset-after-8{-webkit-margin-end:66.6666666667%;margin-inline-end:66.6666666667%}.fd-col-md--9{max-width:75%;min-width:75%}.fd-col-md--offset-9{-webkit-margin-start:75%;margin-inline-start:75%}.fd-col-md--offset-after-9{-webkit-margin-end:75%;margin-inline-end:75%}.fd-col-md--10{max-width:83.3333333333%;min-width:83.3333333333%}.fd-col-md--offset-10{-webkit-margin-start:83.3333333333%;margin-inline-start:83.3333333333%}.fd-col-md--offset-after-10{-webkit-margin-end:83.3333333333%;margin-inline-end:83.3333333333%}.fd-col-md--11{max-width:91.6666666667%;min-width:91.6666666667%}.fd-col-md--offset-11{-webkit-margin-start:91.6666666667%;margin-inline-start:91.6666666667%}.fd-col-md--offset-after-11{-webkit-margin-end:91.6666666667%;margin-inline-end:91.6666666667%}.fd-col-md--12{max-width:100%;min-width:100%}.fd-col-md--offset-12{-webkit-margin-start:100%;margin-inline-start:100%}.fd-col-md--offset-after-12{-webkit-margin-end:100%;margin-inline-end:100%}}@media(width>=1024px){.fd-col-lg--0{max-width:0;min-width:0%}.fd-col-lg--offset-0{-webkit-margin-start:0;margin-inline-start:0}.fd-col-lg--offset-after-0{-webkit-margin-end:0;margin-inline-end:0}.fd-col-lg--1{max-width:8.3333333333%;min-width:8.3333333333%}.fd-col-lg--offset-1{-webkit-margin-start:8.3333333333%;margin-inline-start:8.3333333333%}.fd-col-lg--offset-after-1{-webkit-margin-end:8.3333333333%;margin-inline-end:8.3333333333%}.fd-col-lg--2{max-width:16.6666666667%;min-width:16.6666666667%}.fd-col-lg--offset-2{-webkit-margin-start:16.6666666667%;margin-inline-start:16.6666666667%}.fd-col-lg--offset-after-2{-webkit-margin-end:16.6666666667%;margin-inline-end:16.6666666667%}.fd-col-lg--3{max-width:25%;min-width:25%}.fd-col-lg--offset-3{-webkit-margin-start:25%;margin-inline-start:25%}.fd-col-lg--offset-after-3{-webkit-margin-end:25%;margin-inline-end:25%}.fd-col-lg--4{max-width:33.3333333333%;min-width:33.3333333333%}.fd-col-lg--offset-4{-webkit-margin-start:33.3333333333%;margin-inline-start:33.3333333333%}.fd-col-lg--offset-after-4{-webkit-margin-end:33.3333333333%;margin-inline-end:33.3333333333%}.fd-col-lg--5{max-width:41.6666666667%;min-width:41.6666666667%}.fd-col-lg--offset-5{-webkit-margin-start:41.6666666667%;margin-inline-start:41.6666666667%}.fd-col-lg--offset-after-5{-webkit-margin-end:41.6666666667%;margin-inline-end:41.6666666667%}.fd-col-lg--6{max-width:50%;min-width:50%}.fd-col-lg--offset-6{-webkit-margin-start:50%;margin-inline-start:50%}.fd-col-lg--offset-after-6{-webkit-margin-end:50%;margin-inline-end:50%}.fd-col-lg--7{max-width:58.3333333333%;min-width:58.3333333333%}.fd-col-lg--offset-7{-webkit-margin-start:58.3333333333%;margin-inline-start:58.3333333333%}.fd-col-lg--offset-after-7{-webkit-margin-end:58.3333333333%;margin-inline-end:58.3333333333%}.fd-col-lg--8{max-width:66.6666666667%;min-width:66.6666666667%}.fd-col-lg--offset-8{-webkit-margin-start:66.6666666667%;margin-inline-start:66.6666666667%}.fd-col-lg--offset-after-8{-webkit-margin-end:66.6666666667%;margin-inline-end:66.6666666667%}.fd-col-lg--9{max-width:75%;min-width:75%}.fd-col-lg--offset-9{-webkit-margin-start:75%;margin-inline-start:75%}.fd-col-lg--offset-after-9{-webkit-margin-end:75%;margin-inline-end:75%}.fd-col-lg--10{max-width:83.3333333333%;min-width:83.3333333333%}.fd-col-lg--offset-10{-webkit-margin-start:83.3333333333%;margin-inline-start:83.3333333333%}.fd-col-lg--offset-after-10{-webkit-margin-end:83.3333333333%;margin-inline-end:83.3333333333%}.fd-col-lg--11{max-width:91.6666666667%;min-width:91.6666666667%}.fd-col-lg--offset-11{-webkit-margin-start:91.6666666667%;margin-inline-start:91.6666666667%}.fd-col-lg--offset-after-11{-webkit-margin-end:91.6666666667%;margin-inline-end:91.6666666667%}.fd-col-lg--12{max-width:100%;min-width:100%}.fd-col-lg--offset-12{-webkit-margin-start:100%;margin-inline-start:100%}.fd-col-lg--offset-after-12{-webkit-margin-end:100%;margin-inline-end:100%}}@media(width>=1440px){.fd-col-xl--0{max-width:0;min-width:0%}.fd-col-xl--offset-0{-webkit-margin-start:0;margin-inline-start:0}.fd-col-xl--offset-after-0{-webkit-margin-end:0;margin-inline-end:0}.fd-col-xl--1{max-width:8.3333333333%;min-width:8.3333333333%}.fd-col-xl--offset-1{-webkit-margin-start:8.3333333333%;margin-inline-start:8.3333333333%}.fd-col-xl--offset-after-1{-webkit-margin-end:8.3333333333%;margin-inline-end:8.3333333333%}.fd-col-xl--2{max-width:16.6666666667%;min-width:16.6666666667%}.fd-col-xl--offset-2{-webkit-margin-start:16.6666666667%;margin-inline-start:16.6666666667%}.fd-col-xl--offset-after-2{-webkit-margin-end:16.6666666667%;margin-inline-end:16.6666666667%}.fd-col-xl--3{max-width:25%;min-width:25%}.fd-col-xl--offset-3{-webkit-margin-start:25%;margin-inline-start:25%}.fd-col-xl--offset-after-3{-webkit-margin-end:25%;margin-inline-end:25%}.fd-col-xl--4{max-width:33.3333333333%;min-width:33.3333333333%}.fd-col-xl--offset-4{-webkit-margin-start:33.3333333333%;margin-inline-start:33.3333333333%}.fd-col-xl--offset-after-4{-webkit-margin-end:33.3333333333%;margin-inline-end:33.3333333333%}.fd-col-xl--5{max-width:41.6666666667%;min-width:41.6666666667%}.fd-col-xl--offset-5{-webkit-margin-start:41.6666666667%;margin-inline-start:41.6666666667%}.fd-col-xl--offset-after-5{-webkit-margin-end:41.6666666667%;margin-inline-end:41.6666666667%}.fd-col-xl--6{max-width:50%;min-width:50%}.fd-col-xl--offset-6{-webkit-margin-start:50%;margin-inline-start:50%}.fd-col-xl--offset-after-6{-webkit-margin-end:50%;margin-inline-end:50%}.fd-col-xl--7{max-width:58.3333333333%;min-width:58.3333333333%}.fd-col-xl--offset-7{-webkit-margin-start:58.3333333333%;margin-inline-start:58.3333333333%}.fd-col-xl--offset-after-7{-webkit-margin-end:58.3333333333%;margin-inline-end:58.3333333333%}.fd-col-xl--8{max-width:66.6666666667%;min-width:66.6666666667%}.fd-col-xl--offset-8{-webkit-margin-start:66.6666666667%;margin-inline-start:66.6666666667%}.fd-col-xl--offset-after-8{-webkit-margin-end:66.6666666667%;margin-inline-end:66.6666666667%}.fd-col-xl--9{max-width:75%;min-width:75%}.fd-col-xl--offset-9{-webkit-margin-start:75%;margin-inline-start:75%}.fd-col-xl--offset-after-9{-webkit-margin-end:75%;margin-inline-end:75%}.fd-col-xl--10{max-width:83.3333333333%;min-width:83.3333333333%}.fd-col-xl--offset-10{-webkit-margin-start:83.3333333333%;margin-inline-start:83.3333333333%}.fd-col-xl--offset-after-10{-webkit-margin-end:83.3333333333%;margin-inline-end:83.3333333333%}.fd-col-xl--11{max-width:91.6666666667%;min-width:91.6666666667%}.fd-col-xl--offset-11{-webkit-margin-start:91.6666666667%;margin-inline-start:91.6666666667%}.fd-col-xl--offset-after-11{-webkit-margin-end:91.6666666667%;margin-inline-end:91.6666666667%}.fd-col-xl--12{max-width:100%;min-width:100%}.fd-col-xl--offset-12{-webkit-margin-start:100%;margin-inline-start:100%}.fd-col-xl--offset-after-12{-webkit-margin-end:100%;margin-inline-end:100%}}.fd-container.fd-form-layout-grid-container .fd-form-group,.fd-container.fd-form-layout-grid-container.fd-form-group{padding-block:1rem!important;padding-inline:1rem!important}.fd-container.fd-form-layout-grid-container .fd-form-group .fd-form-group,.fd-container.fd-form-layout-grid-container.fd-form-group .fd-form-group{padding-block:0!important;padding-inline:0!important}.fd-container.fd-form-layout-grid-container .fd-form-group .fd-form-item .fd-form-label,.fd-container.fd-form-layout-grid-container.fd-form-group .fd-form-item .fd-form-label{-webkit-margin-end:0;margin-inline-end:0;white-space:normal}.fd-container.fd-form-layout-grid-container .fd-form-group .fd-form-item .fd-form-label--colon,.fd-container.fd-form-layout-grid-container.fd-form-group .fd-form-item .fd-form-label--colon{-webkit-padding-end:.25rem;padding-inline-end:.25rem}.fd-container.fd-form-layout-grid-container .fd-form-group .fd-form-item .fd-form-label--required,.fd-container.fd-form-layout-grid-container.fd-form-group .fd-form-item .fd-form-label--required{-webkit-padding-end:.5rem;padding-inline-end:.5rem}.fd-container.fd-form-layout-grid-container .fd-form-group .fd-form-item .fd-form-label--required.fd-form-label--colon,.fd-container.fd-form-layout-grid-container.fd-form-group .fd-form-item .fd-form-label--required.fd-form-label--colon{-webkit-padding-end:.75rem;padding-inline-end:.75rem}.fd-container.fd-form-layout-grid-container .fd-row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.fd-container.fd-form-layout-grid-container .fd-row .fd-col{overflow:hidden;padding-block:0;text-overflow:ellipsis;white-space:nowrap}.fd-container.fd-form-layout-grid-container .fd-row .fd-col:not(.fd-form-group){-ms-flex-item-align:center;align-self:center}@media(width>=0){.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--vertical .fd-form-group .fd-form-item,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--vertical.fd-form-group .fd-form-item{margin-top:.625rem}.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--vertical .fd-form-group .fd-form-item:first-of-type,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--vertical.fd-form-group .fd-form-item:first-of-type{margin-top:0}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--1>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--1>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--1>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--2>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--2>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--2>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--3>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--3>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--3>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--4>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--4>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--4>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--5>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--5>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--5>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--6>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--6>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--6>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--7>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--7>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--7>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--8>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--8>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--8>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--9>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--9>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--9>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--10>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--10>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--10>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--11>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--11>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--11>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--12>.fd-form-label,.fd-container.fd-form-layout-grid-container .fd-row .fd-col>.fd-form-label{float:left;text-align:start;width:auto;-webkit-padding-after:.125rem;padding-block-end:.125rem}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--12>.fd-form-label[dir=rtl],.fd-container.fd-form-layout-grid-container .fd-row .fd-col>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--12>.fd-form-label,[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col>.fd-form-label{float:right}}@media(width>=0)and (width<=599px){.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container .fd-form-group .fd-form-item,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container.fd-form-group .fd-form-item{margin-top:.625rem}.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container .fd-form-group .fd-form-item:first-of-type,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container.fd-form-group .fd-form-item:first-of-type{margin-top:0}}@media(width>=600px){.fd-container.fd-form-layout-grid-container{padding-block:0;padding-inline:.25rem}.fd-container.fd-form-layout-grid-container .fd-row{margin-block:0;margin-inline:-.25rem;min-width:calc(100% + .5rem)}.fd-container.fd-form-layout-grid-container .fd-row .fd-col{padding-block:0;padding-inline:.25rem}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--1>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--1>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--1>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--2>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--2>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--2>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--3>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--3>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--3>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--4>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--4>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--4>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--5>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--5>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--5>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--6>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--6>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--6>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--7>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--7>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--7>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--8>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--8>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--8>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--9>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--9>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--9>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--10>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--10>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--10>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--11>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--11>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--11>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--12>.fd-form-label,.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md>.fd-form-label{float:left;text-align:start;width:auto;-webkit-padding-after:.125rem;padding-block-end:.125rem}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--12>.fd-form-label[dir=rtl],.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--12>.fd-form-label,[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md>.fd-form-label{float:right}}@media(width>=600px)and (width<=1023px){.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--md-vertical .fd-form-group .fd-form-item,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--md-vertical.fd-form-group .fd-form-item{margin-top:.625rem}.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--md-vertical .fd-form-group .fd-form-item:first-of-type,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--md-vertical.fd-form-group .fd-form-item:first-of-type{margin-top:0}}@media(width>=1024px){.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--1>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--1>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--1>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--2>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--2>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--2>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--3>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--3>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--3>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--4>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--4>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--4>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--5>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--5>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--5>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--6>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--6>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--6>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--7>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--7>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--7>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--8>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--8>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--8>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--9>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--9>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--9>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--10>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--10>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--10>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--11>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--11>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--11>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--12>.fd-form-label,.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg>.fd-form-label{float:left;text-align:start;width:auto;-webkit-padding-after:.125rem;padding-block-end:.125rem}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--12>.fd-form-label[dir=rtl],.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--12>.fd-form-label,[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg>.fd-form-label{float:right}}@media(width>=1024px)and (width<=1443px){.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--lg-vertical .fd-form-group .fd-form-item,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--lg-vertical.fd-form-group .fd-form-item{margin-top:.625rem}.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--lg-vertical .fd-form-group .fd-form-item:first-of-type,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--lg-vertical.fd-form-group .fd-form-item:first-of-type{margin-top:0}}@media(width>=1440px){.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--xl-vertical .fd-form-group .fd-form-item,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--xl-vertical.fd-form-group .fd-form-item{margin-top:.625rem}.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--xl-vertical .fd-form-group .fd-form-item:first-of-type,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--xl-vertical.fd-form-group .fd-form-item:first-of-type{margin-top:0}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--1>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--1>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--1>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--2>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--2>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--2>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--3>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--3>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--3>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--4>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--4>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--4>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--5>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--5>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--5>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--6>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--6>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--6>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--7>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--7>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--7>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--8>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--8>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--8>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--9>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--9>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--9>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--10>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--10>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--10>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--11>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--11>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--11>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--12>.fd-form-label,.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl>.fd-form-label{float:left;text-align:start;width:auto;-webkit-padding-after:.125rem;padding-block-end:.125rem}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--12>.fd-form-label[dir=rtl],.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--12>.fd-form-label,[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl>.fd-form-label{float:right}}.fd-section{background-color:var(--sapToolbar_Background);border:0;border-bottom:none;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-block:1rem 1.5rem;padding-inline:0;padding-inline:.5rem}.fd-section:after,.fd-section:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-section:after{clear:both;content:\"\";display:table}@media(min-width:600px){.fd-section{padding-inline:2rem}}@media(min-width:1440px){.fd-section{padding-inline:3rem}}.fd-section--no-border,.fd-section:last-child{border-bottom:0}.fd-section--bleed,.fd-section--full-bleed{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0}.fd-section--bleed:after,.fd-section--bleed:before,.fd-section--full-bleed:after,.fd-section--full-bleed:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-section--bleed .fd-section__footer,.fd-section--bleed .fd-section__header,.fd-section--full-bleed .fd-section__footer,.fd-section--full-bleed .fd-section__header{padding-inline:.5rem}@media(min-width:600px){.fd-section--bleed .fd-section__footer,.fd-section--bleed .fd-section__header,.fd-section--full-bleed .fd-section__footer,.fd-section--full-bleed .fd-section__header{padding-inline:2rem}}@media(min-width:1440px){.fd-section--bleed .fd-section__footer,.fd-section--bleed .fd-section__header,.fd-section--full-bleed .fd-section__footer,.fd-section--full-bleed .fd-section__header{padding-inline:3rem}}.fd-section__header{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;min-height:1.5rem;padding-block:0;padding-inline:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-margin-after:1.5rem;margin-block-end:1.5rem}.fd-section__header:after,.fd-section__header:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-section__title{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapTitleColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-size:var(--sapFontHeader2Size);font-weight:400;forced-color-adjust:none;line-height:normal;line-height:2rem;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-margin-after:0;margin-block-end:0}.fd-section__title:after,.fd-section__title:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-section__actions{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-margin-start:auto;margin-inline-start:auto}.fd-section__actions:after,.fd-section__actions:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-section__footer{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.fd-section__footer:after,.fd-section__footer:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-form-group{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.fd-form-group:after,.fd-form-group:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-form-group--inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.fd-form-group--with-spacing{gap:.625rem}.fd-form-group__header{border:0;-webkit-box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:var(--sapGroup_TitleBackground);border-bottom:var(--sapGroup_TitleBorderWidth) solid var(--sapGroup_TitleBorderColor);box-sizing:border-box;min-height:var(--sapElement_LineHeight);padding-inline:var(--fdFormGroupPaddingInline,1rem);width:100%}.fd-form-group__header:after,.fd-form-group__header:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-form-group__header--no-padding{--fdFormGroupPaddingInline:0}.fd-form-group__header--no-border{border-bottom:none}.fd-form-group__header-text{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapGroup_TitleTextColor);font-family:var(--sapFontFamily);font-family:var(--sapFontHeaderFamily);font-size:var(--sapFontSize);font-size:var(--sapGroup_Title_FontSize);font-weight:400;font-weight:700;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;overflow:hidden;padding-block:0;padding-inline:0;text-overflow:ellipsis;white-space:nowrap}.fd-form-group__header-text:after,.fd-form-group__header-text:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-form-group__header-text--wrap{overflow:visible;text-overflow:clip;white-space:normal}.fd-form-header{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:var(--sapGroup_TitleBackground);-webkit-box-shadow:0 var(--fdFormHeader_Border_Width) 0 var(--sapGroup_TitleBorderColor);box-shadow:0 var(--fdFormHeader_Border_Width) 0 var(--sapGroup_TitleBorderColor);height:var(--sapElement_LineHeight);padding-inline:1rem;width:100%}.fd-form-header:after,.fd-form-header:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-form-header__text{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapGroup_TitleTextColor);font-family:var(--sapFontFamily);font-family:var(--sapFontHeaderFamily);font-size:var(--sapFontSize);font-size:var(--sapGroup_Title_FontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;overflow:hidden;padding-block:0;padding-inline:0;text-overflow:ellipsis;white-space:nowrap}.fd-form-header__text:after,.fd-form-header__text:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}fdp-form-group{display:block}fdp-form-group .fd-form-group{display:block}fdp-form-group .fd-form-group.fd-form-group--inline{display:flex;flex-wrap:wrap;justify-content:flex-start}fdp-form-group .fd-form-group__header{padding-inline:1rem}fdp-form-group .fd-row:empty{display:none}fdp-form-group .fd-form-group__header{margin-block-start:1rem}.fd-form-label{overflow:hidden}\n/*! Bundled license information:\n\nfundamental-styles/dist/form-header.css:\n (*!\n * Fundamental Library Styles v0.41.8\n * Copyright (c) 2026 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n *)\n*/\n"] }]
5672
- }], ctorParameters: () => [], propDecorators: { id: [{
5673
- type: Input
5674
- }], name: [{
5675
- type: Input
5676
- }], editable: [{
5677
- type: Input
5678
- }], noLabelLayout: [{
5679
- type: Input
5680
- }], class: [{
5681
- type: Input
5682
- }], hint: [{
5683
- type: Input
5684
- }], inlineColumnLayout: [{
5685
- type: Input
5686
- }], labelColumnLayout: [{
5687
- type: Input
5688
- }], fieldColumnLayout: [{
5689
- type: Input
5690
- }], gapColumnLayout: [{
5691
- type: Input
5692
- }], formGroup: [{
5693
- type: Input
5694
- }], topTitle: [{
5695
- type: Input
5696
- }], mainTitle: [{
5697
- type: Input
5698
- }], hideMainTItle: [{
5699
- type: Input
5700
- }], object: [{
5701
- type: Input
5702
- }], i18Strings: [{
5703
- type: Input
5704
- }], useForm: [{
5705
- type: Input,
5706
- args: [{ transform: booleanAttribute }]
5707
- }], columnLayout: [{
5708
- type: Input
5709
- }], unifiedLayout: [{
5710
- type: Input
5711
- }], onSubmit: [{
5712
- type: Output
5713
- }], nativeForm: [{
5404
+ CdkScrollable,
5405
+ ScrollbarDirective
5406
+ ], template: "<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n @if (mobileConfig.title) {\n <h1 fd-title>{{ mobileConfig.title }}</h1>\n }\n @if (mobileConfig.hasCloseButton) {\n <button fd-dialog-close-button [mobile]=\"true\" (click)=\"handleDismiss()\"></button>\n }\n <ng-template fdkTemplate=\"subheader\">\n <div fd-bar-middle>\n <fd-bar-element [fullWidth]=\"true\">\n <ng-template [ngTemplateOutlet]=\"childContent?.controlTemplate || null\"></ng-template>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body>\n <ng-template [ngTemplateOutlet]=\"childContent?.listTemplate || null\"></ng-template>\n </fd-dialog-body>\n <fd-dialog-footer>\n @if (mobileConfig.approveButtonText) {\n <fd-button-bar fdType=\"emphasized\" [label]=\"mobileConfig.approveButtonText!\" (click)=\"handleApprove()\">\n </fd-button-bar>\n }\n @if (mobileConfig.cancelButtonText) {\n <fd-button-bar [label]=\"mobileConfig.cancelButtonText!\" (click)=\"handleDismiss()\"> </fd-button-bar>\n }\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n" }]
5407
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
5408
+ type: Inject,
5409
+ args: [COMBOBOX_COMPONENT]
5410
+ }] }], propDecorators: { dialogTemplate: [{
5714
5411
  type: ViewChild,
5715
- args: ['nativeForm', { read: NgForm }]
5716
- }], i18Template: [{
5717
- type: ContentChild,
5718
- args: ['i18n', { static: true }]
5719
- }], formGroupChildren: [{
5720
- type: ContentChildren,
5721
- args: [FORM_GROUP_CHILD_FIELD_TOKEN, { descendants: true }]
5722
- }], _errorDirectives: [{
5723
- type: ContentChildren,
5724
- args: [FormFieldErrorDirective]
5412
+ args: ['dialogTemplate']
5725
5413
  }] } });
5726
5414
 
5727
- const EXPORTABLE_DECLARATIONS = [
5728
- FormGroupComponent,
5729
- FormFieldComponent,
5730
- InputMessageGroupWithTemplate,
5731
- FormFieldGroupComponent,
5732
- FormFieldControlExtrasComponent,
5733
- FormGroupHeaderComponent,
5734
- FieldGroupRowValuePipe,
5735
- FormFieldErrorDirective,
5736
- FormFieldErrorHeadingDirective,
5737
- FormFieldErrorDescriptionDirective
5738
- ];
5739
5415
  /**
5740
5416
  * @deprecated
5741
5417
  * Use direct imports of components and directives.
5742
5418
  */
5743
- class FdpFormGroupModule {
5744
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FdpFormGroupModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
5745
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.5", ngImport: i0, type: FdpFormGroupModule, imports: [FormGroupComponent,
5746
- FormFieldComponent,
5747
- InputMessageGroupWithTemplate,
5748
- FormFieldGroupComponent,
5749
- FormFieldControlExtrasComponent,
5750
- FormGroupHeaderComponent,
5751
- FieldGroupRowValuePipe,
5752
- FormFieldErrorDirective,
5753
- FormFieldErrorHeadingDirective,
5754
- FormFieldErrorDescriptionDirective], exports: [FormGroupComponent,
5755
- FormFieldComponent,
5756
- InputMessageGroupWithTemplate,
5757
- FormFieldGroupComponent,
5758
- FormFieldControlExtrasComponent,
5759
- FormGroupHeaderComponent,
5760
- FieldGroupRowValuePipe,
5761
- FormFieldErrorDirective,
5762
- FormFieldErrorHeadingDirective,
5763
- FormFieldErrorDescriptionDirective] }); }
5764
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FdpFormGroupModule, imports: [FormGroupComponent,
5765
- FormFieldComponent,
5766
- InputMessageGroupWithTemplate,
5767
- FormGroupHeaderComponent] }); }
5419
+ class PlatformComboboxMobileModule {
5420
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformComboboxMobileModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
5421
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.5", ngImport: i0, type: PlatformComboboxMobileModule, imports: [ComboboxMobileComponent], exports: [ComboboxMobileComponent] }); }
5422
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformComboboxMobileModule, imports: [ComboboxMobileComponent] }); }
5768
5423
  }
5769
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FdpFormGroupModule, decorators: [{
5424
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformComboboxMobileModule, decorators: [{
5770
5425
  type: NgModule,
5771
5426
  args: [{
5772
- imports: [...EXPORTABLE_DECLARATIONS],
5773
- exports: [...EXPORTABLE_DECLARATIONS]
5427
+ imports: [ComboboxMobileComponent],
5428
+ exports: [ComboboxMobileComponent]
5774
5429
  }]
5775
5430
  }] });
5776
5431
 
5777
- const formFieldProvider = {
5778
- provide: FD_FORM_FIELD,
5779
- useExisting: forwardRef(() => FormGeneratorFieldComponent)
5780
- };
5781
- const formGroupChildProvider = {
5782
- provide: FORM_GROUP_CHILD_FIELD_TOKEN,
5783
- useExisting: forwardRef(() => FormGeneratorFieldComponent)
5784
- };
5785
- class FormGeneratorFieldComponent {
5786
- /** @hidden */
5787
- get _placeholder() {
5788
- if (!this.field) {
5789
- return '';
5790
- }
5791
- if (this.field.formItem?.placeholder) {
5792
- return this.field.formItem?.placeholder;
5793
- }
5794
- if (this.field.formItem?.useMessageAsPlaceholder) {
5795
- return this.field.formItem?.message;
5796
- }
5797
- return '';
5798
- }
5799
- /** @hidden */
5800
- constructor(_fgService) {
5801
- this._fgService = _fgService;
5802
- /** @hidden */
5803
- this._errorModels = [];
5804
- }
5805
- /** @hidden */
5806
- ngOnInit() {
5807
- this._errorModels = this._getErrors();
5808
- }
5809
- /** @hidden */
5810
- _errorsTrackBy(_, error) {
5811
- return error.type;
5812
- }
5813
- /** @hidden */
5814
- _isAdvancedError(error) {
5815
- return error.heading && error.description && error.type;
5816
- }
5817
- /** @hidden */
5818
- _getErrors() {
5819
- const registeredErrors = this._fgService.validationErrorHints;
5820
- const returnErrors = [
5821
- {
5822
- type: `${this.field.formItem.name}Validator`,
5823
- value: null
5824
- }
5825
- ];
5826
- Object.entries(registeredErrors).forEach((type) => {
5827
- const [errorType, errorValue] = type;
5828
- returnErrors.push({
5829
- type: errorType,
5830
- value: errorValue
5831
- });
5832
- });
5833
- return returnErrors;
5834
- }
5835
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FormGeneratorFieldComponent, deps: [{ token: FormGeneratorService }], target: i0.ɵɵFactoryTarget.Component }); }
5836
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: FormGeneratorFieldComponent, isStandalone: true, selector: "fdp-form-generator-field", inputs: { field: "field", form: "form", i18n: "i18n", formFieldName: "formFieldName", formGroupNamePath: "formGroupNamePath", rank: "rank", shouldShow: "shouldShow", hintOptions: "hintOptions" }, providers: [formFieldProvider, formGroupChildProvider], viewQueries: [{ propertyName: "fieldRenderer", first: true, predicate: i0.forwardRef(() => FormFieldComponent), descendants: true }], ngImport: i0, template: "<fdp-form-field\n [hint]=\"hintOptions\"\n [placeholder]=\"_placeholder\"\n [id]=\"field.formItem.id || formFieldName\"\n [column]=\"field.formItem.guiOptions?.column || 1\"\n [columnLayout]=\"$safeNavigationMigration(field.formItem.guiOptions?.columnLayout)\"\n [colon]=\"field.formItem.guiOptions?.appendColon === true\"\n [label]=\"field.formItem.message\"\n [validators]=\"field.formItem.validators || []\"\n [required]=\"field.formItem.required\"\n [rank]=\"rank\"\n [labelColumnLayout]=\"$safeNavigationMigration(field.formItem.guiOptions?.labelColumnLayout)\"\n [fieldColumnLayout]=\"$safeNavigationMigration(field.formItem.guiOptions?.fieldColumnLayout)\"\n [gapColumnLayout]=\"$safeNavigationMigration(field.formItem.guiOptions?.gapColumnLayout)\"\n [noLabelLayout]=\"field.formItem.guiOptions?.noLabelLayout || false\"\n [formGroup]=\"form\"\n #formField\n>\n @for (error of _errorModels; track _errorsTrackBy($index, error)) {\n <span *fdpFormFieldError=\"error.type; let directiveError\">\n @if (_isAdvancedError(directiveError)) {\n @if (directiveError.heading) {\n <span *fdpFormFieldErrorHeading=\"let validationError; type: directiveError.type\">\n {{ validationError.heading }}\n </span>\n }\n @if (directiveError.description) {\n <span *fdpFormFieldErrorDescription=\"let validationError\">\n {{ validationError.description }}\n </span>\n }\n } @else {\n <span *fdpFormFieldErrorHeading=\"let validationError\">\n {{ error.value ? error.value : validationError }}\n </span>\n }\n </span>\n }\n <ng-container\n [formField]=\"formField\"\n [form]=\"form\"\n [formGroupNamePath]=\"formGroupNamePath\"\n fdpDynamicFormControl\n [id]=\"field.formItem.id || formFieldName\"\n [name]=\"formFieldName\"\n [formItem]=\"field.formItem\"\n >\n </ng-container>\n</fdp-form-field>\n", dependencies: [{ kind: "ngmodule", type: FdpFormGroupModule }, { kind: "component", type: FormFieldComponent, selector: "fdp-form-field", inputs: ["label", "id", "hint", "noLabelLayout", "validators", "rank", "placeholder", "column", "columnLayout", "labelColumnLayout", "fieldColumnLayout", "gapColumnLayout", "i18Strings", "required", "editable", "columns", "disabled", "colon", "formGroupContainer"], outputs: ["onChange", "onColumnChange"] }, { kind: "directive", type: FormFieldErrorDirective, selector: "[fdpFormFieldError]", inputs: ["fdpFormFieldErrorAs", "fdpFormFieldError", "fdpFormFieldErrorType"] }, { kind: "directive", type: FormFieldErrorHeadingDirective, selector: "[fdpFormFieldErrorHeading]", inputs: ["fdpFormFieldErrorHeadingAs", "fdpFormFieldErrorHeadingType"] }, { kind: "directive", type: FormFieldErrorDescriptionDirective, selector: "[fdpFormFieldErrorDescription]", inputs: ["fdpFormFieldErrorDescriptionAs"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: DynamicFormControlDirective, selector: "[fdpDynamicFormControl]", inputs: ["formItem", "id", "name", "form", "formGroupNamePath", "formField"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
5837
- }
5838
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FormGeneratorFieldComponent, decorators: [{
5839
- type: Component,
5840
- args: [{ selector: 'fdp-form-generator-field', providers: [formFieldProvider, formGroupChildProvider], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [FdpFormGroupModule, FormsModule, ReactiveFormsModule, DynamicFormControlDirective], template: "<fdp-form-field\n [hint]=\"hintOptions\"\n [placeholder]=\"_placeholder\"\n [id]=\"field.formItem.id || formFieldName\"\n [column]=\"field.formItem.guiOptions?.column || 1\"\n [columnLayout]=\"$safeNavigationMigration(field.formItem.guiOptions?.columnLayout)\"\n [colon]=\"field.formItem.guiOptions?.appendColon === true\"\n [label]=\"field.formItem.message\"\n [validators]=\"field.formItem.validators || []\"\n [required]=\"field.formItem.required\"\n [rank]=\"rank\"\n [labelColumnLayout]=\"$safeNavigationMigration(field.formItem.guiOptions?.labelColumnLayout)\"\n [fieldColumnLayout]=\"$safeNavigationMigration(field.formItem.guiOptions?.fieldColumnLayout)\"\n [gapColumnLayout]=\"$safeNavigationMigration(field.formItem.guiOptions?.gapColumnLayout)\"\n [noLabelLayout]=\"field.formItem.guiOptions?.noLabelLayout || false\"\n [formGroup]=\"form\"\n #formField\n>\n @for (error of _errorModels; track _errorsTrackBy($index, error)) {\n <span *fdpFormFieldError=\"error.type; let directiveError\">\n @if (_isAdvancedError(directiveError)) {\n @if (directiveError.heading) {\n <span *fdpFormFieldErrorHeading=\"let validationError; type: directiveError.type\">\n {{ validationError.heading }}\n </span>\n }\n @if (directiveError.description) {\n <span *fdpFormFieldErrorDescription=\"let validationError\">\n {{ validationError.description }}\n </span>\n }\n } @else {\n <span *fdpFormFieldErrorHeading=\"let validationError\">\n {{ error.value ? error.value : validationError }}\n </span>\n }\n </span>\n }\n <ng-container\n [formField]=\"formField\"\n [form]=\"form\"\n [formGroupNamePath]=\"formGroupNamePath\"\n fdpDynamicFormControl\n [id]=\"field.formItem.id || formFieldName\"\n [name]=\"formFieldName\"\n [formItem]=\"field.formItem\"\n >\n </ng-container>\n</fdp-form-field>\n" }]
5841
- }], ctorParameters: () => [{ type: FormGeneratorService }], propDecorators: { field: [{
5842
- type: Input
5843
- }], form: [{
5844
- type: Input
5845
- }], i18n: [{
5846
- type: Input
5847
- }], formFieldName: [{
5848
- type: Input
5849
- }], formGroupNamePath: [{
5850
- type: Input
5851
- }], rank: [{
5852
- type: Input
5853
- }], shouldShow: [{
5854
- type: Input
5855
- }], hintOptions: [{
5856
- type: Input
5857
- }], fieldRenderer: [{
5858
- type: ViewChild,
5859
- args: [forwardRef(() => FormFieldComponent)]
5860
- }] } });
5861
-
5862
- /** @hidden */
5863
- function isFieldChild(child) {
5864
- return child instanceof FormFieldComponent;
5865
- }
5866
- /** @hidden */
5867
- function isFieldGroupWrapperChild(child) {
5868
- return child instanceof FormGeneratorFieldComponent;
5869
- }
5870
- /** @hidden */
5871
- function isFieldGroupChild(child) {
5872
- return child instanceof FormFieldGroupComponent;
5873
- }
5874
- /** @hidden */
5875
- function getFormField(field) {
5876
- return isFieldGroupWrapperChild(field) ? field.fieldRenderer : field;
5877
- }
5878
- /** @hidden */
5879
- function getField(field) {
5880
- field = isFieldGroupWrapperChild(field) ? field.fieldRenderer : field;
5881
- return new Field(field.id, field.rank, field.renderer, field.column);
5882
- }
5883
-
5884
- /**
5885
- * @deprecated
5886
- * Use direct imports of components and directives.
5887
- */
5888
- class PlatformAutoCompleteModule {
5889
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformAutoCompleteModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
5890
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.5", ngImport: i0, type: PlatformAutoCompleteModule, imports: [AutoCompleteDirective], exports: [AutoCompleteDirective] }); }
5891
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformAutoCompleteModule }); }
5892
- }
5893
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformAutoCompleteModule, decorators: [{
5894
- type: NgModule,
5895
- args: [{
5896
- imports: [AutoCompleteDirective],
5897
- exports: [AutoCompleteDirective]
5898
- }]
5899
- }] });
5900
-
5901
- /**
5902
- * @deprecated
5903
- * Use direct imports of components and directives.
5904
- */
5905
- class PlatformCheckboxModule {
5906
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformCheckboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
5907
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.5", ngImport: i0, type: PlatformCheckboxModule, imports: [CheckboxComponent], exports: [CheckboxComponent] }); }
5908
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformCheckboxModule, imports: [CheckboxComponent] }); }
5909
- }
5910
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformCheckboxModule, decorators: [{
5911
- type: NgModule,
5912
- args: [{
5913
- imports: [CheckboxComponent],
5914
- exports: [CheckboxComponent]
5915
- }]
5916
- }] });
5917
-
5918
- const COMBOBOX_COMPONENT = new InjectionToken('ComboboxInterface');
5919
-
5920
- class ComboboxMobileComponent extends MobileModeBase {
5921
- /** @hidden */
5922
- constructor(comboboxComponent) {
5923
- super(comboboxComponent, MobileModeControl.COMBOBOX);
5924
- /** @hidden
5925
- * For internal usage
5926
- * Control element, which will be rendered inside dialog.
5927
- * List element, which will be rendered inside dialog.
5928
- */
5929
- this.childContent = null;
5930
- }
5931
- /** @hidden */
5932
- ngOnInit() {
5933
- this._listenOnMultiInputOpenChange();
5934
- }
5935
- /** @hidden */
5936
- handleDismiss() {
5937
- this.dialogRef.dismiss();
5938
- this._component.dialogDismiss(this._selectedBackup);
5939
- }
5940
- /** @hidden */
5941
- handleApprove() {
5942
- this.dialogRef.close();
5943
- this._component.dialogApprove();
5944
- }
5945
- /** @hidden */
5946
- _toggleDialog(open) {
5947
- if (!open) {
5948
- return;
5949
- }
5950
- this._selectedBackup = this._component.inputText;
5951
- if (!this._dialogService.hasOpenDialogs()) {
5952
- this._open();
5953
- }
5954
- }
5955
- /** @hidden */
5956
- _listenOnMultiInputOpenChange() {
5957
- this._component.openChange
5958
- .pipe(takeUntilDestroyed(this._destroyRef))
5959
- .subscribe((isOpen) => this._toggleDialog(isOpen));
5960
- }
5961
- /** @hidden */
5962
- _open() {
5963
- this.dialogRef = this._dialogService.open(this.dialogTemplate, {
5964
- mobile: true,
5965
- disablePaddings: true,
5966
- ...this.dialogConfig,
5967
- backdropClickCloseable: false,
5968
- container: this._elementRef.nativeElement
5969
- });
5970
- // Have to fire "detectChanges" to fix "ExpressionChangedAfterItHasBeenCheckedError"
5971
- this.dialogRef.afterLoaded.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {
5972
- this._component.detectChanges();
5973
- });
5974
- const refSub = this.dialogRef.afterClosed.subscribe({
5975
- error: (type) => {
5976
- if (type === 'escape') {
5977
- this._component.dialogDismiss(this._selectedBackup);
5978
- refSub.unsubscribe();
5979
- }
5980
- }
5981
- });
5982
- }
5983
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ComboboxMobileComponent, deps: [{ token: COMBOBOX_COMPONENT }], target: i0.ɵɵFactoryTarget.Component }); }
5984
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: ComboboxMobileComponent, isStandalone: true, selector: "fdp-combobox-mobile", viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n @if (mobileConfig.title) {\n <h1 fd-title>{{ mobileConfig.title }}</h1>\n }\n @if (mobileConfig.hasCloseButton) {\n <button fd-dialog-close-button [mobile]=\"true\" (click)=\"handleDismiss()\"></button>\n }\n <ng-template fdkTemplate=\"subheader\">\n <div fd-bar-middle>\n <fd-bar-element [fullWidth]=\"true\">\n <ng-template [ngTemplateOutlet]=\"childContent?.controlTemplate || null\"></ng-template>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body>\n <ng-template [ngTemplateOutlet]=\"childContent?.listTemplate || null\"></ng-template>\n </fd-dialog-body>\n <fd-dialog-footer>\n @if (mobileConfig.approveButtonText) {\n <fd-button-bar fdType=\"emphasized\" [label]=\"mobileConfig.approveButtonText!\" (click)=\"handleApprove()\">\n </fd-button-bar>\n }\n @if (mobileConfig.cancelButtonText) {\n <fd-button-bar [label]=\"mobileConfig.cancelButtonText!\" (click)=\"handleDismiss()\"> </fd-button-bar>\n }\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: DialogModule }, { kind: "component", type: i1$2.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: i1$2.DialogBodyComponent, selector: "fd-dialog-body", inputs: ["disablePaddings"] }, { kind: "component", type: i1$2.DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: i1$2.DialogHeaderComponent, selector: "fd-dialog-header", inputs: ["inShellbar"] }, { kind: "component", type: i1$2.DialogCloseButtonComponent, selector: "[fd-dialog-close-button]", inputs: ["mobile", "title", "ariaLabel"] }, { kind: "directive", type: i1$2.DialogTemplateDirective, selector: "[fdDialogTemplate]", inputs: ["fdDialogTemplateConfig"] }, { kind: "directive", type: i2.TemplateDirective, selector: "[fdkTemplate]", inputs: ["fdkTemplate"] }, { kind: "directive", type: i3$1.BarMiddleDirective, selector: "[fd-bar-middle]", inputs: ["stackContentsVertically"] }, { kind: "directive", type: i3$1.BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth"] }, { kind: "component", type: i3$1.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabelledby", "id"] }, { kind: "component", type: i4.TitleComponent, selector: "[fd-title], [fdTitle]", inputs: ["twoLineClamp", "headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "ngmodule", type: BarModule }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
5985
- }
5986
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ComboboxMobileComponent, decorators: [{
5987
- type: Component,
5988
- args: [{ selector: 'fdp-combobox-mobile', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [
5989
- DialogModule,
5990
- TitleComponent,
5991
- TemplateDirective,
5992
- BarModule,
5993
- NgTemplateOutlet,
5994
- CdkScrollable,
5995
- ScrollbarDirective
5996
- ], template: "<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n @if (mobileConfig.title) {\n <h1 fd-title>{{ mobileConfig.title }}</h1>\n }\n @if (mobileConfig.hasCloseButton) {\n <button fd-dialog-close-button [mobile]=\"true\" (click)=\"handleDismiss()\"></button>\n }\n <ng-template fdkTemplate=\"subheader\">\n <div fd-bar-middle>\n <fd-bar-element [fullWidth]=\"true\">\n <ng-template [ngTemplateOutlet]=\"childContent?.controlTemplate || null\"></ng-template>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body>\n <ng-template [ngTemplateOutlet]=\"childContent?.listTemplate || null\"></ng-template>\n </fd-dialog-body>\n <fd-dialog-footer>\n @if (mobileConfig.approveButtonText) {\n <fd-button-bar fdType=\"emphasized\" [label]=\"mobileConfig.approveButtonText!\" (click)=\"handleApprove()\">\n </fd-button-bar>\n }\n @if (mobileConfig.cancelButtonText) {\n <fd-button-bar [label]=\"mobileConfig.cancelButtonText!\" (click)=\"handleDismiss()\"> </fd-button-bar>\n }\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n" }]
5997
- }], ctorParameters: () => [{ type: undefined, decorators: [{
5998
- type: Inject,
5999
- args: [COMBOBOX_COMPONENT]
6000
- }] }], propDecorators: { dialogTemplate: [{
6001
- type: ViewChild,
6002
- args: ['dialogTemplate']
6003
- }] } });
6004
-
6005
- /**
6006
- * @deprecated
6007
- * Use direct imports of components and directives.
6008
- */
6009
- class PlatformComboboxMobileModule {
6010
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformComboboxMobileModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
6011
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.5", ngImport: i0, type: PlatformComboboxMobileModule, imports: [ComboboxMobileComponent], exports: [ComboboxMobileComponent] }); }
6012
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformComboboxMobileModule, imports: [ComboboxMobileComponent] }); }
6013
- }
6014
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformComboboxMobileModule, decorators: [{
6015
- type: NgModule,
6016
- args: [{
6017
- imports: [ComboboxMobileComponent],
6018
- exports: [ComboboxMobileComponent]
6019
- }]
6020
- }] });
6021
-
6022
- /**
6023
- * Default options for Combobox
6024
- */
6025
- class ComboboxConfig {
5432
+ /**
5433
+ * Default options for Combobox
5434
+ */
5435
+ class ComboboxConfig {
6026
5436
  /** @hidden */
6027
5437
  constructor(platformConfig) {
6028
5438
  /**
@@ -6862,671 +6272,1269 @@ class ComboboxComponent extends BaseCombobox {
6862
6272
  this.dataSource = new ComboBoxDataSource(providers.get(this.entityClass));
6863
6273
  }
6864
6274
  }
6865
- /** @hidden */
6275
+ /** @hidden */
6276
+ ngAfterViewInit() {
6277
+ super.ngAfterViewInit();
6278
+ if (this.mobile) {
6279
+ this._setUpMobileMode();
6280
+ }
6281
+ }
6282
+ /** @hidden */
6283
+ _onBlur(event) {
6284
+ if (this.mobile) {
6285
+ return;
6286
+ }
6287
+ const target = event.relatedTarget;
6288
+ if (target) {
6289
+ const isList = !!target.closest('.fdp-combobox__list-container');
6290
+ const isListItem = !!target.closest('.fd-list__item');
6291
+ if (isList || isListItem) {
6292
+ return;
6293
+ }
6294
+ }
6295
+ if ((!this._selectedElement && !this.inputText) || this._selectedElement?.label === this.inputText) {
6296
+ return;
6297
+ }
6298
+ const optionItem = this._getSelectedOptionItem(this.inputText);
6299
+ this._updateModel(optionItem ? optionItem.value : this.inputText);
6300
+ }
6301
+ /** @hidden Method to emit change event */
6302
+ emitChangeEvent(modelValue) {
6303
+ const event = new ComboboxSelectionChangeEvent(this, modelValue);
6304
+ this.selectionChange.emit(event);
6305
+ }
6306
+ /** @hidden Method to set selected item */
6307
+ selectOptionItem(item, shouldClosePopover = true) {
6308
+ if (this.mobile) {
6309
+ this._selectedElement = item;
6310
+ this.inputText = item.label;
6311
+ this.detectChanges();
6312
+ return;
6313
+ }
6314
+ this.inputText = item.label;
6315
+ this._checkAndUpdate(item);
6316
+ if (shouldClosePopover) {
6317
+ this.isOpenChangeHandle(false);
6318
+ }
6319
+ }
6320
+ /** @hidden Method to set as selected */
6321
+ setAsSelected(item) {
6322
+ const selectedItem = item[0];
6323
+ if (this.isSelectedOptionItem(selectedItem)) {
6324
+ return;
6325
+ }
6326
+ this._selectedElement = (this.isGroup && selectedItem?.children?.[0]) || selectedItem;
6327
+ this.inputText = this.displayValue(this._selectedElement);
6328
+ }
6329
+ /** @hidden Define is selected item selected */
6330
+ isSelectedOptionItem(selectedItem) {
6331
+ if (!!this._selectedElement && !!selectedItem) {
6332
+ if (this.lookupKey) {
6333
+ return this.lookupValue(this._selectedElement) === this.lookupValue(selectedItem);
6334
+ }
6335
+ else {
6336
+ return selectedItem.value === this._selectedElement.value;
6337
+ }
6338
+ }
6339
+ else {
6340
+ return false;
6341
+ }
6342
+ }
6343
+ /** @hidden Define is selected item selected by display value */
6344
+ isSelectedOptionItemByDisplayValue(selectedItem) {
6345
+ return this._selectedElement?.label === selectedItem;
6346
+ }
6347
+ /** Handle dialog dismissing, closes popover and sets backup data. */
6348
+ dialogDismiss(term) {
6349
+ if (this._selectedElement?.label !== term) {
6350
+ this._selectedElement = this._getSelectedOptionItem(term);
6351
+ }
6352
+ this.inputText = term;
6353
+ this.isOpenChangeHandle(false);
6354
+ }
6355
+ /** Handle dialog approval, closes popover and propagates data changes. */
6356
+ dialogApprove() {
6357
+ if (this._selectedElement?.label === this.inputText) {
6358
+ this._updateModel(this._selectedElement.value);
6359
+ }
6360
+ else {
6361
+ const optionItem = this._getSelectedOptionItem(this.inputText);
6362
+ this._updateModel(optionItem ? optionItem.value : this.inputText);
6363
+ }
6364
+ this.isOpenChangeHandle(false);
6365
+ }
6366
+ /** @hidden */
6367
+ onItemFocused(value) {
6368
+ if (!this._itemMousedown && !this.mobile) {
6369
+ this.selectOptionItem(value, false);
6370
+ }
6371
+ this._itemMousedown = false;
6372
+ }
6373
+ /** @hidden */
6374
+ _getLabelledBy() {
6375
+ let retVal = this.ariaLabelledBy;
6376
+ if (this.stateMessage) {
6377
+ retVal = retVal + ' fdp-list-message-combobox-state-message-' + this.id;
6378
+ }
6379
+ if (this.advancedStateMessage?.hasErrors && this.advancedStateMessage?.template) {
6380
+ retVal = retVal + ' fdp-list-message-combobox-error-message-' + this.id;
6381
+ }
6382
+ return retVal;
6383
+ }
6384
+ /** @hidden if not selected update model */
6385
+ _checkAndUpdate(modelValue) {
6386
+ if (this.isSelectedOptionItem(modelValue)) {
6387
+ return;
6388
+ }
6389
+ this._updateModel(modelValue.value);
6390
+ }
6391
+ /** @hidden Update model */
6392
+ _updateModel(value) {
6393
+ // setting value, it will call setValue()
6394
+ this.value = value;
6395
+ this.emitChangeEvent(value ? value : null);
6396
+ }
6397
+ /** @hidden */
6398
+ async _setUpMobileMode() {
6399
+ const injector = Injector.create({
6400
+ providers: [{ provide: COMBOBOX_COMPONENT, useValue: this }],
6401
+ parent: this._injector
6402
+ });
6403
+ this._dynamicComponentService.createDynamicComponent({ listTemplate: this.listTemplate, controlTemplate: this.controlTemplate }, ComboboxMobileComponent, {
6404
+ containerRef: this._viewContainerRef
6405
+ }, { injector });
6406
+ }
6407
+ /** @hidden */
6408
+ _getSelectedOptionItem(text) {
6409
+ if (!this.isGroup) {
6410
+ return this._suggestions.find((item) => item.label === text);
6411
+ }
6412
+ return this._suggestions
6413
+ .reduce((result, item) => {
6414
+ result.push(...(item.children ?? []));
6415
+ return result;
6416
+ }, [])
6417
+ .find((item) => item.label === text);
6418
+ }
6419
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ComboboxComponent, deps: [{ token: i1$2.DialogConfig, optional: true }, { token: i2.DynamicComponentService }, { token: i0.ViewContainerRef }, { token: i0.Injector }, { token: DATA_PROVIDERS, optional: true }, { token: ComboboxConfig }], target: i0.ɵɵFactoryTarget.Component }); }
6420
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: ComboboxComponent, isStandalone: true, selector: "fdp-combobox", outputs: { selectionChange: "selectionChange" }, providers: [
6421
+ { provide: FD_FORM_FIELD_CONTROL, useExisting: ComboboxComponent, multi: true },
6422
+ contentDensityObserverProviders()
6423
+ ], viewQueries: [{ propertyName: "searchInputElement", first: true, predicate: ["searchInputElement"], descendants: true }, { propertyName: "controlTemplate", first: true, predicate: ["controlTemplate"], descendants: true }, { propertyName: "listTemplate", first: true, predicate: ["listTemplate"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template [ngTemplateOutlet]=\"mobile ? controlTemplate : desktopTemplate\"></ng-template>\n<ng-template #desktopTemplate>\n <fd-popover\n [isOpen]=\"isOpen && _suggestions.length > 0\"\n (isOpenChange)=\"isOpenChangeHandle($event)\"\n [fillControlMode]=\"fillControlMode\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"false\"\n [triggers]=\"triggers\"\n [disabled]=\"disabled || readonly\"\n [maxWidth]=\"autoResize ? null : minWidth\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n additionalBodyClass=\"fdp-combobox__popover\"\n >\n <fd-popover-control>\n <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n </fd-popover-control>\n <fd-popover-body [hidden]=\"_suggestions.length === 0\">\n <ng-template [ngTemplateOutlet]=\"listTemplate\"></ng-template>\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n<ng-template #controlTemplate>\n <fd-form-input-message-group>\n <fd-input-group\n [id]=\"id + '-input-group-container'\"\n [button]=\"!readonly\"\n [glyph]=\"!readonly ? 'navigation-down-arrow' : ' '\"\n [state]=\"mobile && isOpen ? null : state\"\n [buttonFocusable]=\"buttonFocusable\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [isControl]=\"true\"\n (addOnButtonClicked)=\"onPrimaryButtonClick()\"\n [isExpanded]=\"!mobile && isOpen && _suggestions.length > 0\"\n [attr.aria-disabled]=\"disabled\"\n [glyphAriaLabel]=\"ariaLabel\"\n (click)=\"openInMobileMode()\"\n >\n <input\n #searchInputElement\n fdp-auto-complete\n [options]=\"_suggestions\"\n [inputText]=\"inputText\"\n [mobile]=\"mobile\"\n (onComplete)=\"_onCompleteTerm($event)\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"_getLabelledBy()\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n [attr.aria-required]=\"required\"\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"id\"\n [name]=\"name\"\n (keydown)=\"onInputKeydownHandler($event)\"\n [disabled]=\"disabled\"\n [ngModel]=\"inputText\"\n (ngModelChange)=\"searchTermChanged($event)\"\n [placeholder]=\"placeholder\"\n (focus)=\"onTouched()\"\n (blur)=\"_onBlur($event)\"\n [attr.aria-expanded]=\"isOpen && _suggestions.length > 0\"\n [readonly]=\"readonly\"\n [attr.aria-readonly]=\"readonly\"\n />\n </fd-input-group>\n @if (isOpen) {\n <div class=\"fdp-combobox__count-list-results\" role=\"status\">\n @if (_flatSuggestions.length || '0'; as count) {\n {{\n (\n (count === 1\n ? 'platformCombobox.countListResultsSingular'\n : 'platformCombobox.countListResultsPlural'\n ) | fdTranslate: { count: count }\n )()\n }}\n }\n </div>\n }\n @if (mobile || isOpen ? null : !!stateMessage) {\n <fd-form-message [type]=\"state\" [innerHtml]=\"stateMessage\"></fd-form-message>\n }\n </fd-form-input-message-group>\n</ng-template>\n<ng-template #listTemplate>\n <ul\n fd-list\n [hasMessage]=\"!!stateMessage\"\n (focusEscapeList)=\"handleListFocusEscape($event)\"\n [dropdownMode]=\"true\"\n class=\"fdp-combobox__list\"\n [hasMessage]=\"!!stateMessage || (!!advancedStateMessage?.hasErrors && !!advancedStateMessage?.template)\"\n [id]=\"id + '-result'\"\n role=\"listbox\"\n [byline]=\"byline\"\n [attr.aria-labelledby]=\"id + '-search'\"\n [style.maxHeight]=\"!mobile && maxHeight\"\n [style.maxWidth]=\"autoResize && maxWidth + 'px'\"\n (keydown.tab)=\"_close()\"\n (keydown.shift.tab)=\"_close()\"\n >\n @if (stateMessage) {\n <li\n [attr.aria-label]=\"stateMessage\"\n fd-list-message\n tabindex=\"-1\"\n role=\"presentation\"\n [type]=\"state || 'default'\"\n [innerHtml]=\"stateMessage\"\n [attr.id]=\"'fdp-list-message-combobox-state-message-' + id\"\n ></li>\n }\n @if (advancedStateMessage?.hasErrors && advancedStateMessage?.template) {\n <li\n fd-list-message\n tabindex=\"-1\"\n role=\"presentation\"\n [type]=\"state || 'default'\"\n [attr.id]=\"'fdp-list-message-combobox-error-message-' + id\"\n >\n <ng-template [ngTemplateOutlet]=\"advancedStateMessage!.template!\"></ng-template>\n </li>\n }\n <ng-content></ng-content>\n @if (isGroup) {\n @for (group of _suggestions; track group) {\n @if (!groupItemTemplate) {\n <li fd-list-group-header role=\"option\">\n <span fd-list-title [attr.title]=\"group.label\">{{ group.label }}</span>\n </li>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"groupItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { label: group.label } }\"\n ></ng-template>\n }\n @for (optionItem of group.children; track optionItem; let i = $index) {\n <li\n (click)=\"handleOptionItem(optionItem)\"\n (mousedown)=\"_itemMousedown = true\"\n (focus)=\"onItemFocused(optionItem)\"\n fd-list-item\n ariaRole=\"option\"\n [tabindex]=\"0\"\n (keyDown)=\"handlePressEnter($event, optionItem)\"\n [selected]=\"isSelectedOptionItem(optionItem)\"\n [value]=\"optionItem\"\n >\n <ng-template\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-template>\n </li>\n }\n }\n } @else {\n @for (optionItem of _suggestions; track optionItem; let i = $index) {\n <li\n (click)=\"handleOptionItem(optionItem)\"\n (mousedown)=\"_itemMousedown = true\"\n (focus)=\"onItemFocused(optionItem)\"\n fd-list-item\n ariaRole=\"option\"\n [tabindex]=\"0\"\n (keyDown)=\"handlePressEnter($event, optionItem)\"\n [selected]=\"isSelectedOptionItem(optionItem)\"\n [value]=\"optionItem\"\n >\n <ng-template\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-template>\n </li>\n }\n }\n </ul>\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #listItem>\n @if (isSelectedOptionItem(optionItem) && !!selectedItemTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"selectedItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-template>\n }\n @if (!(isSelectedOptionItem(optionItem) && selectedItemTemplate)) {\n <ng-template\n [ngTemplateOutlet]=\"optionItemSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: index }\"\n ></ng-template>\n <ng-template\n [ngTemplateOutlet]=\"secondaryTextSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem }\"\n ></ng-template>\n }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #optionItemSource>\n @if (!optionItemTemplate) {\n <span [attr.title]=\"optionItem.label\" [innerHTML]=\"optionItem.label | highlight: inputText\"></span>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"optionItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-template>\n }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" #secondaryTextSource>\n @if (showSecondaryText) {\n @if (!secondaryItemTemplate) {\n <span\n [style.text-align]=\"secondaryTextAlignment\"\n fd-list-secondary\n [attr.title]=\"optionItem.secondaryText\"\n [innerHTML]=\"optionItem.secondaryText | highlight: inputText\"\n ></span>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"secondaryItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value }\"\n ></ng-template>\n }\n }\n</ng-template>\n", styles: [".fdp-combobox__count-list-results{position:absolute;opacity:0;z-index:-1}.fdp-combobox__list .fd-list__item{justify-content:space-between}.fdp-combobox__list .fd-list__item span{overflow:hidden;text-overflow:ellipsis;width:100%}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: PopoverComponent, selector: "fd-popover", inputs: ["config", "title", "trigger", "id", "mobile", "mobileConfig", "preventSpaceKeyScroll", "placement", "maxWidth", "fillControlMode", "closeOnOutsideClick", "closeOnEscapeKey", "disabled", "triggers", "focusTrapped", "focusAutoCapture", "restoreFocusOnClose", "noArrow", "disableScrollbar", "appendTo", "placementContainer", "scrollStrategy", "cdkPositions", "applyOverlay", "additionalBodyClass", "additionalTriggerClass", "closeOnNavigation", "fixedPosition", "resizable", "bodyAriaLabel", "bodyRole", "bodyAriaLabelledBy", "isOpen"], outputs: ["triggerChange", "isOpenChange", "beforeOpen"] }, { kind: "component", type: PopoverControlComponent, selector: "fd-popover-control, [fdPopoverControl]" }, { kind: "component", type: PopoverBodyComponent, selector: "fd-popover-body", inputs: ["minWidth", "maxWidth", "minHeight", "maxHeight"], outputs: ["onClose"] }, { kind: "component", type: FormInputMessageGroupComponent, selector: "fd-form-input-message-group", inputs: ["triggers", "closeOnOutsideClick", "fillControlMode", "noArrow", "closeOnEscapeKey", "placement", "placementContainer", "isOpen", "preventSpaceKeyScroll"], outputs: ["isOpenChange"] }, { kind: "ngmodule", type: InputGroupModule }, { kind: "component", type: i3$2.InputGroupComponent, selector: "fd-input-group", inputs: ["placement", "required", "inline", "addOnText", "buttonFocusable", "type", "glyph", "glyphFont", "button", "isControl", "showFocus", "isExpanded", "glyphAriaLabel", "addonButtonAriaHidden", "iconTitle", "ariaLabelledBy", "ariaLabel"], outputs: ["addOnButtonClicked", "search"] }, { kind: "directive", type: i3$2.InputGroupInputDirective, selector: "[fdInputGroupInput], [fd-input-group-input]", inputs: ["class"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: AutoCompleteDirective, selector: "[fdp-auto-complete]", inputs: ["options", "inputText", "mobile"], outputs: ["onComplete"] }, { kind: "component", type: FormMessageComponent, selector: "fd-form-message", inputs: ["type", "static", "embedded", "class"] }, { kind: "ngmodule", type: ListModule }, { kind: "component", type: i6.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "subline", "theme", "unreadIndicator", "role", "settingsList", "settingsListFooter", "searchResultsList"], outputs: ["focusEscapeList"] }, { kind: "component", type: i6.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "noData", "action", "interactive", "growing", "counter", "counterRole", "counterAriaLabel", "active", "unread", "byline", "ariaRole", "id", "preventClick", "settingsListTpl", "suggestion"], outputs: ["keyDown"], exportAs: ["fdListItem"] }, { kind: "directive", type: i6.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap", "truncate", "scope"] }, { kind: "directive", type: i6.ListGroupHeaderDirective, selector: "[fdListGroupHeader], [fd-list-group-header]", inputs: ["nativeElementId"], outputs: ["keyDown"] }, { kind: "directive", type: i6.ListSecondaryDirective, selector: "[fd-list-secondary], [fdListSecondary]", inputs: ["type"] }, { kind: "directive", type: i6.ListMessageDirective, selector: "[fd-list-message], [fdListMessage]", inputs: ["type", "class"] }, { kind: "ngmodule", type: ContentDensityModule }, { kind: "pipe", type: SearchHighlightPipe, name: "highlight" }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
6424
+ }
6425
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ComboboxComponent, decorators: [{
6426
+ type: Component,
6427
+ args: [{ selector: 'fdp-combobox', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
6428
+ { provide: FD_FORM_FIELD_CONTROL, useExisting: ComboboxComponent, multi: true },
6429
+ contentDensityObserverProviders()
6430
+ ], imports: [
6431
+ NgTemplateOutlet,
6432
+ PopoverComponent,
6433
+ PopoverControlComponent,
6434
+ PopoverBodyComponent,
6435
+ FormInputMessageGroupComponent,
6436
+ InputGroupModule,
6437
+ FormsModule,
6438
+ AutoCompleteDirective,
6439
+ FormMessageComponent,
6440
+ ListModule,
6441
+ NgClass,
6442
+ ListSecondaryDirective,
6443
+ SearchHighlightPipe,
6444
+ FdTranslatePipe,
6445
+ ContentDensityModule
6446
+ ], template: "<ng-template [ngTemplateOutlet]=\"mobile ? controlTemplate : desktopTemplate\"></ng-template>\n<ng-template #desktopTemplate>\n <fd-popover\n [isOpen]=\"isOpen && _suggestions.length > 0\"\n (isOpenChange)=\"isOpenChangeHandle($event)\"\n [fillControlMode]=\"fillControlMode\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"false\"\n [triggers]=\"triggers\"\n [disabled]=\"disabled || readonly\"\n [maxWidth]=\"autoResize ? null : minWidth\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n additionalBodyClass=\"fdp-combobox__popover\"\n >\n <fd-popover-control>\n <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n </fd-popover-control>\n <fd-popover-body [hidden]=\"_suggestions.length === 0\">\n <ng-template [ngTemplateOutlet]=\"listTemplate\"></ng-template>\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n<ng-template #controlTemplate>\n <fd-form-input-message-group>\n <fd-input-group\n [id]=\"id + '-input-group-container'\"\n [button]=\"!readonly\"\n [glyph]=\"!readonly ? 'navigation-down-arrow' : ' '\"\n [state]=\"mobile && isOpen ? null : state\"\n [buttonFocusable]=\"buttonFocusable\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [isControl]=\"true\"\n (addOnButtonClicked)=\"onPrimaryButtonClick()\"\n [isExpanded]=\"!mobile && isOpen && _suggestions.length > 0\"\n [attr.aria-disabled]=\"disabled\"\n [glyphAriaLabel]=\"ariaLabel\"\n (click)=\"openInMobileMode()\"\n >\n <input\n #searchInputElement\n fdp-auto-complete\n [options]=\"_suggestions\"\n [inputText]=\"inputText\"\n [mobile]=\"mobile\"\n (onComplete)=\"_onCompleteTerm($event)\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"_getLabelledBy()\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n [attr.aria-required]=\"required\"\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"id\"\n [name]=\"name\"\n (keydown)=\"onInputKeydownHandler($event)\"\n [disabled]=\"disabled\"\n [ngModel]=\"inputText\"\n (ngModelChange)=\"searchTermChanged($event)\"\n [placeholder]=\"placeholder\"\n (focus)=\"onTouched()\"\n (blur)=\"_onBlur($event)\"\n [attr.aria-expanded]=\"isOpen && _suggestions.length > 0\"\n [readonly]=\"readonly\"\n [attr.aria-readonly]=\"readonly\"\n />\n </fd-input-group>\n @if (isOpen) {\n <div class=\"fdp-combobox__count-list-results\" role=\"status\">\n @if (_flatSuggestions.length || '0'; as count) {\n {{\n (\n (count === 1\n ? 'platformCombobox.countListResultsSingular'\n : 'platformCombobox.countListResultsPlural'\n ) | fdTranslate: { count: count }\n )()\n }}\n }\n </div>\n }\n @if (mobile || isOpen ? null : !!stateMessage) {\n <fd-form-message [type]=\"state\" [innerHtml]=\"stateMessage\"></fd-form-message>\n }\n </fd-form-input-message-group>\n</ng-template>\n<ng-template #listTemplate>\n <ul\n fd-list\n [hasMessage]=\"!!stateMessage\"\n (focusEscapeList)=\"handleListFocusEscape($event)\"\n [dropdownMode]=\"true\"\n class=\"fdp-combobox__list\"\n [hasMessage]=\"!!stateMessage || (!!advancedStateMessage?.hasErrors && !!advancedStateMessage?.template)\"\n [id]=\"id + '-result'\"\n role=\"listbox\"\n [byline]=\"byline\"\n [attr.aria-labelledby]=\"id + '-search'\"\n [style.maxHeight]=\"!mobile && maxHeight\"\n [style.maxWidth]=\"autoResize && maxWidth + 'px'\"\n (keydown.tab)=\"_close()\"\n (keydown.shift.tab)=\"_close()\"\n >\n @if (stateMessage) {\n <li\n [attr.aria-label]=\"stateMessage\"\n fd-list-message\n tabindex=\"-1\"\n role=\"presentation\"\n [type]=\"state || 'default'\"\n [innerHtml]=\"stateMessage\"\n [attr.id]=\"'fdp-list-message-combobox-state-message-' + id\"\n ></li>\n }\n @if (advancedStateMessage?.hasErrors && advancedStateMessage?.template) {\n <li\n fd-list-message\n tabindex=\"-1\"\n role=\"presentation\"\n [type]=\"state || 'default'\"\n [attr.id]=\"'fdp-list-message-combobox-error-message-' + id\"\n >\n <ng-template [ngTemplateOutlet]=\"advancedStateMessage!.template!\"></ng-template>\n </li>\n }\n <ng-content></ng-content>\n @if (isGroup) {\n @for (group of _suggestions; track group) {\n @if (!groupItemTemplate) {\n <li fd-list-group-header role=\"option\">\n <span fd-list-title [attr.title]=\"group.label\">{{ group.label }}</span>\n </li>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"groupItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { label: group.label } }\"\n ></ng-template>\n }\n @for (optionItem of group.children; track optionItem; let i = $index) {\n <li\n (click)=\"handleOptionItem(optionItem)\"\n (mousedown)=\"_itemMousedown = true\"\n (focus)=\"onItemFocused(optionItem)\"\n fd-list-item\n ariaRole=\"option\"\n [tabindex]=\"0\"\n (keyDown)=\"handlePressEnter($event, optionItem)\"\n [selected]=\"isSelectedOptionItem(optionItem)\"\n [value]=\"optionItem\"\n >\n <ng-template\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-template>\n </li>\n }\n }\n } @else {\n @for (optionItem of _suggestions; track optionItem; let i = $index) {\n <li\n (click)=\"handleOptionItem(optionItem)\"\n (mousedown)=\"_itemMousedown = true\"\n (focus)=\"onItemFocused(optionItem)\"\n fd-list-item\n ariaRole=\"option\"\n [tabindex]=\"0\"\n (keyDown)=\"handlePressEnter($event, optionItem)\"\n [selected]=\"isSelectedOptionItem(optionItem)\"\n [value]=\"optionItem\"\n >\n <ng-template\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-template>\n </li>\n }\n }\n </ul>\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #listItem>\n @if (isSelectedOptionItem(optionItem) && !!selectedItemTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"selectedItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-template>\n }\n @if (!(isSelectedOptionItem(optionItem) && selectedItemTemplate)) {\n <ng-template\n [ngTemplateOutlet]=\"optionItemSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: index }\"\n ></ng-template>\n <ng-template\n [ngTemplateOutlet]=\"secondaryTextSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem }\"\n ></ng-template>\n }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #optionItemSource>\n @if (!optionItemTemplate) {\n <span [attr.title]=\"optionItem.label\" [innerHTML]=\"optionItem.label | highlight: inputText\"></span>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"optionItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-template>\n }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" #secondaryTextSource>\n @if (showSecondaryText) {\n @if (!secondaryItemTemplate) {\n <span\n [style.text-align]=\"secondaryTextAlignment\"\n fd-list-secondary\n [attr.title]=\"optionItem.secondaryText\"\n [innerHTML]=\"optionItem.secondaryText | highlight: inputText\"\n ></span>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"secondaryItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value }\"\n ></ng-template>\n }\n }\n</ng-template>\n", styles: [".fdp-combobox__count-list-results{position:absolute;opacity:0;z-index:-1}.fdp-combobox__list .fd-list__item{justify-content:space-between}.fdp-combobox__list .fd-list__item span{overflow:hidden;text-overflow:ellipsis;width:100%}\n"] }]
6447
+ }], ctorParameters: () => [{ type: i1$2.DialogConfig, decorators: [{
6448
+ type: Optional
6449
+ }] }, { type: i2.DynamicComponentService }, { type: i0.ViewContainerRef }, { type: i0.Injector }, { type: Map, decorators: [{
6450
+ type: Optional
6451
+ }, {
6452
+ type: Inject,
6453
+ args: [DATA_PROVIDERS]
6454
+ }] }, { type: ComboboxConfig }], propDecorators: { selectionChange: [{
6455
+ type: Output
6456
+ }], searchInputElement: [{
6457
+ type: ViewChild,
6458
+ args: ['searchInputElement']
6459
+ }], controlTemplate: [{
6460
+ type: ViewChild,
6461
+ args: ['controlTemplate']
6462
+ }], listTemplate: [{
6463
+ type: ViewChild,
6464
+ args: ['listTemplate']
6465
+ }] } });
6466
+
6467
+ const EXPORTABLE_COMPONENTS = [
6468
+ ComboboxComponent,
6469
+ ComboboxItemDirective,
6470
+ ComboboxSelectedItemDirective,
6471
+ ComboboxItemGroupDirective,
6472
+ ComboboxSecondaryItemDirective
6473
+ ];
6474
+ /**
6475
+ * @deprecated
6476
+ * Use direct imports of components and directives.
6477
+ */
6478
+ class PlatformComboboxModule {
6479
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformComboboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
6480
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.5", ngImport: i0, type: PlatformComboboxModule, imports: [ComboboxComponent,
6481
+ ComboboxItemDirective,
6482
+ ComboboxSelectedItemDirective,
6483
+ ComboboxItemGroupDirective,
6484
+ ComboboxSecondaryItemDirective], exports: [ComboboxComponent,
6485
+ ComboboxItemDirective,
6486
+ ComboboxSelectedItemDirective,
6487
+ ComboboxItemGroupDirective,
6488
+ ComboboxSecondaryItemDirective] }); }
6489
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformComboboxModule, imports: [ComboboxComponent] }); }
6490
+ }
6491
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformComboboxModule, decorators: [{
6492
+ type: NgModule,
6493
+ args: [{
6494
+ imports: [...EXPORTABLE_COMPONENTS],
6495
+ exports: [...EXPORTABLE_COMPONENTS]
6496
+ }]
6497
+ }] });
6498
+
6499
+ /**
6500
+ * @deprecated
6501
+ * Use direct imports of components and directives.
6502
+ */
6503
+ class PlatformDatePickerModule {
6504
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformDatePickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
6505
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.5", ngImport: i0, type: PlatformDatePickerModule, imports: [PlatformDatePickerComponent], exports: [PlatformDatePickerComponent] }); }
6506
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformDatePickerModule, imports: [PlatformDatePickerComponent] }); }
6507
+ }
6508
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformDatePickerModule, decorators: [{
6509
+ type: NgModule,
6510
+ args: [{
6511
+ imports: [PlatformDatePickerComponent],
6512
+ exports: [PlatformDatePickerComponent]
6513
+ }]
6514
+ }] });
6515
+
6516
+ /** @hidden */
6517
+ function createMissingDateImplementationError(provider) {
6518
+ return Error(`FdpDatetimePicker: No provider found for ${provider}. You must import one of the following ` +
6519
+ `modules at your application root: FdDatetimeModule, or provide a ` +
6520
+ `custom implementation.`);
6521
+ }
6522
+
6523
+ class PlatformDatetimePickerComponent extends BaseInput {
6524
+ /**
6525
+ * value for datetime
6526
+ */
6527
+ set value(value) {
6528
+ super.setValue(value);
6529
+ }
6530
+ get value() {
6531
+ return super.getValue();
6532
+ }
6533
+ /**
6534
+ * The state of the form control - applies css classes.
6535
+ * Can be `success`, `error`, `warning`, `information` or blank for default.
6536
+ */
6537
+ set state(state) {
6538
+ super.state = state;
6539
+ }
6540
+ get state() {
6541
+ if (this.dateTimePickerComponent?.isInvalidDateInput) {
6542
+ // if any other error from core dtp
6543
+ return 'error';
6544
+ }
6545
+ return super.state;
6546
+ }
6547
+ /** @hidden */
6548
+ get _isRequired() {
6549
+ return !!this.formField?.required;
6550
+ }
6551
+ /** @hidden */
6552
+ constructor() {
6553
+ super();
6554
+ /**
6555
+ * The placement of the popover. It can be one of: top, top-start, top-end, bottom,
6556
+ * bottom-start, bottom-end, right, right-start, right-end, left, left-start, left-end.
6557
+ */
6558
+ this.placement = 'bottom-start';
6559
+ /** Whether to perform visual validation on the picker input. */
6560
+ this.useValidation = true;
6561
+ /** Whether the popover is open. Two-way binding is supported. */
6562
+ this.isOpen = false;
6563
+ /** Actually shown active view one of 'day' | 'month' | 'year' in calendar component*/
6564
+ this.activeView = FdCalendarViewEnum.Day;
6565
+ /** Whether a null input is considered valid. */
6566
+ this.allowNull = true;
6567
+ /**
6568
+ * @Input when set to true time component will use 2 digits for each number.
6569
+ * For example 9 will become 09
6570
+ * but 12 will be kept as 12.
6571
+ * Only uses by time component and does not change input format
6572
+ */
6573
+ this.keepTwoDigitsTime = false;
6574
+ /**
6575
+ * Whether AddOn Button should be focusable
6576
+ * @default true
6577
+ */
6578
+ this.buttonFocusable = true;
6579
+ /**
6580
+ * Special days mark, it can be used by passing array of object with
6581
+ * Special day number, list 1-20 [class:`fd-calendar__item--legend-{{number}}`] is available there:
6582
+ * https://sap.github.io/fundamental-styles/components/calendar.html calendar special days section
6583
+ * Rule accepts method with FdDate object as a parameter. ex:
6584
+ * `rule: (fdDate: FdDate) => fdDate.getDay() === 1`, which will mark all sundays as special day.
6585
+ */
6586
+ this.specialDaysRules = [];
6587
+ /**
6588
+ * Object to customize year grid,
6589
+ * Row, Columns and method to display year can be modified
6590
+ */
6591
+ this.yearGrid = {
6592
+ rows: 4,
6593
+ cols: 5
6594
+ };
6595
+ /**
6596
+ * Object to customize aggregated year grid,
6597
+ * Row, Columns and method to display year can be modified
6598
+ */
6599
+ this.aggregatedYearGrid = {
6600
+ rows: 4,
6601
+ cols: 3
6602
+ };
6603
+ /**
6604
+ * Whether user wants to mark sunday/saturday with `fd-calendar__item--weekend` class
6605
+ */
6606
+ this.markWeekends = true;
6607
+ /** @Input Whether to show spinner buttons */
6608
+ this.spinnerButtons = true;
6609
+ /**
6610
+ * Whether user wants to show week numbers next to days
6611
+ */
6612
+ this.showWeekNumbers = true;
6613
+ /** Whether or not to show the datetime picker footer with submit/cancel buttons. */
6614
+ this.showFooter = true;
6615
+ /**
6616
+ * Whether to recalculate value from the input as user types or on blur.
6617
+ * By default, updates the value as user types.
6618
+ * @default false
6619
+ */
6620
+ this.processInputOnBlur = false;
6621
+ /**
6622
+ * Whether to prevent page scrolling when focusing date picker input field after calendar has been closed.
6623
+ */
6624
+ this.preventScrollOnFocus = false;
6625
+ /** Whether date picker should rendered in mobile mode. */
6626
+ this.mobile = false;
6627
+ /** Whether calendar is used inside mobile in landscape mode, it also adds close button on right side */
6628
+ this.mobileLandscape = false;
6629
+ /** Whether calendar is used inside mobile in portrait mode */
6630
+ this.mobilePortrait = false;
6631
+ /** Event emitted when the state of the isOpen property changes. */
6632
+ this.isOpenChange = new EventEmitter();
6633
+ /** Event thrown every time calendar active view is changed */
6634
+ this.activeViewChange = new EventEmitter();
6635
+ /** Event emitted when the date changes. This can be a time or day change. */
6636
+ this.datetimeChange = new EventEmitter();
6637
+ /** Event emitted when popover closes. */
6638
+ this.onClose = new EventEmitter();
6639
+ /**
6640
+ * Whether to show the calendar legend for special days.
6641
+ * When enabled, displays a legend below the calendar showing the special day markers and their descriptions.
6642
+ * @default false
6643
+ */
6644
+ this.showCalendarLegend = input(false, { ...(ngDevMode ? { debugName: "showCalendarLegend" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
6645
+ /**
6646
+ * Whether to display the calendar legend in column layout.
6647
+ * When true, legend items are displayed vertically in a single column.
6648
+ * When false, legend items are displayed horizontally in rows.
6649
+ * @default false
6650
+ */
6651
+ this.legendCol = input(false, { ...(ngDevMode ? { debugName: "legendCol" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
6652
+ /** @hidden */
6653
+ this._dateTimeAdapter = inject(DatetimeAdapter, {
6654
+ optional: true
6655
+ });
6656
+ /** @hidden */
6657
+ this._dateTimeFormats = inject(DATE_TIME_FORMATS, {
6658
+ optional: true
6659
+ });
6660
+ /**
6661
+ * Function used to disable certain dates in the calendar.
6662
+ * @param fdDate FdDate
6663
+ */
6664
+ this.disableFunction = () => false;
6665
+ /**
6666
+ * Method that handles changes when popover is opened or closed.
6667
+ */
6668
+ this.handleOpenChange = (open) => {
6669
+ this.isOpenChange.emit(open);
6670
+ };
6671
+ /**
6672
+ * Method that handle calendar active view change and throws event.
6673
+ */
6674
+ this.handleActiveViewChange = (fdCalendarView) => {
6675
+ this.activeViewChange.emit(fdCalendarView);
6676
+ };
6677
+ if (!this._dateTimeAdapter) {
6678
+ throw createMissingDateImplementationError('DateTimeAdapter');
6679
+ }
6680
+ if (!this._dateTimeFormats) {
6681
+ throw createMissingDateImplementationError('DATE_TIME_FORMATS');
6682
+ }
6683
+ // default model value
6684
+ this.value = this._dateTimeAdapter.now();
6685
+ }
6686
+ /**
6687
+ * @hidden
6688
+ */
6866
6689
  ngAfterViewInit() {
6867
- super.ngAfterViewInit();
6868
- if (this.mobile) {
6869
- this._setUpMobileMode();
6690
+ // if used with platform forms, adjust width of datetimepicker to take 100% container space
6691
+ if (this.formField) {
6692
+ this._adjustPickerWidth();
6870
6693
  }
6871
6694
  }
6872
6695
  /** @hidden */
6873
- _onBlur(event) {
6874
- if (this.mobile) {
6875
- return;
6876
- }
6877
- const target = event.relatedTarget;
6878
- if (target) {
6879
- const isList = !!target.closest('.fdp-combobox__list-container');
6880
- const isListItem = !!target.closest('.fd-list__item');
6881
- if (isList || isListItem) {
6882
- return;
6883
- }
6884
- }
6885
- if ((!this._selectedElement && !this.inputText) || this._selectedElement?.label === this.inputText) {
6886
- return;
6887
- }
6888
- const optionItem = this._getSelectedOptionItem(this.inputText);
6889
- this._updateModel(optionItem ? optionItem.value : this.inputText);
6890
- }
6891
- /** @hidden Method to emit change event */
6892
- emitChangeEvent(modelValue) {
6893
- const event = new ComboboxSelectionChangeEvent(this, modelValue);
6894
- this.selectionChange.emit(event);
6895
- }
6896
- /** @hidden Method to set selected item */
6897
- selectOptionItem(item, shouldClosePopover = true) {
6898
- if (this.mobile) {
6899
- this._selectedElement = item;
6900
- this.inputText = item.label;
6901
- this.detectChanges();
6902
- return;
6903
- }
6904
- this.inputText = item.label;
6905
- this._checkAndUpdate(item);
6906
- if (shouldClosePopover) {
6907
- this.isOpenChangeHandle(false);
6908
- }
6696
+ writeValue(value) {
6697
+ super.writeValue(value);
6698
+ this.markForCheck();
6909
6699
  }
6910
- /** @hidden Method to set as selected */
6911
- setAsSelected(item) {
6912
- const selectedItem = item[0];
6913
- if (this.isSelectedOptionItem(selectedItem)) {
6914
- return;
6915
- }
6916
- this._selectedElement = (this.isGroup && selectedItem?.children?.[0]) || selectedItem;
6917
- this.inputText = this.displayValue(this._selectedElement);
6700
+ /**
6701
+ * @hidden
6702
+ * override base functionality to catch new disabled state
6703
+ */
6704
+ setDisabledState(disabled) {
6705
+ super.setDisabledState(disabled);
6706
+ this.dateTimePickerComponent?.setDisabledState(disabled);
6918
6707
  }
6919
- /** @hidden Define is selected item selected */
6920
- isSelectedOptionItem(selectedItem) {
6921
- if (!!this._selectedElement && !!selectedItem) {
6922
- if (this.lookupKey) {
6923
- return this.lookupValue(this._selectedElement) === this.lookupValue(selectedItem);
6708
+ /**
6709
+ * @hidden
6710
+ * logic to handle validation from both platform forms and core datetiimepicker
6711
+ * @param datetime inputted
6712
+ */
6713
+ handleDatetimeInputChange(datetime) {
6714
+ if (this.dateTimePickerComponent) {
6715
+ if (this.dateTimePickerComponent._isInvalidDateInput) {
6716
+ if (this.ngControl?.control && this._control.value) {
6717
+ this.ngControl.control.setErrors(this._control.errors);
6718
+ }
6719
+ this.state = 'error';
6924
6720
  }
6925
6721
  else {
6926
- return selectedItem.value === this._selectedElement.value;
6722
+ if (!this.dateTimePickerComponent._inputFieldDate && !this.allowNull) {
6723
+ this.state = 'error'; // null value in not allowNull should throw error
6724
+ }
6725
+ else {
6726
+ this.state = undefined; // resetting to default state
6727
+ }
6927
6728
  }
6729
+ // only set the value if it is a valid datetime object
6730
+ if (this.dateTimePickerComponent._inputFieldDate) {
6731
+ this.value = datetime;
6732
+ }
6733
+ this.stateChanges.next('datetime picker: handleDatetimeInputChange');
6928
6734
  }
6929
- else {
6930
- return false;
6931
- }
6932
- }
6933
- /** @hidden Define is selected item selected by display value */
6934
- isSelectedOptionItemByDisplayValue(selectedItem) {
6935
- return this._selectedElement?.label === selectedItem;
6936
- }
6937
- /** Handle dialog dismissing, closes popover and sets backup data. */
6938
- dialogDismiss(term) {
6939
- if (this._selectedElement?.label !== term) {
6940
- this._selectedElement = this._getSelectedOptionItem(term);
6941
- }
6942
- this.inputText = term;
6943
- this.isOpenChangeHandle(false);
6944
- }
6945
- /** Handle dialog approval, closes popover and propagates data changes. */
6946
- dialogApprove() {
6947
- if (this._selectedElement?.label === this.inputText) {
6948
- this._updateModel(this._selectedElement.value);
6949
- }
6950
- else {
6951
- const optionItem = this._getSelectedOptionItem(this.inputText);
6952
- this._updateModel(optionItem ? optionItem.value : this.inputText);
6953
- }
6954
- this.isOpenChangeHandle(false);
6955
- }
6956
- /** @hidden */
6957
- onItemFocused(value) {
6958
- if (!this._itemMousedown && !this.mobile) {
6959
- this.selectOptionItem(value, false);
6960
- }
6961
- this._itemMousedown = false;
6962
- }
6963
- /** @hidden */
6964
- _getLabelledBy() {
6965
- let retVal = this.ariaLabelledBy;
6966
- if (this.stateMessage) {
6967
- retVal = retVal + ' fdp-list-message-combobox-state-message-' + this.id;
6968
- }
6969
- if (this.advancedStateMessage?.hasErrors && this.advancedStateMessage?.template) {
6970
- retVal = retVal + ' fdp-list-message-combobox-error-message-' + this.id;
6971
- }
6972
- return retVal;
6735
+ this.datetimeChange.emit(datetime);
6736
+ this.onTouched();
6973
6737
  }
6974
- /** @hidden if not selected update model */
6975
- _checkAndUpdate(modelValue) {
6976
- if (this.isSelectedOptionItem(modelValue)) {
6738
+ /**
6739
+ * @hidden
6740
+ * method that adjusts width of datetimepicker to take 100% container space
6741
+ */
6742
+ _adjustPickerWidth() {
6743
+ const customPopoverEl = this._elRef.nativeElement.querySelector('.fd-datetime .fd-popover-custom');
6744
+ if (!customPopoverEl) {
6977
6745
  return;
6978
6746
  }
6979
- this._updateModel(modelValue.value);
6980
- }
6981
- /** @hidden Update model */
6982
- _updateModel(value) {
6983
- // setting value, it will call setValue()
6984
- this.value = value;
6985
- this.emitChangeEvent(value ? value : null);
6986
- }
6987
- /** @hidden */
6988
- async _setUpMobileMode() {
6989
- const injector = Injector.create({
6990
- providers: [{ provide: COMBOBOX_COMPONENT, useValue: this }],
6991
- parent: this._injector
6992
- });
6993
- this._dynamicComponentService.createDynamicComponent({ listTemplate: this.listTemplate, controlTemplate: this.controlTemplate }, ComboboxMobileComponent, {
6994
- containerRef: this._viewContainerRef
6995
- }, { injector });
6996
- }
6997
- /** @hidden */
6998
- _getSelectedOptionItem(text) {
6999
- if (!this.isGroup) {
7000
- return this._suggestions.find((item) => item.label === text);
7001
- }
7002
- return this._suggestions
7003
- .reduce((result, item) => {
7004
- result.push(...(item.children ?? []));
7005
- return result;
7006
- }, [])
7007
- .find((item) => item.label === text);
6747
+ customPopoverEl.style.display = 'inline';
7008
6748
  }
7009
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ComboboxComponent, deps: [{ token: i1$2.DialogConfig, optional: true }, { token: i2.DynamicComponentService }, { token: i0.ViewContainerRef }, { token: i0.Injector }, { token: DATA_PROVIDERS, optional: true }, { token: ComboboxConfig }], target: i0.ɵɵFactoryTarget.Component }); }
7010
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: ComboboxComponent, isStandalone: true, selector: "fdp-combobox", outputs: { selectionChange: "selectionChange" }, providers: [
7011
- { provide: FD_FORM_FIELD_CONTROL, useExisting: ComboboxComponent, multi: true },
7012
- contentDensityObserverProviders()
7013
- ], viewQueries: [{ propertyName: "searchInputElement", first: true, predicate: ["searchInputElement"], descendants: true }, { propertyName: "controlTemplate", first: true, predicate: ["controlTemplate"], descendants: true }, { propertyName: "listTemplate", first: true, predicate: ["listTemplate"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template [ngTemplateOutlet]=\"mobile ? controlTemplate : desktopTemplate\"></ng-template>\n<ng-template #desktopTemplate>\n <fd-popover\n [isOpen]=\"isOpen && _suggestions.length > 0\"\n (isOpenChange)=\"isOpenChangeHandle($event)\"\n [fillControlMode]=\"fillControlMode\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"false\"\n [triggers]=\"triggers\"\n [disabled]=\"disabled || readonly\"\n [maxWidth]=\"autoResize ? null : minWidth\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n additionalBodyClass=\"fdp-combobox__popover\"\n >\n <fd-popover-control>\n <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n </fd-popover-control>\n <fd-popover-body [hidden]=\"_suggestions.length === 0\">\n <ng-template [ngTemplateOutlet]=\"listTemplate\"></ng-template>\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n<ng-template #controlTemplate>\n <fd-form-input-message-group>\n <fd-input-group\n [id]=\"id + '-input-group-container'\"\n [button]=\"!readonly\"\n [glyph]=\"!readonly ? 'navigation-down-arrow' : ' '\"\n [state]=\"mobile && isOpen ? null : state\"\n [buttonFocusable]=\"buttonFocusable\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [isControl]=\"true\"\n (addOnButtonClicked)=\"onPrimaryButtonClick()\"\n [isExpanded]=\"!mobile && isOpen && _suggestions.length > 0\"\n [attr.aria-disabled]=\"disabled\"\n [glyphAriaLabel]=\"ariaLabel\"\n (click)=\"openInMobileMode()\"\n >\n <input\n #searchInputElement\n fdp-auto-complete\n [options]=\"_suggestions\"\n [inputText]=\"inputText\"\n [mobile]=\"mobile\"\n (onComplete)=\"_onCompleteTerm($event)\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"_getLabelledBy()\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n [attr.aria-required]=\"required\"\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"id\"\n [name]=\"name\"\n (keydown)=\"onInputKeydownHandler($event)\"\n [disabled]=\"disabled\"\n [ngModel]=\"inputText\"\n (ngModelChange)=\"searchTermChanged($event)\"\n [placeholder]=\"placeholder\"\n (focus)=\"onTouched()\"\n (blur)=\"_onBlur($event)\"\n [attr.aria-expanded]=\"isOpen && _suggestions.length > 0\"\n [readonly]=\"readonly\"\n [attr.aria-readonly]=\"readonly\"\n />\n </fd-input-group>\n @if (isOpen) {\n <div class=\"fdp-combobox__count-list-results\" role=\"status\">\n @if (_flatSuggestions.length || '0'; as count) {\n {{\n (\n (count === 1\n ? 'platformCombobox.countListResultsSingular'\n : 'platformCombobox.countListResultsPlural'\n ) | fdTranslate: { count: count }\n )()\n }}\n }\n </div>\n }\n @if (mobile || isOpen ? null : !!stateMessage) {\n <fd-form-message [type]=\"state\" [innerHtml]=\"stateMessage\"></fd-form-message>\n }\n </fd-form-input-message-group>\n</ng-template>\n<ng-template #listTemplate>\n <ul\n fd-list\n [hasMessage]=\"!!stateMessage\"\n (focusEscapeList)=\"handleListFocusEscape($event)\"\n [dropdownMode]=\"true\"\n class=\"fdp-combobox__list\"\n [hasMessage]=\"!!stateMessage || (!!advancedStateMessage?.hasErrors && !!advancedStateMessage?.template)\"\n [id]=\"id + '-result'\"\n role=\"listbox\"\n [byline]=\"byline\"\n [attr.aria-labelledby]=\"id + '-search'\"\n [style.maxHeight]=\"!mobile && maxHeight\"\n [style.maxWidth]=\"autoResize && maxWidth + 'px'\"\n (keydown.tab)=\"_close()\"\n (keydown.shift.tab)=\"_close()\"\n >\n @if (stateMessage) {\n <li\n [attr.aria-label]=\"stateMessage\"\n fd-list-message\n tabindex=\"-1\"\n role=\"presentation\"\n [type]=\"state || 'default'\"\n [innerHtml]=\"stateMessage\"\n [attr.id]=\"'fdp-list-message-combobox-state-message-' + id\"\n ></li>\n }\n @if (advancedStateMessage?.hasErrors && advancedStateMessage?.template) {\n <li\n fd-list-message\n tabindex=\"-1\"\n role=\"presentation\"\n [type]=\"state || 'default'\"\n [attr.id]=\"'fdp-list-message-combobox-error-message-' + id\"\n >\n <ng-template [ngTemplateOutlet]=\"advancedStateMessage!.template!\"></ng-template>\n </li>\n }\n <ng-content></ng-content>\n @if (isGroup) {\n @for (group of _suggestions; track group) {\n @if (!groupItemTemplate) {\n <li fd-list-group-header role=\"option\">\n <span fd-list-title [attr.title]=\"group.label\">{{ group.label }}</span>\n </li>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"groupItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { label: group.label } }\"\n ></ng-template>\n }\n @for (optionItem of group.children; track optionItem; let i = $index) {\n <li\n (click)=\"handleOptionItem(optionItem)\"\n (mousedown)=\"_itemMousedown = true\"\n (focus)=\"onItemFocused(optionItem)\"\n fd-list-item\n ariaRole=\"option\"\n [tabindex]=\"0\"\n (keyDown)=\"handlePressEnter($event, optionItem)\"\n [selected]=\"isSelectedOptionItem(optionItem)\"\n [value]=\"optionItem\"\n >\n <ng-template\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-template>\n </li>\n }\n }\n } @else {\n @for (optionItem of _suggestions; track optionItem; let i = $index) {\n <li\n (click)=\"handleOptionItem(optionItem)\"\n (mousedown)=\"_itemMousedown = true\"\n (focus)=\"onItemFocused(optionItem)\"\n fd-list-item\n ariaRole=\"option\"\n [tabindex]=\"0\"\n (keyDown)=\"handlePressEnter($event, optionItem)\"\n [selected]=\"isSelectedOptionItem(optionItem)\"\n [value]=\"optionItem\"\n >\n <ng-template\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-template>\n </li>\n }\n }\n </ul>\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #listItem>\n @if (isSelectedOptionItem(optionItem) && !!selectedItemTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"selectedItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-template>\n }\n @if (!(isSelectedOptionItem(optionItem) && selectedItemTemplate)) {\n <ng-template\n [ngTemplateOutlet]=\"optionItemSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: index }\"\n ></ng-template>\n <ng-template\n [ngTemplateOutlet]=\"secondaryTextSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem }\"\n ></ng-template>\n }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #optionItemSource>\n @if (!optionItemTemplate) {\n <span [attr.title]=\"optionItem.label\" [innerHTML]=\"optionItem.label | highlight: inputText\"></span>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"optionItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-template>\n }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" #secondaryTextSource>\n @if (showSecondaryText) {\n @if (!secondaryItemTemplate) {\n <span\n [style.text-align]=\"secondaryTextAlignment\"\n fd-list-secondary\n [attr.title]=\"optionItem.secondaryText\"\n [innerHTML]=\"optionItem.secondaryText | highlight: inputText\"\n ></span>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"secondaryItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value }\"\n ></ng-template>\n }\n }\n</ng-template>\n", styles: [".fdp-combobox__count-list-results{position:absolute;opacity:0;z-index:-1}.fdp-combobox__list .fd-list__item{justify-content:space-between}.fdp-combobox__list .fd-list__item span{overflow:hidden;text-overflow:ellipsis;width:100%}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: PopoverComponent, selector: "fd-popover", inputs: ["config", "title", "trigger", "id", "mobile", "mobileConfig", "preventSpaceKeyScroll", "placement", "maxWidth", "fillControlMode", "closeOnOutsideClick", "closeOnEscapeKey", "disabled", "triggers", "focusTrapped", "focusAutoCapture", "restoreFocusOnClose", "noArrow", "disableScrollbar", "appendTo", "placementContainer", "scrollStrategy", "cdkPositions", "applyOverlay", "additionalBodyClass", "additionalTriggerClass", "closeOnNavigation", "fixedPosition", "resizable", "bodyAriaLabel", "bodyRole", "bodyAriaLabelledBy", "isOpen"], outputs: ["triggerChange", "isOpenChange", "beforeOpen"] }, { kind: "component", type: PopoverControlComponent, selector: "fd-popover-control, [fdPopoverControl]" }, { kind: "component", type: PopoverBodyComponent, selector: "fd-popover-body", inputs: ["minWidth", "maxWidth", "minHeight", "maxHeight"], outputs: ["onClose"] }, { kind: "component", type: FormInputMessageGroupComponent, selector: "fd-form-input-message-group", inputs: ["triggers", "closeOnOutsideClick", "fillControlMode", "noArrow", "closeOnEscapeKey", "placement", "placementContainer", "isOpen", "preventSpaceKeyScroll"], outputs: ["isOpenChange"] }, { kind: "ngmodule", type: InputGroupModule }, { kind: "component", type: i3$2.InputGroupComponent, selector: "fd-input-group", inputs: ["placement", "required", "inline", "addOnText", "buttonFocusable", "type", "glyph", "glyphFont", "button", "isControl", "showFocus", "isExpanded", "glyphAriaLabel", "addonButtonAriaHidden", "iconTitle", "ariaLabelledBy", "ariaLabel"], outputs: ["addOnButtonClicked", "search"] }, { kind: "directive", type: i3$2.InputGroupInputDirective, selector: "[fdInputGroupInput], [fd-input-group-input]", inputs: ["class"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: AutoCompleteDirective, selector: "[fdp-auto-complete]", inputs: ["options", "inputText", "mobile"], outputs: ["onComplete"] }, { kind: "component", type: FormMessageComponent, selector: "fd-form-message", inputs: ["type", "static", "embedded", "class"] }, { kind: "ngmodule", type: ListModule }, { kind: "component", type: i6.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "subline", "theme", "unreadIndicator", "role", "settingsList", "settingsListFooter", "searchResultsList"], outputs: ["focusEscapeList"] }, { kind: "component", type: i6.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "noData", "action", "interactive", "growing", "counter", "counterRole", "counterAriaLabel", "active", "unread", "byline", "ariaRole", "id", "preventClick", "settingsListTpl", "suggestion"], outputs: ["keyDown"], exportAs: ["fdListItem"] }, { kind: "directive", type: i6.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap", "truncate", "scope"] }, { kind: "directive", type: i6.ListGroupHeaderDirective, selector: "[fdListGroupHeader], [fd-list-group-header]", inputs: ["nativeElementId"], outputs: ["keyDown"] }, { kind: "directive", type: i6.ListSecondaryDirective, selector: "[fd-list-secondary], [fdListSecondary]", inputs: ["type"] }, { kind: "directive", type: i6.ListMessageDirective, selector: "[fd-list-message], [fdListMessage]", inputs: ["type", "class"] }, { kind: "ngmodule", type: ContentDensityModule }, { kind: "pipe", type: SearchHighlightPipe, name: "highlight" }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
6749
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformDatetimePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6750
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.5", type: PlatformDatetimePickerComponent, isStandalone: true, selector: "fdp-datetime-picker", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: false, isRequired: false, transformFunction: null }, appendTo: { classPropertyName: "appendTo", publicName: "appendTo", isSignal: false, isRequired: false, transformFunction: null }, meridian: { classPropertyName: "meridian", publicName: "meridian", isSignal: false, isRequired: false, transformFunction: null }, displaySeconds: { classPropertyName: "displaySeconds", publicName: "displaySeconds", isSignal: false, isRequired: false, transformFunction: null }, displayMinutes: { classPropertyName: "displayMinutes", publicName: "displayMinutes", isSignal: false, isRequired: false, transformFunction: null }, displayHours: { classPropertyName: "displayHours", publicName: "displayHours", isSignal: false, isRequired: false, transformFunction: null }, useValidation: { classPropertyName: "useValidation", publicName: "useValidation", isSignal: false, isRequired: false, transformFunction: null }, isOpen: { classPropertyName: "isOpen", publicName: "isOpen", isSignal: false, isRequired: false, transformFunction: null }, startingDayOfWeek: { classPropertyName: "startingDayOfWeek", publicName: "startingDayOfWeek", isSignal: false, isRequired: false, transformFunction: null }, activeView: { classPropertyName: "activeView", publicName: "activeView", isSignal: false, isRequired: false, transformFunction: null }, allowNull: { classPropertyName: "allowNull", publicName: "allowNull", isSignal: false, isRequired: false, transformFunction: null }, keepTwoDigitsTime: { classPropertyName: "keepTwoDigitsTime", publicName: "keepTwoDigitsTime", isSignal: false, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: false, isRequired: false, transformFunction: null }, buttonFocusable: { classPropertyName: "buttonFocusable", publicName: "buttonFocusable", isSignal: false, isRequired: false, transformFunction: null }, specialDaysRules: { classPropertyName: "specialDaysRules", publicName: "specialDaysRules", isSignal: false, isRequired: false, transformFunction: null }, yearGrid: { classPropertyName: "yearGrid", publicName: "yearGrid", isSignal: false, isRequired: false, transformFunction: null }, aggregatedYearGrid: { classPropertyName: "aggregatedYearGrid", publicName: "aggregatedYearGrid", isSignal: false, isRequired: false, transformFunction: null }, markWeekends: { classPropertyName: "markWeekends", publicName: "markWeekends", isSignal: false, isRequired: false, transformFunction: null }, spinnerButtons: { classPropertyName: "spinnerButtons", publicName: "spinnerButtons", isSignal: false, isRequired: false, transformFunction: null }, showWeekNumbers: { classPropertyName: "showWeekNumbers", publicName: "showWeekNumbers", isSignal: false, isRequired: false, transformFunction: null }, showFooter: { classPropertyName: "showFooter", publicName: "showFooter", isSignal: false, isRequired: false, transformFunction: null }, processInputOnBlur: { classPropertyName: "processInputOnBlur", publicName: "processInputOnBlur", isSignal: false, isRequired: false, transformFunction: null }, preventScrollOnFocus: { classPropertyName: "preventScrollOnFocus", publicName: "preventScrollOnFocus", isSignal: false, isRequired: false, transformFunction: null }, mobile: { classPropertyName: "mobile", publicName: "mobile", isSignal: false, isRequired: false, transformFunction: null }, mobileConfig: { classPropertyName: "mobileConfig", publicName: "mobileConfig", isSignal: false, isRequired: false, transformFunction: null }, mobileLandscape: { classPropertyName: "mobileLandscape", publicName: "mobileLandscape", isSignal: false, isRequired: false, transformFunction: null }, mobilePortrait: { classPropertyName: "mobilePortrait", publicName: "mobilePortrait", isSignal: false, isRequired: false, transformFunction: null }, showCalendarLegend: { classPropertyName: "showCalendarLegend", publicName: "showCalendarLegend", isSignal: true, isRequired: false, transformFunction: null }, legendCol: { classPropertyName: "legendCol", publicName: "legendCol", isSignal: true, isRequired: false, transformFunction: null }, disableFunction: { classPropertyName: "disableFunction", publicName: "disableFunction", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { isOpenChange: "isOpenChange", activeViewChange: "activeViewChange", datetimeChange: "datetimeChange", onClose: "onClose" }, providers: [{ provide: FD_FORM_FIELD_CONTROL, useExisting: PlatformDatetimePickerComponent, multi: true }], viewQueries: [{ propertyName: "dateTimePickerComponent", first: true, predicate: DatetimePickerComponent, descendants: true }, { propertyName: "_elRef", first: true, predicate: DatetimePickerComponent, descendants: true, read: ElementRef, static: true }, { propertyName: "_control", first: true, predicate: DatetimePickerComponent, descendants: true, read: NgControl, static: true }], usesInheritance: true, ngImport: i0, template: "<fd-datetime-picker\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-required]=\"_isRequired\"\n [ariaLabelledBy]=\"ariaLabelledBy\"\n [attr.ariaDescribedBy]=\"ariaDescribedBy\"\n [inputId]=\"id\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [placement]=\"placement\"\n [appendTo]=\"appendTo\"\n [meridian]=\"meridian\"\n [disabled]=\"disabled\"\n [displaySeconds]=\"displaySeconds\"\n [displayMinutes]=\"displayMinutes\"\n [displayHours]=\"displayHours\"\n [useValidation]=\"useValidation\"\n [isOpen]=\"isOpen\"\n [startingDayOfWeek]=\"startingDayOfWeek\"\n [activeView]=\"activeView\"\n [allowNull]=\"allowNull && !_isRequired\"\n [keepTwoDigitsTime]=\"keepTwoDigitsTime\"\n [state]=\"state\"\n [buttonFocusable]=\"buttonFocusable\"\n [specialDaysRules]=\"specialDaysRules\"\n [showCalendarLegend]=\"showCalendarLegend()\"\n [legendCol]=\"legendCol()\"\n [yearGrid]=\"yearGrid\"\n [aggregatedYearGrid]=\"aggregatedYearGrid\"\n [markWeekends]=\"markWeekends\"\n [spinnerButtons]=\"spinnerButtons\"\n [showWeekNumbers]=\"showWeekNumbers\"\n [showFooter]=\"showFooter\"\n [disableFunction]=\"disableFunction\"\n [processInputOnBlur]=\"processInputOnBlur\"\n [preventScrollOnFocus]=\"preventScrollOnFocus\"\n [mobile]=\"mobile\"\n [mobileConfig]=\"mobileConfig\"\n [mobileLandscape]=\"mobileLandscape\"\n [mobilePortrait]=\"mobilePortrait\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"handleDatetimeInputChange($event)\"\n (activeViewChange)=\"handleActiveViewChange($event)\"\n (isOpenChange)=\"handleOpenChange($event)\"\n (touched)=\"onTouched()\"\n>\n <ng-content></ng-content>\n</fd-datetime-picker>\n", dependencies: [{ kind: "component", type: DatetimePickerComponent, selector: "fd-datetime-picker", inputs: ["placeholder", "placement", "appendTo", "disabled", "inputId", "required", "customDateTimeFormat", "meridian", "displaySeconds", "ariaLabelledBy", "message", "messageTriggers", "displayMinutes", "displayHours", "useValidation", "date", "isOpen", "startingDayOfWeek", "activeView", "allowNull", "keepTwoDigitsTime", "state", "buttonFocusable", "yearGrid", "aggregatedYearGrid", "markWeekends", "spinnerButtons", "showWeekNumbers", "showFooter", "processInputOnBlur", "preventScrollOnFocus", "mobile", "mobileConfig", "mobileLandscape", "mobilePortrait", "isFullWidth", "specialDaysRules", "showCalendarLegend", "legendCol", "disableFunction"], outputs: ["isOpenChange", "activeViewChange", "dateChange", "calendarChange", "timeChange", "onClose", "touched"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
7014
6751
  }
7015
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: ComboboxComponent, decorators: [{
6752
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformDatetimePickerComponent, decorators: [{
7016
6753
  type: Component,
7017
- args: [{ selector: 'fdp-combobox', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
7018
- { provide: FD_FORM_FIELD_CONTROL, useExisting: ComboboxComponent, multi: true },
7019
- contentDensityObserverProviders()
7020
- ], imports: [
7021
- NgTemplateOutlet,
7022
- PopoverComponent,
7023
- PopoverControlComponent,
7024
- PopoverBodyComponent,
7025
- FormInputMessageGroupComponent,
7026
- InputGroupModule,
7027
- FormsModule,
7028
- AutoCompleteDirective,
7029
- FormMessageComponent,
7030
- ListModule,
7031
- NgClass,
7032
- ListSecondaryDirective,
7033
- SearchHighlightPipe,
7034
- FdTranslatePipe,
7035
- ContentDensityModule
7036
- ], template: "<ng-template [ngTemplateOutlet]=\"mobile ? controlTemplate : desktopTemplate\"></ng-template>\n<ng-template #desktopTemplate>\n <fd-popover\n [isOpen]=\"isOpen && _suggestions.length > 0\"\n (isOpenChange)=\"isOpenChangeHandle($event)\"\n [fillControlMode]=\"fillControlMode\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"false\"\n [triggers]=\"triggers\"\n [disabled]=\"disabled || readonly\"\n [maxWidth]=\"autoResize ? null : minWidth\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n additionalBodyClass=\"fdp-combobox__popover\"\n >\n <fd-popover-control>\n <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n </fd-popover-control>\n <fd-popover-body [hidden]=\"_suggestions.length === 0\">\n <ng-template [ngTemplateOutlet]=\"listTemplate\"></ng-template>\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n<ng-template #controlTemplate>\n <fd-form-input-message-group>\n <fd-input-group\n [id]=\"id + '-input-group-container'\"\n [button]=\"!readonly\"\n [glyph]=\"!readonly ? 'navigation-down-arrow' : ' '\"\n [state]=\"mobile && isOpen ? null : state\"\n [buttonFocusable]=\"buttonFocusable\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [isControl]=\"true\"\n (addOnButtonClicked)=\"onPrimaryButtonClick()\"\n [isExpanded]=\"!mobile && isOpen && _suggestions.length > 0\"\n [attr.aria-disabled]=\"disabled\"\n [glyphAriaLabel]=\"ariaLabel\"\n (click)=\"openInMobileMode()\"\n >\n <input\n #searchInputElement\n fdp-auto-complete\n [options]=\"_suggestions\"\n [inputText]=\"inputText\"\n [mobile]=\"mobile\"\n (onComplete)=\"_onCompleteTerm($event)\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"_getLabelledBy()\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n [attr.aria-required]=\"required\"\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"id\"\n [name]=\"name\"\n (keydown)=\"onInputKeydownHandler($event)\"\n [disabled]=\"disabled\"\n [ngModel]=\"inputText\"\n (ngModelChange)=\"searchTermChanged($event)\"\n [placeholder]=\"placeholder\"\n (focus)=\"onTouched()\"\n (blur)=\"_onBlur($event)\"\n [attr.aria-expanded]=\"isOpen && _suggestions.length > 0\"\n [readonly]=\"readonly\"\n [attr.aria-readonly]=\"readonly\"\n />\n </fd-input-group>\n @if (isOpen) {\n <div class=\"fdp-combobox__count-list-results\" role=\"status\">\n @if (_flatSuggestions.length || '0'; as count) {\n {{\n (\n (count === 1\n ? 'platformCombobox.countListResultsSingular'\n : 'platformCombobox.countListResultsPlural'\n ) | fdTranslate: { count: count }\n )()\n }}\n }\n </div>\n }\n @if (mobile || isOpen ? null : !!stateMessage) {\n <fd-form-message [type]=\"state\" [innerHtml]=\"stateMessage\"></fd-form-message>\n }\n </fd-form-input-message-group>\n</ng-template>\n<ng-template #listTemplate>\n <ul\n fd-list\n [hasMessage]=\"!!stateMessage\"\n (focusEscapeList)=\"handleListFocusEscape($event)\"\n [dropdownMode]=\"true\"\n class=\"fdp-combobox__list\"\n [hasMessage]=\"!!stateMessage || (!!advancedStateMessage?.hasErrors && !!advancedStateMessage?.template)\"\n [id]=\"id + '-result'\"\n role=\"listbox\"\n [byline]=\"byline\"\n [attr.aria-labelledby]=\"id + '-search'\"\n [style.maxHeight]=\"!mobile && maxHeight\"\n [style.maxWidth]=\"autoResize && maxWidth + 'px'\"\n (keydown.tab)=\"_close()\"\n (keydown.shift.tab)=\"_close()\"\n >\n @if (stateMessage) {\n <li\n [attr.aria-label]=\"stateMessage\"\n fd-list-message\n tabindex=\"-1\"\n role=\"presentation\"\n [type]=\"state || 'default'\"\n [innerHtml]=\"stateMessage\"\n [attr.id]=\"'fdp-list-message-combobox-state-message-' + id\"\n ></li>\n }\n @if (advancedStateMessage?.hasErrors && advancedStateMessage?.template) {\n <li\n fd-list-message\n tabindex=\"-1\"\n role=\"presentation\"\n [type]=\"state || 'default'\"\n [attr.id]=\"'fdp-list-message-combobox-error-message-' + id\"\n >\n <ng-template [ngTemplateOutlet]=\"advancedStateMessage!.template!\"></ng-template>\n </li>\n }\n <ng-content></ng-content>\n @if (isGroup) {\n @for (group of _suggestions; track group) {\n @if (!groupItemTemplate) {\n <li fd-list-group-header role=\"option\">\n <span fd-list-title [attr.title]=\"group.label\">{{ group.label }}</span>\n </li>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"groupItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { label: group.label } }\"\n ></ng-template>\n }\n @for (optionItem of group.children; track optionItem; let i = $index) {\n <li\n (click)=\"handleOptionItem(optionItem)\"\n (mousedown)=\"_itemMousedown = true\"\n (focus)=\"onItemFocused(optionItem)\"\n fd-list-item\n ariaRole=\"option\"\n [tabindex]=\"0\"\n (keyDown)=\"handlePressEnter($event, optionItem)\"\n [selected]=\"isSelectedOptionItem(optionItem)\"\n [value]=\"optionItem\"\n >\n <ng-template\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-template>\n </li>\n }\n }\n } @else {\n @for (optionItem of _suggestions; track optionItem; let i = $index) {\n <li\n (click)=\"handleOptionItem(optionItem)\"\n (mousedown)=\"_itemMousedown = true\"\n (focus)=\"onItemFocused(optionItem)\"\n fd-list-item\n ariaRole=\"option\"\n [tabindex]=\"0\"\n (keyDown)=\"handlePressEnter($event, optionItem)\"\n [selected]=\"isSelectedOptionItem(optionItem)\"\n [value]=\"optionItem\"\n >\n <ng-template\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-template>\n </li>\n }\n }\n </ul>\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #listItem>\n @if (isSelectedOptionItem(optionItem) && !!selectedItemTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"selectedItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-template>\n }\n @if (!(isSelectedOptionItem(optionItem) && selectedItemTemplate)) {\n <ng-template\n [ngTemplateOutlet]=\"optionItemSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: index }\"\n ></ng-template>\n <ng-template\n [ngTemplateOutlet]=\"secondaryTextSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem }\"\n ></ng-template>\n }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #optionItemSource>\n @if (!optionItemTemplate) {\n <span [attr.title]=\"optionItem.label\" [innerHTML]=\"optionItem.label | highlight: inputText\"></span>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"optionItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-template>\n }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" #secondaryTextSource>\n @if (showSecondaryText) {\n @if (!secondaryItemTemplate) {\n <span\n [style.text-align]=\"secondaryTextAlignment\"\n fd-list-secondary\n [attr.title]=\"optionItem.secondaryText\"\n [innerHTML]=\"optionItem.secondaryText | highlight: inputText\"\n ></span>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"secondaryItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value }\"\n ></ng-template>\n }\n }\n</ng-template>\n", styles: [".fdp-combobox__count-list-results{position:absolute;opacity:0;z-index:-1}.fdp-combobox__list .fd-list__item{justify-content:space-between}.fdp-combobox__list .fd-list__item span{overflow:hidden;text-overflow:ellipsis;width:100%}\n"] }]
7037
- }], ctorParameters: () => [{ type: i1$2.DialogConfig, decorators: [{
7038
- type: Optional
7039
- }] }, { type: i2.DynamicComponentService }, { type: i0.ViewContainerRef }, { type: i0.Injector }, { type: Map, decorators: [{
7040
- type: Optional
7041
- }, {
7042
- type: Inject,
7043
- args: [DATA_PROVIDERS]
7044
- }] }, { type: ComboboxConfig }], propDecorators: { selectionChange: [{
6754
+ args: [{ selector: 'fdp-datetime-picker', changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: FD_FORM_FIELD_CONTROL, useExisting: PlatformDatetimePickerComponent, multi: true }], imports: [DatetimePickerComponent, FormsModule], template: "<fd-datetime-picker\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-required]=\"_isRequired\"\n [ariaLabelledBy]=\"ariaLabelledBy\"\n [attr.ariaDescribedBy]=\"ariaDescribedBy\"\n [inputId]=\"id\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [placement]=\"placement\"\n [appendTo]=\"appendTo\"\n [meridian]=\"meridian\"\n [disabled]=\"disabled\"\n [displaySeconds]=\"displaySeconds\"\n [displayMinutes]=\"displayMinutes\"\n [displayHours]=\"displayHours\"\n [useValidation]=\"useValidation\"\n [isOpen]=\"isOpen\"\n [startingDayOfWeek]=\"startingDayOfWeek\"\n [activeView]=\"activeView\"\n [allowNull]=\"allowNull && !_isRequired\"\n [keepTwoDigitsTime]=\"keepTwoDigitsTime\"\n [state]=\"state\"\n [buttonFocusable]=\"buttonFocusable\"\n [specialDaysRules]=\"specialDaysRules\"\n [showCalendarLegend]=\"showCalendarLegend()\"\n [legendCol]=\"legendCol()\"\n [yearGrid]=\"yearGrid\"\n [aggregatedYearGrid]=\"aggregatedYearGrid\"\n [markWeekends]=\"markWeekends\"\n [spinnerButtons]=\"spinnerButtons\"\n [showWeekNumbers]=\"showWeekNumbers\"\n [showFooter]=\"showFooter\"\n [disableFunction]=\"disableFunction\"\n [processInputOnBlur]=\"processInputOnBlur\"\n [preventScrollOnFocus]=\"preventScrollOnFocus\"\n [mobile]=\"mobile\"\n [mobileConfig]=\"mobileConfig\"\n [mobileLandscape]=\"mobileLandscape\"\n [mobilePortrait]=\"mobilePortrait\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"handleDatetimeInputChange($event)\"\n (activeViewChange)=\"handleActiveViewChange($event)\"\n (isOpenChange)=\"handleOpenChange($event)\"\n (touched)=\"onTouched()\"\n>\n <ng-content></ng-content>\n</fd-datetime-picker>\n" }]
6755
+ }], ctorParameters: () => [], propDecorators: { value: [{
6756
+ type: Input
6757
+ }], placement: [{
6758
+ type: Input
6759
+ }], appendTo: [{
6760
+ type: Input
6761
+ }], meridian: [{
6762
+ type: Input
6763
+ }], displaySeconds: [{
6764
+ type: Input
6765
+ }], displayMinutes: [{
6766
+ type: Input
6767
+ }], displayHours: [{
6768
+ type: Input
6769
+ }], useValidation: [{
6770
+ type: Input
6771
+ }], isOpen: [{
6772
+ type: Input
6773
+ }], startingDayOfWeek: [{
6774
+ type: Input
6775
+ }], activeView: [{
6776
+ type: Input
6777
+ }], allowNull: [{
6778
+ type: Input
6779
+ }], keepTwoDigitsTime: [{
6780
+ type: Input
6781
+ }], state: [{
6782
+ type: Input
6783
+ }], buttonFocusable: [{
6784
+ type: Input
6785
+ }], specialDaysRules: [{
6786
+ type: Input
6787
+ }], yearGrid: [{
6788
+ type: Input
6789
+ }], aggregatedYearGrid: [{
6790
+ type: Input
6791
+ }], markWeekends: [{
6792
+ type: Input
6793
+ }], spinnerButtons: [{
6794
+ type: Input
6795
+ }], showWeekNumbers: [{
6796
+ type: Input
6797
+ }], showFooter: [{
6798
+ type: Input
6799
+ }], processInputOnBlur: [{
6800
+ type: Input
6801
+ }], preventScrollOnFocus: [{
6802
+ type: Input
6803
+ }], mobile: [{
6804
+ type: Input
6805
+ }], mobileConfig: [{
6806
+ type: Input
6807
+ }], mobileLandscape: [{
6808
+ type: Input
6809
+ }], mobilePortrait: [{
6810
+ type: Input
6811
+ }], isOpenChange: [{
7045
6812
  type: Output
7046
- }], searchInputElement: [{
6813
+ }], activeViewChange: [{
6814
+ type: Output
6815
+ }], datetimeChange: [{
6816
+ type: Output
6817
+ }], onClose: [{
6818
+ type: Output
6819
+ }], dateTimePickerComponent: [{
7047
6820
  type: ViewChild,
7048
- args: ['searchInputElement']
7049
- }], controlTemplate: [{
6821
+ args: [DatetimePickerComponent]
6822
+ }], _elRef: [{
7050
6823
  type: ViewChild,
7051
- args: ['controlTemplate']
7052
- }], listTemplate: [{
6824
+ args: [DatetimePickerComponent, { static: true, read: ElementRef }]
6825
+ }], _control: [{
7053
6826
  type: ViewChild,
7054
- args: ['listTemplate']
6827
+ args: [DatetimePickerComponent, { static: true, read: NgControl }]
6828
+ }], showCalendarLegend: [{ type: i0.Input, args: [{ isSignal: true, alias: "showCalendarLegend", required: false }] }], legendCol: [{ type: i0.Input, args: [{ isSignal: true, alias: "legendCol", required: false }] }], disableFunction: [{
6829
+ type: Input
7055
6830
  }] } });
7056
6831
 
7057
- const EXPORTABLE_COMPONENTS = [
7058
- ComboboxComponent,
7059
- ComboboxItemDirective,
7060
- ComboboxSelectedItemDirective,
7061
- ComboboxItemGroupDirective,
7062
- ComboboxSecondaryItemDirective
7063
- ];
7064
6832
  /**
7065
6833
  * @deprecated
7066
6834
  * Use direct imports of components and directives.
7067
6835
  */
7068
- class PlatformComboboxModule {
7069
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformComboboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
7070
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.5", ngImport: i0, type: PlatformComboboxModule, imports: [ComboboxComponent,
7071
- ComboboxItemDirective,
7072
- ComboboxSelectedItemDirective,
7073
- ComboboxItemGroupDirective,
7074
- ComboboxSecondaryItemDirective], exports: [ComboboxComponent,
7075
- ComboboxItemDirective,
7076
- ComboboxSelectedItemDirective,
7077
- ComboboxItemGroupDirective,
7078
- ComboboxSecondaryItemDirective] }); }
7079
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformComboboxModule, imports: [ComboboxComponent] }); }
6836
+ class PlatformDatetimePickerModule {
6837
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformDatetimePickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
6838
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.5", ngImport: i0, type: PlatformDatetimePickerModule, imports: [PlatformDatetimePickerComponent], exports: [PlatformDatetimePickerComponent] }); }
6839
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformDatetimePickerModule, imports: [PlatformDatetimePickerComponent] }); }
7080
6840
  }
7081
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformComboboxModule, decorators: [{
6841
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformDatetimePickerModule, decorators: [{
7082
6842
  type: NgModule,
7083
6843
  args: [{
7084
- imports: [...EXPORTABLE_COMPONENTS],
7085
- exports: [...EXPORTABLE_COMPONENTS]
6844
+ imports: [PlatformDatetimePickerComponent],
6845
+ exports: [PlatformDatetimePickerComponent]
7086
6846
  }]
7087
6847
  }] });
7088
6848
 
6849
+ const defaultFormGeneratorHintOptions = {
6850
+ placement: 'right',
6851
+ position: 'after',
6852
+ trigger: [
6853
+ { trigger: 'mouseenter', openAction: true, closeAction: false },
6854
+ { trigger: 'mouseleave', openAction: false, closeAction: true },
6855
+ { trigger: 'focusin', openAction: true, closeAction: false },
6856
+ { trigger: 'focusout', openAction: false, closeAction: true }
6857
+ ],
6858
+ glyph: 'hint',
6859
+ target: 'auto'
6860
+ };
6861
+
7089
6862
  /**
7090
- * @deprecated
7091
- * Use direct imports of components and directives.
6863
+ * @description
6864
+ * Structural directive, which hides current form item and toggles validation rules for it.
7092
6865
  */
7093
- class PlatformDatePickerModule {
7094
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformDatePickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
7095
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.5", ngImport: i0, type: PlatformDatePickerModule, imports: [PlatformDatePickerComponent], exports: [PlatformDatePickerComponent] }); }
7096
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformDatePickerModule, imports: [PlatformDatePickerComponent] }); }
6866
+ class DynamicFormControlFieldDirective {
6867
+ /**
6868
+ * @description Form control instance.
6869
+ */
6870
+ set fdpDynamicFormControlField(value) {
6871
+ this._control = value;
6872
+ this._originalValidators = this._control.formItem.validators;
6873
+ this._originalAsyncValidators = this._control.formItem.asyncValidators;
6874
+ this._updateView();
6875
+ }
6876
+ /**
6877
+ * @description boolean flag representing if current item should be shown.
6878
+ */
6879
+ set fdpDynamicFormControlFieldShow(value) {
6880
+ this.shouldShowFormItem = value;
6881
+ this._updateView();
6882
+ }
6883
+ /** @hidden */
6884
+ constructor(_templateRef, _viewContainer) {
6885
+ this._templateRef = _templateRef;
6886
+ this._viewContainer = _viewContainer;
6887
+ /**
6888
+ * @hidden
6889
+ */
6890
+ this._componentRemoved = true;
6891
+ }
6892
+ /** @hidden */
6893
+ ngOnInit() {
6894
+ this._updateView();
6895
+ }
6896
+ /**
6897
+ * @description If false, validation will be skipped from the form item control
6898
+ */
6899
+ set shouldShowFormItem(value) {
6900
+ if (value === this._shouldShowFormItem) {
6901
+ return;
6902
+ }
6903
+ this._shouldShowFormItem = value;
6904
+ if (!value) {
6905
+ this._control.clearValidators();
6906
+ this._control.clearAsyncValidators();
6907
+ }
6908
+ else {
6909
+ this._control.setValidators(this._originalValidators ?? []);
6910
+ this._control.setAsyncValidators(this._originalAsyncValidators ?? []);
6911
+ }
6912
+ this._control.updateValueAndValidity({ emitEvent: false });
6913
+ }
6914
+ /** @hidden */
6915
+ _updateView() {
6916
+ if (this._shouldShowFormItem && this._componentRemoved) {
6917
+ this._viewContainer.createEmbeddedView(this._templateRef);
6918
+ this._componentRemoved = false;
6919
+ }
6920
+ else if (!this._shouldShowFormItem) {
6921
+ this._viewContainer.clear();
6922
+ this._componentRemoved = true;
6923
+ }
6924
+ }
6925
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: DynamicFormControlFieldDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
6926
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.5", type: DynamicFormControlFieldDirective, isStandalone: true, selector: "[fdpDynamicFormControlField]", inputs: { fdpDynamicFormControlField: "fdpDynamicFormControlField", fdpDynamicFormControlFieldShow: "fdpDynamicFormControlFieldShow" }, ngImport: i0 }); }
7097
6927
  }
7098
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformDatePickerModule, decorators: [{
7099
- type: NgModule,
6928
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: DynamicFormControlFieldDirective, decorators: [{
6929
+ type: Directive,
7100
6930
  args: [{
7101
- imports: [PlatformDatePickerComponent],
7102
- exports: [PlatformDatePickerComponent]
6931
+ selector: '[fdpDynamicFormControlField]',
6932
+ standalone: true
7103
6933
  }]
7104
- }] });
6934
+ }], ctorParameters: () => [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }], propDecorators: { fdpDynamicFormControlField: [{
6935
+ type: Input
6936
+ }], fdpDynamicFormControlFieldShow: [{
6937
+ type: Input
6938
+ }] } });
7105
6939
 
7106
- /** @hidden */
7107
- function createMissingDateImplementationError(provider) {
7108
- return Error(`FdpDatetimePicker: No provider found for ${provider}. You must import one of the following ` +
7109
- `modules at your application root: FdDatetimeModule, or provide a ` +
7110
- `custom implementation.`);
6940
+ class FormGroupHeaderComponent {
6941
+ constructor() {
6942
+ /** Whether the header should wrap on multiple lines */
6943
+ this.allowWrap = input(false, { ...(ngDevMode ? { debugName: "allowWrap" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
6944
+ /** Fields Group */
6945
+ this.fieldGroup = input(null, /* @ts-ignore */
6946
+ ...(ngDevMode ? [{ debugName: "fieldGroup" }] : /* istanbul ignore next */ []));
6947
+ /** Hint options */
6948
+ this.hintOptions = computed(() => this.fieldGroup()?.hintOptions, /* @ts-ignore */
6949
+ ...(ngDevMode ? [{ debugName: "hintOptions" }] : /* istanbul ignore next */ []));
6950
+ }
6951
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FormGroupHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6952
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: FormGroupHeaderComponent, isStandalone: true, selector: "[fdp-form-group-header]", inputs: { allowWrap: { classPropertyName: "allowWrap", publicName: "allowWrap", isSignal: true, isRequired: false, transformFunction: null }, fieldGroup: { classPropertyName: "fieldGroup", publicName: "fieldGroup", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "fd-form-group__header" }, ngImport: i0, template: "@if (fieldGroup() && hintOptions()?.position === 'before') {\n <ng-template [ngTemplateOutlet]=\"inlineHelpRef\"></ng-template>\n}\n<h6 class=\"fd-form-group__header-text\" [class.fd-form-group__header-text--wrap]=\"allowWrap()\">\n {{ fieldGroup()?.label }}\n</h6>\n@if (fieldGroup() && hintOptions()?.position === 'after') {\n <ng-template [ngTemplateOutlet]=\"inlineHelpRef\"></ng-template>\n}\n<ng-template #inlineHelpRef>\n @if (hintOptions(); as options) {\n <span fd-link [undecorated]=\"true\">\n <fd-icon\n [style.vertical-align]=\"'middle'\"\n [fd-inline-help]=\"options.content\"\n [glyph]=\"options.glyph\"\n [placement]=\"options.placement ?? null\"\n [triggers]=\"options.trigger ?? []\"\n tabindex=\"0\"\n ></fd-icon>\n </span>\n }\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: LinkComponent, selector: "[fdLink], [fd-link]", inputs: ["emphasized", "disabled", "inverted", "subtle", "undecorated", "touchTarget"] }, { kind: "component", type: IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "size", "class", "ariaLabel", "ariaHidden"], outputs: ["ariaHiddenChange"] }, { kind: "directive", type: InlineHelpDirective, selector: "[fd-inline-help]:not([fd-inline-help-template]), [fd-inline-help-template]:not([fd-inline-help])", inputs: ["fd-inline-help", "placement", "triggers", "closeOnOutsideClick", "additionalBodyClass", "disabled", "bodyId", "bodyRole", "noArrow", "closeOnEscapeKey", "closeOnNavigation", "restoreFocusOnClose", "appendTo", "fixedPosition", "maxWidth", "scrollStrategy"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
6953
+ }
6954
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FormGroupHeaderComponent, decorators: [{
6955
+ type: Component,
6956
+ args: [{ selector: '[fdp-form-group-header]', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
6957
+ class: 'fd-form-group__header'
6958
+ }, imports: [NgTemplateOutlet, LinkComponent, IconComponent, InlineHelpDirective], template: "@if (fieldGroup() && hintOptions()?.position === 'before') {\n <ng-template [ngTemplateOutlet]=\"inlineHelpRef\"></ng-template>\n}\n<h6 class=\"fd-form-group__header-text\" [class.fd-form-group__header-text--wrap]=\"allowWrap()\">\n {{ fieldGroup()?.label }}\n</h6>\n@if (fieldGroup() && hintOptions()?.position === 'after') {\n <ng-template [ngTemplateOutlet]=\"inlineHelpRef\"></ng-template>\n}\n<ng-template #inlineHelpRef>\n @if (hintOptions(); as options) {\n <span fd-link [undecorated]=\"true\">\n <fd-icon\n [style.vertical-align]=\"'middle'\"\n [fd-inline-help]=\"options.content\"\n [glyph]=\"options.glyph\"\n [placement]=\"options.placement ?? null\"\n [triggers]=\"options.trigger ?? []\"\n tabindex=\"0\"\n ></fd-icon>\n </span>\n }\n</ng-template>\n" }]
6959
+ }], propDecorators: { allowWrap: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowWrap", required: false }] }], fieldGroup: [{ type: i0.Input, args: [{ isSignal: true, alias: "fieldGroup", required: false }] }] } });
6960
+
6961
+ class FieldGroupRowValuePipe {
6962
+ /** @hidden */
6963
+ transform(row) {
6964
+ return row.value instanceof FieldGroup ? row.value.fields : row.value;
6965
+ }
6966
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FieldGroupRowValuePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
6967
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.5", ngImport: i0, type: FieldGroupRowValuePipe, isStandalone: true, name: "fieldGroupRowValue" }); }
7111
6968
  }
6969
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FieldGroupRowValuePipe, decorators: [{
6970
+ type: Pipe,
6971
+ args: [{
6972
+ name: 'fieldGroupRowValue',
6973
+ standalone: true
6974
+ }]
6975
+ }] });
6976
+
6977
+ /**
6978
+ * @license
6979
+ * F. Kolar
6980
+ *
6981
+ * Licensed under the Apache License, Version 2.0 (the "License");
6982
+ * you may not use this file except in compliance with the License.
6983
+ * You may obtain a copy of the License at
6984
+ *
6985
+ * http://www.apache.org/licenses/LICENSE-2.0
6986
+ *
6987
+ * Unless required by applicable law or agreed to in writing, software
6988
+ * distributed under the License is distributed on an "AS IS" BASIS,
6989
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
6990
+ * See the License for the specific language governing permissions and
6991
+ * limitations under the License.
6992
+ *
6993
+ *
6994
+ */
6995
+ const formGroupProvider = {
6996
+ provide: FormGroupContainer,
6997
+ useExisting: forwardRef(() => FormGroupComponent)
6998
+ };
6999
+ let formGroupUniqueId = 0;
7000
+ /**
7001
+ *
7002
+ * FormGroup represent high order container aggregating FormFields and ability to distribute these
7003
+ * fields into columns. It mainly hides implementation details that we need to deal with every
7004
+ * time we are building a form. We have input fields , error managements, different states,
7005
+ * hints and many more.
7006
+ *
7007
+ * Well behaved form that has information side by side in multiple
7008
+ * columns needs to also know how to merge properly.
7009
+ *
7010
+ * Just to get the idea about the structure without actual input components inside
7011
+ *
7012
+ * ```html
7013
+ * <fdp-form-group [hintPlacement]="'inline'" columnLayout="XL2-L2-M1-S1">
7014
+ * <fdp-form-field [id]="'Field A'" [rank]="10" column="1">
7015
+ * </fdp-form-field>
7016
+ *
7017
+ * <fdp-form-field [id]="'Field B'" [rank]="30" column="1">
7018
+ * </fdp-form-field>
7019
+ *
7020
+ * <fdp-form-field [id]="'Field C'" [rank]="20" column="1">
7021
+ * </fdp-form-field>
7022
+ *
7023
+ * <fdp-form-field [id]="Field D" [rank]="20" column="2">
7024
+ * </fdp-form-field>
7025
+ *
7026
+ *
7027
+ * <fdp-form-field [id]="'Field E'" [rank]="30" column="2">
7028
+ * </fdp-form-field>
7029
+ * </fdp-form-group>
7112
7030
 
7113
- class PlatformDatetimePickerComponent extends BaseInput {
7114
- /**
7115
- * value for datetime
7116
- */
7117
- set value(value) {
7118
- super.setValue(value);
7119
- }
7120
- get value() {
7121
- return super.getValue();
7122
- }
7031
+ *
7032
+ * ````
7033
+ *
7034
+ *
7035
+ * Which can be translated like this
7036
+ * [Field A] - First column, rank 10
7037
+ * [Field B] - First column, rank 30
7038
+ * [Field C] - First column, rank 20
7039
+ * [Field D] - Second column, rank 20
7040
+ * [Field E] - Second column, rank 30
7041
+ *
7042
+ * What we expect that it creates following form with two column layout:
7043
+ * [Field A] [Field D]
7044
+ * [Field C] [Field E]
7045
+ * [Field B]
7046
+ *
7047
+ * You can see all is sorted accordingly by rank (C goes before B).
7048
+ *
7049
+ * When you move into smaller device and all is merged into one columns the naive solution would be:
7050
+ *
7051
+ * [Field A]
7052
+ * [Field C]
7053
+ * [Field B]
7054
+ * [Field D]
7055
+ * [Field E]
7056
+ *
7057
+ * The fields needs to restructure according to their original positioning. When Field D was on the
7058
+ * top why we should move it to the bottom? The more correct solution should be following.
7059
+ *
7060
+ * [Field A]
7061
+ * [Field D]
7062
+ * [Field C]
7063
+ * [Field E]
7064
+ * [Field B]
7065
+ *
7066
+ * Fields nicely merge together. they don't wrap.
7067
+ *
7068
+ *
7069
+ * Besides this layout support it also wraps form functionality and it can work with FormGroup.
7070
+ * You can also decide if you want your form with <form> element or without it.
7071
+ *
7072
+ *
7073
+ */
7074
+ class FormGroupComponent {
7123
7075
  /**
7124
- * The state of the form control - applies css classes.
7125
- * Can be `success`, `error`, `warning`, `information` or blank for default.
7076
+ * Defines column layout for inline items.
7126
7077
  */
7127
- set state(state) {
7128
- super.state = state;
7129
- }
7130
- get state() {
7131
- if (this.dateTimePickerComponent?.isInvalidDateInput) {
7132
- // if any other error from core dtp
7133
- return 'error';
7134
- }
7135
- return super.state;
7078
+ set inlineColumnLayout(value) {
7079
+ this._inlineColumnLayout = normalizeColumnLayout(value);
7080
+ this._updateInlineColumnLayout();
7136
7081
  }
7137
- /** @hidden */
7138
- get _isRequired() {
7139
- return !!this.formField?.required;
7082
+ get inlineColumnLayout() {
7083
+ return this._inlineColumnLayout;
7140
7084
  }
7141
7085
  /** @hidden */
7142
7086
  constructor() {
7143
- super();
7144
- /**
7145
- * The placement of the popover. It can be one of: top, top-start, top-end, bottom,
7146
- * bottom-start, bottom-end, right, right-start, right-end, left, left-start, left-end.
7147
- */
7148
- this.placement = 'bottom-start';
7149
- /** Whether to perform visual validation on the picker input. */
7150
- this.useValidation = true;
7151
- /** Whether the popover is open. Two-way binding is supported. */
7152
- this.isOpen = false;
7153
- /** Actually shown active view one of 'day' | 'month' | 'year' in calendar component*/
7154
- this.activeView = FdCalendarViewEnum.Day;
7155
- /** Whether a null input is considered valid. */
7156
- this.allowNull = true;
7157
- /**
7158
- * @Input when set to true time component will use 2 digits for each number.
7159
- * For example 9 will become 09
7160
- * but 12 will be kept as 12.
7161
- * Only uses by time component and does not change input format
7162
- */
7163
- this.keepTwoDigitsTime = false;
7164
- /**
7165
- * Whether AddOn Button should be focusable
7166
- * @default true
7167
- */
7168
- this.buttonFocusable = true;
7169
- /**
7170
- * Special days mark, it can be used by passing array of object with
7171
- * Special day number, list 1-20 [class:`fd-calendar__item--legend-{{number}}`] is available there:
7172
- * https://sap.github.io/fundamental-styles/components/calendar.html calendar special days section
7173
- * Rule accepts method with FdDate object as a parameter. ex:
7174
- * `rule: (fdDate: FdDate) => fdDate.getDay() === 1`, which will mark all sundays as special day.
7175
- */
7176
- this.specialDaysRules = [];
7177
- /**
7178
- * Object to customize year grid,
7179
- * Row, Columns and method to display year can be modified
7180
- */
7181
- this.yearGrid = {
7182
- rows: 4,
7183
- cols: 5
7184
- };
7185
- /**
7186
- * Object to customize aggregated year grid,
7187
- * Row, Columns and method to display year can be modified
7188
- */
7189
- this.aggregatedYearGrid = {
7190
- rows: 4,
7191
- cols: 3
7192
- };
7193
- /**
7194
- * Whether user wants to mark sunday/saturday with `fd-calendar__item--weekend` class
7195
- */
7196
- this.markWeekends = true;
7197
- /** @Input Whether to show spinner buttons */
7198
- this.spinnerButtons = true;
7087
+ /** Id for the form group element */
7088
+ this.id = `fdp-form-group-${formGroupUniqueId++}`;
7089
+ /** Indicates if group is editable */
7090
+ this.editable = true;
7091
+ /** Indicates when labels should not be displayed */
7092
+ this.noLabelLayout = false;
7199
7093
  /**
7200
- * Whether user wants to show week numbers next to days
7094
+ * Defines label's column layout.
7201
7095
  */
7202
- this.showWeekNumbers = true;
7203
- /** Whether or not to show the datetime picker footer with submit/cancel buttons. */
7204
- this.showFooter = true;
7096
+ this.labelColumnLayout = DefaultHorizontalLabelLayout;
7205
7097
  /**
7206
- * Whether to recalculate value from the input as user types or on blur.
7207
- * By default, updates the value as user types.
7208
- * @default false
7098
+ * Defines field's column layout.
7209
7099
  */
7210
- this.processInputOnBlur = false;
7100
+ this.fieldColumnLayout = DefaultHorizontalFieldLayout;
7211
7101
  /**
7212
- * Whether to prevent page scrolling when focusing date picker input field after calendar has been closed.
7102
+ * Defines gap column layout.
7213
7103
  */
7214
- this.preventScrollOnFocus = false;
7215
- /** Whether date picker should rendered in mobile mode. */
7216
- this.mobile = false;
7217
- /** Whether calendar is used inside mobile in landscape mode, it also adds close button on right side */
7218
- this.mobileLandscape = false;
7219
- /** Whether calendar is used inside mobile in portrait mode */
7220
- this.mobilePortrait = false;
7221
- /** Event emitted when the state of the isOpen property changes. */
7222
- this.isOpenChange = new EventEmitter();
7223
- /** Event thrown every time calendar active view is changed */
7224
- this.activeViewChange = new EventEmitter();
7225
- /** Event emitted when the date changes. This can be a time or day change. */
7226
- this.datetimeChange = new EventEmitter();
7227
- /** Event emitted when popover closes. */
7228
- this.onClose = new EventEmitter();
7104
+ this.gapColumnLayout = DefaultGapLayout;
7105
+ /** Whether to hide form's main title. Default is false. */
7106
+ this.hideMainTItle = false;
7107
+ /** Whether to wrap all the provided content in a `<form>` */
7108
+ this.useForm = false;
7109
+ /** Whether all form items should have identical layout provided for form group */
7110
+ this.unifiedLayout = true;
7229
7111
  /**
7230
- * Whether to show the calendar legend for special days.
7231
- * When enabled, displays a legend below the calendar showing the special day markers and their descriptions.
7232
- * @default false
7112
+ * onSubmit event
7233
7113
  */
7234
- this.showCalendarLegend = input(false, { ...(ngDevMode ? { debugName: "showCalendarLegend" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
7114
+ this.onSubmit = new EventEmitter();
7235
7115
  /**
7236
- * Whether to display the calendar legend in column layout.
7237
- * When true, legend items are displayed vertically in a single column.
7238
- * When false, legend items are displayed horizontally in rows.
7239
- * @default false
7116
+ * @hidden
7117
+ * Packed fields which should be rendered
7240
7118
  */
7241
- this.legendCol = input(false, { ...(ngDevMode ? { debugName: "legendCol" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
7119
+ this.formRows = {};
7242
7120
  /** @hidden */
7243
- this._dateTimeAdapter = inject(DatetimeAdapter, {
7244
- optional: true
7245
- });
7121
+ this.contentDensityObserver = inject(ContentDensityObserver);
7246
7122
  /** @hidden */
7247
- this._dateTimeFormats = inject(DATE_TIME_FORMATS, {
7248
- optional: true
7249
- });
7250
- /**
7251
- * Function used to disable certain dates in the calendar.
7252
- * @param fdDate FdDate
7253
- */
7254
- this.disableFunction = () => false;
7255
- /**
7256
- * Method that handles changes when popover is opened or closed.
7257
- */
7258
- this.handleOpenChange = (open) => {
7259
- this.isOpenChange.emit(open);
7260
- };
7123
+ this._destroyRef = inject(DestroyRef);
7124
+ /** @hidden */
7125
+ this._inlineColumnLayout = DefaultVerticalFieldLayout;
7261
7126
  /**
7262
- * Method that handle calendar active view change and throws event.
7127
+ * @hidden
7128
+ *
7129
+ * List of direct FdpFormGroup's children.
7130
+ *
7131
+ * Since "formGroupChildren" uses "{ descendants: true }" option that means
7132
+ * "formGroupChildren" will keep track of nested FdpFormGroup fields as well.
7133
+ * This list relies on the injection mechanism so nested FdpFormGroup's fields/fieldGroups
7134
+ * will be omitted
7263
7135
  */
7264
- this.handleActiveViewChange = (fdCalendarView) => {
7265
- this.activeViewChange.emit(fdCalendarView);
7266
- };
7267
- if (!this._dateTimeAdapter) {
7268
- throw createMissingDateImplementationError('DateTimeAdapter');
7136
+ this._formGroupDirectChildren = [];
7137
+ /** @hidden */
7138
+ this._subscriptions = new Subscription();
7139
+ /** @hidden */
7140
+ this._cd = inject(ChangeDetectorRef);
7141
+ /** @hidden */
7142
+ this._elementRef = inject(ElementRef);
7143
+ /** @hidden */
7144
+ this._formContainer = inject(ControlContainer, { optional: true });
7145
+ /** @hidden */
7146
+ this._defaultHintOptions = inject(FDP_FORM_FIELD_HINT_OPTIONS_DEFAULT);
7147
+ /** @hidden used for template side Type correction */
7148
+ this.$fieldGroup = (f) => f;
7149
+ this.formGroup = (this._formContainer ? this._formContainer.control : new FormGroup({}));
7150
+ }
7151
+ /** @hidden */
7152
+ ngOnChanges(changes) {
7153
+ this.buildComponentCssClass();
7154
+ if (changes.hint) {
7155
+ if (typeof this.hint === 'string' || this.hint instanceof TemplateRef) {
7156
+ this._hintOptions = {
7157
+ ...this._defaultHintOptions,
7158
+ content: this.hint
7159
+ };
7160
+ }
7161
+ else {
7162
+ this._hintOptions = {
7163
+ ...this._defaultHintOptions,
7164
+ ...this.hint
7165
+ };
7166
+ }
7269
7167
  }
7270
- if (!this._dateTimeFormats) {
7271
- throw createMissingDateImplementationError('DATE_TIME_FORMATS');
7168
+ }
7169
+ /** @hidden */
7170
+ ngOnInit() {
7171
+ if (!this.formGroup) {
7172
+ this.formGroup = new FormGroup({});
7272
7173
  }
7273
- // default model value
7274
- this.value = this._dateTimeAdapter.now();
7174
+ this.buildComponentCssClass();
7175
+ this._updateInlineColumnLayout();
7176
+ }
7177
+ /** @hidden */
7178
+ ngAfterContentInit() {
7179
+ this.i18Strings = this.i18Strings ? this.i18Strings : this.i18Template;
7180
+ this._setUserLayout();
7181
+ this._updateFieldByColumn();
7182
+ this._updateFormFieldsProperties();
7183
+ this._listenToFormGroupChildren();
7184
+ this._listenFormFieldColumnChange();
7185
+ this._cd.markForCheck();
7186
+ }
7187
+ /** @hidden */
7188
+ ngAfterViewInit() {
7189
+ this.i18Strings = this.i18Strings ? this.i18Strings : this.i18Template;
7190
+ this._setUserLayout();
7191
+ this._updateFieldByColumn();
7192
+ this._updateFormFieldsProperties();
7193
+ this._listenToFormGroupChildren();
7194
+ this._listenFormFieldColumnChange();
7195
+ this._trackFormGroupResize();
7196
+ this._cd.markForCheck();
7197
+ this._cd.detectChanges();
7198
+ }
7199
+ /** @hidden */
7200
+ ngOnDestroy() {
7201
+ this._subscriptions.unsubscribe();
7202
+ }
7203
+ /** @hidden */
7204
+ addFormField(formField) {
7205
+ // It's needed to set default FormField properties
7206
+ // on early stage otherwise validation errors
7207
+ // will be thrown on FormField level (e.g. i18string are not defined)
7208
+ this._updateFormFieldProperties(formField);
7209
+ // keep track of directly registered children
7210
+ this._addDirectFormGroupChild(formField);
7211
+ }
7212
+ /** @hidden */
7213
+ removeFormField(formField) {
7214
+ this._removeDirectFormGroupChild(formField);
7215
+ }
7216
+ /** @hidden */
7217
+ addFormFieldGroup(formFieldGroup) {
7218
+ this._addDirectFormGroupChild(formFieldGroup);
7219
+ }
7220
+ /** @hidden */
7221
+ removeFormFieldGroup(formFieldGroup) {
7222
+ this._removeDirectFormGroupChild(formFieldGroup);
7223
+ }
7224
+ /** @hidden */
7225
+ addFormControl(name, control) {
7226
+ this.formGroup.setControl(name, control);
7227
+ // letting control to set value. when provided value is 'false'.
7228
+ if (this.object) {
7229
+ control.patchValue(this.object[name]);
7230
+ }
7231
+ }
7232
+ /** @hidden */
7233
+ removeFormControl(name) {
7234
+ this.formGroup.removeControl(name);
7235
+ }
7236
+ /** @hidden */
7237
+ trackByFn(index) {
7238
+ return index;
7239
+ }
7240
+ /** @hidden */
7241
+ trackByFieldName(index, field) {
7242
+ return field ? field.name : undefined;
7243
+ }
7244
+ /** @hidden */
7245
+ buildComponentCssClass() {
7246
+ return ['fd-container', this.class];
7247
+ }
7248
+ /** @hidden */
7249
+ _listenToFormGroupChildren() {
7250
+ this.formGroupChildren.changes.subscribe(() => {
7251
+ this._updateFieldByColumn();
7252
+ this._cd.markForCheck();
7253
+ });
7254
+ }
7255
+ /** @hidden */
7256
+ _listenFormFieldColumnChange() {
7257
+ this.formGroupChildren.forEach((field) => field.onColumnChange?.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {
7258
+ this._updateFieldByColumn();
7259
+ this._cd.markForCheck();
7260
+ }));
7275
7261
  }
7276
7262
  /**
7277
7263
  * @hidden
7264
+ * Assign a fields or field group to specified columns with rank.
7265
+ * if `columnLayoutType` is given a fields without column property will set on last column.
7266
+ * Otherwise the fields set 1 column.
7278
7267
  */
7279
- ngAfterViewInit() {
7280
- // if used with platform forms, adjust width of datetimepicker to take 100% container space
7281
- if (this.formField) {
7282
- this._adjustPickerWidth();
7268
+ _updateFieldByColumn() {
7269
+ const formChildren = this._getFormGroupChildren();
7270
+ const rows = {};
7271
+ let rowNumber = 0;
7272
+ let columns = {};
7273
+ for (const child of formChildren) {
7274
+ if (isFieldChild(child)) {
7275
+ const field = getField(child);
7276
+ const columnNumber = this._validateFieldColumn(child.column);
7277
+ if (!columns[columnNumber]) {
7278
+ columns[columnNumber] = [];
7279
+ }
7280
+ columns[columnNumber].push(field);
7281
+ }
7282
+ if (isFieldGroupChild(child)) {
7283
+ const fieldGroupColumns = {};
7284
+ if (Object.keys(columns).length) {
7285
+ rows[rowNumber] = columns;
7286
+ columns = {};
7287
+ rowNumber++;
7288
+ }
7289
+ const groupFields = child.fields.map((field) => getField(field));
7290
+ groupFields.forEach((groupField) => {
7291
+ const columnNumber = this._validateFieldColumn(groupField.column);
7292
+ if (!fieldGroupColumns[columnNumber]) {
7293
+ fieldGroupColumns[columnNumber] = [];
7294
+ }
7295
+ fieldGroupColumns[columnNumber].push(groupField);
7296
+ });
7297
+ rows[rowNumber] = new FieldGroup(child.label, fieldGroupColumns, child.hintOptions);
7298
+ rowNumber++;
7299
+ }
7300
+ }
7301
+ rows[rowNumber] = columns;
7302
+ this.formRows = rows;
7303
+ }
7304
+ /** @hidden Validate column number */
7305
+ _validateFieldColumn(columnNumber) {
7306
+ if (this.columnLayout && columnNumber) {
7307
+ if (isNaN(columnNumber)) {
7308
+ throw new Error('Input a valid column number');
7309
+ }
7310
+ if (columnNumber > this.xlColumnsNumber) {
7311
+ throw new Error(`Columns cannot be more than ${this.xlColumnsNumber}`);
7312
+ }
7313
+ return columnNumber;
7283
7314
  }
7315
+ return this.xlColumnsNumber;
7284
7316
  }
7285
7317
  /** @hidden */
7286
- writeValue(value) {
7287
- super.writeValue(value);
7288
- this.markForCheck();
7318
+ _updateFormFieldsProperties() {
7319
+ this._getFormGroupChildren().forEach((formField) => {
7320
+ if (isFieldChild(formField)) {
7321
+ this._updateFormFieldProperties(formField);
7322
+ }
7323
+ if (isFieldGroupChild(formField)) {
7324
+ formField.fields.forEach((field) => this._updateFormFieldProperties(getFormField(field)));
7325
+ }
7326
+ });
7289
7327
  }
7290
7328
  /**
7291
7329
  * @hidden
7292
- * override base functionality to catch new disabled state
7330
+ * Pass some global properties to each field. Even formGroup cna be inject directly inside form
7331
+ * field we are using here a setter method to initialize the
7332
+ *
7293
7333
  */
7294
- setDisabledState(disabled) {
7295
- super.setDisabledState(disabled);
7296
- this.dateTimePickerComponent?.setDisabledState(disabled);
7334
+ _updateFormFieldProperties(formField) {
7335
+ if (this.unifiedLayout) {
7336
+ formField.editable = this.editable;
7337
+ formField.noLabelLayout = this.noLabelLayout;
7338
+ }
7339
+ formField.setDefaultColumnLayout();
7340
+ formField.i18Strings = formField.i18Strings ? formField.i18Strings : this.i18Strings;
7341
+ formField.setErrorDirectives(this._errorDirectives);
7297
7342
  }
7298
7343
  /**
7299
7344
  * @hidden
7300
- * logic to handle validation from both platform forms and core datetiimepicker
7301
- * @param datetime inputted
7345
+ * if `columnLayoutType` is given, set those column layouts appropriately. Otherwise, a layout will set on 1 column
7302
7346
  */
7303
- handleDatetimeInputChange(datetime) {
7304
- if (this.dateTimePickerComponent) {
7305
- if (this.dateTimePickerComponent._isInvalidDateInput) {
7306
- if (this.ngControl?.control && this._control.value) {
7307
- this.ngControl.control.setErrors(this._control.errors);
7308
- }
7309
- this.state = 'error';
7347
+ _setUserLayout() {
7348
+ if (this.columnLayout) {
7349
+ this._getColumnNumbers(this.columnLayout);
7350
+ if (isNaN(this.xlColumnsNumber) || isNaN(this.lgColumnsNumber) || isNaN(this.mdColumnsNumber)) {
7351
+ throw new Error('Input a valid number for columns');
7310
7352
  }
7311
- else {
7312
- if (!this.dateTimePickerComponent._inputFieldDate && !this.allowNull) {
7313
- this.state = 'error'; // null value in not allowNull should throw error
7314
- }
7315
- else {
7316
- this.state = undefined; // resetting to default state
7317
- }
7353
+ if (this.xlColumnsNumber > 12 || this.lgColumnsNumber > 12 || this.mdColumnsNumber > 12) {
7354
+ throw new Error('Columns cannot be more than 12');
7318
7355
  }
7319
- // only set the value if it is a valid datetime object
7320
- if (this.dateTimePickerComponent._inputFieldDate) {
7321
- this.value = datetime;
7356
+ const lgColumns = 12 / this.lgColumnsNumber;
7357
+ const mdColumns = 12 / this.mdColumnsNumber;
7358
+ const xlColumns = 12 / this.xlColumnsNumber;
7359
+ // for `lg` single-column layout, Styles does not use any class, and providing `fd-col-lg--12` has unintended side-effects
7360
+ // therefore, we remove the lg class for single-column layout
7361
+ if (lgColumns === 12) {
7362
+ this.xlCol = `fd-col-xl--${xlColumns} fd-col-md--${mdColumns}`;
7363
+ }
7364
+ else {
7365
+ this.xlCol = `fd-col-xl--${xlColumns} fd-col-md--${mdColumns} fd-col-lg--${lgColumns}`;
7322
7366
  }
7323
- this.stateChanges.next('datetime picker: handleDatetimeInputChange');
7324
7367
  }
7325
- this.datetimeChange.emit(datetime);
7326
- this.onTouched();
7368
+ else {
7369
+ this.xlCol = `fd-col-xl--12 fd-col-md--12 fd-col-lg--12`;
7370
+ }
7371
+ }
7372
+ /** @hidden */
7373
+ _getColumnNumbers(layout) {
7374
+ const [xl, lg, md] = layout.split('-');
7375
+ this.xlColumnsNumber = parseInt(xl.slice(2, xl.length), 10);
7376
+ this.lgColumnsNumber = parseInt(lg.slice(1, lg.length), 10);
7377
+ this.mdColumnsNumber = parseInt(md.slice(1, md.length), 10);
7378
+ }
7379
+ /** @hidden */
7380
+ _addDirectFormGroupChild(child) {
7381
+ if (this._formGroupDirectChildren.indexOf(child) > -1) {
7382
+ return;
7383
+ }
7384
+ this._formGroupDirectChildren.push(child);
7385
+ }
7386
+ /** @hidden */
7387
+ _removeDirectFormGroupChild(child) {
7388
+ this._formGroupDirectChildren = this._formGroupDirectChildren.filter((_child) => _child !== child);
7327
7389
  }
7328
7390
  /**
7329
7391
  * @hidden
7330
- * method that adjusts width of datetimepicker to take 100% container space
7392
+ * Get direct form group children in the original order
7393
+ */
7394
+ _getFormGroupChildren() {
7395
+ if (!this.formGroupChildren) {
7396
+ return [];
7397
+ }
7398
+ const children = this.formGroupChildren
7399
+ .toArray()
7400
+ .map((child) => (isFieldGroupWrapperChild(child) ? child.fieldRenderer : child));
7401
+ return children.filter((child) => this._formGroupDirectChildren.includes(child));
7402
+ }
7403
+ /** @hidden */
7404
+ _updateInlineColumnLayout() {
7405
+ this._inlineColumnLayoutClass = generateColumnClass(this.inlineColumnLayout);
7406
+ }
7407
+ /**
7408
+ * @hidden
7409
+ * have to trigger change detection here in order to re-check contents
7410
+ * inside "FormField.renderer" template every time component's dimensions changed
7331
7411
  */
7332
- _adjustPickerWidth() {
7333
- const customPopoverEl = this._elRef.nativeElement.querySelector('.fd-datetime .fd-popover-custom');
7334
- if (!customPopoverEl) {
7335
- return;
7336
- }
7337
- customPopoverEl.style.display = 'inline';
7412
+ _trackFormGroupResize() {
7413
+ this._subscriptions.add(resizeObservable(this._elementRef.nativeElement)
7414
+ .pipe(debounceTime(20))
7415
+ .subscribe(() => this._cd.markForCheck()));
7338
7416
  }
7339
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformDatetimePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7340
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.5", type: PlatformDatetimePickerComponent, isStandalone: true, selector: "fdp-datetime-picker", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: false, isRequired: false, transformFunction: null }, appendTo: { classPropertyName: "appendTo", publicName: "appendTo", isSignal: false, isRequired: false, transformFunction: null }, meridian: { classPropertyName: "meridian", publicName: "meridian", isSignal: false, isRequired: false, transformFunction: null }, displaySeconds: { classPropertyName: "displaySeconds", publicName: "displaySeconds", isSignal: false, isRequired: false, transformFunction: null }, displayMinutes: { classPropertyName: "displayMinutes", publicName: "displayMinutes", isSignal: false, isRequired: false, transformFunction: null }, displayHours: { classPropertyName: "displayHours", publicName: "displayHours", isSignal: false, isRequired: false, transformFunction: null }, useValidation: { classPropertyName: "useValidation", publicName: "useValidation", isSignal: false, isRequired: false, transformFunction: null }, isOpen: { classPropertyName: "isOpen", publicName: "isOpen", isSignal: false, isRequired: false, transformFunction: null }, startingDayOfWeek: { classPropertyName: "startingDayOfWeek", publicName: "startingDayOfWeek", isSignal: false, isRequired: false, transformFunction: null }, activeView: { classPropertyName: "activeView", publicName: "activeView", isSignal: false, isRequired: false, transformFunction: null }, allowNull: { classPropertyName: "allowNull", publicName: "allowNull", isSignal: false, isRequired: false, transformFunction: null }, keepTwoDigitsTime: { classPropertyName: "keepTwoDigitsTime", publicName: "keepTwoDigitsTime", isSignal: false, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: false, isRequired: false, transformFunction: null }, buttonFocusable: { classPropertyName: "buttonFocusable", publicName: "buttonFocusable", isSignal: false, isRequired: false, transformFunction: null }, specialDaysRules: { classPropertyName: "specialDaysRules", publicName: "specialDaysRules", isSignal: false, isRequired: false, transformFunction: null }, yearGrid: { classPropertyName: "yearGrid", publicName: "yearGrid", isSignal: false, isRequired: false, transformFunction: null }, aggregatedYearGrid: { classPropertyName: "aggregatedYearGrid", publicName: "aggregatedYearGrid", isSignal: false, isRequired: false, transformFunction: null }, markWeekends: { classPropertyName: "markWeekends", publicName: "markWeekends", isSignal: false, isRequired: false, transformFunction: null }, spinnerButtons: { classPropertyName: "spinnerButtons", publicName: "spinnerButtons", isSignal: false, isRequired: false, transformFunction: null }, showWeekNumbers: { classPropertyName: "showWeekNumbers", publicName: "showWeekNumbers", isSignal: false, isRequired: false, transformFunction: null }, showFooter: { classPropertyName: "showFooter", publicName: "showFooter", isSignal: false, isRequired: false, transformFunction: null }, processInputOnBlur: { classPropertyName: "processInputOnBlur", publicName: "processInputOnBlur", isSignal: false, isRequired: false, transformFunction: null }, preventScrollOnFocus: { classPropertyName: "preventScrollOnFocus", publicName: "preventScrollOnFocus", isSignal: false, isRequired: false, transformFunction: null }, mobile: { classPropertyName: "mobile", publicName: "mobile", isSignal: false, isRequired: false, transformFunction: null }, mobileConfig: { classPropertyName: "mobileConfig", publicName: "mobileConfig", isSignal: false, isRequired: false, transformFunction: null }, mobileLandscape: { classPropertyName: "mobileLandscape", publicName: "mobileLandscape", isSignal: false, isRequired: false, transformFunction: null }, mobilePortrait: { classPropertyName: "mobilePortrait", publicName: "mobilePortrait", isSignal: false, isRequired: false, transformFunction: null }, showCalendarLegend: { classPropertyName: "showCalendarLegend", publicName: "showCalendarLegend", isSignal: true, isRequired: false, transformFunction: null }, legendCol: { classPropertyName: "legendCol", publicName: "legendCol", isSignal: true, isRequired: false, transformFunction: null }, disableFunction: { classPropertyName: "disableFunction", publicName: "disableFunction", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { isOpenChange: "isOpenChange", activeViewChange: "activeViewChange", datetimeChange: "datetimeChange", onClose: "onClose" }, providers: [{ provide: FD_FORM_FIELD_CONTROL, useExisting: PlatformDatetimePickerComponent, multi: true }], viewQueries: [{ propertyName: "dateTimePickerComponent", first: true, predicate: DatetimePickerComponent, descendants: true }, { propertyName: "_elRef", first: true, predicate: DatetimePickerComponent, descendants: true, read: ElementRef, static: true }, { propertyName: "_control", first: true, predicate: DatetimePickerComponent, descendants: true, read: NgControl, static: true }], usesInheritance: true, ngImport: i0, template: "<fd-datetime-picker\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-required]=\"_isRequired\"\n [ariaLabelledBy]=\"ariaLabelledBy\"\n [attr.ariaDescribedBy]=\"ariaDescribedBy\"\n [inputId]=\"id\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [placement]=\"placement\"\n [appendTo]=\"appendTo\"\n [meridian]=\"meridian\"\n [disabled]=\"disabled\"\n [displaySeconds]=\"displaySeconds\"\n [displayMinutes]=\"displayMinutes\"\n [displayHours]=\"displayHours\"\n [useValidation]=\"useValidation\"\n [isOpen]=\"isOpen\"\n [startingDayOfWeek]=\"startingDayOfWeek\"\n [activeView]=\"activeView\"\n [allowNull]=\"allowNull && !_isRequired\"\n [keepTwoDigitsTime]=\"keepTwoDigitsTime\"\n [state]=\"state\"\n [buttonFocusable]=\"buttonFocusable\"\n [specialDaysRules]=\"specialDaysRules\"\n [showCalendarLegend]=\"showCalendarLegend()\"\n [legendCol]=\"legendCol()\"\n [yearGrid]=\"yearGrid\"\n [aggregatedYearGrid]=\"aggregatedYearGrid\"\n [markWeekends]=\"markWeekends\"\n [spinnerButtons]=\"spinnerButtons\"\n [showWeekNumbers]=\"showWeekNumbers\"\n [showFooter]=\"showFooter\"\n [disableFunction]=\"disableFunction\"\n [processInputOnBlur]=\"processInputOnBlur\"\n [preventScrollOnFocus]=\"preventScrollOnFocus\"\n [mobile]=\"mobile\"\n [mobileConfig]=\"mobileConfig\"\n [mobileLandscape]=\"mobileLandscape\"\n [mobilePortrait]=\"mobilePortrait\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"handleDatetimeInputChange($event)\"\n (activeViewChange)=\"handleActiveViewChange($event)\"\n (isOpenChange)=\"handleOpenChange($event)\"\n (touched)=\"onTouched()\"\n>\n <ng-content></ng-content>\n</fd-datetime-picker>\n", dependencies: [{ kind: "component", type: DatetimePickerComponent, selector: "fd-datetime-picker", inputs: ["placeholder", "placement", "appendTo", "disabled", "inputId", "required", "customDateTimeFormat", "meridian", "displaySeconds", "ariaLabelledBy", "message", "messageTriggers", "displayMinutes", "displayHours", "useValidation", "date", "isOpen", "startingDayOfWeek", "activeView", "allowNull", "keepTwoDigitsTime", "state", "buttonFocusable", "yearGrid", "aggregatedYearGrid", "markWeekends", "spinnerButtons", "showWeekNumbers", "showFooter", "processInputOnBlur", "preventScrollOnFocus", "mobile", "mobileConfig", "mobileLandscape", "mobilePortrait", "isFullWidth", "specialDaysRules", "showCalendarLegend", "legendCol", "disableFunction"], outputs: ["isOpenChange", "activeViewChange", "dateChange", "calendarChange", "timeChange", "onClose", "touched"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
7417
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FormGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7418
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: FormGroupComponent, isStandalone: true, selector: "fdp-form-group", inputs: { id: "id", name: "name", editable: "editable", noLabelLayout: "noLabelLayout", class: "class", hint: "hint", inlineColumnLayout: "inlineColumnLayout", labelColumnLayout: "labelColumnLayout", fieldColumnLayout: "fieldColumnLayout", gapColumnLayout: "gapColumnLayout", formGroup: "formGroup", topTitle: "topTitle", mainTitle: "mainTitle", hideMainTItle: "hideMainTItle", object: "object", i18Strings: "i18Strings", useForm: ["useForm", "useForm", booleanAttribute], columnLayout: "columnLayout", unifiedLayout: "unifiedLayout" }, outputs: { onSubmit: "onSubmit" }, providers: [formGroupProvider, FormFieldLayoutService, contentDensityObserverProviders()], queries: [{ propertyName: "i18Template", first: true, predicate: ["i18n"], descendants: true, static: true }, { propertyName: "formGroupChildren", predicate: FORM_GROUP_CHILD_FIELD_TOKEN, descendants: true }, { propertyName: "_errorDirectives", predicate: FormFieldErrorDirective }], viewQueries: [{ propertyName: "nativeForm", first: true, predicate: ["nativeForm"], descendants: true, read: NgForm }], usesOnChanges: true, ngImport: i0, template: "@if (useForm) {\n <form #nativeForm (ngSubmit)=\"onSubmit.emit($event)\" [id]=\"id\" [name]=\"name\">\n <ng-template [ngTemplateOutlet]=\"body\"></ng-template>\n </form>\n} @else {\n <!-- Render fields and field groups with assigned columns -->\n <ng-template [ngTemplateOutlet]=\"fields\"></ng-template>\n}\n<ng-template #body>\n <!-- Render fields and field groups with assigned columns -->\n <ng-template [ngTemplateOutlet]=\"fields\"></ng-template>\n</ng-template>\n<ng-template #fields>\n @if (mainTitle && !hideMainTItle) {\n <div class=\"fd-form-header\">\n <ng-template [ngTemplateOutlet]=\"mainTitleTemplate\"></ng-template>\n </div>\n }\n <div\n class=\"fd-container fd-form-layout-grid-container\"\n [class.is-compact]=\"contentDensityObserver.isCompactSignal()\"\n >\n @for (column of formRows | keyvalue; track $index) {\n <div class=\"fd-row\">\n @for (fields of column | fieldGroupRowValue | keyvalue; track $index) {\n @if ($fieldGroup(column.value); as value) {\n @if (value.label && $index === 0) {\n <div class=\"fd-row fd-form-item\">\n <div class=\"fd-col\" [class]=\"xlCol\">\n <div fdp-form-group-header [fieldGroup]=\"$index === 0 ? value : null\"></div>\n </div>\n </div>\n }\n }\n\n <div class=\"fd-col fd-form-group\" [class]=\"xlCol\">\n @for (field of fields.value; track trackByFieldName($index, field)) {\n <div class=\"fd-row fd-form-item\">\n <div class=\"fd-col\" [class]=\"_inlineColumnLayoutClass\" [style.order]=\"field.rank\">\n <ng-template [ngTemplateOutlet]=\"field?.renderer || null\"></ng-template>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n</ng-template>\n<!-- For nested form-group -->\n<ng-content select=\"fdp-form-group\"></ng-content>\n<ng-template #mainTitleTemplate>\n @if (_hintOptions && _hintOptions.content && _hintOptions.position === 'before') {\n <ng-template [ngTemplateOutlet]=\"hintTemplate\"></ng-template>\n }\n <h5 class=\"fd-form-header__text\">\n {{ mainTitle }}\n </h5>\n @if (_hintOptions && _hintOptions.content && _hintOptions.position === 'after') {\n <ng-template [ngTemplateOutlet]=\"hintTemplate\"></ng-template>\n }\n <ng-template #hintTemplate>\n <span fd-link [undecorated]=\"true\">\n <fd-icon\n [fd-inline-help]=\"_hintOptions!.content\"\n [glyph]=\"_hintOptions!.glyph\"\n [placement]=\"_hintOptions!.placement ?? null\"\n [triggers]=\"_hintOptions!.trigger ?? []\"\n tabindex=\"0\"\n ></fd-icon>\n </span>\n </ng-template>\n</ng-template>\n", styles: [".fd-col,.fd-container,.fd-row{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0}.fd-col:after,.fd-col:before,.fd-container:after,.fd-container:before,.fd-row:after,.fd-row:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-container{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;padding-block:0;padding-inline:.25rem;position:relative}.fd-container .fd-row{margin-inline:-.25rem;min-width:calc(100% + .5rem)}.fd-container>.fd-row>.fd-col{padding-block:.25rem}.fd-container.fd-container--no-gap .fd-row,.fd-container.fd-container--no-horizontal-gap .fd-row{margin-inline:0}.fd-container.fd-container--no-gap .fd-row .fd-col,.fd-container.fd-container--no-horizontal-gap .fd-row .fd-col{padding-inline:0}.fd-container.fd-container--no-gap>.fd-row>.fd-col,.fd-container.fd-container--no-vertical-gap>.fd-row>.fd-col{padding-block:0}.fd-container[dir=rtl],[dir=rtl] .fd-container{direction:rtl}.fd-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;min-width:100%;position:relative}.fd-col{max-width:100%;min-width:100%;padding-inline:.25rem}.fd-col--0{max-width:0;min-width:0%}.fd-col--offset-0{-webkit-margin-start:0;margin-inline-start:0}.fd-col--offset-after-0{-webkit-margin-end:0;margin-inline-end:0}.fd-col--1{max-width:8.3333333333%;min-width:8.3333333333%}.fd-col--offset-1{-webkit-margin-start:8.3333333333%;margin-inline-start:8.3333333333%}.fd-col--offset-after-1{-webkit-margin-end:8.3333333333%;margin-inline-end:8.3333333333%}.fd-col--2{max-width:16.6666666667%;min-width:16.6666666667%}.fd-col--offset-2{-webkit-margin-start:16.6666666667%;margin-inline-start:16.6666666667%}.fd-col--offset-after-2{-webkit-margin-end:16.6666666667%;margin-inline-end:16.6666666667%}.fd-col--3{max-width:25%;min-width:25%}.fd-col--offset-3{-webkit-margin-start:25%;margin-inline-start:25%}.fd-col--offset-after-3{-webkit-margin-end:25%;margin-inline-end:25%}.fd-col--4{max-width:33.3333333333%;min-width:33.3333333333%}.fd-col--offset-4{-webkit-margin-start:33.3333333333%;margin-inline-start:33.3333333333%}.fd-col--offset-after-4{-webkit-margin-end:33.3333333333%;margin-inline-end:33.3333333333%}.fd-col--5{max-width:41.6666666667%;min-width:41.6666666667%}.fd-col--offset-5{-webkit-margin-start:41.6666666667%;margin-inline-start:41.6666666667%}.fd-col--offset-after-5{-webkit-margin-end:41.6666666667%;margin-inline-end:41.6666666667%}.fd-col--6{max-width:50%;min-width:50%}.fd-col--offset-6{-webkit-margin-start:50%;margin-inline-start:50%}.fd-col--offset-after-6{-webkit-margin-end:50%;margin-inline-end:50%}.fd-col--7{max-width:58.3333333333%;min-width:58.3333333333%}.fd-col--offset-7{-webkit-margin-start:58.3333333333%;margin-inline-start:58.3333333333%}.fd-col--offset-after-7{-webkit-margin-end:58.3333333333%;margin-inline-end:58.3333333333%}.fd-col--8{max-width:66.6666666667%;min-width:66.6666666667%}.fd-col--offset-8{-webkit-margin-start:66.6666666667%;margin-inline-start:66.6666666667%}.fd-col--offset-after-8{-webkit-margin-end:66.6666666667%;margin-inline-end:66.6666666667%}.fd-col--9{max-width:75%;min-width:75%}.fd-col--offset-9{-webkit-margin-start:75%;margin-inline-start:75%}.fd-col--offset-after-9{-webkit-margin-end:75%;margin-inline-end:75%}.fd-col--10{max-width:83.3333333333%;min-width:83.3333333333%}.fd-col--offset-10{-webkit-margin-start:83.3333333333%;margin-inline-start:83.3333333333%}.fd-col--offset-after-10{-webkit-margin-end:83.3333333333%;margin-inline-end:83.3333333333%}.fd-col--11{max-width:91.6666666667%;min-width:91.6666666667%}.fd-col--offset-11{-webkit-margin-start:91.6666666667%;margin-inline-start:91.6666666667%}.fd-col--offset-after-11{-webkit-margin-end:91.6666666667%;margin-inline-end:91.6666666667%}.fd-col--12{max-width:100%;min-width:100%}.fd-col--offset-12{-webkit-margin-start:100%;margin-inline-start:100%}.fd-col--offset-after-12{-webkit-margin-end:100%;margin-inline-end:100%}.fd-col--full{max-width:none;min-width:8.3333333333%;-webkit-box-flex:1;-ms-flex:1;flex:1}.fd-col--wrap{-ms-flex-wrap:wrap;flex-wrap:wrap}@media(width>=600px){.fd-container{padding-block:0;padding-inline:.5rem}.fd-container .fd-row{margin-inline:-.5rem;min-width:calc(100% + 1rem)}.fd-container>.fd-row>.fd-col{padding-block:.5rem}.fd-col{padding-inline:.5rem}.fd-col-md--0{max-width:0;min-width:0%}.fd-col-md--offset-0{-webkit-margin-start:0;margin-inline-start:0}.fd-col-md--offset-after-0{-webkit-margin-end:0;margin-inline-end:0}.fd-col-md--1{max-width:8.3333333333%;min-width:8.3333333333%}.fd-col-md--offset-1{-webkit-margin-start:8.3333333333%;margin-inline-start:8.3333333333%}.fd-col-md--offset-after-1{-webkit-margin-end:8.3333333333%;margin-inline-end:8.3333333333%}.fd-col-md--2{max-width:16.6666666667%;min-width:16.6666666667%}.fd-col-md--offset-2{-webkit-margin-start:16.6666666667%;margin-inline-start:16.6666666667%}.fd-col-md--offset-after-2{-webkit-margin-end:16.6666666667%;margin-inline-end:16.6666666667%}.fd-col-md--3{max-width:25%;min-width:25%}.fd-col-md--offset-3{-webkit-margin-start:25%;margin-inline-start:25%}.fd-col-md--offset-after-3{-webkit-margin-end:25%;margin-inline-end:25%}.fd-col-md--4{max-width:33.3333333333%;min-width:33.3333333333%}.fd-col-md--offset-4{-webkit-margin-start:33.3333333333%;margin-inline-start:33.3333333333%}.fd-col-md--offset-after-4{-webkit-margin-end:33.3333333333%;margin-inline-end:33.3333333333%}.fd-col-md--5{max-width:41.6666666667%;min-width:41.6666666667%}.fd-col-md--offset-5{-webkit-margin-start:41.6666666667%;margin-inline-start:41.6666666667%}.fd-col-md--offset-after-5{-webkit-margin-end:41.6666666667%;margin-inline-end:41.6666666667%}.fd-col-md--6{max-width:50%;min-width:50%}.fd-col-md--offset-6{-webkit-margin-start:50%;margin-inline-start:50%}.fd-col-md--offset-after-6{-webkit-margin-end:50%;margin-inline-end:50%}.fd-col-md--7{max-width:58.3333333333%;min-width:58.3333333333%}.fd-col-md--offset-7{-webkit-margin-start:58.3333333333%;margin-inline-start:58.3333333333%}.fd-col-md--offset-after-7{-webkit-margin-end:58.3333333333%;margin-inline-end:58.3333333333%}.fd-col-md--8{max-width:66.6666666667%;min-width:66.6666666667%}.fd-col-md--offset-8{-webkit-margin-start:66.6666666667%;margin-inline-start:66.6666666667%}.fd-col-md--offset-after-8{-webkit-margin-end:66.6666666667%;margin-inline-end:66.6666666667%}.fd-col-md--9{max-width:75%;min-width:75%}.fd-col-md--offset-9{-webkit-margin-start:75%;margin-inline-start:75%}.fd-col-md--offset-after-9{-webkit-margin-end:75%;margin-inline-end:75%}.fd-col-md--10{max-width:83.3333333333%;min-width:83.3333333333%}.fd-col-md--offset-10{-webkit-margin-start:83.3333333333%;margin-inline-start:83.3333333333%}.fd-col-md--offset-after-10{-webkit-margin-end:83.3333333333%;margin-inline-end:83.3333333333%}.fd-col-md--11{max-width:91.6666666667%;min-width:91.6666666667%}.fd-col-md--offset-11{-webkit-margin-start:91.6666666667%;margin-inline-start:91.6666666667%}.fd-col-md--offset-after-11{-webkit-margin-end:91.6666666667%;margin-inline-end:91.6666666667%}.fd-col-md--12{max-width:100%;min-width:100%}.fd-col-md--offset-12{-webkit-margin-start:100%;margin-inline-start:100%}.fd-col-md--offset-after-12{-webkit-margin-end:100%;margin-inline-end:100%}}@media(width>=1024px){.fd-col-lg--0{max-width:0;min-width:0%}.fd-col-lg--offset-0{-webkit-margin-start:0;margin-inline-start:0}.fd-col-lg--offset-after-0{-webkit-margin-end:0;margin-inline-end:0}.fd-col-lg--1{max-width:8.3333333333%;min-width:8.3333333333%}.fd-col-lg--offset-1{-webkit-margin-start:8.3333333333%;margin-inline-start:8.3333333333%}.fd-col-lg--offset-after-1{-webkit-margin-end:8.3333333333%;margin-inline-end:8.3333333333%}.fd-col-lg--2{max-width:16.6666666667%;min-width:16.6666666667%}.fd-col-lg--offset-2{-webkit-margin-start:16.6666666667%;margin-inline-start:16.6666666667%}.fd-col-lg--offset-after-2{-webkit-margin-end:16.6666666667%;margin-inline-end:16.6666666667%}.fd-col-lg--3{max-width:25%;min-width:25%}.fd-col-lg--offset-3{-webkit-margin-start:25%;margin-inline-start:25%}.fd-col-lg--offset-after-3{-webkit-margin-end:25%;margin-inline-end:25%}.fd-col-lg--4{max-width:33.3333333333%;min-width:33.3333333333%}.fd-col-lg--offset-4{-webkit-margin-start:33.3333333333%;margin-inline-start:33.3333333333%}.fd-col-lg--offset-after-4{-webkit-margin-end:33.3333333333%;margin-inline-end:33.3333333333%}.fd-col-lg--5{max-width:41.6666666667%;min-width:41.6666666667%}.fd-col-lg--offset-5{-webkit-margin-start:41.6666666667%;margin-inline-start:41.6666666667%}.fd-col-lg--offset-after-5{-webkit-margin-end:41.6666666667%;margin-inline-end:41.6666666667%}.fd-col-lg--6{max-width:50%;min-width:50%}.fd-col-lg--offset-6{-webkit-margin-start:50%;margin-inline-start:50%}.fd-col-lg--offset-after-6{-webkit-margin-end:50%;margin-inline-end:50%}.fd-col-lg--7{max-width:58.3333333333%;min-width:58.3333333333%}.fd-col-lg--offset-7{-webkit-margin-start:58.3333333333%;margin-inline-start:58.3333333333%}.fd-col-lg--offset-after-7{-webkit-margin-end:58.3333333333%;margin-inline-end:58.3333333333%}.fd-col-lg--8{max-width:66.6666666667%;min-width:66.6666666667%}.fd-col-lg--offset-8{-webkit-margin-start:66.6666666667%;margin-inline-start:66.6666666667%}.fd-col-lg--offset-after-8{-webkit-margin-end:66.6666666667%;margin-inline-end:66.6666666667%}.fd-col-lg--9{max-width:75%;min-width:75%}.fd-col-lg--offset-9{-webkit-margin-start:75%;margin-inline-start:75%}.fd-col-lg--offset-after-9{-webkit-margin-end:75%;margin-inline-end:75%}.fd-col-lg--10{max-width:83.3333333333%;min-width:83.3333333333%}.fd-col-lg--offset-10{-webkit-margin-start:83.3333333333%;margin-inline-start:83.3333333333%}.fd-col-lg--offset-after-10{-webkit-margin-end:83.3333333333%;margin-inline-end:83.3333333333%}.fd-col-lg--11{max-width:91.6666666667%;min-width:91.6666666667%}.fd-col-lg--offset-11{-webkit-margin-start:91.6666666667%;margin-inline-start:91.6666666667%}.fd-col-lg--offset-after-11{-webkit-margin-end:91.6666666667%;margin-inline-end:91.6666666667%}.fd-col-lg--12{max-width:100%;min-width:100%}.fd-col-lg--offset-12{-webkit-margin-start:100%;margin-inline-start:100%}.fd-col-lg--offset-after-12{-webkit-margin-end:100%;margin-inline-end:100%}}@media(width>=1440px){.fd-col-xl--0{max-width:0;min-width:0%}.fd-col-xl--offset-0{-webkit-margin-start:0;margin-inline-start:0}.fd-col-xl--offset-after-0{-webkit-margin-end:0;margin-inline-end:0}.fd-col-xl--1{max-width:8.3333333333%;min-width:8.3333333333%}.fd-col-xl--offset-1{-webkit-margin-start:8.3333333333%;margin-inline-start:8.3333333333%}.fd-col-xl--offset-after-1{-webkit-margin-end:8.3333333333%;margin-inline-end:8.3333333333%}.fd-col-xl--2{max-width:16.6666666667%;min-width:16.6666666667%}.fd-col-xl--offset-2{-webkit-margin-start:16.6666666667%;margin-inline-start:16.6666666667%}.fd-col-xl--offset-after-2{-webkit-margin-end:16.6666666667%;margin-inline-end:16.6666666667%}.fd-col-xl--3{max-width:25%;min-width:25%}.fd-col-xl--offset-3{-webkit-margin-start:25%;margin-inline-start:25%}.fd-col-xl--offset-after-3{-webkit-margin-end:25%;margin-inline-end:25%}.fd-col-xl--4{max-width:33.3333333333%;min-width:33.3333333333%}.fd-col-xl--offset-4{-webkit-margin-start:33.3333333333%;margin-inline-start:33.3333333333%}.fd-col-xl--offset-after-4{-webkit-margin-end:33.3333333333%;margin-inline-end:33.3333333333%}.fd-col-xl--5{max-width:41.6666666667%;min-width:41.6666666667%}.fd-col-xl--offset-5{-webkit-margin-start:41.6666666667%;margin-inline-start:41.6666666667%}.fd-col-xl--offset-after-5{-webkit-margin-end:41.6666666667%;margin-inline-end:41.6666666667%}.fd-col-xl--6{max-width:50%;min-width:50%}.fd-col-xl--offset-6{-webkit-margin-start:50%;margin-inline-start:50%}.fd-col-xl--offset-after-6{-webkit-margin-end:50%;margin-inline-end:50%}.fd-col-xl--7{max-width:58.3333333333%;min-width:58.3333333333%}.fd-col-xl--offset-7{-webkit-margin-start:58.3333333333%;margin-inline-start:58.3333333333%}.fd-col-xl--offset-after-7{-webkit-margin-end:58.3333333333%;margin-inline-end:58.3333333333%}.fd-col-xl--8{max-width:66.6666666667%;min-width:66.6666666667%}.fd-col-xl--offset-8{-webkit-margin-start:66.6666666667%;margin-inline-start:66.6666666667%}.fd-col-xl--offset-after-8{-webkit-margin-end:66.6666666667%;margin-inline-end:66.6666666667%}.fd-col-xl--9{max-width:75%;min-width:75%}.fd-col-xl--offset-9{-webkit-margin-start:75%;margin-inline-start:75%}.fd-col-xl--offset-after-9{-webkit-margin-end:75%;margin-inline-end:75%}.fd-col-xl--10{max-width:83.3333333333%;min-width:83.3333333333%}.fd-col-xl--offset-10{-webkit-margin-start:83.3333333333%;margin-inline-start:83.3333333333%}.fd-col-xl--offset-after-10{-webkit-margin-end:83.3333333333%;margin-inline-end:83.3333333333%}.fd-col-xl--11{max-width:91.6666666667%;min-width:91.6666666667%}.fd-col-xl--offset-11{-webkit-margin-start:91.6666666667%;margin-inline-start:91.6666666667%}.fd-col-xl--offset-after-11{-webkit-margin-end:91.6666666667%;margin-inline-end:91.6666666667%}.fd-col-xl--12{max-width:100%;min-width:100%}.fd-col-xl--offset-12{-webkit-margin-start:100%;margin-inline-start:100%}.fd-col-xl--offset-after-12{-webkit-margin-end:100%;margin-inline-end:100%}}.fd-container.fd-form-layout-grid-container .fd-form-group,.fd-container.fd-form-layout-grid-container.fd-form-group{padding-block:1rem!important;padding-inline:1rem!important}.fd-container.fd-form-layout-grid-container .fd-form-group .fd-form-group,.fd-container.fd-form-layout-grid-container.fd-form-group .fd-form-group{padding-block:0!important;padding-inline:0!important}.fd-container.fd-form-layout-grid-container .fd-form-group .fd-form-item .fd-form-label,.fd-container.fd-form-layout-grid-container.fd-form-group .fd-form-item .fd-form-label{-webkit-margin-end:0;margin-inline-end:0;white-space:normal}.fd-container.fd-form-layout-grid-container .fd-form-group .fd-form-item .fd-form-label--colon,.fd-container.fd-form-layout-grid-container.fd-form-group .fd-form-item .fd-form-label--colon{-webkit-padding-end:.25rem;padding-inline-end:.25rem}.fd-container.fd-form-layout-grid-container .fd-form-group .fd-form-item .fd-form-label--required,.fd-container.fd-form-layout-grid-container.fd-form-group .fd-form-item .fd-form-label--required{-webkit-padding-end:.5rem;padding-inline-end:.5rem}.fd-container.fd-form-layout-grid-container .fd-form-group .fd-form-item .fd-form-label--required.fd-form-label--colon,.fd-container.fd-form-layout-grid-container.fd-form-group .fd-form-item .fd-form-label--required.fd-form-label--colon{-webkit-padding-end:.75rem;padding-inline-end:.75rem}.fd-container.fd-form-layout-grid-container .fd-row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.fd-container.fd-form-layout-grid-container .fd-row .fd-col{overflow:hidden;padding-block:0;text-overflow:ellipsis;white-space:nowrap}.fd-container.fd-form-layout-grid-container .fd-row .fd-col:not(.fd-form-group){-ms-flex-item-align:center;align-self:center}@media(width>=0){.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--vertical .fd-form-group .fd-form-item,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--vertical.fd-form-group .fd-form-item{margin-top:.625rem}.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--vertical .fd-form-group .fd-form-item:first-of-type,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--vertical.fd-form-group .fd-form-item:first-of-type{margin-top:0}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--1>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--1>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--1>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--2>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--2>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--2>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--3>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--3>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--3>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--4>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--4>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--4>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--5>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--5>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--5>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--6>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--6>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--6>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--7>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--7>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--7>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--8>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--8>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--8>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--9>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--9>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--9>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--10>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--10>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--10>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--11>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--11>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--11>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--12>.fd-form-label,.fd-container.fd-form-layout-grid-container .fd-row .fd-col>.fd-form-label{float:left;text-align:start;width:auto;-webkit-padding-after:.125rem;padding-block-end:.125rem}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--12>.fd-form-label[dir=rtl],.fd-container.fd-form-layout-grid-container .fd-row .fd-col>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--12>.fd-form-label,[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col>.fd-form-label{float:right}}@media(width>=0)and (width<=599px){.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container .fd-form-group .fd-form-item,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container.fd-form-group .fd-form-item{margin-top:.625rem}.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container .fd-form-group .fd-form-item:first-of-type,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container.fd-form-group .fd-form-item:first-of-type{margin-top:0}}@media(width>=600px){.fd-container.fd-form-layout-grid-container{padding-block:0;padding-inline:.25rem}.fd-container.fd-form-layout-grid-container .fd-row{margin-block:0;margin-inline:-.25rem;min-width:calc(100% + .5rem)}.fd-container.fd-form-layout-grid-container .fd-row .fd-col{padding-block:0;padding-inline:.25rem}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--1>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--1>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--1>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--2>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--2>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--2>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--3>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--3>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--3>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--4>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--4>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--4>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--5>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--5>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--5>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--6>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--6>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--6>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--7>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--7>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--7>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--8>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--8>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--8>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--9>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--9>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--9>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--10>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--10>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--10>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--11>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--11>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--11>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--12>.fd-form-label,.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md>.fd-form-label{float:left;text-align:start;width:auto;-webkit-padding-after:.125rem;padding-block-end:.125rem}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--12>.fd-form-label[dir=rtl],.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--12>.fd-form-label,[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md>.fd-form-label{float:right}}@media(width>=600px)and (width<=1023px){.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--md-vertical .fd-form-group .fd-form-item,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--md-vertical.fd-form-group .fd-form-item{margin-top:.625rem}.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--md-vertical .fd-form-group .fd-form-item:first-of-type,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--md-vertical.fd-form-group .fd-form-item:first-of-type{margin-top:0}}@media(width>=1024px){.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--1>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--1>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--1>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--2>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--2>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--2>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--3>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--3>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--3>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--4>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--4>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--4>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--5>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--5>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--5>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--6>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--6>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--6>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--7>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--7>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--7>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--8>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--8>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--8>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--9>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--9>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--9>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--10>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--10>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--10>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--11>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--11>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--11>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--12>.fd-form-label,.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg>.fd-form-label{float:left;text-align:start;width:auto;-webkit-padding-after:.125rem;padding-block-end:.125rem}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--12>.fd-form-label[dir=rtl],.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--12>.fd-form-label,[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg>.fd-form-label{float:right}}@media(width>=1024px)and (width<=1443px){.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--lg-vertical .fd-form-group .fd-form-item,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--lg-vertical.fd-form-group .fd-form-item{margin-top:.625rem}.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--lg-vertical .fd-form-group .fd-form-item:first-of-type,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--lg-vertical.fd-form-group .fd-form-item:first-of-type{margin-top:0}}@media(width>=1440px){.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--xl-vertical .fd-form-group .fd-form-item,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--xl-vertical.fd-form-group .fd-form-item{margin-top:.625rem}.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--xl-vertical .fd-form-group .fd-form-item:first-of-type,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--xl-vertical.fd-form-group .fd-form-item:first-of-type{margin-top:0}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--1>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--1>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--1>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--2>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--2>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--2>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--3>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--3>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--3>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--4>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--4>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--4>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--5>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--5>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--5>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--6>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--6>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--6>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--7>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--7>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--7>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--8>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--8>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--8>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--9>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--9>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--9>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--10>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--10>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--10>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--11>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--11>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--11>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--12>.fd-form-label,.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl>.fd-form-label{float:left;text-align:start;width:auto;-webkit-padding-after:.125rem;padding-block-end:.125rem}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--12>.fd-form-label[dir=rtl],.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--12>.fd-form-label,[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl>.fd-form-label{float:right}}.fd-section{background-color:var(--sapToolbar_Background);border:0;border-bottom:none;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-block:1rem 1.5rem;padding-inline:0;padding-inline:.5rem}.fd-section:after,.fd-section:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-section:after{clear:both;content:\"\";display:table}@media(min-width:600px){.fd-section{padding-inline:2rem}}@media(min-width:1440px){.fd-section{padding-inline:3rem}}.fd-section--no-border,.fd-section:last-child{border-bottom:0}.fd-section--bleed,.fd-section--full-bleed{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0}.fd-section--bleed:after,.fd-section--bleed:before,.fd-section--full-bleed:after,.fd-section--full-bleed:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-section--bleed .fd-section__footer,.fd-section--bleed .fd-section__header,.fd-section--full-bleed .fd-section__footer,.fd-section--full-bleed .fd-section__header{padding-inline:.5rem}@media(min-width:600px){.fd-section--bleed .fd-section__footer,.fd-section--bleed .fd-section__header,.fd-section--full-bleed .fd-section__footer,.fd-section--full-bleed .fd-section__header{padding-inline:2rem}}@media(min-width:1440px){.fd-section--bleed .fd-section__footer,.fd-section--bleed .fd-section__header,.fd-section--full-bleed .fd-section__footer,.fd-section--full-bleed .fd-section__header{padding-inline:3rem}}.fd-section__header{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;min-height:1.5rem;padding-block:0;padding-inline:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-margin-after:1.5rem;margin-block-end:1.5rem}.fd-section__header:after,.fd-section__header:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-section__title{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapTitleColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-size:var(--sapFontHeader2Size);font-weight:400;forced-color-adjust:none;line-height:normal;line-height:2rem;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-margin-after:0;margin-block-end:0}.fd-section__title:after,.fd-section__title:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-section__actions{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-margin-start:auto;margin-inline-start:auto}.fd-section__actions:after,.fd-section__actions:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-section__footer{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.fd-section__footer:after,.fd-section__footer:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-form-group{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.fd-form-group:after,.fd-form-group:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-form-group--inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.fd-form-group--with-spacing{gap:.625rem}.fd-form-group__header{border:0;-webkit-box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:var(--sapGroup_TitleBackground);border-bottom:var(--sapGroup_TitleBorderWidth) solid var(--sapGroup_TitleBorderColor);box-sizing:border-box;min-height:var(--sapElement_LineHeight);padding-inline:var(--fdFormGroupPaddingInline,1rem);width:100%}.fd-form-group__header:after,.fd-form-group__header:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-form-group__header--no-padding{--fdFormGroupPaddingInline:0}.fd-form-group__header--no-border{border-bottom:none}.fd-form-group__header-text{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapGroup_TitleTextColor);font-family:var(--sapFontFamily);font-family:var(--sapFontHeaderFamily);font-size:var(--sapFontSize);font-size:var(--sapGroup_Title_FontSize);font-weight:400;font-weight:700;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;overflow:hidden;padding-block:0;padding-inline:0;text-overflow:ellipsis;white-space:nowrap}.fd-form-group__header-text:after,.fd-form-group__header-text:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-form-group__header-text--wrap{overflow:visible;text-overflow:clip;white-space:normal}.fd-form-header{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:var(--sapGroup_TitleBackground);-webkit-box-shadow:0 var(--fdFormHeader_Border_Width) 0 var(--sapGroup_TitleBorderColor);box-shadow:0 var(--fdFormHeader_Border_Width) 0 var(--sapGroup_TitleBorderColor);height:var(--sapElement_LineHeight);padding-inline:1rem;width:100%}.fd-form-header:after,.fd-form-header:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-form-header__text{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapGroup_TitleTextColor);font-family:var(--sapFontFamily);font-family:var(--sapFontHeaderFamily);font-size:var(--sapFontSize);font-size:var(--sapGroup_Title_FontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;overflow:hidden;padding-block:0;padding-inline:0;text-overflow:ellipsis;white-space:nowrap}.fd-form-header__text:after,.fd-form-header__text:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}fdp-form-group{display:block}fdp-form-group .fd-form-group{display:block}fdp-form-group .fd-form-group.fd-form-group--inline{display:flex;flex-wrap:wrap;justify-content:flex-start}fdp-form-group .fd-form-group__header{padding-inline:1rem}fdp-form-group .fd-row:empty{display:none}fdp-form-group .fd-form-group__header{margin-block-start:1rem}.fd-form-label{overflow:hidden}\n/*! Bundled license information:\n\nfundamental-styles/dist/form-header.css:\n (*!\n * Fundamental Library Styles v0.41.8\n * Copyright (c) 2026 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n *)\n*/\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: FormGroupHeaderComponent, selector: "[fdp-form-group-header]", inputs: ["allowWrap", "fieldGroup"] }, { kind: "component", type: LinkComponent, selector: "[fdLink], [fd-link]", inputs: ["emphasized", "disabled", "inverted", "subtle", "undecorated", "touchTarget"] }, { kind: "component", type: IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "size", "class", "ariaLabel", "ariaHidden"], outputs: ["ariaHiddenChange"] }, { kind: "directive", type: InlineHelpDirective, selector: "[fd-inline-help]:not([fd-inline-help-template]), [fd-inline-help-template]:not([fd-inline-help])", inputs: ["fd-inline-help", "placement", "triggers", "closeOnOutsideClick", "additionalBodyClass", "disabled", "bodyId", "bodyRole", "noArrow", "closeOnEscapeKey", "closeOnNavigation", "restoreFocusOnClose", "appendTo", "fixedPosition", "maxWidth", "scrollStrategy"] }, { kind: "ngmodule", type: ContentDensityModule }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: FieldGroupRowValuePipe, name: "fieldGroupRowValue" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
7341
7419
  }
7342
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformDatetimePickerComponent, decorators: [{
7420
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FormGroupComponent, decorators: [{
7343
7421
  type: Component,
7344
- args: [{ selector: 'fdp-datetime-picker', changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: FD_FORM_FIELD_CONTROL, useExisting: PlatformDatetimePickerComponent, multi: true }], imports: [DatetimePickerComponent, FormsModule], template: "<fd-datetime-picker\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-required]=\"_isRequired\"\n [ariaLabelledBy]=\"ariaLabelledBy\"\n [attr.ariaDescribedBy]=\"ariaDescribedBy\"\n [inputId]=\"id\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [placement]=\"placement\"\n [appendTo]=\"appendTo\"\n [meridian]=\"meridian\"\n [disabled]=\"disabled\"\n [displaySeconds]=\"displaySeconds\"\n [displayMinutes]=\"displayMinutes\"\n [displayHours]=\"displayHours\"\n [useValidation]=\"useValidation\"\n [isOpen]=\"isOpen\"\n [startingDayOfWeek]=\"startingDayOfWeek\"\n [activeView]=\"activeView\"\n [allowNull]=\"allowNull && !_isRequired\"\n [keepTwoDigitsTime]=\"keepTwoDigitsTime\"\n [state]=\"state\"\n [buttonFocusable]=\"buttonFocusable\"\n [specialDaysRules]=\"specialDaysRules\"\n [showCalendarLegend]=\"showCalendarLegend()\"\n [legendCol]=\"legendCol()\"\n [yearGrid]=\"yearGrid\"\n [aggregatedYearGrid]=\"aggregatedYearGrid\"\n [markWeekends]=\"markWeekends\"\n [spinnerButtons]=\"spinnerButtons\"\n [showWeekNumbers]=\"showWeekNumbers\"\n [showFooter]=\"showFooter\"\n [disableFunction]=\"disableFunction\"\n [processInputOnBlur]=\"processInputOnBlur\"\n [preventScrollOnFocus]=\"preventScrollOnFocus\"\n [mobile]=\"mobile\"\n [mobileConfig]=\"mobileConfig\"\n [mobileLandscape]=\"mobileLandscape\"\n [mobilePortrait]=\"mobilePortrait\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"handleDatetimeInputChange($event)\"\n (activeViewChange)=\"handleActiveViewChange($event)\"\n (isOpenChange)=\"handleOpenChange($event)\"\n (touched)=\"onTouched()\"\n>\n <ng-content></ng-content>\n</fd-datetime-picker>\n" }]
7345
- }], ctorParameters: () => [], propDecorators: { value: [{
7346
- type: Input
7347
- }], placement: [{
7348
- type: Input
7349
- }], appendTo: [{
7350
- type: Input
7351
- }], meridian: [{
7352
- type: Input
7353
- }], displaySeconds: [{
7354
- type: Input
7355
- }], displayMinutes: [{
7356
- type: Input
7357
- }], displayHours: [{
7358
- type: Input
7359
- }], useValidation: [{
7360
- type: Input
7361
- }], isOpen: [{
7362
- type: Input
7363
- }], startingDayOfWeek: [{
7364
- type: Input
7365
- }], activeView: [{
7422
+ args: [{ selector: 'fdp-form-group', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [formGroupProvider, FormFieldLayoutService, contentDensityObserverProviders()], imports: [
7423
+ FormsModule,
7424
+ NgTemplateOutlet,
7425
+ FormGroupHeaderComponent,
7426
+ LinkComponent,
7427
+ IconComponent,
7428
+ InlineHelpDirective,
7429
+ KeyValuePipe,
7430
+ FieldGroupRowValuePipe,
7431
+ ContentDensityModule
7432
+ ], template: "@if (useForm) {\n <form #nativeForm (ngSubmit)=\"onSubmit.emit($event)\" [id]=\"id\" [name]=\"name\">\n <ng-template [ngTemplateOutlet]=\"body\"></ng-template>\n </form>\n} @else {\n <!-- Render fields and field groups with assigned columns -->\n <ng-template [ngTemplateOutlet]=\"fields\"></ng-template>\n}\n<ng-template #body>\n <!-- Render fields and field groups with assigned columns -->\n <ng-template [ngTemplateOutlet]=\"fields\"></ng-template>\n</ng-template>\n<ng-template #fields>\n @if (mainTitle && !hideMainTItle) {\n <div class=\"fd-form-header\">\n <ng-template [ngTemplateOutlet]=\"mainTitleTemplate\"></ng-template>\n </div>\n }\n <div\n class=\"fd-container fd-form-layout-grid-container\"\n [class.is-compact]=\"contentDensityObserver.isCompactSignal()\"\n >\n @for (column of formRows | keyvalue; track $index) {\n <div class=\"fd-row\">\n @for (fields of column | fieldGroupRowValue | keyvalue; track $index) {\n @if ($fieldGroup(column.value); as value) {\n @if (value.label && $index === 0) {\n <div class=\"fd-row fd-form-item\">\n <div class=\"fd-col\" [class]=\"xlCol\">\n <div fdp-form-group-header [fieldGroup]=\"$index === 0 ? value : null\"></div>\n </div>\n </div>\n }\n }\n\n <div class=\"fd-col fd-form-group\" [class]=\"xlCol\">\n @for (field of fields.value; track trackByFieldName($index, field)) {\n <div class=\"fd-row fd-form-item\">\n <div class=\"fd-col\" [class]=\"_inlineColumnLayoutClass\" [style.order]=\"field.rank\">\n <ng-template [ngTemplateOutlet]=\"field?.renderer || null\"></ng-template>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n</ng-template>\n<!-- For nested form-group -->\n<ng-content select=\"fdp-form-group\"></ng-content>\n<ng-template #mainTitleTemplate>\n @if (_hintOptions && _hintOptions.content && _hintOptions.position === 'before') {\n <ng-template [ngTemplateOutlet]=\"hintTemplate\"></ng-template>\n }\n <h5 class=\"fd-form-header__text\">\n {{ mainTitle }}\n </h5>\n @if (_hintOptions && _hintOptions.content && _hintOptions.position === 'after') {\n <ng-template [ngTemplateOutlet]=\"hintTemplate\"></ng-template>\n }\n <ng-template #hintTemplate>\n <span fd-link [undecorated]=\"true\">\n <fd-icon\n [fd-inline-help]=\"_hintOptions!.content\"\n [glyph]=\"_hintOptions!.glyph\"\n [placement]=\"_hintOptions!.placement ?? null\"\n [triggers]=\"_hintOptions!.trigger ?? []\"\n tabindex=\"0\"\n ></fd-icon>\n </span>\n </ng-template>\n</ng-template>\n", styles: [".fd-col,.fd-container,.fd-row{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0}.fd-col:after,.fd-col:before,.fd-container:after,.fd-container:before,.fd-row:after,.fd-row:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-container{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;padding-block:0;padding-inline:.25rem;position:relative}.fd-container .fd-row{margin-inline:-.25rem;min-width:calc(100% + .5rem)}.fd-container>.fd-row>.fd-col{padding-block:.25rem}.fd-container.fd-container--no-gap .fd-row,.fd-container.fd-container--no-horizontal-gap .fd-row{margin-inline:0}.fd-container.fd-container--no-gap .fd-row .fd-col,.fd-container.fd-container--no-horizontal-gap .fd-row .fd-col{padding-inline:0}.fd-container.fd-container--no-gap>.fd-row>.fd-col,.fd-container.fd-container--no-vertical-gap>.fd-row>.fd-col{padding-block:0}.fd-container[dir=rtl],[dir=rtl] .fd-container{direction:rtl}.fd-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;min-width:100%;position:relative}.fd-col{max-width:100%;min-width:100%;padding-inline:.25rem}.fd-col--0{max-width:0;min-width:0%}.fd-col--offset-0{-webkit-margin-start:0;margin-inline-start:0}.fd-col--offset-after-0{-webkit-margin-end:0;margin-inline-end:0}.fd-col--1{max-width:8.3333333333%;min-width:8.3333333333%}.fd-col--offset-1{-webkit-margin-start:8.3333333333%;margin-inline-start:8.3333333333%}.fd-col--offset-after-1{-webkit-margin-end:8.3333333333%;margin-inline-end:8.3333333333%}.fd-col--2{max-width:16.6666666667%;min-width:16.6666666667%}.fd-col--offset-2{-webkit-margin-start:16.6666666667%;margin-inline-start:16.6666666667%}.fd-col--offset-after-2{-webkit-margin-end:16.6666666667%;margin-inline-end:16.6666666667%}.fd-col--3{max-width:25%;min-width:25%}.fd-col--offset-3{-webkit-margin-start:25%;margin-inline-start:25%}.fd-col--offset-after-3{-webkit-margin-end:25%;margin-inline-end:25%}.fd-col--4{max-width:33.3333333333%;min-width:33.3333333333%}.fd-col--offset-4{-webkit-margin-start:33.3333333333%;margin-inline-start:33.3333333333%}.fd-col--offset-after-4{-webkit-margin-end:33.3333333333%;margin-inline-end:33.3333333333%}.fd-col--5{max-width:41.6666666667%;min-width:41.6666666667%}.fd-col--offset-5{-webkit-margin-start:41.6666666667%;margin-inline-start:41.6666666667%}.fd-col--offset-after-5{-webkit-margin-end:41.6666666667%;margin-inline-end:41.6666666667%}.fd-col--6{max-width:50%;min-width:50%}.fd-col--offset-6{-webkit-margin-start:50%;margin-inline-start:50%}.fd-col--offset-after-6{-webkit-margin-end:50%;margin-inline-end:50%}.fd-col--7{max-width:58.3333333333%;min-width:58.3333333333%}.fd-col--offset-7{-webkit-margin-start:58.3333333333%;margin-inline-start:58.3333333333%}.fd-col--offset-after-7{-webkit-margin-end:58.3333333333%;margin-inline-end:58.3333333333%}.fd-col--8{max-width:66.6666666667%;min-width:66.6666666667%}.fd-col--offset-8{-webkit-margin-start:66.6666666667%;margin-inline-start:66.6666666667%}.fd-col--offset-after-8{-webkit-margin-end:66.6666666667%;margin-inline-end:66.6666666667%}.fd-col--9{max-width:75%;min-width:75%}.fd-col--offset-9{-webkit-margin-start:75%;margin-inline-start:75%}.fd-col--offset-after-9{-webkit-margin-end:75%;margin-inline-end:75%}.fd-col--10{max-width:83.3333333333%;min-width:83.3333333333%}.fd-col--offset-10{-webkit-margin-start:83.3333333333%;margin-inline-start:83.3333333333%}.fd-col--offset-after-10{-webkit-margin-end:83.3333333333%;margin-inline-end:83.3333333333%}.fd-col--11{max-width:91.6666666667%;min-width:91.6666666667%}.fd-col--offset-11{-webkit-margin-start:91.6666666667%;margin-inline-start:91.6666666667%}.fd-col--offset-after-11{-webkit-margin-end:91.6666666667%;margin-inline-end:91.6666666667%}.fd-col--12{max-width:100%;min-width:100%}.fd-col--offset-12{-webkit-margin-start:100%;margin-inline-start:100%}.fd-col--offset-after-12{-webkit-margin-end:100%;margin-inline-end:100%}.fd-col--full{max-width:none;min-width:8.3333333333%;-webkit-box-flex:1;-ms-flex:1;flex:1}.fd-col--wrap{-ms-flex-wrap:wrap;flex-wrap:wrap}@media(width>=600px){.fd-container{padding-block:0;padding-inline:.5rem}.fd-container .fd-row{margin-inline:-.5rem;min-width:calc(100% + 1rem)}.fd-container>.fd-row>.fd-col{padding-block:.5rem}.fd-col{padding-inline:.5rem}.fd-col-md--0{max-width:0;min-width:0%}.fd-col-md--offset-0{-webkit-margin-start:0;margin-inline-start:0}.fd-col-md--offset-after-0{-webkit-margin-end:0;margin-inline-end:0}.fd-col-md--1{max-width:8.3333333333%;min-width:8.3333333333%}.fd-col-md--offset-1{-webkit-margin-start:8.3333333333%;margin-inline-start:8.3333333333%}.fd-col-md--offset-after-1{-webkit-margin-end:8.3333333333%;margin-inline-end:8.3333333333%}.fd-col-md--2{max-width:16.6666666667%;min-width:16.6666666667%}.fd-col-md--offset-2{-webkit-margin-start:16.6666666667%;margin-inline-start:16.6666666667%}.fd-col-md--offset-after-2{-webkit-margin-end:16.6666666667%;margin-inline-end:16.6666666667%}.fd-col-md--3{max-width:25%;min-width:25%}.fd-col-md--offset-3{-webkit-margin-start:25%;margin-inline-start:25%}.fd-col-md--offset-after-3{-webkit-margin-end:25%;margin-inline-end:25%}.fd-col-md--4{max-width:33.3333333333%;min-width:33.3333333333%}.fd-col-md--offset-4{-webkit-margin-start:33.3333333333%;margin-inline-start:33.3333333333%}.fd-col-md--offset-after-4{-webkit-margin-end:33.3333333333%;margin-inline-end:33.3333333333%}.fd-col-md--5{max-width:41.6666666667%;min-width:41.6666666667%}.fd-col-md--offset-5{-webkit-margin-start:41.6666666667%;margin-inline-start:41.6666666667%}.fd-col-md--offset-after-5{-webkit-margin-end:41.6666666667%;margin-inline-end:41.6666666667%}.fd-col-md--6{max-width:50%;min-width:50%}.fd-col-md--offset-6{-webkit-margin-start:50%;margin-inline-start:50%}.fd-col-md--offset-after-6{-webkit-margin-end:50%;margin-inline-end:50%}.fd-col-md--7{max-width:58.3333333333%;min-width:58.3333333333%}.fd-col-md--offset-7{-webkit-margin-start:58.3333333333%;margin-inline-start:58.3333333333%}.fd-col-md--offset-after-7{-webkit-margin-end:58.3333333333%;margin-inline-end:58.3333333333%}.fd-col-md--8{max-width:66.6666666667%;min-width:66.6666666667%}.fd-col-md--offset-8{-webkit-margin-start:66.6666666667%;margin-inline-start:66.6666666667%}.fd-col-md--offset-after-8{-webkit-margin-end:66.6666666667%;margin-inline-end:66.6666666667%}.fd-col-md--9{max-width:75%;min-width:75%}.fd-col-md--offset-9{-webkit-margin-start:75%;margin-inline-start:75%}.fd-col-md--offset-after-9{-webkit-margin-end:75%;margin-inline-end:75%}.fd-col-md--10{max-width:83.3333333333%;min-width:83.3333333333%}.fd-col-md--offset-10{-webkit-margin-start:83.3333333333%;margin-inline-start:83.3333333333%}.fd-col-md--offset-after-10{-webkit-margin-end:83.3333333333%;margin-inline-end:83.3333333333%}.fd-col-md--11{max-width:91.6666666667%;min-width:91.6666666667%}.fd-col-md--offset-11{-webkit-margin-start:91.6666666667%;margin-inline-start:91.6666666667%}.fd-col-md--offset-after-11{-webkit-margin-end:91.6666666667%;margin-inline-end:91.6666666667%}.fd-col-md--12{max-width:100%;min-width:100%}.fd-col-md--offset-12{-webkit-margin-start:100%;margin-inline-start:100%}.fd-col-md--offset-after-12{-webkit-margin-end:100%;margin-inline-end:100%}}@media(width>=1024px){.fd-col-lg--0{max-width:0;min-width:0%}.fd-col-lg--offset-0{-webkit-margin-start:0;margin-inline-start:0}.fd-col-lg--offset-after-0{-webkit-margin-end:0;margin-inline-end:0}.fd-col-lg--1{max-width:8.3333333333%;min-width:8.3333333333%}.fd-col-lg--offset-1{-webkit-margin-start:8.3333333333%;margin-inline-start:8.3333333333%}.fd-col-lg--offset-after-1{-webkit-margin-end:8.3333333333%;margin-inline-end:8.3333333333%}.fd-col-lg--2{max-width:16.6666666667%;min-width:16.6666666667%}.fd-col-lg--offset-2{-webkit-margin-start:16.6666666667%;margin-inline-start:16.6666666667%}.fd-col-lg--offset-after-2{-webkit-margin-end:16.6666666667%;margin-inline-end:16.6666666667%}.fd-col-lg--3{max-width:25%;min-width:25%}.fd-col-lg--offset-3{-webkit-margin-start:25%;margin-inline-start:25%}.fd-col-lg--offset-after-3{-webkit-margin-end:25%;margin-inline-end:25%}.fd-col-lg--4{max-width:33.3333333333%;min-width:33.3333333333%}.fd-col-lg--offset-4{-webkit-margin-start:33.3333333333%;margin-inline-start:33.3333333333%}.fd-col-lg--offset-after-4{-webkit-margin-end:33.3333333333%;margin-inline-end:33.3333333333%}.fd-col-lg--5{max-width:41.6666666667%;min-width:41.6666666667%}.fd-col-lg--offset-5{-webkit-margin-start:41.6666666667%;margin-inline-start:41.6666666667%}.fd-col-lg--offset-after-5{-webkit-margin-end:41.6666666667%;margin-inline-end:41.6666666667%}.fd-col-lg--6{max-width:50%;min-width:50%}.fd-col-lg--offset-6{-webkit-margin-start:50%;margin-inline-start:50%}.fd-col-lg--offset-after-6{-webkit-margin-end:50%;margin-inline-end:50%}.fd-col-lg--7{max-width:58.3333333333%;min-width:58.3333333333%}.fd-col-lg--offset-7{-webkit-margin-start:58.3333333333%;margin-inline-start:58.3333333333%}.fd-col-lg--offset-after-7{-webkit-margin-end:58.3333333333%;margin-inline-end:58.3333333333%}.fd-col-lg--8{max-width:66.6666666667%;min-width:66.6666666667%}.fd-col-lg--offset-8{-webkit-margin-start:66.6666666667%;margin-inline-start:66.6666666667%}.fd-col-lg--offset-after-8{-webkit-margin-end:66.6666666667%;margin-inline-end:66.6666666667%}.fd-col-lg--9{max-width:75%;min-width:75%}.fd-col-lg--offset-9{-webkit-margin-start:75%;margin-inline-start:75%}.fd-col-lg--offset-after-9{-webkit-margin-end:75%;margin-inline-end:75%}.fd-col-lg--10{max-width:83.3333333333%;min-width:83.3333333333%}.fd-col-lg--offset-10{-webkit-margin-start:83.3333333333%;margin-inline-start:83.3333333333%}.fd-col-lg--offset-after-10{-webkit-margin-end:83.3333333333%;margin-inline-end:83.3333333333%}.fd-col-lg--11{max-width:91.6666666667%;min-width:91.6666666667%}.fd-col-lg--offset-11{-webkit-margin-start:91.6666666667%;margin-inline-start:91.6666666667%}.fd-col-lg--offset-after-11{-webkit-margin-end:91.6666666667%;margin-inline-end:91.6666666667%}.fd-col-lg--12{max-width:100%;min-width:100%}.fd-col-lg--offset-12{-webkit-margin-start:100%;margin-inline-start:100%}.fd-col-lg--offset-after-12{-webkit-margin-end:100%;margin-inline-end:100%}}@media(width>=1440px){.fd-col-xl--0{max-width:0;min-width:0%}.fd-col-xl--offset-0{-webkit-margin-start:0;margin-inline-start:0}.fd-col-xl--offset-after-0{-webkit-margin-end:0;margin-inline-end:0}.fd-col-xl--1{max-width:8.3333333333%;min-width:8.3333333333%}.fd-col-xl--offset-1{-webkit-margin-start:8.3333333333%;margin-inline-start:8.3333333333%}.fd-col-xl--offset-after-1{-webkit-margin-end:8.3333333333%;margin-inline-end:8.3333333333%}.fd-col-xl--2{max-width:16.6666666667%;min-width:16.6666666667%}.fd-col-xl--offset-2{-webkit-margin-start:16.6666666667%;margin-inline-start:16.6666666667%}.fd-col-xl--offset-after-2{-webkit-margin-end:16.6666666667%;margin-inline-end:16.6666666667%}.fd-col-xl--3{max-width:25%;min-width:25%}.fd-col-xl--offset-3{-webkit-margin-start:25%;margin-inline-start:25%}.fd-col-xl--offset-after-3{-webkit-margin-end:25%;margin-inline-end:25%}.fd-col-xl--4{max-width:33.3333333333%;min-width:33.3333333333%}.fd-col-xl--offset-4{-webkit-margin-start:33.3333333333%;margin-inline-start:33.3333333333%}.fd-col-xl--offset-after-4{-webkit-margin-end:33.3333333333%;margin-inline-end:33.3333333333%}.fd-col-xl--5{max-width:41.6666666667%;min-width:41.6666666667%}.fd-col-xl--offset-5{-webkit-margin-start:41.6666666667%;margin-inline-start:41.6666666667%}.fd-col-xl--offset-after-5{-webkit-margin-end:41.6666666667%;margin-inline-end:41.6666666667%}.fd-col-xl--6{max-width:50%;min-width:50%}.fd-col-xl--offset-6{-webkit-margin-start:50%;margin-inline-start:50%}.fd-col-xl--offset-after-6{-webkit-margin-end:50%;margin-inline-end:50%}.fd-col-xl--7{max-width:58.3333333333%;min-width:58.3333333333%}.fd-col-xl--offset-7{-webkit-margin-start:58.3333333333%;margin-inline-start:58.3333333333%}.fd-col-xl--offset-after-7{-webkit-margin-end:58.3333333333%;margin-inline-end:58.3333333333%}.fd-col-xl--8{max-width:66.6666666667%;min-width:66.6666666667%}.fd-col-xl--offset-8{-webkit-margin-start:66.6666666667%;margin-inline-start:66.6666666667%}.fd-col-xl--offset-after-8{-webkit-margin-end:66.6666666667%;margin-inline-end:66.6666666667%}.fd-col-xl--9{max-width:75%;min-width:75%}.fd-col-xl--offset-9{-webkit-margin-start:75%;margin-inline-start:75%}.fd-col-xl--offset-after-9{-webkit-margin-end:75%;margin-inline-end:75%}.fd-col-xl--10{max-width:83.3333333333%;min-width:83.3333333333%}.fd-col-xl--offset-10{-webkit-margin-start:83.3333333333%;margin-inline-start:83.3333333333%}.fd-col-xl--offset-after-10{-webkit-margin-end:83.3333333333%;margin-inline-end:83.3333333333%}.fd-col-xl--11{max-width:91.6666666667%;min-width:91.6666666667%}.fd-col-xl--offset-11{-webkit-margin-start:91.6666666667%;margin-inline-start:91.6666666667%}.fd-col-xl--offset-after-11{-webkit-margin-end:91.6666666667%;margin-inline-end:91.6666666667%}.fd-col-xl--12{max-width:100%;min-width:100%}.fd-col-xl--offset-12{-webkit-margin-start:100%;margin-inline-start:100%}.fd-col-xl--offset-after-12{-webkit-margin-end:100%;margin-inline-end:100%}}.fd-container.fd-form-layout-grid-container .fd-form-group,.fd-container.fd-form-layout-grid-container.fd-form-group{padding-block:1rem!important;padding-inline:1rem!important}.fd-container.fd-form-layout-grid-container .fd-form-group .fd-form-group,.fd-container.fd-form-layout-grid-container.fd-form-group .fd-form-group{padding-block:0!important;padding-inline:0!important}.fd-container.fd-form-layout-grid-container .fd-form-group .fd-form-item .fd-form-label,.fd-container.fd-form-layout-grid-container.fd-form-group .fd-form-item .fd-form-label{-webkit-margin-end:0;margin-inline-end:0;white-space:normal}.fd-container.fd-form-layout-grid-container .fd-form-group .fd-form-item .fd-form-label--colon,.fd-container.fd-form-layout-grid-container.fd-form-group .fd-form-item .fd-form-label--colon{-webkit-padding-end:.25rem;padding-inline-end:.25rem}.fd-container.fd-form-layout-grid-container .fd-form-group .fd-form-item .fd-form-label--required,.fd-container.fd-form-layout-grid-container.fd-form-group .fd-form-item .fd-form-label--required{-webkit-padding-end:.5rem;padding-inline-end:.5rem}.fd-container.fd-form-layout-grid-container .fd-form-group .fd-form-item .fd-form-label--required.fd-form-label--colon,.fd-container.fd-form-layout-grid-container.fd-form-group .fd-form-item .fd-form-label--required.fd-form-label--colon{-webkit-padding-end:.75rem;padding-inline-end:.75rem}.fd-container.fd-form-layout-grid-container .fd-row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.fd-container.fd-form-layout-grid-container .fd-row .fd-col{overflow:hidden;padding-block:0;text-overflow:ellipsis;white-space:nowrap}.fd-container.fd-form-layout-grid-container .fd-row .fd-col:not(.fd-form-group){-ms-flex-item-align:center;align-self:center}@media(width>=0){.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--vertical .fd-form-group .fd-form-item,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--vertical.fd-form-group .fd-form-item{margin-top:.625rem}.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--vertical .fd-form-group .fd-form-item:first-of-type,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--vertical.fd-form-group .fd-form-item:first-of-type{margin-top:0}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--1>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--1>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--1>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--2>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--2>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--2>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--3>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--3>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--3>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--4>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--4>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--4>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--5>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--5>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--5>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--6>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--6>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--6>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--7>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--7>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--7>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--8>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--8>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--8>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--9>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--9>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--9>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--10>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--10>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--10>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--11>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--11>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--11>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--12>.fd-form-label,.fd-container.fd-form-layout-grid-container .fd-row .fd-col>.fd-form-label{float:left;text-align:start;width:auto;-webkit-padding-after:.125rem;padding-block-end:.125rem}.fd-container.fd-form-layout-grid-container .fd-row .fd-col--12>.fd-form-label[dir=rtl],.fd-container.fd-form-layout-grid-container .fd-row .fd-col>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col--12>.fd-form-label,[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col>.fd-form-label{float:right}}@media(width>=0)and (width<=599px){.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container .fd-form-group .fd-form-item,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container.fd-form-group .fd-form-item{margin-top:.625rem}.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container .fd-form-group .fd-form-item:first-of-type,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container.fd-form-group .fd-form-item:first-of-type{margin-top:0}}@media(width>=600px){.fd-container.fd-form-layout-grid-container{padding-block:0;padding-inline:.25rem}.fd-container.fd-form-layout-grid-container .fd-row{margin-block:0;margin-inline:-.25rem;min-width:calc(100% + .5rem)}.fd-container.fd-form-layout-grid-container .fd-row .fd-col{padding-block:0;padding-inline:.25rem}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--1>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--1>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--1>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--2>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--2>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--2>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--3>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--3>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--3>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--4>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--4>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--4>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--5>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--5>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--5>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--6>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--6>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--6>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--7>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--7>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--7>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--8>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--8>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--8>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--9>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--9>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--9>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--10>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--10>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--10>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--11>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--11>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--11>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--12>.fd-form-label,.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md>.fd-form-label{float:left;text-align:start;width:auto;-webkit-padding-after:.125rem;padding-block-end:.125rem}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--12>.fd-form-label[dir=rtl],.fd-container.fd-form-layout-grid-container .fd-row .fd-col-md>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md--12>.fd-form-label,[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-md>.fd-form-label{float:right}}@media(width>=600px)and (width<=1023px){.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--md-vertical .fd-form-group .fd-form-item,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--md-vertical.fd-form-group .fd-form-item{margin-top:.625rem}.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--md-vertical .fd-form-group .fd-form-item:first-of-type,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--md-vertical.fd-form-group .fd-form-item:first-of-type{margin-top:0}}@media(width>=1024px){.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--1>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--1>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--1>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--2>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--2>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--2>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--3>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--3>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--3>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--4>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--4>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--4>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--5>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--5>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--5>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--6>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--6>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--6>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--7>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--7>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--7>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--8>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--8>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--8>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--9>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--9>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--9>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--10>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--10>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--10>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--11>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--11>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--11>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--12>.fd-form-label,.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg>.fd-form-label{float:left;text-align:start;width:auto;-webkit-padding-after:.125rem;padding-block-end:.125rem}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--12>.fd-form-label[dir=rtl],.fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg--12>.fd-form-label,[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-lg>.fd-form-label{float:right}}@media(width>=1024px)and (width<=1443px){.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--lg-vertical .fd-form-group .fd-form-item,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--lg-vertical.fd-form-group .fd-form-item{margin-top:.625rem}.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--lg-vertical .fd-form-group .fd-form-item:first-of-type,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--lg-vertical.fd-form-group .fd-form-item:first-of-type{margin-top:0}}@media(width>=1440px){.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--xl-vertical .fd-form-group .fd-form-item,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--xl-vertical.fd-form-group .fd-form-item{margin-top:.625rem}.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--xl-vertical .fd-form-group .fd-form-item:first-of-type,.fd-container.fd-form-layout-grid-container.fd-form-layout-grid-container--xl-vertical.fd-form-group .fd-form-item:first-of-type{margin-top:0}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--1>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--1>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--1>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--2>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--2>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--2>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--3>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--3>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--3>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--4>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--4>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--4>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--5>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--5>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--5>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--6>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--6>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--6>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--7>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--7>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--7>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--8>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--8>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--8>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--9>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--9>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--9>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--10>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--10>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--10>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--11>.fd-form-label{float:right;text-align:right;-webkit-padding-after:0;padding-block-end:0;width:100%}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--11>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--11>.fd-form-label{float:left;text-align:left}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--12>.fd-form-label,.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl>.fd-form-label{float:left;text-align:start;width:auto;-webkit-padding-after:.125rem;padding-block-end:.125rem}.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--12>.fd-form-label[dir=rtl],.fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl>.fd-form-label[dir=rtl],[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl--12>.fd-form-label,[dir=rtl] .fd-container.fd-form-layout-grid-container .fd-row .fd-col-xl>.fd-form-label{float:right}}.fd-section{background-color:var(--sapToolbar_Background);border:0;border-bottom:none;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-block:1rem 1.5rem;padding-inline:0;padding-inline:.5rem}.fd-section:after,.fd-section:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-section:after{clear:both;content:\"\";display:table}@media(min-width:600px){.fd-section{padding-inline:2rem}}@media(min-width:1440px){.fd-section{padding-inline:3rem}}.fd-section--no-border,.fd-section:last-child{border-bottom:0}.fd-section--bleed,.fd-section--full-bleed{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0}.fd-section--bleed:after,.fd-section--bleed:before,.fd-section--full-bleed:after,.fd-section--full-bleed:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-section--bleed .fd-section__footer,.fd-section--bleed .fd-section__header,.fd-section--full-bleed .fd-section__footer,.fd-section--full-bleed .fd-section__header{padding-inline:.5rem}@media(min-width:600px){.fd-section--bleed .fd-section__footer,.fd-section--bleed .fd-section__header,.fd-section--full-bleed .fd-section__footer,.fd-section--full-bleed .fd-section__header{padding-inline:2rem}}@media(min-width:1440px){.fd-section--bleed .fd-section__footer,.fd-section--bleed .fd-section__header,.fd-section--full-bleed .fd-section__footer,.fd-section--full-bleed .fd-section__header{padding-inline:3rem}}.fd-section__header{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;min-height:1.5rem;padding-block:0;padding-inline:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-margin-after:1.5rem;margin-block-end:1.5rem}.fd-section__header:after,.fd-section__header:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-section__title{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapTitleColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-size:var(--sapFontHeader2Size);font-weight:400;forced-color-adjust:none;line-height:normal;line-height:2rem;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-margin-after:0;margin-block-end:0}.fd-section__title:after,.fd-section__title:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-section__actions{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-margin-start:auto;margin-inline-start:auto}.fd-section__actions:after,.fd-section__actions:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-section__footer{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.fd-section__footer:after,.fd-section__footer:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-form-group{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.fd-form-group:after,.fd-form-group:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-form-group--inline{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.fd-form-group--with-spacing{gap:.625rem}.fd-form-group__header{border:0;-webkit-box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:var(--sapGroup_TitleBackground);border-bottom:var(--sapGroup_TitleBorderWidth) solid var(--sapGroup_TitleBorderColor);box-sizing:border-box;min-height:var(--sapElement_LineHeight);padding-inline:var(--fdFormGroupPaddingInline,1rem);width:100%}.fd-form-group__header:after,.fd-form-group__header:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-form-group__header--no-padding{--fdFormGroupPaddingInline:0}.fd-form-group__header--no-border{border-bottom:none}.fd-form-group__header-text{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapGroup_TitleTextColor);font-family:var(--sapFontFamily);font-family:var(--sapFontHeaderFamily);font-size:var(--sapFontSize);font-size:var(--sapGroup_Title_FontSize);font-weight:400;font-weight:700;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;overflow:hidden;padding-block:0;padding-inline:0;text-overflow:ellipsis;white-space:nowrap}.fd-form-group__header-text:after,.fd-form-group__header-text:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-form-group__header-text--wrap{overflow:visible;text-overflow:clip;white-space:normal}.fd-form-header{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:var(--sapGroup_TitleBackground);-webkit-box-shadow:0 var(--fdFormHeader_Border_Width) 0 var(--sapGroup_TitleBorderColor);box-shadow:0 var(--fdFormHeader_Border_Width) 0 var(--sapGroup_TitleBorderColor);height:var(--sapElement_LineHeight);padding-inline:1rem;width:100%}.fd-form-header:after,.fd-form-header:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-form-header__text{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapGroup_TitleTextColor);font-family:var(--sapFontFamily);font-family:var(--sapFontHeaderFamily);font-size:var(--sapFontSize);font-size:var(--sapGroup_Title_FontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;overflow:hidden;padding-block:0;padding-inline:0;text-overflow:ellipsis;white-space:nowrap}.fd-form-header__text:after,.fd-form-header__text:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}fdp-form-group{display:block}fdp-form-group .fd-form-group{display:block}fdp-form-group .fd-form-group.fd-form-group--inline{display:flex;flex-wrap:wrap;justify-content:flex-start}fdp-form-group .fd-form-group__header{padding-inline:1rem}fdp-form-group .fd-row:empty{display:none}fdp-form-group .fd-form-group__header{margin-block-start:1rem}.fd-form-label{overflow:hidden}\n/*! Bundled license information:\n\nfundamental-styles/dist/form-header.css:\n (*!\n * Fundamental Library Styles v0.41.8\n * Copyright (c) 2026 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n *)\n*/\n"] }]
7433
+ }], ctorParameters: () => [], propDecorators: { id: [{
7366
7434
  type: Input
7367
- }], allowNull: [{
7435
+ }], name: [{
7368
7436
  type: Input
7369
- }], keepTwoDigitsTime: [{
7437
+ }], editable: [{
7370
7438
  type: Input
7371
- }], state: [{
7439
+ }], noLabelLayout: [{
7372
7440
  type: Input
7373
- }], buttonFocusable: [{
7441
+ }], class: [{
7374
7442
  type: Input
7375
- }], specialDaysRules: [{
7443
+ }], hint: [{
7376
7444
  type: Input
7377
- }], yearGrid: [{
7445
+ }], inlineColumnLayout: [{
7378
7446
  type: Input
7379
- }], aggregatedYearGrid: [{
7447
+ }], labelColumnLayout: [{
7380
7448
  type: Input
7381
- }], markWeekends: [{
7449
+ }], fieldColumnLayout: [{
7382
7450
  type: Input
7383
- }], spinnerButtons: [{
7451
+ }], gapColumnLayout: [{
7384
7452
  type: Input
7385
- }], showWeekNumbers: [{
7453
+ }], formGroup: [{
7386
7454
  type: Input
7387
- }], showFooter: [{
7455
+ }], topTitle: [{
7388
7456
  type: Input
7389
- }], processInputOnBlur: [{
7457
+ }], mainTitle: [{
7390
7458
  type: Input
7391
- }], preventScrollOnFocus: [{
7459
+ }], hideMainTItle: [{
7392
7460
  type: Input
7393
- }], mobile: [{
7461
+ }], object: [{
7394
7462
  type: Input
7395
- }], mobileConfig: [{
7463
+ }], i18Strings: [{
7396
7464
  type: Input
7397
- }], mobileLandscape: [{
7465
+ }], useForm: [{
7466
+ type: Input,
7467
+ args: [{ transform: booleanAttribute }]
7468
+ }], columnLayout: [{
7398
7469
  type: Input
7399
- }], mobilePortrait: [{
7470
+ }], unifiedLayout: [{
7400
7471
  type: Input
7401
- }], isOpenChange: [{
7402
- type: Output
7403
- }], activeViewChange: [{
7404
- type: Output
7405
- }], datetimeChange: [{
7406
- type: Output
7407
- }], onClose: [{
7472
+ }], onSubmit: [{
7408
7473
  type: Output
7409
- }], dateTimePickerComponent: [{
7410
- type: ViewChild,
7411
- args: [DatetimePickerComponent]
7412
- }], _elRef: [{
7413
- type: ViewChild,
7414
- args: [DatetimePickerComponent, { static: true, read: ElementRef }]
7415
- }], _control: [{
7474
+ }], nativeForm: [{
7416
7475
  type: ViewChild,
7417
- args: [DatetimePickerComponent, { static: true, read: NgControl }]
7418
- }], showCalendarLegend: [{ type: i0.Input, args: [{ isSignal: true, alias: "showCalendarLegend", required: false }] }], legendCol: [{ type: i0.Input, args: [{ isSignal: true, alias: "legendCol", required: false }] }], disableFunction: [{
7419
- type: Input
7476
+ args: ['nativeForm', { read: NgForm }]
7477
+ }], i18Template: [{
7478
+ type: ContentChild,
7479
+ args: ['i18n', { static: true }]
7480
+ }], formGroupChildren: [{
7481
+ type: ContentChildren,
7482
+ args: [FORM_GROUP_CHILD_FIELD_TOKEN, { descendants: true }]
7483
+ }], _errorDirectives: [{
7484
+ type: ContentChildren,
7485
+ args: [FormFieldErrorDirective]
7420
7486
  }] } });
7421
7487
 
7488
+ const EXPORTABLE_DECLARATIONS = [
7489
+ FormGroupComponent,
7490
+ FormFieldComponent,
7491
+ InputMessageGroupWithTemplate,
7492
+ FormFieldGroupComponent,
7493
+ FormFieldControlExtrasComponent,
7494
+ FormGroupHeaderComponent,
7495
+ FieldGroupRowValuePipe,
7496
+ FormFieldErrorDirective,
7497
+ FormFieldErrorHeadingDirective,
7498
+ FormFieldErrorDescriptionDirective
7499
+ ];
7422
7500
  /**
7423
7501
  * @deprecated
7424
7502
  * Use direct imports of components and directives.
7425
7503
  */
7426
- class PlatformDatetimePickerModule {
7427
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformDatetimePickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
7428
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.5", ngImport: i0, type: PlatformDatetimePickerModule, imports: [PlatformDatetimePickerComponent], exports: [PlatformDatetimePickerComponent] }); }
7429
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformDatetimePickerModule, imports: [PlatformDatetimePickerComponent] }); }
7504
+ class FdpFormGroupModule {
7505
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FdpFormGroupModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
7506
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.5", ngImport: i0, type: FdpFormGroupModule, imports: [FormGroupComponent,
7507
+ FormFieldComponent,
7508
+ InputMessageGroupWithTemplate,
7509
+ FormFieldGroupComponent,
7510
+ FormFieldControlExtrasComponent,
7511
+ FormGroupHeaderComponent,
7512
+ FieldGroupRowValuePipe,
7513
+ FormFieldErrorDirective,
7514
+ FormFieldErrorHeadingDirective,
7515
+ FormFieldErrorDescriptionDirective], exports: [FormGroupComponent,
7516
+ FormFieldComponent,
7517
+ InputMessageGroupWithTemplate,
7518
+ FormFieldGroupComponent,
7519
+ FormFieldControlExtrasComponent,
7520
+ FormGroupHeaderComponent,
7521
+ FieldGroupRowValuePipe,
7522
+ FormFieldErrorDirective,
7523
+ FormFieldErrorHeadingDirective,
7524
+ FormFieldErrorDescriptionDirective] }); }
7525
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FdpFormGroupModule, imports: [FormGroupComponent,
7526
+ FormFieldComponent,
7527
+ InputMessageGroupWithTemplate,
7528
+ FormGroupHeaderComponent] }); }
7430
7529
  }
7431
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: PlatformDatetimePickerModule, decorators: [{
7530
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FdpFormGroupModule, decorators: [{
7432
7531
  type: NgModule,
7433
7532
  args: [{
7434
- imports: [PlatformDatetimePickerComponent],
7435
- exports: [PlatformDatetimePickerComponent]
7533
+ imports: [...EXPORTABLE_DECLARATIONS],
7534
+ exports: [...EXPORTABLE_DECLARATIONS]
7436
7535
  }]
7437
7536
  }] });
7438
7537
 
7439
- const defaultFormGeneratorHintOptions = {
7440
- placement: 'right',
7441
- position: 'after',
7442
- trigger: [
7443
- { trigger: 'mouseenter', openAction: true, closeAction: false },
7444
- { trigger: 'mouseleave', openAction: false, closeAction: true },
7445
- { trigger: 'focusin', openAction: true, closeAction: false },
7446
- { trigger: 'focusout', openAction: false, closeAction: true }
7447
- ],
7448
- glyph: 'hint',
7449
- target: 'auto'
7450
- };
7451
-
7452
- /**
7453
- * @description
7454
- * Structural directive, which hides current form item and toggles validation rules for it.
7455
- */
7456
- class DynamicFormControlFieldDirective {
7457
- /**
7458
- * @description Form control instance.
7459
- */
7460
- set fdpDynamicFormControlField(value) {
7461
- this._control = value;
7462
- this._originalValidators = this._control.formItem.validators;
7463
- this._originalAsyncValidators = this._control.formItem.asyncValidators;
7464
- this._updateView();
7465
- }
7466
- /**
7467
- * @description boolean flag representing if current item should be shown.
7468
- */
7469
- set fdpDynamicFormControlFieldShow(value) {
7470
- this.shouldShowFormItem = value;
7471
- this._updateView();
7472
- }
7473
- /** @hidden */
7474
- constructor(_templateRef, _viewContainer) {
7475
- this._templateRef = _templateRef;
7476
- this._viewContainer = _viewContainer;
7477
- /**
7478
- * @hidden
7479
- */
7480
- this._componentRemoved = true;
7481
- }
7482
- /** @hidden */
7483
- ngOnInit() {
7484
- this._updateView();
7485
- }
7486
- /**
7487
- * @description If false, validation will be skipped from the form item control
7488
- */
7489
- set shouldShowFormItem(value) {
7490
- if (value === this._shouldShowFormItem) {
7491
- return;
7492
- }
7493
- this._shouldShowFormItem = value;
7494
- if (!value) {
7495
- this._control.clearValidators();
7496
- this._control.clearAsyncValidators();
7497
- }
7498
- else {
7499
- this._control.setValidators(this._originalValidators ?? []);
7500
- this._control.setAsyncValidators(this._originalAsyncValidators ?? []);
7501
- }
7502
- this._control.updateValueAndValidity({ emitEvent: false });
7503
- }
7504
- /** @hidden */
7505
- _updateView() {
7506
- if (this._shouldShowFormItem && this._componentRemoved) {
7507
- this._viewContainer.createEmbeddedView(this._templateRef);
7508
- this._componentRemoved = false;
7509
- }
7510
- else if (!this._shouldShowFormItem) {
7511
- this._viewContainer.clear();
7512
- this._componentRemoved = true;
7513
- }
7514
- }
7515
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: DynamicFormControlFieldDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
7516
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.5", type: DynamicFormControlFieldDirective, isStandalone: true, selector: "[fdpDynamicFormControlField]", inputs: { fdpDynamicFormControlField: "fdpDynamicFormControlField", fdpDynamicFormControlFieldShow: "fdpDynamicFormControlFieldShow" }, ngImport: i0 }); }
7517
- }
7518
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: DynamicFormControlFieldDirective, decorators: [{
7519
- type: Directive,
7520
- args: [{
7521
- selector: '[fdpDynamicFormControlField]',
7522
- standalone: true
7523
- }]
7524
- }], ctorParameters: () => [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }], propDecorators: { fdpDynamicFormControlField: [{
7525
- type: Input
7526
- }], fdpDynamicFormControlFieldShow: [{
7527
- type: Input
7528
- }] } });
7529
-
7530
7538
  const FDP_FORM_GENERATOR_DEFAULT_HINT_OPTIONS = new InjectionToken('Default options for form-generator hint', {
7531
7539
  factory: () => defaultFormGeneratorHintOptions
7532
7540
  });