@ardium-ui/ui 3.2.7 → 3.3.0-alpha.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/esm2022/lib/_internal/boolean-component.mjs +1 -1
  2. package/esm2022/lib/_internal/focusable-component.mjs +6 -6
  3. package/esm2022/lib/_internal/form-field-component.mjs +33 -0
  4. package/esm2022/lib/_internal/item-storages/dropdown-item-storage.mjs +4 -1
  5. package/esm2022/lib/_internal/item-storages/simple-item-storage.mjs +5 -2
  6. package/esm2022/lib/_internal/ngmodel-component.mjs +61 -6
  7. package/esm2022/lib/_internal/public-api.mjs +2 -0
  8. package/esm2022/lib/_internal/selectable-list-component.mjs +10 -12
  9. package/esm2022/lib/checkbox/checkbox.component.mjs +2 -3
  10. package/esm2022/lib/checkbox-list/checkbox-list.component.mjs +2 -4
  11. package/esm2022/lib/file-inputs/file-input/file-input.component.mjs +3 -3
  12. package/esm2022/lib/file-inputs/file-input-base.mjs +3 -4
  13. package/esm2022/lib/form-field/error/error.component.mjs +17 -0
  14. package/esm2022/lib/form-field/error/error.directive.mjs +17 -0
  15. package/esm2022/lib/form-field/form-field.component.mjs +33 -0
  16. package/esm2022/lib/form-field/form-field.defaults.mjs +15 -0
  17. package/esm2022/lib/form-field/form-field.module.mjs +44 -0
  18. package/esm2022/lib/form-field/hint/hint.component.mjs +17 -0
  19. package/esm2022/lib/form-field/hint/hint.directive.mjs +30 -0
  20. package/esm2022/lib/form-field/horizontal-form-field.component.mjs +33 -0
  21. package/esm2022/lib/form-field/index.mjs +9 -0
  22. package/esm2022/lib/form-field/label/label.component.mjs +21 -0
  23. package/esm2022/lib/form-field-frame/form-field-frame.component.mjs +14 -7
  24. package/esm2022/lib/inputs/_simple-input-base.mjs +4 -4
  25. package/esm2022/lib/inputs/digit-input/digit-input.component.mjs +34 -10
  26. package/esm2022/lib/inputs/digit-input/digit-input.defaults.mjs +3 -3
  27. package/esm2022/lib/inputs/digit-input/digit-input.model.mjs +27 -13
  28. package/esm2022/lib/inputs/digit-input/digit-input.types.mjs +1 -1
  29. package/esm2022/lib/inputs/digit-input/digit-input.utils.mjs +1 -1
  30. package/esm2022/lib/inputs/hex-input/hex-input.component.mjs +13 -5
  31. package/esm2022/lib/inputs/hex-input/hex-input.defaults.mjs +3 -3
  32. package/esm2022/lib/inputs/input/input.component.mjs +12 -3
  33. package/esm2022/lib/inputs/number-input/number-input.component.mjs +15 -7
  34. package/esm2022/lib/inputs/number-input/number-input.defaults.mjs +3 -3
  35. package/esm2022/lib/inputs/password-input/password-input.component.mjs +15 -5
  36. package/esm2022/lib/inputs/password-input/password-input.defaults.mjs +3 -3
  37. package/esm2022/lib/inputs/simple-input/simple-input.component.mjs +12 -3
  38. package/esm2022/lib/inputs/simple-input/simple-input.defaults.mjs +3 -3
  39. package/esm2022/lib/radio/radio/radio.component.mjs +77 -6
  40. package/esm2022/lib/radio/radio/radio.defaults.mjs +3 -3
  41. package/esm2022/lib/radio/radio-group.component.mjs +3 -3
  42. package/esm2022/lib/segment/segment.component.mjs +26 -4
  43. package/esm2022/lib/select/select.component.mjs +16 -8
  44. package/esm2022/lib/select/select.defaults.mjs +3 -3
  45. package/esm2022/lib/slide-toggle/slide-toggle.component.mjs +1 -1
  46. package/esm2022/lib/slider/range-slider/range-slider.component.mjs +2 -1
  47. package/esm2022/lib/table/table.component.mjs +1 -1
  48. package/esm2022/lib/table-pagination/table-pagination.component.mjs +1 -1
  49. package/esm2022/public-api.mjs +3 -1
  50. package/fesm2022/ardium-ui-ui.mjs +545 -95
  51. package/fesm2022/ardium-ui-ui.mjs.map +1 -1
  52. package/lib/_internal/focusable-component.d.ts +3 -3
  53. package/lib/_internal/form-field-component.d.ts +20 -0
  54. package/lib/_internal/item-storages/simple-item-storage.d.ts +1 -0
  55. package/lib/_internal/ngmodel-component.d.ts +17 -3
  56. package/lib/_internal/public-api.d.ts +3 -0
  57. package/lib/_internal/selectable-list-component.d.ts +3 -4
  58. package/lib/checkbox/checkbox.component.d.ts +1 -2
  59. package/lib/checkbox-list/checkbox-list.component.d.ts +1 -2
  60. package/lib/file-inputs/file-input-base.d.ts +1 -2
  61. package/lib/form-field/error/error.component.d.ts +6 -0
  62. package/lib/form-field/error/error.directive.d.ts +5 -0
  63. package/lib/form-field/form-field.component.d.ts +19 -0
  64. package/lib/form-field/form-field.defaults.d.ts +8 -0
  65. package/lib/form-field/form-field.module.d.ts +14 -0
  66. package/lib/form-field/hint/hint.component.d.ts +6 -0
  67. package/lib/form-field/hint/hint.directive.d.ts +8 -0
  68. package/lib/form-field/horizontal-form-field.component.d.ts +19 -0
  69. package/lib/form-field/index.d.ts +8 -0
  70. package/lib/form-field/label/label.component.d.ts +8 -0
  71. package/lib/form-field-frame/form-field-frame.component.d.ts +4 -2
  72. package/lib/inputs/_simple-input-base.d.ts +3 -3
  73. package/lib/inputs/digit-input/digit-input.component.d.ts +9 -4
  74. package/lib/inputs/digit-input/digit-input.defaults.d.ts +2 -2
  75. package/lib/inputs/digit-input/digit-input.model.d.ts +4 -1
  76. package/lib/inputs/digit-input/digit-input.types.d.ts +1 -0
  77. package/lib/inputs/digit-input/digit-input.utils.d.ts +2 -0
  78. package/lib/inputs/hex-input/hex-input.component.d.ts +2 -2
  79. package/lib/inputs/hex-input/hex-input.defaults.d.ts +2 -2
  80. package/lib/inputs/number-input/number-input.component.d.ts +2 -2
  81. package/lib/inputs/number-input/number-input.defaults.d.ts +2 -2
  82. package/lib/inputs/password-input/password-input.component.d.ts +2 -2
  83. package/lib/inputs/password-input/password-input.defaults.d.ts +2 -2
  84. package/lib/radio/radio/radio.component.d.ts +41 -3
  85. package/lib/radio/radio/radio.defaults.d.ts +2 -2
  86. package/lib/radio/radio-group.component.d.ts +1 -2
  87. package/lib/select/select.component.d.ts +3 -4
  88. package/lib/select/select.defaults.d.ts +2 -2
  89. package/package.json +1 -1
  90. package/prebuilt-themes/default/chips.css.map +1 -1
  91. package/prebuilt-themes/default/core.css +3 -1
  92. package/prebuilt-themes/default/core.css.map +1 -1
  93. package/prebuilt-themes/default/form-field-frame.css +23 -6
  94. package/prebuilt-themes/default/form-field-frame.css.map +1 -1
  95. package/prebuilt-themes/default/form-field.css +98 -0
  96. package/prebuilt-themes/default/form-field.css.map +1 -0
  97. package/prebuilt-themes/default/inputs/color-input.css +0 -1
  98. package/prebuilt-themes/default/inputs/color-input.css.map +1 -1
  99. package/prebuilt-themes/default/inputs/digit-input.css +72 -5
  100. package/prebuilt-themes/default/inputs/digit-input.css.map +1 -1
  101. package/prebuilt-themes/default/inputs/file-input.css +0 -6
  102. package/prebuilt-themes/default/inputs/file-input.css.map +1 -1
  103. package/prebuilt-themes/default/inputs/hex-input.css +0 -1
  104. package/prebuilt-themes/default/inputs/hex-input.css.map +1 -1
  105. package/prebuilt-themes/default/inputs/input.css +0 -6
  106. package/prebuilt-themes/default/inputs/input.css.map +1 -1
  107. package/prebuilt-themes/default/inputs/number-input.css +33 -18
  108. package/prebuilt-themes/default/inputs/number-input.css.map +1 -1
  109. package/prebuilt-themes/default/inputs/password-input.css +0 -1
  110. package/prebuilt-themes/default/inputs/password-input.css.map +1 -1
  111. package/prebuilt-themes/default/inputs/search-bar.css +0 -1
  112. package/prebuilt-themes/default/inputs/search-bar.css.map +1 -1
  113. package/prebuilt-themes/default/inputs/simple-input.css +0 -6
  114. package/prebuilt-themes/default/inputs/simple-input.css.map +1 -1
  115. package/prebuilt-themes/default/segment.css +18 -1
  116. package/prebuilt-themes/default/segment.css.map +1 -1
  117. package/public-api.d.ts +2 -0
  118. package/themes/default/_mixins.scss +83 -64
  119. package/themes/default/core.scss +102 -99
  120. package/themes/default/form-field-frame.scss +79 -78
  121. package/themes/default/form-field.scss +100 -0
  122. package/themes/default/inputs/_shared.scss +50 -51
  123. package/themes/default/inputs/digit-input.scss +101 -56
  124. package/themes/default/inputs/file-input.scss +0 -6
  125. package/themes/default/inputs/input.scss +1 -7
  126. package/themes/default/inputs/number-input.scss +131 -121
  127. package/themes/default/inputs/simple-input.scss +1 -8
@@ -1,17 +1,18 @@
1
1
  import 'first-last';
2
2
  import * as i0 from '@angular/core';
3
- import { input, signal, Directive, Input, HostBinding, computed, output, ViewChildren, InjectionToken, effect, viewChildren, forwardRef, Component, ViewEncapsulation, ChangeDetectionStrategy, Inject, NgModule, inject, viewChild, contentChild, ViewContainerRef, TemplateRef, HostListener, Pipe, model, ElementRef, ChangeDetectorRef, ContentChildren, ViewChild, ContentChild, contentChildren, Renderer2, Injector, Injectable } from '@angular/core';
4
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import { input, signal, Directive, Input, HostBinding, computed, output, ViewChildren, inject, Injector, runInInjectionContext, InjectionToken, effect, viewChildren, forwardRef, Component, ViewEncapsulation, ChangeDetectionStrategy, Inject, NgModule, viewChild, contentChild, ViewContainerRef, TemplateRef, HostListener, Pipe, model, ElementRef, ChangeDetectorRef, ContentChildren, ViewChild, ContentChild, contentChildren, Renderer2, Injectable } from '@angular/core';
4
+ import { NgControl, Validators, NG_VALUE_ACCESSOR } from '@angular/forms';
5
5
  import * as i4 from '@ardium-ui/devkit';
6
6
  import { coerceBooleanProperty, coerceNumberProperty, coerceArrayProperty, ArdiumClickOutsideEventModule, ArdiumInnerHTMLModule, ArdiumFilesizePipeModule, ArdiumFilenamePipeModule, ArdiumFileextPipeModule, ArdiumHoldEventModule } from '@ardium-ui/devkit';
7
- import { isArray, isAnyString, isNull, isNumber, isFunction, isRegExp, isDefined, any, isPrimitive, isString, evaluate, isObject, isPromise } from 'simple-bool';
7
+ import { toObservable } from '@angular/core/rxjs-interop';
8
+ import { map, Subject, merge, takeUntil, startWith, BehaviorSubject } from 'rxjs';
9
+ import { TakeChance } from 'take-chance';
10
+ import { isAnyString, isNull, isArray, isNumber, isFunction, isRegExp, isDefined, any, isPrimitive, isString, evaluate, isObject, isPromise } from 'simple-bool';
8
11
  import * as i1 from '@angular/common';
9
12
  import { CommonModule, DOCUMENT, DecimalPipe, AsyncPipe } from '@angular/common';
10
13
  import { Overlay, ScrollStrategyOptions, OverlayConfig, OverlayModule } from '@angular/cdk/overlay';
11
14
  import { TemplatePortal, ComponentPortal } from '@angular/cdk/portal';
12
15
  import { resolvePath } from 'resolve-object-path';
13
- import { Subject, merge, takeUntil, startWith, BehaviorSubject } from 'rxjs';
14
- import { TakeChance } from 'take-chance';
15
16
  import { roundToPrecision, roundToMultiple } from 'more-rounding';
16
17
  import * as Color from 'color';
17
18
  import { keyToString } from 'key-display-names';
@@ -80,7 +81,7 @@ class _FocusableComponentBase extends _DisablableComponentBase {
80
81
  this.tabIndex = computed(() => (this.disabled() ? -1 : this._tabIndex()));
81
82
  this._tabIndex = input(this._DEFAULTS.tabIndex, {
82
83
  alias: 'tabIndex',
83
- transform: v => coerceNumberProperty(v),
84
+ transform: v => coerceNumberProperty(v, 0),
84
85
  });
85
86
  //! events
86
87
  /**
@@ -95,7 +96,7 @@ class _FocusableComponentBase extends _DisablableComponentBase {
95
96
  /**
96
97
  * Whether the component is currently focused.
97
98
  */
98
- this.isFocused = false;
99
+ this.isFocused = signal(false);
99
100
  }
100
101
  /**
101
102
  * Focuses the correct element in the component.
@@ -126,7 +127,7 @@ class _FocusableComponentBase extends _DisablableComponentBase {
126
127
  * @param event The focus event to emit.
127
128
  */
128
129
  onFocus(event) {
129
- this.isFocused = true;
130
+ this.isFocused.set(true);
130
131
  this.focusEvent.emit(event);
131
132
  }
132
133
  /**
@@ -134,7 +135,7 @@ class _FocusableComponentBase extends _DisablableComponentBase {
134
135
  * @param event The focus event to emit.
135
136
  */
136
137
  onBlur(event) {
137
- this.isFocused = false;
138
+ this.isFocused.set(false);
138
139
  this.blurEvent.emit(event);
139
140
  }
140
141
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: _FocusableComponentBase, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
@@ -147,13 +148,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
147
148
  args: ['focusableElement']
148
149
  }] } });
149
150
 
150
- const _ngModelComponentDefaults = _focusableComponentDefaults;
151
+ const _ngModelComponentDefaults = {
152
+ ..._focusableComponentDefaults,
153
+ required: undefined,
154
+ };
151
155
  /**
152
156
  * Common code for components which implement the ControlValueAccessor.
153
157
  *
154
158
  * **Warning**: `writeValue` function should be implemented on the child component!
155
159
  */
