@kirbydesign/designsystem 11.6.2 → 11.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/fesm2022/kirbydesign-designsystem-accordion.mjs +10 -10
  2. package/fesm2022/kirbydesign-designsystem-action-group.mjs +3 -3
  3. package/fesm2022/kirbydesign-designsystem-avatar.mjs +3 -3
  4. package/fesm2022/kirbydesign-designsystem-badge.mjs +3 -3
  5. package/fesm2022/kirbydesign-designsystem-button.mjs +3 -3
  6. package/fesm2022/kirbydesign-designsystem-calendar.mjs +4 -4
  7. package/fesm2022/kirbydesign-designsystem-calendar.mjs.map +1 -1
  8. package/fesm2022/kirbydesign-designsystem-card.mjs +16 -16
  9. package/fesm2022/kirbydesign-designsystem-chart.mjs +22 -22
  10. package/fesm2022/kirbydesign-designsystem-checkbox.mjs +3 -3
  11. package/fesm2022/kirbydesign-designsystem-data-table.mjs +7 -7
  12. package/fesm2022/kirbydesign-designsystem-divider.mjs +3 -3
  13. package/fesm2022/kirbydesign-designsystem-dropdown.mjs +10 -10
  14. package/fesm2022/kirbydesign-designsystem-empty-state.mjs +7 -7
  15. package/fesm2022/kirbydesign-designsystem-fab-sheet.mjs +3 -3
  16. package/fesm2022/kirbydesign-designsystem-flag.mjs +3 -3
  17. package/fesm2022/kirbydesign-designsystem-form-field.mjs +44 -36
  18. package/fesm2022/kirbydesign-designsystem-form-field.mjs.map +1 -1
  19. package/fesm2022/kirbydesign-designsystem-header.mjs +19 -19
  20. package/fesm2022/kirbydesign-designsystem-helpers.mjs +9 -9
  21. package/fesm2022/kirbydesign-designsystem-icon.mjs +11 -10
  22. package/fesm2022/kirbydesign-designsystem-icon.mjs.map +1 -1
  23. package/fesm2022/kirbydesign-designsystem-item-group.mjs +3 -3
  24. package/fesm2022/kirbydesign-designsystem-item-sliding.mjs +3 -3
  25. package/fesm2022/kirbydesign-designsystem-item.mjs +11 -11
  26. package/fesm2022/kirbydesign-designsystem-item.mjs.map +1 -1
  27. package/fesm2022/kirbydesign-designsystem-kirby-app.mjs +7 -7
  28. package/fesm2022/kirbydesign-designsystem-list.mjs +41 -41
  29. package/fesm2022/kirbydesign-designsystem-list.mjs.map +1 -1
  30. package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs +6 -6
  31. package/fesm2022/kirbydesign-designsystem-menu.mjs +3 -3
  32. package/fesm2022/kirbydesign-designsystem-modal.mjs +42 -42
  33. package/fesm2022/kirbydesign-designsystem-page.mjs +41 -41
  34. package/fesm2022/kirbydesign-designsystem-page.mjs.map +1 -1
  35. package/fesm2022/kirbydesign-designsystem-popover.mjs +3 -3
  36. package/fesm2022/kirbydesign-designsystem-progress-circle.mjs +6 -6
  37. package/fesm2022/kirbydesign-designsystem-radio.mjs +10 -10
  38. package/fesm2022/kirbydesign-designsystem-range.mjs +3 -3
  39. package/fesm2022/kirbydesign-designsystem-reorder-list.mjs +3 -3
  40. package/fesm2022/kirbydesign-designsystem-router-outlet.mjs +7 -7
  41. package/fesm2022/kirbydesign-designsystem-section-header.mjs +3 -3
  42. package/fesm2022/kirbydesign-designsystem-shared-floating.mjs +3 -3
  43. package/fesm2022/kirbydesign-designsystem-shared-portal.mjs +3 -3
  44. package/fesm2022/kirbydesign-designsystem-shared.mjs +18 -18
  45. package/fesm2022/kirbydesign-designsystem-slide-button.mjs +3 -3
  46. package/fesm2022/kirbydesign-designsystem-slide.mjs +13 -13
  47. package/fesm2022/kirbydesign-designsystem-spinner.mjs +7 -7
  48. package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs +10 -10
  49. package/fesm2022/kirbydesign-designsystem-tabs.mjs +13 -13
  50. package/fesm2022/kirbydesign-designsystem-testing-base.mjs +286 -286
  51. package/fesm2022/kirbydesign-designsystem-testing-jasmine.mjs +4 -4
  52. package/fesm2022/kirbydesign-designsystem-testing-jest.mjs +4 -4
  53. package/fesm2022/kirbydesign-designsystem-testing.mjs +4 -4
  54. package/fesm2022/kirbydesign-designsystem-toast.mjs +6 -6
  55. package/fesm2022/kirbydesign-designsystem-toggle-button.mjs +7 -7
  56. package/fesm2022/kirbydesign-designsystem-toggle.mjs +3 -3
  57. package/fesm2022/kirbydesign-designsystem-types.mjs +3 -3
  58. package/fesm2022/kirbydesign-designsystem.mjs +13 -13
  59. package/icons/svg/chainlink.svg +3 -0
  60. package/package.json +2 -2
  61. package/types/kirbydesign-designsystem-accordion.d.ts.map +1 -1
  62. package/types/kirbydesign-designsystem-action-group.d.ts.map +1 -1
  63. package/types/kirbydesign-designsystem-avatar.d.ts.map +1 -1
  64. package/types/kirbydesign-designsystem-badge.d.ts.map +1 -1
  65. package/types/kirbydesign-designsystem-button.d.ts.map +1 -1
  66. package/types/kirbydesign-designsystem-calendar.d.ts.map +1 -1
  67. package/types/kirbydesign-designsystem-card.d.ts.map +1 -1
  68. package/types/kirbydesign-designsystem-chart.d.ts.map +1 -1
  69. package/types/kirbydesign-designsystem-checkbox.d.ts.map +1 -1
  70. package/types/kirbydesign-designsystem-config.d.ts.map +1 -1
  71. package/types/kirbydesign-designsystem-data-table.d.ts.map +1 -1
  72. package/types/kirbydesign-designsystem-divider.d.ts.map +1 -1
  73. package/types/kirbydesign-designsystem-dropdown.d.ts.map +1 -1
  74. package/types/kirbydesign-designsystem-empty-state.d.ts.map +1 -1
  75. package/types/kirbydesign-designsystem-fab-sheet.d.ts.map +1 -1
  76. package/types/kirbydesign-designsystem-flag.d.ts.map +1 -1
  77. package/types/kirbydesign-designsystem-form-field.d.ts +2 -0
  78. package/types/kirbydesign-designsystem-form-field.d.ts.map +1 -1
  79. package/types/kirbydesign-designsystem-header.d.ts.map +1 -1
  80. package/types/kirbydesign-designsystem-helpers-scss.d.ts.map +1 -1
  81. package/types/kirbydesign-designsystem-helpers.d.ts.map +1 -1
  82. package/types/kirbydesign-designsystem-icon.d.ts.map +1 -1
  83. package/types/kirbydesign-designsystem-item-group.d.ts.map +1 -1
  84. package/types/kirbydesign-designsystem-item-sliding.d.ts.map +1 -1
  85. package/types/kirbydesign-designsystem-item.d.ts.map +1 -1
  86. package/types/kirbydesign-designsystem-kirby-app.d.ts.map +1 -1
  87. package/types/kirbydesign-designsystem-list.d.ts.map +1 -1
  88. package/types/kirbydesign-designsystem-loading-overlay.d.ts.map +1 -1
  89. package/types/kirbydesign-designsystem-menu.d.ts.map +1 -1
  90. package/types/kirbydesign-designsystem-modal.d.ts.map +1 -1
  91. package/types/kirbydesign-designsystem-page.d.ts.map +1 -1
  92. package/types/kirbydesign-designsystem-popover.d.ts.map +1 -1
  93. package/types/kirbydesign-designsystem-progress-circle.d.ts.map +1 -1
  94. package/types/kirbydesign-designsystem-radio.d.ts.map +1 -1
  95. package/types/kirbydesign-designsystem-range.d.ts.map +1 -1
  96. package/types/kirbydesign-designsystem-reorder-list.d.ts.map +1 -1
  97. package/types/kirbydesign-designsystem-router-outlet.d.ts.map +1 -1
  98. package/types/kirbydesign-designsystem-section-header.d.ts.map +1 -1
  99. package/types/kirbydesign-designsystem-shared-floating.d.ts.map +1 -1
  100. package/types/kirbydesign-designsystem-shared-portal.d.ts.map +1 -1
  101. package/types/kirbydesign-designsystem-shared.d.ts.map +1 -1
  102. package/types/kirbydesign-designsystem-slide-button.d.ts.map +1 -1
  103. package/types/kirbydesign-designsystem-slide.d.ts.map +1 -1
  104. package/types/kirbydesign-designsystem-spinner.d.ts.map +1 -1
  105. package/types/kirbydesign-designsystem-tab-navigation.d.ts.map +1 -1
  106. package/types/kirbydesign-designsystem-tabs.d.ts.map +1 -1
  107. package/types/kirbydesign-designsystem-testing-base.d.ts.map +1 -1
  108. package/types/kirbydesign-designsystem-testing-jasmine.d.ts.map +1 -1
  109. package/types/kirbydesign-designsystem-testing-jest.d.ts.map +1 -1
  110. package/types/kirbydesign-designsystem-testing.d.ts.map +1 -1
  111. package/types/kirbydesign-designsystem-toast.d.ts.map +1 -1
  112. package/types/kirbydesign-designsystem-toggle-button.d.ts.map +1 -1
  113. package/types/kirbydesign-designsystem-toggle.d.ts.map +1 -1
  114. package/types/kirbydesign-designsystem-types.d.ts.map +1 -1
  115. package/types/kirbydesign-designsystem.d.ts.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"kirbydesign-designsystem-form-field.mjs","sources":["../../form-field/src/directives/affix/affix.directive.ts","../../form-field/src/directives/date/date-input.directive.ts","../../form-field/src/form-field-message/form-field-message.component.ts","../../form-field/src/form-field-message/form-field-message.component.html","../../form-field/src/input-counter/input-counter.component.ts","../../form-field/src/input-counter/input-counter.component.html","../../form-field/src/input/input.component.ts","../../form-field/src/textarea/textarea.component.ts","../../form-field/src/textarea/textarea.component.html","../../form-field/src/form-field.component.ts","../../form-field/src/form-field.component.html","../../form-field/src/directives/decimal-mask/decimal-mask.directive.ts","../../form-field/src/form-field.module.ts","../../form-field/src/kirbydesign-designsystem-form-field.ts"],"sourcesContent":["import { Directive, ElementRef, Input } from '@angular/core';\n\n@Directive({\n // eslint-disable-next-line\n selector: '[kirby-affix]',\n})\nexport class AffixDirective {\n @Input('kirby-affix') type: 'prefix' | 'suffix';\n constructor(public el: ElementRef) {}\n}\n","import { FormatWidth, getLocaleDateFormat } from '@angular/common';\nimport {\n AfterViewInit,\n Directive,\n ElementRef,\n HostListener,\n Inject,\n Input,\n LOCALE_ID,\n OnChanges,\n Optional,\n Renderer2,\n SimpleChanges,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { extendValueAccessors } from '@kirbydesign/designsystem/helpers';\nimport Inputmask from 'inputmask/dist/inputmask.es6.js';\n\ninterface InputMask {\n setValue: (val: string) => void;\n}\n\n@Directive({})\nexport class DateInputDirective implements AfterViewInit, OnChanges {\n @HostListener('input')\n onInput() {\n if (!this.isDateInput) return;\n\n if (this.enableInputMask) {\n this.updateMask(this.elementRef.nativeElement.value);\n }\n }\n\n @Input() prefillYear = false;\n @Input() useNativeDatePicker = false;\n @Input() dateValue: string;\n\n private maskingElement: HTMLElement;\n private inputmask: InputMask;\n\n /**\n * `isDateInput` is used to avoid removing the type attribute on the input element and calling updateMask()\n * when the directive is not used on a date input.\n * This is needed for the standalone component 'InputComponent', which includes the directive\n * using the `hostDirectives` component decorator prop. Angular ignores the selector of directives\n * applied in the `hostDirectives` property which effectively applies the directive to all kirby-inputs, not only date inputs.\n * This check prevents the directive from executing it's masking on non-date inputs.\n * See: https://angular.io/guide/directive-composition-api\n */\n private isDateInput = false;\n\n /**\n * Inputmask should be enabled exclusively when _not_ using the platform\n * native date picker.\n *\n * `enableInputMask` should be ignored if the type attribute of the `<input>`\n * element is different from 'date' and/or the platform native date picker is\n * explicitly enabled.\n *\n * @private\n * @memberof DateInputDirective\n */\n private enableInputMask = false;\n\n constructor(\n private elementRef: ElementRef,\n private renderer: Renderer2,\n @Inject(LOCALE_ID) private locale: string,\n @Optional() @Inject(NG_VALUE_ACCESSOR) valueAccessors: ControlValueAccessor[]\n ) {\n this.isDateInput = this.elementRef.nativeElement.type === 'date';\n if (this.isDateInput) {\n // Remove type to avoid user-agent specific behaviour for [type=\"date\"]\n // Has to be done in constructor to avoid browser behavior kicking in\n this.elementRef.nativeElement.removeAttribute('type');\n\n extendValueAccessors(valueAccessors, {\n writeValue: {\n afterWriteValue: (value) => this.updateMask(value as string),\n },\n });\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.dateValue && this.isDateInput && this.maskingElement) {\n const newValue = changes.dateValue.currentValue;\n this.updateMask(newValue);\n if (newValue != null) {\n this.inputmask?.setValue(newValue);\n }\n }\n }\n\n ngAfterViewInit(): void {\n if (!this.isDateInput) return;\n\n this.enableInputMask = !this.useNativeDatePicker;\n\n // This case is identical to date input fields _before_ native date picker\n // option was introduced\n if (this.enableInputMask) {\n this.initMask();\n\n // Update mask with initial value if set via [value] binding on input\n if (this.dateValue && this.inputmask) {\n this.updateMask(this.dateValue);\n this.inputmask.setValue(this.dateValue);\n }\n }\n\n if (this.useNativeDatePicker) {\n this.elementRef.nativeElement.setAttribute('type', 'date');\n }\n }\n\n private initMask(): void {\n const inputFormat = this.getInputFormat();\n const placeholder = this.getPlaceholder(inputFormat);\n\n // Set initial placeholder ex. dd/mm/yyyy\n this.renderer.setAttribute(this.elementRef.nativeElement, 'placeholder', placeholder);\n\n // Init InputMask\n new Inputmask('datetime', {\n inputFormat,\n placeholder,\n prefillYear: this.prefillYear,\n }).mask(this.elementRef.nativeElement);\n this.inputmask = this.elementRef.nativeElement.inputmask;\n\n // Append input overlay, so it's possible to style typed date differntly than the date-mask\n this.appendMaskingElement();\n }\n\n // Keeps order and seperator from speficied locale\n private getInputFormat(): string {\n const localeDateFormat = getLocaleDateFormat(this.locale, FormatWidth.Short);\n return localeDateFormat\n .toLowerCase()\n .replace(/d+/, 'dd')\n .replace(/m+/, 'mm')\n .replace(/y+/, 'yyyy');\n }\n\n private getPlaceholder(inputFormat: string): string {\n return this.locale === 'da' ? inputFormat.split('y').join('å') : inputFormat;\n }\n\n private appendMaskingElement(): void {\n const wrapper = this.wrapElement(this.elementRef.nativeElement);\n this.renderer.addClass(wrapper, 'date-mask-wrapper');\n\n this.maskingElement = this.renderer.createElement('div');\n this.renderer.appendChild(wrapper, this.maskingElement);\n\n this.renderer.addClass(this.maskingElement, 'date-mask');\n }\n\n private wrapElement(element: HTMLElement): HTMLElement {\n const wrapper = this.renderer.createElement('div');\n const parent = element.parentElement;\n this.renderer.insertBefore(parent, wrapper, element);\n this.renderer.appendChild(wrapper, element);\n return wrapper;\n }\n\n private updateMask(value: string | null | undefined): void {\n if (!this.maskingElement) return;\n if (!value) {\n this.maskingElement.innerHTML = '';\n return;\n }\n const lastNumber = value.match(/.*?(\\d)[^\\d]*$/); // get last number in string\n this.maskingElement.innerHTML = lastNumber\n ? value.slice(0, value.lastIndexOf(lastNumber[1]) + 1)\n : '';\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kirby-form-field-message',\n styleUrls: ['./form-field-message.component.scss'],\n templateUrl: './form-field-message.component.html',\n})\nexport class FormFieldMessageComponent {\n @Input() text: string;\n @Input() position: 'left' | 'right' = 'left';\n}\n","{{ text }}\n<ng-content></ng-content>\n","import { AfterViewInit, ChangeDetectorRef, Component, Input, OnDestroy } from '@angular/core';\nimport { debounceTime, filter, Subscription, tap } from 'rxjs';\n\nimport { TranslationService } from '@kirbydesign/designsystem/shared';\nimport { InputComponent } from '../input/input.component';\n\nimport { FormFieldMessageComponent } from '../form-field-message/form-field-message.component';\nimport { TextareaComponent } from './../textarea/textarea.component';\n\n@Component({\n selector: 'kirby-input-counter',\n templateUrl: './input-counter.component.html',\n imports: [FormFieldMessageComponent],\n})\nexport class InputCounterComponent implements AfterViewInit, OnDestroy {\n @Input() listenTo: InputComponent | TextareaComponent;\n length: number;\n maxlength: number | undefined;\n private _inputChangeSubscription: Subscription;\n textToAnnounce: string;\n lastAnnouncedLength: number;\n skipNextAnnouncement = false;\n\n get text(): string {\n if (this.length === undefined) {\n return undefined;\n }\n const ofMaxlength = this.maxlength ? `/${this.maxlength}` : '';\n return `${this.length}${ofMaxlength}`;\n }\n\n constructor(\n private translations: TranslationService,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngAfterViewInit(): void {\n if (this.listenTo) {\n // A FormControl initialized with a value writes directly to the nativeElement.\n // Check for this scenario first, before checking for listenTo's value @Input.\n const initialValue = this.listenTo.nativeValue ?? this.listenTo.value ?? '';\n this.length = initialValue.length;\n this.skipNextAnnouncement = this.length > 0; // If there is already text in the input, skip the first announcement so we don't announce on refresh or prefilled text fields.\n this.maxlength = this.listenTo.maxlength ? +this.listenTo.maxlength : undefined;\n this.cdr.detectChanges();\n this._inputChangeSubscription = this.listenTo.kirbyChange\n .pipe(\n tap((value) => (this.length = value?.length || 0)),\n filter(() => this.skipAnnouncement()),\n debounceTime(1000)\n )\n .subscribe(() => {\n this.announceText();\n });\n }\n }\n\n private skipAnnouncement(): boolean {\n if (this.skipNextAnnouncement) {\n this.skipNextAnnouncement = false;\n return false;\n }\n return true;\n }\n\n ngOnDestroy(): void {\n this._inputChangeSubscription?.unsubscribe();\n }\n\n announceText(): void {\n const characters = this.translations.get('characters');\n const entered = this.translations.get('entered');\n if (this.maxlength === undefined) {\n this.textToAnnounce = `${characters} ${this.length} ${entered}`;\n } else {\n const outOf = this.translations.get('outOf');\n this.textToAnnounce = `${characters} ${this.length} ${outOf} ${this.maxlength} ${entered}`;\n }\n }\n}\n","<kirby-form-field-message [text]=\"text\"></kirby-form-field-message>\n<div class=\"kirby-visually-hidden\" aria-live=\"polite\">{{ textToAnnounce }}</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Inject,\n Input,\n OnChanges,\n OnInit,\n Optional,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { FormFieldControl } from '@kirbydesign/designsystem/types';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { extendValueAccessors } from '@kirbydesign/designsystem/helpers';\nimport { DateInputDirective } from '../directives/date/date-input.directive';\n\nexport enum InputSize {\n medium = 'md',\n large = 'lg',\n}\n\n@Component({\n hostDirectives: [\n {\n directive: DateInputDirective,\n inputs: [\n 'prefillYear',\n 'useNativeDatePicker',\n 'dateValue: value' /* sync input value updates with date-input mask */,\n ],\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'input[kirby-input]',\n styleUrls: ['./input.component.scss'],\n template: '',\n})\nexport class InputComponent implements OnChanges, OnInit, FormFieldControl {\n kirbyChange = new EventEmitter<string>();\n private _hasError: boolean = false;\n\n @Input() set type(value: string) {\n const mappedValue = InputComponent.typeToInputmodeMap[value];\n if (mappedValue && !this.inputmode) {\n this.inputmode = mappedValue;\n }\n }\n\n @HostBinding('class')\n @Input()\n size: InputSize | `${InputSize}` = InputSize.large;\n\n /**\n * Removes padding, width, rounded borders and drop-shadow when set to `true`.\n */\n @HostBinding('class.borderless')\n @Input()\n borderless: boolean;\n\n @HostBinding('attr.aria-invalid')\n @HostBinding('class.error')\n @Input()\n get hasError(): boolean {\n return this._hasError;\n }\n\n set hasError(value: boolean) {\n if (this._hasError !== value) {\n this._hasError = value;\n this.hasErrorChange.emit(this._hasError);\n }\n }\n\n @HostBinding('attr.autocomplete')\n @Input()\n autocomplete: 'on' | 'off' = 'off';\n\n @HostBinding('attr.autocorrect')\n @Input()\n autocorrect: 'on' | 'off' = 'off';\n\n @HostBinding('attr.value')\n @Input()\n value: string;\n\n @HostBinding('attr.maxlength')\n @Input()\n maxlength: number;\n\n @HostBinding('attr.inputmode')\n @Input()\n inputmode: string;\n\n get nativeValue(): string {\n return this.elementRef?.nativeElement?.value;\n }\n\n @Output() hasErrorChange = new EventEmitter<boolean>();\n\n constructor(\n private elementRef: ElementRef<HTMLInputElement>,\n @Optional() @Inject(NG_VALUE_ACCESSOR) builtInValueAccessors: ControlValueAccessor[]\n ) {\n extendValueAccessors<string>(builtInValueAccessors, {\n writeValue: {\n afterWriteValue: (value) => this.kirbyChange.emit(value),\n },\n });\n }\n\n ngOnInit(): void {\n // The native input value is emitted here to make sure that\n // the InputCounterComponent receives the value onInit,\n // when [(ngModel)] is used on kirby-input.\n setTimeout(() => {\n const inputValue = this.elementRef.nativeElement.value;\n if (inputValue) {\n this.kirbyChange.emit(inputValue);\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.value) {\n this.kirbyChange.emit(changes.value.currentValue);\n }\n }\n\n private static typeToInputmodeMap = {\n number: 'decimal',\n search: 'search',\n };\n\n @HostListener('keyup', ['$event.target.value'])\n _onKeyUp(value: string) {\n this.kirbyChange.emit(value);\n }\n\n @HostListener('paste', ['$event.target'])\n @HostListener('cut', ['$event.target'])\n _onCutPaste(target: HTMLInputElement) {\n //Value of input element is updated after cut/paste:\n setTimeout(() => this.kirbyChange.emit(target.value));\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Inject,\n Input,\n OnChanges,\n OnInit,\n Optional,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { extendValueAccessors } from '@kirbydesign/designsystem/helpers';\nimport { FormFieldControl } from '@kirbydesign/designsystem/types';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'textarea[kirby-textarea]',\n styleUrls: ['./textarea.component.scss'],\n templateUrl: './textarea.component.html',\n})\nexport class TextareaComponent implements OnChanges, FormFieldControl, OnInit {\n kirbyChange = new EventEmitter<string>();\n private _hasError: boolean = false;\n\n @HostBinding('attr.value')\n @Input()\n value: string;\n\n /**\n * Removes padding, width, rounded borders and drop-shadow when set to `true`.\n */\n @HostBinding('class.borderless')\n @Input()\n borderless: boolean;\n\n @HostBinding('attr.aria-invalid')\n @HostBinding('class.error')\n @Input()\n get hasError(): boolean {\n return this._hasError;\n }\n\n set hasError(value: boolean) {\n if (this._hasError !== value) {\n this._hasError = value;\n this.hasErrorChange.emit(this._hasError);\n }\n }\n\n @HostBinding('attr.autocomplete')\n @Input()\n autocomplete: 'on' | 'off' = 'off';\n\n @HostBinding('attr.autocorrect')\n @Input()\n autocorrect: 'on' | 'off' = 'off';\n\n @HostBinding('attr.maxlength')\n @Input()\n maxlength: number;\n\n get nativeValue(): string {\n return this.elementRef?.nativeElement?.value;\n }\n\n @Output() hasErrorChange = new EventEmitter<boolean>();\n\n constructor(\n private elementRef: ElementRef<HTMLTextAreaElement>,\n @Optional() @Inject(NG_VALUE_ACCESSOR) builtInValueAccessors: ControlValueAccessor[]\n ) {\n extendValueAccessors<string>(builtInValueAccessors, {\n writeValue: {\n afterWriteValue: (value) => this.kirbyChange.emit(value),\n },\n });\n }\n\n ngOnInit(): void {\n // The native input value is emitted here to make sure that\n // the InputCounterComponent receives the value onInit,\n // when [(ngModel)] is used on kirby-textarea.\n setTimeout(() => {\n const inputValue = this.elementRef.nativeElement.value;\n if (inputValue) {\n this.kirbyChange.emit(inputValue);\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.value) {\n this.kirbyChange.emit(changes.value.currentValue);\n }\n }\n\n @HostListener('keyup', ['$event.target.value'])\n _onKeyUp(value: string) {\n this.kirbyChange.emit(value);\n }\n\n @HostListener('paste', ['$event.target'])\n @HostListener('cut', ['$event.target'])\n _onCutPaste(target: HTMLInputElement) {\n //Value of textarea element is updated after cut/paste:\n setTimeout(() => this.kirbyChange.emit(target.value));\n }\n}\n","@if (!value) {\n <ng-content></ng-content>\n}\n<!-- prettier-ignore -->\n@if (value) {{{value}}}\n","import {\n AfterContentChecked,\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n QueryList,\n Renderer2,\n} from '@angular/core';\nimport {\n DesignTokenHelper,\n PlatformService,\n UniqueIdGenerator,\n} from '@kirbydesign/designsystem/helpers';\nimport { RadioGroupComponent } from '@kirbydesign/designsystem/radio';\nimport { ResizeObserverService } from '@kirbydesign/designsystem/shared';\nimport { WindowRef } from '@kirbydesign/designsystem/types';\nimport { Subscription } from 'rxjs';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { IconComponent } from '@kirbydesign/designsystem/icon';\nimport { DropdownComponent } from '@kirbydesign/designsystem/dropdown';\nimport { AffixDirective } from './directives/affix/affix.directive';\nimport { DateInputDirective } from './directives/date/date-input.directive';\nimport { InputCounterComponent } from './input-counter/input-counter.component';\nimport { InputComponent } from './input/input.component';\n\nimport { TextareaComponent } from './textarea/textarea.component';\nimport { FormFieldMessageComponent } from './form-field-message/form-field-message.component';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kirby-form-field',\n styleUrls: ['./form-field.component.scss'],\n templateUrl: './form-field.component.html',\n imports: [NgTemplateOutlet, FormFieldMessageComponent, IconComponent],\n})\nexport class FormFieldComponent\n implements AfterContentChecked, AfterContentInit, OnInit, OnDestroy\n{\n private isRegistered = false;\n private element: HTMLElement;\n private isTouch: boolean;\n private nestedInteractiveElement:\n | HTMLButtonElement\n | HTMLInputElement\n | HTMLTextAreaElement\n | HTMLIonRadioGroupElement;\n private nestedInteractiveErrorSubscription: Subscription;\n private _message: string | null | undefined;\n private _label: string | undefined;\n\n showDefaultCalendarIcon = false;\n\n _nestedInteractiveHasError: boolean;\n _labelId = UniqueIdGenerator.scopedTo('kirby-form-field-label').next();\n _errorMessageId = UniqueIdGenerator.scopedTo('kirby-form-field-message').next();\n _messageId = UniqueIdGenerator.scopedTo('kirby-form-field-message').next();\n\n @Input() get label(): string | undefined {\n return this._label;\n }\n\n set label(value: string | undefined) {\n this._label = value;\n this.setNestedInteractiveLabelAttributes();\n }\n\n @Input() get message(): string | null | undefined {\n return this._message;\n }\n\n set message(value: string | null | undefined) {\n this._message = value;\n this.setNestedInteractiveMessageAttributes();\n }\n\n @ContentChildren(AffixDirective) affixElements: QueryList<AffixDirective>;\n @ContentChild(InputCounterComponent, { static: false }) counter: InputCounterComponent;\n @ContentChild(RadioGroupComponent) private radioGroupComponent: RadioGroupComponent;\n @ContentChild(InputComponent) inputComponent: InputComponent;\n @ContentChild(DropdownComponent) dropdownComponent: DropdownComponent;\n @ContentChild(TextareaComponent) textareaComponent: TextareaComponent;\n @ContentChild(RadioGroupComponent, { read: ElementRef })\n private radioGroupElement: ElementRef<HTMLElement>;\n @ContentChild(InputComponent, { read: ElementRef }) input: ElementRef<HTMLInputElement>;\n @ContentChild(DropdownComponent, { read: ElementRef }) dropdown: ElementRef<HTMLElement>;\n @ContentChild(TextareaComponent, { read: ElementRef }) textarea: ElementRef<HTMLTextAreaElement>;\n\n @ContentChild(DateInputDirective) dateInput: DateInputDirective;\n\n constructor(\n elementRef: ElementRef<HTMLElement>,\n private platform: PlatformService,\n private renderer: Renderer2,\n private windowRef: WindowRef,\n private resizeObserverService: ResizeObserverService,\n private cdr: ChangeDetectorRef\n ) {\n this.element = elementRef.nativeElement;\n }\n\n @HostBinding('class.wrap-content-in-label')\n get _wrapContentInLabel(): boolean {\n return !!this.label && (!!this.input || !!this.textarea);\n }\n\n private dispatchLoadEvent() {\n // Dispatch an `ionInputDidLoad` event to register\n // form field + input/textarea with Ionic input shims\n // See: https://github.com/ionic-team/ionic-framework/blob/master/core/src/utils/input-shims/input-shims.ts\n this.windowRef.nativeWindow.document.dispatchEvent(\n new CustomEvent('ionInputDidLoad', {\n detail: this.element,\n })\n );\n }\n\n @HostListener('kirbyRegisterFormField')\n _onRegisterFormField() {\n this.dispatchLoadEvent();\n }\n\n onLabelClick() {\n // If its a radio group its focus method that contains advanced logic\n this.radioGroupComponent\n ? this.radioGroupComponent?.focus()\n : this.nestedInteractiveElement?.focus();\n }\n\n public focus() {\n if (!this.nestedInteractiveElement) return;\n if (!(this.input || this.textarea)) return;\n\n /*\n * This timeout ensures that any previous manipulation of inputElement\n * (e.g. setting disabled state) has been synced to the DOM before trying to focus.\n */\n setTimeout(() => {\n if (this.isTouch) {\n // Trigger Ionic's input shims to ensure input is scrolled into view.\n // See: https://github.com/ionic-team/ionic-framework/blob/master/core/src/utils/input-shims/hacks/scroll-assist.ts\n const touchStart = new TouchEvent('touchstart');\n const touchEnd = new TouchEvent('touchend');\n this.nestedInteractiveElement.dispatchEvent(touchStart);\n this.nestedInteractiveElement.dispatchEvent(touchEnd);\n } else {\n this.nestedInteractiveElement.focus();\n }\n });\n }\n\n ngOnInit() {\n this.isTouch = this.platform.isTouch();\n }\n\n ngAfterContentInit(): void {\n this.handleAffixOffset();\n }\n\n ngAfterContentChecked(): void {\n if (!this.nestedInteractiveElement) {\n this.registerNestedInteractive();\n }\n\n if (!this.isRegistered && this.element.isConnected && (this.input || this.textarea)) {\n // Host is connected to dom and slotted input/textarea is present:\n this.isRegistered = true;\n this.dispatchLoadEvent();\n }\n\n // Decide if default calendar icon for date input should be shown\n this.showDefaultCalendarIcon = this.shouldShowDefaultCalendarIcon();\n }\n\n ngOnDestroy(): void {\n // Dispatch an `ionInputDidUnload` event to unregister\n // form field + input/textarea from Ionic input shims\n // See: https://github.com/ionic-team/ionic-framework/blob/master/core/src/utils/input-shims/input-shims.ts\n this.windowRef.nativeWindow.document.dispatchEvent(\n new CustomEvent('ionInputDidUnload', {\n detail: this.element,\n })\n );\n\n this.affixElements.forEach((affix) => {\n this.resizeObserverService.unobserve(affix.el);\n });\n\n this.nestedInteractiveErrorSubscription?.unsubscribe();\n }\n\n private registerNestedInteractive() {\n this.getNestedInteractiveElement();\n this.setNestedInteractiveLabelAttributes();\n this.setNestedInteractiveMessageAttributes();\n this.subscribeToNestedInteractiveError();\n }\n\n private getNestedInteractiveElement() {\n this.nestedInteractiveElement =\n this.input?.nativeElement ||\n this.textarea?.nativeElement ||\n this.radioGroupElement?.nativeElement.querySelector('ion-radio-group') ||\n this.dropdown?.nativeElement.querySelector('button[kirby-button]');\n }\n\n private setNestedInteractiveMessageAttributes() {\n if (!this.nestedInteractiveElement) return;\n\n if (this.message) {\n this.renderer.setAttribute(\n this.nestedInteractiveElement,\n 'aria-describedby',\n this._messageId\n );\n\n this.renderer.setAttribute(\n this.nestedInteractiveElement,\n 'aria-errormessage',\n this._errorMessageId\n );\n } else {\n this.renderer.removeAttribute(this.nestedInteractiveElement, 'aria-describedby');\n this.renderer.removeAttribute(this.nestedInteractiveElement, 'aria-errormessage');\n }\n }\n\n private setNestedInteractiveLabelAttributes() {\n if (!this.nestedInteractiveElement) return;\n if (this._wrapContentInLabel) return; // return if label is wrapping the nested interactive. No need for aria-labelledby.\n\n if (this.label) {\n this.renderer.setAttribute(this.nestedInteractiveElement, 'aria-labelledby', this._labelId);\n } else {\n this.renderer.removeAttribute(this.nestedInteractiveElement, 'aria-labelledby');\n }\n }\n\n private subscribeToNestedInteractiveError() {\n const nestedInteractiveComponent =\n this.inputComponent ||\n this.textareaComponent ||\n this.radioGroupComponent ||\n this.dropdownComponent;\n\n // set current value, then listen for changes\n this._nestedInteractiveHasError = !!nestedInteractiveComponent?.hasError;\n this.nestedInteractiveErrorSubscription = nestedInteractiveComponent?.hasErrorChange.subscribe(\n (hasError) => {\n this._nestedInteractiveHasError = hasError;\n this.cdr.markForCheck();\n }\n );\n }\n\n private shouldShowDefaultCalendarIcon() {\n return (\n this.dateInput?.useNativeDatePicker &&\n !this.affixElements.some((affix) => affix.type === 'suffix') // there are no suffix elements\n );\n }\n\n private handleAffixOffset() {\n // Measure the width of all slotted affix elements,\n // and apply their width + standard padding to the input elements\n // padding, so the start/end of the input is correctly indented.\n if (this.input) {\n this.affixElements.forEach((affix) => {\n this.resizeObserverService.observe(affix.el, (entry) => {\n const padding = affix.type === 'prefix' ? 'padding-left' : 'padding-right';\n const affixWidth = this.input.nativeElement.type === 'date' ? 0 : entry.contentRect.width;\n const existingPadding = parseInt(DesignTokenHelper.size('s'));\n\n this.renderer.setStyle(\n this.input.nativeElement,\n `${padding}`,\n `${affixWidth + existingPadding}px`\n );\n\n const dateMask = this.element.querySelector('.date-mask');\n if (dateMask) {\n this.renderer.setStyle(dateMask, `${padding}`, `${affixWidth + existingPadding}px`);\n }\n });\n });\n }\n }\n}\n","@if (_wrapContentInLabel) {\n <label>\n <ng-container *ngTemplateOutlet=\"labelTextTemplate\"></ng-container>\n <ng-container *ngTemplateOutlet=\"slottedInputTemplate\"></ng-container>\n <!-- add error message inside label if nested interative is in error state -->\n @if (_nestedInteractiveHasError) {\n <ng-container *ngTemplateOutlet=\"messageTemplate\"></ng-container>\n }\n </label>\n}\n\n<!-- add message outside label if nested interative is in valid state -->\n@if (!_nestedInteractiveHasError && _wrapContentInLabel) {\n <ng-container *ngTemplateOutlet=\"messageTemplate\"></ng-container>\n}\n\n@if (!_wrapContentInLabel) {\n <ng-container *ngTemplateOutlet=\"labelTemplate\"></ng-container>\n <ng-container *ngTemplateOutlet=\"slottedInputTemplate\"></ng-container>\n <ng-container *ngTemplateOutlet=\"messageTemplate\"></ng-container>\n}\n\n<ng-template #messageTemplate>\n @if (message !== undefined || counter) {\n <div class=\"texts\">\n <div\n aria-live=\"polite\"\n class=\"message\"\n [id]=\"_nestedInteractiveHasError ? _errorMessageId : _messageId\"\n >\n @if (message !== undefined) {\n <kirby-form-field-message [text]=\"message\"></kirby-form-field-message>\n }\n </div>\n @if (counter) {\n <div class=\"counter\">\n <ng-content select=\"kirby-input-counter\"></ng-content>\n </div>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #slottedInputTemplate>\n <div class=\"affix-container\">\n <div class=\"prefix vertical-align semi-dark-text\">\n <ng-content select=\"[kirby-affix='prefix']\"></ng-content>\n </div>\n <ng-content select=\"input[kirby-input]\"></ng-content>\n <ng-content select=\"textarea[kirby-textarea]\"></ng-content>\n <ng-content select=\"kirby-radio-group\"></ng-content>\n <ng-content select=\"kirby-dropdown\"></ng-content>\n <div class=\"suffix vertical-align semi-dark-text\">\n <ng-content select=\"[kirby-affix='suffix']\"></ng-content>\n @if (showDefaultCalendarIcon) {\n <kirby-icon name=\"calendar\"></kirby-icon>\n }\n </div>\n </div>\n</ng-template>\n\n<ng-template #labelTextTemplate>\n @if (label) {\n <span class=\"text\">{{ label }}</span>\n }\n</ng-template>\n\n<ng-template #labelTemplate>\n @if (label) {\n <label class=\"text\" [id]=\"_labelId\" (click)=\"onLabelClick()\">{{ label }}</label>\n }\n</ng-template>\n","import { getLocaleNumberSymbol, NumberSymbol } from '@angular/common';\nimport { Directive, ElementRef, Inject, Input, LOCALE_ID, OnInit, Optional } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { extendValueAccessors } from '@kirbydesign/designsystem/helpers';\nimport Inputmask from 'inputmask/dist/inputmask.es6.js';\n\ninterface InputMask {\n unmaskedvalue: () => string;\n setValue: (val: string) => void;\n}\n\n@Directive({\n // eslint-disable-next-line\n selector: '[kirby-decimal-mask]',\n})\nexport class DecimalMaskDirective implements OnInit {\n @Input() min: number;\n @Input() max: number;\n @Input() precision = 2;\n @Input() setMaxOnOverflow = false;\n @Input() alignment: 'left' | 'right' = 'right';\n @Input() padPrecisionDigits: boolean = false;\n\n @Input() set allowMinus(allowMinus: boolean) {\n this._allowMinus = allowMinus || (this.min || 0) < 0;\n }\n\n @Input() set disableGroupSeperator(disabled: string) {\n this._groupSeperatorDisabled = String(disabled) === '' || String(disabled) === 'true';\n }\n\n @Input() set maxlength(maxlength: number) {\n this._maxlength = maxlength;\n\n const maxlengthValue = parseInt('9'.repeat(maxlength));\n this.max = this.getMax(maxlengthValue);\n this.min = this.getMin(maxlengthValue);\n }\n\n groupSeparator = getLocaleNumberSymbol(this.locale, NumberSymbol.Group);\n radixPoint = getLocaleNumberSymbol(this.locale, NumberSymbol.Decimal);\n inputmask: InputMask;\n\n _allowMinus = false;\n _maxlength: number;\n _groupSeperatorDisabled: boolean;\n\n constructor(\n private elementRef: ElementRef,\n @Inject(LOCALE_ID) private locale: string,\n @Optional() @Inject(NG_VALUE_ACCESSOR) private valueAccessors: ControlValueAccessor[]\n ) {\n this.extendBuiltinValueAccessor();\n }\n\n ngOnInit(): void {\n // Set type=\"text\", because functionality like 'setSelectionRange' are not supported on type=\"number\"\n this.elementRef.nativeElement.setAttribute('type', 'text');\n\n // Remove maxlength as this is handled by the mask\n this.elementRef.nativeElement.removeAttribute('maxlength');\n\n this.initMask();\n }\n\n private initMask(): void {\n new Inputmask('decimal', {\n groupSeparator: this._groupSeperatorDisabled ? '' : this.groupSeparator,\n radixPoint: this.radixPoint,\n digits: this._maxlength ? 0 : this.precision,\n digitsOptional: !this.padPrecisionDigits,\n min: this.min,\n max: this.max,\n allowMinus: this._allowMinus,\n negationSymbol: {\n front: getLocaleNumberSymbol(this.locale, NumberSymbol.MinusSign),\n back: '',\n },\n SetMaxOnOverflow: this.setMaxOnOverflow,\n showMaskOnFocus: false,\n showMaskOnHover: false,\n placeholder: this.padPrecisionDigits ? undefined : '',\n rightAlign: this.alignment === 'right',\n onBeforeWrite: () => {\n if (!this.inputmask) return;\n },\n }).mask(this.elementRef.nativeElement);\n this.inputmask = this.elementRef.nativeElement.inputmask;\n }\n\n private getMax(maxlengthValue: number): number {\n return this.max === undefined ? maxlengthValue : Math.min(this.max, maxlengthValue);\n }\n\n private getMin(maxlengthValue: number): number {\n if (!this.allowMinus) return;\n maxlengthValue = -Math.abs(maxlengthValue);\n return this.min === undefined ? maxlengthValue : -Math.abs(Math.max(this.min, maxlengthValue));\n }\n\n private extendBuiltinValueAccessor(): void {\n extendValueAccessors<string>(this.valueAccessors, {\n writeValue: {\n afterWriteValue: (value) => {\n // Update the inputmask display when value is set programmatically\n if (this.inputmask && value != null) {\n const formattedValue = String(value).replace('.', this.radixPoint);\n this.inputmask.setValue(formattedValue);\n }\n },\n },\n registerOnChange: {\n transformValue: (value) => {\n // Provide unmasked and normalized values to the form control\n if (this.inputmask) {\n const unmaskedValue = this.inputmask.unmaskedvalue();\n return unmaskedValue.replace(this.radixPoint, '.');\n }\n return value;\n },\n },\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { IconModule } from '@kirbydesign/designsystem/icon';\nimport { FormFieldMessageComponent } from './form-field-message/form-field-message.component';\nimport { FormFieldComponent } from './form-field.component';\nimport { InputCounterComponent } from './input-counter/input-counter.component';\nimport { DecimalMaskDirective } from './directives/decimal-mask/decimal-mask.directive';\nimport { AffixDirective } from './directives/affix/affix.directive';\n\nconst imports = [FormFieldComponent, FormFieldMessageComponent, InputCounterComponent];\n\n@NgModule({\n imports: [CommonModule, DecimalMaskDirective, IconModule, AffixDirective, ...imports],\n exports: [...imports, DecimalMaskDirective, AffixDirective],\n})\nexport class FormFieldModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","i3"],"mappings":"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"}
