@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.
Files changed (96) hide show
  1. package/fesm2022/kirbydesign-designsystem-accordion.mjs +12 -12
  2. package/fesm2022/kirbydesign-designsystem-accordion.mjs.map +1 -1
  3. package/fesm2022/kirbydesign-designsystem-action-group.mjs +3 -3
  4. package/fesm2022/kirbydesign-designsystem-avatar.mjs +5 -5
  5. package/fesm2022/kirbydesign-designsystem-avatar.mjs.map +1 -1
  6. package/fesm2022/kirbydesign-designsystem-badge.mjs +5 -5
  7. package/fesm2022/kirbydesign-designsystem-badge.mjs.map +1 -1
  8. package/fesm2022/kirbydesign-designsystem-button.mjs +5 -5
  9. package/fesm2022/kirbydesign-designsystem-button.mjs.map +1 -1
  10. package/fesm2022/kirbydesign-designsystem-calendar.mjs +7 -7
  11. package/fesm2022/kirbydesign-designsystem-calendar.mjs.map +1 -1
  12. package/fesm2022/kirbydesign-designsystem-card.mjs +24 -24
  13. package/fesm2022/kirbydesign-designsystem-card.mjs.map +1 -1
  14. package/fesm2022/kirbydesign-designsystem-chart.mjs +22 -22
  15. package/fesm2022/kirbydesign-designsystem-checkbox.mjs +14 -6
  16. package/fesm2022/kirbydesign-designsystem-checkbox.mjs.map +1 -1
  17. package/fesm2022/kirbydesign-designsystem-data-table.mjs +7 -7
  18. package/fesm2022/kirbydesign-designsystem-divider.mjs +5 -5
  19. package/fesm2022/kirbydesign-designsystem-divider.mjs.map +1 -1
  20. package/fesm2022/kirbydesign-designsystem-dropdown.mjs +10 -10
  21. package/fesm2022/kirbydesign-designsystem-empty-state.mjs +19 -8
  22. package/fesm2022/kirbydesign-designsystem-empty-state.mjs.map +1 -1
  23. package/fesm2022/kirbydesign-designsystem-fab-sheet.mjs +3 -3
  24. package/fesm2022/kirbydesign-designsystem-flag.mjs +5 -5
  25. package/fesm2022/kirbydesign-designsystem-flag.mjs.map +1 -1
  26. package/fesm2022/kirbydesign-designsystem-form-field.mjs +32 -32
  27. package/fesm2022/kirbydesign-designsystem-form-field.mjs.map +1 -1
  28. package/fesm2022/kirbydesign-designsystem-gesture.mjs +3 -3
  29. package/fesm2022/kirbydesign-designsystem-header.mjs +19 -19
  30. package/fesm2022/kirbydesign-designsystem-helpers.mjs +9 -9
  31. package/fesm2022/kirbydesign-designsystem-icon.mjs +10 -10
  32. package/fesm2022/kirbydesign-designsystem-item-group.mjs +3 -3
  33. package/fesm2022/kirbydesign-designsystem-item-sliding.mjs +3 -3
  34. package/fesm2022/kirbydesign-designsystem-item.mjs +12 -12
  35. package/fesm2022/kirbydesign-designsystem-item.mjs.map +1 -1
  36. package/fesm2022/kirbydesign-designsystem-kirby-app.mjs +7 -7
  37. package/fesm2022/kirbydesign-designsystem-list.mjs +49 -46
  38. package/fesm2022/kirbydesign-designsystem-list.mjs.map +1 -1
  39. package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs +8 -8
  40. package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs.map +1 -1
  41. package/fesm2022/kirbydesign-designsystem-menu.mjs +5 -5
  42. package/fesm2022/kirbydesign-designsystem-menu.mjs.map +1 -1
  43. package/fesm2022/kirbydesign-designsystem-modal.mjs +59 -50
  44. package/fesm2022/kirbydesign-designsystem-modal.mjs.map +1 -1
  45. package/fesm2022/kirbydesign-designsystem-page.mjs +69 -48
  46. package/fesm2022/kirbydesign-designsystem-page.mjs.map +1 -1
  47. package/fesm2022/kirbydesign-designsystem-popover.mjs +3 -3
  48. package/fesm2022/kirbydesign-designsystem-progress-circle.mjs +6 -6
  49. package/fesm2022/kirbydesign-designsystem-radio.mjs +12 -12
  50. package/fesm2022/kirbydesign-designsystem-radio.mjs.map +1 -1
  51. package/fesm2022/kirbydesign-designsystem-range.mjs +5 -5
  52. package/fesm2022/kirbydesign-designsystem-range.mjs.map +1 -1
  53. package/fesm2022/kirbydesign-designsystem-reorder-list.mjs +5 -5
  54. package/fesm2022/kirbydesign-designsystem-reorder-list.mjs.map +1 -1
  55. package/fesm2022/kirbydesign-designsystem-router-outlet.mjs +7 -7
  56. package/fesm2022/kirbydesign-designsystem-section-header.mjs +3 -3
  57. package/fesm2022/kirbydesign-designsystem-segmented-control.mjs +5 -5
  58. package/fesm2022/kirbydesign-designsystem-segmented-control.mjs.map +1 -1
  59. package/fesm2022/kirbydesign-designsystem-shared-floating.mjs +16 -7
  60. package/fesm2022/kirbydesign-designsystem-shared-floating.mjs.map +1 -1
  61. package/fesm2022/kirbydesign-designsystem-shared-portal.mjs +3 -3
  62. package/fesm2022/kirbydesign-designsystem-shared.mjs +21 -21
  63. package/fesm2022/kirbydesign-designsystem-slide-button.mjs +3 -3
  64. package/fesm2022/kirbydesign-designsystem-slide.mjs +13 -13
  65. package/fesm2022/kirbydesign-designsystem-spinner.mjs +7 -7
  66. package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs +12 -12
  67. package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs.map +1 -1
  68. package/fesm2022/kirbydesign-designsystem-tabs.mjs +15 -15
  69. package/fesm2022/kirbydesign-designsystem-tabs.mjs.map +1 -1
  70. package/fesm2022/kirbydesign-designsystem-testing-base.mjs +305 -303
  71. package/fesm2022/kirbydesign-designsystem-testing-base.mjs.map +1 -1
  72. package/fesm2022/kirbydesign-designsystem-testing-jasmine.mjs +4 -4
  73. package/fesm2022/kirbydesign-designsystem-testing-jest.mjs +4 -4
  74. package/fesm2022/kirbydesign-designsystem-testing.mjs +4 -4
  75. package/fesm2022/kirbydesign-designsystem-toast.mjs +6 -6
  76. package/fesm2022/kirbydesign-designsystem-toggle-button.mjs +7 -7
  77. package/fesm2022/kirbydesign-designsystem-toggle.mjs +5 -5
  78. package/fesm2022/kirbydesign-designsystem-toggle.mjs.map +1 -1
  79. package/fesm2022/kirbydesign-designsystem-types.mjs +3 -3
  80. package/fesm2022/kirbydesign-designsystem.mjs +10 -10
  81. package/package.json +2 -2
  82. package/types/kirbydesign-designsystem-card.d.ts +2 -2
  83. package/types/kirbydesign-designsystem-card.d.ts.map +1 -1
  84. package/types/kirbydesign-designsystem-checkbox.d.ts +7 -1
  85. package/types/kirbydesign-designsystem-checkbox.d.ts.map +1 -1
  86. package/types/kirbydesign-designsystem-empty-state.d.ts +11 -0
  87. package/types/kirbydesign-designsystem-empty-state.d.ts.map +1 -1
  88. package/types/kirbydesign-designsystem-list.d.ts +5 -0
  89. package/types/kirbydesign-designsystem-list.d.ts.map +1 -1
  90. package/types/kirbydesign-designsystem-modal.d.ts +2 -1
  91. package/types/kirbydesign-designsystem-modal.d.ts.map +1 -1
  92. package/types/kirbydesign-designsystem-page.d.ts +4 -0
  93. package/types/kirbydesign-designsystem-page.d.ts.map +1 -1
  94. package/types/kirbydesign-designsystem-shared-floating.d.ts.map +1 -1
  95. package/types/kirbydesign-designsystem-testing-base.d.ts +5 -0
  96. package/types/kirbydesign-designsystem-testing-base.d.ts.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"kirbydesign-designsystem-list.mjs","names":[],"sources":["../../list/src/directives/infinite-scroll.directive.ts","../../list/src/directives/list-item-color.directive.ts","../../list/src/helpers/list-helper.ts","../../list/src/list-experimental/list-experimental.component.ts","../../list/src/list-experimental/list-experimental.component.html","../../list/src/list-header/list-header.component.ts","../../list/src/list-header/list-header.component.html","../../list/src/list-item/list-item.component.ts","../../list/src/list-item/list-item.component.html","../../list/src/list-section-header/list-section-header.component.ts","../../list/src/list-section-header/list-section-header.component.html","../../list/src/list.directive.ts","../../list/src/list.component.ts","../../list/src/list.component.html","../../list/src/list.module.ts"],"sourcesContent":["import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n NgZone,\n OnDestroy,\n Output,\n} from '@angular/core';\nimport { WindowRef } from '@kirbydesign/designsystem/types';\nimport { fromEvent, Subject } from 'rxjs';\nimport { debounceTime, filter, map, takeUntil } from 'rxjs/operators';\n\nimport { Scroll } from './scroll.model';\n\n/**\n * Specify debounce duration in ms\n */\nexport const INFINITE_SCROLL_DEBOUNCE = 100;\n\n@Directive({ selector: '[kirbyInfiniteScroll]' })\nexport class InfiniteScrollDirective implements AfterViewInit, OnDestroy {\n /**\n * Event that will be triggered when the user has scrolled to\n * bottom of the element\n */\n @Output() scrollEnd = new EventEmitter<void>();\n\n /**\n * If true then {@link scrollEnd} event should NOT be emitted\n */\n @Input() disabled = false;\n\n /**\n * Emits a new value on element scroll event\n */\n scroll$: Subject<Scroll> = new Subject<Scroll>();\n\n /**\n * Completes on component destroy lifecycle event\n * used to unsubscribe from infinite observables\n */\n private ngUnsubscribe$ = new Subject<void>();\n\n /**\n * An offset from the bottom of the element to trigger {@link scrollEnd} event\n */\n private offset = 0.8;\n\n constructor(\n private elementRef: ElementRef,\n private windowRef: WindowRef,\n private zone: NgZone\n ) {}\n\n ngAfterViewInit(): void {\n /**\n * Subscribe to {@link scroll$} observable and emit {@link scrollEnd} event\n * when element scroll position has surpassed the offset.\n */\n this.scroll$\n .pipe(\n takeUntil(this.ngUnsubscribe$),\n debounceTime(INFINITE_SCROLL_DEBOUNCE),\n filter(() => !this.disabled),\n filter((scroll) => {\n return (\n scroll.elementHeight * (1 - this.offset) >=\n scroll.distanceToViewBottom - scroll.viewHeight\n );\n })\n )\n .subscribe(() => {\n this.scrollEnd.emit();\n });\n\n /**\n * Subscribe to the ionScroll event on the ion-content around the list (if any)\n * and emit {@link scrollEnd} event when element scroll position has surpassed the offset.\n */\n setTimeout(() => {\n const ionContent: HTMLElement = this.elementRef.nativeElement.closest('ion-content');\n if (ionContent) {\n // we run the 'ionScroll' event outside angular, as it would trigger change detection on each scroll\n this.zone.runOutsideAngular(() => {\n fromEvent<any>(ionContent, 'ionScroll')\n .pipe(\n takeUntil(this.ngUnsubscribe$),\n debounceTime(INFINITE_SCROLL_DEBOUNCE),\n filter(() => !this.disabled),\n map(() => this.getScroll()),\n filter((scroll) => {\n return (\n scroll.elementHeight * (1 - this.offset) >=\n scroll.distanceToViewBottom - scroll.viewHeight\n );\n })\n )\n .subscribe(() => {\n // we make sure to emit the event inside angular again. As we want to show the spinner and need change detection for that.\n this.zone.run(() => this.scrollEnd.emit());\n });\n });\n }\n });\n }\n\n /**\n * On element scroll event emit next {@link scroll$} observable value\n */\n @HostListener('window:scroll')\n onScroll(): void {\n if (this.disabled) return;\n const scroll = this.getScroll();\n this.scroll$.next(scroll);\n }\n\n /**\n * trigger {@link ngUnsubscribe} complete on component destroy lifecycle hook\n */\n ngOnDestroy(): void {\n this.ngUnsubscribe$.next();\n this.ngUnsubscribe$.complete();\n }\n\n private getScroll(): Scroll {\n const element = this.elementRef.nativeElement as HTMLElement;\n const boundindClientRect = element.getBoundingClientRect();\n\n const distanceToViewBottom = boundindClientRect.bottom;\n const elementHeight = boundindClientRect.height;\n const viewHeight = this.windowRef.nativeWindow.innerHeight;\n\n return { distanceToViewBottom, elementHeight, viewHeight };\n }\n}\n","import { Directive, HostBinding, Input, OnChanges } from '@angular/core';\n\nimport { ThemeColor } from '@kirbydesign/core';\n\n@Directive({ selector: '[kirbyListItemColor]' })\nexport class ListItemColorDirective implements OnChanges {\n @Input()\n kirbyListItemColor: (item: any) => ThemeColor;\n @Input() item: any;\n @HostBinding('class')\n color: ThemeColor;\n\n ngOnChanges(): void {\n this.color = this.getColor();\n }\n\n private getColor(): ThemeColor {\n if (!this.kirbyListItemColor || !this.item) {\n return;\n }\n\n const themeColor = this.kirbyListItemColor(this.item);\n return themeColor;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ListComponent } from '../list.component';\n\ntype Section<T> = {\n name: string;\n items: T[];\n};\n\ntype SectionWithStandAloneItems<T> = {\n name: string;\n lists: T[][];\n};\n\n@Injectable()\nexport class ListHelper {\n public onLoadOnDemand(component: ListComponent) {\n if (component.isLoadOnDemandEnabled && !component._isLoading) {\n component._isLoading = true;\n component.loadOnDemand.emit({\n complete: (disableLoadOnDemand: boolean) => {\n component.isLoadOnDemandEnabled = !disableLoadOnDemand;\n component._isLoading = false;\n },\n });\n }\n }\n\n public groupSections<T>(items: T[], getGroupName: (item: T) => string): Section<T>[] {\n const groupsMap = new Map<string, T[]>();\n\n items.forEach((item) => {\n const itemGroup = getGroupName(item);\n const groupItems = groupsMap.get(itemGroup);\n\n if (groupItems) {\n groupItems.push(item);\n } else {\n groupsMap.set(itemGroup, [item]);\n }\n });\n\n return Array.from(groupsMap)\n .sort(([name], [otherName]) => name.localeCompare(otherName))\n .map(([name, items]) => {\n return { name, items };\n });\n }\n\n public groupStandAloneItems<T>(items: T[], standAloneProperty: string): { items: T[] }[] {\n const list = items.reduce(\n (accumulator, item) => {\n const lastList = accumulator[accumulator.length - 1];\n const lastItemInList = lastList[lastList.length - 1];\n\n if (!lastItemInList) {\n lastList.push(item);\n } else if (!item[standAloneProperty] && !lastItemInList[standAloneProperty]) {\n lastList.push(item);\n } else {\n accumulator.push([item]);\n }\n\n return accumulator;\n },\n [[]] as [T[]]\n );\n\n return list.map((items) => {\n return { items };\n });\n }\n\n public groupSectionsWithStandAloneItems<T>(\n items: T[],\n getGroupName: (item: T) => string,\n standAloneProperty: string\n ): SectionWithStandAloneItems<T>[] {\n const sectionsMap = new Map<string, T[][]>();\n\n items.forEach((item) => {\n const sectionName = getGroupName(item);\n\n if (sectionsMap.has(sectionName)) {\n const section = sectionsMap.get(sectionName);\n const lastListInSection = section[section.length - 1];\n const lastItemInList = lastListInSection[lastListInSection.length - 1];\n\n if (!item[standAloneProperty] && !lastItemInList[standAloneProperty]) {\n lastListInSection.push(item);\n } else {\n section.push([item]);\n }\n } else {\n sectionsMap.set(sectionName, [[item]]);\n }\n });\n\n return Array.from(sectionsMap)\n .sort(([name], [otherName]) => name.localeCompare(otherName))\n .map(([name, lists]) => {\n return { name, lists };\n });\n }\n}\n","import { ChangeDetectionStrategy, Component, HostListener, ViewChild } from '@angular/core';\nimport { IonList } from '@ionic/angular';\nimport { elementHasAncestor } from '@kirbydesign/designsystem/helpers';\n\n@Component({\n selector: 'kirby-list-experimental',\n templateUrl: './list-experimental.component.html',\n styleUrls: ['./list-experimental.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ListExperimentalComponent {\n @ViewChild(IonList, { static: true }) list: IonList;\n\n @HostListener('click', ['$event'])\n closeAllSlidingItems(e: MouseEvent) {\n if (elementHasAncestor(e.target as HTMLElement, 'ion-item-option', 'ion-list')) {\n this.list.closeSlidingItems();\n }\n }\n}\n","<ng-content select=\"[outside]\"></ng-content>\n<div class=\"rounded shadow first-item-padding last-item-padding\">\n <ng-content></ng-content>\n</div>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'kirby-list-header',\n templateUrl: './list-header.component.html',\n styleUrls: ['./list-header.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ListHeaderComponent {\n constructor() {}\n}\n","<ng-content></ng-content>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { IonItemOptions, IonItemSliding, IonLabel } from '@ionic/angular';\n\nimport { ThemeColor } from '@kirbydesign/core';\nimport { PlatformService } from '@kirbydesign/designsystem/helpers';\n\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { IconComponent } from '@kirbydesign/designsystem/icon';\nimport { ListSwipeAction, ListSwipeDirection, ListSwipeEnd } from '../list-swipe-action.type';\nimport { ListItemColorDirective } from '../directives/list-item-color.directive';\n\nexport type BoundaryClass = 'first' | 'last';\n\n@Component({\n selector: 'kirby-list-item',\n templateUrl: './list-item.component.html',\n styleUrls: ['../list.component.scss', './list-item.component.scss'],\n imports: [\n IonItemSliding,\n ListItemColorDirective,\n NgClass,\n NgTemplateOutlet,\n IonItemOptions,\n IconComponent,\n IonLabel,\n ],\n changeDetection: ChangeDetectionStrategy.Eager,\n})\nexport class ListItemComponent implements OnInit, AfterViewInit {\n _isSwipingEnabled = false;\n\n constructor(private platform: PlatformService) {\n this.initializeSwipeActions();\n }\n\n @ViewChild(IonItemSliding) ionItemSliding: IonItemSliding;\n\n @Input() item: any;\n\n @Input() boundaryClass: BoundaryClass | BoundaryClass[];\n\n @Input() swipeActions: ListSwipeAction[] = [];\n\n @Input() itemTemplate: TemplateRef<any>;\n\n @Input() isSelected: boolean;\n\n @Input() isSelectable: boolean;\n\n @Input() getItemColor: (item: any) => ThemeColor;\n\n @Output() itemSelect = new EventEmitter<any>();\n\n _onItemSelect(item: any) {\n if (!this.isSelectable) return;\n this.itemSelect.emit(item);\n }\n\n @Output() swipeActionSelect = new EventEmitter<any>();\n\n _onSwipeActionSelect(swipeAction, item, event) {\n this.swipeActionSelect.emit({\n swipeAction,\n item,\n event,\n });\n }\n\n ngOnInit() {\n this.initializeSwipeActions();\n }\n\n ngAfterViewInit(): void {\n if (!this.itemTemplate) {\n console.warn('No item template was provided.');\n }\n }\n\n _hasSwipeActions(item: any): boolean {\n if (!Array.isArray(this.swipeActions)) {\n return false;\n }\n return this.swipeActions.some((swipeAction) => {\n if (swipeAction.isDisabled instanceof Function && swipeAction.isDisabled(item)) {\n return false;\n }\n if (swipeAction.isDisabled === true) {\n return false;\n }\n return swipeAction.position === 'left' || swipeAction.position === 'right';\n });\n }\n\n _getSwipeActions(item: any, direction?: ListSwipeDirection): ListSwipeAction[] {\n if (!Array.isArray(this.swipeActions)) {\n return [];\n }\n return this.swipeActions.filter((swipeAction) => {\n if (this.isSwipeActionDisabled(swipeAction, item)) {\n return false;\n }\n return direction ? swipeAction.position === direction : true;\n });\n }\n\n private isSwipeActionDisabled(swipeAction: ListSwipeAction, item: any): boolean {\n if (swipeAction.isDisabled instanceof Function && swipeAction.isDisabled(item)) {\n return true;\n }\n return swipeAction.isDisabled === true;\n }\n\n _getSwipeActionEnd(item: any): ListSwipeEnd {\n if (this._getSwipeActions(item, 'left').length) {\n return 'start';\n }\n return 'end';\n }\n\n _getSwipeActionIcon(swipeAction: ListSwipeAction, item: any): string {\n if (!swipeAction.icon) return;\n\n if (swipeAction.icon instanceof Function) {\n return swipeAction.icon(item);\n }\n return swipeAction.icon;\n }\n\n _getSwipeActionTitle(swipeAction: ListSwipeAction, item: any): string {\n if (swipeAction.title instanceof Function) {\n return swipeAction.title(item);\n }\n return swipeAction.title;\n }\n\n _getSwipeActionType(swipeAction: ListSwipeAction, item: any): ThemeColor {\n if (swipeAction.type instanceof Function) {\n return swipeAction.type(item);\n }\n return swipeAction.type;\n }\n\n private initializeSwipeActions(): void {\n if (this.swipeActions && this.swipeActions.length) {\n this._isSwipingEnabled = this.platform.isTouch();\n }\n }\n}\n","<ion-item-sliding\n [class.selected]=\"isSelected\"\n [kirbyListItemColor]=\"getItemColor\"\n [item]=\"item\"\n [disabled]=\"_isSwipingEnabled ? null : true\"\n keyHandler\n [ngClass]=\"boundaryClass\"\n (click)=\"_onItemSelect(item)\"\n>\n <ng-container\n *ngTemplateOutlet=\"swipeActionsTemplate; context: { $implicit: item }\"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: { $implicit: item }\"></ng-container>\n</ion-item-sliding>\n\n<ng-template #swipeActionsTemplate let-item>\n @if (_hasSwipeActions(item)) {\n <ion-item-options [side]=\"_getSwipeActionEnd(item)\">\n <div class=\"swipe-action\">\n @for (swipeAction of _getSwipeActions(item); track swipeAction.title) {\n <ion-item-option\n [ngClass]=\"_getSwipeActionType(swipeAction, item)\"\n (click)=\"_onSwipeActionSelect(swipeAction, item, $event)\"\n >\n <div class=\"item-content\">\n @if (_getSwipeActionIcon(swipeAction, item)) {\n <kirby-icon size=\"sm\" [name]=\"_getSwipeActionIcon(swipeAction, item)\"></kirby-icon>\n }\n <ion-label>\n {{ _getSwipeActionTitle(swipeAction, item) }}\n </ion-label>\n </div>\n </ion-item-option>\n }\n </div>\n </ion-item-options>\n }\n</ng-template>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n selector: 'kirby-list-section-header',\n templateUrl: './list-section-header.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ListSectionHeaderComponent {\n @Input() title: string;\n}\n","<div class=\"header\">\n <span class=\"kirby-text-small\">{{ title }}</span>\n</div>\n","import { Directive } from '@angular/core';\n\n@Directive({ selector: '[kirbyListItemTemplate]' })\nexport class ListItemTemplateDirective {}\n\n@Directive({ selector: '[kirbyListHeader], [kirbyListHeaderTemplate]' })\nexport class ListHeaderDirective {}\n\n@Directive({ selector: '[kirbyListSectionHeader], [kirbyListSectionHeaderTemplate]' })\nexport class ListSectionHeaderDirective {}\n\n@Directive({ selector: '[kirbyListFooter], [kirbyListFooterTemplate]' })\nexport class ListFooterDirective {}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n OnInit,\n Output,\n Renderer2,\n TemplateRef,\n TrackByFunction,\n ViewChild,\n} from '@angular/core';\n\nimport { ThemeColor } from '@kirbydesign/core';\n\nimport { forwardAttributes } from '@kirbydesign/designsystem/shared';\nimport { IonItemDivider, IonItemGroup, IonList, IonListHeader } from '@ionic/angular';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { SpinnerComponent } from '@kirbydesign/designsystem/spinner';\nimport { InfiniteScrollDirective } from './directives/infinite-scroll.directive';\nimport { ListHelper } from './helpers/list-helper';\nimport { BoundaryClass, ListItemComponent } from './list-item/list-item.component';\nimport { ListSwipeAction } from './list-swipe-action.type';\nimport {\n ListFooterDirective,\n ListHeaderDirective,\n ListItemTemplateDirective,\n ListSectionHeaderDirective,\n} from './list.directive';\nimport { LoadOnDemandEvent } from './list.event';\n\nexport type ListShape = 'square' | 'rounded' | 'none';\n\nexport type StandAloneSpacing =\n 'xxxxs' | 'xxxs' | 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl' | 'xxxl';\n\n@Component({\n selector: 'kirby-list',\n templateUrl: './list.component.html',\n styleUrls: ['./list.component.scss'],\n providers: [ListHelper],\n imports: [\n IonList,\n InfiniteScrollDirective,\n IonListHeader,\n NgTemplateOutlet,\n SpinnerComponent,\n IonItemGroup,\n NgClass,\n IonItemDivider,\n ListItemComponent,\n ],\n changeDetection: ChangeDetectionStrategy.Eager,\n})\nexport class ListComponent implements OnInit, OnChanges, AfterViewInit {\n @ViewChild('list', { static: true }) list: any;\n @ViewChild(InfiniteScrollDirective) scrollDirective: InfiniteScrollDirective;\n\n /**\n * Provide items for the list to render. Items must be provided in the order you expect them to be rendered.\n */\n @Input()\n items: any[] = [];\n\n @Input() getItemColor: (item: any) => ThemeColor;\n\n /**\n * Callback to determine name of section. Sections will be ordered alphabetically.\n */\n @Input() getSectionName: (item: any) => string;\n\n /**\n * Callback that defines how to track changes for items in the iterable.\n */\n @Input() trackBy?: TrackByFunction<any>;\n\n /**\n * Property name to decide which items should be stand alone\n */\n @Input() getStandAloneByProperty: string;\n\n /**\n * Bottom margin for stand alone items\n */\n @Input() standAloneSpacing: StandAloneSpacing = 'xxs';\n\n /**\n * Text to display when no more items can be loaded (used for \"on demand\"-loading).\n */\n @Input() noMoreItemsText: string;\n\n /**\n * Determines if dividers (bottom-border on list items) should be shown or not.\n */\n @Input() showDivider = true;\n\n /**\n * Determines if list row text should turn bold on selection\n */\n @Input() markSelectedRow = false;\n\n /**\n * Determine outline shape of:\n * - list, if {@link #isSectionsEnabled} is `false`\n * - section, if {@link #isSectionsEnabled} is `true`\n *\n * `square` means **without** rounded corners, `rounded` means **with** rounded corners., `none` means **without** padding, border, box-shadow and background.\n */\n @Input() shape: ListShape = 'rounded';\n\n @HostBinding('class.shape-rounded')\n public get isShapeRounded(): boolean {\n return this.shape === 'rounded';\n }\n\n @HostBinding('class.shape-none')\n public get isShapeNone(): boolean {\n return this.shape === 'none';\n }\n\n /**\n * The list establishes a raised surface by default, until list usage is migrated\n * to shape=\"none\", and combined with card for base/raised/brand appearance\n */\n get _isRaisedSurface(): boolean {\n return !this.isShapeNone;\n }\n\n @HostBinding('class.item-spacing')\n @Input()\n hasItemSpacing: boolean;\n\n /**\n * Determines if the loadOnDemand event should be emitted.\n * Will default to true if there is at least one subscriber to the loadOnDemand event\n */\n @Input() isLoadOnDemandEnabled: boolean;\n\n /**\n * Emitting event when more items are to be loaded.\n */\n @Output() loadOnDemand = new EventEmitter<LoadOnDemandEvent>();\n\n /**\n * Determines if list items should have swipe actions or not\n * - the order of swipe actions is used to determine edge actions,\n * as well as their order of appearance on the screen.\n */\n @Input() swipeActions: ListSwipeAction[] = [];\n\n /**\n * Emitting event when an item is selected (tapped on mobile, clicked on web)\n */\n @Output() itemSelect = new EventEmitter<any>();\n\n @Input() disableSelectionHighlight: boolean = false;\n\n private _attributesToForward = ['aria-label', 'aria-labelledby'];\n\n @ContentChild(ListHeaderDirective, { static: false, read: TemplateRef })\n headerTemplate: TemplateRef<any>;\n\n @ContentChild(ListSectionHeaderDirective, { static: false, read: TemplateRef })\n sectionHeaderTemplate: TemplateRef<any>;\n\n @ContentChild(ListFooterDirective, { static: false, read: TemplateRef })\n footerTemplate: TemplateRef<any>;\n\n /**\n * The first element that matches ListItemDirective.\n * As a structural directive it unfolds into a template. This is a reference to that.\n */\n @ContentChild(ListItemTemplateDirective, { static: true, read: TemplateRef })\n itemTemplate: TemplateRef<any>;\n\n @HostBinding('class.has-sections') _isSectionsEnabled: boolean;\n @HostBinding('class.has-stand-alone') _isStandAloneEnabled: boolean;\n\n _isSelectable: boolean;\n _isLoading: boolean;\n _groupedItems: any[];\n _selectedItem: any;\n\n constructor(\n private listHelper: ListHelper,\n private element: ElementRef<HTMLElement>,\n private renderer: Renderer2\n ) {}\n\n ngOnInit() {\n this._isSelectable = this.itemSelect.observers.length > 0;\n\n if (this.isLoadOnDemandEnabled === undefined) {\n this.isLoadOnDemandEnabled = this.loadOnDemand.observers.length > 0;\n }\n }\n\n ngOnChanges(): void {\n this._isSectionsEnabled = !!this.getSectionName;\n this._isStandAloneEnabled = !!this.getStandAloneByProperty;\n\n if (this._isSectionsEnabled && this._isStandAloneEnabled) {\n this._groupedItems = this.listHelper.groupSectionsWithStandAloneItems(\n this.items,\n this.getSectionName,\n this.getStandAloneByProperty\n );\n } else if (this._isSectionsEnabled) {\n this._groupedItems = this.listHelper.groupSections(this.items, this.getSectionName);\n } else if (this._isStandAloneEnabled) {\n this._groupedItems = this.listHelper.groupStandAloneItems(\n this.items,\n this.getStandAloneByProperty\n );\n }\n }\n\n ngAfterViewInit(): void {\n forwardAttributes(\n this.element.nativeElement,\n this._attributesToForward,\n this.renderer,\n this.element.nativeElement.querySelector('ion-list')\n );\n }\n\n _onLoadOnDemand() {\n this.listHelper.onLoadOnDemand(this);\n }\n\n sectionTrackBy(index: number, section: { name: string }): string | number {\n return section?.name ?? index;\n }\n\n onItemSelect(item: any) {\n if (!this.disableSelectionHighlight) {\n this._selectedItem = item;\n }\n this.itemSelect.emit(item);\n }\n\n onSwipeActionSelect(args: any): void {\n args.swipeAction.onSelected(args.item);\n this.list.closeSlidingItems();\n args.event.stopPropagation();\n }\n\n _getBoundaryClass(index: number, section?: any[]): BoundaryClass[] | BoundaryClass {\n if (index === 0) {\n if (this.headerTemplate) return null;\n else return section.length === 1 ? ['first', 'last'] : 'first';\n }\n\n if (index === section.length - 1) {\n return this.footerTemplate ? null : 'last';\n }\n\n return null;\n }\n\n standAloneClass() {\n return this._isStandAloneEnabled ? `stand-alone-bottom-margin-${this.standAloneSpacing}` : '';\n }\n}\n","<ion-list\n #list\n kirbyInfiniteScroll\n (scrollEnd)=\"_onLoadOnDemand()\"\n [disabled]=\"!isLoadOnDemandEnabled\"\n class=\"list\"\n [class.has-header]=\"headerTemplate\"\n [class.has-footer]=\"footerTemplate\"\n [class.has-divider]=\"showDivider\"\n [class.kirby-surface-raised]=\"_isRaisedSurface && !_isSectionsEnabled && !_isStandAloneEnabled\"\n>\n @if (headerTemplate) {\n <ion-list-header>\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </ion-list-header>\n }\n\n <ng-container\n *ngTemplateOutlet=\"\n _isSectionsEnabled || _isStandAloneEnabled ? groupedListTemplate : itemsTemplate;\n context: { $implicit: items }\n \"\n ></ng-container>\n\n @if (footerTemplate) {\n <div class=\"footer\">\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n </div>\n }\n</ion-list>\n\n@if (!isLoadOnDemandEnabled && noMoreItemsText) {\n <p class=\"no-more-items\">\n {{ noMoreItemsText }}\n </p>\n}\n@if (_isLoading) {\n <div class=\"loading\">\n <kirby-spinner></kirby-spinner>\n </div>\n}\n\n<ng-template #groupedListTemplate>\n @for (section of _groupedItems; track sectionTrackBy($index, section)) {\n <ion-item-group [ngClass]=\"standAloneClass()\">\n @if (_isSectionsEnabled) {\n <ion-item-divider>\n <ng-container\n *ngTemplateOutlet=\"sectionHeaderTemplate; context: { $implicit: section.name }\"\n ></ng-container>\n </ion-item-divider>\n }\n @if (_isSectionsEnabled && _isStandAloneEnabled) {\n @for (list of section.lists; track list) {\n <div\n class=\"list-items\"\n [ngClass]=\"standAloneClass()\"\n [class.kirby-surface-raised]=\"_isRaisedSurface\"\n >\n <ng-container\n *ngTemplateOutlet=\"itemsTemplate; context: { $implicit: list }\"\n ></ng-container>\n </div>\n }\n } @else {\n <div\n class=\"list-items\"\n [ngClass]=\"standAloneClass()\"\n [class.kirby-surface-raised]=\"_isRaisedSurface\"\n >\n <ng-container\n *ngTemplateOutlet=\"itemsTemplate; context: { $implicit: section.items }\"\n ></ng-container>\n </div>\n }\n </ion-item-group>\n }\n</ng-template>\n\n<ng-template #itemsTemplate let-items>\n @for (item of items; track trackBy ? trackBy($index, item) : $index; let i = $index) {\n <kirby-list-item\n [item]=\"item\"\n [itemTemplate]=\"itemTemplate\"\n [swipeActions]=\"swipeActions\"\n [boundaryClass]=\"_getBoundaryClass(i, items)\"\n [isSelectable]=\"_isSelectable\"\n [getItemColor]=\"getItemColor\"\n [isSelected]=\"_isSelectable && item === _selectedItem\"\n (itemSelect)=\"onItemSelect($event)\"\n (swipeActionSelect)=\"onSwipeActionSelect($event)\"\n [class.is-single]=\"items.length === 1\"\n ></kirby-list-item>\n }\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SpinnerModule } from '@kirbydesign/designsystem/spinner';\n\nimport { IconModule } from '@kirbydesign/designsystem/icon';\n\nimport {\n IonItemDivider,\n IonItemGroup,\n IonItemOptions,\n IonItemSliding,\n IonLabel,\n IonList,\n IonListHeader,\n} from '@ionic/angular';\nimport { InfiniteScrollDirective } from './directives/infinite-scroll.directive';\nimport { ListItemColorDirective } from './directives/list-item-color.directive';\nimport { ListExperimentalComponent } from './list-experimental/list-experimental.component';\nimport { ListHeaderComponent } from './list-header/list-header.component';\nimport { ListItemComponent } from './list-item/list-item.component';\nimport { ListSectionHeaderComponent } from './list-section-header/list-section-header.component';\nimport { ListComponent } from './list.component';\nimport {\n ListFooterDirective,\n ListHeaderDirective,\n ListItemTemplateDirective,\n ListSectionHeaderDirective,\n} from './list.directive';\n\nconst reexportedImports = [\n ListComponent,\n ListItemComponent,\n ListItemTemplateDirective,\n ListSectionHeaderComponent,\n ListSectionHeaderDirective,\n ListHeaderDirective,\n ListHeaderComponent,\n ListFooterDirective,\n ListExperimentalComponent,\n];\n\nconst imports = [\n ...reexportedImports,\n ListItemColorDirective,\n InfiniteScrollDirective,\n ListItemComponent,\n];\n\n@NgModule({\n imports: [\n CommonModule,\n IconModule,\n SpinnerModule,\n IonItemDivider,\n IonItemGroup,\n IonItemOptions,\n IonItemSliding,\n IonLabel,\n IonList,\n IonListHeader,\n ...imports,\n ],\n exports: reexportedImports,\n providers: [],\n})\nexport class ListModule {}\n"],"mappings":"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"}