156
160
  class _NgModelComponentBase extends _FocusableComponentBase {
161
+ constructor() {
162
+ super(...arguments);
163
+ //! event handlers
164
+ this.wasTouched = signal(false);
165
+ this._shouldEmitTouched = false;
166
+ //! form field related
167
+ this._injector = inject(Injector);
168
+ this._ngControl = null;
169
+ this.htmlId = input(TakeChance.id());
170
+ this._hasError = input(undefined, {
171
+ transform: v => coerceBooleanProperty(v),
172
+ alias: 'hasError',
173
+ });
174
+ this._hasErrorInControl = signal(false);
175
+ this.hasError = computed(() => this._hasError() ?? (this.wasTouched() && this._hasErrorInControl()));
176
+ }
157
177
  /**
158
178
  * Registers a function to handle touched state. Required by ControlValueAccessor.
159
179
  * @param fn The function to register.
@@ -175,18 +195,77 @@ class _NgModelComponentBase extends _FocusableComponentBase {
175
195
  setDisabledState(isDisabled) {
176
196
  this.disabled.set(isDisabled);
177
197
  }
178
- //! event handlers
198
+ onFocus(event) {
199
+ super.onFocus(event);
200
+ this._shouldEmitTouched = false;
201
+ }
179
202
  onBlur(event) {
203
+ this._shouldEmitTouched = true;
180
204
  super.onBlur(event);
181
- this._onTouchedRegistered?.();
205
+ setTimeout(() => {
206
+ if (!this._shouldEmitTouched)
207
+ return;
208
+ this.wasTouched.set(true);
209
+ this._onTouchedRegistered?.();
210
+ }, 0);
211
+ }
212
+ ngOnInit() {
213
+ this._ngControl = this._injector.get(NgControl, null);
214
+ if (this._ngControl) {
215
+ this._ngControl.valueAccessor = this;
216
+ this._hasErrorInControl.set(this._ngControl.status === 'INVALID');
217
+ this._statusChangesSub = this._ngControl.statusChanges
218
+ ?.pipe(map(v => v === 'INVALID'))
219
+ .subscribe(v => this._hasErrorInControl.set(v));
220
+ if (!this._ngControl.control)
221
+ return;
222
+ runInInjectionContext(this._injector, () => {
223
+ // do not read the next line of code if you are easily frightened
224
+ // I'm not proud of this part, but it had to be done. God please forgive me
225
+ // I didn't find any other feasible way to detect when the control changes its touched state
226
+ // so it had to be hacked like this
227
+ toObservable(this._ngControl?.control?.touchedReactive)?.subscribe(v => this.wasTouched.set(v));
228
+ });
229
+ }
230
+ }
231
+ ngOnDestroy() {
232
+ this._statusChangesSub?.unsubscribe();
182
233
  }
183
234
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: _NgModelComponentBase, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
184
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: _NgModelComponentBase, usesInheritance: true, ngImport: i0 }); }
235
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: _NgModelComponentBase, inputs: { htmlId: { classPropertyName: "htmlId", publicName: "htmlId", isSignal: true, isRequired: false, transformFunction: null }, _hasError: { classPropertyName: "_hasError", publicName: "hasError", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0 }); }
185
236
  }
186
237
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: _NgModelComponentBase, decorators: [{
187
238
  type: Directive
188
239
  }] });
189
240
 
241
+ const _formFieldComponentDefaults = {
242
+ ..._ngModelComponentDefaults,
243
+ required: undefined,
244
+ };
245
+ /**
246
+ * Common code for components which implement the ControlValueAccessor.
247
+ *
248
+ * **Warning**: `writeValue` function should be implemented on the child component!
249
+ */
250
+ class _FormFieldComponentBase extends _NgModelComponentBase {
251
+ constructor() {
252
+ super(...arguments);
253
+ this._required = input(undefined, {
254
+ transform: v => coerceBooleanProperty(v),
255
+ alias: 'required',
256
+ });
257
+ this.isSuccess = input(false, { transform: v => coerceBooleanProperty(v) });
258
+ }
259
+ get required() {
260
+ return this._required() ?? !!this._ngControl?.control?.hasValidator(Validators.required);
261
+ }
262
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: _FormFieldComponentBase, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
263
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: _FormFieldComponentBase, inputs: { _required: { classPropertyName: "_required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, isSuccess: { classPropertyName: "isSuccess", publicName: "isSuccess", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0 }); }
264
+ }
265
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: _FormFieldComponentBase, decorators: [{
266
+ type: Directive
267
+ }] });
268
+
190
269
  //! appearances
191
270
  const OutlinedAppearance = {
192
271
  /**
@@ -251,7 +330,7 @@ const DigitInputPrimitiveOption = {
251
330
  };
252
331
 
253
332
  const _digitInputDefaults = {
254
- ..._ngModelComponentDefaults,
333
+ ..._formFieldComponentDefaults,
255
334
  appearance: FormElementAppearance.Outlined,
256
335
  variant: FormElementVariant.Rounded,
257
336
  shape: DigitInputShape.Square,
@@ -291,6 +370,8 @@ class DigitInputModel {
291
370
  return {
292
371
  type: DigitInputConfigDataType.Input,
293
372
  index: inputIndex++,
373
+ readonly: v.readonly,
374
+ placeholder: v.placeholder ?? '',
294
375
  };
295
376
  });
296
377
  });
@@ -318,13 +399,23 @@ class DigitInputModel {
318
399
  return !!this.value()?.[index];
319
400
  }
320
401
  writeValue(v) {
321
- if (!isArray(v) && !isAnyString(v) && !isNull(v)) {
322
- //warn when using non-string value
323
- console.warn(new Error(`ARD-WA0020: Trying to set <ard-digit-input>'s value to "${v}" (of type ${typeof v}), expected string or array of strings.`));
324
- //normalize the value
325
- v = v?.toString?.() ?? String(v);
402
+ if (this._ardHost.outputAsString()) {
403
+ if (!isAnyString(v) && !isNull(v)) {
404
+ throw new Error(`ARD-FT0040b: Trying to set <ard-digit-input>'s value to "${v}" (of type ${typeof v}), but the input uses [outputAsString]="true", and thus expects string or null.`);
405
+ }
406
+ const vArray = v?.split('') ?? [];
407
+ if (vArray.length > this._configArrayNoStatics().length) {
408
+ console.warn(`ARD-WA0041: Value provided to <ard-digit-input> is too long. Got ${vArray.length} characters, but expected a maximum of ${this._configArrayNoStatics().length} characters.`);
409
+ }
410
+ return this._writeValue(vArray);
411
+ }
412
+ if (!isAnyString(v) && !isNull(v) && !isArray(v)) {
413
+ throw new Error(`ARD-FT0041: Trying to set <ard-digit-input>'s value to "${v}" (of type ${typeof v}), expected string or array of characters.`);
326
414
  }
327
415
  const vArray = coerceArrayProperty(v);
416
+ if (vArray.length > this._configArrayNoStatics().length) {
417
+ console.warn(`ARD-WA0041: Value provided to <ard-digit-input> is too long. Got ${vArray.length} characters, but expected a maximum of ${this._configArrayNoStatics().length} characters.`);
418
+ }
328
419
  const problemIndex = vArray.findIndex(el => !isAnyString(el) || el.length > 1);
329
420
  if (problemIndex !== -1) {
330
421
  throw new Error(`ARD-FT0042: Array passed to <ard-digit-input>'s value must only contain strings of length 1 or 0. Element "${vArray[problemIndex]}" at index ${problemIndex} does not match those requirements.`);
@@ -332,17 +423,19 @@ class DigitInputModel {
332
423
  return this._writeValue(vArray);
333
424
  }
334
425
  _writeValue(v) {
335
- const oldVal = this.value();
426
+ const isOldValueTheSame = this.value() ? this.value().every((ch, i) => ch === v?.[i]) : !v;
427
+ if (isOldValueTheSame)
428
+ return false;
336
429
  this.value.set(v && v.map(el => el || null));
337
430
  this.validateValueAndUpdate();
338
431
  this._updateInputElements();
339
- return oldVal !== v;
432
+ return true;
340
433
  }
341
434
  _updateInputElements() {
342
- const value = this.value ?? [];
435
+ const v = this.value() ?? [];
343
436
  let i = 0;
344
437
  for (const inputEl of this._ardHost.inputs()) {
345
- inputEl.nativeElement.value = value()?.[i] ?? '';
438
+ inputEl.nativeElement.value = v[i] ?? '';
346
439
  i++;
347
440
  }
348
441
  }
@@ -396,7 +489,7 @@ class DigitInputModel {
396
489
  //! validate against the config
397
490
  validateInputAndSetValue(input, index) {
398
491
  if (index < 0 || index > this._configArrayNoStatics().length)
399
- return false;
492
+ return null;
400
493
  let v = this.value();
401
494
  //prepare the value array if does not exist
402
495
  if (!v) {
@@ -418,7 +511,7 @@ class DigitInputModel {
418
511
  //get the corresponding HTML input element
419
512
  const inputEl = this._ardHost.inputs()[index];
420
513
  if (!inputEl) {
421
- throw new Error("ARD-IS0048: <ard-digit-input>'s value changed, but its corresponding input element could not be found. This is error is fatal to the functioning of Ardium UI. Please report this issue to the creators.");
514
+ throw new Error("ARD-IS0048: <ard-digit-input>'s value changed, but its corresponding input element could not be found. If you are reading this, you probably experienced a problem with Ardium UI. Please report this issue to the creators.");
422
515
  }
423
516
  //update the input element and value array
424
517
  const newVal = inputChar ?? before;
@@ -431,7 +524,7 @@ class DigitInputModel {
431
524
  return newArr;
432
525
  });
433
526
  //return changes marker and validated value
434
- return [newVal !== before, inputChar];
527
+ return { wasChanged: newVal !== before, resultChar: inputChar };
435
528
  }
436
529
  validateValueAndUpdate() {
437
530
  const v = this.value();
@@ -478,7 +571,7 @@ class DigitInputModel {
478
571
  }
479
572
  }
480
573
 
481
- class ArdiumDigitInputComponent extends _NgModelComponentBase {
574
+ class ArdiumDigitInputComponent extends _FormFieldComponentBase {
482
575
  constructor(defaults) {
483
576
  super(defaults);
484
577
  //! inputs ref
@@ -508,8 +601,10 @@ class ArdiumDigitInputComponent extends _NgModelComponentBase {
508
601
  this._oldConfigArrayDataLength = this.configArrayData().length;
509
602
  this._emitChange();
510
603
  });
604
+ this._wasViewInit = false;
511
605
  //! value two-way binding
512
606
  this.outputAsString = input(this._DEFAULTS.outputAsString, { transform: v => coerceBooleanProperty(v) });
607
+ this.outputControlValueAccessorOnFinish = input(false, { transform: v => coerceBooleanProperty(v) });
513
608
  this.valueChange = output();
514
609
  this.stringValue = this.model.stringValue;
515
610
  this.emittableValue = computed(() => {
@@ -522,16 +617,29 @@ class ArdiumDigitInputComponent extends _NgModelComponentBase {
522
617
  this.focusIndexEvent = output({ alias: 'focusIndex' });
523
618
  this.blurIndexEvent = output({ alias: 'blurIndex' });
524
619
  }
620
+ ngOnInit() {
621
+ super.ngOnInit();
622
+ this._oldConfigArrayDataLength = this.configArrayData().length;
623
+ }
525
624
  isInputEmpty(index) {
526
625
  return !this.model.isDefinedAtIndex(index);
527
626
  }
528
- //! control value accessor's write value implementation
529
627
  writeValue(v) {
628
+ if (!this._wasViewInit) {
629
+ this._valueBeforeViewInit = v;
630
+ return;
631
+ }
530
632
  this._writeValue(v);
531
633
  }
532
634
  _writeValue(v) {
533
635
  return this.model.writeValue(v);
534
636
  }
637
+ ngAfterViewInit() {
638
+ this._wasViewInit = true;
639
+ if (this._valueBeforeViewInit) {
640
+ this._writeValue(this._valueBeforeViewInit);
641
+ }
642
+ }
535
643
  set value(v) {
536
644
  this.writeValue(v);
537
645
  }
@@ -556,8 +664,8 @@ class ArdiumDigitInputComponent extends _NgModelComponentBase {
556
664
  this.focusByIndex(index + 1);
557
665
  }
558
666
  _updateSingleInputValue(value, index) {
559
- const valueChanged = this.model.validateInputAndSetValue(value, index);
560
- if (!valueChanged || !valueChanged[0])
667
+ const changeResult = this.model.validateInputAndSetValue(value, index);
668
+ if (!changeResult?.wasChanged)
561
669
  return;
562
670
  this._emitChange();
563
671
  if (this.model.isValueFull()) {
@@ -587,7 +695,8 @@ class ArdiumDigitInputComponent extends _NgModelComponentBase {
587
695
  }
588
696
  _emitChange() {
589
697
  const v = this.emittableValue();
590
- this._onChangeRegistered?.(v);
698
+ if (!this.outputControlValueAccessorOnFinish() || this.model.isValueFull())
699
+ this._onChangeRegistered?.(v);
591
700
  this.valueChange.emit(v);
592
701
  if (this.model.isValueFull()) {
593
702
  this.finishedValue.emit(v);
@@ -616,13 +725,17 @@ class ArdiumDigitInputComponent extends _NgModelComponentBase {
616
725
  }
617
726
  }
618
727
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumDigitInputComponent, deps: [{ token: ARD_DIGIT_INPUT_DEFAULTS }], target: i0.ɵɵFactoryTarget.Component }); }
619
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ArdiumDigitInputComponent, selector: "ard-digit-input", inputs: { appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, shape: { classPropertyName: "shape", publicName: "shape", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, outputAsString: { classPropertyName: "outputAsString", publicName: "outputAsString", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", finishedValue: "finishedValue", focusIndexEvent: "focusIndex", blurIndexEvent: "blurIndex" }, providers: [
728
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ArdiumDigitInputComponent, selector: "ard-digit-input", inputs: { appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, shape: { classPropertyName: "shape", publicName: "shape", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, outputAsString: { classPropertyName: "outputAsString", publicName: "outputAsString", isSignal: true, isRequired: false, transformFunction: null }, outputControlValueAccessorOnFinish: { classPropertyName: "outputControlValueAccessorOnFinish", publicName: "outputControlValueAccessorOnFinish", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", finishedValue: "finishedValue", focusIndexEvent: "focusIndex", blurIndexEvent: "blurIndex" }, providers: [
620
729
  {
621
730
  provide: NG_VALUE_ACCESSOR,
622
731
  useExisting: forwardRef(() => ArdiumDigitInputComponent),
623
732
  multi: true,
624
733
  },
625
- ], viewQueries: [{ propertyName: "inputs", predicate: ["input"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\n class=\"ard-digit-input\"\n [ngClass]=\"ngClasses()\"\n>\n @for (data of configArrayData(); track $index) {\n <div class=\"ard-digit-input__item\">\n @if (data.type === 'input') {\n <input\n #input\n #focusableElement\n class=\"ard-digit-input__input\"\n type=\"text\"\n autocomplete=\"off\"\n [readonly]=\"data.readonly\"\n [class.ard-digit-input__input-readonly]=\"data.readonly\"\n [class.ard-digit-input__input-empty]=\"isInputEmpty(data.index!)\"\n (paste)=\"onPaste($event, data.index!)\"\n (input)=\"onInput($event, data.index!)\"\n (focus)=\"onFocusMaster($event, data.index!)\"\n (blur)=\"onBlurMaster($event, data.index!)\"\n (keydown)=\"onKeydown($event, data.index!)\"\n />\n } @else {\n <div class=\"ard-digit-input__static\">\n {{ data.char }}\n </div>\n }\n </div>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
734
+ {
735
+ provide: _FormFieldComponentBase,
736
+ useExisting: ArdiumDigitInputComponent,
737
+ },
738
+ ], viewQueries: [{ propertyName: "inputs", predicate: ["input"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\r\n class=\"ard-digit-input\"\r\n [ngClass]=\"ngClasses()\"\r\n [class.ard-has-error]=\"hasError()\"\r\n [class.ard-is-success]=\"isSuccess()\"\r\n>\r\n @for (data of configArrayData(); track $index) {\r\n <div\r\n class=\"ard-digit-input__item\"\r\n [class.ard-digit-input__item-with-input]=\"data.type === 'input'\"\r\n >\r\n @if (data.type === 'input') {\r\n <input\r\n #input\r\n #focusableElement\r\n class=\"ard-digit-input__input\"\r\n type=\"text\"\r\n autocomplete=\"off\"\r\n [readonly]=\"data.readonly\"\r\n [placeholder]=\"data.placeholder\"\r\n [attr.tabindex]=\"tabIndex()\"\r\n [class.ard-digit-input__input-readonly]=\"data.readonly\"\r\n [class.ard-digit-input__input-empty]=\"isInputEmpty(data.index!)\"\r\n (paste)=\"onPaste($event, data.index!)\"\r\n (input)=\"onInput($event, data.index!)\"\r\n (focus)=\"onFocusMaster($event, data.index!)\"\r\n (blur)=\"onBlurMaster($event, data.index!)\"\r\n (keydown)=\"onKeydown($event, data.index!)\"\r\n />\r\n } @else {\r\n <div class=\"ard-digit-input__static\">\r\n {{ data.char }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
626
739
  }
627
740
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumDigitInputComponent, decorators: [{
628
741
  type: Component,
@@ -632,7 +745,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
632
745
  useExisting: forwardRef(() => ArdiumDigitInputComponent),
633
746
  multi: true,
634
747
  },
635
- ], template: "<div\n class=\"ard-digit-input\"\n [ngClass]=\"ngClasses()\"\n>\n @for (data of configArrayData(); track $index) {\n <div class=\"ard-digit-input__item\">\n @if (data.type === 'input') {\n <input\n #input\n #focusableElement\n class=\"ard-digit-input__input\"\n type=\"text\"\n autocomplete=\"off\"\n [readonly]=\"data.readonly\"\n [class.ard-digit-input__input-readonly]=\"data.readonly\"\n [class.ard-digit-input__input-empty]=\"isInputEmpty(data.index!)\"\n (paste)=\"onPaste($event, data.index!)\"\n (input)=\"onInput($event, data.index!)\"\n (focus)=\"onFocusMaster($event, data.index!)\"\n (blur)=\"onBlurMaster($event, data.index!)\"\n (keydown)=\"onKeydown($event, data.index!)\"\n />\n } @else {\n <div class=\"ard-digit-input__static\">\n {{ data.char }}\n </div>\n }\n </div>\n }\n</div>\n" }]
748
+ {
749
+ provide: _FormFieldComponentBase,
750
+ useExisting: ArdiumDigitInputComponent,
751
+ },
752
+ ], template: "<div\r\n class=\"ard-digit-input\"\r\n [ngClass]=\"ngClasses()\"\r\n [class.ard-has-error]=\"hasError()\"\r\n [class.ard-is-success]=\"isSuccess()\"\r\n>\r\n @for (data of configArrayData(); track $index) {\r\n <div\r\n class=\"ard-digit-input__item\"\r\n [class.ard-digit-input__item-with-input]=\"data.type === 'input'\"\r\n >\r\n @if (data.type === 'input') {\r\n <input\r\n #input\r\n #focusableElement\r\n class=\"ard-digit-input__input\"\r\n type=\"text\"\r\n autocomplete=\"off\"\r\n [readonly]=\"data.readonly\"\r\n [placeholder]=\"data.placeholder\"\r\n [attr.tabindex]=\"tabIndex()\"\r\n [class.ard-digit-input__input-readonly]=\"data.readonly\"\r\n [class.ard-digit-input__input-empty]=\"isInputEmpty(data.index!)\"\r\n (paste)=\"onPaste($event, data.index!)\"\r\n (input)=\"onInput($event, data.index!)\"\r\n (focus)=\"onFocusMaster($event, data.index!)\"\r\n (blur)=\"onBlurMaster($event, data.index!)\"\r\n (keydown)=\"onKeydown($event, data.index!)\"\r\n />\r\n } @else {\r\n <div class=\"ard-digit-input__static\">\r\n {{ data.char }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n" }]
636
753
  }], ctorParameters: () => [{ type: undefined, decorators: [{
637
754
  type: Inject,
638
755
  args: [ARD_DIGIT_INPUT_DEFAULTS]
@@ -867,8 +984,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
867
984
  class ArdiumFormFieldFrameComponent extends _FocusableComponentBase {
868
985
  constructor(defaults) {
869
986
  super(defaults);
870
- //! focused state
871
- this.isFocused = false;
987
+ this.hasError = input(false, { transform: v => coerceBooleanProperty(v) });
988
+ this.isSuccess = input(false, { transform: v => coerceBooleanProperty(v) });
872
989
  //! appearance
873
990
  /**
874
991
  * The appearance of the component, aka the styling.
@@ -886,7 +1003,9 @@ class ArdiumFormFieldFrameComponent extends _FocusableComponentBase {
886
1003
  `ard-appearance-${this.appearance()}`,
887
1004
  `ard-variant-${this.variant()}`,
888
1005
  this.compact() ? 'ard-compact' : '',
889
- this.isFocused ? 'ard-focused' : 'ard-unfocused',
1006
+ this.hasError() ? 'ard-has-error' : '',
1007
+ this.isSuccess() ? 'ard-is-success' : '',
1008
+ this.isFocused() ? 'ard-focused' : 'ard-unfocused',
890
1009
  ].join(' '));
891
1010
  //! prefix & suffix
892
1011
  this.prefixTemplateInput = input(undefined, { alias: 'prefixTemplate' });
@@ -894,8 +1013,12 @@ class ArdiumFormFieldFrameComponent extends _FocusableComponentBase {
894
1013
  this.prefixTemplate = contentChild(ArdFormFieldPrefixTemplateDirective);
895
1014
  this.suffixTemplate = contentChild(ArdFormFieldSuffixTemplateDirective);
896
1015
  }
1016
+ //! focused state
1017
+ set _setIsFocused(v) {
1018
+ this.isFocused.set(v);
1019
+ }
897
1020
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumFormFieldFrameComponent, deps: [{ token: ARD_FORM_FIELD_FRAME_DEFAULTS }], target: i0.ɵɵFactoryTarget.Component }); }
898
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ArdiumFormFieldFrameComponent, selector: "ard-form-field-frame", inputs: { isFocused: { classPropertyName: "isFocused", publicName: "isFocused", isSignal: false, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null }, prefixTemplateInput: { classPropertyName: "prefixTemplateInput", publicName: "prefixTemplate", isSignal: true, isRequired: false, transformFunction: null }, suffixTemplateInput: { classPropertyName: "suffixTemplateInput", publicName: "suffixTemplate", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "prefixTemplate", first: true, predicate: ArdFormFieldPrefixTemplateDirective, descendants: true, isSignal: true }, { propertyName: "suffixTemplate", first: true, predicate: ArdFormFieldSuffixTemplateDirective, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\n class=\"ard-form-field-frame\"\n [ngClass]=\"ngClasses()\"\n>\n <div class=\"ard-form-field-overlay\"></div>\n @if (prefixTemplateInput() ?? prefixTemplate()) {\n <div class=\"ard-form-field-prefix-container\">\n <ng-template [ngTemplateOutlet]=\"prefixTemplateInput() ?? prefixTemplate()?.template ?? null\"></ng-template>\n </div>\n }\n <div class=\"ard-form-field-content-container\">\n <ng-content></ng-content>\n </div>\n @if (suffixTemplateInput() ?? suffixTemplate()) {\n <div class=\"ard-form-field-suffix-container\">\n <ng-template [ngTemplateOutlet]=\"suffixTemplateInput() ?? suffixTemplate()?.template ?? null\"></ng-template>\n </div>\n }\n</div>\n", styles: [".ard-form-field-frame{position:relative}.ard-form-field-overlay{position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:1}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1021
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ArdiumFormFieldFrameComponent, selector: "ard-form-field-frame", inputs: { hasError: { classPropertyName: "hasError", publicName: "hasError", isSignal: true, isRequired: false, transformFunction: null }, isSuccess: { classPropertyName: "isSuccess", publicName: "isSuccess", isSignal: true, isRequired: false, transformFunction: null }, _setIsFocused: { classPropertyName: "_setIsFocused", publicName: "isFocused", isSignal: false, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null }, prefixTemplateInput: { classPropertyName: "prefixTemplateInput", publicName: "prefixTemplate", isSignal: true, isRequired: false, transformFunction: null }, suffixTemplateInput: { classPropertyName: "suffixTemplateInput", publicName: "suffixTemplate", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "prefixTemplate", first: true, predicate: ArdFormFieldPrefixTemplateDirective, descendants: true, isSignal: true }, { propertyName: "suffixTemplate", first: true, predicate: ArdFormFieldSuffixTemplateDirective, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\n class=\"ard-form-field-frame\"\n [ngClass]=\"ngClasses()\"\n>\n <div class=\"ard-form-field-overlay\"></div>\n @if (prefixTemplateInput() ?? prefixTemplate()) {\n <div class=\"ard-form-field-prefix-container\">\n <ng-template [ngTemplateOutlet]=\"prefixTemplateInput() ?? prefixTemplate()?.template ?? null\"></ng-template>\n </div>\n }\n <div class=\"ard-form-field-content-container\">\n <ng-content></ng-content>\n </div>\n @if (suffixTemplateInput() ?? suffixTemplate()) {\n <div class=\"ard-form-field-suffix-container\">\n <ng-template [ngTemplateOutlet]=\"suffixTemplateInput() ?? suffixTemplate()?.template ?? null\"></ng-template>\n </div>\n }\n</div>\n", styles: [".ard-form-field-frame{position:relative}.ard-form-field-overlay{position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:1}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
899
1022
  }
900
1023
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumFormFieldFrameComponent, decorators: [{
901
1024
  type: Component,
@@ -903,8 +1026,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
903
1026
  }], ctorParameters: () => [{ type: undefined, decorators: [{
904
1027
  type: Inject,
905
1028
  args: [ARD_FORM_FIELD_FRAME_DEFAULTS]
906
- }] }], propDecorators: { isFocused: [{
907
- type: Input
1029
+ }] }], propDecorators: { _setIsFocused: [{
1030
+ type: Input,
1031
+ args: [{ alias: 'isFocused' }]
908
1032
  }] } });
909
1033
 
910
1034
  class ArdiumFormFieldFrameModule {
@@ -1335,7 +1459,7 @@ function escapeAndCreateRegex(str, flags, negated = true) {
1335
1459
  }
1336
1460
 
1337
1461
  const _simpleInputComponentDefaults = {
1338
- ..._ngModelComponentDefaults,
1462
+ ..._formFieldComponentDefaults,
1339
1463
  appearance: FormElementAppearance.Outlined,
1340
1464
  variant: FormElementVariant.Rounded,
1341
1465
  compact: false,
@@ -1346,7 +1470,7 @@ const _simpleInputComponentDefaults = {
1346
1470
  inputAttrs: {},
1347
1471
  maxLength: undefined,
1348
1472
  };
1349
- class _SimpleInputComponentBase extends _NgModelComponentBase {
1473
+ class _SimpleInputComponentBase extends _FormFieldComponentBase {
1350
1474
  constructor() {
1351
1475
  super(...arguments);
1352
1476
  //! input view
@@ -1778,7 +1902,11 @@ class ArdiumInputComponent extends _SimpleInputComponentBase {
1778
1902
  useExisting: forwardRef(() => ArdiumInputComponent),
1779
1903
  multi: true,
1780
1904
  },
1781
- ], queries: [{ propertyName: "prefixTemplate", first: true, predicate: ArdInputPrefixTemplateDirective, descendants: true, isSignal: true }, { propertyName: "suffixTemplate", first: true, predicate: ArdInputSuffixTemplateDirective, descendants: true, isSignal: true }, { propertyName: "placeholderTemplate", first: true, predicate: ArdInputPlaceholderTemplateDirective, descendants: true, isSignal: true }, { propertyName: "suggestionTemplate", first: true, predicate: ArdInputSuggestionTemplateDirective, descendants: true, isSignal: true }, { propertyName: "suggestionLoadingTemplate", first: true, predicate: ArdInputLoadingTemplateDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "dropdownHost", first: true, predicate: ["suggestionsHost"], descendants: true, isSignal: true }, { propertyName: "dropdownTemplate", first: true, predicate: ["suggestionsTemplate"], descendants: true, read: TemplateRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ard-form-field-frame\n [appearance]=\"appearance()\"\n [variant]=\"variant()\"\n [compact]=\"compact()\"\n [isFocused]=\"isFocused\"\n [prefixTemplate]=\"prefixTemplate()?.template\"\n [suffixTemplate]=\"suffixTemplate()?.template\"\n>\n <div\n class=\"ard-input\"\n #suggestionsHost\n [ngClass]=\"ngClasses()\"\n [class.ard-has-value]=\"value\"\n (click)=\"focus()\"\n >\n <div class=\"ard-input-container\">\n @if (shouldDisplayAutocomplete()) {\n <div class=\"ard-autocomplete\">{{ autocomplete() }}</div>\n }\n @if (shouldDisplayPlaceholder()) {\n <ng-template #defaultPlaceholderTemplate>\n <div class=\"ard-placeholder\">{{ placeholder() }}</div>\n </ng-template>\n\n <ng-template [ngTemplateOutlet]=\"placeholderTemplate()?.template || defaultPlaceholderTemplate\"></ng-template>\n }\n <input\n #textInput\n #focusableElement\n type=\"text\"\n [attr.id]=\"inputId()\"\n [attr.tabindex]=\"tabIndex()\"\n [readonly]=\"readonly()\"\n [disabled]=\"disabled()\"\n (input)=\"onInput(textInput.value)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (copy)=\"onCopy($event)\"\n />\n </div>\n\n @if (shouldShowClearButton()) {\n <ard-clear-button\n [title]=\"clearButtonTitle()\"\n (click)=\"onClearButtonClick($event)\"\n />\n }\n </div>\n</ard-form-field-frame>\n\n<ng-template #suggestionsTemplate>\n <ard-dropdown-panel\n class=\"ard-dropdown-panel ard-input-suggestions-panel\"\n role=\"listbox\"\n [compact]=\"compact\"\n aria-label=\"Suggestions\"\n [appearance]=\"dropdownAppearanceOrDefault()\"\n [variant]=\"dropdownVariantOrDefault()\"\n [isOpen]=\"shouldDisplaySuggestions()\"\n (ardClickOutside)=\"handleSuggestionClickOutside($event)\"\n (mousemove)=\"onMouseMove()\"\n >\n @for (item of suggestionItems(); track item.index) {\n <div\n class=\"ard-option\"\n role=\"option\"\n [class.ard-option-selected]=\"item.selected()\"\n [class.ard-option-highlighted]=\"item.highlighted()\"\n [attr.aria-selected]=\"item.selected()\"\n (click)=\"selectSuggestion(item, $event)\"\n (mouseenter)=\"onSuggestionMouseEnter(item, $event)\"\n (mouseleave)=\"onSuggestionMouseLeave(item, $event)\"\n >\n <span class=\"ard-option-label\">\n <ng-template #defaultOptionTemplate>\n {{ item.label() }}\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"suggestionTemplate()?.template || defaultOptionTemplate\"\n [ngTemplateOutletContext]=\"getOptionContext(item)\"\n ></ng-template>\n </span>\n </div>\n }\n @if (areSuggestionsLoading()) {\n <ng-template #defaultLoadingPlaceholderTemplate>\n <div class=\"ard-option ard-option-disabled\">{{ suggestionsLoadingText() }}</div>\n </ng-template>\n\n <ng-template [ngTemplateOutlet]=\"suggestionLoadingTemplate()?.template || defaultLoadingPlaceholderTemplate\"></ng-template>\n }\n </ard-dropdown-panel>\n</ng-template>\n", styles: [".ard-input-container{position:relative}.ard-placeholder{position:absolute;left:0;right:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;pointer-events:none}.ard-text-align-left input,.ard-text-align-left .ard-placeholder{text-align:left}.ard-text-align-center input,.ard-text-align-center .ard-placeholder{text-align:center}.ard-text-align-right input,.ard-text-align-right .ard-placeholder{text-align:right}.ard-autocomplete{position:absolute}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ArdiumFormFieldFrameComponent, selector: "ard-form-field-frame", inputs: ["isFocused", "appearance", "variant", "compact", "prefixTemplate", "suffixTemplate"] }, { kind: "component", type: _ClearButtonComponent, selector: "ard-clear-button" }, { kind: "component", type: ArdiumDropdownPanelComponent, selector: "ard-dropdown-panel", inputs: ["panelId", "headerTemplate", "footerTemplate", "filterValue", "appearance", "variant", "compact", "isOpen"], outputs: ["scroll", "scrollToEnd"] }, { kind: "directive", type: i4.ClickOutsideDirective, selector: "[ardClickOutside]", outputs: ["ardClickOutside"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1905
+ {
1906
+ provide: _FormFieldComponentBase,
1907
+ useExisting: ArdiumInputComponent,
1908
+ },
1909
+ ], queries: [{ propertyName: "prefixTemplate", first: true, predicate: ArdInputPrefixTemplateDirective, descendants: true, isSignal: true }, { propertyName: "suffixTemplate", first: true, predicate: ArdInputSuffixTemplateDirective, descendants: true, isSignal: true }, { propertyName: "placeholderTemplate", first: true, predicate: ArdInputPlaceholderTemplateDirective, descendants: true, isSignal: true }, { propertyName: "suggestionTemplate", first: true, predicate: ArdInputSuggestionTemplateDirective, descendants: true, isSignal: true }, { propertyName: "suggestionLoadingTemplate", first: true, predicate: ArdInputLoadingTemplateDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "dropdownHost", first: true, predicate: ["suggestionsHost"], descendants: true, isSignal: true }, { propertyName: "dropdownTemplate", first: true, predicate: ["suggestionsTemplate"], descendants: true, read: TemplateRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ard-form-field-frame\r\n [appearance]=\"appearance()\"\r\n [variant]=\"variant()\"\r\n [compact]=\"compact()\"\r\n [isFocused]=\"isFocused()\"\r\n [hasError]=\"hasError()\"\r\n [isSuccess]=\"isSuccess()\"\r\n [prefixTemplate]=\"prefixTemplate()?.template\"\r\n [suffixTemplate]=\"suffixTemplate()?.template\"\r\n>\r\n <div\r\n class=\"ard-input\"\r\n #suggestionsHost\r\n [ngClass]=\"ngClasses()\"\r\n [class.ard-has-value]=\"value\"\r\n (click)=\"focus()\"\r\n >\r\n <div class=\"ard-input-container\">\r\n @if (shouldDisplayAutocomplete()) {\r\n <div class=\"ard-autocomplete\">{{ autocomplete() }}</div>\r\n }\r\n @if (shouldDisplayPlaceholder()) {\r\n <ng-template #defaultPlaceholderTemplate>\r\n <div class=\"ard-placeholder\">{{ placeholder() }}</div>\r\n </ng-template>\r\n\r\n <ng-template [ngTemplateOutlet]=\"placeholderTemplate()?.template || defaultPlaceholderTemplate\"></ng-template>\r\n }\r\n <input\r\n #textInput\r\n #focusableElement\r\n type=\"text\"\r\n [attr.id]=\"inputId()\"\r\n [attr.tabindex]=\"tabIndex()\"\r\n [readonly]=\"readonly()\"\r\n [disabled]=\"disabled()\"\r\n (input)=\"onInput(textInput.value)\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n (copy)=\"onCopy($event)\"\r\n />\r\n </div>\r\n\r\n @if (shouldShowClearButton()) {\r\n <ard-clear-button\r\n [title]=\"clearButtonTitle()\"\r\n (click)=\"onClearButtonClick($event)\"\r\n />\r\n }\r\n </div>\r\n</ard-form-field-frame>\r\n\r\n<ng-template #suggestionsTemplate>\r\n <ard-dropdown-panel\r\n class=\"ard-dropdown-panel ard-input-suggestions-panel\"\r\n role=\"listbox\"\r\n [compact]=\"compact\"\r\n aria-label=\"Suggestions\"\r\n [appearance]=\"dropdownAppearanceOrDefault()\"\r\n [variant]=\"dropdownVariantOrDefault()\"\r\n [isOpen]=\"shouldDisplaySuggestions()\"\r\n (ardClickOutside)=\"handleSuggestionClickOutside($event)\"\r\n (mousemove)=\"onMouseMove()\"\r\n >\r\n @for (item of suggestionItems(); track item.index) {\r\n <div\r\n class=\"ard-option\"\r\n role=\"option\"\r\n [class.ard-option-selected]=\"item.selected()\"\r\n [class.ard-option-highlighted]=\"item.highlighted()\"\r\n [attr.aria-selected]=\"item.selected()\"\r\n (click)=\"selectSuggestion(item, $event)\"\r\n (mouseenter)=\"onSuggestionMouseEnter(item, $event)\"\r\n (mouseleave)=\"onSuggestionMouseLeave(item, $event)\"\r\n >\r\n <span class=\"ard-option-label\">\r\n <ng-template #defaultOptionTemplate>\r\n {{ item.label() }}\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"suggestionTemplate()?.template || defaultOptionTemplate\"\r\n [ngTemplateOutletContext]=\"getOptionContext(item)\"\r\n ></ng-template>\r\n </span>\r\n </div>\r\n }\r\n @if (areSuggestionsLoading()) {\r\n <ng-template #defaultLoadingPlaceholderTemplate>\r\n <div class=\"ard-option ard-option-disabled\">{{ suggestionsLoadingText() }}</div>\r\n </ng-template>\r\n\r\n <ng-template [ngTemplateOutlet]=\"suggestionLoadingTemplate()?.template || defaultLoadingPlaceholderTemplate\"></ng-template>\r\n }\r\n </ard-dropdown-panel>\r\n</ng-template>\r\n", styles: [".ard-input-container{position:relative}.ard-placeholder{position:absolute;left:0;right:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;pointer-events:none}.ard-text-align-left input,.ard-text-align-left .ard-placeholder{text-align:left}.ard-text-align-center input,.ard-text-align-center .ard-placeholder{text-align:center}.ard-text-align-right input,.ard-text-align-right .ard-placeholder{text-align:right}.ard-autocomplete{position:absolute}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ArdiumFormFieldFrameComponent, selector: "ard-form-field-frame", inputs: ["hasError", "isSuccess", "isFocused", "appearance", "variant", "compact", "prefixTemplate", "suffixTemplate"] }, { kind: "component", type: _ClearButtonComponent, selector: "ard-clear-button" }, { kind: "component", type: ArdiumDropdownPanelComponent, selector: "ard-dropdown-panel", inputs: ["panelId", "headerTemplate", "footerTemplate", "filterValue", "appearance", "variant", "compact", "isOpen"], outputs: ["scroll", "scrollToEnd"] }, { kind: "directive", type: i4.ClickOutsideDirective, selector: "[ardClickOutside]", outputs: ["ardClickOutside"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1782
1910
  }
1783
1911
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumInputComponent, decorators: [{
1784
1912
  type: Component,
@@ -1788,7 +1916,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
1788
1916
  useExisting: forwardRef(() => ArdiumInputComponent),
1789
1917
  multi: true,
1790
1918
  },
1791
- ], template: "<ard-form-field-frame\n [appearance]=\"appearance()\"\n [variant]=\"variant()\"\n [compact]=\"compact()\"\n [isFocused]=\"isFocused\"\n [prefixTemplate]=\"prefixTemplate()?.template\"\n [suffixTemplate]=\"suffixTemplate()?.template\"\n>\n <div\n class=\"ard-input\"\n #suggestionsHost\n [ngClass]=\"ngClasses()\"\n [class.ard-has-value]=\"value\"\n (click)=\"focus()\"\n >\n <div class=\"ard-input-container\">\n @if (shouldDisplayAutocomplete()) {\n <div class=\"ard-autocomplete\">{{ autocomplete() }}</div>\n }\n @if (shouldDisplayPlaceholder()) {\n <ng-template #defaultPlaceholderTemplate>\n <div class=\"ard-placeholder\">{{ placeholder() }}</div>\n </ng-template>\n\n <ng-template [ngTemplateOutlet]=\"placeholderTemplate()?.template || defaultPlaceholderTemplate\"></ng-template>\n }\n <input\n #textInput\n #focusableElement\n type=\"text\"\n [attr.id]=\"inputId()\"\n [attr.tabindex]=\"tabIndex()\"\n [readonly]=\"readonly()\"\n [disabled]=\"disabled()\"\n (input)=\"onInput(textInput.value)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (copy)=\"onCopy($event)\"\n />\n </div>\n\n @if (shouldShowClearButton()) {\n <ard-clear-button\n [title]=\"clearButtonTitle()\"\n (click)=\"onClearButtonClick($event)\"\n />\n }\n </div>\n</ard-form-field-frame>\n\n<ng-template #suggestionsTemplate>\n <ard-dropdown-panel\n class=\"ard-dropdown-panel ard-input-suggestions-panel\"\n role=\"listbox\"\n [compact]=\"compact\"\n aria-label=\"Suggestions\"\n [appearance]=\"dropdownAppearanceOrDefault()\"\n [variant]=\"dropdownVariantOrDefault()\"\n [isOpen]=\"shouldDisplaySuggestions()\"\n (ardClickOutside)=\"handleSuggestionClickOutside($event)\"\n (mousemove)=\"onMouseMove()\"\n >\n @for (item of suggestionItems(); track item.index) {\n <div\n class=\"ard-option\"\n role=\"option\"\n [class.ard-option-selected]=\"item.selected()\"\n [class.ard-option-highlighted]=\"item.highlighted()\"\n [attr.aria-selected]=\"item.selected()\"\n (click)=\"selectSuggestion(item, $event)\"\n (mouseenter)=\"onSuggestionMouseEnter(item, $event)\"\n (mouseleave)=\"onSuggestionMouseLeave(item, $event)\"\n >\n <span class=\"ard-option-label\">\n <ng-template #defaultOptionTemplate>\n {{ item.label() }}\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"suggestionTemplate()?.template || defaultOptionTemplate\"\n [ngTemplateOutletContext]=\"getOptionContext(item)\"\n ></ng-template>\n </span>\n </div>\n }\n @if (areSuggestionsLoading()) {\n <ng-template #defaultLoadingPlaceholderTemplate>\n <div class=\"ard-option ard-option-disabled\">{{ suggestionsLoadingText() }}</div>\n </ng-template>\n\n <ng-template [ngTemplateOutlet]=\"suggestionLoadingTemplate()?.template || defaultLoadingPlaceholderTemplate\"></ng-template>\n }\n </ard-dropdown-panel>\n</ng-template>\n", styles: [".ard-input-container{position:relative}.ard-placeholder{position:absolute;left:0;right:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;pointer-events:none}.ard-text-align-left input,.ard-text-align-left .ard-placeholder{text-align:left}.ard-text-align-center input,.ard-text-align-center .ard-placeholder{text-align:center}.ard-text-align-right input,.ard-text-align-right .ard-placeholder{text-align:right}.ard-autocomplete{position:absolute}\n"] }]
1919
+ {
1920
+ provide: _FormFieldComponentBase,
1921
+ useExisting: ArdiumInputComponent,
1922
+ },
1923
+ ], template: "<ard-form-field-frame\r\n [appearance]=\"appearance()\"\r\n [variant]=\"variant()\"\r\n [compact]=\"compact()\"\r\n [isFocused]=\"isFocused()\"\r\n [hasError]=\"hasError()\"\r\n [isSuccess]=\"isSuccess()\"\r\n [prefixTemplate]=\"prefixTemplate()?.template\"\r\n [suffixTemplate]=\"suffixTemplate()?.template\"\r\n>\r\n <div\r\n class=\"ard-input\"\r\n #suggestionsHost\r\n [ngClass]=\"ngClasses()\"\r\n [class.ard-has-value]=\"value\"\r\n (click)=\"focus()\"\r\n >\r\n <div class=\"ard-input-container\">\r\n @if (shouldDisplayAutocomplete()) {\r\n <div class=\"ard-autocomplete\">{{ autocomplete() }}</div>\r\n }\r\n @if (shouldDisplayPlaceholder()) {\r\n <ng-template #defaultPlaceholderTemplate>\r\n <div class=\"ard-placeholder\">{{ placeholder() }}</div>\r\n </ng-template>\r\n\r\n <ng-template [ngTemplateOutlet]=\"placeholderTemplate()?.template || defaultPlaceholderTemplate\"></ng-template>\r\n }\r\n <input\r\n #textInput\r\n #focusableElement\r\n type=\"text\"\r\n [attr.id]=\"inputId()\"\r\n [attr.tabindex]=\"tabIndex()\"\r\n [readonly]=\"readonly()\"\r\n [disabled]=\"disabled()\"\r\n (input)=\"onInput(textInput.value)\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n (copy)=\"onCopy($event)\"\r\n />\r\n </div>\r\n\r\n @if (shouldShowClearButton()) {\r\n <ard-clear-button\r\n [title]=\"clearButtonTitle()\"\r\n (click)=\"onClearButtonClick($event)\"\r\n />\r\n }\r\n </div>\r\n</ard-form-field-frame>\r\n\r\n<ng-template #suggestionsTemplate>\r\n <ard-dropdown-panel\r\n class=\"ard-dropdown-panel ard-input-suggestions-panel\"\r\n role=\"listbox\"\r\n [compact]=\"compact\"\r\n aria-label=\"Suggestions\"\r\n [appearance]=\"dropdownAppearanceOrDefault()\"\r\n [variant]=\"dropdownVariantOrDefault()\"\r\n [isOpen]=\"shouldDisplaySuggestions()\"\r\n (ardClickOutside)=\"handleSuggestionClickOutside($event)\"\r\n (mousemove)=\"onMouseMove()\"\r\n >\r\n @for (item of suggestionItems(); track item.index) {\r\n <div\r\n class=\"ard-option\"\r\n role=\"option\"\r\n [class.ard-option-selected]=\"item.selected()\"\r\n [class.ard-option-highlighted]=\"item.highlighted()\"\r\n [attr.aria-selected]=\"item.selected()\"\r\n (click)=\"selectSuggestion(item, $event)\"\r\n (mouseenter)=\"onSuggestionMouseEnter(item, $event)\"\r\n (mouseleave)=\"onSuggestionMouseLeave(item, $event)\"\r\n >\r\n <span class=\"ard-option-label\">\r\n <ng-template #defaultOptionTemplate>\r\n {{ item.label() }}\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"suggestionTemplate()?.template || defaultOptionTemplate\"\r\n [ngTemplateOutletContext]=\"getOptionContext(item)\"\r\n ></ng-template>\r\n </span>\r\n </div>\r\n }\r\n @if (areSuggestionsLoading()) {\r\n <ng-template #defaultLoadingPlaceholderTemplate>\r\n <div class=\"ard-option ard-option-disabled\">{{ suggestionsLoadingText() }}</div>\r\n </ng-template>\r\n\r\n <ng-template [ngTemplateOutlet]=\"suggestionLoadingTemplate()?.template || defaultLoadingPlaceholderTemplate\"></ng-template>\r\n }\r\n </ard-dropdown-panel>\r\n</ng-template>\r\n", styles: [".ard-input-container{position:relative}.ard-placeholder{position:absolute;left:0;right:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;pointer-events:none}.ard-text-align-left input,.ard-text-align-left .ard-placeholder{text-align:left}.ard-text-align-center input,.ard-text-align-center .ard-placeholder{text-align:center}.ard-text-align-right input,.ard-text-align-right .ard-placeholder{text-align:right}.ard-autocomplete{position:absolute}\n"] }]
1792
1924
  }], ctorParameters: () => [{ type: undefined, decorators: [{
1793
1925
  type: Inject,
1794
1926
  args: [ARD_INPUT_DEFAULTS]
@@ -1858,7 +1990,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
1858
1990
  }] });
1859
1991
 
1860
1992
  const _passwordInputDefaults = {
1861
- ..._ngModelComponentDefaults,
1993
+ ..._formFieldComponentDefaults,
1862
1994
  appearance: FormElementAppearance.Outlined,
1863
1995
  variant: FormElementVariant.Rounded,
1864
1996
  compact: false,
@@ -2003,7 +2135,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
2003
2135
  args: [{ selector: 'ard-icon', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<span\n class=\"ard-icon material-symbols-outlined\"\n [attr.aria-hidden]=\"ariaLabel() !== undefined\"\n [attr.aria-label]=\"ariaLabel()\"\n [style]=\"fontVariationSettings()\"\n>\n {{ icon() ?? contentWrapperEl.innerText | icon }}\n</span>\n\n<div\n #contentWrapperEl\n class=\"ard-icon-content-wrapper\"\n>\n <ng-content></ng-content>\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200\";ard-icon{font-variation-settings:\"FILL\" 0,\"wght\" 400,\"GRAD\" 0,\"opsz\" 48;font-size:1.5em;width:1em;height:1em;display:inline-block;-webkit-user-select:none;user-select:none;background-repeat:no-repeat;fill:currentColor;overflow:hidden;flex-shrink:0}ard-icon .ard-icon{font-variation-settings:inherit;font-size:inherit}ard-icon .ard-icon-content-wrapper{display:none}\n"] }]
2004
2136
  }] });
2005
2137
 
2006
- class ArdiumPasswordInputComponent extends _NgModelComponentBase {
2138
+ class ArdiumPasswordInputComponent extends _FormFieldComponentBase {
2007
2139
  constructor(defaults) {
2008
2140
  super(defaults);
2009
2141
  //! input view
@@ -2044,6 +2176,7 @@ class ArdiumPasswordInputComponent extends _NgModelComponentBase {
2044
2176
  this.value = model();
2045
2177
  }
2046
2178
  ngOnInit() {
2179
+ super.ngOnInit();
2047
2180
  this._setInputAttributes();
2048
2181
  }
2049
2182
  toggleReveal(newState = !this.revealed()) {
@@ -2057,6 +2190,7 @@ class ArdiumPasswordInputComponent extends _NgModelComponentBase {
2057
2190
  }
2058
2191
  }
2059
2192
  ngOnDestroy() {
2193
+ super.ngOnDestroy();
2060
2194
  if (this._hideTimeout) {
2061
2195
  clearTimeout(this._hideTimeout);
2062
2196
  }
@@ -2132,7 +2266,11 @@ class ArdiumPasswordInputComponent extends _NgModelComponentBase {
2132
2266
  useExisting: forwardRef(() => ArdiumPasswordInputComponent),
2133
2267
  multi: true,
2134
2268
  },
2135
- ], queries: [{ propertyName: "prefixTemplate", first: true, predicate: ArdPasswordInputPrefixTemplateDirective, descendants: true, isSignal: true }, { propertyName: "suffixTemplate", first: true, predicate: ArdPasswordInputSuffixTemplateDirective, descendants: true, isSignal: true }, { propertyName: "placeholderTemplate", first: true, predicate: ArdPasswordInputPlaceholderTemplateDirective, descendants: true, isSignal: true }, { propertyName: "revealTemplate", first: true, predicate: ArdPasswordInputRevealButtonTemplateDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "textInputEl", first: true, predicate: ["textInput"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ard-form-field-frame\n [appearance]=\"appearance()\"\n [variant]=\"variant()\"\n [compact]=\"compact()\"\n [isFocused]=\"isFocused\"\n [prefixTemplate]=\"prefixTemplate()?.template\"\n [suffixTemplate]=\"suffixTemplate()?.template\"\n>\n <div\n class=\"ard-password-input\"\n [ngClass]=\"ngClasses()\"\n [class.ard-has-value]=\"value()\"\n (click)=\"focus()\"\n >\n <div class=\"ard-input-container\">\n @if (shouldDisplayPlaceholder()) {\n <ng-template #defaultPlaceholderTemplate>\n <div class=\"ard-placeholder\">{{ placeholder() }}</div>\n </ng-template>\n\n <ng-template [ngTemplateOutlet]=\"placeholderTemplate()?.template || defaultPlaceholderTemplate\" />\n }\n\n <input\n #textInput\n #focusableElement\n [type]=\"!revealable() || !revealed() ? 'password' : 'text'\"\n [attr.id]=\"inputId()\"\n [attr.tabindex]=\"tabIndex()\"\n [readonly]=\"readonly()\"\n [disabled]=\"disabled()\"\n (input)=\"onInput(textInput.value)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (change)=\"onChange($event)\"\n (copy)=\"onCopy($event)\"\n [class.ard-revealed]=\"revealable() && revealed()\"\n />\n </div>\n\n @if (revealable()) {\n <button\n class=\"ard-reveal-button\"\n type=\"button\"\n (click)=\"!holdToReveal() && toggleReveal()\"\n (mousedown)=\"holdToReveal() && revealed.set(true)\"\n (mouseup)=\"holdToReveal() && revealed.set(false)\"\n >\n <ng-template\n #defaultRevealTemplate\n let-revealed\n >\n <ard-icon [icon]=\"revealed ? 'visibility' : 'visibility_off'\"></ard-icon>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"revealTemplate()?.template || defaultRevealTemplate\"\n [ngTemplateOutletContext]=\"revealButtonContext()\"\n />\n </button>\n }\n </div>\n</ard-form-field-frame>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ArdiumFormFieldFrameComponent, selector: "ard-form-field-frame", inputs: ["isFocused", "appearance", "variant", "compact", "prefixTemplate", "suffixTemplate"] }, { kind: "component", type: ArdiumIconComponent, selector: "ard-icon", inputs: ["ariaLabel", "icon", "filled", "weight", "grade", "opticalSize"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
2269
+ {
2270
+ provide: _FormFieldComponentBase,
2271
+ useExisting: ArdiumPasswordInputComponent,
2272
+ },
2273
+ ], queries: [{ propertyName: "prefixTemplate", first: true, predicate: ArdPasswordInputPrefixTemplateDirective, descendants: true, isSignal: true }, { propertyName: "suffixTemplate", first: true, predicate: ArdPasswordInputSuffixTemplateDirective, descendants: true, isSignal: true }, { propertyName: "placeholderTemplate", first: true, predicate: ArdPasswordInputPlaceholderTemplateDirective, descendants: true, isSignal: true }, { propertyName: "revealTemplate", first: true, predicate: ArdPasswordInputRevealButtonTemplateDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "textInputEl", first: true, predicate: ["textInput"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ard-form-field-frame\r\n [appearance]=\"appearance()\"\r\n [variant]=\"variant()\"\r\n [compact]=\"compact()\"\r\n [isFocused]=\"isFocused()\"\r\n [hasError]=\"hasError()\"\r\n [isSuccess]=\"isSuccess()\"\r\n [prefixTemplate]=\"prefixTemplate()?.template\"\r\n [suffixTemplate]=\"suffixTemplate()?.template\"\r\n>\r\n <div\r\n class=\"ard-password-input\"\r\n [ngClass]=\"ngClasses()\"\r\n [class.ard-has-value]=\"value()\"\r\n (click)=\"focus()\"\r\n >\r\n <div class=\"ard-input-container\">\r\n @if (shouldDisplayPlaceholder()) {\r\n <ng-template #defaultPlaceholderTemplate>\r\n <div class=\"ard-placeholder\">{{ placeholder() }}</div>\r\n </ng-template>\r\n\r\n <ng-template [ngTemplateOutlet]=\"placeholderTemplate()?.template || defaultPlaceholderTemplate\" />\r\n }\r\n\r\n <input\r\n #textInput\r\n #focusableElement\r\n [type]=\"!revealable() || !revealed() ? 'password' : 'text'\"\r\n [attr.id]=\"inputId()\"\r\n [attr.tabindex]=\"tabIndex()\"\r\n [readonly]=\"readonly()\"\r\n [disabled]=\"disabled()\"\r\n (input)=\"onInput(textInput.value)\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n (change)=\"onChange($event)\"\r\n (copy)=\"onCopy($event)\"\r\n [class.ard-revealed]=\"revealable() && revealed()\"\r\n />\r\n </div>\r\n\r\n @if (revealable()) {\r\n <button\r\n class=\"ard-reveal-button\"\r\n type=\"button\"\r\n (click)=\"!holdToReveal() && toggleReveal()\"\r\n (mousedown)=\"holdToReveal() && revealed.set(true)\"\r\n (mouseup)=\"holdToReveal() && revealed.set(false)\"\r\n >\r\n <ng-template\r\n #defaultRevealTemplate\r\n let-revealed\r\n >\r\n <ard-icon [icon]=\"revealed ? 'visibility' : 'visibility_off'\"></ard-icon>\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"revealTemplate()?.template || defaultRevealTemplate\"\r\n [ngTemplateOutletContext]=\"revealButtonContext()\"\r\n />\r\n </button>\r\n }\r\n </div>\r\n</ard-form-field-frame>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ArdiumFormFieldFrameComponent, selector: "ard-form-field-frame", inputs: ["hasError", "isSuccess", "isFocused", "appearance", "variant", "compact", "prefixTemplate", "suffixTemplate"] }, { kind: "component", type: ArdiumIconComponent, selector: "ard-icon", inputs: ["ariaLabel", "icon", "filled", "weight", "grade", "opticalSize"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
2136
2274
  }
2137
2275
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumPasswordInputComponent, decorators: [{
2138
2276
  type: Component,
@@ -2142,7 +2280,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
2142
2280
  useExisting: forwardRef(() => ArdiumPasswordInputComponent),
2143
2281
  multi: true,
2144
2282
  },
2145
- ], template: "<ard-form-field-frame\n [appearance]=\"appearance()\"\n [variant]=\"variant()\"\n [compact]=\"compact()\"\n [isFocused]=\"isFocused\"\n [prefixTemplate]=\"prefixTemplate()?.template\"\n [suffixTemplate]=\"suffixTemplate()?.template\"\n>\n <div\n class=\"ard-password-input\"\n [ngClass]=\"ngClasses()\"\n [class.ard-has-value]=\"value()\"\n (click)=\"focus()\"\n >\n <div class=\"ard-input-container\">\n @if (shouldDisplayPlaceholder()) {\n <ng-template #defaultPlaceholderTemplate>\n <div class=\"ard-placeholder\">{{ placeholder() }}</div>\n </ng-template>\n\n <ng-template [ngTemplateOutlet]=\"placeholderTemplate()?.template || defaultPlaceholderTemplate\" />\n }\n\n <input\n #textInput\n #focusableElement\n [type]=\"!revealable() || !revealed() ? 'password' : 'text'\"\n [attr.id]=\"inputId()\"\n [attr.tabindex]=\"tabIndex()\"\n [readonly]=\"readonly()\"\n [disabled]=\"disabled()\"\n (input)=\"onInput(textInput.value)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (change)=\"onChange($event)\"\n (copy)=\"onCopy($event)\"\n [class.ard-revealed]=\"revealable() && revealed()\"\n />\n </div>\n\n @if (revealable()) {\n <button\n class=\"ard-reveal-button\"\n type=\"button\"\n (click)=\"!holdToReveal() && toggleReveal()\"\n (mousedown)=\"holdToReveal() && revealed.set(true)\"\n (mouseup)=\"holdToReveal() && revealed.set(false)\"\n >\n <ng-template\n #defaultRevealTemplate\n let-revealed\n >\n <ard-icon [icon]=\"revealed ? 'visibility' : 'visibility_off'\"></ard-icon>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"revealTemplate()?.template || defaultRevealTemplate\"\n [ngTemplateOutletContext]=\"revealButtonContext()\"\n />\n </button>\n }\n </div>\n</ard-form-field-frame>\n" }]
2283
+ {
2284
+ provide: _FormFieldComponentBase,
2285
+ useExisting: ArdiumPasswordInputComponent,
2286
+ },
2287
+ ], template: "<ard-form-field-frame\r\n [appearance]=\"appearance()\"\r\n [variant]=\"variant()\"\r\n [compact]=\"compact()\"\r\n [isFocused]=\"isFocused()\"\r\n [hasError]=\"hasError()\"\r\n [isSuccess]=\"isSuccess()\"\r\n [prefixTemplate]=\"prefixTemplate()?.template\"\r\n [suffixTemplate]=\"suffixTemplate()?.template\"\r\n>\r\n <div\r\n class=\"ard-password-input\"\r\n [ngClass]=\"ngClasses()\"\r\n [class.ard-has-value]=\"value()\"\r\n (click)=\"focus()\"\r\n >\r\n <div class=\"ard-input-container\">\r\n @if (shouldDisplayPlaceholder()) {\r\n <ng-template #defaultPlaceholderTemplate>\r\n <div class=\"ard-placeholder\">{{ placeholder() }}</div>\r\n </ng-template>\r\n\r\n <ng-template [ngTemplateOutlet]=\"placeholderTemplate()?.template || defaultPlaceholderTemplate\" />\r\n }\r\n\r\n <input\r\n #textInput\r\n #focusableElement\r\n [type]=\"!revealable() || !revealed() ? 'password' : 'text'\"\r\n [attr.id]=\"inputId()\"\r\n [attr.tabindex]=\"tabIndex()\"\r\n [readonly]=\"readonly()\"\r\n [disabled]=\"disabled()\"\r\n (input)=\"onInput(textInput.value)\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n (change)=\"onChange($event)\"\r\n (copy)=\"onCopy($event)\"\r\n [class.ard-revealed]=\"revealable() && revealed()\"\r\n />\r\n </div>\r\n\r\n @if (revealable()) {\r\n <button\r\n class=\"ard-reveal-button\"\r\n type=\"button\"\r\n (click)=\"!holdToReveal() && toggleReveal()\"\r\n (mousedown)=\"holdToReveal() && revealed.set(true)\"\r\n (mouseup)=\"holdToReveal() && revealed.set(false)\"\r\n >\r\n <ng-template\r\n #defaultRevealTemplate\r\n let-revealed\r\n >\r\n <ard-icon [icon]=\"revealed ? 'visibility' : 'visibility_off'\"></ard-icon>\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"revealTemplate()?.template || defaultRevealTemplate\"\r\n [ngTemplateOutletContext]=\"revealButtonContext()\"\r\n />\r\n </button>\r\n }\r\n </div>\r\n</ard-form-field-frame>\r\n" }]
2146
2288
  }], ctorParameters: () => [{ type: undefined, decorators: [{
2147
2289
  type: Inject,
2148
2290
  args: [ARD_PASSWORD_INPUT_DEFAULTS]
@@ -2197,7 +2339,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
2197
2339
  }] });
2198
2340
 
2199
2341
  const _simpleInputDefaults = {
2200
- ..._ngModelComponentDefaults,
2342
+ ..._formFieldComponentDefaults,
2201
2343
  appearance: FormElementAppearance.Outlined,
2202
2344
  variant: FormElementVariant.Rounded,
2203
2345
  compact: false,
@@ -2267,7 +2409,11 @@ class ArdiumSimpleInputComponent extends _SimpleInputComponentBase {
2267
2409
  useExisting: forwardRef(() => ArdiumSimpleInputComponent),
2268
2410
  multi: true,
2269
2411
  },
2270
- ], queries: [{ propertyName: "prefixTemplate", first: true, predicate: ArdSimpleInputPrefixTemplateDirective, descendants: true, isSignal: true }, { propertyName: "suffixTemplate", first: true, predicate: ArdSimpleInputSuffixTemplateDirective, descendants: true, isSignal: true }, { propertyName: "placeholderTemplate", first: true, predicate: ArdSimpleInputPlaceholderTemplateDirective, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ard-form-field-frame\n [appearance]=\"appearance()\"\n [variant]=\"variant()\"\n [compact]=\"compact\"\n [isFocused]=\"isFocused\"\n [prefixTemplate]=\"prefixTemplate()?.template\"\n [suffixTemplate]=\"suffixTemplate()?.template\"\n>\n <div\n class=\"ard-simple-input\"\n [ngClass]=\"ngClasses()\"\n [class.ard-has-value]=\"value\"\n (click)=\"focus()\"\n >\n <div class=\"ard-input-container\">\n @if (shouldDisplayPlaceholder()) {\n <ng-template #defaultPlaceholderTemplate>\n <div class=\"ard-placeholder\">{{ placeholder() }}</div>\n </ng-template>\n\n <ng-template [ngTemplateOutlet]=\"placeholderTemplate()?.template || defaultPlaceholderTemplate\"></ng-template>\n }\n\n <input\n #textInput\n #focusableElement\n type=\"text\"\n [attr.id]=\"inputId()\"\n [attr.tabindex]=\"tabIndex()\"\n [readonly]=\"readonly()\"\n [disabled]=\"disabled()\"\n (input)=\"onInput(textInput.value)\"\n (focus)=\"onFocusMaster($event)\"\n (blur)=\"onBlurMaster($event)\"\n (change)=\"onChange($event)\"\n (copy)=\"onCopy($event)\"\n />\n </div>\n\n @if (shouldShowClearButton()) {\n <ard-clear-button\n [title]=\"clearButtonTitle()\"\n (click)=\"onClearButtonClick($event)\"\n />\n }\n </div>\n</ard-form-field-frame>\n", styles: [".ard-input-container{position:relative}.ard-placeholder{position:absolute;left:0;right:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;pointer-events:none}.ard-text-align-left input,.ard-text-align-left .ard-placeholder{text-align:left}.ard-text-align-center input,.ard-text-align-center .ard-placeholder{text-align:center}.ard-text-align-right input,.ard-text-align-right .ard-placeholder{text-align:right}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: _ClearButtonComponent, selector: "ard-clear-button" }, { kind: "component", type: ArdiumFormFieldFrameComponent, selector: "ard-form-field-frame", inputs: ["isFocused", "appearance", "variant", "compact", "prefixTemplate", "suffixTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
2412
+ {
2413
+ provide: _FormFieldComponentBase,
2414
+ useExisting: ArdiumSimpleInputComponent
2415
+ },
2416
+ ], queries: [{ propertyName: "prefixTemplate", first: true, predicate: ArdSimpleInputPrefixTemplateDirective, descendants: true, isSignal: true }, { propertyName: "suffixTemplate", first: true, predicate: ArdSimpleInputSuffixTemplateDirective, descendants: true, isSignal: true }, { propertyName: "placeholderTemplate", first: true, predicate: ArdSimpleInputPlaceholderTemplateDirective, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ard-form-field-frame\r\n [appearance]=\"appearance()\"\r\n [variant]=\"variant()\"\r\n [compact]=\"compact()\"\r\n [isFocused]=\"isFocused()\"\r\n [hasError]=\"hasError()\"\r\n [isSuccess]=\"isSuccess()\"\r\n [prefixTemplate]=\"prefixTemplate()?.template\"\r\n [suffixTemplate]=\"suffixTemplate()?.template\"\r\n>\r\n <div\r\n class=\"ard-simple-input\"\r\n [ngClass]=\"ngClasses()\"\r\n [class.ard-has-value]=\"value\"\r\n (click)=\"focus()\"\r\n >\r\n <div class=\"ard-input-container\">\r\n @if (shouldDisplayPlaceholder()) {\r\n <ng-template #defaultPlaceholderTemplate>\r\n <div class=\"ard-placeholder\">{{ placeholder() }}</div>\r\n </ng-template>\r\n\r\n <ng-template [ngTemplateOutlet]=\"placeholderTemplate()?.template || defaultPlaceholderTemplate\"></ng-template>\r\n }\r\n\r\n <input\r\n #textInput\r\n #focusableElement\r\n type=\"text\"\r\n [attr.id]=\"inputId()\"\r\n [attr.tabindex]=\"tabIndex()\"\r\n [readonly]=\"readonly()\"\r\n [disabled]=\"disabled()\"\r\n (input)=\"onInput(textInput.value)\"\r\n (focus)=\"onFocusMaster($event)\"\r\n (blur)=\"onBlurMaster($event)\"\r\n (change)=\"onChange($event)\"\r\n (copy)=\"onCopy($event)\"\r\n />\r\n </div>\r\n\r\n @if (shouldShowClearButton()) {\r\n <ard-clear-button\r\n [title]=\"clearButtonTitle()\"\r\n (click)=\"onClearButtonClick($event)\"\r\n />\r\n }\r\n </div>\r\n</ard-form-field-frame>\r\n", styles: [".ard-input-container{position:relative}.ard-placeholder{position:absolute;left:0;right:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;pointer-events:none}.ard-text-align-left input,.ard-text-align-left .ard-placeholder{text-align:left}.ard-text-align-center input,.ard-text-align-center .ard-placeholder{text-align:center}.ard-text-align-right input,.ard-text-align-right .ard-placeholder{text-align:right}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: _ClearButtonComponent, selector: "ard-clear-button" }, { kind: "component", type: ArdiumFormFieldFrameComponent, selector: "ard-form-field-frame", inputs: ["hasError", "isSuccess", "isFocused", "appearance", "variant", "compact", "prefixTemplate", "suffixTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
2271
2417
  }
2272
2418
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumSimpleInputComponent, decorators: [{
2273
2419
  type: Component,
@@ -2277,7 +2423,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
2277
2423
  useExisting: forwardRef(() => ArdiumSimpleInputComponent),
2278
2424
  multi: true,
2279
2425
  },
2280
- ], template: "<ard-form-field-frame\n [appearance]=\"appearance()\"\n [variant]=\"variant()\"\n [compact]=\"compact\"\n [isFocused]=\"isFocused\"\n [prefixTemplate]=\"prefixTemplate()?.template\"\n [suffixTemplate]=\"suffixTemplate()?.template\"\n>\n <div\n class=\"ard-simple-input\"\n [ngClass]=\"ngClasses()\"\n [class.ard-has-value]=\"value\"\n (click)=\"focus()\"\n >\n <div class=\"ard-input-container\">\n @if (shouldDisplayPlaceholder()) {\n <ng-template #defaultPlaceholderTemplate>\n <div class=\"ard-placeholder\">{{ placeholder() }}</div>\n </ng-template>\n\n <ng-template [ngTemplateOutlet]=\"placeholderTemplate()?.template || defaultPlaceholderTemplate\"></ng-template>\n }\n\n <input\n #textInput\n #focusableElement\n type=\"text\"\n [attr.id]=\"inputId()\"\n [attr.tabindex]=\"tabIndex()\"\n [readonly]=\"readonly()\"\n [disabled]=\"disabled()\"\n (input)=\"onInput(textInput.value)\"\n (focus)=\"onFocusMaster($event)\"\n (blur)=\"onBlurMaster($event)\"\n (change)=\"onChange($event)\"\n (copy)=\"onCopy($event)\"\n />\n </div>\n\n @if (shouldShowClearButton()) {\n <ard-clear-button\n [title]=\"clearButtonTitle()\"\n (click)=\"onClearButtonClick($event)\"\n />\n }\n </div>\n</ard-form-field-frame>\n", styles: [".ard-input-container{position:relative}.ard-placeholder{position:absolute;left:0;right:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;pointer-events:none}.ard-text-align-left input,.ard-text-align-left .ard-placeholder{text-align:left}.ard-text-align-center input,.ard-text-align-center .ard-placeholder{text-align:center}.ard-text-align-right input,.ard-text-align-right .ard-placeholder{text-align:right}\n"] }]
2426
+ {
2427
+ provide: _FormFieldComponentBase,
2428
+ useExisting: ArdiumSimpleInputComponent
2429
+ },
2430
+ ], template: "<ard-form-field-frame\r\n [appearance]=\"appearance()\"\r\n [variant]=\"variant()\"\r\n [compact]=\"compact()\"\r\n [isFocused]=\"isFocused()\"\r\n [hasError]=\"hasError()\"\r\n [isSuccess]=\"isSuccess()\"\r\n [prefixTemplate]=\"prefixTemplate()?.template\"\r\n [suffixTemplate]=\"suffixTemplate()?.template\"\r\n>\r\n <div\r\n class=\"ard-simple-input\"\r\n [ngClass]=\"ngClasses()\"\r\n [class.ard-has-value]=\"value\"\r\n (click)=\"focus()\"\r\n >\r\n <div class=\"ard-input-container\">\r\n @if (shouldDisplayPlaceholder()) {\r\n <ng-template #defaultPlaceholderTemplate>\r\n <div class=\"ard-placeholder\">{{ placeholder() }}</div>\r\n </ng-template>\r\n\r\n <ng-template [ngTemplateOutlet]=\"placeholderTemplate()?.template || defaultPlaceholderTemplate\"></ng-template>\r\n }\r\n\r\n <input\r\n #textInput\r\n #focusableElement\r\n type=\"text\"\r\n [attr.id]=\"inputId()\"\r\n [attr.tabindex]=\"tabIndex()\"\r\n [readonly]=\"readonly()\"\r\n [disabled]=\"disabled()\"\r\n (input)=\"onInput(textInput.value)\"\r\n (focus)=\"onFocusMaster($event)\"\r\n (blur)=\"onBlurMaster($event)\"\r\n (change)=\"onChange($event)\"\r\n (copy)=\"onCopy($event)\"\r\n />\r\n </div>\r\n\r\n @if (shouldShowClearButton()) {\r\n <ard-clear-button\r\n [title]=\"clearButtonTitle()\"\r\n (click)=\"onClearButtonClick($event)\"\r\n />\r\n }\r\n </div>\r\n</ard-form-field-frame>\r\n", styles: [".ard-input-container{position:relative}.ard-placeholder{position:absolute;left:0;right:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;pointer-events:none}.ard-text-align-left input,.ard-text-align-left .ard-placeholder{text-align:left}.ard-text-align-center input,.ard-text-align-center .ard-placeholder{text-align:center}.ard-text-align-right input,.ard-text-align-right .ard-placeholder{text-align:right}\n"] }]
2281
2431
  }], ctorParameters: () => [{ type: undefined, decorators: [{
2282
2432
  type: Inject,
2283
2433
  args: [ARD_SIMPLE_INPUT_DEFAULTS]
@@ -2600,6 +2750,9 @@ class ItemStorage {
2600
2750
  });
2601
2751
  }
2602
2752
  handleWriteValue(ngModel) {
2753
+ if (!isArray(ngModel)) {
2754
+ ngModel = [ngModel];
2755
+ }
2603
2756
  //defer writing the value if no options are yet loaded
2604
2757
  if (!this._wasValueWriteDeferred() && this._items().length === 0) {
2605
2758
  this._valueToWriteAfterItemsLoad.set(ngModel);
@@ -2892,7 +3045,7 @@ const ArdPanelPosition = {
2892
3045
  };
2893
3046
 
2894
3047
  const _selectDefaults = {
2895
- ..._ngModelComponentDefaults,
3048
+ ..._formFieldComponentDefaults,
2896
3049
  valueFrom: 'value',
2897
3050
  labelFrom: 'label',
2898
3051
  disabledFrom: 'disabled',
@@ -3225,7 +3378,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
3225
3378
  args: [ARD_DELETABLE_CHIP_DEFAULTS]
3226
3379
  }] }] });
3227
3380
 
3228
- class ArdiumSelectComponent extends _NgModelComponentBase {
3381
+ class ArdiumSelectComponent extends _FormFieldComponentBase {
3229
3382
  constructor(defaults) {
3230
3383
  super(defaults);
3231
3384
  this._componentId = '000';
@@ -3260,7 +3413,6 @@ class ArdiumSelectComponent extends _NgModelComponentBase {
3260
3413
  this.inputAttrs = input(this._DEFAULTS.inputAttrs);
3261
3414
  //! other inputs
3262
3415
  this.isLoading = input(this._DEFAULTS.isLoading, { transform: v => coerceBooleanProperty(v) });
3263
- this.htmlId = input(TakeChance.id());
3264
3416
  //! boolean settings
3265
3417
  this.itemsAlreadyGrouped = input(this._DEFAULTS.itemsAlreadyGrouped, {
3266
3418
  transform: v => coerceBooleanProperty(v),
@@ -3609,9 +3761,11 @@ class ArdiumSelectComponent extends _NgModelComponentBase {
3609
3761
  }
3610
3762
  //! hooks
3611
3763
  ngOnInit() {
3764
+ super.ngOnInit();
3612
3765
  this._setSearchInputAttributes();
3613
3766
  }
3614
3767
  ngOnDestroy() {
3768
+ super.ngOnDestroy();
3615
3769
  this._destroy$.next();
3616
3770
  this._destroy$.complete();
3617
3771
  }
@@ -3981,13 +4135,17 @@ class ArdiumSelectComponent extends _NgModelComponentBase {
3981
4135
  this.itemStorage.highlightAllItems();
3982
4136
  }
3983
4137
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumSelectComponent, deps: [{ token: ARD_SELECT_DEFAULTS }], target: i0.ɵɵFactoryTarget.Component }); }
3984
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ArdiumSelectComponent, selector: "ard-select", inputs: { valueFrom: { classPropertyName: "valueFrom", publicName: "valueFrom", isSignal: true, isRequired: false, transformFunction: null }, labelFrom: { classPropertyName: "labelFrom", publicName: "labelFrom", isSignal: true, isRequired: false, transformFunction: null }, disabledFrom: { classPropertyName: "disabledFrom", publicName: "disabledFrom", isSignal: true, isRequired: false, transformFunction: null }, groupLabelFrom: { classPropertyName: "groupLabelFrom", publicName: "groupLabelFrom", isSignal: true, isRequired: false, transformFunction: null }, groupDisabledFrom: { classPropertyName: "groupDisabledFrom", publicName: "groupDisabledFrom", isSignal: true, isRequired: false, transformFunction: null }, childrenFrom: { classPropertyName: "childrenFrom", publicName: "childrenFrom", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, clearButtonTitle: { classPropertyName: "clearButtonTitle", publicName: "clearButtonTitle", isSignal: true, isRequired: false, transformFunction: null }, dropdownPosition: { classPropertyName: "dropdownPosition", publicName: "dropdownPosition", isSignal: true, isRequired: false, transformFunction: null }, noItemsFoundText: { classPropertyName: "noItemsFoundText", publicName: "noItemsFoundText", isSignal: true, isRequired: false, transformFunction: null }, loadingPlaceholderText: { classPropertyName: "loadingPlaceholderText", publicName: "loadingPlaceholderText", isSignal: true, isRequired: false, transformFunction: null }, searchInputId: { classPropertyName: "searchInputId", publicName: "searchInputId", isSignal: true, isRequired: false, transformFunction: null }, inputAttrs: { classPropertyName: "inputAttrs", publicName: "inputAttrs", isSignal: true, isRequired: false, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, htmlId: { classPropertyName: "htmlId", publicName: "htmlId", isSignal: true, isRequired: false, transformFunction: null }, itemsAlreadyGrouped: { classPropertyName: "itemsAlreadyGrouped", publicName: "itemsAlreadyGrouped", isSignal: true, isRequired: false, transformFunction: null }, invertDisabled: { classPropertyName: "invertDisabled", publicName: "invertDisabled", isSignal: true, isRequired: false, transformFunction: null }, noGroupActions: { classPropertyName: "noGroupActions", publicName: "noGroupActions", isSignal: true, isRequired: false, transformFunction: null }, autoHighlightFirst: { classPropertyName: "autoHighlightFirst", publicName: "autoHighlightFirst", isSignal: true, isRequired: false, transformFunction: null }, autoFocus: { classPropertyName: "autoFocus", publicName: "autoFocus", isSignal: true, isRequired: false, transformFunction: null }, keepOpen: { classPropertyName: "keepOpen", publicName: "keepOpen", isSignal: true, isRequired: false, transformFunction: null }, hideSelected: { classPropertyName: "hideSelected", publicName: "hideSelected", isSignal: true, isRequired: false, transformFunction: null }, noBackspaceClear: { classPropertyName: "noBackspaceClear", publicName: "noBackspaceClear", isSignal: true, isRequired: false, transformFunction: null }, sortMultipleValues: { classPropertyName: "sortMultipleValues", publicName: "sortMultipleValues", isSignal: true, isRequired: false, transformFunction: null }, searchCaseSensitive: { classPropertyName: "searchCaseSensitive", publicName: "searchCaseSensitive", isSignal: true, isRequired: false, transformFunction: null }, keepSearchAfterSelect: { classPropertyName: "keepSearchAfterSelect", publicName: "keepSearchAfterSelect", isSignal: true, isRequired: false, transformFunction: null }, maxSelectedItems: { classPropertyName: "maxSelectedItems", publicName: "maxSelectedItems", isSignal: true, isRequired: false, transformFunction: null }, itemDisplayLimit: { classPropertyName: "itemDisplayLimit", publicName: "itemDisplayLimit", isSignal: true, isRequired: false, transformFunction: null }, searchFn: { classPropertyName: "searchFn", publicName: "searchFn", isSignal: true, isRequired: false, transformFunction: null }, compareWith: { classPropertyName: "compareWith", publicName: "compareWith", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null }, dropdownAppearance: { classPropertyName: "dropdownAppearance", publicName: "dropdownAppearance", isSignal: true, isRequired: false, transformFunction: null }, dropdownVariant: { classPropertyName: "dropdownVariant", publicName: "dropdownVariant", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: false, isRequired: false, transformFunction: null }, multiselectable: { classPropertyName: "multiselectable", publicName: "multiselectable", isSignal: true, isRequired: false, transformFunction: null }, clearable: { classPropertyName: "clearable", publicName: "clearable", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, addCustom: { classPropertyName: "addCustom", publicName: "addCustom", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null }, isOpen: { classPropertyName: "isOpen", publicName: "isOpen", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", changeEvent: "change", addEvent: "add", failedToAddEvent: "failedToAdd", removeEvent: "remove", clearEvent: "clear", openEvent: "open", closeEvent: "close", scrollEvent: "scroll", scrollToEndEvent: "scrollToEnd", searchEvent: "search", isOpen: "isOpenChange" }, host: { listeners: { "window:resize": "onWindowResize()", "mouseup": "onMouseup()", "keydown": "onKeyPress($event)" }, properties: { "class.ard-group-items": "this._groupItemsHostAttribute" } }, providers: [
4138
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ArdiumSelectComponent, selector: "ard-select", inputs: { valueFrom: { classPropertyName: "valueFrom", publicName: "valueFrom", isSignal: true, isRequired: false, transformFunction: null }, labelFrom: { classPropertyName: "labelFrom", publicName: "labelFrom", isSignal: true, isRequired: false, transformFunction: null }, disabledFrom: { classPropertyName: "disabledFrom", publicName: "disabledFrom", isSignal: true, isRequired: false, transformFunction: null }, groupLabelFrom: { classPropertyName: "groupLabelFrom", publicName: "groupLabelFrom", isSignal: true, isRequired: false, transformFunction: null }, groupDisabledFrom: { classPropertyName: "groupDisabledFrom", publicName: "groupDisabledFrom", isSignal: true, isRequired: false, transformFunction: null }, childrenFrom: { classPropertyName: "childrenFrom", publicName: "childrenFrom", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, clearButtonTitle: { classPropertyName: "clearButtonTitle", publicName: "clearButtonTitle", isSignal: true, isRequired: false, transformFunction: null }, dropdownPosition: { classPropertyName: "dropdownPosition", publicName: "dropdownPosition", isSignal: true, isRequired: false, transformFunction: null }, noItemsFoundText: { classPropertyName: "noItemsFoundText", publicName: "noItemsFoundText", isSignal: true, isRequired: false, transformFunction: null }, loadingPlaceholderText: { classPropertyName: "loadingPlaceholderText", publicName: "loadingPlaceholderText", isSignal: true, isRequired: false, transformFunction: null }, searchInputId: { classPropertyName: "searchInputId", publicName: "searchInputId", isSignal: true, isRequired: false, transformFunction: null }, inputAttrs: { classPropertyName: "inputAttrs", publicName: "inputAttrs", isSignal: true, isRequired: false, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, itemsAlreadyGrouped: { classPropertyName: "itemsAlreadyGrouped", publicName: "itemsAlreadyGrouped", isSignal: true, isRequired: false, transformFunction: null }, invertDisabled: { classPropertyName: "invertDisabled", publicName: "invertDisabled", isSignal: true, isRequired: false, transformFunction: null }, noGroupActions: { classPropertyName: "noGroupActions", publicName: "noGroupActions", isSignal: true, isRequired: false, transformFunction: null }, autoHighlightFirst: { classPropertyName: "autoHighlightFirst", publicName: "autoHighlightFirst", isSignal: true, isRequired: false, transformFunction: null }, autoFocus: { classPropertyName: "autoFocus", publicName: "autoFocus", isSignal: true, isRequired: false, transformFunction: null }, keepOpen: { classPropertyName: "keepOpen", publicName: "keepOpen", isSignal: true, isRequired: false, transformFunction: null }, hideSelected: { classPropertyName: "hideSelected", publicName: "hideSelected", isSignal: true, isRequired: false, transformFunction: null }, noBackspaceClear: { classPropertyName: "noBackspaceClear", publicName: "noBackspaceClear", isSignal: true, isRequired: false, transformFunction: null }, sortMultipleValues: { classPropertyName: "sortMultipleValues", publicName: "sortMultipleValues", isSignal: true, isRequired: false, transformFunction: null }, searchCaseSensitive: { classPropertyName: "searchCaseSensitive", publicName: "searchCaseSensitive", isSignal: true, isRequired: false, transformFunction: null }, keepSearchAfterSelect: { classPropertyName: "keepSearchAfterSelect", publicName: "keepSearchAfterSelect", isSignal: true, isRequired: false, transformFunction: null }, maxSelectedItems: { classPropertyName: "maxSelectedItems", publicName: "maxSelectedItems", isSignal: true, isRequired: false, transformFunction: null }, itemDisplayLimit: { classPropertyName: "itemDisplayLimit", publicName: "itemDisplayLimit", isSignal: true, isRequired: false, transformFunction: null }, searchFn: { classPropertyName: "searchFn", publicName: "searchFn", isSignal: true, isRequired: false, transformFunction: null }, compareWith: { classPropertyName: "compareWith", publicName: "compareWith", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null }, dropdownAppearance: { classPropertyName: "dropdownAppearance", publicName: "dropdownAppearance", isSignal: true, isRequired: false, transformFunction: null }, dropdownVariant: { classPropertyName: "dropdownVariant", publicName: "dropdownVariant", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: false, isRequired: false, transformFunction: null }, multiselectable: { classPropertyName: "multiselectable", publicName: "multiselectable", isSignal: true, isRequired: false, transformFunction: null }, clearable: { classPropertyName: "clearable", publicName: "clearable", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, addCustom: { classPropertyName: "addCustom", publicName: "addCustom", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null }, isOpen: { classPropertyName: "isOpen", publicName: "isOpen", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", changeEvent: "change", addEvent: "add", failedToAddEvent: "failedToAdd", removeEvent: "remove", clearEvent: "clear", openEvent: "open", closeEvent: "close", scrollEvent: "scroll", scrollToEndEvent: "scrollToEnd", searchEvent: "search", isOpen: "isOpenChange" }, host: { listeners: { "window:resize": "onWindowResize()", "mouseup": "onMouseup()", "keydown": "onKeyPress($event)" }, properties: { "class.ard-group-items": "this._groupItemsHostAttribute" } }, providers: [
3985
4139
  {
3986
4140
  provide: NG_VALUE_ACCESSOR,
3987
4141
  useExisting: forwardRef(() => ArdiumSelectComponent),
3988
4142
  multi: true,
3989
4143
  },
3990
- ], queries: [{ propertyName: "optionTemplate", first: true, predicate: ArdOptionTemplateDirective, descendants: true, isSignal: true }, { propertyName: "optgroupTemplate", first: true, predicate: ArdOptgroupTemplateDirective, descendants: true, isSignal: true }, { propertyName: "valueTemplate", first: true, predicate: ArdValueTemplateDirective, descendants: true, isSignal: true }, { propertyName: "placeholderTemplate", first: true, predicate: ArdSelectPlaceholderTemplateDirective, descendants: true, isSignal: true }, { propertyName: "loadingSpinnerTemplate", first: true, predicate: ArdLoadingSpinnerTemplateDirective, descendants: true, isSignal: true }, { propertyName: "loadingPlaceholderTemplate", first: true, predicate: ArdLoadingPlaceholderTemplateDirective, descendants: true, isSignal: true }, { propertyName: "dropdownHeaderTemplate", first: true, predicate: ArdDropdownHeaderTemplateDirective, descendants: true, isSignal: true }, { propertyName: "dropdownFooterTemplate", first: true, predicate: ArdDropdownFooterTemplateDirective, descendants: true, isSignal: true }, { propertyName: "noItemsFoundTemplate", first: true, predicate: ArdNoItemsFoundTemplateDirective, descendants: true, isSignal: true }, { propertyName: "addCustomTemplate", first: true, predicate: ArdAddCustomTemplateDirective, descendants: true, isSignal: true }, { propertyName: "itemLimitReachedTemplate", first: true, predicate: ArdItemLimitReachedTemplateDirective, descendants: true, isSignal: true }, { propertyName: "itemDisplayLimitTemplate", first: true, predicate: ArdItemDisplayLimitTemplateDirective, descendants: true, isSignal: true }, { propertyName: "prefixTemplate", first: true, predicate: ArdSelectPrefixTemplateDirective, descendants: true, isSignal: true }, { propertyName: "suffixTemplate", first: true, predicate: ArdSelectSuffixTemplateDirective, descendants: true, isSignal: true }, { propertyName: "optionComponents", predicate: ArdiumOptionComponent }], viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true, isSignal: true }, { propertyName: "dropdownPanel", first: true, predicate: ArdiumDropdownPanelComponent, descendants: true, isSignal: true }, { propertyName: "dropdownHost", first: true, predicate: ["dropdownHost"], descendants: true, read: ElementRef }, { propertyName: "dropdownTemplate", first: true, predicate: ["dropdownTemplate"], descendants: true, read: TemplateRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ard-form-field-frame\n [appearance]=\"appearance()\"\n [variant]=\"variant()\"\n [compact]=\"compact()\"\n [isFocused]=\"isFocused\"\n [prefixTemplate]=\"prefixTemplate()?.template\"\n [suffixTemplate]=\"suffixTemplate()?.template\"\n>\n <div\n class=\"ard-select\"\n #dropdownHost\n (click)=\"handleAnywhereClick($event)\"\n [class.ard-has-value]=\"itemStorage.isAnyItemSelected()\"\n [ngClass]=\"ngClasses()\"\n >\n <div class=\"ard-select-value-container\">\n @if (shouldDisplayPlaceholder()) {\n <ng-template #defaultPlaceholderTemplate>\n <div class=\"ard-placeholder\">{{ placeholder() }}</div>\n </ng-template>\n\n <ng-template [ngTemplateOutlet]=\"placeholderTemplate()?.template || defaultPlaceholderTemplate\" />\n }\n @if (shouldDisplayValue()) {\n @for (item of itemStorage.selectedItems(); track item.index) {\n <div\n class=\"ard-select-value\"\n [class.ard-value-disabled]=\"item.disabled()\"\n [attr.hidden]=\"!isValueWithinDisplayLimit($index)\"\n >\n <ng-template\n *ngIf=\"isValueWithinDisplayLimit($index)\"\n [ngTemplateOutlet]=\"\n valueTemplate()?.template || (multiselectable() ? defaultMultiValueTemplate : defaultValueTemplate)\n \"\n [ngTemplateOutletContext]=\"getValueContext(item)\"\n />\n </div>\n }\n\n <ng-template\n #defaultValueTemplate\n let-item\n >\n <div\n [ardInnerHTML]=\"item.label()\"\n [ardEscapeInnerHTML]=\"isItemsInputUsed\"\n ></div>\n </ng-template>\n <ng-template\n #defaultMultiValueTemplate\n let-item\n let-unselect=\"unselect\"\n >\n <ard-deletable-chip\n (delete)=\"unselect(item)\"\n [variant]=\"variant()\"\n compact\n appearance=\"outlined-strong\"\n >\n <div\n [ardInnerHTML]=\"item.label()\"\n [ardEscapeInnerHTML]=\"isItemsInputUsed\"\n ></div>\n <!-- TODO check if can remove div -->\n </ard-deletable-chip>\n </ng-template>\n }\n @if (itemStorage.isAnyItemSelected() && shouldShowItemDisplayLimit()) {\n <div class=\"ard-overflow-indicator\">\n <ng-template\n [ngTemplateOutlet]=\"itemDisplayLimitTemplate()?.template || defaultItemDisplayLimitTemplate\"\n [ngTemplateOutletContext]=\"getItemDisplayLimitContext()\"\n />\n\n <ng-template\n #defaultItemDisplayLimitTemplate\n let-count=\"overflowCount\"\n >\n <div>{{ count }} more...</div>\n </ng-template>\n </div>\n }\n\n <div\n class=\"ard-search-input\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-owns]=\"isOpen() ? htmlId() : null\"\n >\n <input\n #searchInput\n #focusableElement\n type=\"text\"\n [attr.id]=\"searchInputId()\"\n [attr.tabindex]=\"tabIndex()\"\n [readonly]=\"isInputElementReadonly()\"\n [disabled]=\"disabled()\"\n [value]=\"searchTerm()\"\n aria-autocomplete=\"list\"\n [attr.aria-controls]=\"isOpen() ? htmlId() : null\"\n (input)=\"filter(searchInput.value)\"\n (change)=\"$event.stopPropagation()\"\n (focus)=\"onFocus($event)\"\n (focus)=\"onSearchInputFocus()\"\n (blur)=\"onBlur($event)\"\n (blur)=\"onSearchInputBlur()\"\n />\n </div>\n </div>\n\n <div class=\"ard-select-controls\">\n @if (isLoading()) {\n <ng-template #defaultLoadingSpinnerTemplate>\n <div class=\"ard-simple-spinner\"></div>\n </ng-template>\n\n <ng-template [ngTemplateOutlet]=\"loadingSpinnerTemplate()?.template || defaultLoadingSpinnerTemplate\" />\n }\n @if (shouldShowClearButton()) {\n <ard-clear-button\n [title]=\"clearButtonTitle()\"\n (click)=\"handleClearButtonClick($event)\"\n />\n }\n\n <button\n type=\"button\"\n class=\"ard-dropdown-arrow-wrapper\"\n (click)=\"handleDropdownArrowClick($event)\"\n >\n <span class=\"ard-dropdown-arrow\"></span>\n <div class=\"ard-hitbox\"></div>\n </button>\n </div>\n </div>\n</ard-form-field-frame>\n\n<ng-template #dropdownTemplate>\n <ard-dropdown-panel\n class=\"ard-dropdown-panel ard-select-dropdown-panel\"\n role=\"listbox\"\n aria-label=\"Options list\"\n [headerTemplate]=\"dropdownHeaderTemplate()?.template ?? null\"\n [footerTemplate]=\"dropdownFooterTemplate()?.template ?? null\"\n [appearance]=\"dropdownAppearanceOrDefault()\"\n [variant]=\"dropdownVariantOrDefault()\"\n [isOpen]=\"true\"\n [filterValue]=\"searchTerm()\"\n [panelId]=\"htmlId()\"\n [compact]=\"compact()\"\n (ardClickOutside)=\"handleOutsideClick($event)\"\n (mousemove)=\"onMouseMove()\"\n (scroll)=\"scrollEvent.emit($event)\"\n (scrollToEnd)=\"scrollToEndEvent.emit($event)\"\n >\n @if (!shouldShowNoItemsFound()) {\n @for (group of itemStorage.groups(); track $index) {\n <div\n class=\"ard-optgroup\"\n role=\"group\"\n [class.ard-group-disabled]=\"group.disabled()\"\n [class.ard-group-selected]=\"group.selected()\"\n [class.ard-group-highlighted]=\"group.highlighted()\"\n (mouseover)=\"onGroupMouseover(group)\"\n (click)=\"onGroupClick(group)\"\n >\n @if (group.label() !== '' && group.label() !== undefined) {\n <ng-template\n #defaultOptgroupTemplate\n let-group\n >\n <span\n class=\"ard-optgroup-label\"\n [ardInnerHTML]=\"group.label()\"\n [ardEscapeInnerHTML]=\"isItemsInputUsed\"\n ></span>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"optgroupTemplate()?.template || defaultOptgroupTemplate\"\n [ngTemplateOutletContext]=\"getGroupContext(group)\"\n />\n }\n\n <div class=\"ard-optgroup-children\">\n @for (option of group.children(); track option.index) {\n <div\n class=\"ard-option\"\n role=\"option\"\n [class.ard-option-disabled]=\"option.disabled()\"\n [class.ard-option-selected]=\"option.selected()\"\n [class.ard-option-highlighted]=\"option.highlighted()\"\n [class.ard-option-highlighted-recent]=\"option.highlighted_recently()\"\n [attr.aria-selected]=\"option.selected()\"\n [attr.id]=\"htmlId() + '-' + option.index\"\n (click)=\"onItemClick(option, $event)\"\n (mouseover)=\"onItemMouseOver($event)\"\n (mouseenter)=\"onItemMouseEnter(option, $event)\"\n (mouseleave)=\"onItemMouseLeave(option, $event)\"\n >\n <div class=\"ard-option-label\">\n <ng-template\n #defaultOptionTemplate\n let-option\n >\n <span\n [ardInnerHTML]=\"option.label()\"\n [ardEscapeInnerHTML]=\"isItemsInputUsed\"\n ></span>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"optionTemplate()?.template || defaultOptionTemplate\"\n [ngTemplateOutletContext]=\"getOptionContext(option)\"\n />\n </div>\n </div>\n }\n </div>\n </div>\n }\n }\n @if (shouldShowNoItemsFound()) {\n <ng-template #defaultNoItemsFoundTemplate>\n <div class=\"ard-option ard-option-disabled\">{{ noItemsFoundText() }}</div>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"noItemsFoundTemplate()?.template || defaultNoItemsFoundTemplate\"\n [ngTemplateOutletContext]=\"getSearchContext()\"\n />\n }\n @if (shouldShowAddCustom()) {\n <ng-template\n #defaultAddCustomTemplate\n let-searchTerm\n >\n <div\n class=\"ard-option ard-option-highlighted ard-add-custom\"\n (click)=\"addCustomOption(searchTerm)\"\n >\n <span class=\"ard-add-custom-label\">Add option</span>\n <span class=\"ard-add-custom-value\">\"{{ searchTerm }}\"</span>\n </div>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"addCustomTemplate()?.template || defaultAddCustomTemplate\"\n [ngTemplateOutletContext]=\"getCustomOptionContext()\"\n />\n }\n @if (isLoading()) {\n <ng-template #defaultLoadingPlaceholderTemplate>\n <div class=\"ard-option ard-option-disabled\">{{ loadingPlaceholderText() }}</div>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"loadingPlaceholderTemplate()?.template || defaultLoadingPlaceholderTemplate\"\n [ngTemplateOutletContext]=\"getSearchContext()\"\n />\n }\n </ard-dropdown-panel>\n</ng-template>\n", styles: [".ard-select .ard-select-container{display:flex;cursor:pointer}.ard-select .ard-placeholder,.ard-select .ard-value,.ard-select .ard-dropdown-arrow-wrapper,.ard-select .ard-clear-btn-wrapper{-webkit-user-select:none;user-select:none}.ard-select .ard-clear-btn,.ard-select .ard-dropdown-arrow{border:none;background:transparent;padding:0;box-sizing:content-box}.ard-select .ard-option-disabled{pointer-events:none}.ard-select .ard-select-value{display:block}.ard-select .ard-select-value[hidden=true]{display:none}.ard-select .ard-searchable .ard-select-value-container{cursor:text}.ard-select .ard-dropdown-arrow-wrapper{position:relative}.ard-select .ard-dropdown-arrow-wrapper .ard-hitbox{position:absolute;left:-4px;right:-4px;aspect-ratio:1}.ard-select-dropdown-panel .ard-optgroup,.ard-select-dropdown-panel .ard-option{-webkit-user-select:none;user-select:none}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ArdiumFormFieldFrameComponent, selector: "ard-form-field-frame", inputs: ["isFocused", "appearance", "variant", "compact", "prefixTemplate", "suffixTemplate"] }, { kind: "component", type: ArdiumDropdownPanelComponent, selector: "ard-dropdown-panel", inputs: ["panelId", "headerTemplate", "footerTemplate", "filterValue", "appearance", "variant", "compact", "isOpen"], outputs: ["scroll", "scrollToEnd"] }, { kind: "component", type: ArdiumDeletableChipComponent, selector: "ard-deletable-chip", inputs: ["deleteButtonTitle", "contentAlignment", "appearance", "variant", "color", "compact", "wrapperClasses"], outputs: ["delete"] }, { kind: "directive", type: i4.ClickOutsideDirective, selector: "[ardClickOutside]", outputs: ["ardClickOutside"] }, { kind: "component", type: _ClearButtonComponent, selector: "ard-clear-button" }, { kind: "directive", type: i4.ArdiumInnerHTMLDirective, selector: "[ardInnerHTML]", inputs: ["ardInnerHTML", "ardEscapeInnerHTML"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
4144
+ {
4145
+ provide: _FormFieldComponentBase,
4146
+ useExisting: ArdiumSelectComponent,
4147
+ },
4148
+ ], queries: [{ propertyName: "optionTemplate", first: true, predicate: ArdOptionTemplateDirective, descendants: true, isSignal: true }, { propertyName: "optgroupTemplate", first: true, predicate: ArdOptgroupTemplateDirective, descendants: true, isSignal: true }, { propertyName: "valueTemplate", first: true, predicate: ArdValueTemplateDirective, descendants: true, isSignal: true }, { propertyName: "placeholderTemplate", first: true, predicate: ArdSelectPlaceholderTemplateDirective, descendants: true, isSignal: true }, { propertyName: "loadingSpinnerTemplate", first: true, predicate: ArdLoadingSpinnerTemplateDirective, descendants: true, isSignal: true }, { propertyName: "loadingPlaceholderTemplate", first: true, predicate: ArdLoadingPlaceholderTemplateDirective, descendants: true, isSignal: true }, { propertyName: "dropdownHeaderTemplate", first: true, predicate: ArdDropdownHeaderTemplateDirective, descendants: true, isSignal: true }, { propertyName: "dropdownFooterTemplate", first: true, predicate: ArdDropdownFooterTemplateDirective, descendants: true, isSignal: true }, { propertyName: "noItemsFoundTemplate", first: true, predicate: ArdNoItemsFoundTemplateDirective, descendants: true, isSignal: true }, { propertyName: "addCustomTemplate", first: true, predicate: ArdAddCustomTemplateDirective, descendants: true, isSignal: true }, { propertyName: "itemLimitReachedTemplate", first: true, predicate: ArdItemLimitReachedTemplateDirective, descendants: true, isSignal: true }, { propertyName: "itemDisplayLimitTemplate", first: true, predicate: ArdItemDisplayLimitTemplateDirective, descendants: true, isSignal: true }, { propertyName: "prefixTemplate", first: true, predicate: ArdSelectPrefixTemplateDirective, descendants: true, isSignal: true }, { propertyName: "suffixTemplate", first: true, predicate: ArdSelectSuffixTemplateDirective, descendants: true, isSignal: true }, { propertyName: "optionComponents", predicate: ArdiumOptionComponent }], viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true, isSignal: true }, { propertyName: "dropdownPanel", first: true, predicate: ArdiumDropdownPanelComponent, descendants: true, isSignal: true }, { propertyName: "dropdownHost", first: true, predicate: ["dropdownHost"], descendants: true, read: ElementRef }, { propertyName: "dropdownTemplate", first: true, predicate: ["dropdownTemplate"], descendants: true, read: TemplateRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ard-form-field-frame\r\n [appearance]=\"appearance()\"\r\n [variant]=\"variant()\"\r\n [compact]=\"compact()\"\r\n [isFocused]=\"isFocused()\"\r\n [hasError]=\"hasError()\"\r\n [isSuccess]=\"isSuccess()\"\r\n [prefixTemplate]=\"prefixTemplate()?.template\"\r\n [suffixTemplate]=\"suffixTemplate()?.template\"\r\n>\r\n <div\r\n class=\"ard-select\"\r\n #dropdownHost\r\n (click)=\"handleAnywhereClick($event)\"\r\n [class.ard-has-value]=\"itemStorage.isAnyItemSelected()\"\r\n [ngClass]=\"ngClasses()\"\r\n >\r\n <div class=\"ard-select-value-container\">\r\n @if (shouldDisplayPlaceholder()) {\r\n <ng-template #defaultPlaceholderTemplate>\r\n <div class=\"ard-placeholder\">{{ placeholder() }}</div>\r\n </ng-template>\r\n\r\n <ng-template [ngTemplateOutlet]=\"placeholderTemplate()?.template || defaultPlaceholderTemplate\" />\r\n } @if (shouldDisplayValue()) { @for (item of itemStorage.selectedItems(); track item.index) {\r\n <div\r\n class=\"ard-select-value\"\r\n [class.ard-value-disabled]=\"item.disabled()\"\r\n [attr.hidden]=\"!isValueWithinDisplayLimit($index)\"\r\n >\r\n <ng-template\r\n *ngIf=\"isValueWithinDisplayLimit($index)\"\r\n [ngTemplateOutlet]=\"valueTemplate()?.template || (multiselectable() ? defaultMultiValueTemplate : defaultValueTemplate)\"\r\n [ngTemplateOutletContext]=\"getValueContext(item)\"\r\n />\r\n </div>\r\n }\r\n\r\n <ng-template\r\n #defaultValueTemplate\r\n let-item\r\n >\r\n <div\r\n [ardInnerHTML]=\"item.label()\"\r\n [ardEscapeInnerHTML]=\"isItemsInputUsed\"\r\n ></div>\r\n </ng-template>\r\n <ng-template\r\n #defaultMultiValueTemplate\r\n let-item\r\n let-unselect=\"unselect\"\r\n >\r\n <ard-deletable-chip\r\n (delete)=\"unselect(item)\"\r\n [variant]=\"variant()\"\r\n compact\r\n appearance=\"outlined-strong\"\r\n >\r\n <div\r\n [ardInnerHTML]=\"item.label()\"\r\n [ardEscapeInnerHTML]=\"isItemsInputUsed\"\r\n ></div>\r\n </ard-deletable-chip>\r\n </ng-template>\r\n } @if (itemStorage.isAnyItemSelected() && shouldShowItemDisplayLimit()) {\r\n <div class=\"ard-overflow-indicator\">\r\n <ng-template\r\n [ngTemplateOutlet]=\"itemDisplayLimitTemplate()?.template || defaultItemDisplayLimitTemplate\"\r\n [ngTemplateOutletContext]=\"getItemDisplayLimitContext()\"\r\n />\r\n\r\n <ng-template\r\n #defaultItemDisplayLimitTemplate\r\n let-count=\"overflowCount\"\r\n >\r\n <div>{{ count }} more...</div>\r\n </ng-template>\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"ard-search-input\"\r\n role=\"combobox\"\r\n aria-haspopup=\"listbox\"\r\n [attr.aria-expanded]=\"isOpen()\"\r\n [attr.aria-owns]=\"isOpen() ? htmlId() : null\"\r\n >\r\n <input\r\n #searchInput\r\n #focusableElement\r\n type=\"text\"\r\n [attr.id]=\"searchInputId()\"\r\n [attr.tabindex]=\"tabIndex()\"\r\n [readonly]=\"isInputElementReadonly()\"\r\n [disabled]=\"disabled()\"\r\n [value]=\"searchTerm()\"\r\n aria-autocomplete=\"list\"\r\n [attr.aria-controls]=\"isOpen() ? htmlId() : null\"\r\n (input)=\"filter(searchInput.value)\"\r\n (change)=\"$event.stopPropagation()\"\r\n (focus)=\"onFocus($event)\"\r\n (focus)=\"onSearchInputFocus()\"\r\n (blur)=\"onBlur($event)\"\r\n (blur)=\"onSearchInputBlur()\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div class=\"ard-select-controls\">\r\n @if (isLoading()) {\r\n <ng-template #defaultLoadingSpinnerTemplate>\r\n <div class=\"ard-simple-spinner\"></div>\r\n </ng-template>\r\n\r\n <ng-template [ngTemplateOutlet]=\"loadingSpinnerTemplate()?.template || defaultLoadingSpinnerTemplate\" />\r\n } @if (shouldShowClearButton()) {\r\n <ard-clear-button\r\n [title]=\"clearButtonTitle()\"\r\n (click)=\"handleClearButtonClick($event)\"\r\n />\r\n }\r\n\r\n <button\r\n type=\"button\"\r\n class=\"ard-dropdown-arrow-wrapper\"\r\n (click)=\"handleDropdownArrowClick($event)\"\r\n [attr.tabindex]=\"tabIndex()\"\r\n >\r\n <span class=\"ard-dropdown-arrow\"></span>\r\n <div class=\"ard-hitbox\"></div>\r\n </button>\r\n </div>\r\n </div>\r\n</ard-form-field-frame>\r\n\r\n<ng-template #dropdownTemplate>\r\n <ard-dropdown-panel\r\n class=\"ard-dropdown-panel ard-select-dropdown-panel\"\r\n role=\"listbox\"\r\n aria-label=\"Options list\"\r\n [headerTemplate]=\"dropdownHeaderTemplate()?.template ?? null\"\r\n [footerTemplate]=\"dropdownFooterTemplate()?.template ?? null\"\r\n [appearance]=\"dropdownAppearanceOrDefault()\"\r\n [variant]=\"dropdownVariantOrDefault()\"\r\n [isOpen]=\"true\"\r\n [filterValue]=\"searchTerm()\"\r\n [panelId]=\"htmlId()\"\r\n [compact]=\"compact()\"\r\n (ardClickOutside)=\"handleOutsideClick($event)\"\r\n (mousemove)=\"onMouseMove()\"\r\n (scroll)=\"scrollEvent.emit($event)\"\r\n (scrollToEnd)=\"scrollToEndEvent.emit($event)\"\r\n >\r\n @if (!shouldShowNoItemsFound()) { @for (group of itemStorage.groups(); track $index) {\r\n <div\r\n class=\"ard-optgroup\"\r\n role=\"group\"\r\n [class.ard-group-disabled]=\"group.disabled()\"\r\n [class.ard-group-selected]=\"group.selected()\"\r\n [class.ard-group-highlighted]=\"group.highlighted()\"\r\n (mouseover)=\"onGroupMouseover(group)\"\r\n (click)=\"onGroupClick(group)\"\r\n >\r\n @if (group.label() !== '' && group.label() !== undefined) {\r\n <ng-template\r\n #defaultOptgroupTemplate\r\n let-group\r\n >\r\n <span\r\n class=\"ard-optgroup-label\"\r\n [ardInnerHTML]=\"group.label()\"\r\n [ardEscapeInnerHTML]=\"isItemsInputUsed\"\r\n ></span>\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"optgroupTemplate()?.template || defaultOptgroupTemplate\"\r\n [ngTemplateOutletContext]=\"getGroupContext(group)\"\r\n />\r\n }\r\n\r\n <div class=\"ard-optgroup-children\">\r\n @for (option of group.children(); track option.index) {\r\n <div\r\n class=\"ard-option\"\r\n role=\"option\"\r\n [class.ard-option-disabled]=\"option.disabled()\"\r\n [class.ard-option-selected]=\"option.selected()\"\r\n [class.ard-option-highlighted]=\"option.highlighted()\"\r\n [class.ard-option-highlighted-recent]=\"option.highlighted_recently()\"\r\n [attr.aria-selected]=\"option.selected()\"\r\n [attr.id]=\"htmlId() + '-' + option.index\"\r\n (click)=\"onItemClick(option, $event)\"\r\n (mouseover)=\"onItemMouseOver($event)\"\r\n (mouseenter)=\"onItemMouseEnter(option, $event)\"\r\n (mouseleave)=\"onItemMouseLeave(option, $event)\"\r\n >\r\n <div class=\"ard-option-label\">\r\n <ng-template\r\n #defaultOptionTemplate\r\n let-option\r\n >\r\n <span\r\n [ardInnerHTML]=\"option.label()\"\r\n [ardEscapeInnerHTML]=\"isItemsInputUsed\"\r\n ></span>\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"optionTemplate()?.template || defaultOptionTemplate\"\r\n [ngTemplateOutletContext]=\"getOptionContext(option)\"\r\n />\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n } } @if (shouldShowNoItemsFound()) {\r\n <ng-template #defaultNoItemsFoundTemplate>\r\n <div class=\"ard-option ard-option-disabled\">{{ noItemsFoundText() }}</div>\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"noItemsFoundTemplate()?.template || defaultNoItemsFoundTemplate\"\r\n [ngTemplateOutletContext]=\"getSearchContext()\"\r\n />\r\n } @if (shouldShowAddCustom()) {\r\n <ng-template\r\n #defaultAddCustomTemplate\r\n let-searchTerm\r\n >\r\n <div\r\n class=\"ard-option ard-option-highlighted ard-add-custom\"\r\n (click)=\"addCustomOption(searchTerm)\"\r\n >\r\n <span class=\"ard-add-custom-label\">Add option</span>\r\n <span class=\"ard-add-custom-value\">\"{{ searchTerm }}\"</span>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"addCustomTemplate()?.template || defaultAddCustomTemplate\"\r\n [ngTemplateOutletContext]=\"getCustomOptionContext()\"\r\n />\r\n } @if (isLoading()) {\r\n <ng-template #defaultLoadingPlaceholderTemplate>\r\n <div class=\"ard-option ard-option-disabled\">{{ loadingPlaceholderText() }}</div>\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"loadingPlaceholderTemplate()?.template || defaultLoadingPlaceholderTemplate\"\r\n [ngTemplateOutletContext]=\"getSearchContext()\"\r\n />\r\n }\r\n </ard-dropdown-panel>\r\n</ng-template>\r\n", styles: [".ard-select .ard-select-container{display:flex;cursor:pointer}.ard-select .ard-placeholder,.ard-select .ard-value,.ard-select .ard-dropdown-arrow-wrapper,.ard-select .ard-clear-btn-wrapper{-webkit-user-select:none;user-select:none}.ard-select .ard-clear-btn,.ard-select .ard-dropdown-arrow{border:none;background:transparent;padding:0;box-sizing:content-box}.ard-select .ard-option-disabled{pointer-events:none}.ard-select .ard-select-value{display:block}.ard-select .ard-select-value[hidden=true]{display:none}.ard-select .ard-searchable .ard-select-value-container{cursor:text}.ard-select .ard-dropdown-arrow-wrapper{position:relative}.ard-select .ard-dropdown-arrow-wrapper .ard-hitbox{position:absolute;left:-4px;right:-4px;aspect-ratio:1}.ard-select-dropdown-panel .ard-optgroup,.ard-select-dropdown-panel .ard-option{-webkit-user-select:none;user-select:none}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ArdiumFormFieldFrameComponent, selector: "ard-form-field-frame", inputs: ["hasError", "isSuccess", "isFocused", "appearance", "variant", "compact", "prefixTemplate", "suffixTemplate"] }, { kind: "component", type: ArdiumDropdownPanelComponent, selector: "ard-dropdown-panel", inputs: ["panelId", "headerTemplate", "footerTemplate", "filterValue", "appearance", "variant", "compact", "isOpen"], outputs: ["scroll", "scrollToEnd"] }, { kind: "component", type: ArdiumDeletableChipComponent, selector: "ard-deletable-chip", inputs: ["deleteButtonTitle", "contentAlignment", "appearance", "variant", "color", "compact", "wrapperClasses"], outputs: ["delete"] }, { kind: "directive", type: i4.ClickOutsideDirective, selector: "[ardClickOutside]", outputs: ["ardClickOutside"] }, { kind: "component", type: _ClearButtonComponent, selector: "ard-clear-button" }, { kind: "directive", type: i4.ArdiumInnerHTMLDirective, selector: "[ardInnerHTML]", inputs: ["ardInnerHTML", "ardEscapeInnerHTML"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
3991
4149
  }
3992
4150
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumSelectComponent, decorators: [{
3993
4151
  type: Component,
@@ -3997,7 +4155,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
3997
4155
  useExisting: forwardRef(() => ArdiumSelectComponent),
3998
4156
  multi: true,
3999
4157
  },
4000
- ], template: "<ard-form-field-frame\n [appearance]=\"appearance()\"\n [variant]=\"variant()\"\n [compact]=\"compact()\"\n [isFocused]=\"isFocused\"\n [prefixTemplate]=\"prefixTemplate()?.template\"\n [suffixTemplate]=\"suffixTemplate()?.template\"\n>\n <div\n class=\"ard-select\"\n #dropdownHost\n (click)=\"handleAnywhereClick($event)\"\n [class.ard-has-value]=\"itemStorage.isAnyItemSelected()\"\n [ngClass]=\"ngClasses()\"\n >\n <div class=\"ard-select-value-container\">\n @if (shouldDisplayPlaceholder()) {\n <ng-template #defaultPlaceholderTemplate>\n <div class=\"ard-placeholder\">{{ placeholder() }}</div>\n </ng-template>\n\n <ng-template [ngTemplateOutlet]=\"placeholderTemplate()?.template || defaultPlaceholderTemplate\" />\n }\n @if (shouldDisplayValue()) {\n @for (item of itemStorage.selectedItems(); track item.index) {\n <div\n class=\"ard-select-value\"\n [class.ard-value-disabled]=\"item.disabled()\"\n [attr.hidden]=\"!isValueWithinDisplayLimit($index)\"\n >\n <ng-template\n *ngIf=\"isValueWithinDisplayLimit($index)\"\n [ngTemplateOutlet]=\"\n valueTemplate()?.template || (multiselectable() ? defaultMultiValueTemplate : defaultValueTemplate)\n \"\n [ngTemplateOutletContext]=\"getValueContext(item)\"\n />\n </div>\n }\n\n <ng-template\n #defaultValueTemplate\n let-item\n >\n <div\n [ardInnerHTML]=\"item.label()\"\n [ardEscapeInnerHTML]=\"isItemsInputUsed\"\n ></div>\n </ng-template>\n <ng-template\n #defaultMultiValueTemplate\n let-item\n let-unselect=\"unselect\"\n >\n <ard-deletable-chip\n (delete)=\"unselect(item)\"\n [variant]=\"variant()\"\n compact\n appearance=\"outlined-strong\"\n >\n <div\n [ardInnerHTML]=\"item.label()\"\n [ardEscapeInnerHTML]=\"isItemsInputUsed\"\n ></div>\n <!-- TODO check if can remove div -->\n </ard-deletable-chip>\n </ng-template>\n }\n @if (itemStorage.isAnyItemSelected() && shouldShowItemDisplayLimit()) {\n <div class=\"ard-overflow-indicator\">\n <ng-template\n [ngTemplateOutlet]=\"itemDisplayLimitTemplate()?.template || defaultItemDisplayLimitTemplate\"\n [ngTemplateOutletContext]=\"getItemDisplayLimitContext()\"\n />\n\n <ng-template\n #defaultItemDisplayLimitTemplate\n let-count=\"overflowCount\"\n >\n <div>{{ count }} more...</div>\n </ng-template>\n </div>\n }\n\n <div\n class=\"ard-search-input\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-owns]=\"isOpen() ? htmlId() : null\"\n >\n <input\n #searchInput\n #focusableElement\n type=\"text\"\n [attr.id]=\"searchInputId()\"\n [attr.tabindex]=\"tabIndex()\"\n [readonly]=\"isInputElementReadonly()\"\n [disabled]=\"disabled()\"\n [value]=\"searchTerm()\"\n aria-autocomplete=\"list\"\n [attr.aria-controls]=\"isOpen() ? htmlId() : null\"\n (input)=\"filter(searchInput.value)\"\n (change)=\"$event.stopPropagation()\"\n (focus)=\"onFocus($event)\"\n (focus)=\"onSearchInputFocus()\"\n (blur)=\"onBlur($event)\"\n (blur)=\"onSearchInputBlur()\"\n />\n </div>\n </div>\n\n <div class=\"ard-select-controls\">\n @if (isLoading()) {\n <ng-template #defaultLoadingSpinnerTemplate>\n <div class=\"ard-simple-spinner\"></div>\n </ng-template>\n\n <ng-template [ngTemplateOutlet]=\"loadingSpinnerTemplate()?.template || defaultLoadingSpinnerTemplate\" />\n }\n @if (shouldShowClearButton()) {\n <ard-clear-button\n [title]=\"clearButtonTitle()\"\n (click)=\"handleClearButtonClick($event)\"\n />\n }\n\n <button\n type=\"button\"\n class=\"ard-dropdown-arrow-wrapper\"\n (click)=\"handleDropdownArrowClick($event)\"\n >\n <span class=\"ard-dropdown-arrow\"></span>\n <div class=\"ard-hitbox\"></div>\n </button>\n </div>\n </div>\n</ard-form-field-frame>\n\n<ng-template #dropdownTemplate>\n <ard-dropdown-panel\n class=\"ard-dropdown-panel ard-select-dropdown-panel\"\n role=\"listbox\"\n aria-label=\"Options list\"\n [headerTemplate]=\"dropdownHeaderTemplate()?.template ?? null\"\n [footerTemplate]=\"dropdownFooterTemplate()?.template ?? null\"\n [appearance]=\"dropdownAppearanceOrDefault()\"\n [variant]=\"dropdownVariantOrDefault()\"\n [isOpen]=\"true\"\n [filterValue]=\"searchTerm()\"\n [panelId]=\"htmlId()\"\n [compact]=\"compact()\"\n (ardClickOutside)=\"handleOutsideClick($event)\"\n (mousemove)=\"onMouseMove()\"\n (scroll)=\"scrollEvent.emit($event)\"\n (scrollToEnd)=\"scrollToEndEvent.emit($event)\"\n >\n @if (!shouldShowNoItemsFound()) {\n @for (group of itemStorage.groups(); track $index) {\n <div\n class=\"ard-optgroup\"\n role=\"group\"\n [class.ard-group-disabled]=\"group.disabled()\"\n [class.ard-group-selected]=\"group.selected()\"\n [class.ard-group-highlighted]=\"group.highlighted()\"\n (mouseover)=\"onGroupMouseover(group)\"\n (click)=\"onGroupClick(group)\"\n >\n @if (group.label() !== '' && group.label() !== undefined) {\n <ng-template\n #defaultOptgroupTemplate\n let-group\n >\n <span\n class=\"ard-optgroup-label\"\n [ardInnerHTML]=\"group.label()\"\n [ardEscapeInnerHTML]=\"isItemsInputUsed\"\n ></span>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"optgroupTemplate()?.template || defaultOptgroupTemplate\"\n [ngTemplateOutletContext]=\"getGroupContext(group)\"\n />\n }\n\n <div class=\"ard-optgroup-children\">\n @for (option of group.children(); track option.index) {\n <div\n class=\"ard-option\"\n role=\"option\"\n [class.ard-option-disabled]=\"option.disabled()\"\n [class.ard-option-selected]=\"option.selected()\"\n [class.ard-option-highlighted]=\"option.highlighted()\"\n [class.ard-option-highlighted-recent]=\"option.highlighted_recently()\"\n [attr.aria-selected]=\"option.selected()\"\n [attr.id]=\"htmlId() + '-' + option.index\"\n (click)=\"onItemClick(option, $event)\"\n (mouseover)=\"onItemMouseOver($event)\"\n (mouseenter)=\"onItemMouseEnter(option, $event)\"\n (mouseleave)=\"onItemMouseLeave(option, $event)\"\n >\n <div class=\"ard-option-label\">\n <ng-template\n #defaultOptionTemplate\n let-option\n >\n <span\n [ardInnerHTML]=\"option.label()\"\n [ardEscapeInnerHTML]=\"isItemsInputUsed\"\n ></span>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"optionTemplate()?.template || defaultOptionTemplate\"\n [ngTemplateOutletContext]=\"getOptionContext(option)\"\n />\n </div>\n </div>\n }\n </div>\n </div>\n }\n }\n @if (shouldShowNoItemsFound()) {\n <ng-template #defaultNoItemsFoundTemplate>\n <div class=\"ard-option ard-option-disabled\">{{ noItemsFoundText() }}</div>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"noItemsFoundTemplate()?.template || defaultNoItemsFoundTemplate\"\n [ngTemplateOutletContext]=\"getSearchContext()\"\n />\n }\n @if (shouldShowAddCustom()) {\n <ng-template\n #defaultAddCustomTemplate\n let-searchTerm\n >\n <div\n class=\"ard-option ard-option-highlighted ard-add-custom\"\n (click)=\"addCustomOption(searchTerm)\"\n >\n <span class=\"ard-add-custom-label\">Add option</span>\n <span class=\"ard-add-custom-value\">\"{{ searchTerm }}\"</span>\n </div>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"addCustomTemplate()?.template || defaultAddCustomTemplate\"\n [ngTemplateOutletContext]=\"getCustomOptionContext()\"\n />\n }\n @if (isLoading()) {\n <ng-template #defaultLoadingPlaceholderTemplate>\n <div class=\"ard-option ard-option-disabled\">{{ loadingPlaceholderText() }}</div>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"loadingPlaceholderTemplate()?.template || defaultLoadingPlaceholderTemplate\"\n [ngTemplateOutletContext]=\"getSearchContext()\"\n />\n }\n </ard-dropdown-panel>\n</ng-template>\n", styles: [".ard-select .ard-select-container{display:flex;cursor:pointer}.ard-select .ard-placeholder,.ard-select .ard-value,.ard-select .ard-dropdown-arrow-wrapper,.ard-select .ard-clear-btn-wrapper{-webkit-user-select:none;user-select:none}.ard-select .ard-clear-btn,.ard-select .ard-dropdown-arrow{border:none;background:transparent;padding:0;box-sizing:content-box}.ard-select .ard-option-disabled{pointer-events:none}.ard-select .ard-select-value{display:block}.ard-select .ard-select-value[hidden=true]{display:none}.ard-select .ard-searchable .ard-select-value-container{cursor:text}.ard-select .ard-dropdown-arrow-wrapper{position:relative}.ard-select .ard-dropdown-arrow-wrapper .ard-hitbox{position:absolute;left:-4px;right:-4px;aspect-ratio:1}.ard-select-dropdown-panel .ard-optgroup,.ard-select-dropdown-panel .ard-option{-webkit-user-select:none;user-select:none}\n"] }]
4158
+ {
4159
+ provide: _FormFieldComponentBase,
4160
+ useExisting: ArdiumSelectComponent,
4161
+ },
4162
+ ], template: "<ard-form-field-frame\r\n [appearance]=\"appearance()\"\r\n [variant]=\"variant()\"\r\n [compact]=\"compact()\"\r\n [isFocused]=\"isFocused()\"\r\n [hasError]=\"hasError()\"\r\n [isSuccess]=\"isSuccess()\"\r\n [prefixTemplate]=\"prefixTemplate()?.template\"\r\n [suffixTemplate]=\"suffixTemplate()?.template\"\r\n>\r\n <div\r\n class=\"ard-select\"\r\n #dropdownHost\r\n (click)=\"handleAnywhereClick($event)\"\r\n [class.ard-has-value]=\"itemStorage.isAnyItemSelected()\"\r\n [ngClass]=\"ngClasses()\"\r\n >\r\n <div class=\"ard-select-value-container\">\r\n @if (shouldDisplayPlaceholder()) {\r\n <ng-template #defaultPlaceholderTemplate>\r\n <div class=\"ard-placeholder\">{{ placeholder() }}</div>\r\n </ng-template>\r\n\r\n <ng-template [ngTemplateOutlet]=\"placeholderTemplate()?.template || defaultPlaceholderTemplate\" />\r\n } @if (shouldDisplayValue()) { @for (item of itemStorage.selectedItems(); track item.index) {\r\n <div\r\n class=\"ard-select-value\"\r\n [class.ard-value-disabled]=\"item.disabled()\"\r\n [attr.hidden]=\"!isValueWithinDisplayLimit($index)\"\r\n >\r\n <ng-template\r\n *ngIf=\"isValueWithinDisplayLimit($index)\"\r\n [ngTemplateOutlet]=\"valueTemplate()?.template || (multiselectable() ? defaultMultiValueTemplate : defaultValueTemplate)\"\r\n [ngTemplateOutletContext]=\"getValueContext(item)\"\r\n />\r\n </div>\r\n }\r\n\r\n <ng-template\r\n #defaultValueTemplate\r\n let-item\r\n >\r\n <div\r\n [ardInnerHTML]=\"item.label()\"\r\n [ardEscapeInnerHTML]=\"isItemsInputUsed\"\r\n ></div>\r\n </ng-template>\r\n <ng-template\r\n #defaultMultiValueTemplate\r\n let-item\r\n let-unselect=\"unselect\"\r\n >\r\n <ard-deletable-chip\r\n (delete)=\"unselect(item)\"\r\n [variant]=\"variant()\"\r\n compact\r\n appearance=\"outlined-strong\"\r\n >\r\n <div\r\n [ardInnerHTML]=\"item.label()\"\r\n [ardEscapeInnerHTML]=\"isItemsInputUsed\"\r\n ></div>\r\n </ard-deletable-chip>\r\n </ng-template>\r\n } @if (itemStorage.isAnyItemSelected() && shouldShowItemDisplayLimit()) {\r\n <div class=\"ard-overflow-indicator\">\r\n <ng-template\r\n [ngTemplateOutlet]=\"itemDisplayLimitTemplate()?.template || defaultItemDisplayLimitTemplate\"\r\n [ngTemplateOutletContext]=\"getItemDisplayLimitContext()\"\r\n />\r\n\r\n <ng-template\r\n #defaultItemDisplayLimitTemplate\r\n let-count=\"overflowCount\"\r\n >\r\n <div>{{ count }} more...</div>\r\n </ng-template>\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"ard-search-input\"\r\n role=\"combobox\"\r\n aria-haspopup=\"listbox\"\r\n [attr.aria-expanded]=\"isOpen()\"\r\n [attr.aria-owns]=\"isOpen() ? htmlId() : null\"\r\n >\r\n <input\r\n #searchInput\r\n #focusableElement\r\n type=\"text\"\r\n [attr.id]=\"searchInputId()\"\r\n [attr.tabindex]=\"tabIndex()\"\r\n [readonly]=\"isInputElementReadonly()\"\r\n [disabled]=\"disabled()\"\r\n [value]=\"searchTerm()\"\r\n aria-autocomplete=\"list\"\r\n [attr.aria-controls]=\"isOpen() ? htmlId() : null\"\r\n (input)=\"filter(searchInput.value)\"\r\n (change)=\"$event.stopPropagation()\"\r\n (focus)=\"onFocus($event)\"\r\n (focus)=\"onSearchInputFocus()\"\r\n (blur)=\"onBlur($event)\"\r\n (blur)=\"onSearchInputBlur()\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div class=\"ard-select-controls\">\r\n @if (isLoading()) {\r\n <ng-template #defaultLoadingSpinnerTemplate>\r\n <div class=\"ard-simple-spinner\"></div>\r\n </ng-template>\r\n\r\n <ng-template [ngTemplateOutlet]=\"loadingSpinnerTemplate()?.template || defaultLoadingSpinnerTemplate\" />\r\n } @if (shouldShowClearButton()) {\r\n <ard-clear-button\r\n [title]=\"clearButtonTitle()\"\r\n (click)=\"handleClearButtonClick($event)\"\r\n />\r\n }\r\n\r\n <button\r\n type=\"button\"\r\n class=\"ard-dropdown-arrow-wrapper\"\r\n (click)=\"handleDropdownArrowClick($event)\"\r\n [attr.tabindex]=\"tabIndex()\"\r\n >\r\n <span class=\"ard-dropdown-arrow\"></span>\r\n <div class=\"ard-hitbox\"></div>\r\n </button>\r\n </div>\r\n </div>\r\n</ard-form-field-frame>\r\n\r\n<ng-template #dropdownTemplate>\r\n <ard-dropdown-panel\r\n class=\"ard-dropdown-panel ard-select-dropdown-panel\"\r\n role=\"listbox\"\r\n aria-label=\"Options list\"\r\n [headerTemplate]=\"dropdownHeaderTemplate()?.template ?? null\"\r\n [footerTemplate]=\"dropdownFooterTemplate()?.template ?? null\"\r\n [appearance]=\"dropdownAppearanceOrDefault()\"\r\n [variant]=\"dropdownVariantOrDefault()\"\r\n [isOpen]=\"true\"\r\n [filterValue]=\"searchTerm()\"\r\n [panelId]=\"htmlId()\"\r\n [compact]=\"compact()\"\r\n (ardClickOutside)=\"handleOutsideClick($event)\"\r\n (mousemove)=\"onMouseMove()\"\r\n (scroll)=\"scrollEvent.emit($event)\"\r\n (scrollToEnd)=\"scrollToEndEvent.emit($event)\"\r\n >\r\n @if (!shouldShowNoItemsFound()) { @for (group of itemStorage.groups(); track $index) {\r\n <div\r\n class=\"ard-optgroup\"\r\n role=\"group\"\r\n [class.ard-group-disabled]=\"group.disabled()\"\r\n [class.ard-group-selected]=\"group.selected()\"\r\n [class.ard-group-highlighted]=\"group.highlighted()\"\r\n (mouseover)=\"onGroupMouseover(group)\"\r\n (click)=\"onGroupClick(group)\"\r\n >\r\n @if (group.label() !== '' && group.label() !== undefined) {\r\n <ng-template\r\n #defaultOptgroupTemplate\r\n let-group\r\n >\r\n <span\r\n class=\"ard-optgroup-label\"\r\n [ardInnerHTML]=\"group.label()\"\r\n [ardEscapeInnerHTML]=\"isItemsInputUsed\"\r\n ></span>\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"optgroupTemplate()?.template || defaultOptgroupTemplate\"\r\n [ngTemplateOutletContext]=\"getGroupContext(group)\"\r\n />\r\n }\r\n\r\n <div class=\"ard-optgroup-children\">\r\n @for (option of group.children(); track option.index) {\r\n <div\r\n class=\"ard-option\"\r\n role=\"option\"\r\n [class.ard-option-disabled]=\"option.disabled()\"\r\n [class.ard-option-selected]=\"option.selected()\"\r\n [class.ard-option-highlighted]=\"option.highlighted()\"\r\n [class.ard-option-highlighted-recent]=\"option.highlighted_recently()\"\r\n [attr.aria-selected]=\"option.selected()\"\r\n [attr.id]=\"htmlId() + '-' + option.index\"\r\n (click)=\"onItemClick(option, $event)\"\r\n (mouseover)=\"onItemMouseOver($event)\"\r\n (mouseenter)=\"onItemMouseEnter(option, $event)\"\r\n (mouseleave)=\"onItemMouseLeave(option, $event)\"\r\n >\r\n <div class=\"ard-option-label\">\r\n <ng-template\r\n #defaultOptionTemplate\r\n let-option\r\n >\r\n <span\r\n [ardInnerHTML]=\"option.label()\"\r\n [ardEscapeInnerHTML]=\"isItemsInputUsed\"\r\n ></span>\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"optionTemplate()?.template || defaultOptionTemplate\"\r\n [ngTemplateOutletContext]=\"getOptionContext(option)\"\r\n />\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n } } @if (shouldShowNoItemsFound()) {\r\n <ng-template #defaultNoItemsFoundTemplate>\r\n <div class=\"ard-option ard-option-disabled\">{{ noItemsFoundText() }}</div>\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"noItemsFoundTemplate()?.template || defaultNoItemsFoundTemplate\"\r\n [ngTemplateOutletContext]=\"getSearchContext()\"\r\n />\r\n } @if (shouldShowAddCustom()) {\r\n <ng-template\r\n #defaultAddCustomTemplate\r\n let-searchTerm\r\n >\r\n <div\r\n class=\"ard-option ard-option-highlighted ard-add-custom\"\r\n (click)=\"addCustomOption(searchTerm)\"\r\n >\r\n <span class=\"ard-add-custom-label\">Add option</span>\r\n <span class=\"ard-add-custom-value\">\"{{ searchTerm }}\"</span>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"addCustomTemplate()?.template || defaultAddCustomTemplate\"\r\n [ngTemplateOutletContext]=\"getCustomOptionContext()\"\r\n />\r\n } @if (isLoading()) {\r\n <ng-template #defaultLoadingPlaceholderTemplate>\r\n <div class=\"ard-option ard-option-disabled\">{{ loadingPlaceholderText() }}</div>\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"loadingPlaceholderTemplate()?.template || defaultLoadingPlaceholderTemplate\"\r\n [ngTemplateOutletContext]=\"getSearchContext()\"\r\n />\r\n }\r\n </ard-dropdown-panel>\r\n</ng-template>\r\n", styles: [".ard-select .ard-select-container{display:flex;cursor:pointer}.ard-select .ard-placeholder,.ard-select .ard-value,.ard-select .ard-dropdown-arrow-wrapper,.ard-select .ard-clear-btn-wrapper{-webkit-user-select:none;user-select:none}.ard-select .ard-clear-btn,.ard-select .ard-dropdown-arrow{border:none;background:transparent;padding:0;box-sizing:content-box}.ard-select .ard-option-disabled{pointer-events:none}.ard-select .ard-select-value{display:block}.ard-select .ard-select-value[hidden=true]{display:none}.ard-select .ard-searchable .ard-select-value-container{cursor:text}.ard-select .ard-dropdown-arrow-wrapper{position:relative}.ard-select .ard-dropdown-arrow-wrapper .ard-hitbox{position:absolute;left:-4px;right:-4px;aspect-ratio:1}.ard-select-dropdown-panel .ard-optgroup,.ard-select-dropdown-panel .ard-option{-webkit-user-select:none;user-select:none}\n"] }]
4001
4163
  }], ctorParameters: () => [{ type: undefined, decorators: [{
4002
4164
  type: Inject,
4003
4165
  args: [ARD_SELECT_DEFAULTS]
@@ -4330,7 +4492,6 @@ class _FileInputComponentBase extends _NgModelComponentBase {
4330
4492
  constructor() {
4331
4493
  super(...arguments);
4332
4494
  this.fileInputEl = viewChild('fileInput');
4333
- this.htmlId = input(TakeChance.id());
4334
4495
  this.name = input('');
4335
4496
  this._wasViewInit = false;
4336
4497
  //! appearance
@@ -4352,6 +4513,7 @@ class _FileInputComponentBase extends _NgModelComponentBase {
4352
4513
  this._beforeDragoverState = 'idle';
4353
4514
  }
4354
4515
  ngOnInit() {
4516
+ super.ngOnInit();
4355
4517
  if (!(window.File && window.FileReader && window.Blob)) {
4356
4518
  console.error(new Error(`ARD-${this.componentId}0: Cannot use Ardium UI file features because this browser does not support file handling!`));
4357
4519
  }
@@ -4466,7 +4628,7 @@ class _FileInputComponentBase extends _NgModelComponentBase {
4466
4628
  inputEl.files = dataTransfer.files;
4467
4629
  }
4468
4630
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: _FileInputComponentBase, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
4469
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "18.2.13", type: _FileInputComponentBase, inputs: { htmlId: { classPropertyName: "htmlId", publicName: "htmlId", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, blockAfterUpload: { classPropertyName: "blockAfterUpload", publicName: "blockAfterUpload", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", changeEvent: "change", dragFilesEvent: "dragFiles" }, viewQueries: [{ propertyName: "fileInputEl", first: true, predicate: ["fileInput"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0 }); }
4631
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "18.2.13", type: _FileInputComponentBase, inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, blockAfterUpload: { classPropertyName: "blockAfterUpload", publicName: "blockAfterUpload", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", changeEvent: "change", dragFilesEvent: "dragFiles" }, viewQueries: [{ propertyName: "fileInputEl", first: true, predicate: ["fileInput"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0 }); }
4470
4632
  }
4471
4633
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: _FileInputComponentBase, decorators: [{
4472
4634
  type: Directive
@@ -4966,7 +5128,7 @@ class ArdiumFileInputComponent extends _FileInputComponentBase {
4966
5128
  useExisting: forwardRef(() => ArdiumFileInputComponent),
4967
5129
  multi: true,
4968
5130
  },
4969
- ], queries: [{ propertyName: "placeholderTemplate", first: true, predicate: ArdFileInputPlaceholderTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "prefixTemplate", first: true, predicate: ArdFileInputPrefixTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "suffixTemplate", first: true, predicate: ArdFileInputSuffixTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "idleTemplate", first: true, predicate: ArdiumFileInputIdleContentTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "dragoverTemplate", first: true, predicate: ArdiumFileInputDragoverContentTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "uploadedTemplate", first: true, predicate: ArdiumFileInputUploadedContentTemplateDirective, descendants: true, read: TemplateRef }], usesInheritance: true, ngImport: i0, template: "<ard-form-field-frame\n class=\"ard-file-input-form-field-frame\"\n [appearance]=\"appearance()\"\n [variant]=\"variant()\"\n [compact]=\"compact()\"\n [isFocused]=\"isFocused\"\n [prefixTemplate]=\"prefixTemplate\"\n [suffixTemplate]=\"suffixTemplate\"\n (dragover)=\"onDragover($event)\"\n (dragleave)=\"onDragleave()\"\n (drop)=\"onDrop($event)\"\n (ardClickOutside)=\"onDragleave()\"\n>\n <div\n class=\"ard-file-input\"\n [ngClass]=\"ngClasses()\"\n >\n <div class=\"ard-input-container\">\n @if (shouldDisplayPlaceholder) {\n <ng-template #defaultPlaceholderTemplate>\n <div class=\"ard-placeholder\">{{ placeholder() }}</div>\n </ng-template>\n\n <ng-template [ngTemplateOutlet]=\"placeholderTemplate || defaultPlaceholderTemplate\" />\n }\n\n <div class=\"ard-file-input__value\">\n @if (currentViewState() === 'idle') {\n <ng-template\n [ngTemplateOutlet]=\"idleTemplate ?? defaultIdleTemplate\"\n [ngTemplateOutletContext]=\"getIdleContext()\"\n />\n }\n @if (currentViewState() === 'dragover') {\n <ng-template\n [ngTemplateOutlet]=\"dragoverTemplate ?? defaultDragoverTemplate\"\n [ngTemplateOutletContext]=\"getDragoverContext()\"\n />\n }\n @if (currentViewState() === 'uploaded') {\n <ng-template\n [ngTemplateOutlet]=\"uploadedTemplate ?? defaultUploadedTemplate\"\n [ngTemplateOutletContext]=\"getUploadedContext()\"\n />\n }\n </div>\n </div>\n\n @if (shouldShowClearButton) {\n <ard-clear-button\n #focusableElement\n [title]=\"clearButtonTitle()\"\n (mouseup)=\"onClearButtonClick($event)\"\n />\n }\n @if (!shouldBeBlocked) {\n <button\n #focusableElement\n type=\"button\"\n class=\"ard-browse-button\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (click)=\"openBrowseDialog()\"\n >\n <div class=\"ard-focus-overlay\"></div>\n <ard-icon>folder</ard-icon>\n </button>\n }\n </div>\n</ard-form-field-frame>\n\n<input\n #fileInput\n class=\"ard-file-input__input\"\n type=\"file\"\n [name]=\"name()\"\n [multiple]=\"multiple()\"\n [attr.id]=\"htmlId()\"\n (change)=\"onInputChange()\"\n/>\n\n<ng-template\n #defaultIdleTemplate\n let-browse=\"browse\"\n>\n <span class=\"ard-file-input__idle\">\n @if (multiple()) {\n <span>Upload a file</span>\n } @else {\n <span>Upload files</span>\n }\n </span>\n</ng-template>\n\n<ng-template\n #defaultDragoverTemplate\n let-amount=\"amount\"\n>\n <span class=\"ard-file-input__dragover-text\">Drop </span>\n @if (multiple()) {\n <span class=\"ard-file-input__dragover-amount\">\n {{ amount }}\n <ng-container [ngPlural]=\"amount\">\n <ng-template ngPluralCase=\"=1\">file</ng-template>\n <ng-template ngPluralCase=\"other\">files</ng-template>\n </ng-container>\n </span>\n } @else {\n <span class=\"ard-file-input__dragover-amount\"> a file </span>\n }\n <span class=\"ard-file-input__dragover-text\"> here to upload </span>\n</ng-template>\n\n<ng-template\n #defaultUploadedTemplate\n let-amount=\"amount\"\n>\n <div class=\"ard-file-input__uploaded\">\n <span class=\"ard-file-input__uploaded-amount\">\n {{ amount }}\n <ng-container [ngPlural]=\"amount\">\n <ng-template ngPluralCase=\"=1\">file</ng-template>\n <ng-template ngPluralCase=\"other\">files</ng-template>\n </ng-container>\n </span>\n <span class=\"ard-file-input__uploaded-text\"> uploaded.</span>\n </div>\n</ng-template>\n", styles: [".ard-file-input__input{position:absolute;appearance:none;opacity:0;pointer-events:none}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgPlural, selector: "[ngPlural]", inputs: ["ngPlural"] }, { kind: "directive", type: i1.NgPluralCase, selector: "[ngPluralCase]" }, { kind: "component", type: ArdiumFormFieldFrameComponent, selector: "ard-form-field-frame", inputs: ["isFocused", "appearance", "variant", "compact", "prefixTemplate", "suffixTemplate"] }, { kind: "component", type: _ClearButtonComponent, selector: "ard-clear-button" }, { kind: "component", type: ArdiumIconComponent, selector: "ard-icon", inputs: ["ariaLabel", "icon", "filled", "weight", "grade", "opticalSize"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
5131
+ ], queries: [{ propertyName: "placeholderTemplate", first: true, predicate: ArdFileInputPlaceholderTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "prefixTemplate", first: true, predicate: ArdFileInputPrefixTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "suffixTemplate", first: true, predicate: ArdFileInputSuffixTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "idleTemplate", first: true, predicate: ArdiumFileInputIdleContentTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "dragoverTemplate", first: true, predicate: ArdiumFileInputDragoverContentTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "uploadedTemplate", first: true, predicate: ArdiumFileInputUploadedContentTemplateDirective, descendants: true, read: TemplateRef }], usesInheritance: true, ngImport: i0, template: "<ard-form-field-frame\n class=\"ard-file-input-form-field-frame\"\n [appearance]=\"appearance()\"\n [variant]=\"variant()\"\n [compact]=\"compact()\"\n [isFocused]=\"isFocused()\"\n [prefixTemplate]=\"prefixTemplate\"\n [suffixTemplate]=\"suffixTemplate\"\n (dragover)=\"onDragover($event)\"\n (dragleave)=\"onDragleave()\"\n (drop)=\"onDrop($event)\"\n (ardClickOutside)=\"onDragleave()\"\n>\n <div\n class=\"ard-file-input\"\n [ngClass]=\"ngClasses()\"\n >\n <div class=\"ard-input-container\">\n @if (shouldDisplayPlaceholder) {\n <ng-template #defaultPlaceholderTemplate>\n <div class=\"ard-placeholder\">{{ placeholder() }}</div>\n </ng-template>\n\n <ng-template [ngTemplateOutlet]=\"placeholderTemplate || defaultPlaceholderTemplate\" />\n }\n\n <div class=\"ard-file-input__value\">\n @if (currentViewState() === 'idle') {\n <ng-template\n [ngTemplateOutlet]=\"idleTemplate ?? defaultIdleTemplate\"\n [ngTemplateOutletContext]=\"getIdleContext()\"\n />\n }\n @if (currentViewState() === 'dragover') {\n <ng-template\n [ngTemplateOutlet]=\"dragoverTemplate ?? defaultDragoverTemplate\"\n [ngTemplateOutletContext]=\"getDragoverContext()\"\n />\n }\n @if (currentViewState() === 'uploaded') {\n <ng-template\n [ngTemplateOutlet]=\"uploadedTemplate ?? defaultUploadedTemplate\"\n [ngTemplateOutletContext]=\"getUploadedContext()\"\n />\n }\n </div>\n </div>\n\n @if (shouldShowClearButton) {\n <ard-clear-button\n #focusableElement\n [title]=\"clearButtonTitle()\"\n (mouseup)=\"onClearButtonClick($event)\"\n />\n }\n @if (!shouldBeBlocked) {\n <button\n #focusableElement\n type=\"button\"\n class=\"ard-browse-button\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (click)=\"openBrowseDialog()\"\n >\n <div class=\"ard-focus-overlay\"></div>\n <ard-icon>folder</ard-icon>\n </button>\n }\n </div>\n</ard-form-field-frame>\n\n<input\n #fileInput\n class=\"ard-file-input__input\"\n type=\"file\"\n [name]=\"name()\"\n [multiple]=\"multiple()\"\n [attr.id]=\"htmlId()\"\n (change)=\"onInputChange()\"\n/>\n\n<ng-template\n #defaultIdleTemplate\n let-browse=\"browse\"\n>\n <span class=\"ard-file-input__idle\">\n @if (multiple()) {\n <span>Upload a file</span>\n } @else {\n <span>Upload files</span>\n }\n </span>\n</ng-template>\n\n<ng-template\n #defaultDragoverTemplate\n let-amount=\"amount\"\n>\n <span class=\"ard-file-input__dragover-text\">Drop </span>\n @if (multiple()) {\n <span class=\"ard-file-input__dragover-amount\">\n {{ amount }}\n <ng-container [ngPlural]=\"amount\">\n <ng-template ngPluralCase=\"=1\">file</ng-template>\n <ng-template ngPluralCase=\"other\">files</ng-template>\n </ng-container>\n </span>\n } @else {\n <span class=\"ard-file-input__dragover-amount\"> a file </span>\n }\n <span class=\"ard-file-input__dragover-text\"> here to upload </span>\n</ng-template>\n\n<ng-template\n #defaultUploadedTemplate\n let-amount=\"amount\"\n>\n <div class=\"ard-file-input__uploaded\">\n <span class=\"ard-file-input__uploaded-amount\">\n {{ amount }}\n <ng-container [ngPlural]=\"amount\">\n <ng-template ngPluralCase=\"=1\">file</ng-template>\n <ng-template ngPluralCase=\"other\">files</ng-template>\n </ng-container>\n </span>\n <span class=\"ard-file-input__uploaded-text\"> uploaded.</span>\n </div>\n</ng-template>\n", styles: [".ard-file-input__input{position:absolute;appearance:none;opacity:0;pointer-events:none}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgPlural, selector: "[ngPlural]", inputs: ["ngPlural"] }, { kind: "directive", type: i1.NgPluralCase, selector: "[ngPluralCase]" }, { kind: "component", type: ArdiumFormFieldFrameComponent, selector: "ard-form-field-frame", inputs: ["hasError", "isSuccess", "isFocused", "appearance", "variant", "compact", "prefixTemplate", "suffixTemplate"] }, { kind: "component", type: _ClearButtonComponent, selector: "ard-clear-button" }, { kind: "component", type: ArdiumIconComponent, selector: "ard-icon", inputs: ["ariaLabel", "icon", "filled", "weight", "grade", "opticalSize"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
4970
5132
  }
4971
5133
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumFileInputComponent, decorators: [{
4972
5134
  type: Component,
@@ -4976,7 +5138,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
4976
5138
  useExisting: forwardRef(() => ArdiumFileInputComponent),
4977
5139
  multi: true,
4978
5140
  },
4979
- ], template: "<ard-form-field-frame\n class=\"ard-file-input-form-field-frame\"\n [appearance]=\"appearance()\"\n [variant]=\"variant()\"\n [compact]=\"compact()\"\n [isFocused]=\"isFocused\"\n [prefixTemplate]=\"prefixTemplate\"\n [suffixTemplate]=\"suffixTemplate\"\n (dragover)=\"onDragover($event)\"\n (dragleave)=\"onDragleave()\"\n (drop)=\"onDrop($event)\"\n (ardClickOutside)=\"onDragleave()\"\n>\n <div\n class=\"ard-file-input\"\n [ngClass]=\"ngClasses()\"\n >\n <div class=\"ard-input-container\">\n @if (shouldDisplayPlaceholder) {\n <ng-template #defaultPlaceholderTemplate>\n <div class=\"ard-placeholder\">{{ placeholder() }}</div>\n </ng-template>\n\n <ng-template [ngTemplateOutlet]=\"placeholderTemplate || defaultPlaceholderTemplate\" />\n }\n\n <div class=\"ard-file-input__value\">\n @if (currentViewState() === 'idle') {\n <ng-template\n [ngTemplateOutlet]=\"idleTemplate ?? defaultIdleTemplate\"\n [ngTemplateOutletContext]=\"getIdleContext()\"\n />\n }\n @if (currentViewState() === 'dragover') {\n <ng-template\n [ngTemplateOutlet]=\"dragoverTemplate ?? defaultDragoverTemplate\"\n [ngTemplateOutletContext]=\"getDragoverContext()\"\n />\n }\n @if (currentViewState() === 'uploaded') {\n <ng-template\n [ngTemplateOutlet]=\"uploadedTemplate ?? defaultUploadedTemplate\"\n [ngTemplateOutletContext]=\"getUploadedContext()\"\n />\n }\n </div>\n </div>\n\n @if (shouldShowClearButton) {\n <ard-clear-button\n #focusableElement\n [title]=\"clearButtonTitle()\"\n (mouseup)=\"onClearButtonClick($event)\"\n />\n }\n @if (!shouldBeBlocked) {\n <button\n #focusableElement\n type=\"button\"\n class=\"ard-browse-button\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (click)=\"openBrowseDialog()\"\n >\n <div class=\"ard-focus-overlay\"></div>\n <ard-icon>folder</ard-icon>\n </button>\n }\n </div>\n</ard-form-field-frame>\n\n<input\n #fileInput\n class=\"ard-file-input__input\"\n type=\"file\"\n [name]=\"name()\"\n [multiple]=\"multiple()\"\n [attr.id]=\"htmlId()\"\n (change)=\"onInputChange()\"\n/>\n\n<ng-template\n #defaultIdleTemplate\n let-browse=\"browse\"\n>\n <span class=\"ard-file-input__idle\">\n @if (multiple()) {\n <span>Upload a file</span>\n } @else {\n <span>Upload files</span>\n }\n </span>\n</ng-template>\n\n<ng-template\n #defaultDragoverTemplate\n let-amount=\"amount\"\n>\n <span class=\"ard-file-input__dragover-text\">Drop </span>\n @if (multiple()) {\n <span class=\"ard-file-input__dragover-amount\">\n {{ amount }}\n <ng-container [ngPlural]=\"amount\">\n <ng-template ngPluralCase=\"=1\">file</ng-template>\n <ng-template ngPluralCase=\"other\">files</ng-template>\n </ng-container>\n </span>\n } @else {\n <span class=\"ard-file-input__dragover-amount\"> a file </span>\n }\n <span class=\"ard-file-input__dragover-text\"> here to upload </span>\n</ng-template>\n\n<ng-template\n #defaultUploadedTemplate\n let-amount=\"amount\"\n>\n <div class=\"ard-file-input__uploaded\">\n <span class=\"ard-file-input__uploaded-amount\">\n {{ amount }}\n <ng-container [ngPlural]=\"amount\">\n <ng-template ngPluralCase=\"=1\">file</ng-template>\n <ng-template ngPluralCase=\"other\">files</ng-template>\n </ng-container>\n </span>\n <span class=\"ard-file-input__uploaded-text\"> uploaded.</span>\n </div>\n</ng-template>\n", styles: [".ard-file-input__input{position:absolute;appearance:none;opacity:0;pointer-events:none}\n"] }]
5141
+ ], template: "<ard-form-field-frame\n class=\"ard-file-input-form-field-frame\"\n [appearance]=\"appearance()\"\n [variant]=\"variant()\"\n [compact]=\"compact()\"\n [isFocused]=\"isFocused()\"\n [prefixTemplate]=\"prefixTemplate\"\n [suffixTemplate]=\"suffixTemplate\"\n (dragover)=\"onDragover($event)\"\n (dragleave)=\"onDragleave()\"\n (drop)=\"onDrop($event)\"\n (ardClickOutside)=\"onDragleave()\"\n>\n <div\n class=\"ard-file-input\"\n [ngClass]=\"ngClasses()\"\n >\n <div class=\"ard-input-container\">\n @if (shouldDisplayPlaceholder) {\n <ng-template #defaultPlaceholderTemplate>\n <div class=\"ard-placeholder\">{{ placeholder() }}</div>\n </ng-template>\n\n <ng-template [ngTemplateOutlet]=\"placeholderTemplate || defaultPlaceholderTemplate\" />\n }\n\n <div class=\"ard-file-input__value\">\n @if (currentViewState() === 'idle') {\n <ng-template\n [ngTemplateOutlet]=\"idleTemplate ?? defaultIdleTemplate\"\n [ngTemplateOutletContext]=\"getIdleContext()\"\n />\n }\n @if (currentViewState() === 'dragover') {\n <ng-template\n [ngTemplateOutlet]=\"dragoverTemplate ?? defaultDragoverTemplate\"\n [ngTemplateOutletContext]=\"getDragoverContext()\"\n />\n }\n @if (currentViewState() === 'uploaded') {\n <ng-template\n [ngTemplateOutlet]=\"uploadedTemplate ?? defaultUploadedTemplate\"\n [ngTemplateOutletContext]=\"getUploadedContext()\"\n />\n }\n </div>\n </div>\n\n @if (shouldShowClearButton) {\n <ard-clear-button\n #focusableElement\n [title]=\"clearButtonTitle()\"\n (mouseup)=\"onClearButtonClick($event)\"\n />\n }\n @if (!shouldBeBlocked) {\n <button\n #focusableElement\n type=\"button\"\n class=\"ard-browse-button\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (click)=\"openBrowseDialog()\"\n >\n <div class=\"ard-focus-overlay\"></div>\n <ard-icon>folder</ard-icon>\n </button>\n }\n </div>\n</ard-form-field-frame>\n\n<input\n #fileInput\n class=\"ard-file-input__input\"\n type=\"file\"\n [name]=\"name()\"\n [multiple]=\"multiple()\"\n [attr.id]=\"htmlId()\"\n (change)=\"onInputChange()\"\n/>\n\n<ng-template\n #defaultIdleTemplate\n let-browse=\"browse\"\n>\n <span class=\"ard-file-input__idle\">\n @if (multiple()) {\n <span>Upload a file</span>\n } @else {\n <span>Upload files</span>\n }\n </span>\n</ng-template>\n\n<ng-template\n #defaultDragoverTemplate\n let-amount=\"amount\"\n>\n <span class=\"ard-file-input__dragover-text\">Drop </span>\n @if (multiple()) {\n <span class=\"ard-file-input__dragover-amount\">\n {{ amount }}\n <ng-container [ngPlural]=\"amount\">\n <ng-template ngPluralCase=\"=1\">file</ng-template>\n <ng-template ngPluralCase=\"other\">files</ng-template>\n </ng-container>\n </span>\n } @else {\n <span class=\"ard-file-input__dragover-amount\"> a file </span>\n }\n <span class=\"ard-file-input__dragover-text\"> here to upload </span>\n</ng-template>\n\n<ng-template\n #defaultUploadedTemplate\n let-amount=\"amount\"\n>\n <div class=\"ard-file-input__uploaded\">\n <span class=\"ard-file-input__uploaded-amount\">\n {{ amount }}\n <ng-container [ngPlural]=\"amount\">\n <ng-template ngPluralCase=\"=1\">file</ng-template>\n <ng-template ngPluralCase=\"other\">files</ng-template>\n </ng-container>\n </span>\n <span class=\"ard-file-input__uploaded-text\"> uploaded.</span>\n </div>\n</ng-template>\n", styles: [".ard-file-input__input{position:absolute;appearance:none;opacity:0;pointer-events:none}\n"] }]
4980
5142
  }], ctorParameters: () => [{ type: undefined, decorators: [{
4981
5143
  type: Inject,
4982
5144
  args: [ARD_FILE_INPUT_DEFAULTS]
@@ -5029,7 +5191,7 @@ const CaseTransformerType = {
5029
5191
  };
5030
5192
 
5031
5193
  const _hexInputDefaults = {
5032
- ..._ngModelComponentDefaults,
5194
+ ..._formFieldComponentDefaults,
5033
5195
  appearance: FormElementAppearance.Outlined,
5034
5196
  variant: FormElementVariant.Rounded,
5035
5197
  compact: false,
@@ -5177,7 +5339,7 @@ class HexInputModel {
5177
5339
  }
5178
5340
  }
5179
5341
 
5180
- class ArdiumHexInputComponent extends _NgModelComponentBase {
5342
+ class ArdiumHexInputComponent extends _FormFieldComponentBase {
5181
5343
  constructor(defaults) {
5182
5344
  super(defaults);
5183
5345
  //! input view
@@ -5319,7 +5481,11 @@ class ArdiumHexInputComponent extends _NgModelComponentBase {
5319
5481
  useExisting: forwardRef(() => ArdiumHexInputComponent),
5320
5482
  multi: true,
5321
5483
  },
5322
- ], queries: [{ propertyName: "prefixTemplate", first: true, predicate: ArdHexInputPrefixTemplateDirective, descendants: true, isSignal: true }, { propertyName: "suffixTemplate", first: true, predicate: ArdHexInputSuffixTemplateDirective, descendants: true, isSignal: true }, { propertyName: "placeholderTemplate", first: true, predicate: ArdHexInputPlaceholderTemplateDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "textInputEl", first: true, predicate: ["textInput"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ard-form-field-frame\n [appearance]=\"appearance()\"\n [variant]=\"variant()\"\n [compact]=\"compact()\"\n [isFocused]=\"isFocused\"\n [prefixTemplate]=\"prefixTemplate()?.template\"\n [suffixTemplate]=\"suffixTemplate()?.template\"\n>\n <div\n class=\"ard-hex-input\"\n [class.ard-has-value]=\"value\"\n (mouseup)=\"onMouseup()\"\n >\n <div\n class=\"ard-hash-container\"\n *ngIf=\"showHash\"\n >\n #\n </div>\n <div class=\"ard-input-container\">\n @if (shouldDisplayPlaceholder()) {\n <ng-template #defaultPlaceholderTemplate>\n <div class=\"ard-placeholder\">{{ placeholder() }}</div>\n </ng-template>\n\n <ng-template [ngTemplateOutlet]=\"placeholderTemplate()?.template || defaultPlaceholderTemplate\"></ng-template>\n }\n\n <input\n #textInput\n #focusableElement\n type=\"text\"\n [attr.id]=\"inputId()\"\n [attr.tabindex]=\"tabIndex()\"\n [readonly]=\"readonly()\"\n [disabled]=\"disabled()\"\n (input)=\"onInput(textInput.value, $event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (change)=\"onChange($event)\"\n (mouseup)=\"$event.stopPropagation()\"\n (copy)=\"onCopy($event)\"\n />\n </div>\n\n @if (shouldShowClearButton()) {\n <ard-clear-button\n [title]=\"clearButtonTitle()\"\n (click)=\"onClearButtonClick($event)\"\n />\n }\n </div>\n</ard-form-field-frame>\n", styles: [".ard-input-container{position:relative}.ard-placeholder{position:absolute;left:0;right:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;pointer-events:none}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ArdiumFormFieldFrameComponent, selector: "ard-form-field-frame", inputs: ["isFocused", "appearance", "variant", "compact", "prefixTemplate", "suffixTemplate"] }, { kind: "component", type: _ClearButtonComponent, selector: "ard-clear-button" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
5484
+ {
5485
+ provide: _FormFieldComponentBase,
5486
+ useExisting: forwardRef(() => ArdiumHexInputComponent),
5487
+ },
5488
+ ], queries: [{ propertyName: "prefixTemplate", first: true, predicate: ArdHexInputPrefixTemplateDirective, descendants: true, isSignal: true }, { propertyName: "suffixTemplate", first: true, predicate: ArdHexInputSuffixTemplateDirective, descendants: true, isSignal: true }, { propertyName: "placeholderTemplate", first: true, predicate: ArdHexInputPlaceholderTemplateDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "textInputEl", first: true, predicate: ["textInput"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ard-form-field-frame\r\n [appearance]=\"appearance()\"\r\n [variant]=\"variant()\"\r\n [compact]=\"compact()\"\r\n [hasError]=\"hasError()\"\r\n [isSuccess]=\"isSuccess()\"\r\n [isFocused]=\"isFocused()\"\r\n [prefixTemplate]=\"prefixTemplate()?.template\"\r\n [suffixTemplate]=\"suffixTemplate()?.template\"\r\n>\r\n <div\r\n class=\"ard-hex-input\"\r\n [class.ard-has-value]=\"value\"\r\n (mouseup)=\"onMouseup()\"\r\n >\r\n <div\r\n class=\"ard-hash-container\"\r\n *ngIf=\"showHash\"\r\n >\r\n #\r\n </div>\r\n <div class=\"ard-input-container\">\r\n @if (shouldDisplayPlaceholder()) {\r\n <ng-template #defaultPlaceholderTemplate>\r\n <div class=\"ard-placeholder\">{{ placeholder() }}</div>\r\n </ng-template>\r\n\r\n <ng-template [ngTemplateOutlet]=\"placeholderTemplate()?.template || defaultPlaceholderTemplate\"></ng-template>\r\n }\r\n\r\n <input\r\n #textInput\r\n #focusableElement\r\n type=\"text\"\r\n [attr.id]=\"inputId()\"\r\n [attr.tabindex]=\"tabIndex()\"\r\n [readonly]=\"readonly()\"\r\n [disabled]=\"disabled()\"\r\n (input)=\"onInput(textInput.value, $event)\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n (change)=\"onChange($event)\"\r\n (mouseup)=\"$event.stopPropagation()\"\r\n (copy)=\"onCopy($event)\"\r\n />\r\n </div>\r\n\r\n @if (shouldShowClearButton()) {\r\n <ard-clear-button\r\n [title]=\"clearButtonTitle()\"\r\n (click)=\"onClearButtonClick($event)\"\r\n />\r\n }\r\n </div>\r\n</ard-form-field-frame>\r\n", styles: [".ard-input-container{position:relative}.ard-placeholder{position:absolute;left:0;right:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;pointer-events:none}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ArdiumFormFieldFrameComponent, selector: "ard-form-field-frame", inputs: ["hasError", "isSuccess", "isFocused", "appearance", "variant", "compact", "prefixTemplate", "suffixTemplate"] }, { kind: "component", type: _ClearButtonComponent, selector: "ard-clear-button" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
5323
5489
  }
5324
5490
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumHexInputComponent, decorators: [{
5325
5491
  type: Component,
@@ -5329,7 +5495,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
5329
5495
  useExisting: forwardRef(() => ArdiumHexInputComponent),
5330
5496
  multi: true,
5331
5497
  },
5332
- ], template: "<ard-form-field-frame\n [appearance]=\"appearance()\"\n [variant]=\"variant()\"\n [compact]=\"compact()\"\n [isFocused]=\"isFocused\"\n [prefixTemplate]=\"prefixTemplate()?.template\"\n [suffixTemplate]=\"suffixTemplate()?.template\"\n>\n <div\n class=\"ard-hex-input\"\n [class.ard-has-value]=\"value\"\n (mouseup)=\"onMouseup()\"\n >\n <div\n class=\"ard-hash-container\"\n *ngIf=\"showHash\"\n >\n #\n </div>\n <div class=\"ard-input-container\">\n @if (shouldDisplayPlaceholder()) {\n <ng-template #defaultPlaceholderTemplate>\n <div class=\"ard-placeholder\">{{ placeholder() }}</div>\n </ng-template>\n\n <ng-template [ngTemplateOutlet]=\"placeholderTemplate()?.template || defaultPlaceholderTemplate\"></ng-template>\n }\n\n <input\n #textInput\n #focusableElement\n type=\"text\"\n [attr.id]=\"inputId()\"\n [attr.tabindex]=\"tabIndex()\"\n [readonly]=\"readonly()\"\n [disabled]=\"disabled()\"\n (input)=\"onInput(textInput.value, $event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (change)=\"onChange($event)\"\n (mouseup)=\"$event.stopPropagation()\"\n (copy)=\"onCopy($event)\"\n />\n </div>\n\n @if (shouldShowClearButton()) {\n <ard-clear-button\n [title]=\"clearButtonTitle()\"\n (click)=\"onClearButtonClick($event)\"\n />\n }\n </div>\n</ard-form-field-frame>\n", styles: [".ard-input-container{position:relative}.ard-placeholder{position:absolute;left:0;right:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;pointer-events:none}\n"] }]
5498
+ {
5499
+ provide: _FormFieldComponentBase,
5500
+ useExisting: forwardRef(() => ArdiumHexInputComponent),
5501
+ },
5502
+ ], template: "<ard-form-field-frame\r\n [appearance]=\"appearance()\"\r\n [variant]=\"variant()\"\r\n [compact]=\"compact()\"\r\n [hasError]=\"hasError()\"\r\n [isSuccess]=\"isSuccess()\"\r\n [isFocused]=\"isFocused()\"\r\n [prefixTemplate]=\"prefixTemplate()?.template\"\r\n [suffixTemplate]=\"suffixTemplate()?.template\"\r\n>\r\n <div\r\n class=\"ard-hex-input\"\r\n [class.ard-has-value]=\"value\"\r\n (mouseup)=\"onMouseup()\"\r\n >\r\n <div\r\n class=\"ard-hash-container\"\r\n *ngIf=\"showHash\"\r\n >\r\n #\r\n </div>\r\n <div class=\"ard-input-container\">\r\n @if (shouldDisplayPlaceholder()) {\r\n <ng-template #defaultPlaceholderTemplate>\r\n <div class=\"ard-placeholder\">{{ placeholder() }}</div>\r\n </ng-template>\r\n\r\n <ng-template [ngTemplateOutlet]=\"placeholderTemplate()?.template || defaultPlaceholderTemplate\"></ng-template>\r\n }\r\n\r\n <input\r\n #textInput\r\n #focusableElement\r\n type=\"text\"\r\n [attr.id]=\"inputId()\"\r\n [attr.tabindex]=\"tabIndex()\"\r\n [readonly]=\"readonly()\"\r\n [disabled]=\"disabled()\"\r\n (input)=\"onInput(textInput.value, $event)\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n (change)=\"onChange($event)\"\r\n (mouseup)=\"$event.stopPropagation()\"\r\n (copy)=\"onCopy($event)\"\r\n />\r\n </div>\r\n\r\n @if (shouldShowClearButton()) {\r\n <ard-clear-button\r\n [title]=\"clearButtonTitle()\"\r\n (click)=\"onClearButtonClick($event)\"\r\n />\r\n }\r\n </div>\r\n</ard-form-field-frame>\r\n", styles: [".ard-input-container{position:relative}.ard-placeholder{position:absolute;left:0;right:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;pointer-events:none}\n"] }]
5333
5503
  }], ctorParameters: () => [{ type: undefined, decorators: [{
5334
5504
  type: Inject,
5335
5505
  args: [ARD_HEX_INPUT_DEFAULTS]
@@ -5368,7 +5538,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
5368
5538
  }] });
5369
5539
 
5370
5540
  const _numberInputDefaults = {
5371
- ..._ngModelComponentDefaults,
5541
+ ..._formFieldComponentDefaults,
5372
5542
  appearance: FormElementAppearance.Outlined,
5373
5543
  variant: FormElementVariant.Rounded,
5374
5544
  compact: false,
@@ -5402,7 +5572,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
5402
5572
  args: [{ selector: 'ard-number-input > ng-template[ard-placeholder-tmp]' }]
5403
5573
  }], ctorParameters: () => [{ type: i0.TemplateRef }] });
5404
5574
 
5405
- class ArdiumNumberInputComponent extends _NgModelComponentBase {
5575
+ class ArdiumNumberInputComponent extends _FormFieldComponentBase {
5406
5576
  constructor(defaults) {
5407
5577
  super(defaults);
5408
5578
  //! input view
@@ -5424,7 +5594,7 @@ class ArdiumNumberInputComponent extends _NgModelComponentBase {
5424
5594
  `ard-appearance-${this.appearance()}`,
5425
5595
  `ard-variant-${this.variant()}`,
5426
5596
  `ard-text-align-${this.alignText()}`,
5427
- `ard-quick-change-${this.noButtons}`,
5597
+ `ard-quick-change-${!this.noButtons()}`,
5428
5598
  this.compact() ? 'ard-compact' : '',
5429
5599
  ].join(' ');
5430
5600
  });
@@ -5455,7 +5625,7 @@ class ArdiumNumberInputComponent extends _NgModelComponentBase {
5455
5625
  this.quickChangeEvent = output({ alias: 'quickChange' });
5456
5626
  //! min/max and number type
5457
5627
  this.min = input(0, { transform: v => coerceNumberProperty(v, 0) });
5458
- this.max = input(Infinity, { transform: v => coerceNumberProperty(v, Infinity) });
5628
+ this.max = input(999999, { transform: v => coerceNumberProperty(v, 999999) });
5459
5629
  this.allowFloat = input(false, { transform: v => coerceBooleanProperty(v) });
5460
5630
  //! incerement/decrement buttons
5461
5631
  this.noButtons = input(false, { transform: v => coerceBooleanProperty(v) });
@@ -5596,7 +5766,11 @@ class ArdiumNumberInputComponent extends _NgModelComponentBase {
5596
5766
  useExisting: forwardRef(() => ArdiumNumberInputComponent),
5597
5767
  multi: true,
5598
5768
  },
5599
- ], queries: [{ propertyName: "placeholderTemplate", first: true, predicate: ArdNumberInputPlaceholderTemplateDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["textInput"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\n class=\"ard-number-input\"\n [ngClass]=\"ngClasses()\"\n [class.ard-has-value]=\"value\"\n (mousedown)=\"$event.preventDefault()\"\n (mouseup)=\"onMouseup()\"\n>\n @if (!noButtons()) {\n <ard-button\n class=\"ard-quick-change-button decrement\"\n [variant]=\"buttonVariant()\"\n [appearance]=\"buttonAppearance()\"\n color=\"none\"\n [disabled]=\"!canDecrement()\"\n [tabIndex]=\"!canDecrement() ? -1 : tabIndex()\"\n (click)=\"onQuickChangeButtonClick(-1, $event)\"\n (ardHold)=\"onQuickChangeButtonClick(-1)\"\n ardHoldSpaceKey\n >\n -\n </ard-button>\n }\n <div class=\"ard-input-container\">\n @if (shouldDisplayPlaceholder()) {\n <ng-template\n #defaultPlaceholderTemplate\n let-plchldr\n >\n <div class=\"ard-placeholder\">{{ placeholder() }}</div>\n </ng-template>\n\n <ng-template [ngTemplateOutlet]=\"placeholderTemplate()?.template || defaultPlaceholderTemplate\"></ng-template>\n }\n\n <input\n #textInput\n #focusableElement\n type=\"text\"\n [attr.id]=\"inputId()\"\n [attr.tabindex]=\"tabIndex()\"\n [readonly]=\"readonly()\"\n [disabled]=\"disabled()\"\n (input)=\"onInput(textInput.value)\"\n (focus)=\"onFocusMaster($event)\"\n (blur)=\"onBlurMaster($event)\"\n (change)=\"onChange($event)\"\n (mousedown)=\"$event.stopPropagation()\"\n (mouseup)=\"$event.stopPropagation()\"\n (copy)=\"onCopy($event)\"\n />\n </div>\n @if (!noButtons()) {\n <ard-button\n class=\"ard-quick-change-button increment\"\n [variant]=\"buttonVariant()\"\n [appearance]=\"buttonAppearance()\"\n color=\"none\"\n [disabled]=\"!canIncrement()\"\n [tabIndex]=\"!canIncrement() ? -1 : tabIndex()\"\n (click)=\"onQuickChangeButtonClick(1, $event)\"\n (ardHold)=\"onQuickChangeButtonClick(1)\"\n ardHoldSpaceKey\n >\n +\n </ard-button>\n }\n</div>\n", styles: [".ard-number-input{display:flex;max-width:100%}.ard-number-input .ard-input-container{position:relative}.ard-number-input .ard-placeholder{position:absolute;left:0;right:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;pointer-events:none}.ard-text-align-left input,.ard-text-align-left .ard-placeholder{text-align:left}.ard-text-align-middle input,.ard-text-align-middle .ard-placeholder{text-align:center}.ard-text-align-right input,.ard-text-align-right .ard-placeholder{text-align:right}.ard-quick-change-button{-webkit-user-select:none;user-select:none;height:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.HoldDirective, selector: "[ardHold]", inputs: ["disabled", "readonly", "ardHoldDelay", "ardHoldRepeat", "ardAllowSpaceKey", "ardAllowEnterKey"], outputs: ["ardHold"] }, { kind: "component", type: ArdiumButtonComponent, selector: "ard-button", inputs: ["icon", "variant", "alignIcon", "vertical"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
5769
+ {
5770
+ provide: _FormFieldComponentBase,
5771
+ useExisting: ArdiumNumberInputComponent,
5772
+ },
5773
+ ], queries: [{ propertyName: "placeholderTemplate", first: true, predicate: ArdNumberInputPlaceholderTemplateDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["textInput"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\r\n class=\"ard-number-input\"\r\n [ngClass]=\"ngClasses()\"\r\n [class.ard-has-error]=\"hasError()\"\r\n [class.ard-is-success]=\"isSuccess()\"\r\n [class.ard-has-value]=\"value\"\r\n (mousedown)=\"$event.preventDefault()\"\r\n (mouseup)=\"onMouseup()\"\r\n>\r\n @if (!noButtons()) {\r\n <ard-button\r\n class=\"ard-quick-change-button decrement\"\r\n [variant]=\"buttonVariant()\"\r\n [appearance]=\"buttonAppearance()\"\r\n color=\"none\"\r\n [disabled]=\"!canDecrement()\"\r\n [tabIndex]=\"!canDecrement() ? -1 : tabIndex()\"\r\n (click)=\"onQuickChangeButtonClick(-1, $event)\"\r\n (ardHold)=\"onQuickChangeButtonClick(-1)\"\r\n ardHoldSpaceKey\r\n >\r\n -\r\n </ard-button>\r\n }\r\n <div class=\"ard-input-container\">\r\n @if (shouldDisplayPlaceholder()) {\r\n <ng-template\r\n #defaultPlaceholderTemplate\r\n let-plchldr\r\n >\r\n <div class=\"ard-placeholder\">{{ placeholder() }}</div>\r\n </ng-template>\r\n\r\n <ng-template [ngTemplateOutlet]=\"placeholderTemplate()?.template || defaultPlaceholderTemplate\"></ng-template>\r\n }\r\n\r\n <input\r\n #textInput\r\n #focusableElement\r\n type=\"text\"\r\n [attr.id]=\"inputId()\"\r\n [attr.tabindex]=\"tabIndex()\"\r\n [readonly]=\"readonly()\"\r\n [disabled]=\"disabled()\"\r\n (input)=\"onInput(textInput.value)\"\r\n (focus)=\"onFocusMaster($event)\"\r\n (blur)=\"onBlurMaster($event)\"\r\n (change)=\"onChange($event)\"\r\n (mousedown)=\"$event.stopPropagation()\"\r\n (mouseup)=\"$event.stopPropagation()\"\r\n (copy)=\"onCopy($event)\"\r\n />\r\n </div>\r\n @if (!noButtons()) {\r\n <ard-button\r\n class=\"ard-quick-change-button increment\"\r\n [variant]=\"buttonVariant()\"\r\n [appearance]=\"buttonAppearance()\"\r\n color=\"none\"\r\n [disabled]=\"!canIncrement()\"\r\n [tabIndex]=\"!canIncrement() ? -1 : tabIndex()\"\r\n (click)=\"onQuickChangeButtonClick(1, $event)\"\r\n (ardHold)=\"onQuickChangeButtonClick(1)\"\r\n ardHoldSpaceKey\r\n >\r\n +\r\n </ard-button>\r\n }\r\n</div>\r\n", styles: [".ard-number-input{display:flex;max-width:100%}.ard-number-input .ard-input-container{position:relative}.ard-number-input .ard-placeholder{position:absolute;left:0;right:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;pointer-events:none}.ard-text-align-left input,.ard-text-align-left .ard-placeholder{text-align:left}.ard-text-align-middle input,.ard-text-align-middle .ard-placeholder{text-align:center}.ard-text-align-right input,.ard-text-align-right .ard-placeholder{text-align:right}.ard-quick-change-button{-webkit-user-select:none;user-select:none;height:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.HoldDirective, selector: "[ardHold]", inputs: ["disabled", "readonly", "ardHoldDelay", "ardHoldRepeat", "ardAllowSpaceKey", "ardAllowEnterKey"], outputs: ["ardHold"] }, { kind: "component", type: ArdiumButtonComponent, selector: "ard-button", inputs: ["icon", "variant", "alignIcon", "vertical"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
5600
5774
  }
5601
5775
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumNumberInputComponent, decorators: [{
5602
5776
  type: Component,
@@ -5606,7 +5780,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
5606
5780
  useExisting: forwardRef(() => ArdiumNumberInputComponent),
5607
5781
  multi: true,
5608
5782
  },
5609
- ], template: "<div\n class=\"ard-number-input\"\n [ngClass]=\"ngClasses()\"\n [class.ard-has-value]=\"value\"\n (mousedown)=\"$event.preventDefault()\"\n (mouseup)=\"onMouseup()\"\n>\n @if (!noButtons()) {\n <ard-button\n class=\"ard-quick-change-button decrement\"\n [variant]=\"buttonVariant()\"\n [appearance]=\"buttonAppearance()\"\n color=\"none\"\n [disabled]=\"!canDecrement()\"\n [tabIndex]=\"!canDecrement() ? -1 : tabIndex()\"\n (click)=\"onQuickChangeButtonClick(-1, $event)\"\n (ardHold)=\"onQuickChangeButtonClick(-1)\"\n ardHoldSpaceKey\n >\n -\n </ard-button>\n }\n <div class=\"ard-input-container\">\n @if (shouldDisplayPlaceholder()) {\n <ng-template\n #defaultPlaceholderTemplate\n let-plchldr\n >\n <div class=\"ard-placeholder\">{{ placeholder() }}</div>\n </ng-template>\n\n <ng-template [ngTemplateOutlet]=\"placeholderTemplate()?.template || defaultPlaceholderTemplate\"></ng-template>\n }\n\n <input\n #textInput\n #focusableElement\n type=\"text\"\n [attr.id]=\"inputId()\"\n [attr.tabindex]=\"tabIndex()\"\n [readonly]=\"readonly()\"\n [disabled]=\"disabled()\"\n (input)=\"onInput(textInput.value)\"\n (focus)=\"onFocusMaster($event)\"\n (blur)=\"onBlurMaster($event)\"\n (change)=\"onChange($event)\"\n (mousedown)=\"$event.stopPropagation()\"\n (mouseup)=\"$event.stopPropagation()\"\n (copy)=\"onCopy($event)\"\n />\n </div>\n @if (!noButtons()) {\n <ard-button\n class=\"ard-quick-change-button increment\"\n [variant]=\"buttonVariant()\"\n [appearance]=\"buttonAppearance()\"\n color=\"none\"\n [disabled]=\"!canIncrement()\"\n [tabIndex]=\"!canIncrement() ? -1 : tabIndex()\"\n (click)=\"onQuickChangeButtonClick(1, $event)\"\n (ardHold)=\"onQuickChangeButtonClick(1)\"\n ardHoldSpaceKey\n >\n +\n </ard-button>\n }\n</div>\n", styles: [".ard-number-input{display:flex;max-width:100%}.ard-number-input .ard-input-container{position:relative}.ard-number-input .ard-placeholder{position:absolute;left:0;right:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;pointer-events:none}.ard-text-align-left input,.ard-text-align-left .ard-placeholder{text-align:left}.ard-text-align-middle input,.ard-text-align-middle .ard-placeholder{text-align:center}.ard-text-align-right input,.ard-text-align-right .ard-placeholder{text-align:right}.ard-quick-change-button{-webkit-user-select:none;user-select:none;height:100%}\n"] }]
5783
+ {
5784
+ provide: _FormFieldComponentBase,
5785
+ useExisting: ArdiumNumberInputComponent,
5786
+ },
5787
+ ], template: "<div\r\n class=\"ard-number-input\"\r\n [ngClass]=\"ngClasses()\"\r\n [class.ard-has-error]=\"hasError()\"\r\n [class.ard-is-success]=\"isSuccess()\"\r\n [class.ard-has-value]=\"value\"\r\n (mousedown)=\"$event.preventDefault()\"\r\n (mouseup)=\"onMouseup()\"\r\n>\r\n @if (!noButtons()) {\r\n <ard-button\r\n class=\"ard-quick-change-button decrement\"\r\n [variant]=\"buttonVariant()\"\r\n [appearance]=\"buttonAppearance()\"\r\n color=\"none\"\r\n [disabled]=\"!canDecrement()\"\r\n [tabIndex]=\"!canDecrement() ? -1 : tabIndex()\"\r\n (click)=\"onQuickChangeButtonClick(-1, $event)\"\r\n (ardHold)=\"onQuickChangeButtonClick(-1)\"\r\n ardHoldSpaceKey\r\n >\r\n -\r\n </ard-button>\r\n }\r\n <div class=\"ard-input-container\">\r\n @if (shouldDisplayPlaceholder()) {\r\n <ng-template\r\n #defaultPlaceholderTemplate\r\n let-plchldr\r\n >\r\n <div class=\"ard-placeholder\">{{ placeholder() }}</div>\r\n </ng-template>\r\n\r\n <ng-template [ngTemplateOutlet]=\"placeholderTemplate()?.template || defaultPlaceholderTemplate\"></ng-template>\r\n }\r\n\r\n <input\r\n #textInput\r\n #focusableElement\r\n type=\"text\"\r\n [attr.id]=\"inputId()\"\r\n [attr.tabindex]=\"tabIndex()\"\r\n [readonly]=\"readonly()\"\r\n [disabled]=\"disabled()\"\r\n (input)=\"onInput(textInput.value)\"\r\n (focus)=\"onFocusMaster($event)\"\r\n (blur)=\"onBlurMaster($event)\"\r\n (change)=\"onChange($event)\"\r\n (mousedown)=\"$event.stopPropagation()\"\r\n (mouseup)=\"$event.stopPropagation()\"\r\n (copy)=\"onCopy($event)\"\r\n />\r\n </div>\r\n @if (!noButtons()) {\r\n <ard-button\r\n class=\"ard-quick-change-button increment\"\r\n [variant]=\"buttonVariant()\"\r\n [appearance]=\"buttonAppearance()\"\r\n color=\"none\"\r\n [disabled]=\"!canIncrement()\"\r\n [tabIndex]=\"!canIncrement() ? -1 : tabIndex()\"\r\n (click)=\"onQuickChangeButtonClick(1, $event)\"\r\n (ardHold)=\"onQuickChangeButtonClick(1)\"\r\n ardHoldSpaceKey\r\n >\r\n +\r\n </ard-button>\r\n }\r\n</div>\r\n", styles: [".ard-number-input{display:flex;max-width:100%}.ard-number-input .ard-input-container{position:relative}.ard-number-input .ard-placeholder{position:absolute;left:0;right:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;pointer-events:none}.ard-text-align-left input,.ard-text-align-left .ard-placeholder{text-align:left}.ard-text-align-middle input,.ard-text-align-middle .ard-placeholder{text-align:center}.ard-text-align-right input,.ard-text-align-right .ard-placeholder{text-align:right}.ard-quick-change-button{-webkit-user-select:none;user-select:none;height:100%}\n"] }]
5610
5788
  }], ctorParameters: () => [{ type: undefined, decorators: [{
5611
5789
  type: Inject,
5612
5790
  args: [ARD_NUMBER_INPUT_DEFAULTS]
@@ -5752,7 +5930,6 @@ const CheckboxState = {
5752
5930
  class ArdiumCheckboxComponent extends _BooleanComponentBase {
5753
5931
  constructor(defaults) {
5754
5932
  super(defaults);
5755
- this.htmlId = input('');
5756
5933
  //! appearance
5757
5934
  this.color = input(this._DEFAULTS.color);
5758
5935
  this.unselectedColor = input(this._DEFAULTS.unselectedColor);
@@ -5776,7 +5953,7 @@ class ArdiumCheckboxComponent extends _BooleanComponentBase {
5776
5953
  this._emitChange();
5777
5954
  }
5778
5955
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumCheckboxComponent, deps: [{ token: ARD_CHECKBOX_DEFAULTS }], target: i0.ɵɵFactoryTarget.Component }); }
5779
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: ArdiumCheckboxComponent, selector: "ard-checkbox", inputs: { htmlId: { classPropertyName: "htmlId", publicName: "htmlId", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, unselectedColor: { classPropertyName: "unselectedColor", publicName: "unselectedColor", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { state: "stateChange" }, providers: [
5956
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: ArdiumCheckboxComponent, selector: "ard-checkbox", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, unselectedColor: { classPropertyName: "unselectedColor", publicName: "unselectedColor", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { state: "stateChange" }, providers: [
5780
5957
  {
5781
5958
  provide: NG_VALUE_ACCESSOR,
5782
5959
  useExisting: forwardRef(() => ArdiumCheckboxComponent),
@@ -5813,7 +5990,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
5813
5990
  }] });
5814
5991
 
5815
5992
  const _radioDefaults = {
5816
- ..._booleanComponentDefaults,
5993
+ ..._focusableComponentDefaults,
5817
5994
  color: SimpleComponentColor.Primary,
5818
5995
  };
5819
5996
  const ARD_RADIO_DEFAULTS = new InjectionToken('ard-radio-defaults', {
@@ -5825,11 +6002,31 @@ function provideRadioDefaults(config) {
5825
6002
  return { provide: ARD_RADIO_DEFAULTS, useValue: { ..._radioDefaults, ...config } };
5826
6003
  }
5827
6004
 
5828
- class ArdiumRadioComponent extends _BooleanComponentBase {
6005
+ class ArdiumRadioComponent extends _FocusableComponentBase {
5829
6006
  constructor(defaults) {
5830
6007
  super(defaults);
5831
6008
  this._changeDetector = inject(ChangeDetectorRef);
5832
6009
  this.htmlId = input(TakeChance.id());
6010
+ //! events
6011
+ /**
6012
+ * The event emitter responsible for firing `select` events. Fired when the `selected` state is set to true.
6013
+ */
6014
+ this.selectEvent = output({ alias: 'select' });
6015
+ /**
6016
+ * The event emitter responsible for firing `unselect` events. Fired when the `selected` state is set to false.
6017
+ */
6018
+ this.unselectEvent = output({ alias: 'unselect' });
6019
+ /**
6020
+ * The event emitter responsible for firing `change` events. Fired when the `selected` state is changed.
6021
+ */
6022
+ this.changeEvent = output({ alias: 'change' });
6023
+ //! [(selected)] two-way binding
6024
+ // can be set using a no-value argument
6025
+ this.selected = signal(false);
6026
+ /**
6027
+ * The event emitter responsible for firing `selectedChange` events. Fired when the `selected` state is changed.
6028
+ */
6029
+ this.selectedChange = output();
5833
6030
  this.value = input();
5834
6031
  //! appearance
5835
6032
  this.color = input(this._DEFAULTS.color);
@@ -5837,6 +6034,47 @@ class ArdiumRadioComponent extends _BooleanComponentBase {
5837
6034
  //! radio-group access points
5838
6035
  this.name = signal(null);
5839
6036
  }
6037
+ /**
6038
+ * Emits all select-state-related events.
6039
+ */
6040
+ _emitChange() {
6041
+ if (this.selected())
6042
+ this.selectEvent.emit(null);
6043
+ else
6044
+ this.unselectEvent.emit(null);
6045
+ this.selectedChange.emit(this.selected());
6046
+ this.changeEvent.emit(this.selected());
6047
+ }
6048
+ /**
6049
+ * The selection state of the component. Coercible into a boolean.
6050
+ */
6051
+ set _selected(v) {
6052
+ this.selected.set(coerceBooleanProperty(v));
6053
+ }
6054
+ get _selectedHostAttribute() {
6055
+ return this.selected();
6056
+ }
6057
+ /**
6058
+ * Toggles the selected state. Emits all appropriate events.
6059
+ */
6060
+ toggleSelected() {
6061
+ this.selected.update(v => !v);
6062
+ this._emitChange();
6063
+ }
6064
+ /**
6065
+ * Sets the state to "selected". Emits all appropriate events only if the state changes.
6066
+ */
6067
+ select() {
6068
+ this.selected.set(true);
6069
+ this._emitChange();
6070
+ }
6071
+ /**
6072
+ * Sets the state to "unselected". Emits all appropriate events only if the state changes.
6073
+ */
6074
+ unselect() {
6075
+ this.selected.set(false);
6076
+ this._emitChange();
6077
+ }
5840
6078
  //! event handlers
5841
6079
  onMousedown() {
5842
6080
  this.focus();
@@ -5857,7 +6095,7 @@ class ArdiumRadioComponent extends _BooleanComponentBase {
5857
6095
  this._changeDetector.markForCheck();
5858
6096
  }
5859
6097
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumRadioComponent, deps: [{ token: ARD_RADIO_DEFAULTS }], target: i0.ɵɵFactoryTarget.Component }); }
5860
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: ArdiumRadioComponent, selector: "ard-radio", inputs: { htmlId: { classPropertyName: "htmlId", publicName: "htmlId", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "<button\n #focusableElement\n class=\"ard-radio\"\n type=\"button\"\n [ngClass]=\"ngClasses()\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (mousedown)=\"onMousedown()\"\n (mouseup)=\"onMouseup()\"\n [tabindex]=\"tabIndex()\"\n>\n <div class=\"ard-radio-circles\">\n <div class=\"ard-radio-outer-circle\"></div>\n <div class=\"ard-radio-inner-circle\"></div>\n <div class=\"ard-focus-overlay\"></div>\n <div class=\"ard-hitbox\"></div>\n </div>\n <label [for]=\"htmlId()\">\n <ng-content></ng-content>\n </label>\n</button>\n\n<input\n class=\"ard-radio-input-element\"\n type=\"radio\"\n [name]=\"name()\"\n [id]=\"htmlId()\"\n [checked]=\"selected()\"\n #radio\n/>\n", styles: [".ard-radio{border:none;background:none}.ard-radio>label{pointer-events:none}ard-radio>.ard-radio-input-element{display:none}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
6098
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: ArdiumRadioComponent, selector: "ard-radio", inputs: { htmlId: { classPropertyName: "htmlId", publicName: "htmlId", isSignal: true, isRequired: false, transformFunction: null }, _selected: { classPropertyName: "_selected", publicName: "selected", isSignal: false, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectEvent: "select", unselectEvent: "unselect", changeEvent: "change", selectedChange: "selectedChange" }, host: { properties: { "attr.selected": "this._selectedHostAttribute", "class.ard-selected": "this._selectedHostAttribute" } }, usesInheritance: true, ngImport: i0, template: "<button\n #focusableElement\n class=\"ard-radio\"\n type=\"button\"\n [ngClass]=\"ngClasses()\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (mousedown)=\"onMousedown()\"\n (mouseup)=\"onMouseup()\"\n [tabindex]=\"tabIndex()\"\n>\n <div class=\"ard-radio-circles\">\n <div class=\"ard-radio-outer-circle\"></div>\n <div class=\"ard-radio-inner-circle\"></div>\n <div class=\"ard-focus-overlay\"></div>\n <div class=\"ard-hitbox\"></div>\n </div>\n <label [for]=\"htmlId()\">\n <ng-content></ng-content>\n </label>\n</button>\n\n<input\n class=\"ard-radio-input-element\"\n type=\"radio\"\n [name]=\"name()\"\n [id]=\"htmlId()\"\n [checked]=\"selected()\"\n #radio\n/>\n", styles: [".ard-radio{border:none;background:none}.ard-radio>label{pointer-events:none}ard-radio>.ard-radio-input-element{display:none}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
5861
6099
  }
5862
6100
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumRadioComponent, decorators: [{
5863
6101
  type: Component,
@@ -5865,7 +6103,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
5865
6103
  }], ctorParameters: () => [{ type: undefined, decorators: [{
5866
6104
  type: Inject,
5867
6105
  args: [ARD_RADIO_DEFAULTS]
5868
- }] }] });
6106
+ }] }], propDecorators: { _selected: [{
6107
+ type: Input,
6108
+ args: ['selected']
6109
+ }], _selectedHostAttribute: [{
6110
+ type: HostBinding,
6111
+ args: ['attr.selected']
6112
+ }, {
6113
+ type: HostBinding,
6114
+ args: ['class.ard-selected']
6115
+ }] } });
5869
6116
 