1
+ {"version":3,"file":"kirbydesign-designsystem-form-field.mjs","sources":["../../form-field/src/directives/affix/affix.directive.ts","../../form-field/src/directives/date/date-input.directive.ts","../../form-field/src/form-field-message/form-field-message.component.ts","../../form-field/src/form-field-message/form-field-message.component.html","../../form-field/src/input-counter/input-counter.component.ts","../../form-field/src/input-counter/input-counter.component.html","../../form-field/src/input/input.component.ts","../../form-field/src/textarea/textarea.component.ts","../../form-field/src/textarea/textarea.component.html","../../form-field/src/form-field.component.ts","../../form-field/src/form-field.component.html","../../form-field/src/directives/decimal-mask/decimal-mask.directive.ts","../../form-field/src/form-field.module.ts","../../form-field/src/kirbydesign-designsystem-form-field.ts"],"sourcesContent":["import { Directive, ElementRef, Input } from '@angular/core';\n\n@Directive({\n // eslint-disable-next-line\n selector: '[kirby-affix]',\n})\nexport class AffixDirective {\n @Input('kirby-affix') type: 'prefix' | 'suffix';\n constructor(public el: ElementRef) {}\n}\n","import { FormatWidth, getLocaleDateFormat } from '@angular/common';\nimport {\n AfterViewInit,\n Directive,\n ElementRef,\n HostListener,\n Inject,\n Input,\n LOCALE_ID,\n OnChanges,\n Optional,\n Renderer2,\n SimpleChanges,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { extendValueAccessors } from '@kirbydesign/designsystem/helpers';\nimport Inputmask from 'inputmask/dist/inputmask.es6.js';\n\ninterface InputMask {\n setValue: (val: string) => void;\n}\n\n@Directive({})\nexport class DateInputDirective implements AfterViewInit, OnChanges {\n @HostListener('input')\n onInput() {\n if (!this.isDateInput) return;\n\n if (this.enableInputMask) {\n this.updateMask(this.elementRef.nativeElement.value);\n }\n }\n\n @Input() prefillYear = false;\n @Input() useNativeDatePicker = false;\n @Input() dateValue: string;\n\n private maskingElement: HTMLElement;\n private inputmask: InputMask;\n\n /**\n * `isDateInput` is used to avoid removing the type attribute on the input element and calling updateMask()\n * when the directive is not used on a date input.\n * This is needed for the standalone component 'InputComponent', which includes the directive\n * using the `hostDirectives` component decorator prop. Angular ignores the selector of directives\n * applied in the `hostDirectives` property which effectively applies the directive to all kirby-inputs, not only date inputs.\n * This check prevents the directive from executing it's masking on non-date inputs.\n * See: https://angular.io/guide/directive-composition-api\n */\n private isDateInput = false;\n\n /**\n * Inputmask should be enabled exclusively when _not_ using the platform\n * native date picker.\n *\n * `enableInputMask` should be ignored if the type attribute of the `<input>`\n * element is different from 'date' and/or the platform native date picker is\n * explicitly enabled.\n *\n * @private\n * @memberof DateInputDirective\n */\n private enableInputMask = false;\n\n constructor(\n private elementRef: ElementRef,\n private renderer: Renderer2,\n @Inject(LOCALE_ID) private locale: string,\n @Optional() @Inject(NG_VALUE_ACCESSOR) valueAccessors: ControlValueAccessor[]\n ) {\n this.isDateInput = this.elementRef.nativeElement.type === 'date';\n if (this.isDateInput) {\n // Remove type to avoid user-agent specific behaviour for [type=\"date\"]\n // Has to be done in constructor to avoid browser behavior kicking in\n this.elementRef.nativeElement.removeAttribute('type');\n\n extendValueAccessors(valueAccessors, {\n writeValue: {\n afterWriteValue: (value) => this.updateMask(value as string),\n },\n });\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.dateValue && this.isDateInput && this.maskingElement) {\n const newValue = changes.dateValue.currentValue;\n this.updateMask(newValue);\n if (newValue != null) {\n this.inputmask?.setValue(newValue);\n }\n }\n }\n\n ngAfterViewInit(): void {\n if (!this.isDateInput) return;\n\n this.enableInputMask = !this.useNativeDatePicker;\n\n // This case is identical to date input fields _before_ native date picker\n // option was introduced\n if (this.enableInputMask) {\n this.initMask();\n\n // Update mask with initial value if set via [value] binding on input\n if (this.dateValue && this.inputmask) {\n this.updateMask(this.dateValue);\n this.inputmask.setValue(this.dateValue);\n }\n }\n\n if (this.useNativeDatePicker) {\n this.elementRef.nativeElement.setAttribute('type', 'date');\n }\n }\n\n private initMask(): void {\n const inputFormat = this.getInputFormat();\n const placeholder = this.getPlaceholder(inputFormat);\n\n // Set initial placeholder ex. dd/mm/yyyy\n this.renderer.setAttribute(this.elementRef.nativeElement, 'placeholder', placeholder);\n\n // Init InputMask\n new Inputmask('datetime', {\n inputFormat,\n placeholder,\n prefillYear: this.prefillYear,\n }).mask(this.elementRef.nativeElement);\n this.inputmask = this.elementRef.nativeElement.inputmask;\n\n // Append input overlay, so it's possible to style typed date differntly than the date-mask\n this.appendMaskingElement();\n }\n\n // Keeps order and seperator from speficied locale\n private getInputFormat(): string {\n const localeDateFormat = getLocaleDateFormat(this.locale, FormatWidth.Short);\n return localeDateFormat\n .toLowerCase()\n .replace(/d+/, 'dd')\n .replace(/m+/, 'mm')\n .replace(/y+/, 'yyyy');\n }\n\n private getPlaceholder(inputFormat: string): string {\n return this.locale === 'da' ? inputFormat.split('y').join('å') : inputFormat;\n }\n\n private appendMaskingElement(): void {\n const wrapper = this.wrapElement(this.elementRef.nativeElement);\n this.renderer.addClass(wrapper, 'date-mask-wrapper');\n\n this.maskingElement = this.renderer.createElement('div');\n this.renderer.appendChild(wrapper, this.maskingElement);\n\n this.renderer.addClass(this.maskingElement, 'date-mask');\n }\n\n private wrapElement(element: HTMLElement): HTMLElement {\n const wrapper = this.renderer.createElement('div');\n const parent = element.parentElement;\n this.renderer.insertBefore(parent, wrapper, element);\n this.renderer.appendChild(wrapper, element);\n return wrapper;\n }\n\n private updateMask(value: string | null | undefined): void {\n if (!this.maskingElement) return;\n if (!value) {\n this.maskingElement.innerHTML = '';\n return;\n }\n const lastNumber = value.match(/.*?(\\d)[^\\d]*$/); // get last number in string\n this.maskingElement.innerHTML = lastNumber\n ? value.slice(0, value.lastIndexOf(lastNumber[1]) + 1)\n : '';\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kirby-form-field-message',\n styleUrls: ['./form-field-message.component.scss'],\n templateUrl: './form-field-message.component.html',\n})\nexport class FormFieldMessageComponent {\n @Input() text: string;\n @Input() position: 'left' | 'right' = 'left';\n}\n","{{ text }}\n<ng-content></ng-content>\n","import { AfterViewInit, ChangeDetectorRef, Component, Input, OnDestroy } from '@angular/core';\nimport { debounceTime, filter, Subscription, tap } from 'rxjs';\n\nimport { TranslationService } from '@kirbydesign/designsystem/shared';\nimport { InputComponent } from '../input/input.component';\n\nimport { FormFieldMessageComponent } from '../form-field-message/form-field-message.component';\nimport { TextareaComponent } from './../textarea/textarea.component';\n\n@Component({\n selector: 'kirby-input-counter',\n templateUrl: './input-counter.component.html',\n imports: [FormFieldMessageComponent],\n})\nexport class InputCounterComponent implements AfterViewInit, OnDestroy {\n @Input() listenTo: InputComponent | TextareaComponent;\n length: number;\n maxlength: number | undefined;\n private _inputChangeSubscription: Subscription;\n textToAnnounce: string;\n lastAnnouncedLength: number;\n skipNextAnnouncement = false;\n\n get text(): string {\n if (this.length === undefined) {\n return undefined;\n }\n const ofMaxlength = this.maxlength ? `/${this.maxlength}` : '';\n return `${this.length}${ofMaxlength}`;\n }\n\n constructor(\n private translations: TranslationService,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngAfterViewInit(): void {\n if (this.listenTo) {\n // A FormControl initialized with a value writes directly to the nativeElement.\n // Check for this scenario first, before checking for listenTo's value @Input.\n const initialValue = this.listenTo.nativeValue ?? this.listenTo.value ?? '';\n this.length = initialValue.length;\n this.skipNextAnnouncement = this.length > 0; // If there is already text in the input, skip the first announcement so we don't announce on refresh or prefilled text fields.\n this.maxlength = this.listenTo.maxlength ? +this.listenTo.maxlength : undefined;\n this.cdr.detectChanges();\n this._inputChangeSubscription = this.listenTo.kirbyChange\n .pipe(\n tap((value) => (this.length = value?.length || 0)),\n filter(() => this.skipAnnouncement()),\n debounceTime(1000)\n )\n .subscribe(() => {\n this.announceText();\n });\n }\n }\n\n private skipAnnouncement(): boolean {\n if (this.skipNextAnnouncement) {\n this.skipNextAnnouncement = false;\n return false;\n }\n return true;\n }\n\n ngOnDestroy(): void {\n this._inputChangeSubscription?.unsubscribe();\n }\n\n announceText(): void {\n const characters = this.translations.get('characters');\n const entered = this.translations.get('entered');\n if (this.maxlength === undefined) {\n this.textToAnnounce = `${characters} ${this.length} ${entered}`;\n } else {\n const outOf = this.translations.get('outOf');\n this.textToAnnounce = `${characters} ${this.length} ${outOf} ${this.maxlength} ${entered}`;\n }\n }\n}\n","<kirby-form-field-message [text]=\"text\"></kirby-form-field-message>\n<div class=\"kirby-visually-hidden\" aria-live=\"polite\">{{ textToAnnounce }}</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Inject,\n Input,\n OnChanges,\n OnInit,\n Optional,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { FormFieldControl } from '@kirbydesign/designsystem/types';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { extendValueAccessors } from '@kirbydesign/designsystem/helpers';\nimport { DateInputDirective } from '../directives/date/date-input.directive';\n\nexport enum InputSize {\n medium = 'md',\n large = 'lg',\n}\n\n@Component({\n hostDirectives: [\n {\n directive: DateInputDirective,\n inputs: [\n 'prefillYear',\n 'useNativeDatePicker',\n 'dateValue: value' /* sync input value updates with date-input mask */,\n ],\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'input[kirby-input]',\n styleUrls: ['./input.component.scss'],\n template: '',\n})\nexport class InputComponent implements OnChanges, OnInit, FormFieldControl {\n kirbyChange = new EventEmitter<string>();\n private _hasError: boolean = false;\n\n @Input() set type(value: string) {\n const mappedValue = InputComponent.typeToInputmodeMap[value];\n if (mappedValue && !this.inputmode) {\n this.inputmode = mappedValue;\n }\n }\n\n @HostBinding('class')\n @Input()\n size: InputSize | `${InputSize}` = InputSize.large;\n\n /**\n * Removes padding, width, rounded borders and drop-shadow when set to `true`.\n */\n @HostBinding('class.borderless')\n @Input()\n borderless: boolean;\n\n @HostBinding('attr.aria-invalid')\n @HostBinding('class.error')\n @Input()\n get hasError(): boolean {\n return this._hasError;\n }\n\n set hasError(value: boolean) {\n if (this._hasError !== value) {\n this._hasError = value;\n this.hasErrorChange.emit(this._hasError);\n }\n }\n\n @HostBinding('attr.autocomplete')\n @Input()\n autocomplete: 'on' | 'off' = 'off';\n\n @HostBinding('attr.autocorrect')\n @Input()\n autocorrect: 'on' | 'off' = 'off';\n\n @HostBinding('attr.value')\n @Input()\n value: string;\n\n @HostBinding('attr.maxlength')\n @Input()\n maxlength: number;\n\n @HostBinding('attr.inputmode')\n @Input()\n inputmode: string;\n\n get nativeValue(): string {\n return this.elementRef?.nativeElement?.value;\n }\n\n @Output() hasErrorChange = new EventEmitter<boolean>();\n\n constructor(\n private elementRef: ElementRef<HTMLInputElement>,\n @Optional() @Inject(NG_VALUE_ACCESSOR) builtInValueAccessors: ControlValueAccessor[]\n ) {\n extendValueAccessors<string>(builtInValueAccessors, {\n writeValue: {\n afterWriteValue: (value) => this.kirbyChange.emit(value),\n },\n });\n }\n\n ngOnInit(): void {\n // The native input value is emitted here to make sure that\n // the InputCounterComponent receives the value onInit,\n // when [(ngModel)] is used on kirby-input.\n setTimeout(() => {\n const inputValue = this.elementRef.nativeElement.value;\n if (inputValue) {\n this.kirbyChange.emit(inputValue);\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.value) {\n this.kirbyChange.emit(changes.value.currentValue);\n }\n }\n\n private static typeToInputmodeMap = {\n number: 'decimal',\n search: 'search',\n };\n\n @HostListener('keyup', ['$event.target.value'])\n _onKeyUp(value: string) {\n this.kirbyChange.emit(value);\n }\n\n @HostListener('paste', ['$event.target'])\n @HostListener('cut', ['$event.target'])\n _onCutPaste(target: HTMLInputElement) {\n //Value of input element is updated after cut/paste:\n setTimeout(() => this.kirbyChange.emit(target.value));\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Inject,\n Input,\n OnChanges,\n OnInit,\n Optional,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { extendValueAccessors } from '@kirbydesign/designsystem/helpers';\nimport { FormFieldControl } from '@kirbydesign/designsystem/types';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'textarea[kirby-textarea]',\n styleUrls: ['./textarea.component.scss'],\n templateUrl: './textarea.component.html',\n})\nexport class TextareaComponent implements OnChanges, FormFieldControl, OnInit {\n kirbyChange = new EventEmitter<string>();\n private _hasError: boolean = false;\n\n @HostBinding('attr.value')\n @Input()\n value: string;\n\n /**\n * Removes padding, width, rounded borders and drop-shadow when set to `true`.\n */\n @HostBinding('class.borderless')\n @Input()\n borderless: boolean;\n\n @HostBinding('attr.aria-invalid')\n @HostBinding('class.error')\n @Input()\n get hasError(): boolean {\n return this._hasError;\n }\n\n set hasError(value: boolean) {\n if (this._hasError !== value) {\n this._hasError = value;\n this.hasErrorChange.emit(this._hasError);\n }\n }\n\n @HostBinding('attr.autocomplete')\n @Input()\n autocomplete: 'on' | 'off' = 'off';\n\n @HostBinding('attr.autocorrect')\n @Input()\n autocorrect: 'on' | 'off' = 'off';\n\n @HostBinding('attr.maxlength')\n @Input()\n maxlength: number;\n\n get nativeValue(): string {\n return this.elementRef?.nativeElement?.value;\n }\n\n @Output() hasErrorChange = new EventEmitter<boolean>();\n\n constructor(\n private elementRef: ElementRef<HTMLTextAreaElement>,\n @Optional() @Inject(NG_VALUE_ACCESSOR) builtInValueAccessors: ControlValueAccessor[]\n ) {\n extendValueAccessors<string>(builtInValueAccessors, {\n writeValue: {\n afterWriteValue: (value) => this.kirbyChange.emit(value),\n },\n });\n }\n\n ngOnInit(): void {\n // The native input value is emitted here to make sure that\n // the InputCounterComponent receives the value onInit,\n // when [(ngModel)] is used on kirby-textarea.\n setTimeout(() => {\n const inputValue = this.elementRef.nativeElement.value;\n if (inputValue) {\n this.kirbyChange.emit(inputValue);\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.value) {\n this.kirbyChange.emit(changes.value.currentValue);\n }\n }\n\n @HostListener('keyup', ['$event.target.value'])\n _onKeyUp(value: string) {\n this.kirbyChange.emit(value);\n }\n\n @HostListener('paste', ['$event.target'])\n @HostListener('cut', ['$event.target'])\n _onCutPaste(target: HTMLInputElement) {\n //Value of textarea element is updated after cut/paste:\n setTimeout(() => this.kirbyChange.emit(target.value));\n }\n}\n","@if (!value) {\n <ng-content></ng-content>\n}\n<!-- prettier-ignore -->\n@if (value) {{{value}}}\n","import {\n AfterContentChecked,\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n QueryList,\n Renderer2,\n} from '@angular/core';\nimport {\n DesignTokenHelper,\n PlatformService,\n UniqueIdGenerator,\n} from '@kirbydesign/designsystem/helpers';\nimport { RadioGroupComponent } from '@kirbydesign/designsystem/radio';\nimport { ResizeObserverService } from '@kirbydesign/designsystem/shared';\nimport { WindowRef } from '@kirbydesign/designsystem/types';\nimport { Subscription } from 'rxjs';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { IconComponent } from '@kirbydesign/designsystem/icon';\nimport { DropdownComponent } from '@kirbydesign/designsystem/dropdown';\nimport { AffixDirective } from './directives/affix/affix.directive';\nimport { DateInputDirective } from './directives/date/date-input.directive';\nimport { InputCounterComponent } from './input-counter/input-counter.component';\nimport { InputComponent } from './input/input.component';\n\nimport { TextareaComponent } from './textarea/textarea.component';\nimport { FormFieldMessageComponent } from './form-field-message/form-field-message.component';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kirby-form-field',\n styleUrls: ['./form-field.component.scss'],\n templateUrl: './form-field.component.html',\n imports: [NgTemplateOutlet, FormFieldMessageComponent, IconComponent],\n})\nexport class FormFieldComponent\n implements AfterContentChecked, AfterContentInit, OnInit, OnDestroy\n{\n private isRegistered = false;\n private element: HTMLElement;\n private isTouch: boolean;\n private nestedInteractiveElement:\n | HTMLButtonElement\n | HTMLInputElement\n | HTMLTextAreaElement\n | HTMLIonRadioGroupElement;\n private nestedInteractiveErrorSubscription: Subscription;\n private _message: string | null | undefined;\n private _label: string | undefined;\n\n showDefaultCalendarIcon = false;\n\n _nestedInteractiveHasError: boolean;\n _labelId = UniqueIdGenerator.scopedTo('kirby-form-field-label').next();\n _errorMessageId = UniqueIdGenerator.scopedTo('kirby-form-field-message').next();\n _messageId = UniqueIdGenerator.scopedTo('kirby-form-field-message').next();\n\n @Input() get label(): string | undefined {\n return this._label;\n }\n\n set label(value: string | undefined) {\n this._label = value;\n this.setNestedInteractiveLabelAttributes();\n }\n\n @Input() get message(): string | null | undefined {\n return this._message;\n }\n\n set message(value: string | null | undefined) {\n this._message = value;\n this.setNestedInteractiveMessageAttributes();\n }\n\n @ContentChildren(AffixDirective) affixElements: QueryList<AffixDirective>;\n @ContentChild(InputCounterComponent, { static: false }) counter: InputCounterComponent;\n @ContentChild(RadioGroupComponent) private radioGroupComponent: RadioGroupComponent;\n @ContentChild(InputComponent) inputComponent: InputComponent;\n @ContentChild(DropdownComponent) dropdownComponent: DropdownComponent;\n @ContentChild(TextareaComponent) textareaComponent: TextareaComponent;\n @ContentChild(RadioGroupComponent, { read: ElementRef })\n private radioGroupElement: ElementRef<HTMLElement>;\n @ContentChild(InputComponent, { read: ElementRef }) input: ElementRef<HTMLInputElement>;\n @ContentChild(DropdownComponent, { read: ElementRef }) dropdown: ElementRef<HTMLElement>;\n @ContentChild(TextareaComponent, { read: ElementRef }) textarea: ElementRef<HTMLTextAreaElement>;\n\n @ContentChild(DateInputDirective) dateInput: DateInputDirective;\n\n constructor(\n elementRef: ElementRef<HTMLElement>,\n private platform: PlatformService,\n private renderer: Renderer2,\n private windowRef: WindowRef,\n private resizeObserverService: ResizeObserverService,\n private cdr: ChangeDetectorRef\n ) {\n this.element = elementRef.nativeElement;\n }\n\n @HostBinding('class.wrap-content-in-label')\n get _wrapContentInLabel(): boolean {\n return !!this.label && (!!this.input || !!this.textarea);\n }\n\n private dispatchLoadEvent() {\n // Dispatch an `ionInputDidLoad` event to register\n // form field + input/textarea with Ionic input shims\n // See: https://github.com/ionic-team/ionic-framework/blob/master/core/src/utils/input-shims/input-shims.ts\n this.windowRef.nativeWindow.document.dispatchEvent(\n new CustomEvent('ionInputDidLoad', {\n detail: this.element,\n })\n );\n }\n\n @HostListener('kirbyRegisterFormField')\n _onRegisterFormField() {\n this.dispatchLoadEvent();\n }\n\n onLabelClick() {\n // If its a radio group its focus method that contains advanced logic\n this.radioGroupComponent\n ? this.radioGroupComponent?.focus()\n : this.nestedInteractiveElement?.focus();\n }\n\n public focus() {\n if (!this.nestedInteractiveElement) return;\n if (!(this.input || this.textarea)) return;\n\n /*\n * This timeout ensures that any previous manipulation of inputElement\n * (e.g. setting disabled state) has been synced to the DOM before trying to focus.\n */\n setTimeout(() => {\n if (this.isTouch) {\n // Trigger Ionic's input shims to ensure input is scrolled into view.\n // See: https://github.com/ionic-team/ionic-framework/blob/master/core/src/utils/input-shims/hacks/scroll-assist.ts\n const touchStart = new TouchEvent('touchstart');\n const touchEnd = new TouchEvent('touchend');\n this.nestedInteractiveElement.dispatchEvent(touchStart);\n this.nestedInteractiveElement.dispatchEvent(touchEnd);\n } else {\n this.nestedInteractiveElement.focus();\n }\n });\n }\n\n ngOnInit() {\n this.isTouch = this.platform.isTouch();\n }\n\n ngAfterContentInit(): void {\n this.handleAffixOffset();\n }\n\n ngAfterContentChecked(): void {\n if (!this.nestedInteractiveElement) {\n this.registerNestedInteractive();\n }\n\n if (!this.isRegistered && this.element.isConnected && (this.input || this.textarea)) {\n // Host is connected to dom and slotted input/textarea is present:\n this.isRegistered = true;\n this.dispatchLoadEvent();\n }\n\n // Decide if default calendar icon for date input should be shown\n this.showDefaultCalendarIcon = this.shouldShowDefaultCalendarIcon();\n }\n\n ngOnDestroy(): void {\n // Dispatch an `ionInputDidUnload` event to unregister\n // form field + input/textarea from Ionic input shims\n // See: https://github.com/ionic-team/ionic-framework/blob/master/core/src/utils/input-shims/input-shims.ts\n this.windowRef.nativeWindow.document.dispatchEvent(\n new CustomEvent('ionInputDidUnload', {\n detail: this.element,\n })\n );\n\n this.affixElements.forEach((affix) => {\n this.resizeObserverService.unobserve(affix.el);\n });\n\n this.nestedInteractiveErrorSubscription?.unsubscribe();\n }\n\n private registerNestedInteractive() {\n this.getNestedInteractiveElement();\n this.setNestedInteractiveLabelAttributes();\n this.setNestedInteractiveMessageAttributes();\n this.subscribeToNestedInteractiveError();\n }\n\n private getNestedInteractiveElement() {\n this.nestedInteractiveElement =\n this.input?.nativeElement ||\n this.textarea?.nativeElement ||\n this.radioGroupElement?.nativeElement.querySelector('ion-radio-group') ||\n this.dropdown?.nativeElement.querySelector('button[kirby-button]');\n }\n\n private setNestedInteractiveMessageAttributes() {\n if (!this.nestedInteractiveElement) return;\n\n if (this.message) {\n this.renderer.setAttribute(\n this.nestedInteractiveElement,\n 'aria-describedby',\n this._messageId\n );\n\n this.renderer.setAttribute(\n this.nestedInteractiveElement,\n 'aria-errormessage',\n this._errorMessageId\n );\n } else {\n this.renderer.removeAttribute(this.nestedInteractiveElement, 'aria-describedby');\n this.renderer.removeAttribute(this.nestedInteractiveElement, 'aria-errormessage');\n }\n }\n\n private setNestedInteractiveLabelAttributes() {\n if (!this.nestedInteractiveElement) return;\n if (this._wrapContentInLabel) return; // return if label is wrapping the nested interactive. No need for aria-labelledby.\n\n if (this.label) {\n this.renderer.setAttribute(this.nestedInteractiveElement, 'aria-labelledby', this._labelId);\n } else {\n this.renderer.removeAttribute(this.nestedInteractiveElement, 'aria-labelledby');\n }\n }\n\n private subscribeToNestedInteractiveError() {\n const nestedInteractiveComponent =\n this.inputComponent ||\n this.textareaComponent ||\n this.radioGroupComponent ||\n this.dropdownComponent;\n\n // set current value, then listen for changes\n this._nestedInteractiveHasError = !!nestedInteractiveComponent?.hasError;\n this.nestedInteractiveErrorSubscription = nestedInteractiveComponent?.hasErrorChange.subscribe(\n (hasError) => {\n this._nestedInteractiveHasError = hasError;\n this.cdr.markForCheck();\n }\n );\n }\n\n private shouldShowDefaultCalendarIcon() {\n return (\n this.dateInput?.useNativeDatePicker &&\n !this.affixElements.some((affix) => affix.type === 'suffix') // there are no suffix elements\n );\n }\n\n private handleAffixOffset() {\n // Measure the width of all slotted affix elements,\n // and apply their width + standard padding to the input elements\n // padding, so the start/end of the input is correctly indented.\n if (this.input) {\n this.affixElements.forEach((affix) => {\n this.resizeObserverService.observe(affix.el, (entry) => {\n const padding = affix.type === 'prefix' ? 'padding-left' : 'padding-right';\n const affixWidth = this.input.nativeElement.type === 'date' ? 0 : entry.contentRect.width;\n const existingPadding = parseInt(DesignTokenHelper.size('s'));\n\n this.renderer.setStyle(\n this.input.nativeElement,\n `${padding}`,\n `${affixWidth + existingPadding}px`\n );\n\n const dateMask = this.element.querySelector('.date-mask');\n if (dateMask) {\n this.renderer.setStyle(dateMask, `${padding}`, `${affixWidth + existingPadding}px`);\n }\n });\n });\n }\n }\n}\n","@if (_wrapContentInLabel) {\n <label>\n <ng-container *ngTemplateOutlet=\"labelTextTemplate\"></ng-container>\n <ng-container *ngTemplateOutlet=\"slottedInputTemplate\"></ng-container>\n <!-- add error message inside label if nested interative is in error state -->\n @if (_nestedInteractiveHasError) {\n <ng-container *ngTemplateOutlet=\"messageTemplate\"></ng-container>\n }\n </label>\n}\n\n<!-- add message outside label if nested interative is in valid state -->\n@if (!_nestedInteractiveHasError && _wrapContentInLabel) {\n <ng-container *ngTemplateOutlet=\"messageTemplate\"></ng-container>\n}\n\n@if (!_wrapContentInLabel) {\n <ng-container *ngTemplateOutlet=\"labelTemplate\"></ng-container>\n <ng-container *ngTemplateOutlet=\"slottedInputTemplate\"></ng-container>\n <ng-container *ngTemplateOutlet=\"messageTemplate\"></ng-container>\n}\n\n<ng-template #messageTemplate>\n @if (message !== undefined || counter) {\n <div class=\"texts\">\n <div\n aria-live=\"polite\"\n class=\"message\"\n [id]=\"_nestedInteractiveHasError ? _errorMessageId : _messageId\"\n >\n @if (message !== undefined) {\n <kirby-form-field-message [text]=\"message\"></kirby-form-field-message>\n }\n </div>\n @if (counter) {\n <div class=\"counter\">\n <ng-content select=\"kirby-input-counter\"></ng-content>\n </div>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #slottedInputTemplate>\n <div class=\"affix-container\">\n <div class=\"prefix vertical-align semi-dark-text\">\n <ng-content select=\"[kirby-affix='prefix']\"></ng-content>\n </div>\n <ng-content select=\"input[kirby-input]\"></ng-content>\n <ng-content select=\"textarea[kirby-textarea]\"></ng-content>\n <ng-content select=\"kirby-radio-group\"></ng-content>\n <ng-content select=\"kirby-dropdown\"></ng-content>\n <div class=\"suffix vertical-align semi-dark-text\">\n <ng-content select=\"[kirby-affix='suffix']\"></ng-content>\n @if (showDefaultCalendarIcon) {\n <kirby-icon name=\"calendar\"></kirby-icon>\n }\n </div>\n </div>\n</ng-template>\n\n<ng-template #labelTextTemplate>\n @if (label) {\n <span class=\"text\">{{ label }}</span>\n }\n</ng-template>\n\n<ng-template #labelTemplate>\n @if (label) {\n <label class=\"text\" [id]=\"_labelId\" (click)=\"onLabelClick()\">{{ label }}</label>\n }\n</ng-template>\n","import { getLocaleNumberSymbol, NumberSymbol } from '@angular/common';\nimport { Directive, ElementRef, Inject, Input, LOCALE_ID, OnInit, Optional } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { extendValueAccessors } from '@kirbydesign/designsystem/helpers';\nimport Inputmask from 'inputmask/dist/inputmask.es6.js';\n\ninterface InputMask {\n unmaskedvalue: () => string;\n setValue: (val: string) => void;\n}\n\n@Directive({\n // eslint-disable-next-line\n selector: '[kirby-decimal-mask]',\n})\nexport class DecimalMaskDirective implements OnInit {\n @Input() min: number;\n @Input() max: number;\n @Input() precision = 2;\n @Input() setMaxOnOverflow = false;\n @Input() alignment: 'left' | 'right' = 'right';\n @Input() padPrecisionDigits: boolean = false;\n\n @Input() set allowMinus(allowMinus: boolean) {\n this._allowMinus = allowMinus || (this.min || 0) < 0;\n }\n\n @Input() set disableGroupSeperator(disabled: string) {\n this._groupSeperatorDisabled = String(disabled) === '' || String(disabled) === 'true';\n }\n\n @Input() set maxlength(maxlength: number) {\n this._maxlength = maxlength;\n\n const maxlengthValue = parseInt('9'.repeat(maxlength));\n this.max = this.getMax(maxlengthValue);\n this.min = this.getMin(maxlengthValue);\n }\n\n groupSeparator = getLocaleNumberSymbol(this.locale, NumberSymbol.Group);\n radixPoint = getLocaleNumberSymbol(this.locale, NumberSymbol.Decimal);\n inputmask: InputMask;\n\n _allowMinus = false;\n _maxlength: number;\n _groupSeperatorDisabled: boolean;\n\n constructor(\n private elementRef: ElementRef,\n @Inject(LOCALE_ID) private locale: string,\n @Optional() @Inject(NG_VALUE_ACCESSOR) private valueAccessors: ControlValueAccessor[]\n ) {\n this.extendBuiltinValueAccessor();\n }\n\n ngOnInit(): void {\n const element = this.elementRef.nativeElement;\n // Set type=\"text\", because functionality like 'setSelectionRange' are not supported on type=\"number\"\n element.setAttribute('type', 'text');\n\n // Remove maxlength as this is handled by the mask\n element.removeAttribute('maxlength');\n\n if (element.value) {\n element.value = this.toLocaleRadixPoint(element.value);\n }\n\n this.initMask();\n }\n\n private initMask(): void {\n new Inputmask('decimal', {\n groupSeparator: this._groupSeperatorDisabled ? '' : this.groupSeparator,\n radixPoint: this.radixPoint,\n digits: this._maxlength ? 0 : this.precision,\n digitsOptional: !this.padPrecisionDigits,\n min: this.min,\n max: this.max,\n allowMinus: this._allowMinus,\n negationSymbol: {\n front: getLocaleNumberSymbol(this.locale, NumberSymbol.MinusSign),\n back: '',\n },\n SetMaxOnOverflow: this.setMaxOnOverflow,\n showMaskOnFocus: false,\n showMaskOnHover: false,\n placeholder: this.padPrecisionDigits ? undefined : '',\n rightAlign: this.alignment === 'right',\n onBeforeWrite: () => {\n if (!this.inputmask) return;\n },\n }).mask(this.elementRef.nativeElement);\n this.inputmask = this.elementRef.nativeElement.inputmask;\n }\n\n private getMax(maxlengthValue: number): number {\n return this.max === undefined ? maxlengthValue : Math.min(this.max, maxlengthValue);\n }\n\n private getMin(maxlengthValue: number): number {\n if (!this.allowMinus) return;\n maxlengthValue = -Math.abs(maxlengthValue);\n return this.min === undefined ? maxlengthValue : -Math.abs(Math.max(this.min, maxlengthValue));\n }\n\n private toLocaleRadixPoint(value: string): string {\n return value.replace('.', this.radixPoint);\n }\n\n private toStandardRadixPoint(value: string): string {\n return value.replace(this.radixPoint, '.');\n }\n\n private extendBuiltinValueAccessor(): void {\n extendValueAccessors<string>(this.valueAccessors, {\n writeValue: {\n afterWriteValue: (value) => {\n // Update the inputmask display when value is set programmatically\n if (this.inputmask && value != null) {\n this.inputmask.setValue(this.toLocaleRadixPoint(String(value)));\n }\n },\n },\n registerOnChange: {\n transformValue: (value) => {\n // Provide unmasked and normalized values to the form control\n if (this.inputmask) {\n return this.toStandardRadixPoint(this.inputmask.unmaskedvalue());\n }\n return value;\n },\n },\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { IconModule } from '@kirbydesign/designsystem/icon';\nimport { FormFieldMessageComponent } from './form-field-message/form-field-message.component';\nimport { FormFieldComponent } from './form-field.component';\nimport { InputCounterComponent } from './input-counter/input-counter.component';\nimport { DecimalMaskDirective } from './directives/decimal-mask/decimal-mask.directive';\nimport { AffixDirective } from './directives/affix/affix.directive';\n\nconst imports = [FormFieldComponent, FormFieldMessageComponent, InputCounterComponent];\n\n@NgModule({\n imports: [CommonModule, DecimalMaskDirective, IconModule, AffixDirective, ...imports],\n exports: [...imports, DecimalMaskDirective, AffixDirective],\n})\nexport class FormFieldModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","i3"],"mappings":";;;;;;;;;;;;;;MAMa,cAAc,CAAA;AAEzB,IAAA,WAAA,CAAmB,EAAc,EAAA;QAAd,IAAA,CAAA,EAAE,GAAF,EAAE;IAAe;iIAFzB,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;qHAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,CAAA,aAAA,EAAA,MAAA,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;;AAET,oBAAA,QAAQ,EAAE,eAAe;AAC1B,iBAAA;;sBAEE,KAAK;uBAAC,aAAa;;;MCgBT,kBAAkB,CAAA;IAE7B,OAAO,GAAA;QACL,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE;AAEvB,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC;QACtD;IACF;AAiCA,IAAA,WAAA,CACU,UAAsB,EACtB,QAAmB,EACA,MAAc,EACF,cAAsC,EAAA;QAHrE,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACW,IAAA,CAAA,MAAM,GAAN,MAAM;QAlC1B,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,mBAAmB,GAAG,KAAK;AAMpC;;;;;;;;AAQG;QACK,IAAA,CAAA,WAAW,GAAG,KAAK;AAE3B;;;;;;;;;;AAUG;QACK,IAAA,CAAA,eAAe,GAAG,KAAK;AAQ7B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,KAAK,MAAM;AAChE,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;;;YAGpB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,eAAe,CAAC,MAAM,CAAC;YAErD,oBAAoB,CAAC,cAAc,EAAE;AACnC,gBAAA,UAAU,EAAE;oBACV,eAAe,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,UAAU,CAAC,KAAe,CAAC;AAC7D,iBAAA;AACF,aAAA,CAAC;QACJ;IACF;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,cAAc,EAAE;AAChE,YAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,YAAY;AAC/C,YAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;AACzB,YAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,gBAAA,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC;YACpC;QACF;IACF;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE;AAEvB,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,mBAAmB;;;AAIhD,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,QAAQ,EAAE;;YAGf,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE;AACpC,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;gBAC/B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;YACzC;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC;QAC5D;IACF;IAEQ,QAAQ,GAAA;AACd,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE;QACzC,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;;AAGpD,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,aAAa,EAAE,WAAW,CAAC;;QAGrF,IAAI,SAAS,CAAC,UAAU,EAAE;YACxB,WAAW;YACX,WAAW;YACX,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QACtC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS;;QAGxD,IAAI,CAAC,oBAAoB,EAAE;IAC7B;;IAGQ,cAAc,GAAA;AACpB,QAAA,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC;AAC5E,QAAA,OAAO;AACJ,aAAA,WAAW;AACX,aAAA,OAAO,CAAC,IAAI,EAAE,IAAI;AAClB,aAAA,OAAO,CAAC,IAAI,EAAE,IAAI;AAClB,aAAA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;IAC1B;AAEQ,IAAA,cAAc,CAAC,WAAmB,EAAA;QACxC,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW;IAC9E;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAC/D,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;QAEpD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;QACxD,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC;QAEvD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC;IAC1D;AAEQ,IAAA,WAAW,CAAC,OAAoB,EAAA;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAClD,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa;QACpC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC;AAC3C,QAAA,OAAO,OAAO;IAChB;AAEQ,IAAA,UAAU,CAAC,KAAgC,EAAA;QACjD,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE;QAC1B,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,EAAE;YAClC;QACF;QACA,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG;AAC9B,cAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;cACnD,EAAE;IACR;iIA1JW,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EA4CnB,SAAS,EAAA,EAAA,EAAA,KAAA,EACG,iBAAiB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;qHA7C5B,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,WAAA,EAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,SAAS;mBAAC,EAAE;;0BA6CR,MAAM;2BAAC,SAAS;;0BAChB;;0BAAY,MAAM;2BAAC,iBAAiB;;sBA5CtC,YAAY;uBAAC,OAAO;;sBASpB;;sBACA;;sBACA;;;MC3BU,yBAAyB,CAAA;AANtC,IAAA,WAAA,GAAA;QAQW,IAAA,CAAA,QAAQ,GAAqB,MAAM;AAC7C,IAAA;iIAHY,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,oICRtC,yCAEA,EAAA,MAAA,EAAA,CAAA,0KAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDMa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;sCACS,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC,0BAA0B,EAAA,QAAA,EAAA,yCAAA,EAAA,MAAA,EAAA,CAAA,0KAAA,CAAA,EAAA;;sBAKnC;;sBACA;;;MEIU,qBAAqB,CAAA;AAShC,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE;AAC7B,YAAA,OAAO,SAAS;QAClB;AACA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,SAAS,CAAA,CAAE,GAAG,EAAE;AAC9D,QAAA,OAAO,GAAG,IAAI,CAAC,MAAM,CAAA,EAAG,WAAW,EAAE;IACvC;IAEA,WAAA,CACU,YAAgC,EAChC,GAAsB,EAAA;QADtB,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,GAAG,GAAH,GAAG;QAZb,IAAA,CAAA,oBAAoB,GAAG,KAAK;IAazB;IAEH,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;;;AAGjB,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;AAC3E,YAAA,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM;YACjC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YAC5C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,SAAS;AAC/E,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACxB,YAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC3C,iBAAA,IAAI,CACH,GAAG,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,MAAM,GAAG,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC,EAClD,MAAM,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,EACrC,YAAY,CAAC,IAAI,CAAC;iBAEnB,SAAS,CAAC,MAAK;gBACd,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,CAAC,CAAC;QACN;IACF;IAEQ,gBAAgB,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;AACjC,YAAA,OAAO,KAAK;QACd;AACA,QAAA,OAAO,IAAI;IACb;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,wBAAwB,EAAE,WAAW,EAAE;IAC9C;IAEA,YAAY,GAAA;QACV,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC;QACtD,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;AAChD,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;AAChC,YAAA,IAAI,CAAC,cAAc,GAAG,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE;QACjE;aAAO;YACL,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC;AAC5C,YAAA,IAAI,CAAC,cAAc,GAAG,GAAG,UAAU,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,CAAA,CAAA,EAAI,KAAK,IAAI,IAAI,CAAC,SAAS,CAAA,CAAA,EAAI,OAAO,EAAE;QAC5F;IACF;iIAhEW,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;qHAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECdlC,+JAEA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDUY,yBAAyB,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAExB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;+BACE,qBAAqB,EAAA,OAAA,EAEtB,CAAC,yBAAyB,CAAC,EAAA,QAAA,EAAA,+JAAA,EAAA;;sBAGnC;;;IEKS;AAAZ,CAAA,UAAY,SAAS,EAAA;AACnB,IAAA,SAAA,CAAA,QAAA,CAAA,GAAA,IAAa;AACb,IAAA,SAAA,CAAA,OAAA,CAAA,GAAA,IAAY;AACd,CAAC,EAHW,SAAS,KAAT,SAAS,GAAA,EAAA,CAAA,CAAA;MAsBR,cAAc,CAAA;IAIzB,IAAa,IAAI,CAAC,KAAa,EAAA;QAC7B,MAAM,WAAW,GAAG,cAAc,CAAC,kBAAkB,CAAC,KAAK,CAAC;AAC5D,QAAA,IAAI,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AAClC,YAAA,IAAI,CAAC,SAAS,GAAG,WAAW;QAC9B;IACF;AAaA,IAAA,IAGI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;IAEA,IAAI,QAAQ,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;AAC5B,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACtB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;QAC1C;IACF;AAsBA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,KAAK;IAC9C;IAIA,WAAA,CACU,UAAwC,EACT,qBAA6C,EAAA;QAD5E,IAAA,CAAA,UAAU,GAAV,UAAU;AA9DpB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU;QAChC,IAAA,CAAA,SAAS,GAAY,KAAK;AAWlC,QAAA,IAAA,CAAA,IAAI,GAA+B,SAAS,CAAC,KAAK;QAyBlD,IAAA,CAAA,YAAY,GAAiB,KAAK;QAIlC,IAAA,CAAA,WAAW,GAAiB,KAAK;AAkBvB,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAW;QAMpD,oBAAoB,CAAS,qBAAqB,EAAE;AAClD,YAAA,UAAU,EAAE;AACV,gBAAA,eAAe,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AACzD,aAAA;AACF,SAAA,CAAC;IACJ;IAEA,QAAQ,GAAA;;;;QAIN,UAAU,CAAC,MAAK;YACd,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK;YACtD,IAAI,UAAU,EAAE;AACd,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;YACnC;AACF,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;YACjB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;QACnD;IACF;AAEe,IAAA,SAAA,IAAA,CAAA,kBAAkB,GAAG;AAClC,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,MAAM,EAAE,QAAQ;AACjB,KAHgC,CAG/B;AAGF,IAAA,QAAQ,CAAC,KAAa,EAAA;AACpB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9B;AAIA,IAAA,WAAW,CAAC,MAAwB,EAAA;;AAElC,QAAA,UAAU,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvD;AA1GW,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,4CAgEH,iBAAiB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAhE5B,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,69BAFf,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,owFAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAED,cAAc,EAAA,UAAA,EAAA,CAAA;kBAjB1B,SAAS;AACQ,YAAA,IAAA,EAAA,CAAA,EAAA,cAAA,EAAA;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,kBAAkB;AAC7B,4BAAA,MAAM,EAAE;gCACN,aAAa;gCACb,qBAAqB;AACrB,gCAAA,kBAAkB;AACnB,6BAAA;AACF,yBAAA;AACF,qBAAA,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAErC,oBAAoB,YAEpB,EAAE,EAAA,MAAA,EAAA,CAAA,owFAAA,CAAA,EAAA;;0BAkET;;0BAAY,MAAM;2BAAC,iBAAiB;;sBA5DtC;;sBAOA,WAAW;uBAAC,OAAO;;sBACnB;;sBAMA,WAAW;uBAAC,kBAAkB;;sBAC9B;;sBAGA,WAAW;uBAAC,mBAAmB;;sBAC/B,WAAW;uBAAC,aAAa;;sBACzB;;sBAYA,WAAW;uBAAC,mBAAmB;;sBAC/B;;sBAGA,WAAW;uBAAC,kBAAkB;;sBAC9B;;sBAGA,WAAW;uBAAC,YAAY;;sBACxB;;sBAGA,WAAW;uBAAC,gBAAgB;;sBAC5B;;sBAGA,WAAW;uBAAC,gBAAgB;;sBAC5B;;sBAOA;;sBAoCA,YAAY;uBAAC,OAAO,EAAE,CAAC,qBAAqB,CAAC;;sBAK7C,YAAY;uBAAC,OAAO,EAAE,CAAC,eAAe,CAAC;;sBACvC,YAAY;uBAAC,KAAK,EAAE,CAAC,eAAe,CAAC;;;MCtH3B,iBAAiB,CAAA;AAe5B,IAAA,IAGI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;IAEA,IAAI,QAAQ,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;AAC5B,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACtB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;QAC1C;IACF;AAcA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,KAAK;IAC9C;IAIA,WAAA,CACU,UAA2C,EACZ,qBAA6C,EAAA;QAD5E,IAAA,CAAA,UAAU,GAAV,UAAU;AA/CpB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU;QAChC,IAAA,CAAA,SAAS,GAAY,KAAK;QA6BlC,IAAA,CAAA,YAAY,GAAiB,KAAK;QAIlC,IAAA,CAAA,WAAW,GAAiB,KAAK;AAUvB,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAW;QAMpD,oBAAoB,CAAS,qBAAqB,EAAE;AAClD,YAAA,UAAU,EAAE;AACV,gBAAA,eAAe,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AACzD,aAAA;AACF,SAAA,CAAC;IACJ;IAEA,QAAQ,GAAA;;;;QAIN,UAAU,CAAC,MAAK;YACd,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK;YACtD,IAAI,UAAU,EAAE;AACd,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;YACnC;AACF,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;YACjB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;QACnD;IACF;AAGA,IAAA,QAAQ,CAAC,KAAa,EAAA;AACpB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9B;AAIA,IAAA,WAAW,CAAC,MAAwB,EAAA;;AAElC,QAAA,UAAU,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvD;AAtFW,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,4CAiDN,iBAAiB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAjD5B,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,otBC1B9B,qGAKA,EAAA,MAAA,EAAA,CAAA,i4DAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDqBa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;sCACS,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAErC,0BAA0B,EAAA,QAAA,EAAA,qGAAA,EAAA,MAAA,EAAA,CAAA,i4DAAA,CAAA,EAAA;;0BAqDjC;;0BAAY,MAAM;2BAAC,iBAAiB;;sBA7CtC,WAAW;uBAAC,YAAY;;sBACxB;;sBAMA,WAAW;uBAAC,kBAAkB;;sBAC9B;;sBAGA,WAAW;uBAAC,mBAAmB;;sBAC/B,WAAW;uBAAC,aAAa;;sBACzB;;sBAYA,WAAW;uBAAC,mBAAmB;;sBAC/B;;sBAGA,WAAW;uBAAC,kBAAkB;;sBAC9B;;sBAGA,WAAW;uBAAC,gBAAgB;;sBAC5B;;sBAOA;;sBA+BA,YAAY;uBAAC,OAAO,EAAE,CAAC,qBAAqB,CAAC;;sBAK7C,YAAY;uBAAC,OAAO,EAAE,CAAC,eAAe,CAAC;;sBACvC,YAAY;uBAAC,KAAK,EAAE,CAAC,eAAe,CAAC;;;MEhE3B,kBAAkB,CAAA;AAsB7B,IAAA,IAAa,KAAK,GAAA;QAChB,OAAO,IAAI,CAAC,MAAM;IACpB;IAEA,IAAI,KAAK,CAAC,KAAyB,EAAA;AACjC,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACnB,IAAI,CAAC,mCAAmC,EAAE;IAC5C;AAEA,IAAA,IAAa,OAAO,GAAA;QAClB,OAAO,IAAI,CAAC,QAAQ;IACtB;IAEA,IAAI,OAAO,CAAC,KAAgC,EAAA;AAC1C,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;QACrB,IAAI,CAAC,qCAAqC,EAAE;IAC9C;IAgBA,WAAA,CACE,UAAmC,EAC3B,QAAyB,EACzB,QAAmB,EACnB,SAAoB,EACpB,qBAA4C,EAC5C,GAAsB,EAAA;QAJtB,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,qBAAqB,GAArB,qBAAqB;QACrB,IAAA,CAAA,GAAG,GAAH,GAAG;QAzDL,IAAA,CAAA,YAAY,GAAG,KAAK;QAY5B,IAAA,CAAA,uBAAuB,GAAG,KAAK;QAG/B,IAAA,CAAA,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,IAAI,EAAE;QACtE,IAAA,CAAA,eAAe,GAAG,iBAAiB,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC,IAAI,EAAE;QAC/E,IAAA,CAAA,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC,IAAI,EAAE;AA0CxE,QAAA,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,aAAa;IACzC;AAEA,IAAA,IACI,mBAAmB,GAAA;AACrB,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC1D;IAEQ,iBAAiB,GAAA;;;;AAIvB,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAChD,IAAI,WAAW,CAAC,iBAAiB,EAAE;YACjC,MAAM,EAAE,IAAI,CAAC,OAAO;AACrB,SAAA,CAAC,CACH;IACH;IAGA,oBAAoB,GAAA;QAClB,IAAI,CAAC,iBAAiB,EAAE;IAC1B;IAEA,YAAY,GAAA;;AAEV,QAAA,IAAI,CAAC;AACH,cAAE,IAAI,CAAC,mBAAmB,EAAE,KAAK;AACjC,cAAE,IAAI,CAAC,wBAAwB,EAAE,KAAK,EAAE;IAC5C;IAEO,KAAK,GAAA;QACV,IAAI,CAAC,IAAI,CAAC,wBAAwB;YAAE;QACpC,IAAI,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC;YAAE;AAEpC;;;AAGG;QACH,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;;;AAGhB,gBAAA,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,YAAY,CAAC;AAC/C,gBAAA,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC;AAC3C,gBAAA,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,UAAU,CAAC;AACvD,gBAAA,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,QAAQ,CAAC;YACvD;iBAAO;AACL,gBAAA,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE;YACvC;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;IACxC;IAEA,kBAAkB,GAAA;QAChB,IAAI,CAAC,iBAAiB,EAAE;IAC1B;IAEA,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE;YAClC,IAAI,CAAC,yBAAyB,EAAE;QAClC;QAEA,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,KAAK,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE;;AAEnF,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;YACxB,IAAI,CAAC,iBAAiB,EAAE;QAC1B;;AAGA,QAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,6BAA6B,EAAE;IACrE;IAEA,WAAW,GAAA;;;;AAIT,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAChD,IAAI,WAAW,CAAC,mBAAmB,EAAE;YACnC,MAAM,EAAE,IAAI,CAAC,OAAO;AACrB,SAAA,CAAC,CACH;QAED,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;YACnC,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;AAChD,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,kCAAkC,EAAE,WAAW,EAAE;IACxD;IAEQ,yBAAyB,GAAA;QAC/B,IAAI,CAAC,2BAA2B,EAAE;QAClC,IAAI,CAAC,mCAAmC,EAAE;QAC1C,IAAI,CAAC,qCAAqC,EAAE;QAC5C,IAAI,CAAC,iCAAiC,EAAE;IAC1C;IAEQ,2BAA2B,GAAA;AACjC,QAAA,IAAI,CAAC,wBAAwB;YAC3B,IAAI,CAAC,KAAK,EAAE,aAAa;gBACzB,IAAI,CAAC,QAAQ,EAAE,aAAa;gBAC5B,IAAI,CAAC,iBAAiB,EAAE,aAAa,CAAC,aAAa,CAAC,iBAAiB,CAAC;gBACtE,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,sBAAsB,CAAC;IACtE;IAEQ,qCAAqC,GAAA;QAC3C,IAAI,CAAC,IAAI,CAAC,wBAAwB;YAAE;AAEpC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CACxB,IAAI,CAAC,wBAAwB,EAC7B,kBAAkB,EAClB,IAAI,CAAC,UAAU,CAChB;AAED,YAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CACxB,IAAI,CAAC,wBAAwB,EAC7B,mBAAmB,EACnB,IAAI,CAAC,eAAe,CACrB;QACH;aAAO;YACL,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,wBAAwB,EAAE,kBAAkB,CAAC;YAChF,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,wBAAwB,EAAE,mBAAmB,CAAC;QACnF;IACF;IAEQ,mCAAmC,GAAA;QACzC,IAAI,CAAC,IAAI,CAAC,wBAAwB;YAAE;QACpC,IAAI,IAAI,CAAC,mBAAmB;AAAE,YAAA,OAAO;AAErC,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,wBAAwB,EAAE,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC;QAC7F;aAAO;YACL,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,wBAAwB,EAAE,iBAAiB,CAAC;QACjF;IACF;IAEQ,iCAAiC,GAAA;AACvC,QAAA,MAAM,0BAA0B,GAC9B,IAAI,CAAC,cAAc;AACnB,YAAA,IAAI,CAAC,iBAAiB;AACtB,YAAA,IAAI,CAAC,mBAAmB;YACxB,IAAI,CAAC,iBAAiB;;QAGxB,IAAI,CAAC,0BAA0B,GAAG,CAAC,CAAC,0BAA0B,EAAE,QAAQ;AACxE,QAAA,IAAI,CAAC,kCAAkC,GAAG,0BAA0B,EAAE,cAAc,CAAC,SAAS,CAC5F,CAAC,QAAQ,KAAI;AACX,YAAA,IAAI,CAAC,0BAA0B,GAAG,QAAQ;AAC1C,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACzB,QAAA,CAAC,CACF;IACH;IAEQ,6BAA6B,GAAA;AACnC,QAAA,QACE,IAAI,CAAC,SAAS,EAAE,mBAAmB;AACnC,YAAA,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;;IAEhE;IAEQ,iBAAiB,GAAA;;;;AAIvB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACnC,gBAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAI;AACrD,oBAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,KAAK,QAAQ,GAAG,cAAc,GAAG,eAAe;oBAC1E,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,KAAK,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK;oBACzF,MAAM,eAAe,GAAG,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAE7D,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACpB,IAAI,CAAC,KAAK,CAAC,aAAa,EACxB,CAAA,EAAG,OAAO,EAAE,EACZ,CAAA,EAAG,UAAU,GAAG,eAAe,CAAA,EAAA,CAAI,CACpC;oBAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC;oBACzD,IAAI,QAAQ,EAAE;AACZ,wBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAA,EAAG,OAAO,CAAA,CAAE,EAAE,CAAA,EAAG,UAAU,GAAG,eAAe,CAAA,EAAA,CAAI,CAAC;oBACrF;AACF,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;QACJ;IACF;iIA1PW,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,yTAyCf,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACrB,mBAAmB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACnB,cAAc,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACd,iBAAiB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACjB,iBAAiB,oFACjB,mBAAmB,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAU,UAAU,EAAA,EAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAEvC,cAAc,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAU,UAAU,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAClC,iBAAiB,2BAAU,UAAU,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACrC,iBAAiB,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAU,UAAU,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAErC,kBAAkB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,SAAA,EAZf,cAAc,6BCpFjC,o6EAwEA,EAAA,MAAA,EAAA,CAAA,mnCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED9BY,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,yBAAyB,mGAAE,aAAa,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEzD,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAP9B,SAAS;sCACS,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC,kBAAkB,EAAA,OAAA,EAGnB,CAAC,gBAAgB,EAAE,yBAAyB,EAAE,aAAa,CAAC,EAAA,QAAA,EAAA,o6EAAA,EAAA,MAAA,EAAA,CAAA,mnCAAA,CAAA,EAAA;;sBAwBpE;;sBASA;;sBASA,eAAe;uBAAC,cAAc;;sBAC9B,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,qBAAqB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;sBACrD,YAAY;uBAAC,mBAAmB;;sBAChC,YAAY;uBAAC,cAAc;;sBAC3B,YAAY;uBAAC,iBAAiB;;sBAC9B,YAAY;uBAAC,iBAAiB;;sBAC9B,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,mBAAmB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;;sBAEtD,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,cAAc,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;;sBACjD,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,iBAAiB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;;sBACpD,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,iBAAiB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;;sBAEpD,YAAY;uBAAC,kBAAkB;;sBAa/B,WAAW;uBAAC,6BAA6B;;sBAgBzC,YAAY;uBAAC,wBAAwB;;;ME9G3B,oBAAoB,CAAA;IAQ/B,IAAa,UAAU,CAAC,UAAmB,EAAA;AACzC,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;IACtD;IAEA,IAAa,qBAAqB,CAAC,QAAgB,EAAA;AACjD,QAAA,IAAI,CAAC,uBAAuB,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,MAAM;IACvF;IAEA,IAAa,SAAS,CAAC,SAAiB,EAAA;AACtC,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS;QAE3B,MAAM,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;QACtC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;IACxC;AAUA,IAAA,WAAA,CACU,UAAsB,EACH,MAAc,EACM,cAAsC,EAAA;QAF7E,IAAA,CAAA,UAAU,GAAV,UAAU;QACS,IAAA,CAAA,MAAM,GAAN,MAAM;QACc,IAAA,CAAA,cAAc,GAAd,cAAc;QAhCtD,IAAA,CAAA,SAAS,GAAG,CAAC;QACb,IAAA,CAAA,gBAAgB,GAAG,KAAK;QACxB,IAAA,CAAA,SAAS,GAAqB,OAAO;QACrC,IAAA,CAAA,kBAAkB,GAAY,KAAK;QAkB5C,IAAA,CAAA,cAAc,GAAG,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC;QACvE,IAAA,CAAA,UAAU,GAAG,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC;QAGrE,IAAA,CAAA,WAAW,GAAG,KAAK;QASjB,IAAI,CAAC,0BAA0B,EAAE;IACnC;IAEA,QAAQ,GAAA;AACN,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;;AAE7C,QAAA,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC;;AAGpC,QAAA,OAAO,CAAC,eAAe,CAAC,WAAW,CAAC;AAEpC,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;YACjB,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC;QACxD;QAEA,IAAI,CAAC,QAAQ,EAAE;IACjB;IAEQ,QAAQ,GAAA;QACd,IAAI,SAAS,CAAC,SAAS,EAAE;AACvB,YAAA,cAAc,EAAE,IAAI,CAAC,uBAAuB,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc;YACvE,UAAU,EAAE,IAAI,CAAC,UAAU;AAC3B,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS;AAC5C,YAAA,cAAc,EAAE,CAAC,IAAI,CAAC,kBAAkB;YACxC,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,UAAU,EAAE,IAAI,CAAC,WAAW;AAC5B,YAAA,cAAc,EAAE;gBACd,KAAK,EAAE,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC;AACjE,gBAAA,IAAI,EAAE,EAAE;AACT,aAAA;YACD,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;AACvC,YAAA,eAAe,EAAE,KAAK;AACtB,YAAA,eAAe,EAAE,KAAK;YACtB,WAAW,EAAE,IAAI,CAAC,kBAAkB,GAAG,SAAS,GAAG,EAAE;AACrD,YAAA,UAAU,EAAE,IAAI,CAAC,SAAS,KAAK,OAAO;YACtC,aAAa,EAAE,MAAK;gBAClB,IAAI,CAAC,IAAI,CAAC,SAAS;oBAAE;YACvB,CAAC;SACF,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QACtC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS;IAC1D;AAEQ,IAAA,MAAM,CAAC,cAAsB,EAAA;QACnC,OAAO,IAAI,CAAC,GAAG,KAAK,SAAS,GAAG,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC;IACrF;AAEQ,IAAA,MAAM,CAAC,cAAsB,EAAA;QACnC,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE;QACtB,cAAc,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC;AAC1C,QAAA,OAAO,IAAI,CAAC,GAAG,KAAK,SAAS,GAAG,cAAc,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAChG;AAEQ,IAAA,kBAAkB,CAAC,KAAa,EAAA;QACtC,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC;IAC5C;AAEQ,IAAA,oBAAoB,CAAC,KAAa,EAAA;QACxC,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC;IAC5C;IAEQ,0BAA0B,GAAA;AAChC,QAAA,oBAAoB,CAAS,IAAI,CAAC,cAAc,EAAE;AAChD,YAAA,UAAU,EAAE;AACV,gBAAA,eAAe,EAAE,CAAC,KAAK,KAAI;;oBAEzB,IAAI,IAAI,CAAC,SAAS,IAAI,KAAK,IAAI,IAAI,EAAE;AACnC,wBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;oBACjE;gBACF,CAAC;AACF,aAAA;AACD,YAAA,gBAAgB,EAAE;AAChB,gBAAA,cAAc,EAAE,CAAC,KAAK,KAAI;;AAExB,oBAAA,IAAI,IAAI,CAAC,SAAS,EAAE;wBAClB,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;oBAClE;AACA,oBAAA,OAAO,KAAK;gBACd,CAAC;AACF,aAAA;AACF,SAAA,CAAC;IACJ;iIAtHW,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAkCrB,SAAS,EAAA,EAAA,EAAA,KAAA,EACG,iBAAiB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;qHAnC5B,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,KAAA,EAAA,GAAA,EAAA,KAAA,EAAA,SAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAJhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;;AAET,oBAAA,QAAQ,EAAE,sBAAsB;AACjC,iBAAA;;0BAmCI,MAAM;2BAAC,SAAS;;0BAChB;;0BAAY,MAAM;2BAAC,iBAAiB;;sBAlCtC;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBAIA;;sBAIA;;;ACtBH,MAAM,OAAO,GAAG,CAAC,kBAAkB,EAAE,yBAAyB,EAAE,qBAAqB,CAAC;MAMzE,eAAe,CAAA;iIAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;kIAAf,eAAe,EAAA,OAAA,EAAA,CAHhB,YAAY,EAAE,oBAAoB,EAAE,UAAU,EAAE,cAAc,EAHzD,kBAAkB,EAAE,yBAAyB,EAAE,qBAAqB,CAAA,EAAA,OAAA,EAAA,CAApE,kBAAkB,EAAE,yBAAyB,EAAE,qBAAqB,EAI7D,oBAAoB,EAAE,cAAc,CAAA,EAAA,CAAA,CAAA;AAE/C,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,EAAA,OAAA,EAAA,CAHhB,YAAY,EAAwB,UAAU,EAHzC,kBAAkB,CAAA,EAAA,CAAA,CAAA;;2FAMtB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAJ3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,oBAAoB,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;oBACrF,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE,oBAAoB,EAAE,cAAc,CAAC;AAC5D,iBAAA;;;ACdD;;AAEG;;;;"}
@@ -9,34 +9,34 @@ import { NgTemplateOutlet, CommonModule } from '@angular/common';
9
9
  import { FitHeadingDirective } from '@kirbydesign/designsystem/shared';
