@kirbydesign/designsystem 12.0.0-dev-67d5287 → 12.0.0-dev-286cdc0
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.
- package/fesm2022/kirbydesign-designsystem-accordion.mjs +12 -12
- package/fesm2022/kirbydesign-designsystem-accordion.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-action-group.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-avatar.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-avatar.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-badge.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-badge.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-button.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-button.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-calendar.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-calendar.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-card.mjs +24 -24
- package/fesm2022/kirbydesign-designsystem-card.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-chart.mjs +22 -22
- package/fesm2022/kirbydesign-designsystem-checkbox.mjs +14 -6
- package/fesm2022/kirbydesign-designsystem-checkbox.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-data-table.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-divider.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-divider.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-dropdown.mjs +10 -10
- package/fesm2022/kirbydesign-designsystem-empty-state.mjs +19 -8
- package/fesm2022/kirbydesign-designsystem-empty-state.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-fab-sheet.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-flag.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-flag.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-form-field.mjs +32 -32
- package/fesm2022/kirbydesign-designsystem-form-field.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-gesture.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-header.mjs +19 -19
- package/fesm2022/kirbydesign-designsystem-helpers.mjs +9 -9
- package/fesm2022/kirbydesign-designsystem-icon.mjs +10 -10
- package/fesm2022/kirbydesign-designsystem-item-group.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-item-sliding.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-item.mjs +12 -12
- package/fesm2022/kirbydesign-designsystem-item.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-kirby-app.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-list.mjs +49 -46
- package/fesm2022/kirbydesign-designsystem-list.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs +8 -8
- package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-menu.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-menu.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-modal.mjs +59 -50
- package/fesm2022/kirbydesign-designsystem-modal.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-page.mjs +69 -48
- package/fesm2022/kirbydesign-designsystem-page.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-popover.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-progress-circle.mjs +6 -6
- package/fesm2022/kirbydesign-designsystem-radio.mjs +12 -12
- package/fesm2022/kirbydesign-designsystem-radio.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-range.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-range.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-reorder-list.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-reorder-list.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-router-outlet.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-section-header.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-segmented-control.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-segmented-control.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-shared-floating.mjs +16 -7
- package/fesm2022/kirbydesign-designsystem-shared-floating.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-shared-portal.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-shared.mjs +21 -21
- package/fesm2022/kirbydesign-designsystem-slide-button.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-slide.mjs +13 -13
- package/fesm2022/kirbydesign-designsystem-spinner.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs +12 -12
- package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-tabs.mjs +15 -15
- package/fesm2022/kirbydesign-designsystem-tabs.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-testing-base.mjs +305 -303
- package/fesm2022/kirbydesign-designsystem-testing-base.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-testing-jasmine.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-testing-jest.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-testing.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-toast.mjs +6 -6
- package/fesm2022/kirbydesign-designsystem-toggle-button.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-toggle.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-toggle.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-types.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem.mjs +10 -10
- package/package.json +2 -2
- package/types/kirbydesign-designsystem-card.d.ts +2 -2
- package/types/kirbydesign-designsystem-card.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-checkbox.d.ts +7 -1
- package/types/kirbydesign-designsystem-checkbox.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-empty-state.d.ts +11 -0
- package/types/kirbydesign-designsystem-empty-state.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-list.d.ts +5 -0
- package/types/kirbydesign-designsystem-list.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-modal.d.ts +2 -1
- package/types/kirbydesign-designsystem-modal.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-page.d.ts +4 -0
- package/types/kirbydesign-designsystem-page.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-shared-floating.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-testing-base.d.ts +5 -0
- package/types/kirbydesign-designsystem-testing-base.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kirbydesign-designsystem-form-field.mjs","names":[],"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"],"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';\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 // The visual placeholder keeps the lowercase `mm` month token (e.g. mm/dd/yyyy),\n // independent of the uppercase `MM` used by the parse format above.\n private getPlaceholder(inputFormat: string): string {\n const placeholder = inputFormat.toLowerCase();\n return this.locale === 'da' ? placeholder.split('y').join('å') : placeholder;\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 {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnDestroy,\n} 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 changeDetection: ChangeDetectionStrategy.Eager,\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 { FORM_FIELD_CONTROL, 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 providers: [{ provide: FORM_FIELD_CONTROL, useExisting: InputComponent }],\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 get interactiveElement(): HTMLElement {\n return this.elementRef?.nativeElement;\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 { FORM_FIELD_CONTROL, 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 providers: [{ provide: FORM_FIELD_CONTROL, useExisting: TextareaComponent }],\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 get interactiveElement(): HTMLElement {\n return this.elementRef?.nativeElement;\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 { FORM_FIELD_CONTROL, FormFieldControl, WindowRef } from '@kirbydesign/designsystem/types';\nimport { Subscription } from 'rxjs';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { IconComponent } from '@kirbydesign/designsystem/icon';\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: HTMLElement;\n private nestedInteractiveErrorSubscription: Subscription;\n private _message: string | null | undefined;\n private _label: string | undefined;\n private hasWarnedMissingControl = false;\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\n @ContentChild(FORM_FIELD_CONTROL) private formFieldControl: FormFieldControl;\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 private isInputOrTextarea(): boolean {\n return (\n this.formFieldControl instanceof InputComponent ||\n this.formFieldControl instanceof TextareaComponent\n );\n }\n\n @HostBinding('class.wrap-content-in-label')\n get _wrapContentInLabel(): boolean {\n return !!this.label && this.isInputOrTextarea();\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 if (this.formFieldControl instanceof RadioGroupComponent) {\n this.formFieldControl.focus();\n } else {\n this.nestedInteractiveElement?.focus();\n }\n }\n\n openDatePicker() {\n if (!this.dateInput?.useNativeDatePicker) return;\n (this.nestedInteractiveElement as HTMLInputElement).showPicker();\n }\n\n public focus() {\n if (!this.nestedInteractiveElement) return;\n\n if (this.isInputOrTextarea()) {\n /*\n * This timeout ensures that any previous manipulation of inputElement or textareaElement\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\n ngOnInit() {\n this.isTouch = this.platform.isTouch();\n }\n\n ngAfterContentInit(): void {\n this.handleAffixOffset();\n }\n\n ngAfterContentChecked(): void {\n if (!this.formFieldControl) {\n this.warnMissingControl();\n return;\n }\n\n if (!this.nestedInteractiveElement) {\n this.registerNestedInteractive();\n }\n\n if (!this.isRegistered && this.element.isConnected && this.isInputOrTextarea()) {\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 private warnMissingControl() {\n if (!this.hasWarnedMissingControl) {\n this.hasWarnedMissingControl = true;\n console.warn(\n 'kirby-form-field: No form field control found. Ensure a component providing FORM_FIELD_CONTROL is projected.'\n );\n }\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 = this.formFieldControl.interactiveElement;\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 // set current value, then listen for changes\n this._nestedInteractiveHasError = !!this.formFieldControl?.hasError;\n this.nestedInteractiveErrorSubscription = this.formFieldControl?.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.formFieldControl instanceof InputComponent) {\n const inputElement = this.formFieldControl.interactiveElement as HTMLInputElement;\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 = inputElement.type === 'date' ? 0 : entry.contentRect.width;\n const existingPadding = parseInt(DesignTokenHelper.size('s'));\n\n this.renderer.setStyle(inputElement, `${padding}`, `${affixWidth + existingPadding}px`);\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></ng-content>\n <div class=\"suffix vertical-align semi-dark-text\" (click)=\"openDatePicker()\">\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';\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 const element: HTMLInputElement & { inputmask?: InputMask } = this.elementRef.nativeElement;\n\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 onBeforePaste: (\n value: string,\n options: { onBeforeMask: (value: string, options: object) => string }\n ) => {\n const replacesValue =\n element.selectionStart === 0 && element.selectionEnd === element.value.length;\n\n if (!this.padPrecisionDigits || !replacesValue) {\n return options.onBeforeMask(value, options);\n }\n\n element.value = value;\n element.dispatchEvent(new Event('input', { bubbles: true }));\n return false;\n },\n }).mask(element);\n this.inputmask = element.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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kirbydesign-designsystem-form-field.mjs","names":[],"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"],"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';\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 // The visual placeholder keeps the lowercase `mm` month token (e.g. mm/dd/yyyy),\n // independent of the uppercase `MM` used by the parse format above.\n private getPlaceholder(inputFormat: string): string {\n const placeholder = inputFormat.toLowerCase();\n return this.locale === 'da' ? placeholder.split('y').join('å') : placeholder;\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 {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnDestroy,\n} 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 changeDetection: ChangeDetectionStrategy.Eager,\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 { FORM_FIELD_CONTROL, 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 providers: [{ provide: FORM_FIELD_CONTROL, useExisting: InputComponent }],\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 get interactiveElement(): HTMLElement {\n return this.elementRef?.nativeElement;\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 { FORM_FIELD_CONTROL, 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 providers: [{ provide: FORM_FIELD_CONTROL, useExisting: TextareaComponent }],\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 get interactiveElement(): HTMLElement {\n return this.elementRef?.nativeElement;\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 { FORM_FIELD_CONTROL, FormFieldControl, WindowRef } from '@kirbydesign/designsystem/types';\nimport { Subscription } from 'rxjs';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { IconComponent } from '@kirbydesign/designsystem/icon';\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: HTMLElement;\n private nestedInteractiveErrorSubscription: Subscription;\n private _message: string | null | undefined;\n private _label: string | undefined;\n private hasWarnedMissingControl = false;\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\n @ContentChild(FORM_FIELD_CONTROL) private formFieldControl: FormFieldControl;\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 private isInputOrTextarea(): boolean {\n return (\n this.formFieldControl instanceof InputComponent ||\n this.formFieldControl instanceof TextareaComponent\n );\n }\n\n @HostBinding('class.wrap-content-in-label')\n get _wrapContentInLabel(): boolean {\n return !!this.label && this.isInputOrTextarea();\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 if (this.formFieldControl instanceof RadioGroupComponent) {\n this.formFieldControl.focus();\n } else {\n this.nestedInteractiveElement?.focus();\n }\n }\n\n openDatePicker() {\n if (!this.dateInput?.useNativeDatePicker) return;\n (this.nestedInteractiveElement as HTMLInputElement).showPicker();\n }\n\n public focus() {\n if (!this.nestedInteractiveElement) return;\n\n if (this.isInputOrTextarea()) {\n /*\n * This timeout ensures that any previous manipulation of inputElement or textareaElement\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\n ngOnInit() {\n this.isTouch = this.platform.isTouch();\n }\n\n ngAfterContentInit(): void {\n this.handleAffixOffset();\n }\n\n ngAfterContentChecked(): void {\n if (!this.formFieldControl) {\n this.warnMissingControl();\n return;\n }\n\n if (!this.nestedInteractiveElement) {\n this.registerNestedInteractive();\n }\n\n if (!this.isRegistered && this.element.isConnected && this.isInputOrTextarea()) {\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 private warnMissingControl() {\n if (!this.hasWarnedMissingControl) {\n this.hasWarnedMissingControl = true;\n console.warn(\n 'kirby-form-field: No form field control found. Ensure a component providing FORM_FIELD_CONTROL is projected.'\n );\n }\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 = this.formFieldControl.interactiveElement;\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 // set current value, then listen for changes\n this._nestedInteractiveHasError = !!this.formFieldControl?.hasError;\n this.nestedInteractiveErrorSubscription = this.formFieldControl?.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.formFieldControl instanceof InputComponent) {\n const inputElement = this.formFieldControl.interactiveElement as HTMLInputElement;\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 = inputElement.type === 'date' ? 0 : entry.contentRect.width;\n const existingPadding = parseInt(DesignTokenHelper.size('s'));\n\n this.renderer.setStyle(inputElement, `${padding}`, `${affixWidth + existingPadding}px`);\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></ng-content>\n <div class=\"suffix vertical-align semi-dark-text\" (click)=\"openDatePicker()\">\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';\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 const element: HTMLInputElement & { inputmask?: InputMask } = this.elementRef.nativeElement;\n\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 onBeforePaste: (\n value: string,\n options: { onBeforeMask: (value: string, options: object) => string }\n ) => {\n const replacesValue =\n element.selectionStart === 0 && element.selectionEnd === element.value.length;\n\n if (!this.padPrecisionDigits || !replacesValue) {\n return options.onBeforeMask(value, options);\n }\n\n element.value = value;\n element.dispatchEvent(new Event('input', { bubbles: true }));\n return false;\n },\n }).mask(element);\n this.inputmask = element.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"],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ var GestureController = class GestureController {
|
|
|
11
11
|
static {
|
|
12
12
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
13
13
|
minVersion: "12.0.0",
|
|
14
|
-
version: "22.2.
|
|
14
|
+
version: "22.2.3",
|
|
15
15
|
ngImport: i0,
|
|
16
16
|
type: GestureController,
|
|
17
17
|
deps: [],
|
|
@@ -21,7 +21,7 @@ var GestureController = class GestureController {
|
|
|
21
21
|
static {
|
|
22
22
|
this.ɵprov = i0.ɵɵngDeclareInjectable({
|
|
23
23
|
minVersion: "12.0.0",
|
|
24
|
-
version: "22.2.
|
|
24
|
+
version: "22.2.3",
|
|
25
25
|
ngImport: i0,
|
|
26
26
|
type: GestureController
|
|
27
27
|
});
|
|
@@ -29,7 +29,7 @@ var GestureController = class GestureController {
|
|
|
29
29
|
};
|
|
30
30
|
i0.ɵɵngDeclareClassMetadata({
|
|
31
31
|
minVersion: "12.0.0",
|
|
32
|
-
version: "22.2.
|
|
32
|
+
version: "22.2.3",
|
|
33
33
|
ngImport: i0,
|
|
34
34
|
type: GestureController,
|
|
35
35
|
decorators: [{ type: Injectable }]
|
|
@@ -11,7 +11,7 @@ var HeaderActionsDirective = class HeaderActionsDirective {
|
|
|
11
11
|
static {
|
|
12
12
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
13
13
|
minVersion: "12.0.0",
|
|
14
|
-
version: "22.2.
|
|
14
|
+
version: "22.2.3",
|
|
15
15
|
ngImport: i0,
|
|
16
16
|
type: HeaderActionsDirective,
|
|
17
17
|
deps: [],
|
|
@@ -21,7 +21,7 @@ var HeaderActionsDirective = class HeaderActionsDirective {
|
|
|
21
21
|
static {
|
|
22
22
|
this.ɵdir = i0.ɵɵngDeclareDirective({
|
|
23
23
|
minVersion: "14.0.0",
|
|
24
|
-
version: "22.2.
|
|
24
|
+
version: "22.2.3",
|
|
25
25
|
type: HeaderActionsDirective,
|
|
26
26
|
isStandalone: true,
|
|
27
27
|
selector: "[kirbyHeaderActions]",
|
|
@@ -31,7 +31,7 @@ var HeaderActionsDirective = class HeaderActionsDirective {
|
|
|
31
31
|
};
|
|
32
32
|
i0.ɵɵngDeclareClassMetadata({
|
|
33
33
|
minVersion: "12.0.0",
|
|
34
|
-
version: "22.2.
|
|
34
|
+
version: "22.2.3",
|
|
35
35
|
ngImport: i0,
|
|
36
36
|
type: HeaderActionsDirective,
|
|
37
37
|
decorators: [{
|
|
@@ -43,7 +43,7 @@ var HeaderCustomSectionDirective = class HeaderCustomSectionDirective {
|
|
|
43
43
|
static {
|
|
44
44
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
45
45
|
minVersion: "12.0.0",
|
|
46
|
-
version: "22.2.
|
|
46
|
+
version: "22.2.3",
|
|
47
47
|
ngImport: i0,
|
|
48
48
|
type: HeaderCustomSectionDirective,
|
|
49
49
|
deps: [],
|
|
@@ -53,7 +53,7 @@ var HeaderCustomSectionDirective = class HeaderCustomSectionDirective {
|
|
|
53
53
|
static {
|
|
54
54
|
this.ɵdir = i0.ɵɵngDeclareDirective({
|
|
55
55
|
minVersion: "14.0.0",
|
|
56
|
-
version: "22.2.
|
|
56
|
+
version: "22.2.3",
|
|
57
57
|
type: HeaderCustomSectionDirective,
|
|
58
58
|
isStandalone: true,
|
|
59
59
|
selector: "[kirbyHeaderCustomSection]",
|
|
@@ -63,7 +63,7 @@ var HeaderCustomSectionDirective = class HeaderCustomSectionDirective {
|
|
|
63
63
|
};
|
|
64
64
|
i0.ɵɵngDeclareClassMetadata({
|
|
65
65
|
minVersion: "12.0.0",
|
|
66
|
-
version: "22.2.
|
|
66
|
+
version: "22.2.3",
|
|
67
67
|
ngImport: i0,
|
|
68
68
|
type: HeaderCustomSectionDirective,
|
|
69
69
|
decorators: [{
|
|
@@ -75,7 +75,7 @@ var HeaderTitleActionIconDirective = class HeaderTitleActionIconDirective {
|
|
|
75
75
|
static {
|
|
76
76
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
77
77
|
minVersion: "12.0.0",
|
|
78
|
-
version: "22.2.
|
|
78
|
+
version: "22.2.3",
|
|
79
79
|
ngImport: i0,
|
|
80
80
|
type: HeaderTitleActionIconDirective,
|
|
81
81
|
deps: [],
|
|
@@ -85,7 +85,7 @@ var HeaderTitleActionIconDirective = class HeaderTitleActionIconDirective {
|
|
|
85
85
|
static {
|
|
86
86
|
this.ɵdir = i0.ɵɵngDeclareDirective({
|
|
87
87
|
minVersion: "14.0.0",
|
|
88
|
-
version: "22.2.
|
|
88
|
+
version: "22.2.3",
|
|
89
89
|
type: HeaderTitleActionIconDirective,
|
|
90
90
|
isStandalone: true,
|
|
91
91
|
selector: "[kirbyHeaderTitleActionIcon]",
|
|
@@ -95,7 +95,7 @@ var HeaderTitleActionIconDirective = class HeaderTitleActionIconDirective {
|
|
|
95
95
|
};
|
|
96
96
|
i0.ɵɵngDeclareClassMetadata({
|
|
97
97
|
minVersion: "12.0.0",
|
|
98
|
-
version: "22.2.
|
|
98
|
+
version: "22.2.3",
|
|
99
99
|
ngImport: i0,
|
|
100
100
|
type: HeaderTitleActionIconDirective,
|
|
101
101
|
decorators: [{
|
|
@@ -107,7 +107,7 @@ var HeaderCustomFlagDirective = class HeaderCustomFlagDirective {
|
|
|
107
107
|
static {
|
|
108
108
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
109
109
|
minVersion: "12.0.0",
|
|
110
|
-
version: "22.2.
|
|
110
|
+
version: "22.2.3",
|
|
111
111
|
ngImport: i0,
|
|
112
112
|
type: HeaderCustomFlagDirective,
|
|
113
113
|
deps: [],
|
|
@@ -117,7 +117,7 @@ var HeaderCustomFlagDirective = class HeaderCustomFlagDirective {
|
|
|
117
117
|
static {
|
|
118
118
|
this.ɵdir = i0.ɵɵngDeclareDirective({
|
|
119
119
|
minVersion: "14.0.0",
|
|
120
|
-
version: "22.2.
|
|
120
|
+
version: "22.2.3",
|
|
121
121
|
type: HeaderCustomFlagDirective,
|
|
122
122
|
isStandalone: true,
|
|
123
123
|
selector: "[kirbyHeaderCustomFlag]",
|
|
@@ -127,7 +127,7 @@ var HeaderCustomFlagDirective = class HeaderCustomFlagDirective {
|
|
|
127
127
|
};
|
|
128
128
|
i0.ɵɵngDeclareClassMetadata({
|
|
129
129
|
minVersion: "12.0.0",
|
|
130
|
-
version: "22.2.
|
|
130
|
+
version: "22.2.3",
|
|
131
131
|
ngImport: i0,
|
|
132
132
|
type: HeaderCustomFlagDirective,
|
|
133
133
|
decorators: [{
|
|
@@ -172,7 +172,7 @@ var HeaderComponent = class HeaderComponent {
|
|
|
172
172
|
static {
|
|
173
173
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
174
174
|
minVersion: "12.0.0",
|
|
175
|
-
version: "22.2.
|
|
175
|
+
version: "22.2.3",
|
|
176
176
|
ngImport: i0,
|
|
177
177
|
type: HeaderComponent,
|
|
178
178
|
deps: [{ token: i0.Injector }],
|
|
@@ -182,7 +182,7 @@ var HeaderComponent = class HeaderComponent {
|
|
|
182
182
|
static {
|
|
183
183
|
this.ɵcmp = i0.ɵɵngDeclareComponent({
|
|
184
184
|
minVersion: "17.0.0",
|
|
185
|
-
version: "22.2.
|
|
185
|
+
version: "22.2.3",
|
|
186
186
|
type: HeaderComponent,
|
|
187
187
|
isStandalone: true,
|
|
188
188
|
selector: "kirby-header",
|
|
@@ -285,7 +285,7 @@ var HeaderComponent = class HeaderComponent {
|
|
|
285
285
|
};
|
|
286
286
|
i0.ɵɵngDeclareClassMetadata({
|
|
287
287
|
minVersion: "12.0.0",
|
|
288
|
-
version: "22.2.
|
|
288
|
+
version: "22.2.3",
|
|
289
289
|
ngImport: i0,
|
|
290
290
|
type: HeaderComponent,
|
|
291
291
|
decorators: [{
|
|
@@ -362,7 +362,7 @@ var HeaderModule = class HeaderModule {
|
|
|
362
362
|
static {
|
|
363
363
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
364
364
|
minVersion: "12.0.0",
|
|
365
|
-
version: "22.2.
|
|
365
|
+
version: "22.2.3",
|
|
366
366
|
ngImport: i0,
|
|
367
367
|
type: HeaderModule,
|
|
368
368
|
deps: [],
|
|
@@ -372,7 +372,7 @@ var HeaderModule = class HeaderModule {
|
|
|
372
372
|
static {
|
|
373
373
|
this.ɵmod = i0.ɵɵngDeclareNgModule({
|
|
374
374
|
minVersion: "14.0.0",
|
|
375
|
-
version: "22.2.
|
|
375
|
+
version: "22.2.3",
|
|
376
376
|
ngImport: i0,
|
|
377
377
|
type: HeaderModule,
|
|
378
378
|
imports: [
|
|
@@ -396,7 +396,7 @@ var HeaderModule = class HeaderModule {
|
|
|
396
396
|
static {
|
|
397
397
|
this.ɵinj = i0.ɵɵngDeclareInjector({
|
|
398
398
|
minVersion: "12.0.0",
|
|
399
|
-
version: "22.2.
|
|
399
|
+
version: "22.2.3",
|
|
400
400
|
ngImport: i0,
|
|
401
401
|
type: HeaderModule,
|
|
402
402
|
imports: [CommonModule]
|
|
@@ -405,7 +405,7 @@ var HeaderModule = class HeaderModule {
|
|
|
405
405
|
};
|
|
406
406
|
i0.ɵɵngDeclareClassMetadata({
|
|
407
407
|
minVersion: "12.0.0",
|
|
408
|
-
version: "22.2.
|
|
408
|
+
version: "22.2.3",
|
|
409
409
|
ngImport: i0,
|
|
410
410
|
type: HeaderModule,
|
|
411
411
|
decorators: [{
|
|
@@ -51,7 +51,7 @@ var PlatformService = class PlatformService {
|
|
|
51
51
|
static {
|
|
52
52
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
53
53
|
minVersion: "12.0.0",
|
|
54
|
-
version: "22.2.
|
|
54
|
+
version: "22.2.3",
|
|
55
55
|
ngImport: i0,
|
|
56
56
|
type: PlatformService,
|
|
57
57
|
deps: [{ token: i1.WindowRef }],
|
|
@@ -61,7 +61,7 @@ var PlatformService = class PlatformService {
|
|
|
61
61
|
static {
|
|
62
62
|
this.ɵprov = i0.ɵɵngDeclareInjectable({
|
|
63
63
|
minVersion: "12.0.0",
|
|
64
|
-
version: "22.2.
|
|
64
|
+
version: "22.2.3",
|
|
65
65
|
ngImport: i0,
|
|
66
66
|
type: PlatformService,
|
|
67
67
|
providedIn: "root"
|
|
@@ -70,7 +70,7 @@ var PlatformService = class PlatformService {
|
|
|
70
70
|
};
|
|
71
71
|
i0.ɵɵngDeclareClassMetadata({
|
|
72
72
|
minVersion: "12.0.0",
|
|
73
|
-
version: "22.2.
|
|
73
|
+
version: "22.2.3",
|
|
74
74
|
ngImport: i0,
|
|
75
75
|
type: PlatformService,
|
|
76
76
|
decorators: [{
|
|
@@ -177,7 +177,7 @@ var LineClampHelper = class LineClampHelper {
|
|
|
177
177
|
static {
|
|
178
178
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
179
179
|
minVersion: "12.0.0",
|
|
180
|
-
version: "22.2.
|
|
180
|
+
version: "22.2.3",
|
|
181
181
|
ngImport: i0,
|
|
182
182
|
type: LineClampHelper,
|
|
183
183
|
deps: [{ token: i0.Renderer2 }],
|
|
@@ -187,7 +187,7 @@ var LineClampHelper = class LineClampHelper {
|
|
|
187
187
|
static {
|
|
188
188
|
this.ɵprov = i0.ɵɵngDeclareInjectable({
|
|
189
189
|
minVersion: "12.0.0",
|
|
190
|
-
version: "22.2.
|
|
190
|
+
version: "22.2.3",
|
|
191
191
|
ngImport: i0,
|
|
192
192
|
type: LineClampHelper
|
|
193
193
|
});
|
|
@@ -195,7 +195,7 @@ var LineClampHelper = class LineClampHelper {
|
|
|
195
195
|
};
|
|
196
196
|
i0.ɵɵngDeclareClassMetadata({
|
|
197
197
|
minVersion: "12.0.0",
|
|
198
|
-
version: "22.2.
|
|
198
|
+
version: "22.2.3",
|
|
199
199
|
ngImport: i0,
|
|
200
200
|
type: LineClampHelper,
|
|
201
201
|
decorators: [{ type: Injectable }],
|
|
@@ -226,7 +226,7 @@ var IonicElementPartHelper = class IonicElementPartHelper {
|
|
|
226
226
|
static {
|
|
227
227
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
228
228
|
minVersion: "12.0.0",
|
|
229
|
-
version: "22.2.
|
|
229
|
+
version: "22.2.3",
|
|
230
230
|
ngImport: i0,
|
|
231
231
|
type: IonicElementPartHelper,
|
|
232
232
|
deps: [{ token: i0.Renderer2 }],
|
|
@@ -236,7 +236,7 @@ var IonicElementPartHelper = class IonicElementPartHelper {
|
|
|
236
236
|
static {
|
|
237
237
|
this.ɵprov = i0.ɵɵngDeclareInjectable({
|
|
238
238
|
minVersion: "12.0.0",
|
|
239
|
-
version: "22.2.
|
|
239
|
+
version: "22.2.3",
|
|
240
240
|
ngImport: i0,
|
|
241
241
|
type: IonicElementPartHelper
|
|
242
242
|
});
|
|
@@ -244,7 +244,7 @@ var IonicElementPartHelper = class IonicElementPartHelper {
|
|
|
244
244
|
};
|
|
245
245
|
i0.ɵɵngDeclareClassMetadata({
|
|
246
246
|
minVersion: "12.0.0",
|
|
247
|
-
version: "22.2.
|
|
247
|
+
version: "22.2.3",
|
|
248
248
|
ngImport: i0,
|
|
249
249
|
type: IonicElementPartHelper,
|
|
250
250
|
decorators: [{ type: Injectable }],
|
|
@@ -671,7 +671,7 @@ var IconRegistryService = class IconRegistryService {
|
|
|
671
671
|
static {
|
|
672
672
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
673
673
|
minVersion: "12.0.0",
|
|
674
|
-
version: "22.2.
|
|
674
|
+
version: "22.2.3",
|
|
675
675
|
ngImport: i0,
|
|
676
676
|
type: IconRegistryService,
|
|
677
677
|
deps: [{ token: BUILT_IN_ICONS_URL }],
|
|
@@ -681,7 +681,7 @@ var IconRegistryService = class IconRegistryService {
|
|
|
681
681
|
static {
|
|
682
682
|
this.ɵprov = i0.ɵɵngDeclareInjectable({
|
|
683
683
|
minVersion: "12.0.0",
|
|
684
|
-
version: "22.2.
|
|
684
|
+
version: "22.2.3",
|
|
685
685
|
ngImport: i0,
|
|
686
686
|
type: IconRegistryService,
|
|
687
687
|
providedIn: "root"
|
|
@@ -690,7 +690,7 @@ var IconRegistryService = class IconRegistryService {
|
|
|
690
690
|
};
|
|
691
691
|
i0.ɵɵngDeclareClassMetadata({
|
|
692
692
|
minVersion: "12.0.0",
|
|
693
|
-
version: "22.2.
|
|
693
|
+
version: "22.2.3",
|
|
694
694
|
ngImport: i0,
|
|
695
695
|
type: IconRegistryService,
|
|
696
696
|
decorators: [{
|
|
@@ -752,7 +752,7 @@ forgot to configure the custom icon through the 'IconRegistryService'?`);
|
|
|
752
752
|
static {
|
|
753
753
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
754
754
|
minVersion: "12.0.0",
|
|
755
|
-
version: "22.2.
|
|
755
|
+
version: "22.2.3",
|
|
756
756
|
ngImport: i0,
|
|
757
757
|
type: IconComponent,
|
|
758
758
|
deps: [
|
|
@@ -766,7 +766,7 @@ forgot to configure the custom icon through the 'IconRegistryService'?`);
|
|
|
766
766
|
static {
|
|
767
767
|
this.ɵcmp = i0.ɵɵngDeclareComponent({
|
|
768
768
|
minVersion: "14.0.0",
|
|
769
|
-
version: "22.2.
|
|
769
|
+
version: "22.2.3",
|
|
770
770
|
type: IconComponent,
|
|
771
771
|
isStandalone: true,
|
|
772
772
|
selector: "kirby-icon",
|
|
@@ -806,7 +806,7 @@ forgot to configure the custom icon through the 'IconRegistryService'?`);
|
|
|
806
806
|
};
|
|
807
807
|
i0.ɵɵngDeclareClassMetadata({
|
|
808
808
|
minVersion: "12.0.0",
|
|
809
|
-
version: "22.2.
|
|
809
|
+
version: "22.2.3",
|
|
810
810
|
ngImport: i0,
|
|
811
811
|
type: IconComponent,
|
|
812
812
|
decorators: [{
|
|
@@ -837,7 +837,7 @@ var IconModule = class IconModule {
|
|
|
837
837
|
static {
|
|
838
838
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
839
839
|
minVersion: "12.0.0",
|
|
840
|
-
version: "22.2.
|
|
840
|
+
version: "22.2.3",
|
|
841
841
|
ngImport: i0,
|
|
842
842
|
type: IconModule,
|
|
843
843
|
deps: [],
|
|
@@ -847,7 +847,7 @@ var IconModule = class IconModule {
|
|
|
847
847
|
static {
|
|
848
848
|
this.ɵmod = i0.ɵɵngDeclareNgModule({
|
|
849
849
|
minVersion: "14.0.0",
|
|
850
|
-
version: "22.2.
|
|
850
|
+
version: "22.2.3",
|
|
851
851
|
ngImport: i0,
|
|
852
852
|
type: IconModule,
|
|
853
853
|
imports: [
|
|
@@ -861,7 +861,7 @@ var IconModule = class IconModule {
|
|
|
861
861
|
static {
|
|
862
862
|
this.ɵinj = i0.ɵɵngDeclareInjector({
|
|
863
863
|
minVersion: "12.0.0",
|
|
864
|
-
version: "22.2.
|
|
864
|
+
version: "22.2.3",
|
|
865
865
|
ngImport: i0,
|
|
866
866
|
type: IconModule,
|
|
867
867
|
imports: [IonIcon, IconComponent]
|
|
@@ -870,7 +870,7 @@ var IconModule = class IconModule {
|
|
|
870
870
|
};
|
|
871
871
|
i0.ɵɵngDeclareClassMetadata({
|
|
872
872
|
minVersion: "12.0.0",
|
|
873
|
-
version: "22.2.
|
|
873
|
+
version: "22.2.3",
|
|
874
874
|
ngImport: i0,
|
|
875
875
|
type: IconModule,
|
|
876
876
|
decorators: [{
|