5870
6117
  class ArdiumRadioGroupComponent extends _NgModelComponentBase {
5871
6118
  get _htmlIdHostAttribute() {
@@ -5874,7 +6121,6 @@ class ArdiumRadioGroupComponent extends _NgModelComponentBase {
5874
6121
  constructor() {
5875
6122
  super(_ngModelComponentDefaults); // no need for injecting a token with default values
5876
6123
  this._radios = contentChildren(ArdiumRadioComponent, { descendants: true });
5877
- this.htmlId = input('');
5878
6124
  this.valueChange = output();
5879
6125
  this.changeEvent = output({ alias: 'change' });
5880
6126
  /**
@@ -6009,6 +6255,7 @@ class ArdiumRadioGroupComponent extends _NgModelComponentBase {
6009
6255
  }
6010
6256
  }
6011
6257
  ngOnDestroy() {
6258
+ super.ngOnDestroy();
6012
6259
  this._destroyChildSubscriptions();
6013
6260
  }
6014
6261
  _destroyChildSubscriptions() {
@@ -6018,7 +6265,7 @@ class ArdiumRadioGroupComponent extends _NgModelComponentBase {
6018
6265
  this._childEventSubs = [];
6019
6266
  }
6020
6267
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumRadioGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6021
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.13", type: ArdiumRadioGroupComponent, selector: "ard-radio-group", inputs: { htmlId: { classPropertyName: "htmlId", publicName: "htmlId", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", changeEvent: "change", selected: "selectedChange" }, host: { attributes: { "role": "radiogroup" }, properties: { "attr.tabindex": "null", "attr.aria-label": "null", "attr.aria-labelledby": "null", "attr.aria-describedby": "null", "attr.id": "this._htmlIdHostAttribute" } }, providers: [
6268
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.13", type: ArdiumRadioGroupComponent, selector: "ard-radio-group", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", changeEvent: "change", selected: "selectedChange" }, host: { attributes: { "role": "radiogroup" }, properties: { "attr.tabindex": "null", "attr.aria-label": "null", "attr.aria-labelledby": "null", "attr.aria-describedby": "null", "attr.id": "this._htmlIdHostAttribute" } }, providers: [
6022
6269
  {
6023
6270
  provide: NG_VALUE_ACCESSOR,
6024
6271
  useExisting: forwardRef(() => ArdiumRadioGroupComponent),
@@ -6205,6 +6452,9 @@ class SimpleItemStorage {
6205
6452
  * @returns true if all items are valid, otherwise false.
6206
6453
  */
6207
6454
  _validateWriteValue(ngModel) {
6455
+ if (!isArray(ngModel)) {
6456
+ throw new Error(`ARD-FT${this._ardParentComp._componentId}0: <ard-${this._ardParentComp._componentName}> expects its value to be an array, got "${ngModel}".`);
6457
+ }
6208
6458
  return ngModel.every(item => {
6209
6459
  if (!isDefined(this._ardParentComp.compareWith()) && isObject(item) && this._ardParentComp.valueFrom()) {
6210
6460
  console.warn(`ARD-FT${this._ardParentComp._componentId}0: Setting object(${JSON.stringify(item)}) as your model with [valueFrom] is not allowed unless [compareWith] is used.`);
@@ -6410,7 +6660,7 @@ class SimpleItemStorage {
6410
6660
  }
6411
6661
 
6412
6662
  const _selectableListComponentDefaults = {
6413
- ..._ngModelComponentDefaults,
6663
+ ..._formFieldComponentDefaults,
6414
6664
  valueFrom: 'value',
6415
6665
  labelFrom: 'label',
6416
6666
  disabledFrom: 'disabled',
@@ -6420,12 +6670,11 @@ const _selectableListComponentDefaults = {
6420
6670
  invertDisabled: false,
6421
6671
  maxSelectedItems: undefined,
6422
6672
  };
6423
- class _SelectableListComponentBase extends _NgModelComponentBase {
6673
+ class _SelectableListComponentBase extends _FormFieldComponentBase {
6424
6674
  constructor() {
6425
6675
  super(...arguments);
6426
6676
  //! public constants
6427
6677
  this.itemStorage = new SimpleItemStorage(this);
6428
- this.htmlId = TakeChance.id();
6429
6678
  this.DEFAULTS = this._DEFAULTS;
6430
6679
  this._cd = inject(ChangeDetectorRef);
6431
6680
  //! binding-related inputs
@@ -6489,7 +6738,7 @@ class _SelectableListComponentBase extends _NgModelComponentBase {
6489
6738
  return this.touched();
6490
6739
  }
6491
6740
  _emitChange() {
6492
- const value = this.itemStorage.value();
6741
+ const value = this.singleselectable() ? this.itemStorage.value()[0] : this.itemStorage.value();
6493
6742
  this._onChangeRegistered?.(value);
6494
6743
  this.changeEvent.emit(value);
6495
6744
  this.valueChange.emit(value);
@@ -6605,7 +6854,7 @@ class _SelectableListComponentBase extends _NgModelComponentBase {
6605
6854
  }
6606
6855
  }
6607
6856
  _toggleHighlightedItems(event) {
6608
- if (!this.isFocused)
6857
+ if (!this.isFocused())
6609
6858
  return;
6610
6859
  event.preventDefault();
6611
6860
  const highlightedItems = this.highlightedItems();
@@ -6617,28 +6866,28 @@ class _SelectableListComponentBase extends _NgModelComponentBase {
6617
6866
  }
6618
6867
  }
6619
6868
  _highlightPrevious(event) {
6620
- if (!this.isFocused)
6869
+ if (!this.isFocused())
6621
6870
  return;
6622
6871
  event.preventDefault();
6623
6872
  this.isMouseBeingUsed.set(false);
6624
6873
  this.itemStorage.highlightNextItem(-1, event.shiftKey);
6625
6874
  }
6626
6875
  _highlightNext(event) {
6627
- if (!this.isFocused)
6876
+ if (!this.isFocused())
6628
6877
  return;
6629
6878
  event.preventDefault();
6630
6879
  this.isMouseBeingUsed.set(false);
6631
6880
  this.itemStorage.highlightNextItem(+1, event.shiftKey);
6632
6881
  }
6633
6882
  _highlightFirst(event) {
6634
- if (!this.isFocused)
6883
+ if (!this.isFocused())
6635
6884
  return;
6636
6885
  event.preventDefault();
6637
6886
  this.isMouseBeingUsed.set(false);
6638
6887
  this.itemStorage.highlightFirstItem();
6639
6888
  }
6640
6889
  _highlightLast(event) {
6641
- if (!this.isFocused)
6890
+ if (!this.isFocused())
6642
6891
  return;
6643
6892
  event.preventDefault();
6644
6893
  this.isMouseBeingUsed.set(false);
@@ -6807,11 +7056,31 @@ class ArdiumSegmentComponent extends _SelectableListComponentBase {
6807
7056
  this.itemStorage.unhighlightAll();
6808
7057
  }
6809
7058
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumSegmentComponent, deps: [{ token: ARD_SEGMENT_DEFAULTS }], target: i0.ɵɵFactoryTarget.Component }); }
6810
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ArdiumSegmentComponent, selector: "ard-segment", inputs: { appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, iconBased: { classPropertyName: "iconBased", publicName: "iconBased", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null }, autoFocus: { classPropertyName: "autoFocus", publicName: "autoFocus", isSignal: true, isRequired: false, transformFunction: null }, uniformWidths: { classPropertyName: "uniformWidths", publicName: "uniformWidths", isSignal: true, isRequired: false, transformFunction: null }, itemsPerRow: { classPropertyName: "itemsPerRow", publicName: "itemsPerRow", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "optionTemplate", first: true, predicate: ArdSegmentOptionTemplateDirective, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\n #focusableElement\n class=\"ard-segment-container\"\n [class.ard-disabled]=\"disabled()\"\n [ariaDisabled]=\"disabled()\"\n [ngClass]=\"ngClasses()\"\n [class.ard-focus-visible]=\"isFocused && !isMouseBeingUsed\"\n [class.ard-using-keyboard]=\"!isMouseBeingUsed\"\n [attr.tabindex]=\"tabIndex()\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n>\n @for (row of itemRows(); track $index) {\n <div\n class=\"ard-segment-row\"\n [class.ard-segment-row-partial]=\"row.isNotFull\"\n [class.ard-segment-row-uniform]=\"uniformWidths() || itemsPerRow() < items.length\"\n [style]=\"{ '--ard-_segment-row-items': itemsInActualRow }\"\n >\n @for (option of row.options; track $index) {\n <button\n type=\"button\"\n class=\"ard-segment-option\"\n tabindex=\"-1\"\n [class.ard-option-disabled]=\"option.disabled() || (isItemLimitReached() && !option.selected())\"\n [class.ard-option-selected]=\"option.selected()\"\n [class.ard-option-highlighted]=\"option.highlighted()\"\n [ariaSelected]=\"option.selected()\"\n (mouseenter)=\"onItemMouseEnter(option, $event)\"\n (mouseleave)=\"onItemMouseLeave(option, $event)\"\n (click)=\"onItemClick(option, $event)\"\n >\n <div class=\"ard-focus-overlay\"></div>\n <div class=\"ard-button-content\">\n <span class=\"ard-option-label\">\n <ng-template #defaultOptionTemplate>\n {{ option.label() }}\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"optionTemplate()?.template || defaultOptionTemplate\"\n [ngTemplateOutletContext]=\"getOptionContext(option)\"\n />\n </span>\n </div>\n </button>\n }\n </div>\n }\n</div>\n", styles: [".ard-segment-container{display:flex;flex-direction:column}.ard-segment-container.ard-align-left .ard-segment-option{justify-content:left}.ard-segment-container.ard-align-middle .ard-segment-option{justify-content:center}.ard-segment-container.ard-align-right .ard-segment-option{justify-content:right}.ard-segment-row{width:100%;display:flex;align-items:center}.ard-segment-row.ard-segment-row-uniform{display:grid;grid-template-columns:repeat(var(--ard-_segment-row-items),1fr)}.ard-segment-option{-webkit-user-select:none;user-select:none}.ard-option-disabled{pointer-events:none}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
7059
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ArdiumSegmentComponent, selector: "ard-segment", inputs: { appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, iconBased: { classPropertyName: "iconBased", publicName: "iconBased", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null }, autoFocus: { classPropertyName: "autoFocus", publicName: "autoFocus", isSignal: true, isRequired: false, transformFunction: null }, uniformWidths: { classPropertyName: "uniformWidths", publicName: "uniformWidths", isSignal: true, isRequired: false, transformFunction: null }, itemsPerRow: { classPropertyName: "itemsPerRow", publicName: "itemsPerRow", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
7060
+ {
7061
+ provide: NG_VALUE_ACCESSOR,
7062
+ useExisting: forwardRef(() => ArdiumSegmentComponent),
7063
+ multi: true,
7064
+ },
7065
+ {
7066
+ provide: _FormFieldComponentBase,
7067
+ useExisting: ArdiumSegmentComponent,
7068
+ },
7069
+ ], queries: [{ propertyName: "optionTemplate", first: true, predicate: ArdSegmentOptionTemplateDirective, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\n #focusableElement\n class=\"ard-segment-container\"\n [class.ard-disabled]=\"disabled()\"\n [ariaDisabled]=\"disabled()\"\n [ngClass]=\"ngClasses()\"\n [class.ard-focus-visible]=\"isFocused() && !isMouseBeingUsed\"\n [class.ard-using-keyboard]=\"!isMouseBeingUsed\"\n [attr.tabindex]=\"tabIndex()\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n>\n @for (row of itemRows(); track $index) {\n <div\n class=\"ard-segment-row\"\n [class.ard-segment-row-partial]=\"row.isNotFull\"\n [class.ard-segment-row-uniform]=\"uniformWidths() || itemsPerRow() < items.length\"\n [style]=\"{ '--ard-_segment-row-items': itemsInActualRow }\"\n >\n @for (option of row.options; track $index) {\n <button\n type=\"button\"\n class=\"ard-segment-option\"\n tabindex=\"-1\"\n [class.ard-option-disabled]=\"option.disabled() || (isItemLimitReached() && !option.selected())\"\n [class.ard-option-selected]=\"option.selected()\"\n [class.ard-option-highlighted]=\"option.highlighted()\"\n [ariaSelected]=\"option.selected()\"\n (mouseenter)=\"onItemMouseEnter(option, $event)\"\n (mouseleave)=\"onItemMouseLeave(option, $event)\"\n (click)=\"onItemClick(option, $event)\"\n >\n <div class=\"ard-focus-overlay\"></div>\n <div class=\"ard-button-content\">\n <span class=\"ard-option-label\">\n <ng-template #defaultOptionTemplate>\n {{ option.label() }}\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"optionTemplate()?.template || defaultOptionTemplate\"\n [ngTemplateOutletContext]=\"getOptionContext(option)\"\n />\n </span>\n </div>\n </button>\n }\n </div>\n }\n</div>\n", styles: [".ard-segment-container{display:flex;flex-direction:column}.ard-segment-container.ard-align-left .ard-segment-option{justify-content:left}.ard-segment-container.ard-align-middle .ard-segment-option{justify-content:center}.ard-segment-container.ard-align-right .ard-segment-option{justify-content:right}.ard-segment-row{width:100%;display:flex;align-items:center}.ard-segment-row.ard-segment-row-uniform{display:grid;grid-template-columns:repeat(var(--ard-_segment-row-items),1fr)}.ard-segment-option{-webkit-user-select:none;user-select:none}.ard-option-disabled{pointer-events:none}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
6811
7070
  }
6812
7071
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumSegmentComponent, decorators: [{
6813
7072
  type: Component,
6814
- args: [{ selector: 'ard-segment', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n #focusableElement\n class=\"ard-segment-container\"\n [class.ard-disabled]=\"disabled()\"\n [ariaDisabled]=\"disabled()\"\n [ngClass]=\"ngClasses()\"\n [class.ard-focus-visible]=\"isFocused && !isMouseBeingUsed\"\n [class.ard-using-keyboard]=\"!isMouseBeingUsed\"\n [attr.tabindex]=\"tabIndex()\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n>\n @for (row of itemRows(); track $index) {\n <div\n class=\"ard-segment-row\"\n [class.ard-segment-row-partial]=\"row.isNotFull\"\n [class.ard-segment-row-uniform]=\"uniformWidths() || itemsPerRow() < items.length\"\n [style]=\"{ '--ard-_segment-row-items': itemsInActualRow }\"\n >\n @for (option of row.options; track $index) {\n <button\n type=\"button\"\n class=\"ard-segment-option\"\n tabindex=\"-1\"\n [class.ard-option-disabled]=\"option.disabled() || (isItemLimitReached() && !option.selected())\"\n [class.ard-option-selected]=\"option.selected()\"\n [class.ard-option-highlighted]=\"option.highlighted()\"\n [ariaSelected]=\"option.selected()\"\n (mouseenter)=\"onItemMouseEnter(option, $event)\"\n (mouseleave)=\"onItemMouseLeave(option, $event)\"\n (click)=\"onItemClick(option, $event)\"\n >\n <div class=\"ard-focus-overlay\"></div>\n <div class=\"ard-button-content\">\n <span class=\"ard-option-label\">\n <ng-template #defaultOptionTemplate>\n {{ option.label() }}\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"optionTemplate()?.template || defaultOptionTemplate\"\n [ngTemplateOutletContext]=\"getOptionContext(option)\"\n />\n </span>\n </div>\n </button>\n }\n </div>\n }\n</div>\n", styles: [".ard-segment-container{display:flex;flex-direction:column}.ard-segment-container.ard-align-left .ard-segment-option{justify-content:left}.ard-segment-container.ard-align-middle .ard-segment-option{justify-content:center}.ard-segment-container.ard-align-right .ard-segment-option{justify-content:right}.ard-segment-row{width:100%;display:flex;align-items:center}.ard-segment-row.ard-segment-row-uniform{display:grid;grid-template-columns:repeat(var(--ard-_segment-row-items),1fr)}.ard-segment-option{-webkit-user-select:none;user-select:none}.ard-option-disabled{pointer-events:none}\n"] }]
7073
+ args: [{ selector: 'ard-segment', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
7074
+ {
7075
+ provide: NG_VALUE_ACCESSOR,
7076
+ useExisting: forwardRef(() => ArdiumSegmentComponent),
7077
+ multi: true,
7078
+ },
7079
+ {
7080
+ provide: _FormFieldComponentBase,
7081
+ useExisting: ArdiumSegmentComponent,
7082
+ },
7083
+ ], template: "<div\n #focusableElement\n class=\"ard-segment-container\"\n [class.ard-disabled]=\"disabled()\"\n [ariaDisabled]=\"disabled()\"\n [ngClass]=\"ngClasses()\"\n [class.ard-focus-visible]=\"isFocused() && !isMouseBeingUsed\"\n [class.ard-using-keyboard]=\"!isMouseBeingUsed\"\n [attr.tabindex]=\"tabIndex()\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n>\n @for (row of itemRows(); track $index) {\n <div\n class=\"ard-segment-row\"\n [class.ard-segment-row-partial]=\"row.isNotFull\"\n [class.ard-segment-row-uniform]=\"uniformWidths() || itemsPerRow() < items.length\"\n [style]=\"{ '--ard-_segment-row-items': itemsInActualRow }\"\n >\n @for (option of row.options; track $index) {\n <button\n type=\"button\"\n class=\"ard-segment-option\"\n tabindex=\"-1\"\n [class.ard-option-disabled]=\"option.disabled() || (isItemLimitReached() && !option.selected())\"\n [class.ard-option-selected]=\"option.selected()\"\n [class.ard-option-highlighted]=\"option.highlighted()\"\n [ariaSelected]=\"option.selected()\"\n (mouseenter)=\"onItemMouseEnter(option, $event)\"\n (mouseleave)=\"onItemMouseLeave(option, $event)\"\n (click)=\"onItemClick(option, $event)\"\n >\n <div class=\"ard-focus-overlay\"></div>\n <div class=\"ard-button-content\">\n <span class=\"ard-option-label\">\n <ng-template #defaultOptionTemplate>\n {{ option.label() }}\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"optionTemplate()?.template || defaultOptionTemplate\"\n [ngTemplateOutletContext]=\"getOptionContext(option)\"\n />\n </span>\n </div>\n </button>\n }\n </div>\n }\n</div>\n", styles: [".ard-segment-container{display:flex;flex-direction:column}.ard-segment-container.ard-align-left .ard-segment-option{justify-content:left}.ard-segment-container.ard-align-middle .ard-segment-option{justify-content:center}.ard-segment-container.ard-align-right .ard-segment-option{justify-content:right}.ard-segment-row{width:100%;display:flex;align-items:center}.ard-segment-row.ard-segment-row-uniform{display:grid;grid-template-columns:repeat(var(--ard-_segment-row-items),1fr)}.ard-segment-option{-webkit-user-select:none;user-select:none}.ard-option-disabled{pointer-events:none}\n"] }]
6815
7084
  }], ctorParameters: () => [{ type: undefined, decorators: [{
6816
7085
  type: Inject,
6817
7086
  args: [ARD_SEGMENT_DEFAULTS]
@@ -7192,6 +7461,7 @@ class ArdiumRangeSliderComponent extends _AbstractSlider {
7192
7461
  this.currentHandle = signal(null);
7193
7462
  }
7194
7463
  ngOnInit() {
7464
+ super.ngOnInit();
7195
7465
  if (this._value.low !== -Infinity && this._value.high !== Infinity)
7196
7466
  return;
7197
7467
  this.writeValue({ low: this.min(), high: this.max() });
@@ -7962,7 +8232,6 @@ function provideCheckboxListDefaults(config) {
7962
8232
  class ArdiumCheckboxListComponent extends _NgModelComponentBase {
7963
8233
  constructor(defaults) {
7964
8234
  super(defaults);
7965
- this.htmlId = input(TakeChance.id());
7966
8235
  this.DEFAULTS = this._DEFAULTS;
7967
8236
  // static values. Not meant to be changed.
7968
8237
  this.multiselectable = signal(true);
@@ -8047,7 +8316,7 @@ class ArdiumCheckboxListComponent extends _NgModelComponentBase {
8047
8316
  this.selectItem(v);
8048
8317
  }
8049
8318
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumCheckboxListComponent, deps: [{ token: ARD_CHECKBOX_LIST_DEFAULTS }], target: i0.ɵɵFactoryTarget.Component }); }
8050
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ArdiumCheckboxListComponent, selector: "ard-checkbox-list", inputs: { htmlId: { classPropertyName: "htmlId", publicName: "htmlId", isSignal: true, isRequired: false, transformFunction: null }, valueFrom: { classPropertyName: "valueFrom", publicName: "valueFrom", isSignal: true, isRequired: false, transformFunction: null }, labelFrom: { classPropertyName: "labelFrom", publicName: "labelFrom", isSignal: true, isRequired: false, transformFunction: null }, disabledFrom: { classPropertyName: "disabledFrom", publicName: "disabledFrom", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: false, isRequired: false, transformFunction: null }, compareWith: { classPropertyName: "compareWith", publicName: "compareWith", isSignal: true, isRequired: false, transformFunction: null }, invertDisabled: { classPropertyName: "invertDisabled", publicName: "invertDisabled", isSignal: true, isRequired: false, transformFunction: null }, maxSelectedItems: { classPropertyName: "maxSelectedItems", publicName: "maxSelectedItems", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", changeEvent: "change" }, host: { properties: { "attr.id": "this._htmlIdHostAttribute" } }, usesInheritance: true, ngImport: i0, template: "<div\n class=\"ard-checkbox-list\"\n [ngClass]=\"ngClasses()\"\n>\n @for (item of items; track item.index) {\n <div\n class=\"ard-checkbox-list__item\"\n [class.ard-item-highlighted]=\"item.highlighted()\"\n [class.ard-item-disabled]=\"item.disabled()\"\n (mouseover)=\"onItemHighlight(item)\"\n (mouseleave)=\"onItemBlur()\"\n (click)=\"toggleItem(item)\"\n >\n <div class=\"ard-focus-overlay\"></div>\n <ard-checkbox\n [selected]=\"item.selected()\"\n [disabled]=\"item.disabled()\"\n [color]=\"color()\"\n [htmlId]=\"htmlId() + item.index\"\n [tabIndex]=\"tabIndex()\"\n (focus)=\"onFocus($event)\"\n (focus)=\"onItemFocus(item)\"\n (blur)=\"onBlur($event)\"\n (blur)=\"onItemBlur()\"\n (select)=\"selectItem(item)\"\n (unselect)=\"unselectItem(item)\"\n (click)=\"$event.stopPropagation()\"\n />\n <label [for]=\"htmlId() + item.index\">\n {{ item.label() }}\n </label>\n </div>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ArdiumCheckboxComponent, selector: "ard-checkbox", inputs: ["htmlId", "color", "unselectedColor", "state"], outputs: ["stateChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
8319
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ArdiumCheckboxListComponent, selector: "ard-checkbox-list", inputs: { valueFrom: { classPropertyName: "valueFrom", publicName: "valueFrom", isSignal: true, isRequired: false, transformFunction: null }, labelFrom: { classPropertyName: "labelFrom", publicName: "labelFrom", isSignal: true, isRequired: false, transformFunction: null }, disabledFrom: { classPropertyName: "disabledFrom", publicName: "disabledFrom", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: false, isRequired: false, transformFunction: null }, compareWith: { classPropertyName: "compareWith", publicName: "compareWith", isSignal: true, isRequired: false, transformFunction: null }, invertDisabled: { classPropertyName: "invertDisabled", publicName: "invertDisabled", isSignal: true, isRequired: false, transformFunction: null }, maxSelectedItems: { classPropertyName: "maxSelectedItems", publicName: "maxSelectedItems", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", changeEvent: "change" }, host: { properties: { "attr.id": "this._htmlIdHostAttribute" } }, usesInheritance: true, ngImport: i0, template: "<div\n class=\"ard-checkbox-list\"\n [ngClass]=\"ngClasses()\"\n>\n @for (item of items; track item.index) {\n <div\n class=\"ard-checkbox-list__item\"\n [class.ard-item-highlighted]=\"item.highlighted()\"\n [class.ard-item-disabled]=\"item.disabled()\"\n (mouseover)=\"onItemHighlight(item)\"\n (mouseleave)=\"onItemBlur()\"\n (click)=\"toggleItem(item)\"\n >\n <div class=\"ard-focus-overlay\"></div>\n <ard-checkbox\n [selected]=\"item.selected()\"\n [disabled]=\"item.disabled()\"\n [color]=\"color()\"\n [htmlId]=\"htmlId() + item.index\"\n [tabIndex]=\"tabIndex()\"\n (focus)=\"onFocus($event)\"\n (focus)=\"onItemFocus(item)\"\n (blur)=\"onBlur($event)\"\n (blur)=\"onItemBlur()\"\n (select)=\"selectItem(item)\"\n (unselect)=\"unselectItem(item)\"\n (click)=\"$event.stopPropagation()\"\n />\n <label [for]=\"htmlId() + item.index\">\n {{ item.label() }}\n </label>\n </div>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ArdiumCheckboxComponent, selector: "ard-checkbox", inputs: ["color", "unselectedColor", "state"], outputs: ["stateChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
8051
8320
  }
8052
8321
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumCheckboxListComponent, decorators: [{
8053
8322
  type: Component,
@@ -8529,6 +8798,187 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
8529
8798
  }]
8530
8799
  }] });
8531
8800
 
8801
+ class ArdiumErrorDirective {
8802
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumErrorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
8803
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: ArdiumErrorDirective, isStandalone: true, selector: "[ard-error]", host: { properties: { "class.ard-error": "true" } }, ngImport: i0 }); }
8804
+ }
8805
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumErrorDirective, decorators: [{
8806
+ type: Directive,
8807
+ args: [{
8808
+ selector: '[ard-error]',
8809
+ standalone: true,
8810
+ host: {
8811
+ '[class.ard-error]': 'true',
8812
+ },
8813
+ }]
8814
+ }] });
8815
+
8816
+ class ArdiumErrorComponent {
8817
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8818
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ArdiumErrorComponent, selector: "ard-error", hostDirectives: [{ directive: ArdiumErrorDirective }], ngImport: i0, template: '<ng-content />', isInline: true }); }
8819
+ }
8820
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumErrorComponent, decorators: [{
8821
+ type: Component,
8822
+ args: [{
8823
+ selector: 'ard-error',
8824
+ template: '<ng-content />',
8825
+ hostDirectives: [{ directive: ArdiumErrorDirective }],
8826
+ }]
8827
+ }] });
8828
+
8829
+ const _formFieldDefaults = {
8830
+ defaultHintAlign: SimpleOneAxisAlignment.Left,
8831
+ reserveHintLine: false,
8832
+ };
8833
+ const ARD_FORM_FIELD_DEFAULTS = new InjectionToken('ard-form-field-defaults', {
8834
+ factory: () => ({
8835
+ ..._formFieldDefaults,
8836
+ }),
8837
+ });
8838
+ function provideFormFieldDefaults(config) {
8839
+ return { provide: ARD_FORM_FIELD_DEFAULTS, useValue: { ..._formFieldDefaults, ...config } };
8840
+ }
8841
+
8842
+ class ArdiumHintDirective {
8843
+ constructor() {
8844
+ this.left = input(false, { transform: v => coerceBooleanProperty(v) });
8845
+ this.right = input(false, { transform: v => coerceBooleanProperty(v) });
8846
+ effect(() => {
8847
+ if (this.left() && this.right()) {
8848
+ console.error(`ARD-NF5130: Cannot align a form field hint to both left and right.`);
8849
+ }
8850
+ });
8851
+ }
8852
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumHintDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
8853
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: ArdiumHintDirective, isStandalone: true, selector: "[ard-hint]", inputs: { left: { classPropertyName: "left", publicName: "left", isSignal: true, isRequired: false, transformFunction: null }, right: { classPropertyName: "right", publicName: "right", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.ard-hint": "true", "class.ard-hint-default": "!left() && !right()", "class.ard-hint-left": "left() && !right()", "class.ard-hint-right": "!left() && right()" } }, ngImport: i0 }); }
8854
+ }
8855
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumHintDirective, decorators: [{
8856
+ type: Directive,
8857
+ args: [{
8858
+ selector: '[ard-hint]',
8859
+ standalone: true,
8860
+ host: {
8861
+ '[class.ard-hint]': 'true',
8862
+ '[class.ard-hint-default]': '!left() && !right()',
8863
+ '[class.ard-hint-left]': 'left() && !right()',
8864
+ '[class.ard-hint-right]': '!left() && right()',
8865
+ },
8866
+ }]
8867
+ }], ctorParameters: () => [] });
8868
+
8869
+ class ArdiumLabelComponent {
8870
+ constructor() {
8871
+ this.required = input(false, { transform: v => coerceBooleanProperty(v) });
8872
+ this.optional = input(false, { transform: v => coerceBooleanProperty(v) });
8873
+ effect(() => {
8874
+ if (this.required() && this.optional()) {
8875
+ console.error(`ARD-NF5110: Cannot set a form field label to be both required and optional.`);
8876
+ }
8877
+ });
8878
+ }
8879
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumLabelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8880
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: ArdiumLabelComponent, selector: "ard-label", inputs: { required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, optional: { classPropertyName: "optional", publicName: "optional", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div\r\n class=\"ard-label-text\"\r\n [class.ard-label-optional]=\"optional()\"\r\n [class.ard-label-required]=\"required()\"\r\n>\r\n <ng-content />\r\n</div>\r\n" }); }
8881
+ }
8882
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumLabelComponent, decorators: [{
8883
+ type: Component,
8884
+ args: [{ selector: 'ard-label', template: "<div\r\n class=\"ard-label-text\"\r\n [class.ard-label-optional]=\"optional()\"\r\n [class.ard-label-required]=\"required()\"\r\n>\r\n <ng-content />\r\n</div>\r\n" }]
8885
+ }], ctorParameters: () => [] });
8886
+
8887
+ class ArdiumFormFieldComponent {
8888
+ constructor() {
8889
+ this._DEFAULTS = inject(ARD_FORM_FIELD_DEFAULTS);
8890
+ this.alignHintToLeftByDefault = this._DEFAULTS.defaultHintAlign === SimpleOneAxisAlignment.Left;
8891
+ this.control = contentChild(_FormFieldComponentBase);
8892
+ this.label = contentChild(ArdiumLabelComponent);
8893
+ this.hints = contentChildren(ArdiumHintDirective);
8894
+ this.errors = contentChildren(ArdiumErrorDirective);
8895
+ this.hasAnyError = computed(() => this.errors()?.length > 0);
8896
+ this.reserveHintLine = input(this._DEFAULTS.reserveHintLine, { transform: v => coerceBooleanProperty(v) });
8897
+ }
8898
+ ngOnInit() {
8899
+ if (!this.control()) {
8900
+ throw new Error(`ARD-FT5110: Form field component requires any control (input) to be present within the element. Found none.`);
8901
+ }
8902
+ }
8903
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumFormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8904
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ArdiumFormFieldComponent, selector: "ard-form-field", inputs: { reserveHintLine: { classPropertyName: "reserveHintLine", publicName: "reserveHintLine", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "control", first: true, predicate: _FormFieldComponentBase, descendants: true, isSignal: true }, { propertyName: "label", first: true, predicate: ArdiumLabelComponent, descendants: true, isSignal: true }, { propertyName: "hints", predicate: ArdiumHintDirective, isSignal: true }, { propertyName: "errors", predicate: ArdiumErrorDirective, isSignal: true }], ngImport: i0, template: "<div\r\n class=\"ard-form-field\"\r\n [class.ard-form-field__with-error]=\"control()?.hasError()\"\r\n [class.ard-form-field__is-success]=\"control()?.isSuccess()\"\r\n [class.ard-form-field__control-disabled]=\"control()?.disabled()\"\r\n>\r\n <label\r\n class=\"ard-label\"\r\n [attr.for]=\"control()?.htmlId()\"\r\n >\r\n <ng-content select=\"ard-label, [ard-label]\" />\r\n </label>\r\n <div class=\"ard-form-field__input\">\r\n <ng-content />\r\n </div>\r\n <div\r\n class=\"ard-form-field__hints\"\r\n [class.ard-form-field__reserve-hint-line]=\"reserveHintLine()\"\r\n [class.ard-form-field__hints-default-left]=\"alignHintToLeftByDefault\"\r\n >\r\n @if (hasAnyError()) {\r\n <div class=\"ard-form-field__error\">\r\n <ng-content select=\"ard-error, [ard-error]\" />\r\n </div>\r\n } @else {\r\n <div class=\"ard-form-field__hints-left\">\r\n <div class=\"ard-form-field__default-hint\">\r\n <ng-content select=\"ard-hint:not([left]):not([right]), [ard-hint]:not([left]):not([right])\" />\r\n </div>\r\n <ng-content select=\"ard-hint[left], [ard-hint][left]\" />\r\n </div>\r\n <div class=\"ard-form-field__hints-right\">\r\n <div class=\"ard-form-field__default-hint\">\r\n <ng-content select=\"ard-hint:not([left]):not([right]), [ard-hint]:not([left]):not([right])\" />\r\n </div>\r\n <ng-content select=\"ard-hint[right], [ard-hint][right]\" />\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [":host{display:block}.ard-form-field__hints{display:flex;justify-content:space-between}.ard-form-field__hints>*{display:flex;flex-direction:column}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
8905
+ }
8906
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumFormFieldComponent, decorators: [{
8907
+ type: Component,
8908
+ args: [{ selector: 'ard-form-field', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\r\n class=\"ard-form-field\"\r\n [class.ard-form-field__with-error]=\"control()?.hasError()\"\r\n [class.ard-form-field__is-success]=\"control()?.isSuccess()\"\r\n [class.ard-form-field__control-disabled]=\"control()?.disabled()\"\r\n>\r\n <label\r\n class=\"ard-label\"\r\n [attr.for]=\"control()?.htmlId()\"\r\n >\r\n <ng-content select=\"ard-label, [ard-label]\" />\r\n </label>\r\n <div class=\"ard-form-field__input\">\r\n <ng-content />\r\n </div>\r\n <div\r\n class=\"ard-form-field__hints\"\r\n [class.ard-form-field__reserve-hint-line]=\"reserveHintLine()\"\r\n [class.ard-form-field__hints-default-left]=\"alignHintToLeftByDefault\"\r\n >\r\n @if (hasAnyError()) {\r\n <div class=\"ard-form-field__error\">\r\n <ng-content select=\"ard-error, [ard-error]\" />\r\n </div>\r\n } @else {\r\n <div class=\"ard-form-field__hints-left\">\r\n <div class=\"ard-form-field__default-hint\">\r\n <ng-content select=\"ard-hint:not([left]):not([right]), [ard-hint]:not([left]):not([right])\" />\r\n </div>\r\n <ng-content select=\"ard-hint[left], [ard-hint][left]\" />\r\n </div>\r\n <div class=\"ard-form-field__hints-right\">\r\n <div class=\"ard-form-field__default-hint\">\r\n <ng-content select=\"ard-hint:not([left]):not([right]), [ard-hint]:not([left]):not([right])\" />\r\n </div>\r\n <ng-content select=\"ard-hint[right], [ard-hint][right]\" />\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [":host{display:block}.ard-form-field__hints{display:flex;justify-content:space-between}.ard-form-field__hints>*{display:flex;flex-direction:column}\n"] }]
8909
+ }] });
8910
+
8911
+ class ArdiumHintComponent {
8912
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumHintComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8913
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ArdiumHintComponent, selector: "ard-hint", hostDirectives: [{ directive: ArdiumHintDirective, inputs: ["left", "left", "right", "right"] }], ngImport: i0, template: '<ng-content />', isInline: true }); }
8914
+ }
8915
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumHintComponent, decorators: [{
8916
+ type: Component,
8917
+ args: [{
8918
+ selector: 'ard-hint',
8919
+ template: '<ng-content />',
8920
+ hostDirectives: [{ directive: ArdiumHintDirective, inputs: ['left', 'right'] }],
8921
+ }]
8922
+ }] });
8923
+
8924
+ class ArdiumHorizontalFormFieldComponent {
8925
+ constructor() {
8926
+ this._DEFAULTS = inject(ARD_FORM_FIELD_DEFAULTS);
8927
+ this.alignHintToLeftByDefault = this._DEFAULTS.defaultHintAlign === SimpleOneAxisAlignment.Left;
8928
+ this.control = contentChild(_FormFieldComponentBase);
8929
+ this.label = contentChild(ArdiumLabelComponent);
8930
+ this.hints = contentChildren(ArdiumHintDirective);
8931
+ this.errors = contentChildren(ArdiumErrorDirective);
8932
+ this.hasAnyError = computed(() => this.errors()?.length > 0);
8933
+ this.reserveHintLine = input(this._DEFAULTS.reserveHintLine, { transform: v => coerceBooleanProperty(v) });
8934
+ }
8935
+ ngOnInit() {
8936
+ if (!this.control()) {
8937
+ throw new Error(`ARD-FT5110: Form field component requires any control (input) to be present within the element. Found none.`);
8938
+ }
8939
+ }
8940
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumHorizontalFormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8941
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ArdiumHorizontalFormFieldComponent, selector: "ard-horizontal-form-field", inputs: { reserveHintLine: { classPropertyName: "reserveHintLine", publicName: "reserveHintLine", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "control", first: true, predicate: _FormFieldComponentBase, descendants: true, isSignal: true }, { propertyName: "label", first: true, predicate: ArdiumLabelComponent, descendants: true, isSignal: true }, { propertyName: "hints", predicate: ArdiumHintDirective, isSignal: true }, { propertyName: "errors", predicate: ArdiumErrorDirective, isSignal: true }], ngImport: i0, template: "<div\r\n class=\"ard-horizontal-form-field\"\r\n [class.ard-form-field__with-error]=\"control()?.hasError()\"\r\n [class.ard-form-field__is-success]=\"control()?.isSuccess()\"\r\n [class.ard-form-field__control-disabled]=\"control()?.disabled()\"\r\n>\r\n <div class=\"ard-form-field__label-container\">\r\n <label\r\n class=\"ard-label\"\r\n [attr.for]=\"control()?.htmlId()\"\r\n >\r\n <ng-content select=\"ard-label, [ard-label]\" />\r\n </label>\r\n </div>\r\n <div class=\"ard-form-field__non-label\">\r\n <div class=\"ard-form-field__input\">\r\n <ng-content />\r\n </div>\r\n <div\r\n class=\"ard-form-field__hints\"\r\n [class.ard-form-field__reserve-hint-line]=\"reserveHintLine()\"\r\n [class.ard-form-field__hints-default-left]=\"alignHintToLeftByDefault\"\r\n >\r\n @if (hasAnyError()) {\r\n <div class=\"ard-form-field__error\">\r\n <ng-content select=\"ard-error, [ard-error]\" />\r\n </div>\r\n } @else {\r\n <div class=\"ard-form-field__hints-left\">\r\n <div class=\"ard-form-field__default-hint\">\r\n <ng-content select=\"ard-hint:not([left]):not([right]), [ard-hint]:not([left]):not([right])\" />\r\n </div>\r\n <ng-content select=\"ard-hint[left], [ard-hint][left]\" />\r\n </div>\r\n <div class=\"ard-form-field__hints-right\">\r\n <div class=\"ard-form-field__default-hint\">\r\n <ng-content select=\"ard-hint:not([left]):not([right]), [ard-hint]:not([left]):not([right])\" />\r\n </div>\r\n <ng-content select=\"ard-hint[right], [ard-hint][right]\" />\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block}.ard-horizontal-form-field{display:flex}.ard-form-field__hints{display:flex;justify-content:space-between}.ard-form-field__hints>*{display:flex;flex-direction:column}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
8942
+ }
8943
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumHorizontalFormFieldComponent, decorators: [{
8944
+ type: Component,
8945
+ args: [{ selector: 'ard-horizontal-form-field', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\r\n class=\"ard-horizontal-form-field\"\r\n [class.ard-form-field__with-error]=\"control()?.hasError()\"\r\n [class.ard-form-field__is-success]=\"control()?.isSuccess()\"\r\n [class.ard-form-field__control-disabled]=\"control()?.disabled()\"\r\n>\r\n <div class=\"ard-form-field__label-container\">\r\n <label\r\n class=\"ard-label\"\r\n [attr.for]=\"control()?.htmlId()\"\r\n >\r\n <ng-content select=\"ard-label, [ard-label]\" />\r\n </label>\r\n </div>\r\n <div class=\"ard-form-field__non-label\">\r\n <div class=\"ard-form-field__input\">\r\n <ng-content />\r\n </div>\r\n <div\r\n class=\"ard-form-field__hints\"\r\n [class.ard-form-field__reserve-hint-line]=\"reserveHintLine()\"\r\n [class.ard-form-field__hints-default-left]=\"alignHintToLeftByDefault\"\r\n >\r\n @if (hasAnyError()) {\r\n <div class=\"ard-form-field__error\">\r\n <ng-content select=\"ard-error, [ard-error]\" />\r\n </div>\r\n } @else {\r\n <div class=\"ard-form-field__hints-left\">\r\n <div class=\"ard-form-field__default-hint\">\r\n <ng-content select=\"ard-hint:not([left]):not([right]), [ard-hint]:not([left]):not([right])\" />\r\n </div>\r\n <ng-content select=\"ard-hint[left], [ard-hint][left]\" />\r\n </div>\r\n <div class=\"ard-form-field__hints-right\">\r\n <div class=\"ard-form-field__default-hint\">\r\n <ng-content select=\"ard-hint:not([left]):not([right]), [ard-hint]:not([left]):not([right])\" />\r\n </div>\r\n <ng-content select=\"ard-hint[right], [ard-hint][right]\" />\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block}.ard-horizontal-form-field{display:flex}.ard-form-field__hints{display:flex;justify-content:space-between}.ard-form-field__hints>*{display:flex;flex-direction:column}\n"] }]
8946
+ }] });
8947
+
8948
+ class ArdiumFormFieldModule {
8949
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumFormFieldModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
8950
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: ArdiumFormFieldModule, declarations: [ArdiumFormFieldComponent,
8951
+ ArdiumHorizontalFormFieldComponent,
8952
+ ArdiumLabelComponent,
8953
+ ArdiumHintComponent,
8954
+ ArdiumErrorComponent], imports: [CommonModule, ArdiumHintDirective, ArdiumErrorDirective], exports: [ArdiumFormFieldComponent,
8955
+ ArdiumHorizontalFormFieldComponent,
8956
+ ArdiumLabelComponent,
8957
+ ArdiumHintComponent,
8958
+ ArdiumErrorComponent] }); }
8959
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumFormFieldModule, imports: [CommonModule] }); }
8960
+ }
8961
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumFormFieldModule, decorators: [{
8962
+ type: NgModule,
8963
+ args: [{
8964
+ declarations: [
8965
+ ArdiumFormFieldComponent,
8966
+ ArdiumHorizontalFormFieldComponent,
8967
+ ArdiumLabelComponent,
8968
+ ArdiumHintComponent,
8969
+ ArdiumErrorComponent,
8970
+ ],
8971
+ imports: [CommonModule, ArdiumHintDirective, ArdiumErrorDirective],
8972
+ exports: [
8973
+ ArdiumFormFieldComponent,
8974
+ ArdiumHorizontalFormFieldComponent,
8975
+ ArdiumLabelComponent,
8976
+ ArdiumHintComponent,
8977
+ ArdiumErrorComponent,
8978
+ ],
8979
+ }]
8980
+ }] });
8981
+
8532
8982
  const _kbdDefaults = {
8533
8983
  full: false,
8534
8984
  appearance: FormElementAppearance.Outlined,
@@ -9566,7 +10016,7 @@ class ArdiumTablePaginationComponent extends _FocusableComponentBase {
9566
10016
  this._emitPageEvent();
9567
10017
  }
9568
10018
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumTablePaginationComponent, deps: [{ token: ARD_TABLE_PAGINATION_DEFAULTS }], target: i0.ɵɵFactoryTarget.Component }); }
9569
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ArdiumTablePaginationComponent, selector: "ard-table-pagination", inputs: { totalItems: { classPropertyName: "totalItems", publicName: "totalItems", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, itemsPerPage: { classPropertyName: "itemsPerPage", publicName: "itemsPerPage", isSignal: true, isRequired: false, transformFunction: null }, page: { classPropertyName: "page", publicName: "page", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null }, useFirstLastButtons: { classPropertyName: "useFirstLastButtons", publicName: "useFirstLastButtons", isSignal: true, isRequired: false, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, itemsPerPageText: { classPropertyName: "itemsPerPageText", publicName: "itemsPerPageText", isSignal: true, isRequired: false, transformFunction: null }, currentItemsFormatFn: { classPropertyName: "currentItemsFormatFn", publicName: "currentItemsFormatFn", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemsPerPage: "itemsPerPageChange", page: "pageChange", itemsPerPageChangeEvent: "itemsPerPageChange", pageChangeEvent: "pageChange" }, usesInheritance: true, ngImport: i0, template: "<div\n class=\"ard-pagination\"\n [ngClass]=\"ngClasses()\"\n>\n <div class=\"ard-pagination__items-per-page\">\n <div class=\"ard-pagination__text\">{{ itemsPerPageText() }}</div>\n <ard-select\n [items]=\"options()\"\n [compact]=\"compact()\"\n [value]=\"itemsPerPage()\"\n autoHighlightFirst=\"false\"\n [disabled]=\"disabled()\"\n (valueChange)=\"onItemsPerPageChange($event[0])\"\n clearable=\"false\"\n />\n </div>\n <div class=\"ard-pagination__current-page\">\n <div class=\"ard-pagination__text\">\n {{ currentItemsFormatFn()(getCurrentItemsContext()) }}\n </div>\n <div class=\"ard-pagination__buttons\">\n @if (useFirstLastButtons()) {\n <ard-icon-button\n [color]=\"color()\"\n [compact]=\"compact()\"\n [disabled]=\"disabled() || firstPageDisabled()\"\n (click)=\"onFirstPage()\"\n >\n <ard-icon>first page</ard-icon>\n </ard-icon-button>\n }\n <ard-icon-button\n [color]=\"color()\"\n [compact]=\"compact()\"\n [disabled]=\"disabled() || firstPageDisabled()\"\n (click)=\"onPrevPage()\"\n >\n <ard-icon>navigate before</ard-icon>\n </ard-icon-button>\n <ard-icon-button\n [color]=\"color()\"\n [compact]=\"compact()\"\n [disabled]=\"disabled() || lastPageDisabled()\"\n (click)=\"onNextPage()\"\n >\n <ard-icon>navigate next</ard-icon>\n </ard-icon-button>\n @if (useFirstLastButtons()) {\n <ard-icon-button\n [color]=\"color()\"\n [compact]=\"compact()\"\n [disabled]=\"disabled() || lastPageDisabled()\"\n (click)=\"onLastPage()\"\n >\n <ard-icon>last page</ard-icon>\n </ard-icon-button>\n }\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ArdiumSelectComponent, selector: "ard-select", inputs: ["valueFrom", "labelFrom", "disabledFrom", "groupLabelFrom", "groupDisabledFrom", "childrenFrom", "placeholder", "searchPlaceholder", "clearButtonTitle", "dropdownPosition", "noItemsFoundText", "loadingPlaceholderText", "searchInputId", "inputAttrs", "isLoading", "htmlId", "itemsAlreadyGrouped", "invertDisabled", "noGroupActions", "autoHighlightFirst", "autoFocus", "keepOpen", "hideSelected", "noBackspaceClear", "sortMultipleValues", "searchCaseSensitive", "keepSearchAfterSelect", "maxSelectedItems", "itemDisplayLimit", "searchFn", "compareWith", "appearance", "variant", "compact", "dropdownAppearance", "dropdownVariant", "items", "multiselectable", "clearable", "searchable", "addCustom", "value", "isOpen"], outputs: ["valueChange", "change", "add", "failedToAdd", "remove", "clear", "open", "close", "scroll", "scrollToEnd", "search", "isOpenChange"] }, { kind: "component", type: ArdiumIconButtonComponent, selector: "ard-icon-button", inputs: ["wrapperClasses", "type", "color", "lightColoring", "compact"] }, { kind: "component", type: ArdiumIconComponent, selector: "ard-icon", inputs: ["ariaLabel", "icon", "filled", "weight", "grade", "opticalSize"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
10019
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ArdiumTablePaginationComponent, selector: "ard-table-pagination", inputs: { totalItems: { classPropertyName: "totalItems", publicName: "totalItems", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, itemsPerPage: { classPropertyName: "itemsPerPage", publicName: "itemsPerPage", isSignal: true, isRequired: false, transformFunction: null }, page: { classPropertyName: "page", publicName: "page", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null }, useFirstLastButtons: { classPropertyName: "useFirstLastButtons", publicName: "useFirstLastButtons", isSignal: true, isRequired: false, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, itemsPerPageText: { classPropertyName: "itemsPerPageText", publicName: "itemsPerPageText", isSignal: true, isRequired: false, transformFunction: null }, currentItemsFormatFn: { classPropertyName: "currentItemsFormatFn", publicName: "currentItemsFormatFn", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemsPerPage: "itemsPerPageChange", page: "pageChange", itemsPerPageChangeEvent: "itemsPerPageChange", pageChangeEvent: "pageChange" }, usesInheritance: true, ngImport: i0, template: "<div\n class=\"ard-pagination\"\n [ngClass]=\"ngClasses()\"\n>\n <div class=\"ard-pagination__items-per-page\">\n <div class=\"ard-pagination__text\">{{ itemsPerPageText() }}</div>\n <ard-select\n [items]=\"options()\"\n [compact]=\"compact()\"\n [value]=\"itemsPerPage()\"\n autoHighlightFirst=\"false\"\n [disabled]=\"disabled()\"\n (valueChange)=\"onItemsPerPageChange($event[0])\"\n clearable=\"false\"\n />\n </div>\n <div class=\"ard-pagination__current-page\">\n <div class=\"ard-pagination__text\">\n {{ currentItemsFormatFn()(getCurrentItemsContext()) }}\n </div>\n <div class=\"ard-pagination__buttons\">\n @if (useFirstLastButtons()) {\n <ard-icon-button\n [color]=\"color()\"\n [compact]=\"compact()\"\n [disabled]=\"disabled() || firstPageDisabled()\"\n (click)=\"onFirstPage()\"\n >\n <ard-icon>first page</ard-icon>\n </ard-icon-button>\n }\n <ard-icon-button\n [color]=\"color()\"\n [compact]=\"compact()\"\n [disabled]=\"disabled() || firstPageDisabled()\"\n (click)=\"onPrevPage()\"\n >\n <ard-icon>navigate before</ard-icon>\n </ard-icon-button>\n <ard-icon-button\n [color]=\"color()\"\n [compact]=\"compact()\"\n [disabled]=\"disabled() || lastPageDisabled()\"\n (click)=\"onNextPage()\"\n >\n <ard-icon>navigate next</ard-icon>\n </ard-icon-button>\n @if (useFirstLastButtons()) {\n <ard-icon-button\n [color]=\"color()\"\n [compact]=\"compact()\"\n [disabled]=\"disabled() || lastPageDisabled()\"\n (click)=\"onLastPage()\"\n >\n <ard-icon>last page</ard-icon>\n </ard-icon-button>\n }\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ArdiumSelectComponent, selector: "ard-select", inputs: ["valueFrom", "labelFrom", "disabledFrom", "groupLabelFrom", "groupDisabledFrom", "childrenFrom", "placeholder", "searchPlaceholder", "clearButtonTitle", "dropdownPosition", "noItemsFoundText", "loadingPlaceholderText", "searchInputId", "inputAttrs", "isLoading", "itemsAlreadyGrouped", "invertDisabled", "noGroupActions", "autoHighlightFirst", "autoFocus", "keepOpen", "hideSelected", "noBackspaceClear", "sortMultipleValues", "searchCaseSensitive", "keepSearchAfterSelect", "maxSelectedItems", "itemDisplayLimit", "searchFn", "compareWith", "appearance", "variant", "compact", "dropdownAppearance", "dropdownVariant", "items", "multiselectable", "clearable", "searchable", "addCustom", "value", "isOpen"], outputs: ["valueChange", "change", "add", "failedToAdd", "remove", "clear", "open", "close", "scroll", "scrollToEnd", "search", "isOpenChange"] }, { kind: "component", type: ArdiumIconButtonComponent, selector: "ard-icon-button", inputs: ["wrapperClasses", "type", "color", "lightColoring", "compact"] }, { kind: "component", type: ArdiumIconComponent, selector: "ard-icon", inputs: ["ariaLabel", "icon", "filled", "weight", "grade", "opticalSize"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
9570
10020
  }
9571
10021
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumTablePaginationComponent, decorators: [{
9572
10022
  type: Component,
@@ -10033,7 +10483,7 @@ class ArdiumTableComponent extends _FocusableComponentBase {
10033
10483
  };
10034
10484
  }
10035
10485
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumTableComponent, deps: [{ token: ARD_TABLE_DEFAULTS }], target: i0.ɵɵFactoryTarget.Component }); }
10036
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ArdiumTableComponent, selector: "ard-table", inputs: { rowDisabledFrom: { classPropertyName: "rowDisabledFrom", publicName: "rowDisabledFrom", isSignal: true, isRequired: false, transformFunction: null }, rowBoldFrom: { classPropertyName: "rowBoldFrom", publicName: "rowBoldFrom", isSignal: true, isRequired: false, transformFunction: null }, invertRowDisabled: { classPropertyName: "invertRowDisabled", publicName: "invertRowDisabled", isSignal: true, isRequired: false, transformFunction: null }, invertRowBold: { classPropertyName: "invertRowBold", publicName: "invertRowBold", isSignal: true, isRequired: false, transformFunction: null }, selectableRows: { classPropertyName: "selectableRows", publicName: "selectableRows", isSignal: true, isRequired: false, transformFunction: null }, maxSelectedItems: { classPropertyName: "maxSelectedItems", publicName: "maxSelectedItems", isSignal: true, isRequired: false, transformFunction: null }, clickableRows: { classPropertyName: "clickableRows", publicName: "clickableRows", isSignal: true, isRequired: false, transformFunction: null }, caption: { classPropertyName: "caption", publicName: "caption", isSignal: true, isRequired: false, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, loadingProgress: { classPropertyName: "loadingProgress", publicName: "loadingProgress", isSignal: true, isRequired: false, transformFunction: null }, loadingProgressBuffer: { classPropertyName: "loadingProgressBuffer", publicName: "loadingProgressBuffer", isSignal: true, isRequired: false, transformFunction: null }, loadingBarMode: { classPropertyName: "loadingBarMode", publicName: "loadingBarMode", isSignal: true, isRequired: false, transformFunction: null }, loadingBarColor: { classPropertyName: "loadingBarColor", publicName: "loadingBarColor", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, headerAlign: { classPropertyName: "headerAlign", publicName: "headerAlign", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null }, zebra: { classPropertyName: "zebra", publicName: "zebra", isSignal: true, isRequired: false, transformFunction: null }, stickyHeader: { classPropertyName: "stickyHeader", publicName: "stickyHeader", isSignal: true, isRequired: false, transformFunction: null }, paginated: { classPropertyName: "paginated", publicName: "paginated", isSignal: true, isRequired: false, transformFunction: null }, paginationStrategy: { classPropertyName: "paginationStrategy", publicName: "paginationStrategy", isSignal: true, isRequired: false, transformFunction: null }, paginationOptions: { classPropertyName: "paginationOptions", publicName: "paginationOptions", isSignal: true, isRequired: false, transformFunction: null }, totalItems: { classPropertyName: "totalItems", publicName: "totalItems", isSignal: true, isRequired: false, transformFunction: null }, paginationColor: { classPropertyName: "paginationColor", publicName: "paginationColor", isSignal: true, isRequired: false, transformFunction: null }, paginationAlign: { classPropertyName: "paginationAlign", publicName: "paginationAlign", isSignal: true, isRequired: false, transformFunction: null }, itemsPerPageText: { classPropertyName: "itemsPerPageText", publicName: "itemsPerPageText", isSignal: true, isRequired: false, transformFunction: null }, currentItemsFormatFn: { classPropertyName: "currentItemsFormatFn", publicName: "currentItemsFormatFn", isSignal: true, isRequired: false, transformFunction: null }, pageFillRemaining: { classPropertyName: "pageFillRemaining", publicName: "pageFillRemaining", isSignal: true, isRequired: false, transformFunction: null }, paginationDisabled: { classPropertyName: "paginationDisabled", publicName: "paginationDisabled", isSignal: true, isRequired: false, transformFunction: null }, useFirstLastButtons: { classPropertyName: "useFirstLastButtons", publicName: "useFirstLastButtons", isSignal: true, isRequired: false, transformFunction: null }, itemsPerPage: { classPropertyName: "itemsPerPage", publicName: "itemsPerPage", isSignal: true, isRequired: false, transformFunction: null }, page: { classPropertyName: "page", publicName: "page", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: false, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: false, isRequired: false, transformFunction: null }, treatDataSourceAsString: { classPropertyName: "treatDataSourceAsString", publicName: "treatDataSourceAsString", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemsPerPage: "itemsPerPageChange", page: "pageChange", selectedRowsChangeEvent: "selectedRowsChange", failedSelectRowEvent: "failedSelectRow", selectRowEvent: "selectRow", unselectRowEvent: "unselectRow", clickRowEvent: "clickRow" }, queries: [{ propertyName: "checkboxTemplate", first: true, predicate: ArdiumTableCheckboxTemplateDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "headerCheckboxTemplate", first: true, predicate: ArdiumTableHeaderCheckboxTemplateDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "captionTemplate", first: true, predicate: ArdiumTableCaptionTemplateDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "templateChildren", predicate: ArdiumTableTemplateDirective, isSignal: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<table\n class=\"ard-table\"\n [ngClass]=\"ngClasses()\"\n>\n @if (caption()) {\n <caption class=\"ard-table__caption\">\n <div class=\"ard-table__caption-container\">\n <ng-template\n #defaultCaptionTemplate\n let-captionText\n >\n {{ captionText }}\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"captionTemplate() ?? defaultCaptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: caption() }\"\n />\n </div>\n </caption>\n }\n <thead class=\"ard-table__header\">\n @for (row of headerCells(); track $index) {\n <tr class=\"ard-table__header-row\">\n @for (cell of row; track $index) {\n <th\n class=\"ard-table__header-cell\"\n [ngClass]=\"cell.cell().cellClass\"\n [class.ard-table__checkbox-cell]=\"isHeaderCellCheckbox(cell)\"\n [attr.colspan]=\"cell.colspan()\"\n [attr.rowspan]=\"cell.rowspan()\"\n [scope]=\"cell.colspan() > 1 ? 'colgroup' : 'col'\"\n >\n <div\n class=\"ard-table__cell-container\"\n [class.ard-table__sortable]=\"isHeaderCellSortable(cell)\"\n [style.width]=\"cell.width\"\n [style.minWidth]=\"cell.minWidth\"\n >\n @if (isHeaderCellCheckbox(cell)) {\n <ng-template\n #defaultHeaderCheckboxTemplate\n let-state\n let-onChange=\"onChange\"\n >\n <ard-checkbox\n [tabIndex]=\"isLoading() ? -1 : tabIndex()\"\n [state]=\"state\"\n [color]=\"getHeaderCheckboxColor()\"\n unselectedColor=\"currentColor\"\n (change)=\"onChange()\"\n />\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"headerCheckboxTemplate() ?? defaultHeaderCheckboxTemplate\"\n [ngTemplateOutletContext]=\"getHeaderCheckboxContext()\"\n />\n } @else {\n <ng-template\n #defaultHeaderCellTemplate\n let-content\n let-sortable=\"sortable\"\n let-sortType=\"sortType\"\n let-onTriggerSort=\"onTriggerSort\"\n let-onTriggerResetSort=\"onTriggerResetSort\"\n >\n <div\n class=\"ard-table__header-template-container\"\n [class.ard-sortable]=\"sortable\"\n [class.ard-nonsortable]=\"!sortable\"\n >\n @if (sortable) {\n <button\n type=\"button\"\n class=\"ard-table__header-content-container\"\n (click)=\"onTriggerSort($event)\"\n [tabindex]=\"tabIndex()\"\n (keydown.Esc)=\"onTriggerResetSort($event)\"\n >\n <div class=\"ard-table__header-content\">{{ content }}</div>\n @if (sortType !== null) {\n <div class=\"ard-table__header-sort-icon\">\n @if (sortType === 'ascending') {\n <ard-icon>south</ard-icon>\n } @else if (sortType === 'descending') {\n <ard-icon>north</ard-icon>\n }\n </div>\n }\n </button>\n } @else {\n <div class=\"ard-table__header-content-container\">\n <div class=\"ard-table__header-content\">{{ content }}</div>\n </div>\n }\n </div>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"getHeaderTemplate(cell.cell().header) ?? defaultHeaderCellTemplate\"\n [ngTemplateOutletContext]=\"getHeaderContext(cell.cell(), $index)\"\n />\n }\n </div>\n </th>\n }\n </tr>\n }\n <tr class=\"ard-table__progress-bar-row\">\n <th\n class=\"ard-table__progress-bar-cell\"\n colspan=\"9999\"\n >\n @if (isLoading()) {\n <ard-progress-bar\n [value]=\"loadingProgress()\"\n [bufferValue]=\"loadingProgressBuffer()\"\n [mode]=\"loadingBarMode()\"\n [color]=\"loadingBarColor()\"\n variant=\"sharp\"\n hideValue\n />\n }\n </th>\n </tr>\n </thead>\n <tbody class=\"ard-table__body\">\n @for (row of dataRows(); track $index) {\n @if (row.isEmpty()) {\n <tr class=\"ard-table__empty-row\">\n <td\n class=\"ard-table__empty-cell\"\n colspan=\"9999\"\n ></td>\n </tr>\n } @else {\n <tr\n class=\"ard-table__body-row\"\n [class.ard-table__selected-row]=\"row.selected()\"\n [class.ard-table__highlighted-row]=\"row.highlighted()\"\n [class.ard-table__disabled-row]=\"row.disabled()\"\n [class.ard-table__bold-row]=\"row.bold()\"\n (click)=\"onRowClick(row, $event)\"\n (mouseover)=\"onRowMouseOver($event)\"\n (mouseenter)=\"onRowMouseEnter(row.index(), $event)\"\n (mouseleave)=\"onRowMouseLeave(row.index(), $event)\"\n >\n @for (cell of row.data(); track $index) {\n <ng-template #cellTmp>\n <div\n class=\"ard-table__cell-container\"\n [style]=\"getCellStyle(row.dataColumns()[$index])\"\n >\n @if (isCellCheckbox(cell)) {\n <ng-template\n #defaultCheckboxTemplate\n let-isChecked\n let-onChange=\"onChange\"\n let-disabled=\"disabled\"\n >\n <ard-checkbox\n [tabIndex]=\"isLoading() ? -1 : tabIndex()\"\n [selected]=\"isChecked\"\n [color]=\"color()\"\n [disabled]=\"disabled\"\n (change)=\"onChange()\"\n (click)=\"$event.stopPropagation()\"\n />\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"checkboxTemplate() ?? defaultCheckboxTemplate\"\n [ngTemplateOutletContext]=\"getCheckboxContext(row.index())\"\n />\n } @else {\n <ng-template\n #defaultCellTemplate\n let-content\n >\n {{ content }}\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"getCellTemplate(row.dataColumns()[$index].template) ?? defaultCellTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: cell }\"\n />\n }\n </div>\n </ng-template>\n @if (!row.dataColumns()[$index].isRowHeader) {\n <td\n class=\"ard-table__body-cell\"\n [ngClass]=\"row.dataColumns()[$index].cellClass\"\n [class.ard-table__checkbox-cell]=\"isCellCheckbox(cell)\"\n >\n <ng-template [ngTemplateOutlet]=\"cellTmp\"></ng-template>\n </td>\n } @else {\n <th\n class=\"ard-table__body-cell ard-table__row-header\"\n scope=\"row\"\n [ngClass]=\"row.dataColumns()[$index].cellClass\"\n [class.ard-table__checkbox-cell]=\"isCellCheckbox(cell)\"\n >\n <ng-template [ngTemplateOutlet]=\"cellTmp\"></ng-template>\n </th>\n }\n }\n </tr>\n }\n }\n </tbody>\n @if (canDisplayPagination()) {\n <tfoot class=\"ard-table__foot\">\n <tr class=\"ard-table__foot-row\">\n <td\n class=\"ard-table__pagination-cell\"\n colspan=\"9999\"\n >\n <ard-table-pagination\n [options]=\"paginationOptions()\"\n [totalItems]=\"totalItems()!\"\n [disabled]=\"paginationDisabled()\"\n [(itemsPerPage)]=\"itemsPerPage\"\n [(page)]=\"page\"\n [align]=\"paginationAlign()\"\n [isLoading]=\"isLoading()\"\n [itemsPerPageText]=\"itemsPerPageText()\"\n [currentItemsFormatFn]=\"currentItemsFormatFn()\"\n />\n </td>\n </tr>\n </tfoot>\n }\n</table>\n", styles: [".ard-table__cell-container,.ard-table__header-template-container{width:100%;height:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ArdiumCheckboxComponent, selector: "ard-checkbox", inputs: ["htmlId", "color", "unselectedColor", "state"], outputs: ["stateChange"] }, { kind: "component", type: ArdiumTablePaginationComponent, selector: "ard-table-pagination", inputs: ["totalItems", "options", "itemsPerPage", "page", "color", "align", "compact", "useFirstLastButtons", "isLoading", "itemsPerPageText", "currentItemsFormatFn"], outputs: ["itemsPerPageChange", "pageChange"] }, { kind: "component", type: ArdiumIconComponent, selector: "ard-icon", inputs: ["ariaLabel", "icon", "filled", "weight", "grade", "opticalSize"] }, { kind: "component", type: ArdiumProgressBarComponent, selector: "ard-progress-bar", inputs: ["value", "bufferValue", "color", "variant", "size", "mode", "hideValue"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
10486
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ArdiumTableComponent, selector: "ard-table", inputs: { rowDisabledFrom: { classPropertyName: "rowDisabledFrom", publicName: "rowDisabledFrom", isSignal: true, isRequired: false, transformFunction: null }, rowBoldFrom: { classPropertyName: "rowBoldFrom", publicName: "rowBoldFrom", isSignal: true, isRequired: false, transformFunction: null }, invertRowDisabled: { classPropertyName: "invertRowDisabled", publicName: "invertRowDisabled", isSignal: true, isRequired: false, transformFunction: null }, invertRowBold: { classPropertyName: "invertRowBold", publicName: "invertRowBold", isSignal: true, isRequired: false, transformFunction: null }, selectableRows: { classPropertyName: "selectableRows", publicName: "selectableRows", isSignal: true, isRequired: false, transformFunction: null }, maxSelectedItems: { classPropertyName: "maxSelectedItems", publicName: "maxSelectedItems", isSignal: true, isRequired: false, transformFunction: null }, clickableRows: { classPropertyName: "clickableRows", publicName: "clickableRows", isSignal: true, isRequired: false, transformFunction: null }, caption: { classPropertyName: "caption", publicName: "caption", isSignal: true, isRequired: false, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, loadingProgress: { classPropertyName: "loadingProgress", publicName: "loadingProgress", isSignal: true, isRequired: false, transformFunction: null }, loadingProgressBuffer: { classPropertyName: "loadingProgressBuffer", publicName: "loadingProgressBuffer", isSignal: true, isRequired: false, transformFunction: null }, loadingBarMode: { classPropertyName: "loadingBarMode", publicName: "loadingBarMode", isSignal: true, isRequired: false, transformFunction: null }, loadingBarColor: { classPropertyName: "loadingBarColor", publicName: "loadingBarColor", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, headerAlign: { classPropertyName: "headerAlign", publicName: "headerAlign", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null }, zebra: { classPropertyName: "zebra", publicName: "zebra", isSignal: true, isRequired: false, transformFunction: null }, stickyHeader: { classPropertyName: "stickyHeader", publicName: "stickyHeader", isSignal: true, isRequired: false, transformFunction: null }, paginated: { classPropertyName: "paginated", publicName: "paginated", isSignal: true, isRequired: false, transformFunction: null }, paginationStrategy: { classPropertyName: "paginationStrategy", publicName: "paginationStrategy", isSignal: true, isRequired: false, transformFunction: null }, paginationOptions: { classPropertyName: "paginationOptions", publicName: "paginationOptions", isSignal: true, isRequired: false, transformFunction: null }, totalItems: { classPropertyName: "totalItems", publicName: "totalItems", isSignal: true, isRequired: false, transformFunction: null }, paginationColor: { classPropertyName: "paginationColor", publicName: "paginationColor", isSignal: true, isRequired: false, transformFunction: null }, paginationAlign: { classPropertyName: "paginationAlign", publicName: "paginationAlign", isSignal: true, isRequired: false, transformFunction: null }, itemsPerPageText: { classPropertyName: "itemsPerPageText", publicName: "itemsPerPageText", isSignal: true, isRequired: false, transformFunction: null }, currentItemsFormatFn: { classPropertyName: "currentItemsFormatFn", publicName: "currentItemsFormatFn", isSignal: true, isRequired: false, transformFunction: null }, pageFillRemaining: { classPropertyName: "pageFillRemaining", publicName: "pageFillRemaining", isSignal: true, isRequired: false, transformFunction: null }, paginationDisabled: { classPropertyName: "paginationDisabled", publicName: "paginationDisabled", isSignal: true, isRequired: false, transformFunction: null }, useFirstLastButtons: { classPropertyName: "useFirstLastButtons", publicName: "useFirstLastButtons", isSignal: true, isRequired: false, transformFunction: null }, itemsPerPage: { classPropertyName: "itemsPerPage", publicName: "itemsPerPage", isSignal: true, isRequired: false, transformFunction: null }, page: { classPropertyName: "page", publicName: "page", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: false, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: false, isRequired: false, transformFunction: null }, treatDataSourceAsString: { classPropertyName: "treatDataSourceAsString", publicName: "treatDataSourceAsString", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemsPerPage: "itemsPerPageChange", page: "pageChange", selectedRowsChangeEvent: "selectedRowsChange", failedSelectRowEvent: "failedSelectRow", selectRowEvent: "selectRow", unselectRowEvent: "unselectRow", clickRowEvent: "clickRow" }, queries: [{ propertyName: "checkboxTemplate", first: true, predicate: ArdiumTableCheckboxTemplateDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "headerCheckboxTemplate", first: true, predicate: ArdiumTableHeaderCheckboxTemplateDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "captionTemplate", first: true, predicate: ArdiumTableCaptionTemplateDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "templateChildren", predicate: ArdiumTableTemplateDirective, isSignal: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<table\n class=\"ard-table\"\n [ngClass]=\"ngClasses()\"\n>\n @if (caption()) {\n <caption class=\"ard-table__caption\">\n <div class=\"ard-table__caption-container\">\n <ng-template\n #defaultCaptionTemplate\n let-captionText\n >\n {{ captionText }}\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"captionTemplate() ?? defaultCaptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: caption() }\"\n />\n </div>\n </caption>\n }\n <thead class=\"ard-table__header\">\n @for (row of headerCells(); track $index) {\n <tr class=\"ard-table__header-row\">\n @for (cell of row; track $index) {\n <th\n class=\"ard-table__header-cell\"\n [ngClass]=\"cell.cell().cellClass\"\n [class.ard-table__checkbox-cell]=\"isHeaderCellCheckbox(cell)\"\n [attr.colspan]=\"cell.colspan()\"\n [attr.rowspan]=\"cell.rowspan()\"\n [scope]=\"cell.colspan() > 1 ? 'colgroup' : 'col'\"\n >\n <div\n class=\"ard-table__cell-container\"\n [class.ard-table__sortable]=\"isHeaderCellSortable(cell)\"\n [style.width]=\"cell.width\"\n [style.minWidth]=\"cell.minWidth\"\n >\n @if (isHeaderCellCheckbox(cell)) {\n <ng-template\n #defaultHeaderCheckboxTemplate\n let-state\n let-onChange=\"onChange\"\n >\n <ard-checkbox\n [tabIndex]=\"isLoading() ? -1 : tabIndex()\"\n [state]=\"state\"\n [color]=\"getHeaderCheckboxColor()\"\n unselectedColor=\"currentColor\"\n (change)=\"onChange()\"\n />\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"headerCheckboxTemplate() ?? defaultHeaderCheckboxTemplate\"\n [ngTemplateOutletContext]=\"getHeaderCheckboxContext()\"\n />\n } @else {\n <ng-template\n #defaultHeaderCellTemplate\n let-content\n let-sortable=\"sortable\"\n let-sortType=\"sortType\"\n let-onTriggerSort=\"onTriggerSort\"\n let-onTriggerResetSort=\"onTriggerResetSort\"\n >\n <div\n class=\"ard-table__header-template-container\"\n [class.ard-sortable]=\"sortable\"\n [class.ard-nonsortable]=\"!sortable\"\n >\n @if (sortable) {\n <button\n type=\"button\"\n class=\"ard-table__header-content-container\"\n (click)=\"onTriggerSort($event)\"\n [tabindex]=\"tabIndex()\"\n (keydown.Esc)=\"onTriggerResetSort($event)\"\n >\n <div class=\"ard-table__header-content\">{{ content }}</div>\n @if (sortType !== null) {\n <div class=\"ard-table__header-sort-icon\">\n @if (sortType === 'ascending') {\n <ard-icon>south</ard-icon>\n } @else if (sortType === 'descending') {\n <ard-icon>north</ard-icon>\n }\n </div>\n }\n </button>\n } @else {\n <div class=\"ard-table__header-content-container\">\n <div class=\"ard-table__header-content\">{{ content }}</div>\n </div>\n }\n </div>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"getHeaderTemplate(cell.cell().header) ?? defaultHeaderCellTemplate\"\n [ngTemplateOutletContext]=\"getHeaderContext(cell.cell(), $index)\"\n />\n }\n </div>\n </th>\n }\n </tr>\n }\n <tr class=\"ard-table__progress-bar-row\">\n <th\n class=\"ard-table__progress-bar-cell\"\n colspan=\"9999\"\n >\n @if (isLoading()) {\n <ard-progress-bar\n [value]=\"loadingProgress()\"\n [bufferValue]=\"loadingProgressBuffer()\"\n [mode]=\"loadingBarMode()\"\n [color]=\"loadingBarColor()\"\n variant=\"sharp\"\n hideValue\n />\n }\n </th>\n </tr>\n </thead>\n <tbody class=\"ard-table__body\">\n @for (row of dataRows(); track $index) {\n @if (row.isEmpty()) {\n <tr class=\"ard-table__empty-row\">\n <td\n class=\"ard-table__empty-cell\"\n colspan=\"9999\"\n ></td>\n </tr>\n } @else {\n <tr\n class=\"ard-table__body-row\"\n [class.ard-table__selected-row]=\"row.selected()\"\n [class.ard-table__highlighted-row]=\"row.highlighted()\"\n [class.ard-table__disabled-row]=\"row.disabled()\"\n [class.ard-table__bold-row]=\"row.bold()\"\n (click)=\"onRowClick(row, $event)\"\n (mouseover)=\"onRowMouseOver($event)\"\n (mouseenter)=\"onRowMouseEnter(row.index(), $event)\"\n (mouseleave)=\"onRowMouseLeave(row.index(), $event)\"\n >\n @for (cell of row.data(); track $index) {\n <ng-template #cellTmp>\n <div\n class=\"ard-table__cell-container\"\n [style]=\"getCellStyle(row.dataColumns()[$index])\"\n >\n @if (isCellCheckbox(cell)) {\n <ng-template\n #defaultCheckboxTemplate\n let-isChecked\n let-onChange=\"onChange\"\n let-disabled=\"disabled\"\n >\n <ard-checkbox\n [tabIndex]=\"isLoading() ? -1 : tabIndex()\"\n [selected]=\"isChecked\"\n [color]=\"color()\"\n [disabled]=\"disabled\"\n (change)=\"onChange()\"\n (click)=\"$event.stopPropagation()\"\n />\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"checkboxTemplate() ?? defaultCheckboxTemplate\"\n [ngTemplateOutletContext]=\"getCheckboxContext(row.index())\"\n />\n } @else {\n <ng-template\n #defaultCellTemplate\n let-content\n >\n {{ content }}\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"getCellTemplate(row.dataColumns()[$index].template) ?? defaultCellTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: cell }\"\n />\n }\n </div>\n </ng-template>\n @if (!row.dataColumns()[$index].isRowHeader) {\n <td\n class=\"ard-table__body-cell\"\n [ngClass]=\"row.dataColumns()[$index].cellClass\"\n [class.ard-table__checkbox-cell]=\"isCellCheckbox(cell)\"\n >\n <ng-template [ngTemplateOutlet]=\"cellTmp\"></ng-template>\n </td>\n } @else {\n <th\n class=\"ard-table__body-cell ard-table__row-header\"\n scope=\"row\"\n [ngClass]=\"row.dataColumns()[$index].cellClass\"\n [class.ard-table__checkbox-cell]=\"isCellCheckbox(cell)\"\n >\n <ng-template [ngTemplateOutlet]=\"cellTmp\"></ng-template>\n </th>\n }\n }\n </tr>\n }\n }\n </tbody>\n @if (canDisplayPagination()) {\n <tfoot class=\"ard-table__foot\">\n <tr class=\"ard-table__foot-row\">\n <td\n class=\"ard-table__pagination-cell\"\n colspan=\"9999\"\n >\n <ard-table-pagination\n [options]=\"paginationOptions()\"\n [totalItems]=\"totalItems()!\"\n [disabled]=\"paginationDisabled()\"\n [(itemsPerPage)]=\"itemsPerPage\"\n [(page)]=\"page\"\n [align]=\"paginationAlign()\"\n [isLoading]=\"isLoading()\"\n [itemsPerPageText]=\"itemsPerPageText()\"\n [currentItemsFormatFn]=\"currentItemsFormatFn()\"\n />\n </td>\n </tr>\n </tfoot>\n }\n</table>\n", styles: [".ard-table__cell-container,.ard-table__header-template-container{width:100%;height:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ArdiumCheckboxComponent, selector: "ard-checkbox", inputs: ["color", "unselectedColor", "state"], outputs: ["stateChange"] }, { kind: "component", type: ArdiumTablePaginationComponent, selector: "ard-table-pagination", inputs: ["totalItems", "options", "itemsPerPage", "page", "color", "align", "compact", "useFirstLastButtons", "isLoading", "itemsPerPageText", "currentItemsFormatFn"], outputs: ["itemsPerPageChange", "pageChange"] }, { kind: "component", type: ArdiumIconComponent, selector: "ard-icon", inputs: ["ariaLabel", "icon", "filled", "weight", "grade", "opticalSize"] }, { kind: "component", type: ArdiumProgressBarComponent, selector: "ard-progress-bar", inputs: ["value", "bufferValue", "color", "variant", "size", "mode", "hideValue"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
10037
10487
  }
10038
10488
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumTableComponent, decorators: [{
10039
10489
  type: Component,
@@ -11337,5 +11787,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
11337
11787
  * Generated bundle index. Do not edit.
11338
11788
  */
11339
11789
 
11340
- export { ARD_BADGE_DEFAULTS, ARD_BUTTON_DEFAULTS, ARD_CARD_DEFAULTS, ARD_CHECKBOX_DEFAULTS, ARD_CHECKBOX_LIST_DEFAULTS, ARD_CHIP_DEFAULTS, ARD_COLOR_DISPLAY_DEFAULTS, ARD_DELETABLE_CHIP_DEFAULTS, ARD_DIALOG_DEFAULTS, ARD_DIGIT_INPUT_DEFAULTS, ARD_DIVIDER_DEFAULTS, ARD_DROPDOWN_PANEL_DEFAULTS, ARD_FAB_DEFAULTS, ARD_FILE_DROP_AREA_DEFAULTS, ARD_FILE_INPUT_DEFAULTS, ARD_FORM_FIELD_FRAME_DEFAULTS, ARD_HEX_INPUT_DEFAULTS, ARD_ICON_BUTTON_DEFAULTS, ARD_ICON_DEFAULTS, ARD_KBD_DEFAULTS, ARD_KBD_SHORTCUT_DEFAULTS, ARD_MODAL_DEFAULTS, ARD_NUMBER_INPUT_DEFAULTS, ARD_PASSWORD_INPUT_DEFAULTS, ARD_PROGRESS_BAR_DEFAULTS, ARD_PROGRESS_CIRCLE_DEFAULTS, ARD_RADIO_DEFAULTS, ARD_SEGMENT_DEFAULTS, ARD_SELECTABLE_CHIP_DEFAULTS, ARD_SELECT_DEFAULTS, ARD_SIMPLE_INPUT_DEFAULTS, ARD_SLIDER_DEFAULTS, ARD_SLIDE_TOGGLE_DEFAULTS, ARD_SNACKBAR_ANIMATION_LENGTH, ARD_SNACKBAR_DATA, ARD_SNACKBAR_DEFAULTS, ARD_SPINNER_DEFAULTS, ARD_STAR_BUTTON_DEFAULTS, ARD_STAR_DEFAULTS, ARD_STAR_DISPLAY_DEFAULTS, ARD_STAR_INPUT_DEFAULTS, ARD_STATEBOX_DEFAULTS, ARD_TABBER_DEFAULTS, ARD_TABLE_DEFAULTS, ARD_TABLE_FROM_CSV_DEFAULTS, ARD_TABLE_PAGINATION_DEFAULTS, ARD_TAB_DEFAULTS, ArdAddCustomTemplateDirective, ArdDialogButtonsTemplateDirective, ArdDropdownFooterTemplateDirective, ArdDropdownHeaderTemplateDirective, ArdFileInputPlaceholderTemplateDirective, ArdFileInputPrefixTemplateDirective, ArdFileInputSuffixTemplateDirective, ArdFormFieldPrefixTemplateDirective, ArdFormFieldSuffixTemplateDirective, ArdHexInputPlaceholderTemplateDirective, ArdHexInputPrefixTemplateDirective, ArdHexInputSuffixTemplateDirective, ArdInputLoadingTemplateDirective, ArdInputPlaceholderTemplateDirective, ArdInputPrefixTemplateDirective, ArdInputSuffixTemplateDirective, ArdInputSuggestionTemplateDirective, ArdItemDisplayLimitTemplateDirective, ArdItemLimitReachedTemplateDirective, ArdLoadingPlaceholderTemplateDirective, ArdLoadingSpinnerTemplateDirective, ArdNoItemsFoundTemplateDirective, ArdNumberInputPlaceholderTemplateDirective, ArdOptgroupTemplateDirective, ArdOptionTemplateDirective, ArdPanelPosition, ArdPasswordInputPlaceholderTemplateDirective, ArdPasswordInputPrefixTemplateDirective, ArdPasswordInputRevealButtonTemplateDirective, ArdPasswordInputSuffixTemplateDirective, ArdProgressBarValueTemplateDirective, ArdProgressCircleValueTemplateDirective, searchFunctions as ArdSearchFunction, ArdSegmentOptionTemplateDirective, ArdSelectPlaceholderTemplateDirective, ArdSelectPrefixTemplateDirective, ArdSelectSuffixTemplateDirective, ArdSimpleInputPlaceholderTemplateDirective, ArdSimpleInputPrefixTemplateDirective, ArdSimpleInputSuffixTemplateDirective, ArdSlideToggleAppearance, ArdSliderTooltipDirective, ArdSnackbarAlignment, ArdSnackbarOriginRelation, ArdSnackbarQueueHandling, ArdSnackbarRef, ArdSnackbarType, ArdValueChipTemplateDirective, ArdValueTemplateDirective, ArdiumBadgeDirective, ArdiumBadgeModule, ArdiumButtonComponent, ArdiumButtonModule, ArdiumCardActionButtonsDirective, ArdiumCardAvatarDirective, ArdiumCardComponent, ArdiumCardContentDirective, ArdiumCardDirective, ArdiumCardFooterDirective, ArdiumCardHeaderComponent, ArdiumCardImageDirective, ArdiumCardModule, ArdiumCardSubtitleDirective, ArdiumCardTitleDirective, ArdiumCheckboxComponent, ArdiumCheckboxListComponent, ArdiumCheckboxListModule, ArdiumCheckboxModule, ArdiumChipComponent, ArdiumChipModule, ArdiumColorDisplayComponent, ArdiumColorDisplayModule, ArdiumDeletableChipComponent, ArdiumDialogComponent, ArdiumDialogModule, ArdiumDigitInputComponent, ArdiumDigitInputModule, ArdiumDividerComponent, ArdiumDividerModule, ArdiumDropdownPanelComponent, ArdiumDropdownPanelModule, ArdiumFabComponent, ArdiumFabModule, ArdiumFileDropAreaComponent, ArdiumFileDropAreaDragoverContentTemplateDirective, ArdiumFileDropAreaIdleContentTemplateDirective, ArdiumFileDropAreaModule, ArdiumFileDropAreaUploadedContentTemplateDirective, ArdiumFileInputComponent, ArdiumFileInputDragoverContentTemplateDirective, ArdiumFileInputIdleContentTemplateDirective, ArdiumFileInputModule, ArdiumFileInputUploadedContentTemplateDirective, ArdiumFormFieldFrameComponent, ArdiumFormFieldFrameModule, ArdiumHexInputComponent, ArdiumHexInputModule, ArdiumIconButtonComponent, ArdiumIconButtonModule, ArdiumIconComponent, ArdiumIconModule, ArdiumIconPipe, ArdiumInputComponent, ArdiumInputModule, ArdiumKbdComponent, ArdiumKbdDirective, ArdiumKbdModule, ArdiumKbdPipe, ArdiumKbdShortcutComponent, ArdiumKbdShortcutModule, ArdiumModalComponent, ArdiumModalModule, ArdiumNumberInputComponent, ArdiumNumberInputModule, ArdiumOptionComponent, ArdiumOptionModule, ArdiumPasswordInputComponent, ArdiumPasswordInputModule, ArdiumProgressBarComponent, ArdiumProgressBarModule, ArdiumProgressCircleComponent, ArdiumProgressCircleModule, ArdiumRadioComponent, ArdiumRadioGroupComponent, ArdiumRadioModule, ArdiumRangeSliderComponent, ArdiumRangeSliderModule, ArdiumSegmentComponent, ArdiumSegmentModule, ArdiumSelectComponent, ArdiumSelectModule, ArdiumSelectableChipComponent, ArdiumSimpleInputComponent, ArdiumSimpleInputModule, ArdiumSlideToggleComponent, ArdiumSlideToggleModule, ArdiumSliderComponent, ArdiumSliderModule, ArdiumSnackbarService, ArdiumSpinnerComponent, ArdiumSpinnerModule, ArdiumStarButtonComponent, ArdiumStarButtonModule, ArdiumStarComponent, ArdiumStarDisplayComponent, ArdiumStarDisplayModule, ArdiumStarInputComponent, ArdiumStarInputModule, ArdiumStarModule, ArdiumStateboxComponent, ArdiumStateboxModule, ArdiumTabComponent, ArdiumTabberComponent, ArdiumTabberModule, ArdiumTableCaptionTemplateDirective, ArdiumTableCheckboxTemplateDirective, ArdiumTableComponent, ArdiumTableFromCsvComponent, ArdiumTableFromCsvModule, ArdiumTableHeaderCheckboxTemplateDirective, ArdiumTableModule, ArdiumTablePaginationComponent, ArdiumTablePaginationModule, ArdiumTablePaginationTemplateDirective, ArdiumTableTemplateDirective, ArdiumTextListComponent, ArdiumTextListModule, ArdiumTextListPipe, BadgePosition, BadgeSize, ButtonAppearance, ButtonVariant, CardAppearance, CardVariant, CheckboxListAlignType, CheckboxState, ClickStrategy, ColorDisplayAppearance, ComponentColor, DecorationElementAppearance, DialogResult, DigitInputPrimitiveOption, DigitInputShape, DropdownPanelAppearance, DropdownPanelVariant, FabSize, FormElementAppearance, FormElementVariant, OneAxisAlignment, OutlinedAppearance, PaginationAlign, PanelAppearance, PanelVariant, ProgressBarAppearance, ProgressBarMode, ProgressBarSize, ProgressBarVariant, ProgressCircleAppearance, ProgressCircleVariant, SegmentAppearance, SegmentVariant, SimpleComponentColor, SimpleOneAxisAlignment, SliderDecorationPosition, SliderTooltipBehavior, SortType, StarColor, StarFillMode, TableAlignType, TableAppearance, TablePaginationStrategy, TableVariant, TransformType, _chipDefaults, _modalDefaults, provideBadgeDefaults, provideButtonDefaults, provideCardDefaults, provideCheckboxDefaults, provideCheckboxListDefaults, provideChipDefaults, provideColorDisplayDefaults, provideDeletableChipDefaults, provideDialogDefaults, provideDigitInputDefaults, provideDividerDefaults, provideDropdownPanelDefaults, provideFabDefaults, provideFileDropAreaDefaults, provideFileInputDefaults, provideFormFieldFrameDefaults, provideHexInputDefaults, provideIconButtonDefaults, provideIconDefaults, provideKbdDefaults, provideKbdShortcutDefaults, provideModalDefaults, provideNumberInputDefaults, providePasswordInputDefaults, provideProgressBarDefaults, provideProgressCircleDefaults, provideRadioDefaults, provideSegmentDefaults, provideSelectDefaults, provideSelectableChipDefaults, provideSimpleInputDefaults, provideSlideToggleDefaults, provideSliderDefaults, provideSnackbarDefaults, provideSpinnerDefaults, provideStarButtonDefaults, provideStarDefaults, provideStarDisplayDefaults, provideStarInputDefaults, provideStateboxDefaults, provideTabDefaults, provideTabberDefaults, provideTableDefaults, provideTableFromCsvDefaults, provideTablePaginationDefaults, searchInString };
11790
+ export { ARD_BADGE_DEFAULTS, ARD_BUTTON_DEFAULTS, ARD_CARD_DEFAULTS, ARD_CHECKBOX_DEFAULTS, ARD_CHECKBOX_LIST_DEFAULTS, ARD_CHIP_DEFAULTS, ARD_COLOR_DISPLAY_DEFAULTS, ARD_DELETABLE_CHIP_DEFAULTS, ARD_DIALOG_DEFAULTS, ARD_DIGIT_INPUT_DEFAULTS, ARD_DIVIDER_DEFAULTS, ARD_DROPDOWN_PANEL_DEFAULTS, ARD_FAB_DEFAULTS, ARD_FILE_DROP_AREA_DEFAULTS, ARD_FILE_INPUT_DEFAULTS, ARD_FORM_FIELD_FRAME_DEFAULTS, ARD_HEX_INPUT_DEFAULTS, ARD_ICON_BUTTON_DEFAULTS, ARD_ICON_DEFAULTS, ARD_KBD_DEFAULTS, ARD_KBD_SHORTCUT_DEFAULTS, ARD_MODAL_DEFAULTS, ARD_NUMBER_INPUT_DEFAULTS, ARD_PASSWORD_INPUT_DEFAULTS, ARD_PROGRESS_BAR_DEFAULTS, ARD_PROGRESS_CIRCLE_DEFAULTS, ARD_RADIO_DEFAULTS, ARD_SEGMENT_DEFAULTS, ARD_SELECTABLE_CHIP_DEFAULTS, ARD_SELECT_DEFAULTS, ARD_SIMPLE_INPUT_DEFAULTS, ARD_SLIDER_DEFAULTS, ARD_SLIDE_TOGGLE_DEFAULTS, ARD_SNACKBAR_ANIMATION_LENGTH, ARD_SNACKBAR_DATA, ARD_SNACKBAR_DEFAULTS, ARD_SPINNER_DEFAULTS, ARD_STAR_BUTTON_DEFAULTS, ARD_STAR_DEFAULTS, ARD_STAR_DISPLAY_DEFAULTS, ARD_STAR_INPUT_DEFAULTS, ARD_STATEBOX_DEFAULTS, ARD_TABBER_DEFAULTS, ARD_TABLE_DEFAULTS, ARD_TABLE_FROM_CSV_DEFAULTS, ARD_TABLE_PAGINATION_DEFAULTS, ARD_TAB_DEFAULTS, ArdAddCustomTemplateDirective, ArdDialogButtonsTemplateDirective, ArdDropdownFooterTemplateDirective, ArdDropdownHeaderTemplateDirective, ArdFileInputPlaceholderTemplateDirective, ArdFileInputPrefixTemplateDirective, ArdFileInputSuffixTemplateDirective, ArdFormFieldPrefixTemplateDirective, ArdFormFieldSuffixTemplateDirective, ArdHexInputPlaceholderTemplateDirective, ArdHexInputPrefixTemplateDirective, ArdHexInputSuffixTemplateDirective, ArdInputLoadingTemplateDirective, ArdInputPlaceholderTemplateDirective, ArdInputPrefixTemplateDirective, ArdInputSuffixTemplateDirective, ArdInputSuggestionTemplateDirective, ArdItemDisplayLimitTemplateDirective, ArdItemLimitReachedTemplateDirective, ArdLoadingPlaceholderTemplateDirective, ArdLoadingSpinnerTemplateDirective, ArdNoItemsFoundTemplateDirective, ArdNumberInputPlaceholderTemplateDirective, ArdOptgroupTemplateDirective, ArdOptionTemplateDirective, ArdPanelPosition, ArdPasswordInputPlaceholderTemplateDirective, ArdPasswordInputPrefixTemplateDirective, ArdPasswordInputRevealButtonTemplateDirective, ArdPasswordInputSuffixTemplateDirective, ArdProgressBarValueTemplateDirective, ArdProgressCircleValueTemplateDirective, searchFunctions as ArdSearchFunction, ArdSegmentOptionTemplateDirective, ArdSelectPlaceholderTemplateDirective, ArdSelectPrefixTemplateDirective, ArdSelectSuffixTemplateDirective, ArdSimpleInputPlaceholderTemplateDirective, ArdSimpleInputPrefixTemplateDirective, ArdSimpleInputSuffixTemplateDirective, ArdSlideToggleAppearance, ArdSliderTooltipDirective, ArdSnackbarAlignment, ArdSnackbarOriginRelation, ArdSnackbarQueueHandling, ArdSnackbarRef, ArdSnackbarType, ArdValueChipTemplateDirective, ArdValueTemplateDirective, ArdiumBadgeDirective, ArdiumBadgeModule, ArdiumButtonComponent, ArdiumButtonModule, ArdiumCardActionButtonsDirective, ArdiumCardAvatarDirective, ArdiumCardComponent, ArdiumCardContentDirective, ArdiumCardDirective, ArdiumCardFooterDirective, ArdiumCardHeaderComponent, ArdiumCardImageDirective, ArdiumCardModule, ArdiumCardSubtitleDirective, ArdiumCardTitleDirective, ArdiumCheckboxComponent, ArdiumCheckboxListComponent, ArdiumCheckboxListModule, ArdiumCheckboxModule, ArdiumChipComponent, ArdiumChipModule, ArdiumColorDisplayComponent, ArdiumColorDisplayModule, ArdiumDeletableChipComponent, ArdiumDialogComponent, ArdiumDialogModule, ArdiumDigitInputComponent, ArdiumDigitInputModule, ArdiumDividerComponent, ArdiumDividerModule, ArdiumDropdownPanelComponent, ArdiumDropdownPanelModule, ArdiumErrorComponent, ArdiumErrorDirective, ArdiumFabComponent, ArdiumFabModule, ArdiumFileDropAreaComponent, ArdiumFileDropAreaDragoverContentTemplateDirective, ArdiumFileDropAreaIdleContentTemplateDirective, ArdiumFileDropAreaModule, ArdiumFileDropAreaUploadedContentTemplateDirective, ArdiumFileInputComponent, ArdiumFileInputDragoverContentTemplateDirective, ArdiumFileInputIdleContentTemplateDirective, ArdiumFileInputModule, ArdiumFileInputUploadedContentTemplateDirective, ArdiumFormFieldComponent, ArdiumFormFieldFrameComponent, ArdiumFormFieldFrameModule, ArdiumFormFieldModule, ArdiumHexInputComponent, ArdiumHexInputModule, ArdiumHintComponent, ArdiumHintDirective, ArdiumHorizontalFormFieldComponent, ArdiumIconButtonComponent, ArdiumIconButtonModule, ArdiumIconComponent, ArdiumIconModule, ArdiumIconPipe, ArdiumInputComponent, ArdiumInputModule, ArdiumKbdComponent, ArdiumKbdDirective, ArdiumKbdModule, ArdiumKbdPipe, ArdiumKbdShortcutComponent, ArdiumKbdShortcutModule, ArdiumLabelComponent, ArdiumModalComponent, ArdiumModalModule, ArdiumNumberInputComponent, ArdiumNumberInputModule, ArdiumOptionComponent, ArdiumOptionModule, ArdiumPasswordInputComponent, ArdiumPasswordInputModule, ArdiumProgressBarComponent, ArdiumProgressBarModule, ArdiumProgressCircleComponent, ArdiumProgressCircleModule, ArdiumRadioComponent, ArdiumRadioGroupComponent, ArdiumRadioModule, ArdiumRangeSliderComponent, ArdiumRangeSliderModule, ArdiumSegmentComponent, ArdiumSegmentModule, ArdiumSelectComponent, ArdiumSelectModule, ArdiumSelectableChipComponent, ArdiumSimpleInputComponent, ArdiumSimpleInputModule, ArdiumSlideToggleComponent, ArdiumSlideToggleModule, ArdiumSliderComponent, ArdiumSliderModule, ArdiumSnackbarService, ArdiumSpinnerComponent, ArdiumSpinnerModule, ArdiumStarButtonComponent, ArdiumStarButtonModule, ArdiumStarComponent, ArdiumStarDisplayComponent, ArdiumStarDisplayModule, ArdiumStarInputComponent, ArdiumStarInputModule, ArdiumStarModule, ArdiumStateboxComponent, ArdiumStateboxModule, ArdiumTabComponent, ArdiumTabberComponent, ArdiumTabberModule, ArdiumTableCaptionTemplateDirective, ArdiumTableCheckboxTemplateDirective, ArdiumTableComponent, ArdiumTableFromCsvComponent, ArdiumTableFromCsvModule, ArdiumTableHeaderCheckboxTemplateDirective, ArdiumTableModule, ArdiumTablePaginationComponent, ArdiumTablePaginationModule, ArdiumTablePaginationTemplateDirective, ArdiumTableTemplateDirective, ArdiumTextListComponent, ArdiumTextListModule, ArdiumTextListPipe, BadgePosition, BadgeSize, ButtonAppearance, ButtonVariant, CardAppearance, CardVariant, CheckboxListAlignType, CheckboxState, ClickStrategy, ColorDisplayAppearance, ComponentColor, DecorationElementAppearance, DialogResult, DigitInputPrimitiveOption, DigitInputShape, DropdownPanelAppearance, DropdownPanelVariant, FabSize, FormElementAppearance, FormElementVariant, OneAxisAlignment, OutlinedAppearance, PaginationAlign, PanelAppearance, PanelVariant, ProgressBarAppearance, ProgressBarMode, ProgressBarSize, ProgressBarVariant, ProgressCircleAppearance, ProgressCircleVariant, SegmentAppearance, SegmentVariant, SimpleComponentColor, SimpleOneAxisAlignment, SliderDecorationPosition, SliderTooltipBehavior, SortType, StarColor, StarFillMode, TableAlignType, TableAppearance, TablePaginationStrategy, TableVariant, TransformType, _chipDefaults, _modalDefaults, provideBadgeDefaults, provideButtonDefaults, provideCardDefaults, provideCheckboxDefaults, provideCheckboxListDefaults, provideChipDefaults, provideColorDisplayDefaults, provideDeletableChipDefaults, provideDialogDefaults, provideDigitInputDefaults, provideDividerDefaults, provideDropdownPanelDefaults, provideFabDefaults, provideFileDropAreaDefaults, provideFileInputDefaults, provideFormFieldFrameDefaults, provideHexInputDefaults, provideIconButtonDefaults, provideIconDefaults, provideKbdDefaults, provideKbdShortcutDefaults, provideModalDefaults, provideNumberInputDefaults, providePasswordInputDefaults, provideProgressBarDefaults, provideProgressCircleDefaults, provideRadioDefaults, provideSegmentDefaults, provideSelectDefaults, provideSelectableChipDefaults, provideSimpleInputDefaults, provideSlideToggleDefaults, provideSliderDefaults, provideSnackbarDefaults, provideSpinnerDefaults, provideStarButtonDefaults, provideStarDefaults, provideStarDisplayDefaults, provideStarInputDefaults, provideStateboxDefaults, provideTabDefaults, provideTabberDefaults, provideTableDefaults, provideTableFromCsvDefaults, provideTablePaginationDefaults, searchInString };
11341
11791
  //# sourceMappingURL=ardium-ui-ui.mjs.map