10
10
 
11
11
  class HeaderActionsDirective {
12
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: HeaderActionsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
13
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.0", type: HeaderActionsDirective, isStandalone: true, selector: "[kirbyHeaderActions]", ngImport: i0 }); }
12
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: HeaderActionsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
13
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.7", type: HeaderActionsDirective, isStandalone: true, selector: "[kirbyHeaderActions]", ngImport: i0 }); }
14
14
  }
15
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: HeaderActionsDirective, decorators: [{
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: HeaderActionsDirective, decorators: [{
16
16
  type: Directive,
17
17
  args: [{ selector: '[kirbyHeaderActions]' }]
18
18
  }] });
19
19
  class HeaderCustomSectionDirective {
20
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: HeaderCustomSectionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
21
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.0", type: HeaderCustomSectionDirective, isStandalone: true, selector: "[kirbyHeaderCustomSection]", ngImport: i0 }); }
20
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: HeaderCustomSectionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
21
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.7", type: HeaderCustomSectionDirective, isStandalone: true, selector: "[kirbyHeaderCustomSection]", ngImport: i0 }); }
22
22
  }
23
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: HeaderCustomSectionDirective, decorators: [{
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: HeaderCustomSectionDirective, decorators: [{
24
24
  type: Directive,
25
25
  args: [{ selector: '[kirbyHeaderCustomSection]' }]
26
26
  }] });