1
+ {"version":3,"file":"kirbydesign-designsystem-list.mjs","names":[],"sources":["../../list/src/directives/infinite-scroll.directive.ts","../../list/src/directives/list-item-color.directive.ts","../../list/src/helpers/list-helper.ts","../../list/src/list-experimental/list-experimental.component.ts","../../list/src/list-experimental/list-experimental.component.html","../../list/src/list-header/list-header.component.ts","../../list/src/list-header/list-header.component.html","../../list/src/list-item/list-item.component.ts","../../list/src/list-item/list-item.component.html","../../list/src/list-section-header/list-section-header.component.ts","../../list/src/list-section-header/list-section-header.component.html","../../list/src/list.directive.ts","../../list/src/list.component.ts","../../list/src/list.component.html","../../list/src/list.module.ts"],"sourcesContent":["import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n NgZone,\n OnDestroy,\n Output,\n} from '@angular/core';\nimport { WindowRef } from '@kirbydesign/designsystem/types';\nimport { fromEvent, Subject } from 'rxjs';\nimport { debounceTime, filter, map, takeUntil } from 'rxjs/operators';\n\nimport { Scroll } from './scroll.model';\n\n/**\n * Specify debounce duration in ms\n */\nexport const INFINITE_SCROLL_DEBOUNCE = 100;\n\n@Directive({ selector: '[kirbyInfiniteScroll]' })\nexport class InfiniteScrollDirective implements AfterViewInit, OnDestroy {\n /**\n * Event that will be triggered when the user has scrolled to\n * bottom of the element\n */\n @Output() scrollEnd = new EventEmitter<void>();\n\n /**\n * If true then {@link scrollEnd} event should NOT be emitted\n */\n @Input() disabled = false;\n\n /**\n * Emits a new value on element scroll event\n */\n scroll$: Subject<Scroll> = new Subject<Scroll>();\n\n /**\n * Completes on component destroy lifecycle event\n * used to unsubscribe from infinite observables\n */\n private ngUnsubscribe$ = new Subject<void>();\n\n /**\n * An offset from the bottom of the element to trigger {@link scrollEnd} event\n */\n private offset = 0.8;\n\n constructor(\n private elementRef: ElementRef,\n private windowRef: WindowRef,\n private zone: NgZone\n ) {}\n\n ngAfterViewInit(): void {\n /**\n * Subscribe to {@link scroll$} observable and emit {@link scrollEnd} event\n * when element scroll position has surpassed the offset.\n */\n this.scroll$\n .pipe(\n takeUntil(this.ngUnsubscribe$),\n debounceTime(INFINITE_SCROLL_DEBOUNCE),\n filter(() => !this.disabled),\n filter((scroll) => {\n return (\n scroll.elementHeight * (1 - this.offset) >=\n scroll.distanceToViewBottom - scroll.viewHeight\n );\n })\n )\n .subscribe(() => {\n this.scrollEnd.emit();\n });\n\n /**\n * Subscribe to the ionScroll event on the ion-content around the list (if any)\n * and emit {@link scrollEnd} event when element scroll position has surpassed the offset.\n */\n setTimeout(() => {\n const ionContent: HTMLElement = this.elementRef.nativeElement.closest('ion-content');\n if (ionContent) {\n // we run the 'ionScroll' event outside angular, as it would trigger change detection on each scroll\n this.zone.runOutsideAngular(() => {\n fromEvent<any>(ionContent, 'ionScroll')\n .pipe(\n takeUntil(this.ngUnsubscribe$),\n debounceTime(INFINITE_SCROLL_DEBOUNCE),\n filter(() => !this.disabled),\n map(() => this.getScroll()),\n filter((scroll) => {\n return (\n scroll.elementHeight * (1 - this.offset) >=\n scroll.distanceToViewBottom - scroll.viewHeight\n );\n })\n )\n .subscribe(() => {\n // we make sure to emit the event inside angular again. As we want to show the spinner and need change detection for that.\n this.zone.run(() => this.scrollEnd.emit());\n });\n });\n }\n });\n }\n\n /**\n * On element scroll event emit next {@link scroll$} observable value\n */\n @HostListener('window:scroll')\n onScroll(): void {\n if (this.disabled) return;\n const scroll = this.getScroll();\n this.scroll$.next(scroll);\n }\n\n /**\n * trigger {@link ngUnsubscribe} complete on component destroy lifecycle hook\n */\n ngOnDestroy(): void {\n this.ngUnsubscribe$.next();\n this.ngUnsubscribe$.complete();\n }\n\n private getScroll(): Scroll {\n const element = this.elementRef.nativeElement as HTMLElement;\n const boundindClientRect = element.getBoundingClientRect();\n\n const distanceToViewBottom = boundindClientRect.bottom;\n const elementHeight = boundindClientRect.height;\n const viewHeight = this.windowRef.nativeWindow.innerHeight;\n\n return { distanceToViewBottom, elementHeight, viewHeight };\n }\n}\n","import { Directive, HostBinding, Input, OnChanges } from '@angular/core';\n\nimport { ThemeColor } from '@kirbydesign/core';\n\n@Directive({ selector: '[kirbyListItemColor]' })\nexport class ListItemColorDirective implements OnChanges {\n @Input()\n kirbyListItemColor: (item: any) => ThemeColor;\n @Input() item: any;\n @HostBinding('class')\n color: ThemeColor;\n\n ngOnChanges(): void {\n this.color = this.getColor();\n }\n\n private getColor(): ThemeColor {\n if (!this.kirbyListItemColor || !this.item) {\n return;\n }\n\n const themeColor = this.kirbyListItemColor(this.item);\n return themeColor;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ListComponent } from '../list.component';\n\ntype Section<T> = {\n name: string;\n items: T[];\n};\n\ntype SectionWithStandAloneItems<T> = {\n name: string;\n lists: T[][];\n};\n\n@Injectable()\nexport class ListHelper {\n public onLoadOnDemand(component: ListComponent) {\n if (component.isLoadOnDemandEnabled && !component._isLoading) {\n component._isLoading = true;\n component.loadOnDemand.emit({\n complete: (disableLoadOnDemand: boolean) => {\n component.isLoadOnDemandEnabled = !disableLoadOnDemand;\n component._isLoading = false;\n },\n });\n }\n }\n\n public groupSections<T>(items: T[], getGroupName: (item: T) => string): Section<T>[] {\n const groupsMap = new Map<string, T[]>();\n\n items.forEach((item) => {\n const itemGroup = getGroupName(item);\n const groupItems = groupsMap.get(itemGroup);\n\n if (groupItems) {\n groupItems.push(item);\n } else {\n groupsMap.set(itemGroup, [item]);\n }\n });\n\n return Array.from(groupsMap)\n .sort(([name], [otherName]) => name.localeCompare(otherName))\n .map(([name, items]) => {\n return { name, items };\n });\n }\n\n public groupStandAloneItems<T>(items: T[], standAloneProperty: string): { items: T[] }[] {\n const list = items.reduce(\n (accumulator, item) => {\n const lastList = accumulator[accumulator.length - 1];\n const lastItemInList = lastList[lastList.length - 1];\n\n if (!lastItemInList) {\n lastList.push(item);\n } else if (!item[standAloneProperty] && !lastItemInList[standAloneProperty]) {\n lastList.push(item);\n } else {\n accumulator.push([item]);\n }\n\n return accumulator;\n },\n [[]] as [T[]]\n );\n\n return list.map((items) => {\n return { items };\n });\n }\n\n public groupSectionsWithStandAloneItems<T>(\n items: T[],\n getGroupName: (item: T) => string,\n standAloneProperty: string\n ): SectionWithStandAloneItems<T>[] {\n const sectionsMap = new Map<string, T[][]>();\n\n items.forEach((item) => {\n const sectionName = getGroupName(item);\n\n if (sectionsMap.has(sectionName)) {\n const section = sectionsMap.get(sectionName);\n const lastListInSection = section[section.length - 1];\n const lastItemInList = lastListInSection[lastListInSection.length - 1];\n\n if (!item[standAloneProperty] && !lastItemInList[standAloneProperty]) {\n lastListInSection.push(item);\n } else {\n section.push([item]);\n }\n } else {\n sectionsMap.set(sectionName, [[item]]);\n }\n });\n\n return Array.from(sectionsMap)\n .sort(([name], [otherName]) => name.localeCompare(otherName))\n .map(([name, lists]) => {\n return { name, lists };\n });\n }\n}\n","import { ChangeDetectionStrategy, Component, HostListener, ViewChild } from '@angular/core';\nimport { IonList } from '@ionic/angular';\nimport { elementHasAncestor } from '@kirbydesign/designsystem/helpers';\n\n@Component({\n selector: 'kirby-list-experimental',\n templateUrl: './list-experimental.component.html',\n styleUrls: ['./list-experimental.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ListExperimentalComponent {\n @ViewChild(IonList, { static: true }) list: IonList;\n\n @HostListener('click', ['$event'])\n closeAllSlidingItems(e: MouseEvent) {\n if (elementHasAncestor(e.target as HTMLElement, 'ion-item-option', 'ion-list')) {\n this.list.closeSlidingItems();\n }\n }\n}\n","<ng-content select=\"[outside]\"></ng-content>\n<div class=\"rounded shadow first-item-padding last-item-padding\">\n <ng-content></ng-content>\n</div>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'kirby-list-header',\n templateUrl: './list-header.component.html',\n styleUrls: ['./list-header.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ListHeaderComponent {\n constructor() {}\n}\n","<ng-content></ng-content>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { IonItemOptions, IonItemSliding, IonLabel } from '@ionic/angular';\n\nimport { ThemeColor } from '@kirbydesign/core';\nimport { PlatformService } from '@kirbydesign/designsystem/helpers';\n\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { IconComponent } from '@kirbydesign/designsystem/icon';\nimport { ListSwipeAction, ListSwipeDirection, ListSwipeEnd } from '../list-swipe-action.type';\nimport { ListItemColorDirective } from '../directives/list-item-color.directive';\n\nexport type BoundaryClass = 'first' | 'last';\n\n@Component({\n selector: 'kirby-list-item',\n templateUrl: './list-item.component.html',\n styleUrls: ['../list.component.scss', './list-item.component.scss'],\n imports: [\n IonItemSliding,\n ListItemColorDirective,\n NgClass,\n NgTemplateOutlet,\n IonItemOptions,\n IconComponent,\n IonLabel,\n ],\n changeDetection: ChangeDetectionStrategy.Eager,\n})\nexport class ListItemComponent implements OnInit, AfterViewInit {\n _isSwipingEnabled = false;\n\n constructor(private platform: PlatformService) {\n this.initializeSwipeActions();\n }\n\n @ViewChild(IonItemSliding) ionItemSliding: IonItemSliding;\n\n @Input() item: any;\n\n @Input() boundaryClass: BoundaryClass | BoundaryClass[];\n\n @Input() swipeActions: ListSwipeAction[] = [];\n\n @Input() itemTemplate: TemplateRef<any>;\n\n @Input() isSelected: boolean;\n\n @Input() isSelectable: boolean;\n\n @Input() getItemColor: (item: any) => ThemeColor;\n\n @Output() itemSelect = new EventEmitter<any>();\n\n _onItemSelect(item: any) {\n if (!this.isSelectable) return;\n this.itemSelect.emit(item);\n }\n\n @Output() swipeActionSelect = new EventEmitter<any>();\n\n _onSwipeActionSelect(swipeAction, item, event) {\n this.swipeActionSelect.emit({\n swipeAction,\n item,\n event,\n });\n }\n\n ngOnInit() {\n this.initializeSwipeActions();\n }\n\n ngAfterViewInit(): void {\n if (!this.itemTemplate) {\n console.warn('No item template was provided.');\n }\n }\n\n _hasSwipeActions(item: any): boolean {\n if (!Array.isArray(this.swipeActions)) {\n return false;\n }\n return this.swipeActions.some((swipeAction) => {\n if (swipeAction.isDisabled instanceof Function && swipeAction.isDisabled(item)) {\n return false;\n }\n if (swipeAction.isDisabled === true) {\n return false;\n }\n return swipeAction.position === 'left' || swipeAction.position === 'right';\n });\n }\n\n _getSwipeActions(item: any, direction?: ListSwipeDirection): ListSwipeAction[] {\n if (!Array.isArray(this.swipeActions)) {\n return [];\n }\n return this.swipeActions.filter((swipeAction) => {\n if (this.isSwipeActionDisabled(swipeAction, item)) {\n return false;\n }\n return direction ? swipeAction.position === direction : true;\n });\n }\n\n private isSwipeActionDisabled(swipeAction: ListSwipeAction, item: any): boolean {\n if (swipeAction.isDisabled instanceof Function && swipeAction.isDisabled(item)) {\n return true;\n }\n return swipeAction.isDisabled === true;\n }\n\n _getSwipeActionEnd(item: any): ListSwipeEnd {\n if (this._getSwipeActions(item, 'left').length) {\n return 'start';\n }\n return 'end';\n }\n\n _getSwipeActionIcon(swipeAction: ListSwipeAction, item: any): string {\n if (!swipeAction.icon) return;\n\n if (swipeAction.icon instanceof Function) {\n return swipeAction.icon(item);\n }\n return swipeAction.icon;\n }\n\n _getSwipeActionTitle(swipeAction: ListSwipeAction, item: any): string {\n if (swipeAction.title instanceof Function) {\n return swipeAction.title(item);\n }\n return swipeAction.title;\n }\n\n _getSwipeActionType(swipeAction: ListSwipeAction, item: any): ThemeColor {\n if (swipeAction.type instanceof Function) {\n return swipeAction.type(item);\n }\n return swipeAction.type;\n }\n\n private initializeSwipeActions(): void {\n if (this.swipeActions && this.swipeActions.length) {\n this._isSwipingEnabled = this.platform.isTouch();\n }\n }\n}\n","<ion-item-sliding\n [class.selected]=\"isSelected\"\n [kirbyListItemColor]=\"getItemColor\"\n [item]=\"item\"\n [disabled]=\"_isSwipingEnabled ? null : true\"\n keyHandler\n [ngClass]=\"boundaryClass\"\n (click)=\"_onItemSelect(item)\"\n>\n <ng-container\n *ngTemplateOutlet=\"swipeActionsTemplate; context: { $implicit: item }\"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: { $implicit: item }\"></ng-container>\n</ion-item-sliding>\n\n<ng-template #swipeActionsTemplate let-item>\n @if (_hasSwipeActions(item)) {\n <ion-item-options [side]=\"_getSwipeActionEnd(item)\">\n <div class=\"swipe-action\">\n @for (swipeAction of _getSwipeActions(item); track swipeAction.title) {\n <ion-item-option\n [ngClass]=\"_getSwipeActionType(swipeAction, item)\"\n (click)=\"_onSwipeActionSelect(swipeAction, item, $event)\"\n >\n <div class=\"item-content\">\n @if (_getSwipeActionIcon(swipeAction, item)) {\n <kirby-icon size=\"sm\" [name]=\"_getSwipeActionIcon(swipeAction, item)\"></kirby-icon>\n }\n <ion-label>\n {{ _getSwipeActionTitle(swipeAction, item) }}\n </ion-label>\n </div>\n </ion-item-option>\n }\n </div>\n </ion-item-options>\n }\n</ng-template>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n selector: 'kirby-list-section-header',\n templateUrl: './list-section-header.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ListSectionHeaderComponent {\n @Input() title: string;\n}\n","<div class=\"header\">\n <span class=\"kirby-text-small\">{{ title }}</span>\n</div>\n","import { Directive } from '@angular/core';\n\n@Directive({ selector: '[kirbyListItemTemplate]' })\nexport class ListItemTemplateDirective {}\n\n@Directive({ selector: '[kirbyListHeader], [kirbyListHeaderTemplate]' })\nexport class ListHeaderDirective {}\n\n@Directive({ selector: '[kirbyListSectionHeader], [kirbyListSectionHeaderTemplate]' })\nexport class ListSectionHeaderDirective {}\n\n@Directive({ selector: '[kirbyListFooter], [kirbyListFooterTemplate]' })\nexport class ListFooterDirective {}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n OnInit,\n Output,\n Renderer2,\n TemplateRef,\n TrackByFunction,\n ViewChild,\n} from '@angular/core';\n\nimport { ThemeColor } from '@kirbydesign/core';\n\nimport { forwardAttributes } from '@kirbydesign/designsystem/shared';\nimport { IonItemDivider, IonItemGroup, IonList, IonListHeader } from '@ionic/angular';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { SpinnerComponent } from '@kirbydesign/designsystem/spinner';\nimport { InfiniteScrollDirective } from './directives/infinite-scroll.directive';\nimport { ListHelper } from './helpers/list-helper';\nimport { BoundaryClass, ListItemComponent } from './list-item/list-item.component';\nimport { ListSwipeAction } from './list-swipe-action.type';\nimport {\n ListFooterDirective,\n ListHeaderDirective,\n ListItemTemplateDirective,\n ListSectionHeaderDirective,\n} from './list.directive';\nimport { LoadOnDemandEvent } from './list.event';\n\nexport type ListShape = 'square' | 'rounded' | 'none';\n\nexport type StandAloneSpacing =\n 'xxxxs' | 'xxxs' | 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl' | 'xxxl';\n\n@Component({\n selector: 'kirby-list',\n templateUrl: './list.component.html',\n styleUrls: ['./list.component.scss'],\n providers: [ListHelper],\n imports: [\n IonList,\n InfiniteScrollDirective,\n IonListHeader,\n NgTemplateOutlet,\n SpinnerComponent,\n IonItemGroup,\n NgClass,\n IonItemDivider,\n ListItemComponent,\n ],\n changeDetection: ChangeDetectionStrategy.Eager,\n})\nexport class ListComponent implements OnInit, OnChanges, AfterViewInit {\n @ViewChild('list', { static: true }) list: any;\n @ViewChild(InfiniteScrollDirective) scrollDirective: InfiniteScrollDirective;\n\n /**\n * Provide items for the list to render. Items must be provided in the order you expect them to be rendered.\n */\n @Input()\n items: any[] = [];\n\n /**\n * @deprecated Coloring list items differently is no longer supported, and the list no longer applies any styling based on the returned theme color.\n * This input will be removed in a future major version.\n */\n @Input() getItemColor: (item: any) => ThemeColor;\n\n /**\n * Callback to determine name of section. Sections will be ordered alphabetically.\n */\n @Input() getSectionName: (item: any) => string;\n\n /**\n * Callback that defines how to track changes for items in the iterable.\n */\n @Input() trackBy?: TrackByFunction<any>;\n\n /**\n * Property name to decide which items should be stand alone\n */\n @Input() getStandAloneByProperty: string;\n\n /**\n * Bottom margin for stand alone items\n */\n @Input() standAloneSpacing: StandAloneSpacing = 'xxs';\n\n /**\n * Text to display when no more items can be loaded (used for \"on demand\"-loading).\n */\n @Input() noMoreItemsText: string;\n\n /**\n * Determines if dividers (bottom-border on list items) should be shown or not.\n */\n @Input() showDivider = true;\n\n /**\n * Determines if list row text should turn bold on selection\n */\n @Input() markSelectedRow = false;\n\n /**\n * Determine outline shape of:\n * - list, if {@link #isSectionsEnabled} is `false`\n * - section, if {@link #isSectionsEnabled} is `true`\n *\n * `square` means **without** rounded corners, `rounded` means **with** rounded corners., `none` means **without** padding, border, box-shadow and background.\n */\n @Input() shape: ListShape = 'rounded';\n\n @HostBinding('class.shape-rounded')\n public get isShapeRounded(): boolean {\n return this.shape === 'rounded';\n }\n\n @HostBinding('class.shape-none')\n public get isShapeNone(): boolean {\n return this.shape === 'none';\n }\n\n /**\n * The list establishes a raised surface by default, until list usage is migrated\n * to shape=\"none\", and combined with card for base/raised/brand appearance\n */\n get _isRaisedSurface(): boolean {\n return !this.isShapeNone;\n }\n\n get _isListRaisedSurface(): boolean {\n return this._isRaisedSurface && !this._isSectionsEnabled && !this._isStandAloneEnabled;\n }\n\n @HostBinding('class.item-spacing')\n @Input()\n hasItemSpacing: boolean;\n\n /**\n * Determines if the loadOnDemand event should be emitted.\n * Will default to true if there is at least one subscriber to the loadOnDemand event\n */\n @Input() isLoadOnDemandEnabled: boolean;\n\n /**\n * Emitting event when more items are to be loaded.\n */\n @Output() loadOnDemand = new EventEmitter<LoadOnDemandEvent>();\n\n /**\n * Determines if list items should have swipe actions or not\n * - the order of swipe actions is used to determine edge actions,\n * as well as their order of appearance on the screen.\n */\n @Input() swipeActions: ListSwipeAction[] = [];\n\n /**\n * Emitting event when an item is selected (tapped on mobile, clicked on web)\n */\n @Output() itemSelect = new EventEmitter<any>();\n\n @Input() disableSelectionHighlight: boolean = false;\n\n private _attributesToForward = ['aria-label', 'aria-labelledby'];\n\n @ContentChild(ListHeaderDirective, { static: false, read: TemplateRef })\n headerTemplate: TemplateRef<any>;\n\n @ContentChild(ListSectionHeaderDirective, { static: false, read: TemplateRef })\n sectionHeaderTemplate: TemplateRef<any>;\n\n @ContentChild(ListFooterDirective, { static: false, read: TemplateRef })\n footerTemplate: TemplateRef<any>;\n\n /**\n * The first element that matches ListItemDirective.\n * As a structural directive it unfolds into a template. This is a reference to that.\n */\n @ContentChild(ListItemTemplateDirective, { static: true, read: TemplateRef })\n itemTemplate: TemplateRef<any>;\n\n @HostBinding('class.has-sections') _isSectionsEnabled: boolean;\n @HostBinding('class.has-stand-alone') _isStandAloneEnabled: boolean;\n\n _isSelectable: boolean;\n _isLoading: boolean;\n _groupedItems: any[];\n _selectedItem: any;\n\n constructor(\n private listHelper: ListHelper,\n private element: ElementRef<HTMLElement>,\n private renderer: Renderer2\n ) {}\n\n ngOnInit() {\n this._isSelectable = this.itemSelect.observers.length > 0;\n\n if (this.isLoadOnDemandEnabled === undefined) {\n this.isLoadOnDemandEnabled = this.loadOnDemand.observers.length > 0;\n }\n }\n\n ngOnChanges(): void {\n this._isSectionsEnabled = !!this.getSectionName;\n this._isStandAloneEnabled = !!this.getStandAloneByProperty;\n\n if (this._isSectionsEnabled && this._isStandAloneEnabled) {\n this._groupedItems = this.listHelper.groupSectionsWithStandAloneItems(\n this.items,\n this.getSectionName,\n this.getStandAloneByProperty\n );\n } else if (this._isSectionsEnabled) {\n this._groupedItems = this.listHelper.groupSections(this.items, this.getSectionName);\n } else if (this._isStandAloneEnabled) {\n this._groupedItems = this.listHelper.groupStandAloneItems(\n this.items,\n this.getStandAloneByProperty\n );\n }\n }\n\n ngAfterViewInit(): void {\n forwardAttributes(\n this.element.nativeElement,\n this._attributesToForward,\n this.renderer,\n this.element.nativeElement.querySelector('ion-list')\n );\n }\n\n _onLoadOnDemand() {\n this.listHelper.onLoadOnDemand(this);\n }\n\n sectionTrackBy(index: number, section: { name: string }): string | number {\n return section?.name ?? index;\n }\n\n onItemSelect(item: any) {\n if (!this.disableSelectionHighlight) {\n this._selectedItem = item;\n }\n this.itemSelect.emit(item);\n }\n\n onSwipeActionSelect(args: any): void {\n args.swipeAction.onSelected(args.item);\n this.list.closeSlidingItems();\n args.event.stopPropagation();\n }\n\n _getBoundaryClass(index: number, section?: any[]): BoundaryClass[] | BoundaryClass {\n if (index === 0) {\n if (this.headerTemplate) return null;\n else return section.length === 1 ? ['first', 'last'] : 'first';\n }\n\n if (index === section.length - 1) {\n return this.footerTemplate ? null : 'last';\n }\n\n return null;\n }\n\n standAloneClass() {\n return this._isStandAloneEnabled ? `stand-alone-bottom-margin-${this.standAloneSpacing}` : '';\n }\n}\n","<ion-list\n #list\n kirbyInfiniteScroll\n (scrollEnd)=\"_onLoadOnDemand()\"\n [disabled]=\"!isLoadOnDemandEnabled\"\n class=\"list\"\n [class.has-header]=\"headerTemplate\"\n [class.has-footer]=\"footerTemplate\"\n [class.has-divider]=\"showDivider\"\n [class.kirby-surface-raised]=\"_isListRaisedSurface\"\n>\n @if (headerTemplate) {\n <ion-list-header>\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </ion-list-header>\n }\n\n <ng-container\n *ngTemplateOutlet=\"\n _isSectionsEnabled || _isStandAloneEnabled ? groupedListTemplate : itemsTemplate;\n context: { $implicit: items }\n \"\n ></ng-container>\n\n @if (footerTemplate) {\n <div class=\"footer\">\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n </div>\n }\n</ion-list>\n\n@if (!isLoadOnDemandEnabled && noMoreItemsText) {\n <p class=\"no-more-items\">\n {{ noMoreItemsText }}\n </p>\n}\n@if (_isLoading) {\n <div class=\"loading\">\n <kirby-spinner></kirby-spinner>\n </div>\n}\n\n<ng-template #groupedListTemplate>\n @for (section of _groupedItems; track sectionTrackBy($index, section)) {\n <ion-item-group [ngClass]=\"standAloneClass()\">\n @if (_isSectionsEnabled) {\n <ion-item-divider>\n <ng-container\n *ngTemplateOutlet=\"sectionHeaderTemplate; context: { $implicit: section.name }\"\n ></ng-container>\n </ion-item-divider>\n }\n @if (_isSectionsEnabled && _isStandAloneEnabled) {\n @for (list of section.lists; track list) {\n <div\n class=\"list-items\"\n [ngClass]=\"standAloneClass()\"\n [class.kirby-surface-raised]=\"_isRaisedSurface\"\n >\n <ng-container\n *ngTemplateOutlet=\"itemsTemplate; context: { $implicit: list }\"\n ></ng-container>\n </div>\n }\n } @else {\n <div\n class=\"list-items\"\n [ngClass]=\"standAloneClass()\"\n [class.kirby-surface-raised]=\"_isRaisedSurface\"\n >\n <ng-container\n *ngTemplateOutlet=\"itemsTemplate; context: { $implicit: section.items }\"\n ></ng-container>\n </div>\n }\n </ion-item-group>\n }\n</ng-template>\n\n<ng-template #itemsTemplate let-items>\n @for (item of items; track trackBy ? trackBy($index, item) : $index; let i = $index) {\n <kirby-list-item\n [item]=\"item\"\n [itemTemplate]=\"itemTemplate\"\n [swipeActions]=\"swipeActions\"\n [boundaryClass]=\"_getBoundaryClass(i, items)\"\n [isSelectable]=\"_isSelectable\"\n [getItemColor]=\"getItemColor\"\n [isSelected]=\"_isSelectable && item === _selectedItem\"\n (itemSelect)=\"onItemSelect($event)\"\n (swipeActionSelect)=\"onSwipeActionSelect($event)\"\n [class.is-single]=\"items.length === 1\"\n ></kirby-list-item>\n }\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SpinnerModule } from '@kirbydesign/designsystem/spinner';\n\nimport { IconModule } from '@kirbydesign/designsystem/icon';\n\nimport {\n IonItemDivider,\n IonItemGroup,\n IonItemOptions,\n IonItemSliding,\n IonLabel,\n IonList,\n IonListHeader,\n} from '@ionic/angular';\nimport { InfiniteScrollDirective } from './directives/infinite-scroll.directive';\nimport { ListItemColorDirective } from './directives/list-item-color.directive';\nimport { ListExperimentalComponent } from './list-experimental/list-experimental.component';\nimport { ListHeaderComponent } from './list-header/list-header.component';\nimport { ListItemComponent } from './list-item/list-item.component';\nimport { ListSectionHeaderComponent } from './list-section-header/list-section-header.component';\nimport { ListComponent } from './list.component';\nimport {\n ListFooterDirective,\n ListHeaderDirective,\n ListItemTemplateDirective,\n ListSectionHeaderDirective,\n} from './list.directive';\n\nconst reexportedImports = [\n ListComponent,\n ListItemComponent,\n ListItemTemplateDirective,\n ListSectionHeaderComponent,\n ListSectionHeaderDirective,\n ListHeaderDirective,\n ListHeaderComponent,\n ListFooterDirective,\n ListExperimentalComponent,\n];\n\nconst imports = [\n ...reexportedImports,\n ListItemColorDirective,\n InfiniteScrollDirective,\n ListItemComponent,\n];\n\n@NgModule({\n imports: [\n CommonModule,\n IconModule,\n SpinnerModule,\n IonItemDivider,\n IonItemGroup,\n IonItemOptions,\n IonItemSliding,\n IonLabel,\n IonList,\n IonListHeader,\n ...imports,\n ],\n exports: reexportedImports,\n providers: [],\n})\nexport class ListModule {}\n"],"mappings":"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"}
@@ -53,7 +53,7 @@ var LoadingOverlayService = class LoadingOverlayService {
53
53
  static {
54
54
  this.ɵfac = i0.ɵɵngDeclareFactory({
55
55
  minVersion: "12.0.0",
56
- version: "22.2.2",
56
+ version: "22.2.3",
57
57
  ngImport: i0,
58
58
  type: LoadingOverlayService,
59
59
  deps: [
@@ -67,7 +67,7 @@ var LoadingOverlayService = class LoadingOverlayService {
67
67
  static {
68
68
  this.ɵprov = i0.ɵɵngDeclareInjectable({
69
69
  minVersion: "12.0.0",
70
- version: "22.2.2",
70
+ version: "22.2.3",
71
71
  ngImport: i0,
72
72
  type: LoadingOverlayService,
73
73
  providedIn: "root"
@@ -76,7 +76,7 @@ var LoadingOverlayService = class LoadingOverlayService {
76
76
  };
77
77
  i0.ɵɵngDeclareClassMetadata({
78
78
  minVersion: "12.0.0",
79
- version: "22.2.2",
79
+ version: "22.2.3",
80
80
  ngImport: i0,
81
81
  type: LoadingOverlayService,
82
82
  decorators: [{
@@ -98,7 +98,7 @@ var LoadingOverlayComponent = class LoadingOverlayComponent {
98
98
  static {
99
99
  this.ɵfac = i0.ɵɵngDeclareFactory({
100
100
  minVersion: "12.0.0",
101
- version: "22.2.2",
101
+ version: "22.2.3",
102
102
  ngImport: i0,
103
103
  type: LoadingOverlayComponent,
104
104
  deps: [],
@@ -108,7 +108,7 @@ var LoadingOverlayComponent = class LoadingOverlayComponent {
108
108
  static {
109
109
  this.ɵcmp = i0.ɵɵngDeclareComponent({
110
110
  minVersion: "17.0.0",
111
- version: "22.2.2",
111
+ version: "22.2.3",
112
112
  type: LoadingOverlayComponent,
113
113
  isStandalone: true,
114
114
  selector: "kirby-loading-overlay",
@@ -119,7 +119,7 @@ var LoadingOverlayComponent = class LoadingOverlayComponent {
119
119
  },
120
120
  ngImport: i0,
121
121
  template: "<div class=\"overlay-wrapper\" [class.loading]=\"isLoading\">\n @if (isLoading) {\n <div\n [ngClass]=\"{\n backdrop: showBackdrop && !hideContent,\n 'hide-content': hideContent,\n }\"\n class=\"spinner-wrapper\"\n >\n <kirby-spinner class=\"spinner\"></kirby-spinner>\n </div>\n }\n <div class=\"content-wrapper\">\n <ng-content></ng-content>\n </div>\n</div>\n",
122
- styles: [":host{display:block;min-height:var(--kirby-spacing-l)}.overlay-wrapper{min-height:inherit;height:100%;width:100%;position:relative}.overlay-wrapper.loading{overflow:hidden}.overlay-wrapper .spinner-wrapper{height:100%;width:100%;position:absolute;z-index:var(--kirby-z-index-loading-overlay);display:flex;background:transparent;justify-content:center;place-items:center}.overlay-wrapper .spinner-wrapper.backdrop{background-color:color-mix(in srgb,var(--kirby-color-fill-base) var(--kirby-loading-overlay-backdrop-opacity),transparent)}.overlay-wrapper .spinner-wrapper.hide-content{background-color:var(--kirby-color-fill-base)}.overlay-wrapper .spinner-wrapper .spinner{width:var(--kirby-spacing-l);height:var(--kirby-spacing-l)}\n"],
122
+ styles: [":host{display:block;min-height:var(--kirby-spacing-l)}.overlay-wrapper{min-height:inherit;height:100%;width:100%;position:relative}.overlay-wrapper.loading{overflow:hidden}.overlay-wrapper .spinner-wrapper{height:100%;width:100%;position:absolute;z-index:var(--kirby-z-index-loading-overlay);display:flex;background:transparent;justify-content:center;place-items:center}.overlay-wrapper .spinner-wrapper.backdrop{background-color:color-mix(in srgb,var(--kirby-color-fill-base) var(--kirby-opacity-80),transparent)}@supports not (background-color: color-mix(in srgb,red 50%,transparent)){.overlay-wrapper .spinner-wrapper.backdrop:before{content:\"\";position:absolute;inset:0;z-index:-1;background-color:var(--kirby-color-fill-base);opacity:var(--kirby-opacity-80)}}.overlay-wrapper .spinner-wrapper.hide-content{background-color:var(--kirby-color-fill-base)}.overlay-wrapper .spinner-wrapper .spinner{width:var(--kirby-spacing-l);height:var(--kirby-spacing-l)}\n"],
123
123
  dependencies: [
124
124
  {
125
125
  kind: "component",
@@ -143,7 +143,7 @@ var LoadingOverlayComponent = class LoadingOverlayComponent {
143
143
  };
144
144
  i0.ɵɵngDeclareClassMetadata({
145
145
  minVersion: "12.0.0",
146
- version: "22.2.2",
146
+ version: "22.2.3",
147
147
  ngImport: i0,
148
148
  type: LoadingOverlayComponent,
149
149
  decorators: [{
@@ -153,7 +153,7 @@ i0.ɵɵngDeclareClassMetadata({
153
153
  selector: "kirby-loading-overlay",
154
154
  changeDetection: ChangeDetectionStrategy.OnPush,
155
155
  template: "<div class=\"overlay-wrapper\" [class.loading]=\"isLoading\">\n @if (isLoading) {\n <div\n [ngClass]=\"{\n backdrop: showBackdrop && !hideContent,\n 'hide-content': hideContent,\n }\"\n class=\"spinner-wrapper\"\n >\n <kirby-spinner class=\"spinner\"></kirby-spinner>\n </div>\n }\n <div class=\"content-wrapper\">\n <ng-content></ng-content>\n </div>\n</div>\n",
156
- styles: [":host{display:block;min-height:var(--kirby-spacing-l)}.overlay-wrapper{min-height:inherit;height:100%;width:100%;position:relative}.overlay-wrapper.loading{overflow:hidden}.overlay-wrapper .spinner-wrapper{height:100%;width:100%;position:absolute;z-index:var(--kirby-z-index-loading-overlay);display:flex;background:transparent;justify-content:center;place-items:center}.overlay-wrapper .spinner-wrapper.backdrop{background-color:color-mix(in srgb,var(--kirby-color-fill-base) var(--kirby-loading-overlay-backdrop-opacity),transparent)}.overlay-wrapper .spinner-wrapper.hide-content{background-color:var(--kirby-color-fill-base)}.overlay-wrapper .spinner-wrapper .spinner{width:var(--kirby-spacing-l);height:var(--kirby-spacing-l)}\n"]
156
+ styles: [":host{display:block;min-height:var(--kirby-spacing-l)}.overlay-wrapper{min-height:inherit;height:100%;width:100%;position:relative}.overlay-wrapper.loading{overflow:hidden}.overlay-wrapper .spinner-wrapper{height:100%;width:100%;position:absolute;z-index:var(--kirby-z-index-loading-overlay);display:flex;background:transparent;justify-content:center;place-items:center}.overlay-wrapper .spinner-wrapper.backdrop{background-color:color-mix(in srgb,var(--kirby-color-fill-base) var(--kirby-opacity-80),transparent)}@supports not (background-color: color-mix(in srgb,red 50%,transparent)){.overlay-wrapper .spinner-wrapper.backdrop:before{content:\"\";position:absolute;inset:0;z-index:-1;background-color:var(--kirby-color-fill-base);opacity:var(--kirby-opacity-80)}}.overlay-wrapper .spinner-wrapper.hide-content{background-color:var(--kirby-color-fill-base)}.overlay-wrapper .spinner-wrapper .spinner{width:var(--kirby-spacing-l);height:var(--kirby-spacing-l)}\n"]
157
157
  }]
158
158
  }],
159
159
  propDecorators: {
@@ -1 +1 @@
1
- {"version":3,"file":"kirbydesign-designsystem-loading-overlay.mjs","names":[],"sources":["../../loading-overlay/src/loading-overlay.service.ts","../../loading-overlay/src/loading-overlay.component.ts","../../loading-overlay/src/loading-overlay.component.html"],"sourcesContent":["import {\n ApplicationRef,\n ComponentRef,\n createComponent,\n EnvironmentInjector,\n Injectable,\n} from '@angular/core';\nimport { LoadingController } from '@ionic/angular';\nimport { SpinnerComponent } from '@kirbydesign/designsystem/spinner';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LoadingOverlayService {\n private ionLoading: HTMLIonLoadingElement | null = null;\n private spinnerRef: ComponentRef<SpinnerComponent> | null = null;\n\n constructor(\n private loadingController: LoadingController,\n private applicationRef: ApplicationRef,\n private environmentInjector: EnvironmentInjector\n ) {}\n\n public async showLoadingOverlay(\n showBackdrop: boolean = true,\n hideContent: boolean = false\n ): Promise<void> {\n if (!this.ionLoading) {\n const cssClasses = ['kirby-loading-overlay'];\n\n if (hideContent) {\n cssClasses.push('kirby-loading-hide-content');\n }\n\n this.ionLoading = await this.loadingController.create({\n cssClass: cssClasses,\n duration: 0,\n message: null,\n showBackdrop: showBackdrop || hideContent,\n spinner: null,\n });\n\n const loadingWrapper = this.ionLoading.querySelector('.loading-wrapper');\n const kirbySpinner = document.createElement('kirby-spinner');\n const componentRef = createComponent(SpinnerComponent, {\n environmentInjector: this.environmentInjector,\n hostElement: kirbySpinner,\n });\n this.spinnerRef = componentRef;\n this.applicationRef.attachView(componentRef.hostView);\n loadingWrapper.appendChild(kirbySpinner);\n\n await this.ionLoading.present();\n }\n }\n\n public async hideLoadingOverlay(): Promise<void> {\n if (this.ionLoading) {\n try {\n await this.ionLoading.dismiss();\n } finally {\n this.destroySpinner();\n this.ionLoading = null;\n }\n }\n }\n\n private destroySpinner(): void {\n if (this.spinnerRef) {\n this.applicationRef.detachView(this.spinnerRef.hostView);\n this.spinnerRef.destroy();\n this.spinnerRef = null;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { SpinnerComponent } from '@kirbydesign/designsystem/spinner';\n\n@Component({\n imports: [SpinnerComponent, CommonModule],\n selector: 'kirby-loading-overlay',\n templateUrl: './loading-overlay.component.html',\n styleUrls: ['./loading-overlay.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LoadingOverlayComponent {\n @Input() public isLoading = true;\n @Input() public showBackdrop = true;\n @Input() public hideContent = false;\n}\n","<div class=\"overlay-wrapper\" [class.loading]=\"isLoading\">\n @if (isLoading) {\n <div\n [ngClass]=\"{\n backdrop: showBackdrop && !hideContent,\n 'hide-content': hideContent,\n }\"\n class=\"spinner-wrapper\"\n >\n <kirby-spinner class=\"spinner\"></kirby-spinner>\n </div>\n }\n <div class=\"content-wrapper\">\n <ng-content></ng-content>\n </div>\n</div>\n"],"mappings":"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"}
1
+ {"version":3,"file":"kirbydesign-designsystem-loading-overlay.mjs","names":[],"sources":["../../loading-overlay/src/loading-overlay.service.ts","../../loading-overlay/src/loading-overlay.component.ts","../../loading-overlay/src/loading-overlay.component.html"],"sourcesContent":["import {\n ApplicationRef,\n ComponentRef,\n createComponent,\n EnvironmentInjector,\n Injectable,\n} from '@angular/core';\nimport { LoadingController } from '@ionic/angular';\nimport { SpinnerComponent } from '@kirbydesign/designsystem/spinner';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LoadingOverlayService {\n private ionLoading: HTMLIonLoadingElement | null = null;\n private spinnerRef: ComponentRef<SpinnerComponent> | null = null;\n\n constructor(\n private loadingController: LoadingController,\n private applicationRef: ApplicationRef,\n private environmentInjector: EnvironmentInjector\n ) {}\n\n public async showLoadingOverlay(\n showBackdrop: boolean = true,\n hideContent: boolean = false\n ): Promise<void> {\n if (!this.ionLoading) {\n const cssClasses = ['kirby-loading-overlay'];\n\n if (hideContent) {\n cssClasses.push('kirby-loading-hide-content');\n }\n\n this.ionLoading = await this.loadingController.create({\n cssClass: cssClasses,\n duration: 0,\n message: null,\n showBackdrop: showBackdrop || hideContent,\n spinner: null,\n });\n\n const loadingWrapper = this.ionLoading.querySelector('.loading-wrapper');\n const kirbySpinner = document.createElement('kirby-spinner');\n const componentRef = createComponent(SpinnerComponent, {\n environmentInjector: this.environmentInjector,\n hostElement: kirbySpinner,\n });\n this.spinnerRef = componentRef;\n this.applicationRef.attachView(componentRef.hostView);\n loadingWrapper.appendChild(kirbySpinner);\n\n await this.ionLoading.present();\n }\n }\n\n public async hideLoadingOverlay(): Promise<void> {\n if (this.ionLoading) {\n try {\n await this.ionLoading.dismiss();\n } finally {\n this.destroySpinner();\n this.ionLoading = null;\n }\n }\n }\n\n private destroySpinner(): void {\n if (this.spinnerRef) {\n this.applicationRef.detachView(this.spinnerRef.hostView);\n this.spinnerRef.destroy();\n this.spinnerRef = null;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { SpinnerComponent } from '@kirbydesign/designsystem/spinner';\n\n@Component({\n imports: [SpinnerComponent, CommonModule],\n selector: 'kirby-loading-overlay',\n templateUrl: './loading-overlay.component.html',\n styleUrls: ['./loading-overlay.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LoadingOverlayComponent {\n @Input() public isLoading = true;\n @Input() public showBackdrop = true;\n @Input() public hideContent = false;\n}\n","<div class=\"overlay-wrapper\" [class.loading]=\"isLoading\">\n @if (isLoading) {\n <div\n [ngClass]=\"{\n backdrop: showBackdrop && !hideContent,\n 'hide-content': hideContent,\n }\"\n class=\"spinner-wrapper\"\n >\n <kirby-spinner class=\"spinner\"></kirby-spinner>\n </div>\n }\n <div class=\"content-wrapper\">\n <ng-content></ng-content>\n </div>\n</div>\n"],"mappings":"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"}
@@ -197,7 +197,7 @@ var MenuComponent = class MenuComponent {
197
197
  static {
198
198
  this.ɵfac = i0.ɵɵngDeclareFactory({
199
199
  minVersion: "12.0.0",
200
- version: "22.2.2",
200
+ version: "22.2.3",
201
201
  ngImport: i0,
202
202
  type: MenuComponent,
203
203
  deps: [
@@ -214,7 +214,7 @@ var MenuComponent = class MenuComponent {
214
214
  static {
215
215
  this.ɵcmp = i0.ɵɵngDeclareComponent({
216
216
  minVersion: "17.0.0",
217
- version: "22.2.2",
217
+ version: "22.2.3",
218
218
  type: MenuComponent,
219
219
  isStandalone: true,
220
220
  selector: "kirby-menu",
@@ -279,7 +279,7 @@ var MenuComponent = class MenuComponent {
279
279
  ],
280
280
  ngImport: i0,
281
281
  template: "<div class=\"button-container\" #buttonContainer>\n <ng-content select=\"button[kirby-button]\"></ng-content>\n @if (!userProvidedButton) {\n <button\n #defaultButton\n [id]=\"triggerButtonId\"\n kirby-button\n [size]=\"buttonSize\"\n [disabled]=\"isDisabled\"\n type=\"button\"\n [attentionLevel]=\"attentionLevel\"\n aria-haspopup=\"true\"\n [attr.aria-controls]=\"menuId\"\n aria-expanded=\"false\"\n [attr.aria-label]=\"translations.get('more')\"\n >\n <kirby-icon [name]=\"'more'\"></kirby-icon>\n </button>\n }\n</div>\n<kirby-card\n [id]=\"menuId\"\n kirbyFloating\n [strategy]=\"'fixed'\"\n [reference]=\"buttonContainerElement\"\n [isDisabled]=\"isDisabled\"\n [triggers]=\"triggers\"\n [placement]=\"placement\"\n [DOMPortalOutlet]=\"DOMPortalOutlet\"\n [portalOutletConfig]=\"portalOutletConfig\"\n [closeOnBackdrop]=\"closeOnBackdrop\"\n [closeOnEscapeKey]=\"closeOnEscapeKey\"\n [closeOnSelect]=\"closeOnSelect\"\n [autoPlacement]=\"autoPlacement\"\n [shift]=\"shift\"\n [style.minWidth]=\"minWidth ? minWidth + 'px' : null\"\n class=\"menu-popover\"\n (keydown)=\"_onKeydown($event)\"\n (displayChanged)=\"menuVisibilityChanged($event)\"\n role=\"menu\"\n [attr.aria-labelledby]=\"triggerButtonId\"\n>\n <ng-content select=\"kirby-item\"></ng-content>\n</kirby-card>\n",
282
- styles: [".kirby-line-clamp{display:-webkit-box;-webkit-line-clamp:var(--line-clamp, none);-webkit-box-orient:vertical;overflow:hidden}:host{position:relative}.button-container{display:inline-block}kirby-card{max-height:352px;overflow-y:auto;box-shadow:var(--kirby-elevation-4);min-width:240px;max-width:460px}\n"],
282
+ styles: [".kirby-line-clamp{display:-webkit-box;-webkit-line-clamp:var(--line-clamp, none);-webkit-box-orient:vertical;overflow:hidden}:host{position:relative}.button-container{display:inline-block}kirby-card{max-height:min(352px,var(--kirby-floating-available-height, 352px));min-height:44px;overflow-y:auto;box-shadow:var(--kirby-elevation-4);min-width:240px;max-width:460px}\n"],
283
283
  dependencies: [
284
284
  {
285
285
  kind: "component",
@@ -342,7 +342,7 @@ var MenuComponent = class MenuComponent {
342
342
  };
343
343
  i0.ɵɵngDeclareClassMetadata({
344
344
  minVersion: "12.0.0",
345
- version: "22.2.2",
345
+ version: "22.2.3",
346
346
  ngImport: i0,
347
347
  type: MenuComponent,
348
348
  decorators: [{
@@ -357,7 +357,7 @@ i0.ɵɵngDeclareClassMetadata({
357
357
  ],
358
358
  changeDetection: ChangeDetectionStrategy.OnPush,
359
359
  template: "<div class=\"button-container\" #buttonContainer>\n <ng-content select=\"button[kirby-button]\"></ng-content>\n @if (!userProvidedButton) {\n <button\n #defaultButton\n [id]=\"triggerButtonId\"\n kirby-button\n [size]=\"buttonSize\"\n [disabled]=\"isDisabled\"\n type=\"button\"\n [attentionLevel]=\"attentionLevel\"\n aria-haspopup=\"true\"\n [attr.aria-controls]=\"menuId\"\n aria-expanded=\"false\"\n [attr.aria-label]=\"translations.get('more')\"\n >\n <kirby-icon [name]=\"'more'\"></kirby-icon>\n </button>\n }\n</div>\n<kirby-card\n [id]=\"menuId\"\n kirbyFloating\n [strategy]=\"'fixed'\"\n [reference]=\"buttonContainerElement\"\n [isDisabled]=\"isDisabled\"\n [triggers]=\"triggers\"\n [placement]=\"placement\"\n [DOMPortalOutlet]=\"DOMPortalOutlet\"\n [portalOutletConfig]=\"portalOutletConfig\"\n [closeOnBackdrop]=\"closeOnBackdrop\"\n [closeOnEscapeKey]=\"closeOnEscapeKey\"\n [closeOnSelect]=\"closeOnSelect\"\n [autoPlacement]=\"autoPlacement\"\n [shift]=\"shift\"\n [style.minWidth]=\"minWidth ? minWidth + 'px' : null\"\n class=\"menu-popover\"\n (keydown)=\"_onKeydown($event)\"\n (displayChanged)=\"menuVisibilityChanged($event)\"\n role=\"menu\"\n [attr.aria-labelledby]=\"triggerButtonId\"\n>\n <ng-content select=\"kirby-item\"></ng-content>\n</kirby-card>\n",
360
- styles: [".kirby-line-clamp{display:-webkit-box;-webkit-line-clamp:var(--line-clamp, none);-webkit-box-orient:vertical;overflow:hidden}:host{position:relative}.button-container{display:inline-block}kirby-card{max-height:352px;overflow-y:auto;box-shadow:var(--kirby-elevation-4);min-width:240px;max-width:460px}\n"]
360
+ styles: [".kirby-line-clamp{display:-webkit-box;-webkit-line-clamp:var(--line-clamp, none);-webkit-box-orient:vertical;overflow:hidden}:host{position:relative}.button-container{display:inline-block}kirby-card{max-height:min(352px,var(--kirby-floating-available-height, 352px));min-height:44px;overflow-y:auto;box-shadow:var(--kirby-elevation-4);min-width:240px;max-width:460px}\n"]
361
361
  }]
362
362
  }],
363
363
  ctorParameters: () => [
@@ -1 +1 @@
1
- {"version":3,"file":"kirbydesign-designsystem-menu.mjs","names":[],"sources":["../../menu/src/menu.component.ts","../../menu/src/menu.component.html"],"sourcesContent":["import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n DestroyRef,\n ElementRef,\n HostListener,\n Input,\n NgZone,\n OnDestroy,\n QueryList,\n Renderer2,\n ViewChild,\n} from '@angular/core';\nimport { Placement } from '@floating-ui/dom';\n\nimport { ItemComponent } from '@kirbydesign/designsystem/item';\nimport { CardComponent } from '@kirbydesign/designsystem/card';\nimport { IconComponent } from '@kirbydesign/designsystem/icon';\nimport { AttentionLevel, ButtonComponent, ButtonSize } from '@kirbydesign/designsystem/button';\nimport {\n FloatingDirective,\n FloatingOffset,\n PortalOutletConfig,\n TriggerEvent,\n} from '@kirbydesign/designsystem/shared/floating';\nimport { EventListenerDisposeFn } from '@kirbydesign/designsystem/types';\nimport { StringSearchHelper, UniqueIdGenerator } from '@kirbydesign/designsystem/helpers';\nimport { forwardAttributes, TranslationService } from '@kirbydesign/designsystem/shared';\nimport { componentOnReady } from '@ionic/core';\nimport { startWith } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'kirby-menu',\n imports: [ButtonComponent, FloatingDirective, CardComponent, IconComponent],\n templateUrl: './menu.component.html',\n styleUrls: ['./menu.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MenuComponent implements AfterViewInit, AfterContentInit, OnDestroy {\n readonly menuId: string = UniqueIdGenerator.scopedTo('kirby-menu').next();\n triggerButtonId: string = UniqueIdGenerator.scopedTo('kirby-menu-trigger-button').next();\n private _attributesToForward = ['aria-label', 'aria-labelledby'];\n\n constructor(\n private cdr: ChangeDetectorRef,\n private elementRef: ElementRef<HTMLElement>,\n private zone: NgZone,\n private renderer: Renderer2,\n public translations: TranslationService,\n private destroyRef: DestroyRef\n ) {}\n\n @Input() public isDisabled: boolean = false;\n\n @Input() public buttonSize: ButtonSize = ButtonSize.MD;\n\n @Input() public placement: Placement = 'bottom-start';\n\n @Input() public attentionLevel: AttentionLevel = '3';\n\n @Input() public triggers: Array<TriggerEvent> = ['click'];\n\n @Input() public DOMPortalOutlet: HTMLElement = this.elementRef.nativeElement.ownerDocument.body;\n\n @Input() public portalOutletConfig: PortalOutletConfig | undefined;\n\n @Input() public autoPlacement: boolean = false;\n\n @Input() public closeOnSelect: boolean = true;\n\n @Input() public closeOnEscapeKey: boolean = true;\n\n @Input() public closeOnBackdrop: boolean = true;\n\n @Input() public shift: boolean = true;\n\n /**\n * The minimum width of the menu. If not set, the default width is 240px\n */\n @Input() public minWidth: number;\n\n @ViewChild('buttonContainer', { read: ElementRef })\n public buttonContainerElement: ElementRef<HTMLElement> | undefined;\n\n @ViewChild('defaultButton', { read: ElementRef })\n public defaultButtonElement: ElementRef<HTMLButtonElement> | undefined;\n\n @ContentChild(ButtonComponent, { read: ElementRef }) public userProvidedButton:\n | ElementRef<HTMLButtonElement>\n | undefined;\n\n @ViewChild(FloatingDirective)\n private floatingMenu: FloatingDirective;\n\n @ContentChildren(ItemComponent, { read: ElementRef }) public kirbyItems: QueryList<\n ElementRef<HTMLElement>\n >;\n\n @ContentChildren(ItemComponent) public kirbyItemComponents: QueryList<ItemComponent>;\n\n public floatingMenuIsShown: boolean = false;\n public FloatingOffset: typeof FloatingOffset = FloatingOffset;\n private disposeIonScrollListener: EventListenerDisposeFn;\n private focusedIndex = -1;\n\n @HostListener('keydown', ['$event'])\n _onKeydown(event: KeyboardEvent) {\n if (this.kirbyItems.length === 0) {\n console.warn('[Kirby] No items found within menu');\n return;\n }\n if (this.floatingMenuIsShown) {\n this.handleKeyDownForOpenedMenu(event);\n } else {\n this.handleKeyDownForClosedMenu(event);\n }\n }\n\n @HostListener('click')\n _onClick() {\n if (!this.floatingMenuIsShown) return;\n this.focusedIndex = 0;\n this.focusItem();\n }\n\n private preventDefaultAndStopImmediatePropagation(event: KeyboardEvent) {\n event.stopImmediatePropagation();\n event.preventDefault();\n }\n\n private getFirstInteractiveElement(el: HTMLIonItemElement) {\n return el.querySelector<HTMLIonToggleElement | HTMLIonRadioElement | HTMLIonCheckboxElement>(\n 'ion-toggle:not([disabled]), ion-checkbox:not([disabled]), ion-radio:not([disabled])'\n );\n }\n\n private handleKeyDownForClosedMenu(event: KeyboardEvent) {\n const key = event.key;\n switch (key) {\n case ' ':\n case 'Enter':\n case 'ArrowDown':\n this.preventDefaultAndStopImmediatePropagation(event);\n this.focusedIndex = 0;\n this.floatingMenu.show();\n this.focusItem();\n break;\n case 'ArrowUp':\n this.preventDefaultAndStopImmediatePropagation(event);\n this.focusedIndex = this.kirbyItems.length - 1;\n this.floatingMenu.show();\n this.focusItem();\n break;\n }\n }\n\n private handleKeyDownForOpenedMenu(event: KeyboardEvent) {\n const key = event.key;\n\n switch (key) {\n case 'ArrowDown':\n this.preventDefaultAndStopImmediatePropagation(event);\n if (this.focusedIndex === this.kirbyItems.length - 1) {\n this.focusedIndex = 0;\n } else {\n this.focusedIndex++;\n }\n this.focusItem();\n break;\n case 'ArrowUp':\n this.preventDefaultAndStopImmediatePropagation(event);\n if (this.focusedIndex === 0) {\n this.focusedIndex = this.kirbyItems.length - 1;\n } else {\n this.focusedIndex--;\n }\n this.focusItem();\n break;\n case 'Home': {\n this.preventDefaultAndStopImmediatePropagation(event);\n if (this.focusedIndex > 0) {\n this.focusedIndex = 0;\n this.focusItem();\n }\n break;\n }\n case 'End': {\n this.preventDefaultAndStopImmediatePropagation(event);\n if (this.focusedIndex < this.kirbyItems.length - 1) {\n this.focusedIndex = this.kirbyItems.length - 1;\n this.focusItem();\n }\n break;\n }\n case 'Escape':\n this.preventDefaultAndStopImmediatePropagation(event);\n if (this.closeOnEscapeKey) {\n this.floatingMenu.hide();\n }\n break;\n case 'Tab':\n this.floatingMenu.hide();\n break;\n default: {\n if (StringSearchHelper.isPrintableCharacter(key)) {\n this.preventDefaultAndStopImmediatePropagation(event);\n const foundItemIndex = this.getIndexOfItemByFirstCharacter(key);\n if (foundItemIndex > -1) {\n this.focusedIndex = foundItemIndex;\n this.focusItem();\n }\n }\n }\n }\n }\n\n private getIndexOfItemByFirstCharacter(char: string) {\n return StringSearchHelper.getIndexByFirstMatchingStartString(\n char,\n this.kirbyItems.map((item) => item.nativeElement.innerText),\n this.focusedIndex + 1\n );\n }\n\n focusItem() {\n const itemToBeFocused = this.kirbyItems.get(this.focusedIndex);\n const ionItem = itemToBeFocused.nativeElement.querySelector('ion-item');\n\n // Look for interactive element within ion-item like toggle or checkbox and set focus if found\n const firstInteractiveElementWithinItem = this.getFirstInteractiveElement(ionItem);\n if (firstInteractiveElementWithinItem) {\n firstInteractiveElementWithinItem.focus();\n } else {\n this.focusSelectableItem(ionItem);\n }\n }\n\n private focusSelectableItem(ionItem: HTMLIonItemElement) {\n const nativeButton: HTMLButtonElement =\n ionItem.shadowRoot.querySelector('button:not([disabled])');\n nativeButton?.focus();\n }\n\n getTriggerButton(): HTMLButtonElement {\n return (this.userProvidedButton ?? this.defaultButtonElement).nativeElement;\n }\n\n public ngAfterViewInit(): void {\n this.cdr.detectChanges(); // Sets the updated reference for kirby-floating\n\n this.zone.runOutsideAngular(() => {\n /*\n * Listen for ionScroll outside of Angular's change detection to\n * avoid a change detection cycle for every scroll-event fired\n */\n this.disposeIonScrollListener = this.renderer.listen(document, 'ionScroll', () => {\n this.floatingMenu.hide();\n });\n });\n this.forwardAriaLabelToTriggerButton();\n }\n\n ngAfterContentInit(): void {\n this.setUserProvidedButtonAriaAttributes();\n this.kirbyItemComponents.changes\n .pipe(startWith(null), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.setRoleAttributeForAllItems();\n this.ensureSelectableItems();\n });\n }\n\n private forwardAriaLabelToTriggerButton() {\n forwardAttributes(\n this.elementRef.nativeElement,\n this._attributesToForward,\n this.renderer,\n this.getTriggerButton()\n );\n }\n\n ensureSelectableItems() {\n this.kirbyItemComponents.forEach((itemComponent) => {\n if (itemComponent.selectable === undefined) {\n itemComponent.selectable = true;\n }\n });\n }\n\n private setRoleAttributeForAllItems() {\n this.kirbyItems.forEach((item) => {\n this.setRoleOnNativeControl(item.nativeElement);\n });\n }\n\n private async setRoleOnNativeControl(item: HTMLElement) {\n const ionItem = item.querySelector<HTMLIonItemElement>('ion-item');\n if (!ionItem) return;\n\n await new Promise<void>((resolve) => componentOnReady(ionItem, resolve));\n\n const checkableInput = ionItem\n .querySelector('ion-toggle, ion-checkbox')\n ?.shadowRoot?.querySelector('input');\n const button = ionItem.shadowRoot?.querySelector('button');\n const nativeControl = checkableInput ?? button;\n\n if (!nativeControl) return;\n this.renderer.setAttribute(\n nativeControl,\n 'role',\n checkableInput ? 'menuitemcheckbox' : 'menuitem'\n );\n }\n\n menuVisibilityChanged(menuIsShown: boolean) {\n this.floatingMenuIsShown = menuIsShown;\n this.renderer.setAttribute(this.getTriggerButton(), 'aria-expanded', menuIsShown.toString());\n if (!menuIsShown) {\n this.focusedIndex = -1;\n this.getTriggerButton().focus();\n }\n }\n\n private setUserProvidedButtonAriaAttributes() {\n if (!this.userProvidedButton) return;\n\n const button = this.userProvidedButton.nativeElement;\n if (button.id) {\n this.triggerButtonId = button.id;\n } else {\n this.renderer.setAttribute(button, 'id', this.triggerButtonId);\n }\n if (!button.getAttribute('aria-controls')) {\n this.renderer.setAttribute(button, 'aria-controls', this.menuId);\n }\n if (!button.getAttribute('aria-haspopup')) {\n this.renderer.setAttribute(button, 'aria-haspopup', 'true');\n }\n if (!button.getAttribute('aria-label')) {\n this.renderer.setAttribute(button, 'aria-label', this.translations.get('more'));\n }\n }\n\n ngOnDestroy(): void {\n this.disposeIonScrollListener?.();\n }\n}\n","<div class=\"button-container\" #buttonContainer>\n <ng-content select=\"button[kirby-button]\"></ng-content>\n @if (!userProvidedButton) {\n <button\n #defaultButton\n [id]=\"triggerButtonId\"\n kirby-button\n [size]=\"buttonSize\"\n [disabled]=\"isDisabled\"\n type=\"button\"\n [attentionLevel]=\"attentionLevel\"\n aria-haspopup=\"true\"\n [attr.aria-controls]=\"menuId\"\n aria-expanded=\"false\"\n [attr.aria-label]=\"translations.get('more')\"\n >\n <kirby-icon [name]=\"'more'\"></kirby-icon>\n </button>\n }\n</div>\n<kirby-card\n [id]=\"menuId\"\n kirbyFloating\n [strategy]=\"'fixed'\"\n [reference]=\"buttonContainerElement\"\n [isDisabled]=\"isDisabled\"\n [triggers]=\"triggers\"\n [placement]=\"placement\"\n [DOMPortalOutlet]=\"DOMPortalOutlet\"\n [portalOutletConfig]=\"portalOutletConfig\"\n [closeOnBackdrop]=\"closeOnBackdrop\"\n [closeOnEscapeKey]=\"closeOnEscapeKey\"\n [closeOnSelect]=\"closeOnSelect\"\n [autoPlacement]=\"autoPlacement\"\n [shift]=\"shift\"\n [style.minWidth]=\"minWidth ? minWidth + 'px' : null\"\n class=\"menu-popover\"\n (keydown)=\"_onKeydown($event)\"\n (displayChanged)=\"menuVisibilityChanged($event)\"\n role=\"menu\"\n [attr.aria-labelledby]=\"triggerButtonId\"\n>\n <ng-content select=\"kirby-item\"></ng-content>\n</kirby-card>\n"],"mappings":"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"}
1
+ {"version":3,"file":"kirbydesign-designsystem-menu.mjs","names":[],"sources":["../../menu/src/menu.component.ts","../../menu/src/menu.component.html"],"sourcesContent":["import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n DestroyRef,\n ElementRef,\n HostListener,\n Input,\n NgZone,\n OnDestroy,\n QueryList,\n Renderer2,\n ViewChild,\n} from '@angular/core';\nimport { Placement } from '@floating-ui/dom';\n\nimport { ItemComponent } from '@kirbydesign/designsystem/item';\nimport { CardComponent } from '@kirbydesign/designsystem/card';\nimport { IconComponent } from '@kirbydesign/designsystem/icon';\nimport { AttentionLevel, ButtonComponent, ButtonSize } from '@kirbydesign/designsystem/button';\nimport {\n FloatingDirective,\n FloatingOffset,\n PortalOutletConfig,\n TriggerEvent,\n} from '@kirbydesign/designsystem/shared/floating';\nimport { EventListenerDisposeFn } from '@kirbydesign/designsystem/types';\nimport { StringSearchHelper, UniqueIdGenerator } from '@kirbydesign/designsystem/helpers';\nimport { forwardAttributes, TranslationService } from '@kirbydesign/designsystem/shared';\nimport { componentOnReady } from '@ionic/core';\nimport { startWith } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'kirby-menu',\n imports: [ButtonComponent, FloatingDirective, CardComponent, IconComponent],\n templateUrl: './menu.component.html',\n styleUrls: ['./menu.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MenuComponent implements AfterViewInit, AfterContentInit, OnDestroy {\n readonly menuId: string = UniqueIdGenerator.scopedTo('kirby-menu').next();\n triggerButtonId: string = UniqueIdGenerator.scopedTo('kirby-menu-trigger-button').next();\n private _attributesToForward = ['aria-label', 'aria-labelledby'];\n\n constructor(\n private cdr: ChangeDetectorRef,\n private elementRef: ElementRef<HTMLElement>,\n private zone: NgZone,\n private renderer: Renderer2,\n public translations: TranslationService,\n private destroyRef: DestroyRef\n ) {}\n\n @Input() public isDisabled: boolean = false;\n\n @Input() public buttonSize: ButtonSize = ButtonSize.MD;\n\n @Input() public placement: Placement = 'bottom-start';\n\n @Input() public attentionLevel: AttentionLevel = '3';\n\n @Input() public triggers: Array<TriggerEvent> = ['click'];\n\n @Input() public DOMPortalOutlet: HTMLElement = this.elementRef.nativeElement.ownerDocument.body;\n\n @Input() public portalOutletConfig: PortalOutletConfig | undefined;\n\n @Input() public autoPlacement: boolean = false;\n\n @Input() public closeOnSelect: boolean = true;\n\n @Input() public closeOnEscapeKey: boolean = true;\n\n @Input() public closeOnBackdrop: boolean = true;\n\n @Input() public shift: boolean = true;\n\n /**\n * The minimum width of the menu. If not set, the default width is 240px\n */\n @Input() public minWidth: number;\n\n @ViewChild('buttonContainer', { read: ElementRef })\n public buttonContainerElement: ElementRef<HTMLElement> | undefined;\n\n @ViewChild('defaultButton', { read: ElementRef })\n public defaultButtonElement: ElementRef<HTMLButtonElement> | undefined;\n\n @ContentChild(ButtonComponent, { read: ElementRef }) public userProvidedButton:\n | ElementRef<HTMLButtonElement>\n | undefined;\n\n @ViewChild(FloatingDirective)\n private floatingMenu: FloatingDirective;\n\n @ContentChildren(ItemComponent, { read: ElementRef }) public kirbyItems: QueryList<\n ElementRef<HTMLElement>\n >;\n\n @ContentChildren(ItemComponent) public kirbyItemComponents: QueryList<ItemComponent>;\n\n public floatingMenuIsShown: boolean = false;\n public FloatingOffset: typeof FloatingOffset = FloatingOffset;\n private disposeIonScrollListener: EventListenerDisposeFn;\n private focusedIndex = -1;\n\n @HostListener('keydown', ['$event'])\n _onKeydown(event: KeyboardEvent) {\n if (this.kirbyItems.length === 0) {\n console.warn('[Kirby] No items found within menu');\n return;\n }\n if (this.floatingMenuIsShown) {\n this.handleKeyDownForOpenedMenu(event);\n } else {\n this.handleKeyDownForClosedMenu(event);\n }\n }\n\n @HostListener('click')\n _onClick() {\n if (!this.floatingMenuIsShown) return;\n this.focusedIndex = 0;\n this.focusItem();\n }\n\n private preventDefaultAndStopImmediatePropagation(event: KeyboardEvent) {\n event.stopImmediatePropagation();\n event.preventDefault();\n }\n\n private getFirstInteractiveElement(el: HTMLIonItemElement) {\n return el.querySelector<HTMLIonToggleElement | HTMLIonRadioElement | HTMLIonCheckboxElement>(\n 'ion-toggle:not([disabled]), ion-checkbox:not([disabled]), ion-radio:not([disabled])'\n );\n }\n\n private handleKeyDownForClosedMenu(event: KeyboardEvent) {\n const key = event.key;\n switch (key) {\n case ' ':\n case 'Enter':\n case 'ArrowDown':\n this.preventDefaultAndStopImmediatePropagation(event);\n this.focusedIndex = 0;\n this.floatingMenu.show();\n this.focusItem();\n break;\n case 'ArrowUp':\n this.preventDefaultAndStopImmediatePropagation(event);\n this.focusedIndex = this.kirbyItems.length - 1;\n this.floatingMenu.show();\n this.focusItem();\n break;\n }\n }\n\n private handleKeyDownForOpenedMenu(event: KeyboardEvent) {\n const key = event.key;\n\n switch (key) {\n case 'ArrowDown':\n this.preventDefaultAndStopImmediatePropagation(event);\n if (this.focusedIndex === this.kirbyItems.length - 1) {\n this.focusedIndex = 0;\n } else {\n this.focusedIndex++;\n }\n this.focusItem();\n break;\n case 'ArrowUp':\n this.preventDefaultAndStopImmediatePropagation(event);\n if (this.focusedIndex === 0) {\n this.focusedIndex = this.kirbyItems.length - 1;\n } else {\n this.focusedIndex--;\n }\n this.focusItem();\n break;\n case 'Home': {\n this.preventDefaultAndStopImmediatePropagation(event);\n if (this.focusedIndex > 0) {\n this.focusedIndex = 0;\n this.focusItem();\n }\n break;\n }\n case 'End': {\n this.preventDefaultAndStopImmediatePropagation(event);\n if (this.focusedIndex < this.kirbyItems.length - 1) {\n this.focusedIndex = this.kirbyItems.length - 1;\n this.focusItem();\n }\n break;\n }\n case 'Escape':\n this.preventDefaultAndStopImmediatePropagation(event);\n if (this.closeOnEscapeKey) {\n this.floatingMenu.hide();\n }\n break;\n case 'Tab':\n this.floatingMenu.hide();\n break;\n default: {\n if (StringSearchHelper.isPrintableCharacter(key)) {\n this.preventDefaultAndStopImmediatePropagation(event);\n const foundItemIndex = this.getIndexOfItemByFirstCharacter(key);\n if (foundItemIndex > -1) {\n this.focusedIndex = foundItemIndex;\n this.focusItem();\n }\n }\n }\n }\n }\n\n private getIndexOfItemByFirstCharacter(char: string) {\n return StringSearchHelper.getIndexByFirstMatchingStartString(\n char,\n this.kirbyItems.map((item) => item.nativeElement.innerText),\n this.focusedIndex + 1\n );\n }\n\n focusItem() {\n const itemToBeFocused = this.kirbyItems.get(this.focusedIndex);\n const ionItem = itemToBeFocused.nativeElement.querySelector('ion-item');\n\n // Look for interactive element within ion-item like toggle or checkbox and set focus if found\n const firstInteractiveElementWithinItem = this.getFirstInteractiveElement(ionItem);\n if (firstInteractiveElementWithinItem) {\n firstInteractiveElementWithinItem.focus();\n } else {\n this.focusSelectableItem(ionItem);\n }\n }\n\n private focusSelectableItem(ionItem: HTMLIonItemElement) {\n const nativeButton: HTMLButtonElement =\n ionItem.shadowRoot.querySelector('button:not([disabled])');\n nativeButton?.focus();\n }\n\n getTriggerButton(): HTMLButtonElement {\n return (this.userProvidedButton ?? this.defaultButtonElement).nativeElement;\n }\n\n public ngAfterViewInit(): void {\n this.cdr.detectChanges(); // Sets the updated reference for kirby-floating\n\n this.zone.runOutsideAngular(() => {\n /*\n * Listen for ionScroll outside of Angular's change detection to\n * avoid a change detection cycle for every scroll-event fired\n */\n this.disposeIonScrollListener = this.renderer.listen(document, 'ionScroll', () => {\n this.floatingMenu.hide();\n });\n });\n this.forwardAriaLabelToTriggerButton();\n }\n\n ngAfterContentInit(): void {\n this.setUserProvidedButtonAriaAttributes();\n this.kirbyItemComponents.changes\n .pipe(startWith(null), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.setRoleAttributeForAllItems();\n this.ensureSelectableItems();\n });\n }\n\n private forwardAriaLabelToTriggerButton() {\n forwardAttributes(\n this.elementRef.nativeElement,\n this._attributesToForward,\n this.renderer,\n this.getTriggerButton()\n );\n }\n\n ensureSelectableItems() {\n this.kirbyItemComponents.forEach((itemComponent) => {\n if (itemComponent.selectable === undefined) {\n itemComponent.selectable = true;\n }\n });\n }\n\n private setRoleAttributeForAllItems() {\n this.kirbyItems.forEach((item) => {\n this.setRoleOnNativeControl(item.nativeElement);\n });\n }\n\n private async setRoleOnNativeControl(item: HTMLElement) {\n const ionItem = item.querySelector<HTMLIonItemElement>('ion-item');\n if (!ionItem) return;\n\n await new Promise<void>((resolve) => componentOnReady(ionItem, resolve));\n\n const checkableInput = ionItem\n .querySelector('ion-toggle, ion-checkbox')\n ?.shadowRoot?.querySelector('input');\n const button = ionItem.shadowRoot?.querySelector('button');\n const nativeControl = checkableInput ?? button;\n\n if (!nativeControl) return;\n this.renderer.setAttribute(\n nativeControl,\n 'role',\n checkableInput ? 'menuitemcheckbox' : 'menuitem'\n );\n }\n\n menuVisibilityChanged(menuIsShown: boolean) {\n this.floatingMenuIsShown = menuIsShown;\n this.renderer.setAttribute(this.getTriggerButton(), 'aria-expanded', menuIsShown.toString());\n if (!menuIsShown) {\n this.focusedIndex = -1;\n this.getTriggerButton().focus();\n }\n }\n\n private setUserProvidedButtonAriaAttributes() {\n if (!this.userProvidedButton) return;\n\n const button = this.userProvidedButton.nativeElement;\n if (button.id) {\n this.triggerButtonId = button.id;\n } else {\n this.renderer.setAttribute(button, 'id', this.triggerButtonId);\n }\n if (!button.getAttribute('aria-controls')) {\n this.renderer.setAttribute(button, 'aria-controls', this.menuId);\n }\n if (!button.getAttribute('aria-haspopup')) {\n this.renderer.setAttribute(button, 'aria-haspopup', 'true');\n }\n if (!button.getAttribute('aria-label')) {\n this.renderer.setAttribute(button, 'aria-label', this.translations.get('more'));\n }\n }\n\n ngOnDestroy(): void {\n this.disposeIonScrollListener?.();\n }\n}\n","<div class=\"button-container\" #buttonContainer>\n <ng-content select=\"button[kirby-button]\"></ng-content>\n @if (!userProvidedButton) {\n <button\n #defaultButton\n [id]=\"triggerButtonId\"\n kirby-button\n [size]=\"buttonSize\"\n [disabled]=\"isDisabled\"\n type=\"button\"\n [attentionLevel]=\"attentionLevel\"\n aria-haspopup=\"true\"\n [attr.aria-controls]=\"menuId\"\n aria-expanded=\"false\"\n [attr.aria-label]=\"translations.get('more')\"\n >\n <kirby-icon [name]=\"'more'\"></kirby-icon>\n </button>\n }\n</div>\n<kirby-card\n [id]=\"menuId\"\n kirbyFloating\n [strategy]=\"'fixed'\"\n [reference]=\"buttonContainerElement\"\n [isDisabled]=\"isDisabled\"\n [triggers]=\"triggers\"\n [placement]=\"placement\"\n [DOMPortalOutlet]=\"DOMPortalOutlet\"\n [portalOutletConfig]=\"portalOutletConfig\"\n [closeOnBackdrop]=\"closeOnBackdrop\"\n [closeOnEscapeKey]=\"closeOnEscapeKey\"\n [closeOnSelect]=\"closeOnSelect\"\n [autoPlacement]=\"autoPlacement\"\n [shift]=\"shift\"\n [style.minWidth]=\"minWidth ? minWidth + 'px' : null\"\n class=\"menu-popover\"\n (keydown)=\"_onKeydown($event)\"\n (displayChanged)=\"menuVisibilityChanged($event)\"\n role=\"menu\"\n [attr.aria-labelledby]=\"triggerButtonId\"\n>\n <ng-content select=\"kirby-item\"></ng-content>\n</kirby-card>\n"],"mappings":";;;;;;;;;;;;;AA4CA,IAAa,gBAAb,MAAa,cAAa;CAKxB,YACU,KACA,YACA,MACA,UACD,cACC,YAAsB;EALtB,KAAA,MAAA;EACA,KAAA,aAAA;EACA,KAAA,OAAA;EACA,KAAA,WAAA;EACD,KAAA,eAAA;EACC,KAAA,aAAA;EAVD,KAAA,SAAiB,kBAAkB,SAAS,YAAY,CAAC,CAAC,KAAI;EACvE,KAAA,kBAA0B,kBAAkB,SAAS,2BAA2B,CAAC,CAAC,KAAI;EAC9E,KAAA,uBAAuB,CAAC,cAAc,iBAAiB;EAW/C,KAAA,aAAsB;EAEtB,KAAA,aAAyB,WAAW;EAEpC,KAAA,YAAuB;EAEvB,KAAA,iBAAiC;EAEjC,KAAA,WAAgC,CAAC,OAAO;EAExC,KAAA,kBAA+B,KAAK,WAAW,cAAc,cAAc;EAI3E,KAAA,gBAAyB;EAEzB,KAAA,gBAAyB;EAEzB,KAAA,mBAA4B;EAE5B,KAAA,kBAA2B;EAE3B,KAAA,QAAiB;EA0B1B,KAAA,sBAA+B;EAC/B,KAAA,iBAAwC;EAEvC,KAAA,eAAe;CArDpB;CAwDH,WAAW,OAAoB;EAC7B,IAAI,KAAK,WAAW,WAAW,GAAG;GAChC,QAAQ,KAAK,oCAAoC;GACjD;EACF;EACA,IAAI,KAAK,qBACP,KAAK,2BAA2B,KAAK;OAErC,KAAK,2BAA2B,KAAK;CAEzC;CAGA,WAAQ;EACN,IAAI,CAAC,KAAK,qBAAqB;EAC/B,KAAK,eAAe;EACpB,KAAK,UAAS;CAChB;CAEQ,0CAA0C,OAAoB;EACpE,MAAM,yBAAwB;EAC9B,MAAM,eAAc;CACtB;CAEQ,2BAA2B,IAAsB;EACvD,OAAO,GAAG,cACR,qFAAqF;CAEzF;CAEQ,2BAA2B,OAAoB;EAErD,QADY,MAAM,KAClB;GACE,KAAK;GACL,KAAK;GACL,KAAK;IACH,KAAK,0CAA0C,KAAK;IACpD,KAAK,eAAe;IACpB,KAAK,aAAa,KAAI;IACtB,KAAK,UAAS;IACd;GACF,KAAK;IACH,KAAK,0CAA0C,KAAK;IACpD,KAAK,eAAe,KAAK,WAAW,SAAS;IAC7C,KAAK,aAAa,KAAI;IACtB,KAAK,UAAS;EAElB;CACF;CAEQ,2BAA2B,OAAoB;EACrD,MAAM,MAAM,MAAM;EAElB,QAAQ,KAAR;GACE,KAAK;IACH,KAAK,0CAA0C,KAAK;IACpD,IAAI,KAAK,iBAAiB,KAAK,WAAW,SAAS,GACjD,KAAK,eAAe;SAEpB,KAAK;IAEP,KAAK,UAAS;IACd;GACF,KAAK;IACH,KAAK,0CAA0C,KAAK;IACpD,IAAI,KAAK,iBAAiB,GACxB,KAAK,eAAe,KAAK,WAAW,SAAS;SAE7C,KAAK;IAEP,KAAK,UAAS;IACd;GACF,KAAK;IACH,KAAK,0CAA0C,KAAK;IACpD,IAAI,KAAK,eAAe,GAAG;KACzB,KAAK,eAAe;KACpB,KAAK,UAAS;IAChB;IACA;GAEF,KAAK;IACH,KAAK,0CAA0C,KAAK;IACpD,IAAI,KAAK,eAAe,KAAK,WAAW,SAAS,GAAG;KAClD,KAAK,eAAe,KAAK,WAAW,SAAS;KAC7C,KAAK,UAAS;IAChB;IACA;GAEF,KAAK;IACH,KAAK,0CAA0C,KAAK;IACpD,IAAI,KAAK,kBACP,KAAK,aAAa,KAAI;IAExB;GACF,KAAK;IACH,KAAK,aAAa,KAAI;IACtB;GACF,SACE,IAAI,mBAAmB,qBAAqB,GAAG,GAAG;IAChD,KAAK,0CAA0C,KAAK;IACpD,MAAM,iBAAiB,KAAK,+BAA+B,GAAG;IAC9D,IAAI,iBAAiB,IAAI;KACvB,KAAK,eAAe;KACpB,KAAK,UAAS;IAChB;GACF;EAEJ;CACF;CAEQ,+BAA+B,MAAY;EACjD,OAAO,mBAAmB,mCACxB,MACA,KAAK,WAAW,KAAK,SAAS,KAAK,cAAc,SAAS,GAC1D,KAAK,eAAe,CAAC;CAEzB;CAEA,YAAS;EAEP,MAAM,UADkB,KAAK,WAAW,IAAI,KAAK,YACjC,CAAA,CAAgB,cAAc,cAAc,UAAU;EAGtE,MAAM,oCAAoC,KAAK,2BAA2B,OAAO;EACjF,IAAI,mCACF,kCAAkC,MAAK;OAEvC,KAAK,oBAAoB,OAAO;CAEpC;CAEQ,oBAAoB,SAA2B;EAGrD,AADE,QAAQ,WAAW,cAAc,wBACnC,CAAA,EAAc,MAAK;CACrB;CAEA,mBAAgB;EACd,QAAQ,KAAK,sBAAsB,KAAK,qBAAA,CAAsB;CAChE;CAEO,kBAAe;EACpB,KAAK,IAAI,cAAa;EAEtB,KAAK,KAAK,wBAAuB;GAK/B,KAAK,2BAA2B,KAAK,SAAS,OAAO,UAAU,mBAAkB;IAC/E,KAAK,aAAa,KAAI;GACxB,CAAC;EACH,CAAC;EACD,KAAK,gCAA+B;CACtC;CAEA,qBAAkB;EAChB,KAAK,oCAAmC;EACxC,KAAK,oBAAoB,QACtB,KAAK,UAAU,IAAI,GAAG,mBAAmB,KAAK,UAAU,CAAC,CAAC,CAC1D,gBAAe;GACd,KAAK,4BAA2B;GAChC,KAAK,sBAAqB;EAC5B,CAAC;CACL;CAEQ,kCAA+B;EACrC,kBACE,KAAK,WAAW,eAChB,KAAK,sBACL,KAAK,UACL,KAAK,iBAAgB,CAAE;CAE3B;CAEA,wBAAqB;EACnB,KAAK,oBAAoB,SAAS,kBAAiB;GACjD,IAAI,cAAc,eAAe,QAC/B,cAAc,aAAa;EAE/B,CAAC;CACH;CAEQ,8BAA2B;EACjC,KAAK,WAAW,SAAS,SAAQ;GAC/B,KAAK,uBAAuB,KAAK,aAAa;EAChD,CAAC;CACH;CAEQ,MAAM,uBAAuB,MAAiB;EACpD,MAAM,UAAU,KAAK,cAAkC,UAAU;EACjE,IAAI,CAAC,SAAS;EAEd,MAAM,IAAI,SAAe,YAAY,iBAAiB,SAAS,OAAO,CAAC;EAEvE,MAAM,iBAAiB,QACpB,cAAc,0BAA0B,CAAC,EACxC,YAAY,cAAc,OAAO;EACrC,MAAM,SAAS,QAAQ,YAAY,cAAc,QAAQ;EACzD,MAAM,gBAAgB,kBAAkB;EAExC,IAAI,CAAC,eAAe;EACpB,KAAK,SAAS,aACZ,eACA,QACA,iBAAiB,qBAAqB,UAAU;CAEpD;CAEA,sBAAsB,aAAoB;EACxC,KAAK,sBAAsB;EAC3B,KAAK,SAAS,aAAa,KAAK,iBAAgB,GAAI,iBAAiB,YAAY,SAAQ,CAAE;EAC3F,IAAI,CAAC,aAAa;GAChB,KAAK,eAAe;GACpB,KAAK,iBAAgB,CAAE,CAAC,MAAK;EAC/B;CACF;CAEQ,sCAAmC;EACzC,IAAI,CAAC,KAAK,oBAAoB;EAE9B,MAAM,SAAS,KAAK,mBAAmB;EACvC,IAAI,OAAO,IACT,KAAK,kBAAkB,OAAO;OAE9B,KAAK,SAAS,aAAa,QAAQ,MAAM,KAAK,eAAe;EAE/D,IAAI,CAAC,OAAO,aAAa,eAAe,GACtC,KAAK,SAAS,aAAa,QAAQ,iBAAiB,KAAK,MAAM;EAEjE,IAAI,CAAC,OAAO,aAAa,eAAe,GACtC,KAAK,SAAS,aAAa,QAAQ,iBAAiB,MAAM;EAE5D,IAAI,CAAC,OAAO,aAAa,YAAY,GACnC,KAAK,SAAS,aAAa,QAAQ,cAAc,KAAK,aAAa,IAAI,MAAM,CAAC;CAElF;CAEA,cAAW;EACT,KAAK,2BAA0B;CACjC;CApTW;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAa,MAAA;IAAA,EAAA,OAAA,GAAA,kBAAA;IAAA,EAAA,OAAA,GAAA,WAAA;IAAA,EAAA,OAAA,GAAA,OAAA;IAAA,EAAA,OAAA,GAAA,UAAA;IAAA,EAAA,OAAA,GAAA,mBAAA;IAAA,EAAA,OAAA,GAAA,WAAA;GAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAAb;EAAA,KAAA,OAAA,GAAA,qBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,MAAA;GAAa,cAAA;GAAA,UAAA;GAAA,QAAA;IAAA,YAAA;IAAA,YAAA;IAAA,WAAA;IAAA,gBAAA;IAAA,UAAA;IAAA,iBAAA;IAAA,oBAAA;IAAA,eAAA;IAAA,eAAA;IAAA,kBAAA;IAAA,iBAAA;IAAA,OAAA;IAAA,UAAA;GAAA;GAAA,MAAA,EAAA,WAAA;IAAA,WAAA;IAAA,SAAA;GAAA,EAAA;GAAA,SAAA;IAAA;KAAA,cAAA;KAAA,OAAA;KAAA,WAiDV;KAAe,aAAA;KAAA,MAAU;IAAU;IAAA;KAAA,cAAA;KAAA,WAOhC;KAAa,MAAU;IAAU;IAAA;KAAA,cAAA;KAAA,WAIjC;IAAa;GAAA;GAAA,aAAA;IAAA;KAAA,cAAA;KAAA,OAAA;KAAA,WAAA,CAAA,iBAAA;KAAA,aAAA;KAAA,MAjBQ;IAAU;IAAA;KAAA,cAAA;KAAA,OAAA;KAAA,WAAA,CAAA,eAAA;KAAA,aAAA;KAAA,MAGZ;IAAU;IAAA;KAAA,cAAA;KAAA,OAAA;KAAA,WAOnC;KAAiB,aAAA;IAAA;GAAA;GAAA,UAAA;GAAA,UCjG9B;GA4CA,QAAA,CAAA,mXAAA;GAAA,cAAA;IAAA;KAAA,MAAA;KAAA,MDLY;KAAe,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAE;KAAiB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA,CAAA,gBAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAE;KAAa,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAE;KAAa,UAAA;KAAA,QAAA,CAAA,QAAA,MAAA;IAAA;GAAA;GAAA,iBAAA,GAAA,wBAAA;EAAA,CAAA;CAAA;;AAK/D,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAa,YAAA,CAAA;EAPzB,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAY,SACb;IAAC;IAAiB;IAAmB;IAAe;GAAa;GAAC,iBAG1D,wBAAwB;GAAM,UAAA;GAAA,QAAA,CAAA,mXAAA;EAAA,CAAA;;;;;;;;;;;EAgB9C,YAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EAEA,YAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EAEA,WAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EAEA,gBAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EAEA,UAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EAEA,iBAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EAEA,oBAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EAEA,eAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EAEA,eAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EAEA,kBAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EAEA,iBAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EAEA,OAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EAKA,UAAA,CAAA,EAAA,MAAA,MAAA,CAAA;;GAEA,MAAA;GAAU,MAAA,CAAA,mBAAmB,EAAE,MAAM,WAAU,CAAE;;;GAGjD,MAAA;GAAU,MAAA,CAAA,iBAAiB,EAAE,MAAM,WAAU,CAAE;;;GAG/C,MAAA;GAAa,MAAA,CAAA,iBAAiB,EAAE,MAAM,WAAU,CAAE;;;GAIlD,MAAA;GAAU,MAAA,CAAA,iBAAiB;;;GAG3B,MAAA;GAAgB,MAAA,CAAA,eAAe,EAAE,MAAM,WAAU,CAAE;;;GAInD,MAAA;GAAgB,MAAA,CAAA,aAAa;;;GAO7B,MAAA;GAAa,MAAA,CAAA,WAAW,CAAC,QAAQ,CAAC;;;GAalC,MAAA;GAAa,MAAA,CAAA,OAAO"}