@kirbydesign/designsystem 12.0.0-dev-67d5287 → 12.0.0-dev-286cdc0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/kirbydesign-designsystem-accordion.mjs +12 -12
- package/fesm2022/kirbydesign-designsystem-accordion.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-action-group.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-avatar.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-avatar.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-badge.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-badge.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-button.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-button.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-calendar.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-calendar.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-card.mjs +24 -24
- package/fesm2022/kirbydesign-designsystem-card.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-chart.mjs +22 -22
- package/fesm2022/kirbydesign-designsystem-checkbox.mjs +14 -6
- package/fesm2022/kirbydesign-designsystem-checkbox.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-data-table.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-divider.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-divider.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-dropdown.mjs +10 -10
- package/fesm2022/kirbydesign-designsystem-empty-state.mjs +19 -8
- package/fesm2022/kirbydesign-designsystem-empty-state.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-fab-sheet.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-flag.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-flag.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-form-field.mjs +32 -32
- package/fesm2022/kirbydesign-designsystem-form-field.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-gesture.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-header.mjs +19 -19
- package/fesm2022/kirbydesign-designsystem-helpers.mjs +9 -9
- package/fesm2022/kirbydesign-designsystem-icon.mjs +10 -10
- package/fesm2022/kirbydesign-designsystem-item-group.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-item-sliding.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-item.mjs +12 -12
- package/fesm2022/kirbydesign-designsystem-item.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-kirby-app.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-list.mjs +49 -46
- package/fesm2022/kirbydesign-designsystem-list.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs +8 -8
- package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-menu.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-menu.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-modal.mjs +59 -50
- package/fesm2022/kirbydesign-designsystem-modal.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-page.mjs +69 -48
- package/fesm2022/kirbydesign-designsystem-page.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-popover.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-progress-circle.mjs +6 -6
- package/fesm2022/kirbydesign-designsystem-radio.mjs +12 -12
- package/fesm2022/kirbydesign-designsystem-radio.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-range.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-range.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-reorder-list.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-reorder-list.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-router-outlet.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-section-header.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-segmented-control.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-segmented-control.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-shared-floating.mjs +16 -7
- package/fesm2022/kirbydesign-designsystem-shared-floating.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-shared-portal.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-shared.mjs +21 -21
- package/fesm2022/kirbydesign-designsystem-slide-button.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-slide.mjs +13 -13
- package/fesm2022/kirbydesign-designsystem-spinner.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs +12 -12
- package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-tabs.mjs +15 -15
- package/fesm2022/kirbydesign-designsystem-tabs.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-testing-base.mjs +305 -303
- package/fesm2022/kirbydesign-designsystem-testing-base.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-testing-jasmine.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-testing-jest.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-testing.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-toast.mjs +6 -6
- package/fesm2022/kirbydesign-designsystem-toggle-button.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-toggle.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-toggle.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-types.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem.mjs +10 -10
- package/package.json +2 -2
- package/types/kirbydesign-designsystem-card.d.ts +2 -2
- package/types/kirbydesign-designsystem-card.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-checkbox.d.ts +7 -1
- package/types/kirbydesign-designsystem-checkbox.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-empty-state.d.ts +11 -0
- package/types/kirbydesign-designsystem-empty-state.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-list.d.ts +5 -0
- package/types/kirbydesign-designsystem-list.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-modal.d.ts +2 -1
- package/types/kirbydesign-designsystem-modal.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-page.d.ts +4 -0
- package/types/kirbydesign-designsystem-page.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-shared-floating.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-testing-base.d.ts +5 -0
- package/types/kirbydesign-designsystem-testing-base.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kirbydesign-designsystem-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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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-
|
|
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.
|
|
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-
|
|
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":";;;;;;AAaA,IAAa,wBAAb,MAAa,sBAAqB;CAIhC,YACU,mBACA,gBACA,qBAAwC;EAFxC,KAAA,oBAAA;EACA,KAAA,iBAAA;EACA,KAAA,sBAAA;EANF,KAAA,aAA2C;EAC3C,KAAA,aAAoD;CAMzD;CAEI,MAAM,mBACX,eAAwB,MACxB,cAAuB,OAAK;EAE5B,IAAI,CAAC,KAAK,YAAY;GACpB,MAAM,aAAa,CAAC,uBAAuB;GAE3C,IAAI,aACF,WAAW,KAAK,4BAA4B;GAG9C,KAAK,aAAa,MAAM,KAAK,kBAAkB,OAAO;IACpD,UAAU;IACV,UAAU;IACV,SAAS;IACT,cAAc,gBAAgB;IAC9B,SAAS;GACV,CAAA;GAED,MAAM,iBAAiB,KAAK,WAAW,cAAc,kBAAkB;GACvE,MAAM,eAAe,SAAS,cAAc,eAAe;GAC3D,MAAM,eAAe,gBAAgB,kBAAkB;IACrD,qBAAqB,KAAK;IAC1B,aAAa;GACd,CAAA;GACD,KAAK,aAAa;GAClB,KAAK,eAAe,WAAW,aAAa,QAAQ;GACpD,eAAe,YAAY,YAAY;GAEvC,MAAM,KAAK,WAAW,QAAO;EAC/B;CACF;CAEO,MAAM,qBAAkB;EAC7B,IAAI,KAAK,YACP,IAAI;GACF,MAAM,KAAK,WAAW,QAAO;EAC/B,UAAU;GACR,KAAK,eAAc;GACnB,KAAK,aAAa;EACpB;CAEJ;CAEQ,iBAAc;EACpB,IAAI,KAAK,YAAY;GACnB,KAAK,eAAe,WAAW,KAAK,WAAW,QAAQ;GACvD,KAAK,WAAW,QAAO;GACvB,KAAK,aAAa;EACpB;CACF;CA5DW;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAqB,MAAA;IAAA,EAAA,OAAA,KAAA,kBAAA;IAAA,EAAA,OAAA,GAAA,eAAA;IAAA,EAAA,OAAA,GAAA,oBAAA;GAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAArB;EAAA,KAAA,QAAA,GAAA,sBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAqB,YAFpB;EAAM,CAAA;CAAA;;AAEP,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAqB,YAAA,CAAA;EAHjC,MAAA;EAAW,MAAA,CAAA,EACV,YAAY,OACb,CAAA;;;;;;;;ACDD,IAAa,0BAAb,MAAa,wBAAuB;CAPpC,cAAA;EAQkB,KAAA,YAAY;EACZ,KAAA,eAAe;EACf,KAAA,cAAc;CAC/B;CAJY;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAuB,MAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAAvB;EAAA,KAAA,OAAA,GAAA,qBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,MAAA;GAAuB,cAAA;GAAA,UAAA;GAAA,QAAA;IAAA,WAAA;IAAA,cAAA;IAAA,aAAA;GAAA;GAAA,UAAA;GAAA,UCXpC;GAgBA,QAAA,CAAA
|
|
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":";;;;;;AAaA,IAAa,wBAAb,MAAa,sBAAqB;CAIhC,YACU,mBACA,gBACA,qBAAwC;EAFxC,KAAA,oBAAA;EACA,KAAA,iBAAA;EACA,KAAA,sBAAA;EANF,KAAA,aAA2C;EAC3C,KAAA,aAAoD;CAMzD;CAEI,MAAM,mBACX,eAAwB,MACxB,cAAuB,OAAK;EAE5B,IAAI,CAAC,KAAK,YAAY;GACpB,MAAM,aAAa,CAAC,uBAAuB;GAE3C,IAAI,aACF,WAAW,KAAK,4BAA4B;GAG9C,KAAK,aAAa,MAAM,KAAK,kBAAkB,OAAO;IACpD,UAAU;IACV,UAAU;IACV,SAAS;IACT,cAAc,gBAAgB;IAC9B,SAAS;GACV,CAAA;GAED,MAAM,iBAAiB,KAAK,WAAW,cAAc,kBAAkB;GACvE,MAAM,eAAe,SAAS,cAAc,eAAe;GAC3D,MAAM,eAAe,gBAAgB,kBAAkB;IACrD,qBAAqB,KAAK;IAC1B,aAAa;GACd,CAAA;GACD,KAAK,aAAa;GAClB,KAAK,eAAe,WAAW,aAAa,QAAQ;GACpD,eAAe,YAAY,YAAY;GAEvC,MAAM,KAAK,WAAW,QAAO;EAC/B;CACF;CAEO,MAAM,qBAAkB;EAC7B,IAAI,KAAK,YACP,IAAI;GACF,MAAM,KAAK,WAAW,QAAO;EAC/B,UAAU;GACR,KAAK,eAAc;GACnB,KAAK,aAAa;EACpB;CAEJ;CAEQ,iBAAc;EACpB,IAAI,KAAK,YAAY;GACnB,KAAK,eAAe,WAAW,KAAK,WAAW,QAAQ;GACvD,KAAK,WAAW,QAAO;GACvB,KAAK,aAAa;EACpB;CACF;CA5DW;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAqB,MAAA;IAAA,EAAA,OAAA,KAAA,kBAAA;IAAA,EAAA,OAAA,GAAA,eAAA;IAAA,EAAA,OAAA,GAAA,oBAAA;GAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAArB;EAAA,KAAA,QAAA,GAAA,sBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAqB,YAFpB;EAAM,CAAA;CAAA;;AAEP,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAqB,YAAA,CAAA;EAHjC,MAAA;EAAW,MAAA,CAAA,EACV,YAAY,OACb,CAAA;;;;;;;;ACDD,IAAa,0BAAb,MAAa,wBAAuB;CAPpC,cAAA;EAQkB,KAAA,YAAY;EACZ,KAAA,eAAe;EACf,KAAA,cAAc;CAC/B;CAJY;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAuB,MAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAAvB;EAAA,KAAA,OAAA,GAAA,qBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,MAAA;GAAuB,cAAA;GAAA,UAAA;GAAA,QAAA;IAAA,WAAA;IAAA,cAAA;IAAA,aAAA;GAAA;GAAA,UAAA;GAAA,UCXpC;GAgBA,QAAA,CAAA,q8BAAA;GAAA,cAAA;IAAA;KAAA,MAAA;KAAA,MDXY;KAAgB,UAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAE;IAAY;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,QAAA,CAAA,SAAA,SAAA;IAAA;GAAA;GAAA,iBAAA,GAAA,wBAAA;EAAA,CAAA;CAAA;;AAM7B,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAuB,YAAA,CAAA;EAPnC,MAAA;EACU,MAAA,CAAA;GAAA,SAAA,CAAC,kBAAkB,YAAY;GAAC,UAC/B;GAAuB,iBAGhB,wBAAwB;GAAM,UAAA;GAAA,QAAA,CAAA,q8BAAA;EAAA,CAAA;;;EAG9C,WAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EACA,cAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EACA,aAAA,CAAA,EAAA,MAAA,MAAA,CAAA"}
|
|
@@ -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.
|
|
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.
|
|
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.
|
|
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":"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"}
|