27
27
  class HeaderTitleActionIconDirective {
28
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: HeaderTitleActionIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
29
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.0", type: HeaderTitleActionIconDirective, isStandalone: true, selector: "[kirbyHeaderTitleActionIcon]", ngImport: i0 }); }
28
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: HeaderTitleActionIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
29
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.7", type: HeaderTitleActionIconDirective, isStandalone: true, selector: "[kirbyHeaderTitleActionIcon]", ngImport: i0 }); }
30
30
  }
31
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: HeaderTitleActionIconDirective, decorators: [{
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: HeaderTitleActionIconDirective, decorators: [{
32
32
  type: Directive,
33
33
  args: [{ selector: '[kirbyHeaderTitleActionIcon]' }]
34
34
  }] });
35
35
  class HeaderCustomFlagDirective {
36
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: HeaderCustomFlagDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
37
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.0", type: HeaderCustomFlagDirective, isStandalone: true, selector: "[kirbyHeaderCustomFlag]", ngImport: i0 }); }
36
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: HeaderCustomFlagDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
37
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.7", type: HeaderCustomFlagDirective, isStandalone: true, selector: "[kirbyHeaderCustomFlag]", ngImport: i0 }); }
38
38
  }
39
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: HeaderCustomFlagDirective, decorators: [{
39
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: HeaderCustomFlagDirective, decorators: [{
40
40
  type: Directive,
41
41
  args: [{ selector: '[kirbyHeaderCustomFlag]' }]
42
42
  }] });
