@kirbydesign/designsystem 8.7.0 → 8.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/action-group/action-group.component.d.ts +3 -4
- package/data-table/table-row/table-row.component.d.ts +2 -0
- package/dropdown/dropdown.component.d.ts +1 -2
- package/esm2020/action-group/action-group.component.mjs +14 -17
- package/esm2020/button/button.component.mjs +3 -3
- package/esm2020/calendar/calendar.component.mjs +2 -2
- package/esm2020/data-table/table-row/table-row.component.mjs +9 -1
- package/esm2020/dropdown/dropdown.component.mjs +4 -15
- package/esm2020/header/header.component.mjs +5 -3
- package/esm2020/menu/menu.component.mjs +23 -12
- package/esm2020/page/page.component.mjs +18 -7
- package/esm2020/router-outlet/router-outlet.component.mjs +7 -3
- package/esm2020/shared/floating/floating.directive.mjs +2 -2
- package/esm2020/slide/slides.component.mjs +14 -7
- package/esm2020/testing-base/lib/components/mock.dropdown.component.mjs +2 -4
- package/esm2020/types/event-listener-dispose-fn.mjs +2 -0
- package/esm2020/types/public_api.mjs +2 -1
- package/fesm2015/kirbydesign-designsystem-action-group.mjs +13 -16
- package/fesm2015/kirbydesign-designsystem-action-group.mjs.map +1 -1
- package/fesm2015/kirbydesign-designsystem-button.mjs +2 -2
- package/fesm2015/kirbydesign-designsystem-button.mjs.map +1 -1
- package/fesm2015/kirbydesign-designsystem-calendar.mjs +1 -1
- package/fesm2015/kirbydesign-designsystem-calendar.mjs.map +1 -1
- package/fesm2015/kirbydesign-designsystem-data-table.mjs +8 -0
- package/fesm2015/kirbydesign-designsystem-data-table.mjs.map +1 -1
- package/fesm2015/kirbydesign-designsystem-dropdown.mjs +3 -14
- package/fesm2015/kirbydesign-designsystem-dropdown.mjs.map +1 -1
- package/fesm2015/kirbydesign-designsystem-header.mjs +4 -2
- package/fesm2015/kirbydesign-designsystem-header.mjs.map +1 -1
- package/fesm2015/kirbydesign-designsystem-menu.mjs +23 -11
- package/fesm2015/kirbydesign-designsystem-menu.mjs.map +1 -1
- package/fesm2015/kirbydesign-designsystem-page.mjs +17 -6
- package/fesm2015/kirbydesign-designsystem-page.mjs.map +1 -1
- package/fesm2015/kirbydesign-designsystem-router-outlet.mjs +8 -5
- package/fesm2015/kirbydesign-designsystem-router-outlet.mjs.map +1 -1
- package/fesm2015/kirbydesign-designsystem-shared-floating.mjs +1 -1
- package/fesm2015/kirbydesign-designsystem-shared-floating.mjs.map +1 -1
- package/fesm2015/kirbydesign-designsystem-slide.mjs +13 -5
- package/fesm2015/kirbydesign-designsystem-slide.mjs.map +1 -1
- package/fesm2015/kirbydesign-designsystem-testing-base.mjs +1 -3
- package/fesm2015/kirbydesign-designsystem-testing-base.mjs.map +1 -1
- package/fesm2020/kirbydesign-designsystem-action-group.mjs +13 -16
- package/fesm2020/kirbydesign-designsystem-action-group.mjs.map +1 -1
- package/fesm2020/kirbydesign-designsystem-button.mjs +2 -2
- package/fesm2020/kirbydesign-designsystem-button.mjs.map +1 -1
- package/fesm2020/kirbydesign-designsystem-calendar.mjs +1 -1
- package/fesm2020/kirbydesign-designsystem-calendar.mjs.map +1 -1
- package/fesm2020/kirbydesign-designsystem-data-table.mjs +8 -0
- package/fesm2020/kirbydesign-designsystem-data-table.mjs.map +1 -1
- package/fesm2020/kirbydesign-designsystem-dropdown.mjs +3 -14
- package/fesm2020/kirbydesign-designsystem-dropdown.mjs.map +1 -1
- package/fesm2020/kirbydesign-designsystem-header.mjs +4 -2
- package/fesm2020/kirbydesign-designsystem-header.mjs.map +1 -1
- package/fesm2020/kirbydesign-designsystem-menu.mjs +22 -11
- package/fesm2020/kirbydesign-designsystem-menu.mjs.map +1 -1
- package/fesm2020/kirbydesign-designsystem-page.mjs +17 -6
- package/fesm2020/kirbydesign-designsystem-page.mjs.map +1 -1
- package/fesm2020/kirbydesign-designsystem-router-outlet.mjs +8 -5
- package/fesm2020/kirbydesign-designsystem-router-outlet.mjs.map +1 -1
- package/fesm2020/kirbydesign-designsystem-shared-floating.mjs +1 -1
- package/fesm2020/kirbydesign-designsystem-shared-floating.mjs.map +1 -1
- package/fesm2020/kirbydesign-designsystem-slide.mjs +12 -5
- package/fesm2020/kirbydesign-designsystem-slide.mjs.map +1 -1
- package/fesm2020/kirbydesign-designsystem-testing-base.mjs +1 -3
- package/fesm2020/kirbydesign-designsystem-testing-base.mjs.map +1 -1
- package/header/header.component.d.ts +2 -1
- package/menu/menu.component.d.ts +9 -5
- package/package.json +2 -2
- package/page/page.component.d.ts +3 -3
- package/router-outlet/router-outlet.component.d.ts +1 -0
- package/slide/slides.component.d.ts +5 -3
- package/testing-base/lib/components/mock.dropdown.component.d.ts +1 -2
- package/types/event-listener-dispose-fn.d.ts +1 -0
- package/types/public_api.d.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kirbydesign-designsystem-dropdown.mjs","sources":["../../../../libs/designsystem/dropdown/src/dropdown.types.ts","../../../../libs/designsystem/dropdown/src/keyboard-handler.service.ts","../../../../libs/designsystem/dropdown/src/dropdown.component.ts","../../../../libs/designsystem/dropdown/src/dropdown.component.html","../../../../libs/designsystem/dropdown/src/dropdown.module.ts","../../../../libs/designsystem/dropdown/src/kirbydesign-designsystem-dropdown.ts"],"sourcesContent":["export enum OpenState {\n closed,\n opening,\n open,\n}\n\nexport enum VerticalDirection {\n up,\n down,\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class KeyboardHandlerService {\n handle(event: KeyboardEvent, selectedIndex: number, maxIndex: number, cyclicIndex = false) {\n let newIndex = -1;\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowLeft':\n if (selectedIndex === 0 && cyclicIndex) {\n newIndex = maxIndex;\n } else {\n // Select previous item:\n newIndex = selectedIndex - 1;\n }\n break;\n case 'ArrowDown':\n case 'ArrowRight':\n if (selectedIndex === undefined || (selectedIndex === maxIndex && cyclicIndex)) {\n // None selected, select first item:\n newIndex = 0;\n } else if (selectedIndex < maxIndex) {\n // Select next item:\n newIndex = selectedIndex + 1;\n }\n break;\n case 'Home':\n // Select first item:\n newIndex = 0;\n break;\n case 'End':\n // Select last item:\n newIndex = maxIndex;\n break;\n default:\n break;\n }\n return newIndex;\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n Output,\n QueryList,\n Renderer2,\n RendererStyleFlags2,\n TemplateRef,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CardComponent } from '@kirbydesign/designsystem/card';\nimport { DesignTokenHelper } from '@kirbydesign/designsystem/helpers';\nimport { ItemComponent } from '@kirbydesign/designsystem/item';\nimport { ListItemTemplateDirective } from '@kirbydesign/designsystem/list';\nimport { HorizontalDirection, PopoverComponent } from '@kirbydesign/designsystem/popover';\nimport { ButtonComponent } from '@kirbydesign/designsystem/button';\n\nimport { OpenState, VerticalDirection } from './dropdown.types';\nimport { KeyboardHandlerService } from './keyboard-handler.service';\n\n@Component({\n selector: 'kirby-dropdown',\n templateUrl: './dropdown.component.html',\n styleUrls: ['./dropdown.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DropdownComponent),\n multi: true,\n },\n ],\n})\nexport class DropdownComponent implements AfterViewInit, OnDestroy, ControlValueAccessor {\n static readonly OPEN_DELAY_IN_MS = 100;\n private state = OpenState.closed;\n private horizontalDirection: HorizontalDirection | `${HorizontalDirection}` =\n HorizontalDirection.right;\n private verticalDirection: VerticalDirection | `${VerticalDirection}` = VerticalDirection.down;\n\n private _items: string[] | any[] = [];\n get items(): string[] | any[] {\n return this._items;\n }\n\n @Input() set items(value: string[] | any[]) {\n this._items = value;\n this._value = this.items[this.selectedIndex] || null;\n }\n\n private _selectedIndex: number = -1;\n get selectedIndex(): number {\n return this._selectedIndex;\n }\n\n @Input() set selectedIndex(value: number) {\n if (this._selectedIndex != value) {\n this._selectedIndex = value;\n this.focusedIndex = this._selectedIndex;\n this._value = this.items[this.selectedIndex] || null;\n }\n }\n\n // _focusedIndex keeps track of which element has focus and will be selected\n // if it is activated (by pressing ENTER or SPACE key)\n private _focusedIndex: number = -1;\n get focusedIndex(): number {\n return this._focusedIndex;\n }\n\n @Input() set focusedIndex(value: number) {\n if (this._focusedIndex !== value) {\n this._focusedIndex = value;\n this.scrollItemIntoView(this._focusedIndex);\n }\n }\n\n @Input()\n itemTextProperty = 'text';\n\n @Input()\n placeholder = 'Please select:';\n\n @Input() set popout(direction: HorizontalDirection | `${HorizontalDirection}`) {\n this.horizontalDirection = direction || HorizontalDirection.right;\n }\n\n get popout() {\n return this.horizontalDirection;\n }\n\n @Input()\n attentionLevel: '1' | '2' | '3' = '3';\n\n @Input()\n expand?: 'block';\n\n @Input()\n disabled = false;\n\n @HostBinding('attr.disabled')\n get _isDisabled() {\n return this.disabled ? 'disabled' : null;\n }\n\n @HostBinding('class.error')\n @Input()\n hasError: boolean;\n\n @Input()\n size: 'sm' | 'md' = 'md';\n\n @Input()\n tabindex = 0;\n\n @HostBinding('class.with-popover')\n @Input()\n usePopover = false;\n\n /*\n * TEMPORARY MORE-MENU\n * This is an internal and temporary input that allows the dropdown to use the 'more menu'\n * icon\n */\n @HostBinding('class.more-menu')\n @Input()\n _isMoreMenu = false;\n\n @HostBinding('attr.tabindex')\n get _tabindex() {\n return this.disabled ? -1 : this.tabindex;\n }\n\n // Prevent Ionic blur on scroll\n @HostBinding('attr.no-blur')\n get _noBlurOnScroll() {\n return true;\n }\n\n /**\n * Emitted when an item is selected (tap on mobile, click/keypress on web)\n */\n @Output() change: EventEmitter<string | any> = new EventEmitter<string | any>();\n\n private _value: string | any = null;\n get value(): string | any {\n return this._value;\n }\n\n get selectedText(): string {\n return this.getTextFromItem(this.value);\n }\n\n @HostBinding('class.expand')\n get _isBlockLevel() {\n return this.expand === 'block';\n }\n\n @HostBinding('attr.role')\n _role = 'listbox';\n\n @HostBinding('class.is-opening')\n get _isOpening(): boolean {\n return this.state === OpenState.opening;\n }\n\n @HostBinding('class.is-open')\n get isOpen(): boolean {\n return this.state === OpenState.open;\n }\n\n @HostBinding('class.popout-left')\n get _popoutLeft() {\n return this.horizontalDirection === HorizontalDirection.left;\n }\n\n @HostBinding('class.popout-up')\n get _popoutUp() {\n return this.verticalDirection === VerticalDirection.up;\n }\n\n /* The 'clicked' class is applied through Hostbinding to prevent the dropdown from getting a focus ring on click.\n There is a bug that causes the dropdown to get a focus ring on click, if it is the first element that is interacted with\n after the page is loaded. If the user interacts with any other element before, then the dropdown won't get a focus ring.\n See issue: https://github.com/kirbydesign/designsystem/issues/2477.\n\n This solution can potentially be refactored, when popover is not experimental anymore. Then it could be possible \n to close the dropdown when the popover backdrop is clicked, instead of relying on the blur event, which is utilized\n by this line below: this.elementRef.nativeElement.focus(). Right now this forces the blur event to be triggered, when\n clicking outside of the dropdown.\n */\n @HostBinding('class.clicked')\n clicked = false;\n\n @ContentChild(ListItemTemplateDirective, { static: true, read: TemplateRef })\n itemTemplate: TemplateRef<any>;\n @ContentChildren(ListItemTemplateDirective, { read: ElementRef })\n slottedItems: QueryList<ElementRef<HTMLElement>>;\n @ViewChild(CardComponent, { read: ElementRef })\n cardElement: ElementRef<HTMLElement>;\n @ViewChild(PopoverComponent)\n popover?: PopoverComponent;\n @ViewChild(ButtonComponent, { static: true, read: ElementRef })\n buttonElement: ElementRef<HTMLElement>;\n @ViewChildren(ItemComponent, { read: ElementRef })\n kirbyItemsDefault: QueryList<ElementRef<HTMLElement>>;\n\n _kirbyItemsSlotted: QueryList<ElementRef<HTMLElement>>;\n @ContentChildren(ItemComponent, { read: ElementRef })\n set kirbyItemsSlotted(kirbyItems: QueryList<ElementRef<HTMLElement>>) {\n const hasSlottedItems = this.itemClickUnlisten?.length > 0;\n if (hasSlottedItems) {\n this.unlistenAllSlottedItems();\n }\n\n // Setup a click listener for each new slotted items\n kirbyItems.forEach((kirbyItem, index) => {\n this.renderer.setAttribute(kirbyItem.nativeElement, 'role', 'option');\n const unlisten = this.renderer.listen(kirbyItem.nativeElement, 'click', () => {\n this.onItemSelect(index);\n });\n\n this.itemClickUnlisten.push(unlisten);\n });\n\n this._kirbyItemsSlotted = kirbyItems;\n }\n\n get kirbyItemsSlotted(): QueryList<ElementRef<HTMLElement>> {\n return this._kirbyItemsSlotted;\n }\n\n private itemClickUnlisten: (() => void)[] = [];\n private intersectionObserverRef: IntersectionObserver;\n private showDropdownTimeoutId: ReturnType<typeof setTimeout>;\n\n constructor(\n private renderer: Renderer2,\n private elementRef: ElementRef<HTMLElement>,\n private changeDetectorRef: ChangeDetectorRef,\n private keyboardHandlerService: KeyboardHandlerService\n ) {}\n\n onToggle(event: MouseEvent) {\n event.stopPropagation();\n\n this.clicked = true;\n\n if (!this.isOpen) {\n this.elementRef.nativeElement.focus();\n }\n this.toggle();\n }\n\n toggle() {\n if (this.disabled) {\n return;\n }\n this.isOpen ? this.close() : this.open();\n }\n\n onButtonMouseEvent(event: Event) {\n // Prevent button focus;\n event.preventDefault();\n }\n\n /* Utility that makes it easier to set styles on card element\n when using popover*/\n private setPopoverCardStyle(style: string, value: string) {\n if (!this.usePopover) return;\n\n this.renderer.setStyle(\n this.cardElement.nativeElement,\n style,\n value,\n RendererStyleFlags2.DashCase\n );\n }\n\n ngAfterViewInit() {\n if (this.usePopover && this.expand === 'block') {\n const { width } = this.elementRef.nativeElement.getBoundingClientRect();\n this.setPopoverCardStyle('--kirby-card-width', `${width}px`);\n this.setPopoverCardStyle('max-width', 'initial');\n this.setPopoverCardStyle('min-width', 'initial');\n }\n this.initializeAlignment();\n }\n\n private initializeAlignment() {\n if (this.usePopover) return;\n if (!this.intersectionObserverRef) {\n // Get the design token size of the button. In the button stylesheet a medium button height is utils.size(xl)\n // and a small button height is utils.size(\"l\")\n const designTokenSizeHeight = this.size === 'md' ? 'xl' : 'l';\n\n // Setting the rootMargin equal to the height of the button\n // allows the Intersection Observer Callback to be called\n // even if the dropdown button is intersecting with the viewport\n const options = {\n rootMargin: DesignTokenHelper.size(designTokenSizeHeight),\n };\n const callback: IntersectionObserverCallback = (entries) => {\n // Only apply alignment when opening:\n if (this.state !== OpenState.opening) {\n return;\n }\n\n // Cancel any pending timer to show dropdown:\n clearTimeout(this.showDropdownTimeoutId);\n const entry = entries[0];\n const isVisible = entry.boundingClientRect.width > 0;\n if (isVisible && entry.intersectionRatio < 1) {\n this.setHorizontalDirection(entry);\n this.setVerticalDirection(entry);\n }\n this.showDropdown();\n this.changeDetectorRef.detectChanges();\n };\n this.intersectionObserverRef = new IntersectionObserver(callback, options);\n this.intersectionObserverRef.observe(this.cardElement.nativeElement);\n }\n }\n\n private setHorizontalDirection(entry: IntersectionObserverEntry) {\n // If popout direction is set to right, and the entry is cut off to the right by ${entry.boundingClientRect.right - entry.intersectionRect.right}px\n // it is set to popout left instead, and vice versa for popout direction left\n if (this.horizontalDirection === HorizontalDirection.right) {\n if (entry.boundingClientRect.right > entry.rootBounds.right) {\n this.horizontalDirection = HorizontalDirection.left;\n }\n } else {\n if (entry.boundingClientRect.left < entry.rootBounds.left) {\n this.horizontalDirection = HorizontalDirection.right;\n }\n }\n }\n\n private setVerticalDirection(entry: IntersectionObserverEntry) {\n if (entry.boundingClientRect.top < 0) {\n // entry is cut off at the top by ${entry.boundingClientRect.top}px\n // open downwards:\n this.verticalDirection = VerticalDirection.down;\n }\n if (entry.boundingClientRect.bottom > entry.rootBounds.bottom) {\n // entry is cut off at the bottom by ${entry.boundingClientRect.bottom - entry.intersectionRect.bottom}px\n const containerOffsetTop = this.elementRef.nativeElement.getBoundingClientRect().top;\n const SPACING = 5; //TODO: Get from SCSS\n // Check if the card can fit on top of button:\n if (containerOffsetTop > entry.target.clientHeight + SPACING) {\n // open upwards:\n this.verticalDirection = VerticalDirection.up;\n }\n }\n }\n\n open() {\n if (this.disabled) {\n return;\n }\n if (!this.isOpen) {\n this.state = OpenState.opening;\n // ensures that the dropdown is opened in case the IntersectionObserverCallback isn't invoked\n this.showDropdownTimeoutId = setTimeout(\n () => this.showDropdown(),\n DropdownComponent.OPEN_DELAY_IN_MS\n );\n\n // Move focus to selected item (if any)\n this.focusedIndex = this.selectedIndex;\n }\n }\n\n private showDropdown() {\n if (this.state === OpenState.opening) {\n this.state = OpenState.open;\n this.popover?.show();\n this.scrollItemIntoView(this.selectedIndex);\n this.changeDetectorRef.markForCheck();\n }\n }\n\n close() {\n if (this.disabled) {\n return;\n }\n if (this.isOpen) {\n this.state = OpenState.closed;\n // Reset vertical direction to default\n this.verticalDirection = VerticalDirection.down;\n this.popover?.hide();\n }\n }\n\n onItemSelect(index: number) {\n this.selectItem(index);\n this.close();\n }\n\n private _onChange: (value: any) => void = () => {};\n private _onTouched = () => {};\n\n /**\n * Sets the select's value. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param value New value to be written to the model.\n */\n writeValue(value: any): void {\n this._selectItemByValue(value);\n }\n\n /**\n * Saves a callback function to be invoked when the select's value\n * changes from user input. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the value changes.\n */\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n /**\n * Saves a callback function to be invoked when the select is blurred\n * by the user. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the component has been touched.\n */\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n\n /**\n * Disables the select. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param isDisabled Sets whether the component is disabled.\n */\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n private selectItem(index: number) {\n if (index != this.selectedIndex) {\n this.selectedIndex = index;\n this.focusedIndex = index;\n this.change.emit(this.value);\n this._onChange(this.value);\n }\n }\n\n private _selectItemByValue(value: string | any) {\n this.selectedIndex = this.items.indexOf(value);\n }\n\n getTextFromItem(item: string | any) {\n if (!item) {\n return null;\n }\n return typeof item === 'string' ? item : item[this.itemTextProperty];\n }\n\n scrollItemIntoView(index: number) {\n const kirbyItems =\n this.kirbyItemsSlotted && this.kirbyItemsSlotted.length\n ? this.kirbyItemsSlotted\n : this.kirbyItemsDefault;\n if (kirbyItems && kirbyItems.length) {\n const selectedKirbyItem = kirbyItems.toArray()[index];\n if (selectedKirbyItem && selectedKirbyItem.nativeElement) {\n const itemElement = selectedKirbyItem.nativeElement;\n itemElement.scrollIntoView({ block: 'nearest' });\n }\n }\n }\n\n @HostListener('keydown.tab', ['$event'])\n _onTab(event: KeyboardEvent) {\n if (this.isOpen) {\n event.preventDefault();\n this.close();\n }\n\n if (this.clicked) {\n // Remove the 'clicked' class (Hostbinding) if the user has previously opened the dropdown by clicking,\n // since the class prevents the focus ring from showing,\n // which is expected to happen, when using the tab key\n this.clicked = false;\n }\n }\n\n @HostListener('mousedown', ['$event'])\n _onMouseDown(event: MouseEvent) {\n if (this.disabled) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n }\n\n @HostListener('touchstart', ['$event'])\n _onTouchStart(event: TouchEvent) {\n if (this.isOpen) {\n event.stopPropagation();\n }\n }\n\n @HostListener('focus')\n _onFocus() {\n if (this.disabled) {\n this.elementRef.nativeElement.blur();\n }\n }\n\n _onPopoverWillHide() {\n this.state = OpenState.closed;\n this.elementRef.nativeElement.focus();\n }\n\n @HostListener('keydown.enter')\n @HostListener('keydown.escape')\n _onEnterOrEscape() {\n this.close();\n this._onTouched();\n }\n\n _onPopoverClick(event: PointerEvent) {\n this.close();\n }\n\n @HostListener('blur', ['$event'])\n _onBlur(event?: FocusEvent) {\n if (this.usePopover) return;\n this.close();\n this._onTouched();\n }\n\n @HostListener('keydown.enter', ['$event'])\n @HostListener('keydown.space', ['$event'])\n _onEnterOrSpace(event: KeyboardEvent) {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.isOpen) {\n this.selectItem(this.focusedIndex);\n }\n\n this.toggle();\n }\n\n @HostListener('keydown.arrowup', ['$event'])\n @HostListener('keydown.arrowdown', ['$event'])\n @HostListener('keydown.arrowleft', ['$event'])\n @HostListener('keydown.arrowright', ['$event'])\n _onArrowKeys(event: KeyboardEvent) {\n if (this.disabled) return false;\n\n // Mirror default HTML5 select behaviour - prevent left/right arrows when open:\n if (this.isOpen && (event.key === 'ArrowLeft' || event.key === 'ArrowRight')) {\n return false;\n }\n\n if (!this.isOpen) {\n // Avoid page scroll\n event.preventDefault();\n this.open();\n\n // If no selected item then focus first or last item\n if (this.selectedIndex < 0) {\n switch (event.key) {\n case 'ArrowUp':\n this.focusedIndex = this.items.length - 1;\n break;\n case 'ArrowDown':\n this.focusedIndex = 0;\n break;\n default:\n break;\n }\n }\n\n return false;\n }\n\n const newFocusedIndex = this.keyboardHandlerService.handle(\n event,\n this.focusedIndex,\n this.items.length - 1\n );\n\n if (newFocusedIndex > -1) {\n this.focusedIndex = newFocusedIndex;\n }\n\n return false;\n }\n\n @HostListener('keydown.home', ['$event'])\n @HostListener('keydown.end', ['$event'])\n _onHomeEndKeys(event: KeyboardEvent) {\n if (this.disabled) return;\n if (!this.isOpen) return;\n\n const newFocusedIndex = this.keyboardHandlerService.handle(\n event,\n this.focusedIndex,\n this.items.length - 1\n );\n if (newFocusedIndex > -1) {\n this.focusedIndex = newFocusedIndex;\n }\n return false;\n }\n\n private unlistenAllSlottedItems() {\n let unlistenItem: () => void;\n while ((unlistenItem = this.itemClickUnlisten.pop()) !== undefined) {\n unlistenItem();\n }\n }\n\n ngOnDestroy(): void {\n this.unlistenAllSlottedItems();\n if (this.intersectionObserverRef) {\n this.intersectionObserverRef.disconnect();\n }\n }\n}\n","<button\n kirby-button\n [size]=\"size\"\n [attentionLevel]=\"attentionLevel\"\n tabindex=\"-1\"\n (click)=\"onToggle($event)\"\n (mousedown)=\"onButtonMouseEvent($event)\"\n [disabled]=\"disabled\"\n type=\"button\"\n>\n <kirby-icon name=\"more\" *ngIf=\"_isMoreMenu; else defaultButtonContent\"></kirby-icon>\n\n <ng-template #defaultButtonContent>\n <span class=\"text\">{{ selectedText || placeholder }}</span>\n <kirby-icon [name]=\"isOpen ? 'arrow-up' : 'arrow-down'\"></kirby-icon>\n </ng-template>\n</button>\n\n<ng-container *ngTemplateOutlet=\"usePopover ? popoverTemplate : itemWrapperTemplate\"></ng-container>\n\n<ng-template #popoverTemplate>\n <kirby-popover\n [target]=\"buttonElement\"\n [popout]=\"popout\"\n (click)=\"_onPopoverClick($event)\"\n (willHide)=\"_onPopoverWillHide()\"\n [class.more-menu]=\"_isMoreMenu\"\n >\n <ng-container *ngTemplateOutlet=\"itemWrapperTemplate\"></ng-container>\n </kirby-popover>\n</ng-template>\n\n<ng-template #itemWrapperTemplate>\n <kirby-card>\n <ng-container *ngFor=\"let item of items; let i = index\">\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate || defaultItemTemplate;\n context: {\n $implicit: item,\n selected: i === selectedIndex,\n focused: i === focusedIndex,\n index: i\n }\n \"\n ></ng-container>\n </ng-container>\n </kirby-card>\n</ng-template>\n\n<ng-template\n #defaultItemTemplate\n let-item\n let-selected=\"selected\"\n let-index=\"index\"\n let-focused=\"focused\"\n>\n <kirby-item\n [selectable]=\"true\"\n [selected]=\"selected\"\n (click)=\"onItemSelect(index)\"\n [class.focused]=\"focused\"\n role=\"option\"\n >\n <!-- Tabindex fixes issue with popover dropdown not working in safari -->\n <h3 tabindex=\"0\">{{ getTextFromItem(item) }}</h3>\n <kirby-icon *ngIf=\"selected\" name=\"checkmark-selected\" slot=\"end\"></kirby-icon>\n </kirby-item>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ButtonComponent } from '@kirbydesign/designsystem/button';\nimport { CardModule } from '@kirbydesign/designsystem/card';\nimport { FormFieldModule } from '@kirbydesign/designsystem/form-field';\nimport { IconModule } from '@kirbydesign/designsystem/icon';\nimport { ItemModule } from '@kirbydesign/designsystem/item';\nimport { PopoverComponent } from '@kirbydesign/designsystem/popover';\n\nimport { DropdownComponent } from './dropdown.component';\nimport { KeyboardHandlerService } from './keyboard-handler.service';\n\nconst declarations = [DropdownComponent];\n\n@NgModule({\n imports: [\n CardModule,\n IconModule,\n ItemModule,\n FormFieldModule,\n PopoverComponent,\n ButtonComponent,\n CommonModule,\n ],\n declarations: [...declarations],\n exports: [...declarations],\n providers: [KeyboardHandlerService],\n})\nexport class DropdownModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.KeyboardHandlerService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kirbydesign-designsystem-dropdown.mjs","sources":["../../../../libs/designsystem/dropdown/src/dropdown.types.ts","../../../../libs/designsystem/dropdown/src/keyboard-handler.service.ts","../../../../libs/designsystem/dropdown/src/dropdown.component.ts","../../../../libs/designsystem/dropdown/src/dropdown.component.html","../../../../libs/designsystem/dropdown/src/dropdown.module.ts","../../../../libs/designsystem/dropdown/src/kirbydesign-designsystem-dropdown.ts"],"sourcesContent":["export enum OpenState {\n closed,\n opening,\n open,\n}\n\nexport enum VerticalDirection {\n up,\n down,\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class KeyboardHandlerService {\n handle(event: KeyboardEvent, selectedIndex: number, maxIndex: number, cyclicIndex = false) {\n let newIndex = -1;\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowLeft':\n if (selectedIndex === 0 && cyclicIndex) {\n newIndex = maxIndex;\n } else {\n // Select previous item:\n newIndex = selectedIndex - 1;\n }\n break;\n case 'ArrowDown':\n case 'ArrowRight':\n if (selectedIndex === undefined || (selectedIndex === maxIndex && cyclicIndex)) {\n // None selected, select first item:\n newIndex = 0;\n } else if (selectedIndex < maxIndex) {\n // Select next item:\n newIndex = selectedIndex + 1;\n }\n break;\n case 'Home':\n // Select first item:\n newIndex = 0;\n break;\n case 'End':\n // Select last item:\n newIndex = maxIndex;\n break;\n default:\n break;\n }\n return newIndex;\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n Output,\n QueryList,\n Renderer2,\n RendererStyleFlags2,\n TemplateRef,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CardComponent } from '@kirbydesign/designsystem/card';\nimport { DesignTokenHelper } from '@kirbydesign/designsystem/helpers';\nimport { ItemComponent } from '@kirbydesign/designsystem/item';\nimport { ListItemTemplateDirective } from '@kirbydesign/designsystem/list';\nimport { HorizontalDirection, PopoverComponent } from '@kirbydesign/designsystem/popover';\nimport { ButtonComponent } from '@kirbydesign/designsystem/button';\n\nimport { EventListenerDisposeFn } from '@kirbydesign/designsystem/types';\nimport { OpenState, VerticalDirection } from './dropdown.types';\nimport { KeyboardHandlerService } from './keyboard-handler.service';\n\n@Component({\n selector: 'kirby-dropdown',\n templateUrl: './dropdown.component.html',\n styleUrls: ['./dropdown.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DropdownComponent),\n multi: true,\n },\n ],\n})\nexport class DropdownComponent implements AfterViewInit, OnDestroy, ControlValueAccessor {\n static readonly OPEN_DELAY_IN_MS = 100;\n private state = OpenState.closed;\n private horizontalDirection: HorizontalDirection | `${HorizontalDirection}` =\n HorizontalDirection.right;\n private verticalDirection: VerticalDirection | `${VerticalDirection}` = VerticalDirection.down;\n\n private _items: string[] | any[] = [];\n get items(): string[] | any[] {\n return this._items;\n }\n\n @Input() set items(value: string[] | any[]) {\n this._items = value;\n this._value = this.items[this.selectedIndex] || null;\n }\n\n private _selectedIndex: number = -1;\n get selectedIndex(): number {\n return this._selectedIndex;\n }\n\n @Input() set selectedIndex(value: number) {\n if (this._selectedIndex != value) {\n this._selectedIndex = value;\n this.focusedIndex = this._selectedIndex;\n this._value = this.items[this.selectedIndex] || null;\n }\n }\n\n // _focusedIndex keeps track of which element has focus and will be selected\n // if it is activated (by pressing ENTER or SPACE key)\n private _focusedIndex: number = -1;\n get focusedIndex(): number {\n return this._focusedIndex;\n }\n\n @Input() set focusedIndex(value: number) {\n if (this._focusedIndex !== value) {\n this._focusedIndex = value;\n this.scrollItemIntoView(this._focusedIndex);\n }\n }\n\n @Input()\n itemTextProperty = 'text';\n\n @Input()\n placeholder = 'Please select:';\n\n @Input() set popout(direction: HorizontalDirection | `${HorizontalDirection}`) {\n this.horizontalDirection = direction || HorizontalDirection.right;\n }\n\n get popout() {\n return this.horizontalDirection;\n }\n\n @Input()\n attentionLevel: '1' | '2' | '3' = '3';\n\n @Input()\n expand?: 'block';\n\n @Input()\n disabled = false;\n\n @HostBinding('attr.disabled')\n get _isDisabled() {\n return this.disabled ? 'disabled' : null;\n }\n\n @HostBinding('class.error')\n @Input()\n hasError: boolean;\n\n @Input()\n size: 'sm' | 'md' = 'md';\n\n @Input()\n tabindex = 0;\n\n @HostBinding('class.with-popover')\n @Input()\n usePopover = false;\n\n @HostBinding('attr.tabindex')\n get _tabindex() {\n return this.disabled ? -1 : this.tabindex;\n }\n\n // Prevent Ionic blur on scroll\n @HostBinding('attr.no-blur')\n get _noBlurOnScroll() {\n return true;\n }\n\n /**\n * Emitted when an item is selected (tap on mobile, click/keypress on web)\n */\n @Output() change: EventEmitter<string | any> = new EventEmitter<string | any>();\n\n private _value: string | any = null;\n get value(): string | any {\n return this._value;\n }\n\n get selectedText(): string {\n return this.getTextFromItem(this.value);\n }\n\n @HostBinding('class.expand')\n get _isBlockLevel() {\n return this.expand === 'block';\n }\n\n @HostBinding('attr.role')\n _role = 'listbox';\n\n @HostBinding('class.is-opening')\n get _isOpening(): boolean {\n return this.state === OpenState.opening;\n }\n\n @HostBinding('class.is-open')\n get isOpen(): boolean {\n return this.state === OpenState.open;\n }\n\n @HostBinding('class.popout-left')\n get _popoutLeft() {\n return this.horizontalDirection === HorizontalDirection.left;\n }\n\n @HostBinding('class.popout-up')\n get _popoutUp() {\n return this.verticalDirection === VerticalDirection.up;\n }\n\n /* The 'clicked' class is applied through Hostbinding to prevent the dropdown from getting a focus ring on click.\n There is a bug that causes the dropdown to get a focus ring on click, if it is the first element that is interacted with\n after the page is loaded. If the user interacts with any other element before, then the dropdown won't get a focus ring.\n See issue: https://github.com/kirbydesign/designsystem/issues/2477.\n\n This solution can potentially be refactored, when popover is not experimental anymore. Then it could be possible \n to close the dropdown when the popover backdrop is clicked, instead of relying on the blur event, which is utilized\n by this line below: this.elementRef.nativeElement.focus(). Right now this forces the blur event to be triggered, when\n clicking outside of the dropdown.\n */\n @HostBinding('class.clicked')\n clicked = false;\n\n @ContentChild(ListItemTemplateDirective, { static: true, read: TemplateRef })\n itemTemplate: TemplateRef<any>;\n @ContentChildren(ListItemTemplateDirective, { read: ElementRef })\n slottedItems: QueryList<ElementRef<HTMLElement>>;\n @ViewChild(CardComponent, { read: ElementRef })\n cardElement: ElementRef<HTMLElement>;\n @ViewChild(PopoverComponent)\n popover?: PopoverComponent;\n @ViewChild(ButtonComponent, { static: true, read: ElementRef })\n buttonElement: ElementRef<HTMLElement>;\n @ViewChildren(ItemComponent, { read: ElementRef })\n kirbyItemsDefault: QueryList<ElementRef<HTMLElement>>;\n\n _kirbyItemsSlotted: QueryList<ElementRef<HTMLElement>>;\n @ContentChildren(ItemComponent, { read: ElementRef })\n set kirbyItemsSlotted(kirbyItems: QueryList<ElementRef<HTMLElement>>) {\n const hasSlottedItems = this.itemClickUnlisten?.length > 0;\n if (hasSlottedItems) {\n this.unlistenAllSlottedItems();\n }\n\n // Setup a click listener for each new slotted items\n kirbyItems.forEach((kirbyItem, index) => {\n this.renderer.setAttribute(kirbyItem.nativeElement, 'role', 'option');\n const unlisten: EventListenerDisposeFn = this.renderer.listen(\n kirbyItem.nativeElement,\n 'click',\n () => {\n this.onItemSelect(index);\n }\n );\n\n this.itemClickUnlisten.push(unlisten);\n });\n\n this._kirbyItemsSlotted = kirbyItems;\n }\n\n get kirbyItemsSlotted(): QueryList<ElementRef<HTMLElement>> {\n return this._kirbyItemsSlotted;\n }\n\n private itemClickUnlisten: EventListenerDisposeFn[] = [];\n private intersectionObserverRef: IntersectionObserver;\n private showDropdownTimeoutId: ReturnType<typeof setTimeout>;\n\n constructor(\n private renderer: Renderer2,\n private elementRef: ElementRef<HTMLElement>,\n private changeDetectorRef: ChangeDetectorRef,\n private keyboardHandlerService: KeyboardHandlerService\n ) {}\n\n onToggle(event: MouseEvent) {\n event.stopPropagation();\n\n this.clicked = true;\n\n if (!this.isOpen) {\n this.elementRef.nativeElement.focus();\n }\n this.toggle();\n }\n\n toggle() {\n if (this.disabled) {\n return;\n }\n this.isOpen ? this.close() : this.open();\n }\n\n onButtonMouseEvent(event: Event) {\n // Prevent button focus;\n event.preventDefault();\n }\n\n /* Utility that makes it easier to set styles on card element\n when using popover*/\n private setPopoverCardStyle(style: string, value: string) {\n if (!this.usePopover) return;\n\n this.renderer.setStyle(\n this.cardElement.nativeElement,\n style,\n value,\n RendererStyleFlags2.DashCase\n );\n }\n\n ngAfterViewInit() {\n if (this.usePopover && this.expand === 'block') {\n const { width } = this.elementRef.nativeElement.getBoundingClientRect();\n this.setPopoverCardStyle('--kirby-card-width', `${width}px`);\n this.setPopoverCardStyle('max-width', 'initial');\n this.setPopoverCardStyle('min-width', 'initial');\n }\n this.initializeAlignment();\n }\n\n private initializeAlignment() {\n if (this.usePopover) return;\n if (!this.intersectionObserverRef) {\n // Get the design token size of the button. In the button stylesheet a medium button height is utils.size(xl)\n // and a small button height is utils.size(\"l\")\n const designTokenSizeHeight = this.size === 'md' ? 'xl' : 'l';\n\n // Setting the rootMargin equal to the height of the button\n // allows the Intersection Observer Callback to be called\n // even if the dropdown button is intersecting with the viewport\n const options = {\n rootMargin: DesignTokenHelper.size(designTokenSizeHeight),\n };\n const callback: IntersectionObserverCallback = (entries) => {\n // Only apply alignment when opening:\n if (this.state !== OpenState.opening) {\n return;\n }\n\n // Cancel any pending timer to show dropdown:\n clearTimeout(this.showDropdownTimeoutId);\n const entry = entries[0];\n const isVisible = entry.boundingClientRect.width > 0;\n if (isVisible && entry.intersectionRatio < 1) {\n this.setHorizontalDirection(entry);\n this.setVerticalDirection(entry);\n }\n this.showDropdown();\n this.changeDetectorRef.detectChanges();\n };\n this.intersectionObserverRef = new IntersectionObserver(callback, options);\n this.intersectionObserverRef.observe(this.cardElement.nativeElement);\n }\n }\n\n private setHorizontalDirection(entry: IntersectionObserverEntry) {\n // If popout direction is set to right, and the entry is cut off to the right by ${entry.boundingClientRect.right - entry.intersectionRect.right}px\n // it is set to popout left instead, and vice versa for popout direction left\n if (this.horizontalDirection === HorizontalDirection.right) {\n if (entry.boundingClientRect.right > entry.rootBounds.right) {\n this.horizontalDirection = HorizontalDirection.left;\n }\n } else {\n if (entry.boundingClientRect.left < entry.rootBounds.left) {\n this.horizontalDirection = HorizontalDirection.right;\n }\n }\n }\n\n private setVerticalDirection(entry: IntersectionObserverEntry) {\n if (entry.boundingClientRect.top < 0) {\n // entry is cut off at the top by ${entry.boundingClientRect.top}px\n // open downwards:\n this.verticalDirection = VerticalDirection.down;\n }\n if (entry.boundingClientRect.bottom > entry.rootBounds.bottom) {\n // entry is cut off at the bottom by ${entry.boundingClientRect.bottom - entry.intersectionRect.bottom}px\n const containerOffsetTop = this.elementRef.nativeElement.getBoundingClientRect().top;\n const SPACING = 5; //TODO: Get from SCSS\n // Check if the card can fit on top of button:\n if (containerOffsetTop > entry.target.clientHeight + SPACING) {\n // open upwards:\n this.verticalDirection = VerticalDirection.up;\n }\n }\n }\n\n open() {\n if (this.disabled) {\n return;\n }\n if (!this.isOpen) {\n this.state = OpenState.opening;\n // ensures that the dropdown is opened in case the IntersectionObserverCallback isn't invoked\n this.showDropdownTimeoutId = setTimeout(\n () => this.showDropdown(),\n DropdownComponent.OPEN_DELAY_IN_MS\n );\n\n // Move focus to selected item (if any)\n this.focusedIndex = this.selectedIndex;\n }\n }\n\n private showDropdown() {\n if (this.state === OpenState.opening) {\n this.state = OpenState.open;\n this.popover?.show();\n this.scrollItemIntoView(this.selectedIndex);\n this.changeDetectorRef.markForCheck();\n }\n }\n\n close() {\n if (this.disabled) {\n return;\n }\n if (this.isOpen) {\n this.state = OpenState.closed;\n // Reset vertical direction to default\n this.verticalDirection = VerticalDirection.down;\n this.popover?.hide();\n }\n }\n\n onItemSelect(index: number) {\n this.selectItem(index);\n this.close();\n }\n\n private _onChange: (value: any) => void = () => {};\n private _onTouched = () => {};\n\n /**\n * Sets the select's value. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param value New value to be written to the model.\n */\n writeValue(value: any): void {\n this._selectItemByValue(value);\n }\n\n /**\n * Saves a callback function to be invoked when the select's value\n * changes from user input. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the value changes.\n */\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n /**\n * Saves a callback function to be invoked when the select is blurred\n * by the user. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the component has been touched.\n */\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n\n /**\n * Disables the select. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param isDisabled Sets whether the component is disabled.\n */\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n private selectItem(index: number) {\n if (index != this.selectedIndex) {\n this.selectedIndex = index;\n this.focusedIndex = index;\n this.change.emit(this.value);\n this._onChange(this.value);\n }\n }\n\n private _selectItemByValue(value: string | any) {\n this.selectedIndex = this.items.indexOf(value);\n }\n\n getTextFromItem(item: string | any) {\n if (!item) {\n return null;\n }\n return typeof item === 'string' ? item : item[this.itemTextProperty];\n }\n\n scrollItemIntoView(index: number) {\n const kirbyItems =\n this.kirbyItemsSlotted && this.kirbyItemsSlotted.length\n ? this.kirbyItemsSlotted\n : this.kirbyItemsDefault;\n if (kirbyItems && kirbyItems.length) {\n const selectedKirbyItem = kirbyItems.toArray()[index];\n if (selectedKirbyItem && selectedKirbyItem.nativeElement) {\n const itemElement = selectedKirbyItem.nativeElement;\n itemElement.scrollIntoView({ block: 'nearest' });\n }\n }\n }\n\n @HostListener('keydown.tab', ['$event'])\n _onTab(event: KeyboardEvent) {\n if (this.isOpen) {\n event.preventDefault();\n this.close();\n }\n\n if (this.clicked) {\n // Remove the 'clicked' class (Hostbinding) if the user has previously opened the dropdown by clicking,\n // since the class prevents the focus ring from showing,\n // which is expected to happen, when using the tab key\n this.clicked = false;\n }\n }\n\n @HostListener('mousedown', ['$event'])\n _onMouseDown(event: MouseEvent) {\n if (this.disabled) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n }\n\n @HostListener('touchstart', ['$event'])\n _onTouchStart(event: TouchEvent) {\n if (this.isOpen) {\n event.stopPropagation();\n }\n }\n\n @HostListener('focus')\n _onFocus() {\n if (this.disabled) {\n this.elementRef.nativeElement.blur();\n }\n }\n\n _onPopoverWillHide() {\n this.state = OpenState.closed;\n this.elementRef.nativeElement.focus();\n }\n\n @HostListener('keydown.enter')\n @HostListener('keydown.escape')\n _onEnterOrEscape() {\n this.close();\n this._onTouched();\n }\n\n _onPopoverClick(event: PointerEvent) {\n this.close();\n }\n\n @HostListener('blur', ['$event'])\n _onBlur(event?: FocusEvent) {\n if (this.usePopover) return;\n this.close();\n this._onTouched();\n }\n\n @HostListener('keydown.enter', ['$event'])\n @HostListener('keydown.space', ['$event'])\n _onEnterOrSpace(event: KeyboardEvent) {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.isOpen) {\n this.selectItem(this.focusedIndex);\n }\n\n this.toggle();\n }\n\n @HostListener('keydown.arrowup', ['$event'])\n @HostListener('keydown.arrowdown', ['$event'])\n @HostListener('keydown.arrowleft', ['$event'])\n @HostListener('keydown.arrowright', ['$event'])\n _onArrowKeys(event: KeyboardEvent) {\n if (this.disabled) return false;\n\n // Mirror default HTML5 select behaviour - prevent left/right arrows when open:\n if (this.isOpen && (event.key === 'ArrowLeft' || event.key === 'ArrowRight')) {\n return false;\n }\n\n if (!this.isOpen) {\n // Avoid page scroll\n event.preventDefault();\n this.open();\n\n // If no selected item then focus first or last item\n if (this.selectedIndex < 0) {\n switch (event.key) {\n case 'ArrowUp':\n this.focusedIndex = this.items.length - 1;\n break;\n case 'ArrowDown':\n this.focusedIndex = 0;\n break;\n default:\n break;\n }\n }\n\n return false;\n }\n\n const newFocusedIndex = this.keyboardHandlerService.handle(\n event,\n this.focusedIndex,\n this.items.length - 1\n );\n\n if (newFocusedIndex > -1) {\n this.focusedIndex = newFocusedIndex;\n }\n\n return false;\n }\n\n @HostListener('keydown.home', ['$event'])\n @HostListener('keydown.end', ['$event'])\n _onHomeEndKeys(event: KeyboardEvent) {\n if (this.disabled) return;\n if (!this.isOpen) return;\n\n const newFocusedIndex = this.keyboardHandlerService.handle(\n event,\n this.focusedIndex,\n this.items.length - 1\n );\n if (newFocusedIndex > -1) {\n this.focusedIndex = newFocusedIndex;\n }\n return false;\n }\n\n private unlistenAllSlottedItems() {\n let unlistenItem: () => void;\n while ((unlistenItem = this.itemClickUnlisten.pop()) !== undefined) {\n unlistenItem();\n }\n }\n\n ngOnDestroy(): void {\n this.unlistenAllSlottedItems();\n if (this.intersectionObserverRef) {\n this.intersectionObserverRef.disconnect();\n }\n }\n}\n","<button\n kirby-button\n [size]=\"size\"\n [attentionLevel]=\"attentionLevel\"\n tabindex=\"-1\"\n (click)=\"onToggle($event)\"\n (mousedown)=\"onButtonMouseEvent($event)\"\n [disabled]=\"disabled\"\n type=\"button\"\n>\n <span class=\"text\">{{ selectedText || placeholder }}</span>\n <kirby-icon [name]=\"isOpen ? 'arrow-up' : 'arrow-down'\"></kirby-icon>\n</button>\n\n<ng-container *ngTemplateOutlet=\"usePopover ? popoverTemplate : itemWrapperTemplate\"></ng-container>\n\n<ng-template #popoverTemplate>\n <kirby-popover\n [target]=\"buttonElement\"\n [popout]=\"popout\"\n (click)=\"_onPopoverClick($event)\"\n (willHide)=\"_onPopoverWillHide()\"\n >\n <ng-container *ngTemplateOutlet=\"itemWrapperTemplate\"></ng-container>\n </kirby-popover>\n</ng-template>\n\n<ng-template #itemWrapperTemplate>\n <kirby-card>\n <ng-container *ngFor=\"let item of items; let i = index\">\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate || defaultItemTemplate;\n context: {\n $implicit: item,\n selected: i === selectedIndex,\n focused: i === focusedIndex,\n index: i\n }\n \"\n ></ng-container>\n </ng-container>\n </kirby-card>\n</ng-template>\n\n<ng-template\n #defaultItemTemplate\n let-item\n let-selected=\"selected\"\n let-index=\"index\"\n let-focused=\"focused\"\n>\n <kirby-item\n [selectable]=\"true\"\n [selected]=\"selected\"\n (click)=\"onItemSelect(index)\"\n [class.focused]=\"focused\"\n role=\"option\"\n >\n <!-- Tabindex fixes issue with popover dropdown not working in safari -->\n <h3 tabindex=\"0\">{{ getTextFromItem(item) }}</h3>\n <kirby-icon *ngIf=\"selected\" name=\"checkmark-selected\" slot=\"end\"></kirby-icon>\n </kirby-item>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ButtonComponent } from '@kirbydesign/designsystem/button';\nimport { CardModule } from '@kirbydesign/designsystem/card';\nimport { FormFieldModule } from '@kirbydesign/designsystem/form-field';\nimport { IconModule } from '@kirbydesign/designsystem/icon';\nimport { ItemModule } from '@kirbydesign/designsystem/item';\nimport { PopoverComponent } from '@kirbydesign/designsystem/popover';\n\nimport { DropdownComponent } from './dropdown.component';\nimport { KeyboardHandlerService } from './keyboard-handler.service';\n\nconst declarations = [DropdownComponent];\n\n@NgModule({\n imports: [\n CardModule,\n IconModule,\n ItemModule,\n FormFieldModule,\n PopoverComponent,\n ButtonComponent,\n CommonModule,\n ],\n declarations: [...declarations],\n exports: [...declarations],\n providers: [KeyboardHandlerService],\n})\nexport class DropdownModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.KeyboardHandlerService"],"mappings":";;;;;;;;;;;;;;;;;;;IAAY,UAIX;AAJD,CAAA,UAAY,SAAS,EAAA;AACnB,IAAA,SAAA,CAAA,SAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM,CAAA;AACN,IAAA,SAAA,CAAA,SAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO,CAAA;AACP,IAAA,SAAA,CAAA,SAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI,CAAA;AACN,CAAC,EAJW,SAAS,KAAT,SAAS,GAIpB,EAAA,CAAA,CAAA,CAAA;IAEW,kBAGX;AAHD,CAAA,UAAY,iBAAiB,EAAA;AAC3B,IAAA,iBAAA,CAAA,iBAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAE,CAAA;AACF,IAAA,iBAAA,CAAA,iBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI,CAAA;AACN,CAAC,EAHW,iBAAiB,KAAjB,iBAAiB,GAG5B,EAAA,CAAA,CAAA;;MCJY,sBAAsB,CAAA;IACjC,MAAM,CAAC,KAAoB,EAAE,aAAqB,EAAE,QAAgB,EAAE,WAAW,GAAG,KAAK,EAAA;AACvF,QAAA,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;QAClB,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,SAAS,CAAC;AACf,YAAA,KAAK,WAAW;AACd,gBAAA,IAAI,aAAa,KAAK,CAAC,IAAI,WAAW,EAAE;oBACtC,QAAQ,GAAG,QAAQ,CAAC;AACrB,iBAAA;AAAM,qBAAA;;AAEL,oBAAA,QAAQ,GAAG,aAAa,GAAG,CAAC,CAAC;AAC9B,iBAAA;gBACD,MAAM;AACR,YAAA,KAAK,WAAW,CAAC;AACjB,YAAA,KAAK,YAAY;gBACf,IAAI,aAAa,KAAK,SAAS,KAAK,aAAa,KAAK,QAAQ,IAAI,WAAW,CAAC,EAAE;;oBAE9E,QAAQ,GAAG,CAAC,CAAC;AACd,iBAAA;qBAAM,IAAI,aAAa,GAAG,QAAQ,EAAE;;AAEnC,oBAAA,QAAQ,GAAG,aAAa,GAAG,CAAC,CAAC;AAC9B,iBAAA;gBACD,MAAM;AACR,YAAA,KAAK,MAAM;;gBAET,QAAQ,GAAG,CAAC,CAAC;gBACb,MAAM;AACR,YAAA,KAAK,KAAK;;gBAER,QAAQ,GAAG,QAAQ,CAAC;gBACpB,MAAM;AACR,YAAA;gBACE,MAAM;AACT,SAAA;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;;sIAnCU,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAtB,mBAAA,sBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cAFrB,MAAM,EAAA,CAAA,CAAA;2FAEP,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCyCY,iBAAiB,CAAA;AAsM5B,IAAA,WAAA,CACU,QAAmB,EACnB,UAAmC,EACnC,iBAAoC,EACpC,sBAA8C,EAAA;QAH9C,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAW;QACnB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAyB;QACnC,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAmB;QACpC,IAAsB,CAAA,sBAAA,GAAtB,sBAAsB,CAAwB;AAxMhD,QAAA,IAAA,CAAA,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC;AACzB,QAAA,IAAA,CAAA,mBAAmB,GACzB,mBAAmB,CAAC,KAAK,CAAC;AACpB,QAAA,IAAA,CAAA,iBAAiB,GAA+C,iBAAiB,CAAC,IAAI,CAAC;QAEvF,IAAM,CAAA,MAAA,GAAqB,EAAE,CAAC;QAU9B,IAAc,CAAA,cAAA,GAAW,CAAC,CAAC,CAAC;;;QAe5B,IAAa,CAAA,aAAA,GAAW,CAAC,CAAC,CAAC;QAanC,IAAgB,CAAA,gBAAA,GAAG,MAAM,CAAC;QAG1B,IAAW,CAAA,WAAA,GAAG,gBAAgB,CAAC;QAW/B,IAAc,CAAA,cAAA,GAAoB,GAAG,CAAC;QAMtC,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;QAYjB,IAAI,CAAA,IAAA,GAAgB,IAAI,CAAC;QAGzB,IAAQ,CAAA,QAAA,GAAG,CAAC,CAAC;QAIb,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;AAanB;;AAEG;AACO,QAAA,IAAA,CAAA,MAAM,GAA+B,IAAI,YAAY,EAAgB,CAAC;QAExE,IAAM,CAAA,MAAA,GAAiB,IAAI,CAAC;QAepC,IAAK,CAAA,KAAA,GAAG,SAAS,CAAC;AAsBlB;;;;;;;;;AASI;QAEJ,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC;QA4CR,IAAiB,CAAA,iBAAA,GAA6B,EAAE,CAAC;AAuKjD,QAAA,IAAA,CAAA,SAAS,GAAyB,MAAK,GAAG,CAAC;AAC3C,QAAA,IAAA,CAAA,UAAU,GAAG,MAAK,GAAG,CAAC;KA/J1B;AAnMJ,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;IAED,IAAa,KAAK,CAAC,KAAuB,EAAA;AACxC,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC;KACtD;AAGD,IAAA,IAAI,aAAa,GAAA;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;KAC5B;IAED,IAAa,aAAa,CAAC,KAAa,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,cAAc,IAAI,KAAK,EAAE;AAChC,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAC5B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC;AACxC,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC;AACtD,SAAA;KACF;AAKD,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;KAC3B;IAED,IAAa,YAAY,CAAC,KAAa,EAAA;AACrC,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE;AAChC,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;AAC3B,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC7C,SAAA;KACF;IAQD,IAAa,MAAM,CAAC,SAAyD,EAAA;QAC3E,IAAI,CAAC,mBAAmB,GAAG,SAAS,IAAI,mBAAmB,CAAC,KAAK,CAAC;KACnE;AAED,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,mBAAmB,CAAC;KACjC;AAWD,IAAA,IACI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC;KAC1C;AAgBD,IAAA,IACI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;KAC3C;;AAGD,IAAA,IACI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC;KACb;AAQD,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;AAED,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACzC;AAED,IAAA,IACI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC;KAChC;AAKD,IAAA,IACI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,OAAO,CAAC;KACzC;AAED,IAAA,IACI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,IAAI,CAAC;KACtC;AAED,IAAA,IACI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,mBAAmB,KAAK,mBAAmB,CAAC,IAAI,CAAC;KAC9D;AAED,IAAA,IACI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,iBAAiB,KAAK,iBAAiB,CAAC,EAAE,CAAC;KACxD;IA6BD,IACI,iBAAiB,CAAC,UAA8C,EAAA;QAClE,MAAM,eAAe,GAAG,IAAI,CAAC,iBAAiB,EAAE,MAAM,GAAG,CAAC,CAAC;AAC3D,QAAA,IAAI,eAAe,EAAE;YACnB,IAAI,CAAC,uBAAuB,EAAE,CAAC;AAChC,SAAA;;QAGD,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,KAAK,KAAI;AACtC,YAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AACtE,YAAA,MAAM,QAAQ,GAA2B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAC3D,SAAS,CAAC,aAAa,EACvB,OAAO,EACP,MAAK;AACH,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC3B,aAAC,CACF,CAAC;AAEF,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACxC,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAAC;KACtC;AAED,IAAA,IAAI,iBAAiB,GAAA;QACnB,OAAO,IAAI,CAAC,kBAAkB,CAAC;KAChC;AAaD,IAAA,QAAQ,CAAC,KAAiB,EAAA;QACxB,KAAK,CAAC,eAAe,EAAE,CAAC;AAExB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AAEpB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;AACvC,SAAA;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;IAED,MAAM,GAAA;QACJ,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;KAC1C;AAED,IAAA,kBAAkB,CAAC,KAAY,EAAA;;QAE7B,KAAK,CAAC,cAAc,EAAE,CAAC;KACxB;AAED;AACoB;IACZ,mBAAmB,CAAC,KAAa,EAAE,KAAa,EAAA;QACtD,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;AAE7B,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACpB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,KAAK,EACL,KAAK,EACL,mBAAmB,CAAC,QAAQ,CAC7B,CAAC;KACH;IAED,eAAe,GAAA;QACb,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE;AAC9C,YAAA,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;YACxE,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,EAAE,CAAG,EAAA,KAAK,CAAI,EAAA,CAAA,CAAC,CAAC;AAC7D,YAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;AACjD,YAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;AAClD,SAAA;QACD,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;IAEO,mBAAmB,GAAA;QACzB,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE;;;AAGjC,YAAA,MAAM,qBAAqB,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC;;;;AAK9D,YAAA,MAAM,OAAO,GAAG;AACd,gBAAA,UAAU,EAAE,iBAAiB,CAAC,IAAI,CAAC,qBAAqB,CAAC;aAC1D,CAAC;AACF,YAAA,MAAM,QAAQ,GAAiC,CAAC,OAAO,KAAI;;AAEzD,gBAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,OAAO,EAAE;oBACpC,OAAO;AACR,iBAAA;;AAGD,gBAAA,YAAY,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;AACzC,gBAAA,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACzB,MAAM,SAAS,GAAG,KAAK,CAAC,kBAAkB,CAAC,KAAK,GAAG,CAAC,CAAC;AACrD,gBAAA,IAAI,SAAS,IAAI,KAAK,CAAC,iBAAiB,GAAG,CAAC,EAAE;AAC5C,oBAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;AACnC,oBAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;AAClC,iBAAA;gBACD,IAAI,CAAC,YAAY,EAAE,CAAC;AACpB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;AACzC,aAAC,CAAC;YACF,IAAI,CAAC,uBAAuB,GAAG,IAAI,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC3E,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;AACtE,SAAA;KACF;AAEO,IAAA,sBAAsB,CAAC,KAAgC,EAAA;;;AAG7D,QAAA,IAAI,IAAI,CAAC,mBAAmB,KAAK,mBAAmB,CAAC,KAAK,EAAE;YAC1D,IAAI,KAAK,CAAC,kBAAkB,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE;AAC3D,gBAAA,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC,IAAI,CAAC;AACrD,aAAA;AACF,SAAA;AAAM,aAAA;YACL,IAAI,KAAK,CAAC,kBAAkB,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE;AACzD,gBAAA,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC,KAAK,CAAC;AACtD,aAAA;AACF,SAAA;KACF;AAEO,IAAA,oBAAoB,CAAC,KAAgC,EAAA;AAC3D,QAAA,IAAI,KAAK,CAAC,kBAAkB,CAAC,GAAG,GAAG,CAAC,EAAE;;;AAGpC,YAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,IAAI,CAAC;AACjD,SAAA;QACD,IAAI,KAAK,CAAC,kBAAkB,CAAC,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE;;AAE7D,YAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,GAAG,CAAC;AACrF,YAAA,MAAM,OAAO,GAAG,CAAC,CAAC;;YAElB,IAAI,kBAAkB,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,GAAG,OAAO,EAAE;;AAE5D,gBAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,EAAE,CAAC;AAC/C,aAAA;AACF,SAAA;KACF;IAED,IAAI,GAAA;QACF,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC;;AAE/B,YAAA,IAAI,CAAC,qBAAqB,GAAG,UAAU,CACrC,MAAM,IAAI,CAAC,YAAY,EAAE,EACzB,iBAAiB,CAAC,gBAAgB,CACnC,CAAC;;AAGF,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;AACxC,SAAA;KACF;IAEO,YAAY,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,OAAO,EAAE;AACpC,YAAA,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC;AAC5B,YAAA,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;AACrB,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC5C,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AACvC,SAAA;KACF;IAED,KAAK,GAAA;QACH,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO;AACR,SAAA;QACD,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC;;AAE9B,YAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,IAAI,CAAC;AAChD,YAAA,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;AACtB,SAAA;KACF;AAED,IAAA,YAAY,CAAC,KAAa,EAAA;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,EAAE,CAAC;KACd;AAKD;;;;;AAKG;AACH,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;KAChC;AAED;;;;;;AAMG;AACH,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;AAED;;;;;;AAMG;AACH,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;KACtB;AAED;;;;;AAKG;AACH,IAAA,gBAAgB,CAAE,UAAmB,EAAA;AACnC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;KAC5B;AAEO,IAAA,UAAU,CAAC,KAAa,EAAA;AAC9B,QAAA,IAAI,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE;AAC/B,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;AAC3B,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7B,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5B,SAAA;KACF;AAEO,IAAA,kBAAkB,CAAC,KAAmB,EAAA;QAC5C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;KAChD;AAED,IAAA,eAAe,CAAC,IAAkB,EAAA;QAChC,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,OAAO,OAAO,IAAI,KAAK,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KACtE;AAED,IAAA,kBAAkB,CAAC,KAAa,EAAA;QAC9B,MAAM,UAAU,GACd,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM;cACnD,IAAI,CAAC,iBAAiB;AACxB,cAAE,IAAI,CAAC,iBAAiB,CAAC;AAC7B,QAAA,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,EAAE;YACnC,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;AACtD,YAAA,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,aAAa,EAAE;AACxD,gBAAA,MAAM,WAAW,GAAG,iBAAiB,CAAC,aAAa,CAAC;gBACpD,WAAW,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;AAClD,aAAA;AACF,SAAA;KACF;AAGD,IAAA,MAAM,CAAC,KAAoB,EAAA;QACzB,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,EAAE,CAAC;AACd,SAAA;QAED,IAAI,IAAI,CAAC,OAAO,EAAE;;;;AAIhB,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACtB,SAAA;KACF;AAGD,IAAA,YAAY,CAAC,KAAiB,EAAA;QAC5B,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,KAAK,CAAC,wBAAwB,EAAE,CAAC;AAClC,SAAA;KACF;AAGD,IAAA,aAAa,CAAC,KAAiB,EAAA;QAC7B,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,KAAK,CAAC,eAAe,EAAE,CAAC;AACzB,SAAA;KACF;IAGD,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;AACtC,SAAA;KACF;IAED,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC;AAC9B,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;KACvC;IAID,gBAAgB,GAAA;QACd,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,UAAU,EAAE,CAAC;KACnB;AAED,IAAA,eAAe,CAAC,KAAmB,EAAA;QACjC,IAAI,CAAC,KAAK,EAAE,CAAC;KACd;AAGD,IAAA,OAAO,CAAC,KAAkB,EAAA;QACxB,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO;QAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,UAAU,EAAE,CAAC;KACnB;AAID,IAAA,eAAe,CAAC,KAAoB,EAAA;QAClC,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,KAAK,CAAC,eAAe,EAAE,CAAC;QAExB,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACpC,SAAA;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;AAMD,IAAA,YAAY,CAAC,KAAoB,EAAA;QAC/B,IAAI,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,KAAK,CAAC;;AAGhC,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,CAAC,EAAE;AAC5E,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;;YAEhB,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,EAAE,CAAC;;AAGZ,YAAA,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE;gBAC1B,QAAQ,KAAK,CAAC,GAAG;AACf,oBAAA,KAAK,SAAS;wBACZ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;wBAC1C,MAAM;AACR,oBAAA,KAAK,WAAW;AACd,wBAAA,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;wBACtB,MAAM;AACR,oBAAA;wBACE,MAAM;AACT,iBAAA;AACF,aAAA;AAED,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CACxD,KAAK,EACL,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CACtB,CAAC;AAEF,QAAA,IAAI,eAAe,GAAG,CAAC,CAAC,EAAE;AACxB,YAAA,IAAI,CAAC,YAAY,GAAG,eAAe,CAAC;AACrC,SAAA;AAED,QAAA,OAAO,KAAK,CAAC;KACd;AAID,IAAA,cAAc,CAAC,KAAoB,EAAA;QACjC,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEzB,MAAM,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CACxD,KAAK,EACL,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CACtB,CAAC;AACF,QAAA,IAAI,eAAe,GAAG,CAAC,CAAC,EAAE;AACxB,YAAA,IAAI,CAAC,YAAY,GAAG,eAAe,CAAC;AACrC,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;IAEO,uBAAuB,GAAA;AAC7B,QAAA,IAAI,YAAwB,CAAC;AAC7B,QAAA,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,MAAM,SAAS,EAAE;AAClE,YAAA,YAAY,EAAE,CAAC;AAChB,SAAA;KACF;IAED,WAAW,GAAA;QACT,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,uBAAuB,EAAE;AAChC,YAAA,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE,CAAC;AAC3C,SAAA;KACF;;AA5kBe,iBAAgB,CAAA,gBAAA,GAAG,GAAG,CAAC;iIAD5B,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,sBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,mBAAA,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EARjB,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,eAAA,EAAA,yBAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,wBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,cAAA,EAAA,EAAA,EAAA,SAAA,EAAA;AACT,QAAA;AACE,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,WAAW,EAAE,UAAU,EAAC,MAAM,iBAAiB,EAAC;AAChD,YAAA,KAAK,EAAE,IAAI;AACZ,SAAA;KACF,EA0Ja,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,yBAAyB,EAAwB,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,WAAW,EAEzD,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,yBAAyB,EAAU,IAAA,EAAA,UAAU,EAY7C,EAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,aAAa,EAAU,IAAA,EAAA,UAAU,EAVvC,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,aAAa,2BAAU,UAAU,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAEjC,gBAAgB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAEhB,eAAe,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAwB,UAAU,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,SAAA,EAE9C,aAAa,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAU,UAAU,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/MjD,8yDAgEA,EAAA,MAAA,EAAA,CAAA,09DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,cAAA,EAAA,YAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDnBa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAZ7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAGf,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,EAAC,uBAAuB,EAAC;AAChD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,8yDAAA,EAAA,MAAA,EAAA,CAAA,09DAAA,CAAA,EAAA,CAAA;2LAcY,KAAK,EAAA,CAAA;sBAAjB,KAAK;gBAUO,aAAa,EAAA,CAAA;sBAAzB,KAAK;gBAeO,YAAY,EAAA,CAAA;sBAAxB,KAAK;gBAQN,gBAAgB,EAAA,CAAA;sBADf,KAAK;gBAIN,WAAW,EAAA,CAAA;sBADV,KAAK;gBAGO,MAAM,EAAA,CAAA;sBAAlB,KAAK;gBASN,cAAc,EAAA,CAAA;sBADb,KAAK;gBAIN,MAAM,EAAA,CAAA;sBADL,KAAK;gBAIN,QAAQ,EAAA,CAAA;sBADP,KAAK;gBAIF,WAAW,EAAA,CAAA;sBADd,WAAW;uBAAC,eAAe,CAAA;gBAO5B,QAAQ,EAAA,CAAA;sBAFP,WAAW;uBAAC,aAAa,CAAA;;sBACzB,KAAK;gBAIN,IAAI,EAAA,CAAA;sBADH,KAAK;gBAIN,QAAQ,EAAA,CAAA;sBADP,KAAK;gBAKN,UAAU,EAAA,CAAA;sBAFT,WAAW;uBAAC,oBAAoB,CAAA;;sBAChC,KAAK;gBAIF,SAAS,EAAA,CAAA;sBADZ,WAAW;uBAAC,eAAe,CAAA;gBAOxB,eAAe,EAAA,CAAA;sBADlB,WAAW;uBAAC,cAAc,CAAA;gBAQjB,MAAM,EAAA,CAAA;sBAAf,MAAM;gBAYH,aAAa,EAAA,CAAA;sBADhB,WAAW;uBAAC,cAAc,CAAA;gBAM3B,KAAK,EAAA,CAAA;sBADJ,WAAW;uBAAC,WAAW,CAAA;gBAIpB,UAAU,EAAA,CAAA;sBADb,WAAW;uBAAC,kBAAkB,CAAA;gBAM3B,MAAM,EAAA,CAAA;sBADT,WAAW;uBAAC,eAAe,CAAA;gBAMxB,WAAW,EAAA,CAAA;sBADd,WAAW;uBAAC,mBAAmB,CAAA;gBAM5B,SAAS,EAAA,CAAA;sBADZ,WAAW;uBAAC,iBAAiB,CAAA;gBAgB9B,OAAO,EAAA,CAAA;sBADN,WAAW;uBAAC,eAAe,CAAA;gBAI5B,YAAY,EAAA,CAAA;sBADX,YAAY;uBAAC,yBAAyB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAA;gBAG5E,YAAY,EAAA,CAAA;sBADX,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,yBAAyB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;gBAGhE,WAAW,EAAA,CAAA;sBADV,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,aAAa,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;gBAG9C,OAAO,EAAA,CAAA;sBADN,SAAS;uBAAC,gBAAgB,CAAA;gBAG3B,aAAa,EAAA,CAAA;sBADZ,SAAS;uBAAC,eAAe,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;gBAG9D,iBAAiB,EAAA,CAAA;sBADhB,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,aAAa,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;gBAK7C,iBAAiB,EAAA,CAAA;sBADpB,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,aAAa,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;gBAmRpD,MAAM,EAAA,CAAA;sBADL,YAAY;uBAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAgBvC,YAAY,EAAA,CAAA;sBADX,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAA;gBASrC,aAAa,EAAA,CAAA;sBADZ,YAAY;uBAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAQtC,QAAQ,EAAA,CAAA;sBADP,YAAY;uBAAC,OAAO,CAAA;gBAcrB,gBAAgB,EAAA,CAAA;sBAFf,YAAY;uBAAC,eAAe,CAAA;;sBAC5B,YAAY;uBAAC,gBAAgB,CAAA;gBAW9B,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAShC,eAAe,EAAA,CAAA;sBAFd,YAAY;uBAAC,eAAe,EAAE,CAAC,QAAQ,CAAC,CAAA;;sBACxC,YAAY;uBAAC,eAAe,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAgBzC,YAAY,EAAA,CAAA;sBAJX,YAAY;uBAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,CAAA;;sBAC1C,YAAY;uBAAC,mBAAmB,EAAE,CAAC,QAAQ,CAAC,CAAA;;sBAC5C,YAAY;uBAAC,mBAAmB,EAAE,CAAC,QAAQ,CAAC,CAAA;;sBAC5C,YAAY;uBAAC,oBAAoB,EAAE,CAAC,QAAQ,CAAC,CAAA;gBA8C9C,cAAc,EAAA,CAAA;sBAFb,YAAY;uBAAC,cAAc,EAAE,CAAC,QAAQ,CAAC,CAAA;;sBACvC,YAAY;uBAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,CAAA;;;AEjlBzC,MAAM,YAAY,GAAG,CAAC,iBAAiB,CAAC,CAAC;MAgB5B,cAAc,CAAA;;8HAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+HAAd,cAAc,EAAA,YAAA,EAAA,CAhBL,iBAAiB,CAAA,EAAA,OAAA,EAAA,CAInC,UAAU;QACV,UAAU;QACV,UAAU;QACV,eAAe;QACf,gBAAgB;QAChB,eAAe;AACf,QAAA,YAAY,aAVM,iBAAiB,CAAA,EAAA,CAAA,CAAA;AAgB1B,mBAAA,cAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,EAFd,SAAA,EAAA,CAAC,sBAAsB,CAAC,YAVjC,UAAU;QACV,UAAU;QACV,UAAU;QACV,eAAe;QACf,gBAAgB;QAChB,eAAe;QACf,YAAY,CAAA,EAAA,CAAA,CAAA;2FAMH,cAAc,EAAA,UAAA,EAAA,CAAA;kBAd1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,UAAU;wBACV,UAAU;wBACV,UAAU;wBACV,eAAe;wBACf,gBAAgB;wBAChB,eAAe;wBACf,YAAY;AACb,qBAAA;AACD,oBAAA,YAAY,EAAE,CAAC,GAAG,YAAY,CAAC;AAC/B,oBAAA,OAAO,EAAE,CAAC,GAAG,YAAY,CAAC;oBAC1B,SAAS,EAAE,CAAC,sBAAsB,CAAC;AACpC,iBAAA,CAAA;;;AC5BD;;AAEG;;;;"}
|
|
@@ -83,10 +83,10 @@ class HeaderComponent {
|
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
85
|
/** @nocollapse */ HeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: HeaderComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
|
86
|
-
/** @nocollapse */ HeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: HeaderComponent, selector: "kirby-header", inputs: { centered: "centered", titleMaxLines: "titleMaxLines", emphasizeActions: "emphasizeActions", title: "title", value: "value", valueUnit: "valueUnit", subtitle1: "subtitle1", subtitle2: "subtitle2" }, outputs: { titleClick: "titleClick" }, host: { properties: { "class.centered": "this.centered" } }, queries: [{ propertyName: "avatar", first: true, predicate: AvatarComponent, descendants: true }, { propertyName: "progressCircle", first: true, predicate: ProgressCircleComponent, descendants: true }, { propertyName: "flag", first: true, predicate: FlagComponent, descendants: true }, { propertyName: "actionsTemplate", first: true, predicate: HeaderActionsDirective, descendants: true, read: (TemplateRef) }, { propertyName: "customSectionTemplate", first: true, predicate: HeaderCustomSectionDirective, descendants: true, read: (TemplateRef) }, { propertyName: "titleActionIconTemplate", first: true, predicate: HeaderTitleActionIconDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "titleElement", first: true, predicate: ["titleElement"], descendants: true, read: ElementRef }, { propertyName: "actionsElement", first: true, predicate: ["actionsElement"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div *ngIf=\"!!avatar || !!progressCircle\" class=\"avatar\">\n <ng-content select=\"kirby-avatar,kirby-progress-circle\"></ng-content>\n</div>\n\n<div *ngIf=\"!!flag\" class=\"flag\">\n <ng-content select=\"kirby-flag\"></ng-content>\n</div>\n\n<div class=\"container\">\n <!-- Title and value - title: -->\n <h1 *ngIf=\"!!title && !!value\" #titleElement class=\"title kirby-text-medium\" [class.clickable]=\"titleClick.observed\" [class.has-icon]=\"!!titleActionIconTemplate\" (click)=\"onTitleClick($event)\">\n {{ title }}\n <ng-container *ngTemplateOutlet=\"titleActionIconTemplate\"></ng-container>\n </h1>\n <div class=\"title-container\">\n <!-- Only title, no value: -->\n <h1 *ngIf=\"!!title && !value\" #titleElement class=\"title\" [kirbyFitHeading]=\"fitHeadingConfig\">\n {{ title }}\n </h1>\n \n <!-- Title and value - value: -->\n <h3 *ngIf=\"!!value\" class=\"value kirby-text-display-3\" [kirbyFitHeading]=\"fitHeadingConfig\">{{ value }}<span class=\"value-unit semi-dark-text\" *ngIf=\"!!valueUnit\">{{ valueUnit }}</span></h3>\n \n <!-- Subtitles: -->\n <div *ngIf=\"!!subtitle1\" class=\"subtitle1 kirby-text-small\">\n {{ subtitle1 }}\n </div>\n <div *ngIf=\"!!subtitle2\" class=\"subtitle2 kirby-text-small\">\n {{ subtitle2 }}\n </div>\n\n <!-- Custom section -->\n <div\n *ngIf=\"!!customSectionTemplate\"\n class=\"custom-section\"\n >\n <ng-container *ngTemplateOutlet=\"customSectionTemplate\"></ng-container>\n </div>\n </div>\n \n <!-- Actions: -->\n <div\n *ngIf=\"!!actionsTemplate\"\n #actionsElement\n class=\"actions\"\n [class.emphasize]=\"emphasizeActions\"\n >\n <ng-container *ngTemplateOutlet=\"actionsTemplate; injector: _actionGroupInjector\"></ng-container>\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:column;margin-top:16px;margin-bottom:32px}@media (min-width: 768px){:host{margin-top:24px}}.container{display:flex;flex-direction:column;align-items:flex-start;max-width:100%}@media (min-width: 768px){:host(:not(.single-column)) .container{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);column-gap:16px}:host(:not(.single-column)) .title-container{grid-column-start:1}}:host(.centered){align-items:center}:host(.centered) .container{align-items:center}:host(.centered) .container>h1.title{text-align:center}:host(.centered) .container>h1.title.has-icon{justify-content:center}:host(.centered) .title-container{align-items:center;text-align:center}@media (min-width: 768px){:host(.centered):not(.single-column) .container{grid-template-columns:minmax(0,1fr) minmax(0,2fr) minmax(0,1fr);align-self:stretch}:host(.centered):not(.single-column) .actions{align-self:flex-start}:host(.centered):not(.single-column) .container>h1.title,:host(.centered):not(.single-column) .title-container{grid-column-start:2}}.actions{margin-top:24px}@media (max-width: 767px){.actions:not(.emphasize){display:none}}@media (min-width: 768px){:host(:not(.single-column)) .actions{margin:0 4px;display:flex;justify-content:flex-end}}.avatar,.flag,.title-container,.container>h1.title{padding:0 16px}.title-container{display:flex;flex-direction:column;overflow:hidden}.avatar{margin-bottom:16px}.flag{margin-bottom:4px}.title{margin-bottom:2px}.title.clickable{cursor:pointer}.title.has-icon{display:flex;flex-direction:row;align-items:center}.value{max-width:100%;margin-bottom:4px}.value-unit{font-weight:initial;color:var(--kirby-text-color-semi-dark);margin-left:4px;font-size:50%}.subtitle1,.subtitle2{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:100%}.custom-section{margin-top:8px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.FitHeadingDirective, selector: "h1[kirbyFitHeading],h2[kirbyFitHeading],h3[kirbyFitHeading]", inputs: ["kirbyFitHeading"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
86
|
+
/** @nocollapse */ HeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: HeaderComponent, selector: "kirby-header", inputs: { centered: "centered", titleMaxLines: "titleMaxLines", emphasizeActions: "emphasizeActions", title: "title", value: "value", valueUnit: "valueUnit", subtitle1: "subtitle1", subtitle2: "subtitle2", hasInteractiveTitle: "hasInteractiveTitle" }, outputs: { titleClick: "titleClick" }, host: { properties: { "class.centered": "this.centered" } }, queries: [{ propertyName: "avatar", first: true, predicate: AvatarComponent, descendants: true }, { propertyName: "progressCircle", first: true, predicate: ProgressCircleComponent, descendants: true }, { propertyName: "flag", first: true, predicate: FlagComponent, descendants: true }, { propertyName: "actionsTemplate", first: true, predicate: HeaderActionsDirective, descendants: true, read: (TemplateRef) }, { propertyName: "customSectionTemplate", first: true, predicate: HeaderCustomSectionDirective, descendants: true, read: (TemplateRef) }, { propertyName: "titleActionIconTemplate", first: true, predicate: HeaderTitleActionIconDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "titleElement", first: true, predicate: ["titleElement"], descendants: true, read: ElementRef }, { propertyName: "actionsElement", first: true, predicate: ["actionsElement"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div *ngIf=\"!!avatar || !!progressCircle\" class=\"avatar\">\n <ng-content select=\"kirby-avatar,kirby-progress-circle\"></ng-content>\n</div>\n\n<div *ngIf=\"!!flag\" class=\"flag\">\n <ng-content select=\"kirby-flag\"></ng-content>\n</div>\n\n<div class=\"container\">\n <!-- Title and value - title: -->\n <h1 *ngIf=\"!!title && !!value\" #titleElement class=\"title kirby-text-medium\" [class.clickable]=\"hasInteractiveTitle !== false && titleClick.observed\" [class.has-icon]=\"!!titleActionIconTemplate\" (click)=\"onTitleClick($event)\">\n {{ title }}\n <ng-container *ngTemplateOutlet=\"titleActionIconTemplate\"></ng-container>\n </h1>\n <div class=\"title-container\">\n <!-- Only title, no value: -->\n <h1 *ngIf=\"!!title && !value\" #titleElement class=\"title\" [kirbyFitHeading]=\"fitHeadingConfig\">\n {{ title }}\n </h1>\n \n <!-- Title and value - value: -->\n <h3 *ngIf=\"!!value\" class=\"value kirby-text-display-3\" [kirbyFitHeading]=\"fitHeadingConfig\">{{ value }}<span class=\"value-unit semi-dark-text\" *ngIf=\"!!valueUnit\">{{ valueUnit }}</span></h3>\n \n <!-- Subtitles: -->\n <div *ngIf=\"!!subtitle1\" class=\"subtitle1 kirby-text-small\">\n {{ subtitle1 }}\n </div>\n <div *ngIf=\"!!subtitle2\" class=\"subtitle2 kirby-text-small\">\n {{ subtitle2 }}\n </div>\n\n <!-- Custom section -->\n <div\n *ngIf=\"!!customSectionTemplate\"\n class=\"custom-section\"\n >\n <ng-container *ngTemplateOutlet=\"customSectionTemplate\"></ng-container>\n </div>\n </div>\n \n <!-- Actions: -->\n <div\n *ngIf=\"!!actionsTemplate\"\n #actionsElement\n class=\"actions\"\n [class.emphasize]=\"emphasizeActions\"\n >\n <ng-container *ngTemplateOutlet=\"actionsTemplate; injector: _actionGroupInjector\"></ng-container>\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:column;margin-top:16px;margin-bottom:32px}@media (min-width: 768px){:host{margin-top:24px}}.container{display:flex;flex-direction:column;align-items:flex-start;max-width:100%}@media (min-width: 768px){:host(:not(.single-column)) .container{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);column-gap:16px}:host(:not(.single-column)) .title-container{grid-column-start:1}}:host(.centered){align-items:center}:host(.centered) .container{align-items:center}:host(.centered) .container>h1.title{text-align:center}:host(.centered) .container>h1.title.has-icon{justify-content:center}:host(.centered) .title-container{align-items:center;text-align:center}@media (min-width: 768px){:host(.centered):not(.single-column) .container{grid-template-columns:minmax(0,1fr) minmax(0,2fr) minmax(0,1fr);align-self:stretch}:host(.centered):not(.single-column) .actions{align-self:flex-start}:host(.centered):not(.single-column) .container>h1.title,:host(.centered):not(.single-column) .title-container{grid-column-start:2}}.actions{margin-top:24px}@media (max-width: 767px){.actions:not(.emphasize){display:none}}@media (min-width: 768px){:host(:not(.single-column)) .actions{margin:0 4px;display:flex;justify-content:flex-end}}.avatar,.flag,.title-container,.container>h1.title{padding:0 16px}.title-container{display:flex;flex-direction:column;overflow:hidden}.avatar{margin-bottom:16px}.flag{margin-bottom:4px}.title{margin-bottom:2px}.title.clickable{cursor:pointer}.title.has-icon{display:flex;flex-direction:row;align-items:center}.value{max-width:100%;margin-bottom:4px}.value-unit{font-weight:initial;color:var(--kirby-text-color-semi-dark);margin-left:4px;font-size:50%}.subtitle1,.subtitle2{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:100%}.custom-section{margin-top:8px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.FitHeadingDirective, selector: "h1[kirbyFitHeading],h2[kirbyFitHeading],h3[kirbyFitHeading]", inputs: ["kirbyFitHeading"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
87
87
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: HeaderComponent, decorators: [{
|
|
88
88
|
type: Component,
|
|
89
|
-
args: [{ selector: 'kirby-header', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"!!avatar || !!progressCircle\" class=\"avatar\">\n <ng-content select=\"kirby-avatar,kirby-progress-circle\"></ng-content>\n</div>\n\n<div *ngIf=\"!!flag\" class=\"flag\">\n <ng-content select=\"kirby-flag\"></ng-content>\n</div>\n\n<div class=\"container\">\n <!-- Title and value - title: -->\n <h1 *ngIf=\"!!title && !!value\" #titleElement class=\"title kirby-text-medium\" [class.clickable]=\"titleClick.observed\" [class.has-icon]=\"!!titleActionIconTemplate\" (click)=\"onTitleClick($event)\">\n {{ title }}\n <ng-container *ngTemplateOutlet=\"titleActionIconTemplate\"></ng-container>\n </h1>\n <div class=\"title-container\">\n <!-- Only title, no value: -->\n <h1 *ngIf=\"!!title && !value\" #titleElement class=\"title\" [kirbyFitHeading]=\"fitHeadingConfig\">\n {{ title }}\n </h1>\n \n <!-- Title and value - value: -->\n <h3 *ngIf=\"!!value\" class=\"value kirby-text-display-3\" [kirbyFitHeading]=\"fitHeadingConfig\">{{ value }}<span class=\"value-unit semi-dark-text\" *ngIf=\"!!valueUnit\">{{ valueUnit }}</span></h3>\n \n <!-- Subtitles: -->\n <div *ngIf=\"!!subtitle1\" class=\"subtitle1 kirby-text-small\">\n {{ subtitle1 }}\n </div>\n <div *ngIf=\"!!subtitle2\" class=\"subtitle2 kirby-text-small\">\n {{ subtitle2 }}\n </div>\n\n <!-- Custom section -->\n <div\n *ngIf=\"!!customSectionTemplate\"\n class=\"custom-section\"\n >\n <ng-container *ngTemplateOutlet=\"customSectionTemplate\"></ng-container>\n </div>\n </div>\n \n <!-- Actions: -->\n <div\n *ngIf=\"!!actionsTemplate\"\n #actionsElement\n class=\"actions\"\n [class.emphasize]=\"emphasizeActions\"\n >\n <ng-container *ngTemplateOutlet=\"actionsTemplate; injector: _actionGroupInjector\"></ng-container>\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:column;margin-top:16px;margin-bottom:32px}@media (min-width: 768px){:host{margin-top:24px}}.container{display:flex;flex-direction:column;align-items:flex-start;max-width:100%}@media (min-width: 768px){:host(:not(.single-column)) .container{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);column-gap:16px}:host(:not(.single-column)) .title-container{grid-column-start:1}}:host(.centered){align-items:center}:host(.centered) .container{align-items:center}:host(.centered) .container>h1.title{text-align:center}:host(.centered) .container>h1.title.has-icon{justify-content:center}:host(.centered) .title-container{align-items:center;text-align:center}@media (min-width: 768px){:host(.centered):not(.single-column) .container{grid-template-columns:minmax(0,1fr) minmax(0,2fr) minmax(0,1fr);align-self:stretch}:host(.centered):not(.single-column) .actions{align-self:flex-start}:host(.centered):not(.single-column) .container>h1.title,:host(.centered):not(.single-column) .title-container{grid-column-start:2}}.actions{margin-top:24px}@media (max-width: 767px){.actions:not(.emphasize){display:none}}@media (min-width: 768px){:host(:not(.single-column)) .actions{margin:0 4px;display:flex;justify-content:flex-end}}.avatar,.flag,.title-container,.container>h1.title{padding:0 16px}.title-container{display:flex;flex-direction:column;overflow:hidden}.avatar{margin-bottom:16px}.flag{margin-bottom:4px}.title{margin-bottom:2px}.title.clickable{cursor:pointer}.title.has-icon{display:flex;flex-direction:row;align-items:center}.value{max-width:100%;margin-bottom:4px}.value-unit{font-weight:initial;color:var(--kirby-text-color-semi-dark);margin-left:4px;font-size:50%}.subtitle1,.subtitle2{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:100%}.custom-section{margin-top:8px}\n"] }]
|
|
89
|
+
args: [{ selector: 'kirby-header', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"!!avatar || !!progressCircle\" class=\"avatar\">\n <ng-content select=\"kirby-avatar,kirby-progress-circle\"></ng-content>\n</div>\n\n<div *ngIf=\"!!flag\" class=\"flag\">\n <ng-content select=\"kirby-flag\"></ng-content>\n</div>\n\n<div class=\"container\">\n <!-- Title and value - title: -->\n <h1 *ngIf=\"!!title && !!value\" #titleElement class=\"title kirby-text-medium\" [class.clickable]=\"hasInteractiveTitle !== false && titleClick.observed\" [class.has-icon]=\"!!titleActionIconTemplate\" (click)=\"onTitleClick($event)\">\n {{ title }}\n <ng-container *ngTemplateOutlet=\"titleActionIconTemplate\"></ng-container>\n </h1>\n <div class=\"title-container\">\n <!-- Only title, no value: -->\n <h1 *ngIf=\"!!title && !value\" #titleElement class=\"title\" [kirbyFitHeading]=\"fitHeadingConfig\">\n {{ title }}\n </h1>\n \n <!-- Title and value - value: -->\n <h3 *ngIf=\"!!value\" class=\"value kirby-text-display-3\" [kirbyFitHeading]=\"fitHeadingConfig\">{{ value }}<span class=\"value-unit semi-dark-text\" *ngIf=\"!!valueUnit\">{{ valueUnit }}</span></h3>\n \n <!-- Subtitles: -->\n <div *ngIf=\"!!subtitle1\" class=\"subtitle1 kirby-text-small\">\n {{ subtitle1 }}\n </div>\n <div *ngIf=\"!!subtitle2\" class=\"subtitle2 kirby-text-small\">\n {{ subtitle2 }}\n </div>\n\n <!-- Custom section -->\n <div\n *ngIf=\"!!customSectionTemplate\"\n class=\"custom-section\"\n >\n <ng-container *ngTemplateOutlet=\"customSectionTemplate\"></ng-container>\n </div>\n </div>\n \n <!-- Actions: -->\n <div\n *ngIf=\"!!actionsTemplate\"\n #actionsElement\n class=\"actions\"\n [class.emphasize]=\"emphasizeActions\"\n >\n <ng-container *ngTemplateOutlet=\"actionsTemplate; injector: _actionGroupInjector\"></ng-container>\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:column;margin-top:16px;margin-bottom:32px}@media (min-width: 768px){:host{margin-top:24px}}.container{display:flex;flex-direction:column;align-items:flex-start;max-width:100%}@media (min-width: 768px){:host(:not(.single-column)) .container{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);column-gap:16px}:host(:not(.single-column)) .title-container{grid-column-start:1}}:host(.centered){align-items:center}:host(.centered) .container{align-items:center}:host(.centered) .container>h1.title{text-align:center}:host(.centered) .container>h1.title.has-icon{justify-content:center}:host(.centered) .title-container{align-items:center;text-align:center}@media (min-width: 768px){:host(.centered):not(.single-column) .container{grid-template-columns:minmax(0,1fr) minmax(0,2fr) minmax(0,1fr);align-self:stretch}:host(.centered):not(.single-column) .actions{align-self:flex-start}:host(.centered):not(.single-column) .container>h1.title,:host(.centered):not(.single-column) .title-container{grid-column-start:2}}.actions{margin-top:24px}@media (max-width: 767px){.actions:not(.emphasize){display:none}}@media (min-width: 768px){:host(:not(.single-column)) .actions{margin:0 4px;display:flex;justify-content:flex-end}}.avatar,.flag,.title-container,.container>h1.title{padding:0 16px}.title-container{display:flex;flex-direction:column;overflow:hidden}.avatar{margin-bottom:16px}.flag{margin-bottom:4px}.title{margin-bottom:2px}.title.clickable{cursor:pointer}.title.has-icon{display:flex;flex-direction:row;align-items:center}.value{max-width:100%;margin-bottom:4px}.value-unit{font-weight:initial;color:var(--kirby-text-color-semi-dark);margin-left:4px;font-size:50%}.subtitle1,.subtitle2{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:100%}.custom-section{margin-top:8px}\n"] }]
|
|
90
90
|
}], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { centered: [{
|
|
91
91
|
type: HostBinding,
|
|
92
92
|
args: ['class.centered']
|
|
@@ -130,6 +130,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
|
|
|
130
130
|
type: Input
|
|
131
131
|
}], subtitle2: [{
|
|
132
132
|
type: Input
|
|
133
|
+
}], hasInteractiveTitle: [{
|
|
134
|
+
type: Input
|
|
133
135
|
}], titleClick: [{
|
|
134
136
|
type: Output
|
|
135
137
|
}] } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kirbydesign-designsystem-header.mjs","sources":["../../../../libs/designsystem/header/src/header.component.ts","../../../../libs/designsystem/header/src/header.component.html","../../../../libs/designsystem/header/src/header.module.ts","../../../../libs/designsystem/header/src/kirbydesign-designsystem-header.ts"],"sourcesContent":["import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n Directive,\n ElementRef,\n EventEmitter,\n HostBinding,\n Injector,\n Input,\n OnInit,\n Output,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\n\nimport { ACTIONGROUP_CONFIG, ActionGroupConfig } from '@kirbydesign/designsystem/action-group';\nimport { AvatarComponent } from '@kirbydesign/designsystem/avatar';\nimport { FlagComponent } from '@kirbydesign/designsystem/flag';\nimport { ProgressCircleComponent } from '@kirbydesign/designsystem/progress-circle';\nimport type { FitHeadingConfig } from '@kirbydesign/designsystem/shared';\n\n@Directive({\n selector: '[kirbyHeaderActions]',\n})\nexport class HeaderActionsDirective {}\n\n@Directive({\n selector: '[kirbyHeaderCustomSection]',\n})\nexport class HeaderCustomSectionDirective {}\n\n@Directive({\n selector: '[kirbyHeaderTitleActionIcon]',\n})\nexport class HeaderTitleActionIconDirective {}\n\n@Component({\n selector: 'kirby-header',\n templateUrl: './header.component.html',\n styleUrls: ['./header.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HeaderComponent implements AfterContentInit, OnInit {\n @HostBinding('class.centered')\n @Input()\n centered?: boolean;\n\n @Input() titleMaxLines: number;\n @Input() emphasizeActions = false;\n\n fitHeadingConfig: FitHeadingConfig;\n\n @ContentChild(AvatarComponent)\n avatar: AvatarComponent;\n\n @ContentChild(ProgressCircleComponent)\n progressCircle: ProgressCircleComponent;\n\n @ContentChild(FlagComponent)\n flag: FlagComponent;\n\n @ViewChild('titleElement', { read: ElementRef })\n titleElement?: ElementRef<HTMLHeadingElement>;\n\n @ViewChild('actionsElement', { read: ElementRef })\n actionsElement?: ElementRef<HTMLDivElement>;\n\n @ContentChild(HeaderActionsDirective, { read: TemplateRef<HeaderActionsDirective> })\n actionsTemplate?: TemplateRef<HeaderActionsDirective>;\n\n @ContentChild(HeaderCustomSectionDirective, { read: TemplateRef<HeaderCustomSectionDirective> })\n customSectionTemplate?: TemplateRef<HeaderCustomSectionDirective>;\n\n @ContentChild(HeaderTitleActionIconDirective, { read: TemplateRef })\n titleActionIconTemplate: TemplateRef<HeaderTitleActionIconDirective>;\n\n @Input() title: string = null;\n @Input() value: string = null;\n @Input() valueUnit: string = null;\n @Input() subtitle1: string = null;\n @Input() subtitle2: string = null;\n\n @Output() titleClick = new EventEmitter<PointerEvent>();\n\n onTitleClick(event: PointerEvent) {\n this.titleClick.emit(event);\n }\n\n _actionGroupInjector: Injector;\n\n private actionGroupConfig: ActionGroupConfig;\n\n constructor(private injector: Injector) {}\n\n ngOnInit(): void {\n this.actionGroupConfig = {\n defaultVisibleActions: this.emphasizeActions ? undefined : 1,\n };\n\n this._actionGroupInjector = Injector.create({\n providers: [\n {\n provide: ACTIONGROUP_CONFIG,\n useValue: this.actionGroupConfig,\n },\n ],\n parent: this.injector,\n });\n\n if (this.titleMaxLines > 0) {\n this.fitHeadingConfig = {\n maxLines: this.titleMaxLines,\n };\n }\n }\n\n ngAfterContentInit(): void {\n // If an avatar is present we default to centered layout - unless configured otherwise:\n if (this.avatar && this.centered === undefined) {\n this.centered = true;\n }\n\n if (this.centered) {\n this.actionGroupConfig.isCondensed = true;\n }\n }\n}\n","<div *ngIf=\"!!avatar || !!progressCircle\" class=\"avatar\">\n <ng-content select=\"kirby-avatar,kirby-progress-circle\"></ng-content>\n</div>\n\n<div *ngIf=\"!!flag\" class=\"flag\">\n <ng-content select=\"kirby-flag\"></ng-content>\n</div>\n\n<div class=\"container\">\n <!-- Title and value - title: -->\n <h1 *ngIf=\"!!title && !!value\" #titleElement class=\"title kirby-text-medium\" [class.clickable]=\"titleClick.observed\" [class.has-icon]=\"!!titleActionIconTemplate\" (click)=\"onTitleClick($event)\">\n {{ title }}\n <ng-container *ngTemplateOutlet=\"titleActionIconTemplate\"></ng-container>\n </h1>\n <div class=\"title-container\">\n <!-- Only title, no value: -->\n <h1 *ngIf=\"!!title && !value\" #titleElement class=\"title\" [kirbyFitHeading]=\"fitHeadingConfig\">\n {{ title }}\n </h1>\n \n <!-- Title and value - value: -->\n <h3 *ngIf=\"!!value\" class=\"value kirby-text-display-3\" [kirbyFitHeading]=\"fitHeadingConfig\">{{ value }}<span class=\"value-unit semi-dark-text\" *ngIf=\"!!valueUnit\">{{ valueUnit }}</span></h3>\n \n <!-- Subtitles: -->\n <div *ngIf=\"!!subtitle1\" class=\"subtitle1 kirby-text-small\">\n {{ subtitle1 }}\n </div>\n <div *ngIf=\"!!subtitle2\" class=\"subtitle2 kirby-text-small\">\n {{ subtitle2 }}\n </div>\n\n <!-- Custom section -->\n <div\n *ngIf=\"!!customSectionTemplate\"\n class=\"custom-section\"\n >\n <ng-container *ngTemplateOutlet=\"customSectionTemplate\"></ng-container>\n </div>\n </div>\n \n <!-- Actions: -->\n <div\n *ngIf=\"!!actionsTemplate\"\n #actionsElement\n class=\"actions\"\n [class.emphasize]=\"emphasizeActions\"\n >\n <ng-container *ngTemplateOutlet=\"actionsTemplate; injector: _actionGroupInjector\"></ng-container>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FitHeadingDirective } from '@kirbydesign/designsystem/shared';\n\nimport {\n HeaderActionsDirective,\n HeaderComponent,\n HeaderCustomSectionDirective,\n HeaderTitleActionIconDirective,\n} from './header.component';\n\nconst declarations = [\n HeaderComponent,\n HeaderActionsDirective,\n HeaderCustomSectionDirective,\n HeaderTitleActionIconDirective,\n];\n\n@NgModule({\n declarations: declarations,\n imports: [CommonModule, FitHeadingDirective],\n exports: declarations,\n})\nexport class HeaderModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kirbydesign-designsystem-header.mjs","sources":["../../../../libs/designsystem/header/src/header.component.ts","../../../../libs/designsystem/header/src/header.component.html","../../../../libs/designsystem/header/src/header.module.ts","../../../../libs/designsystem/header/src/kirbydesign-designsystem-header.ts"],"sourcesContent":["import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n Directive,\n ElementRef,\n EventEmitter,\n HostBinding,\n Injector,\n Input,\n OnInit,\n Output,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\n\nimport { ACTIONGROUP_CONFIG, ActionGroupConfig } from '@kirbydesign/designsystem/action-group';\nimport { AvatarComponent } from '@kirbydesign/designsystem/avatar';\nimport { FlagComponent } from '@kirbydesign/designsystem/flag';\nimport { ProgressCircleComponent } from '@kirbydesign/designsystem/progress-circle';\nimport type { FitHeadingConfig } from '@kirbydesign/designsystem/shared';\n\n@Directive({\n selector: '[kirbyHeaderActions]',\n})\nexport class HeaderActionsDirective {}\n\n@Directive({\n selector: '[kirbyHeaderCustomSection]',\n})\nexport class HeaderCustomSectionDirective {}\n\n@Directive({\n selector: '[kirbyHeaderTitleActionIcon]',\n})\nexport class HeaderTitleActionIconDirective {}\n\n@Component({\n selector: 'kirby-header',\n templateUrl: './header.component.html',\n styleUrls: ['./header.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HeaderComponent implements AfterContentInit, OnInit {\n @HostBinding('class.centered')\n @Input()\n centered?: boolean;\n\n @Input() titleMaxLines: number;\n @Input() emphasizeActions = false;\n\n fitHeadingConfig: FitHeadingConfig;\n\n @ContentChild(AvatarComponent)\n avatar: AvatarComponent;\n\n @ContentChild(ProgressCircleComponent)\n progressCircle: ProgressCircleComponent;\n\n @ContentChild(FlagComponent)\n flag: FlagComponent;\n\n @ViewChild('titleElement', { read: ElementRef })\n titleElement?: ElementRef<HTMLHeadingElement>;\n\n @ViewChild('actionsElement', { read: ElementRef })\n actionsElement?: ElementRef<HTMLDivElement>;\n\n @ContentChild(HeaderActionsDirective, { read: TemplateRef<HeaderActionsDirective> })\n actionsTemplate?: TemplateRef<HeaderActionsDirective>;\n\n @ContentChild(HeaderCustomSectionDirective, { read: TemplateRef<HeaderCustomSectionDirective> })\n customSectionTemplate?: TemplateRef<HeaderCustomSectionDirective>;\n\n @ContentChild(HeaderTitleActionIconDirective, { read: TemplateRef })\n titleActionIconTemplate: TemplateRef<HeaderTitleActionIconDirective>;\n\n @Input() title: string = null;\n @Input() value: string = null;\n @Input() valueUnit: string = null;\n @Input() subtitle1: string = null;\n @Input() subtitle2: string = null;\n @Input() hasInteractiveTitle?: boolean;\n\n @Output() titleClick = new EventEmitter<PointerEvent>();\n\n onTitleClick(event: PointerEvent) {\n this.titleClick.emit(event);\n }\n\n _actionGroupInjector: Injector;\n\n private actionGroupConfig: ActionGroupConfig;\n\n constructor(private injector: Injector) {}\n\n ngOnInit(): void {\n this.actionGroupConfig = {\n defaultVisibleActions: this.emphasizeActions ? undefined : 1,\n };\n\n this._actionGroupInjector = Injector.create({\n providers: [\n {\n provide: ACTIONGROUP_CONFIG,\n useValue: this.actionGroupConfig,\n },\n ],\n parent: this.injector,\n });\n\n if (this.titleMaxLines > 0) {\n this.fitHeadingConfig = {\n maxLines: this.titleMaxLines,\n };\n }\n }\n\n ngAfterContentInit(): void {\n // If an avatar is present we default to centered layout - unless configured otherwise:\n if (this.avatar && this.centered === undefined) {\n this.centered = true;\n }\n\n if (this.centered) {\n this.actionGroupConfig.isCondensed = true;\n }\n }\n}\n","<div *ngIf=\"!!avatar || !!progressCircle\" class=\"avatar\">\n <ng-content select=\"kirby-avatar,kirby-progress-circle\"></ng-content>\n</div>\n\n<div *ngIf=\"!!flag\" class=\"flag\">\n <ng-content select=\"kirby-flag\"></ng-content>\n</div>\n\n<div class=\"container\">\n <!-- Title and value - title: -->\n <h1 *ngIf=\"!!title && !!value\" #titleElement class=\"title kirby-text-medium\" [class.clickable]=\"hasInteractiveTitle !== false && titleClick.observed\" [class.has-icon]=\"!!titleActionIconTemplate\" (click)=\"onTitleClick($event)\">\n {{ title }}\n <ng-container *ngTemplateOutlet=\"titleActionIconTemplate\"></ng-container>\n </h1>\n <div class=\"title-container\">\n <!-- Only title, no value: -->\n <h1 *ngIf=\"!!title && !value\" #titleElement class=\"title\" [kirbyFitHeading]=\"fitHeadingConfig\">\n {{ title }}\n </h1>\n \n <!-- Title and value - value: -->\n <h3 *ngIf=\"!!value\" class=\"value kirby-text-display-3\" [kirbyFitHeading]=\"fitHeadingConfig\">{{ value }}<span class=\"value-unit semi-dark-text\" *ngIf=\"!!valueUnit\">{{ valueUnit }}</span></h3>\n \n <!-- Subtitles: -->\n <div *ngIf=\"!!subtitle1\" class=\"subtitle1 kirby-text-small\">\n {{ subtitle1 }}\n </div>\n <div *ngIf=\"!!subtitle2\" class=\"subtitle2 kirby-text-small\">\n {{ subtitle2 }}\n </div>\n\n <!-- Custom section -->\n <div\n *ngIf=\"!!customSectionTemplate\"\n class=\"custom-section\"\n >\n <ng-container *ngTemplateOutlet=\"customSectionTemplate\"></ng-container>\n </div>\n </div>\n \n <!-- Actions: -->\n <div\n *ngIf=\"!!actionsTemplate\"\n #actionsElement\n class=\"actions\"\n [class.emphasize]=\"emphasizeActions\"\n >\n <ng-container *ngTemplateOutlet=\"actionsTemplate; injector: _actionGroupInjector\"></ng-container>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FitHeadingDirective } from '@kirbydesign/designsystem/shared';\n\nimport {\n HeaderActionsDirective,\n HeaderComponent,\n HeaderCustomSectionDirective,\n HeaderTitleActionIconDirective,\n} from './header.component';\n\nconst declarations = [\n HeaderComponent,\n HeaderActionsDirective,\n HeaderCustomSectionDirective,\n HeaderTitleActionIconDirective,\n];\n\n@NgModule({\n declarations: declarations,\n imports: [CommonModule, FitHeadingDirective],\n exports: declarations,\n})\nexport class HeaderModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i1 from '@angular/common';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { ElementRef, Component, ChangeDetectionStrategy, Input, ViewChild, ContentChild
|
|
4
|
+
import { ElementRef, Component, ChangeDetectionStrategy, Input, ViewChild, ContentChild } from '@angular/core';
|
|
5
5
|
import { ItemModule } from '@kirbydesign/designsystem/item';
|
|
6
6
|
import * as i3 from '@kirbydesign/designsystem/card';
|
|
7
7
|
import { CardModule } from '@kirbydesign/designsystem/card';
|
|
@@ -11,9 +11,11 @@ import { ButtonSize, ButtonComponent } from '@kirbydesign/designsystem/button';
|
|
|
11
11
|
import { FloatingOffset, FloatingDirective } from '@kirbydesign/designsystem/shared/floating';
|
|
12
12
|
|
|
13
13
|
class MenuComponent {
|
|
14
|
-
constructor(cdf, elementRef) {
|
|
14
|
+
constructor(cdf, elementRef, zone, renderer) {
|
|
15
15
|
this.cdf = cdf;
|
|
16
16
|
this.elementRef = elementRef;
|
|
17
|
+
this.zone = zone;
|
|
18
|
+
this.renderer = renderer;
|
|
17
19
|
this.isDisabled = false;
|
|
18
20
|
this.buttonSize = ButtonSize.MD;
|
|
19
21
|
this.placement = 'bottom-start';
|
|
@@ -24,21 +26,31 @@ class MenuComponent {
|
|
|
24
26
|
this.closeOnSelect = true;
|
|
25
27
|
this.closeOnEscapeKey = true;
|
|
26
28
|
this.closeOnBackdrop = true;
|
|
29
|
+
this.shift = true;
|
|
27
30
|
this.FloatingOffset = FloatingOffset;
|
|
28
31
|
}
|
|
29
32
|
ngAfterViewInit() {
|
|
30
33
|
this.cdf.detectChanges(); // Sets the updated reference for kirby-floating
|
|
34
|
+
this.zone.runOutsideAngular(() => {
|
|
35
|
+
/*
|
|
36
|
+
* Listen for ionScroll outside of Angular's change detection to
|
|
37
|
+
* avoid a change detection cycle for every scroll-event fired
|
|
38
|
+
*/
|
|
39
|
+
this.scrollListenerDisposeFn = this.renderer.listen(document, 'ionScroll', () => {
|
|
40
|
+
this.floatingDirective.hide();
|
|
41
|
+
});
|
|
42
|
+
});
|
|
31
43
|
}
|
|
32
|
-
|
|
33
|
-
this.
|
|
44
|
+
ngOnDestroy() {
|
|
45
|
+
this.scrollListenerDisposeFn?.();
|
|
34
46
|
}
|
|
35
47
|
}
|
|
36
|
-
/** @nocollapse */ MenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MenuComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
37
|
-
/** @nocollapse */ MenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: MenuComponent, isStandalone: true, selector: "kirby-menu", inputs: { isDisabled: "isDisabled", buttonSize: "buttonSize", placement: "placement", attentionLevel: "attentionLevel", triggers: "triggers", DOMPortalOutlet: "DOMPortalOutlet", portalOutletConfig: "portalOutletConfig", autoPlacement: "autoPlacement", closeOnSelect: "closeOnSelect", closeOnEscapeKey: "closeOnEscapeKey", closeOnBackdrop: "closeOnBackdrop",
|
|
48
|
+
/** @nocollapse */ MenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MenuComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
|
|
49
|
+
/** @nocollapse */ MenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: MenuComponent, isStandalone: true, selector: "kirby-menu", inputs: { isDisabled: "isDisabled", buttonSize: "buttonSize", placement: "placement", attentionLevel: "attentionLevel", triggers: "triggers", DOMPortalOutlet: "DOMPortalOutlet", portalOutletConfig: "portalOutletConfig", autoPlacement: "autoPlacement", closeOnSelect: "closeOnSelect", closeOnEscapeKey: "closeOnEscapeKey", closeOnBackdrop: "closeOnBackdrop", shift: "shift", minWidth: "minWidth" }, queries: [{ propertyName: "userProvidedButton", first: true, predicate: ButtonComponent, descendants: true, read: ElementRef }], viewQueries: [{ propertyName: "buttonContainerElement", first: true, predicate: ["buttonContainer"], descendants: true, read: ElementRef }, { propertyName: "defaultButtonElement", first: true, predicate: ["defaultButton"], descendants: true, read: ElementRef }, { propertyName: "floatingDirective", first: true, predicate: FloatingDirective, descendants: true }], ngImport: i0, template: "<div class=\"button-container\" #buttonContainer>\n <ng-content select=\"button[kirby-button]\"></ng-content>\n <ng-container *ngIf=\"!userProvidedButton\">\n <button\n kirby-button\n [size]=\"buttonSize\"\n [disabled]=\"isDisabled\"\n type=\"button\"\n [attentionLevel]=\"attentionLevel\"\n #defaultButton\n >\n <kirby-icon [name]=\"'more'\"></kirby-icon>\n </button>\n </ng-container>\n</div>\n<kirby-card\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 [ngStyle]=\"{\n minWidth: minWidth ? minWidth + 'px' : null\n }\"\n class=\"menu-popover\"\n>\n <ng-content select=\"kirby-item\"></ng-content>\n</kirby-card>\n", styles: [":host{position:relative}.button-container{display:inline-block}kirby-card{max-height:352px;overflow-y:auto;min-width:240px;max-width:460px}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "button[kirby-button],Button[kirby-button]", inputs: ["attentionLevel", "noDecoration", "themeColor", "expand", "isFloating", "size", "showIconOnly"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: FloatingDirective, selector: "[kirbyFloating]", inputs: ["reference", "placement", "strategy", "triggers", "DOMPortalOutlet", "portalOutletConfig", "isDisabled", "offset", "shift", "autoPlacement", "closeOnSelect", "closeOnEscapeKey", "closeOnBackdrop"], outputs: ["displayChanged"] }, { kind: "ngmodule", type: IconModule }, { kind: "component", type: i2.IconComponent, selector: "kirby-icon", inputs: ["size", "name", "customName"] }, { kind: "ngmodule", type: CardModule }, { kind: "component", type: i3.CardComponent, selector: "kirby-card", inputs: ["title", "subtitle", "backgroundImageUrl", "hasPadding", "sizes", "flat"] }, { kind: "ngmodule", type: ItemModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
38
50
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MenuComponent, decorators: [{
|
|
39
51
|
type: Component,
|
|
40
|
-
args: [{ selector: 'kirby-menu', standalone: true, imports: [ButtonComponent, CommonModule, FloatingDirective, IconModule, CardModule, ItemModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"button-container\" #buttonContainer>\n <ng-content select=\"button[kirby-button]\"></ng-content>\n <ng-container *ngIf=\"!userProvidedButton\">\n <button\n kirby-button\n [size]=\"buttonSize\"\n [disabled]=\"isDisabled\"\n type=\"button\"\n [attentionLevel]=\"attentionLevel\"\n #defaultButton\n >\n <kirby-icon [name]=\"'more'\"></kirby-icon>\n </button>\n </ng-container>\n</div>\n<kirby-card\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 [ngStyle]=\"{\n minWidth: minWidth ? minWidth + 'px' : null\n }\"\n class=\"menu-popover\"\n>\n <ng-content select=\"kirby-item\"></ng-content>\n</kirby-card>\n", styles: [":host{position:relative}.button-container{display:inline-block}kirby-card{max-height:352px;overflow-y:auto;min-width:240px;max-width:460px}\n"] }]
|
|
41
|
-
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { isDisabled: [{
|
|
52
|
+
args: [{ selector: 'kirby-menu', standalone: true, imports: [ButtonComponent, CommonModule, FloatingDirective, IconModule, CardModule, ItemModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"button-container\" #buttonContainer>\n <ng-content select=\"button[kirby-button]\"></ng-content>\n <ng-container *ngIf=\"!userProvidedButton\">\n <button\n kirby-button\n [size]=\"buttonSize\"\n [disabled]=\"isDisabled\"\n type=\"button\"\n [attentionLevel]=\"attentionLevel\"\n #defaultButton\n >\n <kirby-icon [name]=\"'more'\"></kirby-icon>\n </button>\n </ng-container>\n</div>\n<kirby-card\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 [ngStyle]=\"{\n minWidth: minWidth ? minWidth + 'px' : null\n }\"\n class=\"menu-popover\"\n>\n <ng-content select=\"kirby-item\"></ng-content>\n</kirby-card>\n", styles: [":host{position:relative}.button-container{display:inline-block}kirby-card{max-height:352px;overflow-y:auto;min-width:240px;max-width:460px}\n"] }]
|
|
53
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }]; }, propDecorators: { isDisabled: [{
|
|
42
54
|
type: Input
|
|
43
55
|
}], buttonSize: [{
|
|
44
56
|
type: Input
|
|
@@ -60,6 +72,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
|
|
|
60
72
|
type: Input
|
|
61
73
|
}], closeOnBackdrop: [{
|
|
62
74
|
type: Input
|
|
75
|
+
}], shift: [{
|
|
76
|
+
type: Input
|
|
63
77
|
}], minWidth: [{
|
|
64
78
|
type: Input
|
|
65
79
|
}], buttonContainerElement: [{
|
|
@@ -74,9 +88,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
|
|
|
74
88
|
}], floatingDirective: [{
|
|
75
89
|
type: ViewChild,
|
|
76
90
|
args: [FloatingDirective]
|
|
77
|
-
}], _onIonScroll: [{
|
|
78
|
-
type: HostListener,
|
|
79
|
-
args: ['document:ionScroll']
|
|
80
91
|
}] } });
|
|
81
92
|
|
|
82
93
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kirbydesign-designsystem-menu.mjs","sources":["../../../../libs/designsystem/menu/src/menu.component.ts","../../../../libs/designsystem/menu/src/menu.component.html","../../../../libs/designsystem/menu/src/kirbydesign-designsystem-menu.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n
|
|
1
|
+
{"version":3,"file":"kirbydesign-designsystem-menu.mjs","sources":["../../../../libs/designsystem/menu/src/menu.component.ts","../../../../libs/designsystem/menu/src/menu.component.html","../../../../libs/designsystem/menu/src/kirbydesign-designsystem-menu.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n Input,\n NgZone,\n OnDestroy,\n Renderer2,\n ViewChild,\n} from '@angular/core';\nimport { Placement } from '@floating-ui/dom';\n\nimport { ItemModule } from '@kirbydesign/designsystem/item';\nimport { CardModule } from '@kirbydesign/designsystem/card';\nimport { IconModule } 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';\n\n@Component({\n selector: 'kirby-menu',\n standalone: true,\n imports: [ButtonComponent, CommonModule, FloatingDirective, IconModule, CardModule, ItemModule],\n templateUrl: './menu.component.html',\n styleUrls: ['./menu.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MenuComponent implements AfterViewInit, OnDestroy {\n constructor(\n private cdf: ChangeDetectorRef,\n private elementRef: ElementRef<HTMLElement>,\n private zone: NgZone,\n private renderer: Renderer2\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<HTMLElement> | undefined;\n\n @ContentChild(ButtonComponent, { read: ElementRef }) public userProvidedButton:\n | ElementRef<HTMLElement>\n | undefined;\n\n @ViewChild(FloatingDirective)\n private floatingDirective: FloatingDirective;\n\n public FloatingOffset: typeof FloatingOffset = FloatingOffset;\n\n private scrollListenerDisposeFn: EventListenerDisposeFn;\n\n public ngAfterViewInit(): void {\n this.cdf.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.scrollListenerDisposeFn = this.renderer.listen(document, 'ionScroll', () => {\n this.floatingDirective.hide();\n });\n });\n }\n\n ngOnDestroy(): void {\n this.scrollListenerDisposeFn?.();\n }\n}\n","<div class=\"button-container\" #buttonContainer>\n <ng-content select=\"button[kirby-button]\"></ng-content>\n <ng-container *ngIf=\"!userProvidedButton\">\n <button\n kirby-button\n [size]=\"buttonSize\"\n [disabled]=\"isDisabled\"\n type=\"button\"\n [attentionLevel]=\"attentionLevel\"\n #defaultButton\n >\n <kirby-icon [name]=\"'more'\"></kirby-icon>\n </button>\n </ng-container>\n</div>\n<kirby-card\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 [ngStyle]=\"{\n minWidth: minWidth ? minWidth + 'px' : null\n }\"\n class=\"menu-popover\"\n>\n <ng-content select=\"kirby-item\"></ng-content>\n</kirby-card>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|