@@ -89,10 +89,10 @@ class HeaderComponent {
89
89
  this.title$.next(changes.title.currentValue);
90
90
  }
91
91
  }
92
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: HeaderComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
93
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: HeaderComponent, isStandalone: true, selector: "kirby-header", inputs: { centered: "centered", titleMaxLines: "titleMaxLines", emphasizeActions: "emphasizeActions", title: "title", value: "value", valueUnit: "valueUnit", subtitle1: "subtitle1", subtitle2: "subtitle2", hasInteractiveTitle: "hasInteractiveTitle" }, outputs: { titleClick: "titleClick" }, host: { properties: { "class.centered": "this.centered" } }, queries: [{ propertyName: "avatar", first: true, predicate: AvatarComponent, descendants: true }, { propertyName: "progressCircle", first: true, predicate: ProgressCircleComponent, descendants: true }, { propertyName: "flag", first: true, predicate: FlagComponent, descendants: true }, { propertyName: "actionsTemplate", first: true, predicate: HeaderActionsDirective, descendants: true, read: (TemplateRef) }, { propertyName: "customSectionTemplate", first: true, predicate: HeaderCustomSectionDirective, descendants: true, read: (TemplateRef) }, { propertyName: "customFlagTemplate", first: true, predicate: HeaderCustomFlagDirective, descendants: true, read: (TemplateRef) }, { propertyName: "titleActionIconTemplate", first: true, predicate: HeaderTitleActionIconDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "titleElement", first: true, predicate: ["titleElement"], descendants: true, read: ElementRef }, { propertyName: "actionsElement", first: true, predicate: ["actionsElement"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "@if (!!avatar || !!progressCircle) {\n <div class=\"avatar\">\n <ng-content select=\"kirby-avatar,kirby-progress-circle\"></ng-content>\n </div>\n}\n\n@if (!!flag || !!customFlagTemplate) {\n <div class=\"flag\">\n @if (!!flag) {\n <ng-content select=\"kirby-flag\"></ng-content>\n }\n <!-- Custom Content in Flag section: -->\n @if (!!customFlagTemplate) {\n <div class=\"custom-flag\">\n <ng-container *ngTemplateOutlet=\"customFlagTemplate\"></ng-container>\n </div>\n }\n </div>\n}\n\n<div class=\"container\">\n <!-- Title and value - title: -->\n @if (!!title && !!value) {\n <span\n #titleElement\n class=\"title kirby-text-medium\"\n [class.clickable]=\"hasInteractiveTitle !== false && titleClick.observed\"\n [class.has-icon]=\"!!titleActionIconTemplate\"\n (click)=\"onTitleClick($event)\"\n >\n {{ title }}\n <ng-container *ngTemplateOutlet=\"titleActionIconTemplate\"></ng-container>\n </span>\n }\n <div class=\"title-container\">\n <!-- Only title, no value: -->\n @if (!!title && !value) {\n <span #titleElement class=\"title kirby-text-xlarge\" [kirbyFitHeading]=\"fitHeadingConfig\">\n {{ title }}\n </span>\n }\n\n <!-- Title and value - value: -->\n @if (!!value) {\n <span class=\"value kirby-text-display-3\" [kirbyFitHeading]=\"fitHeadingConfig\">\n {{ value }}\n @if (!!valueUnit) {\n <span class=\"value-unit semi-dark-text\">{{ valueUnit }}</span>\n }\n </span>\n }\n\n <!-- Subtitles: -->\n <ng-container\n *ngTemplateOutlet=\"subTitleTemplate; context: { $implicit: _subtitles1 }\"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"subTitleTemplate; context: { $implicit: _subtitles2 }\"\n ></ng-container>\n\n <!-- Custom section -->\n @if (!!customSectionTemplate) {\n <div class=\"custom-section\">\n <ng-container *ngTemplateOutlet=\"customSectionTemplate\"></ng-container>\n </div>\n }\n </div>\n <!-- Actions: -->\n @if (!!actionsTemplate) {\n <div #actionsElement class=\"actions\" [class.emphasize]=\"emphasizeActions\">\n <ng-container\n *ngTemplateOutlet=\"actionsTemplate; injector: _actionGroupInjector\"\n ></ng-container>\n </div>\n }\n</div>\n\n<ng-template #subTitleTemplate let-subtitles>\n @if (!!subtitles) {\n <div class=\"subtitle kirby-text-small\">\n @for (subtitle of subtitles; track subtitle) {\n <span>{{ subtitle }}</span>\n }\n </div>\n }\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column;margin-top:16px;margin-bottom:32px}@media(max-width:767px){:host:has(>.avatar::ng-deep){margin-top:8px}}@media(min-width:768px){:host{margin-top:24px}}.container{display:flex;flex-direction:column;align-items:flex-start;max-width:100%}.container>span.title{margin-bottom:0}@media(min-width:768px){:host(:not(.single-column)) .container:has(>.actions){display:grid;grid-template-columns:auto max-content;column-gap:24px}:host(:not(.single-column)) .container:has(>.actions) .title-container{grid-column-start:1}}:host(.centered){align-items:center}:host(.centered) .container{align-items:center}:host(.centered) .container>span.title{text-align:center}:host(.centered) .container>span.title.has-icon{justify-content:center}:host(.centered) .title-container{align-items:center;text-align:center}@media(min-width:768px){:host(.centered):not(.single-column) .container:has(>.actions){grid-template-columns:minmax(0,1fr) minmax(0,4fr) minmax(0,1fr);align-self:stretch}:host(.centered):not(.single-column) .container:has(>.actions) .actions{align-self:flex-start}:host(.centered):not(.single-column) .container:has(>.actions)>span.title,:host(.centered):not(.single-column) .container:has(>.actions) .title-container{grid-column-start:2}}.actions{margin-top:24px;margin-inline:8px}@media(max-width:767px){.actions:not(.emphasize){display:none}}@media(min-width:768px){:host(:not(.single-column)) .actions{display:flex;justify-content:flex-end;margin-top:0}}.avatar,.flag,.title-container,.container>span.title{margin-inline:16px}.title-container{display:flex;flex-direction:column;overflow:hidden;max-width:calc(100% - 32px)}.avatar{margin-bottom:16px}.flag{margin-bottom:4px}.flag .custom-flag{margin-block:4px}.title{margin-bottom:2px}.title.clickable{cursor:pointer}.title.has-icon{display:flex;flex-direction:row;align-items:center}.value{display:flex;align-items:baseline;max-width:100%;margin-bottom:4px}.value-unit{font-weight:initial;color:var(--kirby-text-color-semi-dark);margin-left:4px;font-size:50%}.subtitle{display:flex;flex-flow:row wrap;column-gap:.25em}.subtitle span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.custom-section{margin-top:8px}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: FitHeadingDirective, selector: "h1[kirbyFitHeading],h2[kirbyFitHeading],h3[kirbyFitHeading],[kirbyFitHeading]", inputs: ["kirbyFitHeading"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
92
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: HeaderComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
93
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.7", type: HeaderComponent, isStandalone: true, selector: "kirby-header", inputs: { centered: "centered", titleMaxLines: "titleMaxLines", emphasizeActions: "emphasizeActions", title: "title", value: "value", valueUnit: "valueUnit", subtitle1: "subtitle1", subtitle2: "subtitle2", hasInteractiveTitle: "hasInteractiveTitle" }, outputs: { titleClick: "titleClick" }, host: { properties: { "class.centered": "this.centered" } }, queries: [{ propertyName: "avatar", first: true, predicate: AvatarComponent, descendants: true }, { propertyName: "progressCircle", first: true, predicate: ProgressCircleComponent, descendants: true }, { propertyName: "flag", first: true, predicate: FlagComponent, descendants: true }, { propertyName: "actionsTemplate", first: true, predicate: HeaderActionsDirective, descendants: true, read: (TemplateRef) }, { propertyName: "customSectionTemplate", first: true, predicate: HeaderCustomSectionDirective, descendants: true, read: (TemplateRef) }, { propertyName: "customFlagTemplate", first: true, predicate: HeaderCustomFlagDirective, descendants: true, read: (TemplateRef) }, { propertyName: "titleActionIconTemplate", first: true, predicate: HeaderTitleActionIconDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "titleElement", first: true, predicate: ["titleElement"], descendants: true, read: ElementRef }, { propertyName: "actionsElement", first: true, predicate: ["actionsElement"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "@if (!!avatar || !!progressCircle) {\n <div class=\"avatar\">\n <ng-content select=\"kirby-avatar,kirby-progress-circle\"></ng-content>\n </div>\n}\n\n@if (!!flag || !!customFlagTemplate) {\n <div class=\"flag\">\n @if (!!flag) {\n <ng-content select=\"kirby-flag\"></ng-content>\n }\n <!-- Custom Content in Flag section: -->\n @if (!!customFlagTemplate) {\n <div class=\"custom-flag\">\n <ng-container *ngTemplateOutlet=\"customFlagTemplate\"></ng-container>\n </div>\n }\n </div>\n}\n\n<div class=\"container\">\n <!-- Title and value - title: -->\n @if (!!title && !!value) {\n <span\n #titleElement\n class=\"title kirby-text-medium\"\n [class.clickable]=\"hasInteractiveTitle !== false && titleClick.observed\"\n [class.has-icon]=\"!!titleActionIconTemplate\"\n (click)=\"onTitleClick($event)\"\n >\n {{ title }}\n <ng-container *ngTemplateOutlet=\"titleActionIconTemplate\"></ng-container>\n </span>\n }\n <div class=\"title-container\">\n <!-- Only title, no value: -->\n @if (!!title && !value) {\n <span #titleElement class=\"title kirby-text-xlarge\" [kirbyFitHeading]=\"fitHeadingConfig\">\n {{ title }}\n </span>\n }\n\n <!-- Title and value - value: -->\n @if (!!value) {\n <span class=\"value kirby-text-display-3\" [kirbyFitHeading]=\"fitHeadingConfig\">\n {{ value }}\n @if (!!valueUnit) {\n <span class=\"value-unit semi-dark-text\">{{ valueUnit }}</span>\n }\n </span>\n }\n\n <!-- Subtitles: -->\n <ng-container\n *ngTemplateOutlet=\"subTitleTemplate; context: { $implicit: _subtitles1 }\"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"subTitleTemplate; context: { $implicit: _subtitles2 }\"\n ></ng-container>\n\n <!-- Custom section -->\n @if (!!customSectionTemplate) {\n <div class=\"custom-section\">\n <ng-container *ngTemplateOutlet=\"customSectionTemplate\"></ng-container>\n </div>\n }\n </div>\n <!-- Actions: -->\n @if (!!actionsTemplate) {\n <div #actionsElement class=\"actions\" [class.emphasize]=\"emphasizeActions\">\n <ng-container\n *ngTemplateOutlet=\"actionsTemplate; injector: _actionGroupInjector\"\n ></ng-container>\n </div>\n }\n</div>\n\n<ng-template #subTitleTemplate let-subtitles>\n @if (!!subtitles) {\n <div class=\"subtitle kirby-text-small\">\n @for (subtitle of subtitles; track subtitle) {\n <span>{{ subtitle }}</span>\n }\n </div>\n }\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column;margin-top:16px;margin-bottom:32px}@media(max-width:767px){:host:has(>.avatar::ng-deep){margin-top:8px}}@media(min-width:768px){:host{margin-top:24px}}.container{display:flex;flex-direction:column;align-items:flex-start;max-width:100%}.container>span.title{margin-bottom:0}@media(min-width:768px){:host(:not(.single-column)) .container:has(>.actions){display:grid;grid-template-columns:auto max-content;column-gap:24px}:host(:not(.single-column)) .container:has(>.actions) .title-container{grid-column-start:1}}:host(.centered){align-items:center}:host(.centered) .container{align-items:center}:host(.centered) .container>span.title{text-align:center}:host(.centered) .container>span.title.has-icon{justify-content:center}:host(.centered) .title-container{align-items:center;text-align:center}@media(min-width:768px){:host(.centered):not(.single-column) .container:has(>.actions){grid-template-columns:minmax(0,1fr) minmax(0,4fr) minmax(0,1fr);align-self:stretch}:host(.centered):not(.single-column) .container:has(>.actions) .actions{align-self:flex-start}:host(.centered):not(.single-column) .container:has(>.actions)>span.title,:host(.centered):not(.single-column) .container:has(>.actions) .title-container{grid-column-start:2}}.actions{margin-top:24px;margin-inline:8px}@media(max-width:767px){.actions:not(.emphasize){display:none}}@media(min-width:768px){:host(:not(.single-column)) .actions{display:flex;justify-content:flex-end;margin-top:0}}.avatar,.flag,.title-container,.container>span.title{margin-inline:16px}.title-container{display:flex;flex-direction:column;overflow:hidden;max-width:calc(100% - 32px)}.avatar{margin-bottom:16px}.flag{margin-bottom:4px}.flag .custom-flag{margin-block:4px}.title{margin-bottom:2px}.title.clickable{cursor:pointer}.title.has-icon{display:flex;flex-direction:row;align-items:center}.value{display:flex;align-items:baseline;max-width:100%;margin-bottom:4px}.value-unit{font-weight:initial;color:var(--kirby-text-color-semi-dark);margin-left:4px;font-size:50%}.subtitle{display:flex;flex-flow:row wrap;column-gap:.25em}.subtitle span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.custom-section{margin-top:8px}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: FitHeadingDirective, selector: "h1[kirbyFitHeading],h2[kirbyFitHeading],h3[kirbyFitHeading],[kirbyFitHeading]", inputs: ["kirbyFitHeading"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
94
94
  }
95
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: HeaderComponent, decorators: [{
95
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: HeaderComponent, decorators: [{
96
96
  type: Component,
97
97
  args: [{ selector: 'kirby-header', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgTemplateOutlet, FitHeadingDirective], template: "@if (!!avatar || !!progressCircle) {\n <div class=\"avatar\">\n <ng-content select=\"kirby-avatar,kirby-progress-circle\"></ng-content>\n </div>\n}\n\n@if (!!flag || !!customFlagTemplate) {\n <div class=\"flag\">\n @if (!!flag) {\n <ng-content select=\"kirby-flag\"></ng-content>\n }\n <!-- Custom Content in Flag section: -->\n @if (!!customFlagTemplate) {\n <div class=\"custom-flag\">\n <ng-container *ngTemplateOutlet=\"customFlagTemplate\"></ng-container>\n </div>\n }\n </div>\n}\n\n<div class=\"container\">\n <!-- Title and value - title: -->\n @if (!!title && !!value) {\n <span\n #titleElement\n class=\"title kirby-text-medium\"\n [class.clickable]=\"hasInteractiveTitle !== false && titleClick.observed\"\n [class.has-icon]=\"!!titleActionIconTemplate\"\n (click)=\"onTitleClick($event)\"\n >\n {{ title }}\n <ng-container *ngTemplateOutlet=\"titleActionIconTemplate\"></ng-container>\n </span>\n }\n <div class=\"title-container\">\n <!-- Only title, no value: -->\n @if (!!title && !value) {\n <span #titleElement class=\"title kirby-text-xlarge\" [kirbyFitHeading]=\"fitHeadingConfig\">\n {{ title }}\n </span>\n }\n\n <!-- Title and value - value: -->\n @if (!!value) {\n <span class=\"value kirby-text-display-3\" [kirbyFitHeading]=\"fitHeadingConfig\">\n {{ value }}\n @if (!!valueUnit) {\n <span class=\"value-unit semi-dark-text\">{{ valueUnit }}</span>\n }\n </span>\n }\n\n <!-- Subtitles: -->\n <ng-container\n *ngTemplateOutlet=\"subTitleTemplate; context: { $implicit: _subtitles1 }\"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"subTitleTemplate; context: { $implicit: _subtitles2 }\"\n ></ng-container>\n\n <!-- Custom section -->\n @if (!!customSectionTemplate) {\n <div class=\"custom-section\">\n <ng-container *ngTemplateOutlet=\"customSectionTemplate\"></ng-container>\n </div>\n }\n </div>\n <!-- Actions: -->\n @if (!!actionsTemplate) {\n <div #actionsElement class=\"actions\" [class.emphasize]=\"emphasizeActions\">\n <ng-container\n *ngTemplateOutlet=\"actionsTemplate; injector: _actionGroupInjector\"\n ></ng-container>\n </div>\n }\n</div>\n\n<ng-template #subTitleTemplate let-subtitles>\n @if (!!subtitles) {\n <div class=\"subtitle kirby-text-small\">\n @for (subtitle of subtitles; track subtitle) {\n <span>{{ subtitle }}</span>\n }\n </div>\n }\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column;margin-top:16px;margin-bottom:32px}@media(max-width:767px){:host:has(>.avatar::ng-deep){margin-top:8px}}@media(min-width:768px){:host{margin-top:24px}}.container{display:flex;flex-direction:column;align-items:flex-start;max-width:100%}.container>span.title{margin-bottom:0}@media(min-width:768px){:host(:not(.single-column)) .container:has(>.actions){display:grid;grid-template-columns:auto max-content;column-gap:24px}:host(:not(.single-column)) .container:has(>.actions) .title-container{grid-column-start:1}}:host(.centered){align-items:center}:host(.centered) .container{align-items:center}:host(.centered) .container>span.title{text-align:center}:host(.centered) .container>span.title.has-icon{justify-content:center}:host(.centered) .title-container{align-items:center;text-align:center}@media(min-width:768px){:host(.centered):not(.single-column) .container:has(>.actions){grid-template-columns:minmax(0,1fr) minmax(0,4fr) minmax(0,1fr);align-self:stretch}:host(.centered):not(.single-column) .container:has(>.actions) .actions{align-self:flex-start}:host(.centered):not(.single-column) .container:has(>.actions)>span.title,:host(.centered):not(.single-column) .container:has(>.actions) .title-container{grid-column-start:2}}.actions{margin-top:24px;margin-inline:8px}@media(max-width:767px){.actions:not(.emphasize){display:none}}@media(min-width:768px){:host(:not(.single-column)) .actions{display:flex;justify-content:flex-end;margin-top:0}}.avatar,.flag,.title-container,.container>span.title{margin-inline:16px}.title-container{display:flex;flex-direction:column;overflow:hidden;max-width:calc(100% - 32px)}.avatar{margin-bottom:16px}.flag{margin-bottom:4px}.flag .custom-flag{margin-block:4px}.title{margin-bottom:2px}.title.clickable{cursor:pointer}.title.has-icon{display:flex;flex-direction:row;align-items:center}.value{display:flex;align-items:baseline;max-width:100%;margin-bottom:4px}.value-unit{font-weight:initial;color:var(--kirby-text-color-semi-dark);margin-left:4px;font-size:50%}.subtitle{display:flex;flex-flow:row wrap;column-gap:.25em}.subtitle span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.custom-section{margin-top:8px}\n"] }]
98
98
  }], ctorParameters: () => [{ type: i0.Injector }], propDecorators: { centered: [{
@@ -157,8 +157,8 @@ const imports = [
157
157
  HeaderCustomFlagDirective,
158
158
  ];
159
159
  class HeaderModule {
160
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: HeaderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
161
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.0", ngImport: i0, type: HeaderModule, imports: [CommonModule, FitHeadingDirective, HeaderComponent,
160
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: HeaderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
161
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.7", ngImport: i0, type: HeaderModule, imports: [CommonModule, FitHeadingDirective, HeaderComponent,
162
162
  HeaderActionsDirective,
163
163
  HeaderCustomSectionDirective,
164
164
  HeaderTitleActionIconDirective,
@@ -167,9 +167,9 @@ class HeaderModule {
167
167
  HeaderCustomSectionDirective,
168
168
  HeaderTitleActionIconDirective,
169
169
  HeaderCustomFlagDirective] }); }
170
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: HeaderModule, imports: [CommonModule] }); }
170
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: HeaderModule, imports: [CommonModule] }); }
171
171
  }
172
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: HeaderModule, decorators: [{
172
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: HeaderModule, decorators: [{
173
173
  type: NgModule,
174
174
  args: [{
175
175
  imports: [CommonModule, FitHeadingDirective, ...imports],
@@ -100,10 +100,10 @@ class PlatformService {
100
100
  const query = `(min-width: ${DesignTokenHelper.breakpoints.medium})`;
101
101
  return this.windowRef.nativeWindow.matchMedia(query).matches;
102
102
  }
103
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: PlatformService, deps: [{ token: i1.WindowRef }], target: i0.ɵɵFactoryTarget.Injectable }); }
104
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: PlatformService, providedIn: 'root' }); }
103
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: PlatformService, deps: [{ token: i1.WindowRef }], target: i0.ɵɵFactoryTarget.Injectable }); }
104
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: PlatformService, providedIn: 'root' }); }
105
105
  }
106
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: PlatformService, decorators: [{
106
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: PlatformService, decorators: [{
107
107
  type: Injectable,
108
108
  args: [{
109
109
  providedIn: 'root',
@@ -271,10 +271,10 @@ class LineClampHelper {
271
271
  this.renderer.removeStyle(element, config.lineClamp);
272
272
  this.renderer.removeStyle(element, config.lineHeight);
273
273
  }
274
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: LineClampHelper, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Injectable }); }
275
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: LineClampHelper }); }
274
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: LineClampHelper, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Injectable }); }
275
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: LineClampHelper }); }
276
276
  }
277
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: LineClampHelper, decorators: [{
277
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: LineClampHelper, decorators: [{
278
278
  type: Injectable
279
279
  }], ctorParameters: () => [{ type: i0.Renderer2 }] });
280
280
 
@@ -307,10 +307,10 @@ class IonicElementPartHelper {
307
307
  return;
308
308
  this.renderer.setAttribute(partElement, 'part', partName);
309
309
  }
310
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: IonicElementPartHelper, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Injectable }); }
311
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: IonicElementPartHelper }); }
310
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: IonicElementPartHelper, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Injectable }); }
311
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: IonicElementPartHelper }); }
312
312
  }
313
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: IonicElementPartHelper, decorators: [{
313
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: IonicElementPartHelper, decorators: [{
314
314
  type: Injectable
315
315
  }], ctorParameters: () => [{ type: i0.Renderer2 }] });
316
316
 
@@ -23,6 +23,7 @@ const kirbyIconSettings = {
23
23
  { name: 'calendar', svg: 'calendar.svg' },
24
24
  { name: 'camera', svg: 'camera.svg' },
25
25
  { name: 'car', svg: 'car.svg' },
26
+ { name: 'chainlink', svg: 'chainlink.svg' },
26
27
  { name: 'checkbox-outline', svg: 'checkbox-outline.svg' },
27
28
  { name: 'checkbox', svg: 'checkbox.svg' },
28
29
  { name: 'checkmark-selected', svg: 'checkmark-selected.svg' },
@@ -190,10 +191,10 @@ class IconRegistryService {
190
191
  const svg = this.iconRegistry.get(name);
191
192
  return svg ? { name, svg } : undefined;
192
193
  }
193
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: IconRegistryService, deps: [{ token: BUILT_IN_ICONS_URL }], target: i0.ɵɵFactoryTarget.Injectable }); }
194
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: IconRegistryService, providedIn: 'root' }); }
194
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: IconRegistryService, deps: [{ token: BUILT_IN_ICONS_URL }], target: i0.ɵɵFactoryTarget.Injectable }); }
195
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: IconRegistryService, providedIn: 'root' }); }
195
196
  }
196
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: IconRegistryService, decorators: [{
197
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: IconRegistryService, decorators: [{
197
198
  type: Injectable,
198
199
  args: [{
199
200
  providedIn: 'root',
@@ -257,10 +258,10 @@ forgot to configure the custom icon through the 'IconRegistryService'?`);
257
258
  this.renderer.setAttribute(this.element, 'aria-hidden', 'true');
258
259
  }
259
260
  }
260
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: IconComponent, deps: [{ token: IconRegistryService }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
261
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: IconComponent, isStandalone: true, selector: "kirby-icon", inputs: { size: "size", name: "name" }, host: { properties: { "class.kirby-icon": "true", "class": "this.size" } }, usesOnChanges: true, ngImport: i0, template: "<ion-icon [src]=\"icon?.svg\"></ion-icon>\n", styles: [":host{display:inline-flex;align-items:center;justify-content:center;font-size:var(--kirby-icon-font-size, 24px);margin-left:var(--kirby-icon-margin-left, unset);margin-right:var(--kirby-icon-margin-right, unset)}:host svg path{fill:currentcolor;stroke:currentcolor}:host(.xs){--kirby-icon-font-size: 16px}:host(.sm){--kirby-icon-font-size: 24px}:host(.md){--kirby-icon-font-size: 32px}:host(.lg){--kirby-icon-font-size: 56px}:host(.primary){color:var(--kirby-primary)}:host(.secondary){color:var(--kirby-secondary)}:host(.tertiary){color:var(--kirby-tertiary)}:host(.success){color:var(--kirby-success)}:host(.warning){color:var(--kirby-warning)}:host(.danger){color:var(--kirby-danger)}:host(.white-overlay){color:var(--kirby-white-overlay)}:host(.light){color:var(--kirby-light)}:host(.medium){color:var(--kirby-medium)}:host(.dark){color:var(--kirby-dark)}:host(.dark-overlay){color:var(--kirby-dark-overlay)}:host-context(kirby-item)[slot=start]{margin-inline-end:8px}:host-context(kirby-item)[slot=end]{margin-inline-start:8px}:host-context(ion-tab-button){pointer-events:none}\n"], dependencies: [{ kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
261
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: IconComponent, deps: [{ token: IconRegistryService }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
262
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.7", type: IconComponent, isStandalone: true, selector: "kirby-icon", inputs: { size: "size", name: "name" }, host: { properties: { "class.kirby-icon": "true", "class": "this.size" } }, usesOnChanges: true, ngImport: i0, template: "<ion-icon [src]=\"icon?.svg\"></ion-icon>\n", styles: [":host{display:inline-flex;align-items:center;justify-content:center;font-size:var(--kirby-icon-font-size, 24px);margin-left:var(--kirby-icon-margin-left, unset);margin-right:var(--kirby-icon-margin-right, unset)}:host svg path{fill:currentcolor;stroke:currentcolor}:host(.xs){--kirby-icon-font-size: 16px}:host(.sm){--kirby-icon-font-size: 24px}:host(.md){--kirby-icon-font-size: 32px}:host(.lg){--kirby-icon-font-size: 56px}:host(.primary){color:var(--kirby-primary)}:host(.secondary){color:var(--kirby-secondary)}:host(.tertiary){color:var(--kirby-tertiary)}:host(.success){color:var(--kirby-success)}:host(.warning){color:var(--kirby-warning)}:host(.danger){color:var(--kirby-danger)}:host(.white-overlay){color:var(--kirby-white-overlay)}:host(.light){color:var(--kirby-light)}:host(.medium){color:var(--kirby-medium)}:host(.dark){color:var(--kirby-dark)}:host(.dark-overlay){color:var(--kirby-dark-overlay)}:host-context(kirby-item)[slot=start]{margin-inline-end:8px}:host-context(kirby-item)[slot=end]{margin-inline-start:8px}:host-context(ion-tab-button){pointer-events:none}\n"], dependencies: [{ kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
262
263
  }
263
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: IconComponent, decorators: [{
264
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: IconComponent, decorators: [{
264
265
  type: Component,
265
266
  args: [{ selector: 'kirby-icon', host: { '[class.kirby-icon]': 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, imports: [IonIcon], template: "<ion-icon [src]=\"icon?.svg\"></ion-icon>\n", styles: [":host{display:inline-flex;align-items:center;justify-content:center;font-size:var(--kirby-icon-font-size, 24px);margin-left:var(--kirby-icon-margin-left, unset);margin-right:var(--kirby-icon-margin-right, unset)}:host svg path{fill:currentcolor;stroke:currentcolor}:host(.xs){--kirby-icon-font-size: 16px}:host(.sm){--kirby-icon-font-size: 24px}:host(.md){--kirby-icon-font-size: 32px}:host(.lg){--kirby-icon-font-size: 56px}:host(.primary){color:var(--kirby-primary)}:host(.secondary){color:var(--kirby-secondary)}:host(.tertiary){color:var(--kirby-tertiary)}:host(.success){color:var(--kirby-success)}:host(.warning){color:var(--kirby-warning)}:host(.danger){color:var(--kirby-danger)}:host(.white-overlay){color:var(--kirby-white-overlay)}:host(.light){color:var(--kirby-light)}:host(.medium){color:var(--kirby-medium)}:host(.dark){color:var(--kirby-dark)}:host(.dark-overlay){color:var(--kirby-dark-overlay)}:host-context(kirby-item)[slot=start]{margin-inline-end:8px}:host-context(kirby-item)[slot=end]{margin-inline-start:8px}:host-context(ion-tab-button){pointer-events:none}\n"] }]
266
267
  }], ctorParameters: () => [{ type: IconRegistryService }, { type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { size: [{
@@ -273,11 +274,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
273
274
  }] } });
274
275
 
275
276
  class IconModule {
276
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: IconModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
277
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.0", ngImport: i0, type: IconModule, imports: [ThemeColorDirective, IonIcon, IconComponent], exports: [IconComponent, ThemeColorDirective] }); }
278
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: IconModule, imports: [IonIcon, IconComponent] }); }
277
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: IconModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
278
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.7", ngImport: i0, type: IconModule, imports: [ThemeColorDirective, IonIcon, IconComponent], exports: [IconComponent, ThemeColorDirective] }); }
279
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: IconModule, imports: [IonIcon, IconComponent] }); }
279
280
  }
280
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: IconModule, decorators: [{
281
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: IconModule, decorators: [{
281
282
  type: NgModule,
282
283
  args: [{
283
284
  imports: [ThemeColorDirective, IonIcon, IconComponent],