@kirbydesign/extensions-angular 4.3.0 → 4.4.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kirbydesign-extensions-angular-combobox.mjs","sources":["../../combobox/src/combobox.types.ts","../../combobox/src/combobox.component.ts","../../combobox/src/combobox.component.html","../../combobox/src/kirbydesign-extensions-angular-combobox.ts"],"sourcesContent":["export enum OpenState {\n closed,\n opening,\n open,\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\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 { UniqueIdGenerator } from '@kirbydesign/designsystem/helpers';\nimport { ItemComponent } from '@kirbydesign/designsystem/item';\nimport { ListItemTemplateDirective } from '@kirbydesign/designsystem/list';\nimport { HorizontalDirection, PopoverComponent } from '@kirbydesign/designsystem/popover';\nimport { AffixDirective, InputSize } from '@kirbydesign/designsystem/form-field';\nimport {\n EventListenerDisposeFn,\n FORM_FIELD_CONTROL,\n FormFieldControl,\n} from '@kirbydesign/designsystem/types';\nimport { forwardAttributes, ResizeObserverService } from '@kirbydesign/designsystem/shared';\nimport { InputComponent } from '@kirbydesign/designsystem/form-field';\nimport { IconComponent } from '@kirbydesign/designsystem/icon';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n CdkVirtualScrollViewport,\n} from '@angular/cdk/scrolling';\nimport { OpenState } from './combobox.types';\n\n@Component({\n selector: 'kirby-x-combobox',\n templateUrl: './combobox.component.html',\n styleUrls: ['./combobox.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ComboboxComponent),\n multi: true,\n },\n {\n provide: FORM_FIELD_CONTROL,\n useExisting: forwardRef(() => ComboboxComponent),\n },\n ],\n imports: [\n InputComponent,\n NgTemplateOutlet,\n PopoverComponent,\n CardComponent,\n ItemComponent,\n IconComponent,\n AffixDirective,\n CdkFixedSizeVirtualScroll,\n CdkVirtualScrollViewport,\n CdkVirtualForOf,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ComboboxComponent\n implements AfterViewInit, OnDestroy, ControlValueAccessor, FormFieldControl\n{\n static readonly OPEN_DELAY_IN_MS = 100;\n private state = OpenState.closed;\n private _popout: HorizontalDirection | `${HorizontalDirection}` = HorizontalDirection.right;\n private _attributesToForward = ['aria-label', 'aria-labelledby'];\n\n public _listboxId: string = UniqueIdGenerator.scopedTo('kirby-x-combobox').next();\n public _comboboxId: string = UniqueIdGenerator.scopedTo('kirby-input').next();\n\n private readonly _defaultSearchFunction = (\n searchTerm: string,\n itemsToSearch: unknown[]\n ): unknown[] => {\n if (!searchTerm) {\n return itemsToSearch;\n }\n\n const lowerSearchTerm = searchTerm.toLowerCase();\n return itemsToSearch\n .filter((item) => this.getItemText(item).toLowerCase().includes(lowerSearchTerm))\n .sort((a, b) => {\n const textA = this.getItemText(a).toLowerCase();\n const textB = this.getItemText(b).toLowerCase();\n\n const textAStartsWith = textA.startsWith(searchTerm);\n const textBStartsWith = textB.startsWith(searchTerm);\n if (textAStartsWith && textBStartsWith) {\n return this.compareAlphabetically(textA, textB);\n }\n\n if (textAStartsWith) {\n return -1;\n }\n\n if (textBStartsWith) {\n return 1;\n }\n\n return this.compareAlphabetically(textA, textB);\n });\n };\n\n private compareAlphabetically(textA: string, textB: string): number {\n if (textA < textB) {\n return -1;\n }\n if (textA > textB) {\n return 1;\n }\n return 0;\n }\n\n /**\n * The text to display when the search returns no results.\n */\n @Input()\n public noSearchResultsText = 'No results found.';\n\n /**\n * The text announced by screen readers when the selection is cleared.\n */\n @Input()\n public selectionClearedAnnouncement = 'Selection cleared.';\n\n public _liveRegionText = '';\n\n /**\n * The name of the property to use as the display text for each item.\n */\n @Input()\n public itemTextProperty: string = 'text';\n protected getItemText(item: unknown): string {\n if (this.isTypeString(item)) {\n return item as string;\n }\n\n if (this.objectHasItemTextProperty(item)) {\n const objectItem = item as Record<string, unknown>;\n const textValue: unknown = objectItem[this.itemTextProperty];\n\n if (typeof textValue === 'string') {\n return textValue;\n }\n }\n return '';\n }\n\n /**\n * The height of each item in the dropdown, in pixels. This is used to calculate the height of the dropdown based on the number of items.\n */\n @Input()\n public itemHeight: number = 44;\n\n protected get dropdownMaxHeight(): number {\n return 8 * this.itemHeight;\n }\n\n protected get dropdownMinHeight(): number {\n return this.itemHeight;\n }\n\n protected get viewportHeight(): number {\n const itemCount = this.searchItems?.length ?? 0;\n\n if (itemCount === 0) {\n return this.dropdownMinHeight;\n }\n\n return Math.min(\n this.dropdownMaxHeight,\n Math.max(this.dropdownMinHeight, itemCount * this.itemHeight)\n );\n }\n\n private isTypeString(item: unknown): boolean {\n return typeof item === 'string';\n }\n\n private objectHasItemTextProperty(item: unknown): boolean {\n return item != undefined && typeof item === 'object' && this.itemTextProperty in item;\n }\n\n private objectHasItemIdProperty(item: unknown): boolean {\n return item != undefined && typeof item === 'object' && this.itemIdProperty in item;\n }\n\n /**\n * The name of the property to use as the unique identifier for each item.\n */\n @Input()\n public itemIdProperty = 'id';\n protected getItemId(item: unknown): string {\n if (this.isTypeString(item)) {\n return item as string;\n }\n\n if (this.objectHasItemIdProperty(item)) {\n const objectItem = item as Record<string, unknown>;\n const idValue: unknown = objectItem[this.itemIdProperty];\n\n if (this.isTypeString(idValue)) {\n return idValue as string;\n }\n }\n\n console.error(\n 'Each item must have an id property for scroll to work. Ensure that the itemIdProperty input is set correctly, and that each item has a unique id value.'\n );\n return '';\n }\n\n /**\n * A function that takes a search term and the list of items, and returns a filtered list of items to display in the dropdown.\n */\n @Input()\n public searchFunction: (searchTerm: string, itemsToSearch: unknown[]) => unknown[] =\n this._defaultSearchFunction;\n\n private _searchItems: unknown[] = [];\n protected get searchItems(): unknown[] {\n return this._searchItems;\n }\n private set searchItems(value: unknown[]) {\n this._searchItems = value;\n if (!this._searchItems) {\n return;\n }\n\n // only set the focused item of the search result, if the input has value\n if (this.textInput?.nativeElement?.value) {\n this.focusedItem = this._searchItems[0];\n }\n }\n\n private _items: unknown[] = [];\n\n get items(): unknown[] {\n return this._items;\n }\n\n /**\n * The list of items to display in the dropdown.\n * @param value\n */\n @Input()\n public set items(value: unknown[]) {\n this._items = value;\n this.searchItems = this._items;\n }\n\n private _selectedItem: unknown = undefined;\n get selectedItem(): unknown {\n return this._selectedItem;\n }\n\n /**\n * The currently selected item.\n * @param value\n */\n @Input()\n public set selectedItem(value: unknown) {\n // Allow clearing by setting undefined\n if (value !== this._selectedItem) {\n this._selectedItem = value;\n this.focusedItem = this._selectedItem;\n // Keep ControlValueAccessor value in sync with the selected data item\n this.value = this._selectedItem;\n }\n }\n\n // _focusedItem keeps track of which element has focus and will be selected\n // if it is activated (by pressing ENTER)\n private _focusedItem: unknown = undefined;\n public get focusedItem(): unknown {\n return this._focusedItem;\n }\n\n public set focusedItem(item: unknown) {\n // the focus might not have changed, but where in the list might\n this.setAriaPosinsetOnElement(item);\n\n if (this._focusedItem === item) {\n return;\n }\n this._focusedItem = item;\n }\n\n private getIndexOfItem(item: unknown): number {\n return this.searchItems.indexOf(item);\n }\n\n private getKirbyElement(item: unknown | undefined): ElementRef<HTMLElement> | undefined {\n const kirbyItems = this.getKirbyItems();\n if (!kirbyItems || !item) {\n return undefined;\n }\n\n const itemId = this.getItemId(item);\n return kirbyItems.find((el) => el.nativeElement.id === itemId);\n }\n\n private setAriaPosinsetOnElement(item: unknown) {\n const element = this.getKirbyElement(item);\n const index = this.getIndexOfItem(item);\n const setsize = this.searchItems.length;\n\n if (!element) {\n return;\n }\n\n this.renderer.setAttribute(element.nativeElement, 'aria-setsize', setsize.toString());\n this.renderer.setAttribute(element.nativeElement, 'aria-posinset', `${index + 1}`);\n }\n\n /**\n * The placeholder text to display in the input when no item is selected and the input is empty.\n */\n @Input()\n public placeholder = 'Please search...';\n\n /**\n * The direction in which the dropdown should open relative to the input.\n * @param direction\n */\n @Input()\n public set popout(direction: HorizontalDirection | `${HorizontalDirection}`) {\n this._popout = direction || HorizontalDirection.right;\n }\n\n public get popout() {\n return this._popout;\n }\n\n /**\n * If the combobox needs to expand to full width of its parent container, then use expand.\n */\n @Input()\n public expand?: 'block';\n\n /**\n * When `true`, the user cannot interact with the combobox.\n */\n @Input()\n public disabled = false;\n\n @HostBinding('attr.disabled')\n public get _isDisabled(): 'disabled' | null {\n return this.disabled ? 'disabled' : null;\n }\n\n /**\n * Will emit the new value when error changes.\n */\n @Output()\n hasErrorChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n private _hasError: boolean = false;\n\n /**\n * When `true`, the combobox will be styled with error styles.\n */\n @Input()\n get hasError(): boolean {\n return this._hasError;\n }\n\n set hasError(value: boolean) {\n if (this._hasError !== value) {\n this._hasError = value;\n this.hasErrorChange.emit(this._hasError);\n }\n }\n\n /**\n * The size of the input element.\n */\n @Input()\n public size: InputSize = InputSize.medium;\n\n // Prevent Ionic blur on scroll\n @HostBinding('attr.no-blur')\n public get _noBlurOnScroll(): boolean {\n return true;\n }\n\n /**\n * Emitted when an item is selected (tap on mobile, click/keypress on web)\n */\n @Output()\n public change: EventEmitter<unknown> = new EventEmitter<unknown>();\n\n public value: unknown = undefined;\n\n @HostBinding('class.expand')\n public get _isBlockLevel() {\n return this.expand === 'block';\n }\n\n @HostBinding('class.is-opening')\n public get _isOpening(): boolean {\n return this.state === OpenState.opening;\n }\n\n @HostBinding('class.is-open')\n public get isOpen(): boolean {\n return this.state === OpenState.open;\n }\n\n @HostBinding('class.has-value')\n public get hasValue(): boolean {\n return this.selectedItem != null;\n }\n\n @ContentChild(ListItemTemplateDirective, { read: TemplateRef })\n public itemTemplate?: TemplateRef<unknown>;\n\n @ContentChildren(ListItemTemplateDirective, { read: ElementRef })\n public slottedItems?: QueryList<ElementRef<HTMLElement>>;\n\n @ViewChild(CardComponent, { read: ElementRef })\n public cardElement?: ElementRef<HTMLElement>;\n\n @ViewChild(PopoverComponent)\n public popover?: PopoverComponent;\n\n @ViewChild('rootElement', { static: true, read: ElementRef })\n public rootElement!: ElementRef<HTMLElement>;\n\n @ViewChild(InputComponent, { static: true, read: ElementRef })\n private textInput!: ElementRef<HTMLInputElement>;\n\n get interactiveElement(): HTMLElement {\n return this.textInput.nativeElement;\n }\n\n @ViewChild(CdkVirtualScrollViewport)\n private virtualScrollViewport?: CdkVirtualScrollViewport;\n\n private forwardAriaLabelToCombobox() {\n forwardAttributes(\n this.elementRef.nativeElement,\n this._attributesToForward,\n this.renderer,\n this.rootElement.nativeElement\n );\n }\n\n @ViewChildren(ItemComponent, { read: ElementRef })\n public kirbyItemsDefault?: QueryList<ElementRef<HTMLElement>>;\n\n _kirbyItemsSlotted?: QueryList<ElementRef<HTMLElement>>;\n @ContentChildren(ItemComponent, { read: ElementRef })\n public set kirbyItemsSlotted(kirbyItems: QueryList<ElementRef<HTMLElement>>) {\n const hasSlottedItems = this.disposeItemClickListeners?.length > 0;\n if (hasSlottedItems) {\n this.unlistenAllSlottedItems();\n }\n\n kirbyItems.forEach((kirbyItem) => {\n this.renderer.setAttribute(kirbyItem.nativeElement, 'role', 'option');\n const disposeClickListener: EventListenerDisposeFn = this.renderer.listen(\n kirbyItem.nativeElement,\n 'click',\n () => {\n const id = kirbyItem.nativeElement.getAttribute('id');\n const item = this.items.find((it) => this.getItemId(it) === id);\n if (item) {\n this.onItemSelect(item);\n }\n }\n );\n\n this.disposeItemClickListeners.push(disposeClickListener);\n });\n\n this._kirbyItemsSlotted = kirbyItems;\n }\n\n public get kirbyItemsSlotted(): QueryList<ElementRef<HTMLElement>> | undefined {\n return this._kirbyItemsSlotted;\n }\n\n private disposeItemClickListeners: EventListenerDisposeFn[] = [];\n\n public constructor(\n private renderer: Renderer2,\n private elementRef: ElementRef<HTMLElement>,\n private cdr: ChangeDetectorRef,\n private resizeObserverService: ResizeObserverService\n ) {}\n\n protected onToggle(event: MouseEvent) {\n event.stopPropagation();\n this.textInput?.nativeElement.focus();\n\n this.toggle();\n }\n\n private toggle(): void {\n if (this.disabled) {\n return;\n }\n this.isOpen ? this.close() : this.open();\n }\n\n public ngAfterViewInit() {\n if (this.expand === 'block') {\n const { width: initialWidth } = this.elementRef.nativeElement.getBoundingClientRect();\n this.setPopoverCardStyle('max-width', 'initial');\n this.setPopoverCardStyle('min-width', 'initial');\n // Ensure initial width is set even if the resize observer callback also fires initially:\n this.setPopoverCardStyle('--kirby-card-width', `${initialWidth}px`);\n\n this.resizeObserverService.observe(this.elementRef, (entry) => {\n const newWidth = entry.contentRect.width;\n if (newWidth > 0) {\n this.setPopoverCardStyle('--kirby-card-width', `${newWidth}px`);\n }\n });\n }\n this.forwardAriaLabelToCombobox();\n }\n\n /* Utility that makes it easier to set styles on card element */\n private setPopoverCardStyle(style: string, value: string) {\n this.renderer.setStyle(\n this.cardElement?.nativeElement,\n style,\n value,\n RendererStyleFlags2.DashCase\n );\n }\n\n public ngOnDestroy(): void {\n this.unlistenAllSlottedItems();\n this.unobserveResize();\n }\n\n public open(): void {\n if (this.disabled) {\n return;\n }\n if (!this.isOpen) {\n this.state = OpenState.opening;\n setTimeout(() => this.showPopOver(), ComboboxComponent.OPEN_DELAY_IN_MS);\n\n this.focusedItem = this.selectedItem;\n }\n }\n\n private showPopOver() {\n if (this.state === OpenState.opening) {\n this.state = OpenState.open;\n this.popover?.show();\n this.scrollToIndexIntoViewWhenOpeningPopup();\n this.cdr.markForCheck();\n }\n }\n\n public close() {\n if (this.disabled) {\n return;\n }\n if (this.isOpen) {\n this.state = OpenState.closed;\n this.setInputDisplayValue(this.getItemText(this.selectedItem));\n this.searchItems = this.items;\n this.popover?.hide();\n }\n }\n\n protected onItemSelect(item: unknown) {\n // Guard: slotted click listeners should map back to a data item, but be safe.\n if (item instanceof HTMLElement) return;\n this.selectItem(item);\n this.close();\n }\n\n private onChange: (value: unknown) => void = () => {\n /* empty */\n };\n private onTouched: () => void = (): void => {\n /* empty */\n };\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 public writeValue(value: string): void {\n this.selectItemByInput(value);\n\n // When written from outside, reflect selected text in the input\n this.setInputDisplayValue(this.getItemText(this.value));\n\n this.cdr.markForCheck();\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: (value: unknown) => void): 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: () => void): 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 public setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n private selectItem(item: unknown): void {\n if (item != this.selectedItem) {\n this.selectedItem = item;\n this.focusedItem = item;\n this.change.emit(this.value);\n this.onChange(this.value);\n this.setInputDisplayValue(this.getItemText(item));\n this.searchItems = this.items;\n }\n }\n\n private selectItemByInput(input: string): void {\n this.selectedItem = this.findItemByInput(input);\n }\n\n protected onInput(event: Event): void {\n if (!this.isOpen) {\n this.open();\n }\n\n const input = event.target as HTMLInputElement;\n\n if (!input.value) {\n this.clearSelection();\n }\n\n this.updateSearchResults(input.value);\n\n // Screen readers (VoiceOver/NVDA) may move real browser focus to a list-item button.\n // When the list re-renders after filtering, that button is removed from the DOM and\n // focus falls to `document.body`. Restore it to the input so the user can keep typing\n // and the focusout handler doesn't mistake the body-focus for a genuine blur-away.\n if (document.activeElement !== this.textInput?.nativeElement) {\n this.textInput?.nativeElement.focus();\n }\n }\n\n private clearSelection(): void {\n this.selectItem(undefined);\n // Reset after a short delay so the same message can be announced again on subsequent clears\n this.announce(this.selectionClearedAnnouncement);\n }\n\n private _announceTimeout: ReturnType<typeof setTimeout> | undefined;\n private announce(message: string): void {\n clearTimeout(this._announceTimeout);\n this._liveRegionText = '';\n this._announceTimeout = setTimeout(() => {\n this._liveRegionText = message;\n this.cdr.markForCheck();\n }, 100);\n }\n\n private updateSearchResults(inputValue: string): void {\n this.searchItems = inputValue ? this.searchFunction(inputValue, this.items) : this.items;\n\n if (inputValue && this.searchItems.length === 0) {\n this.announce(this.noSearchResultsText);\n }\n }\n\n protected onPopoverWillHide() {\n this.state = OpenState.closed;\n this.rootElement.nativeElement.focus();\n this.onTouched();\n }\n\n protected onPopoverClick() {\n this.close();\n }\n\n @HostListener('mousedown', ['$event'])\n public onMouseDown(event: MouseEvent) {\n if (this.disabled) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n }\n\n @HostListener('touchstart', ['$event'])\n public onTouchStart(event: TouchEvent) {\n if (this.isOpen) {\n event.stopPropagation();\n }\n }\n\n @HostListener('focusout')\n public onFocusOut() {\n // Defer the check to allow the browser (and screen readers like VoiceOver/NVDA)\n // to settle focus. `relatedTarget` is often `null` with screen readers, so we\n // inspect `document.activeElement` after the microtask queue has flushed.\n setTimeout(() => {\n const activeElement = document.activeElement as HTMLElement | null;\n const isOnTriggerButton =\n activeElement && this.elementRef.nativeElement.contains(activeElement);\n const isInsidePopover = activeElement && activeElement.closest('kirby-popover');\n\n if (isOnTriggerButton || isInsidePopover) {\n // Focus is still within the component — nothing to do.\n return;\n }\n\n // When a screen reader (VoiceOver/NVDA) moves real focus to a list-item button\n // and the user then types a character, CDK virtual scroll re-renders the list and\n // removes the focused button from the DOM. The browser then drops focus to\n // `document.body`. Detect this case: if the popover is still showing and focus is\n // on the body, it means focus was lost due to DOM removal — restore it to the\n // input rather than closing the popover.\n if (this.isOpen && activeElement === document.body) {\n this.textInput?.nativeElement.focus();\n return;\n }\n\n if (this.isOpen) {\n this.close();\n }\n this.onTouched();\n }, 0);\n }\n\n @HostListener('keydown.tab')\n public onTab() {\n if (this.isOpen) {\n this.selectItem(this.focusedItem);\n this.close();\n }\n }\n\n @HostListener('keydown.escape')\n public onEscape() {\n this.close();\n }\n\n @HostListener('keydown.enter', ['$event'])\n public onEnterO(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.isOpen) {\n this.selectItem(this.focusedItem);\n }\n this.toggle();\n }\n\n @HostListener('keydown.arrowUp', ['$event'])\n @HostListener('keydown.arrowDown', ['$event'])\n @HostListener('keydown.pageUp', ['$event'])\n @HostListener('keydown.pageDown', ['$event'])\n @HostListener('keydown.home', ['$event'])\n @HostListener('keydown.end', ['$event'])\n public onArrowKeys(event: Event): void {\n if (this.disabled) return;\n\n const keyEvent = event as KeyboardEvent; // safe in this context\n // Avoid page scroll\n event.preventDefault();\n\n if (!this.isOpen) {\n this.open();\n if (this.selectedItem) {\n this.setFocusOnSelectedItem();\n } else {\n this.setFocusOnFirstOrLastItem(keyEvent);\n }\n } else {\n this.handleFocusNavigation(keyEvent);\n }\n }\n\n private handleFocusNavigation(keyEvent: KeyboardEvent): void {\n switch (keyEvent.key) {\n case 'ArrowDown':\n this.shiftFocusIndex(1);\n break;\n case 'ArrowUp':\n this.shiftFocusIndex(-1);\n break;\n case 'PageDown':\n this.shiftFocusIndex(10);\n break;\n case 'PageUp':\n this.shiftFocusIndex(-10);\n break;\n case 'Home':\n this.setFocusOnFirstItem();\n break;\n case 'End':\n this.setFocusOnLastItem();\n break;\n default:\n break;\n }\n }\n\n private shiftFocusIndex(numberOfItems: number) {\n // Handle up/down navigation when open\n const currentIndex = this.searchItems.indexOf(this.focusedItem);\n let newIndex;\n\n if (numberOfItems > 0) {\n newIndex = Math.min(this.searchItems.length - 1, currentIndex + numberOfItems);\n } else {\n newIndex = Math.max(0, currentIndex + numberOfItems);\n }\n\n if (newIndex !== currentIndex) {\n this.focusedItem = this.searchItems[newIndex];\n }\n this.scrollFocusedItemIntoViewWhileNavigating();\n }\n\n private setFocusOnFirstOrLastItem(keyEvent: KeyboardEvent): void {\n switch (keyEvent.key) {\n case 'ArrowDown':\n case 'PageDown':\n case 'Home':\n this.setFocusOnFirstItem();\n break;\n case 'ArrowUp':\n case 'PageUp':\n case 'End':\n this.setFocusOnLastItem();\n break;\n default:\n break;\n }\n }\n\n private setFocusOnSelectedItem(): void {\n if (this.selectedItem) {\n this.focusedItem = this.selectedItem;\n }\n }\n\n private setFocusOnLastItem(): void {\n if (this.searchItems.length > 0) {\n this.focusedItem = this.searchItems[this.searchItems.length - 1];\n }\n }\n\n private setFocusOnFirstItem(): void {\n if (this.searchItems.length > 0) {\n this.focusedItem = this.searchItems[0];\n }\n }\n\n private unlistenAllSlottedItems(): void {\n let disposeClickListener: EventListenerDisposeFn | undefined;\n while ((disposeClickListener = this.disposeItemClickListeners.pop()) !== undefined) {\n disposeClickListener();\n }\n }\n\n private unobserveResize() {\n this.resizeObserverService.unobserve(this.elementRef);\n }\n\n /**\n * Resolve a model/data item based on current `items` by comparing displayed text.\n * This is used to map an incoming form value or input `selectedItem` to an item\n * from the list.\n */\n private findItemByInput(input: string): unknown {\n if (!this.items || this.items.length === 0) {\n return input;\n }\n\n return this.items.find((it) => this.getItemText(it) === input) ?? input;\n }\n\n private setInputDisplayValue(value: string): void {\n // We intentionally update the DOM input imperatively (\"hard way\")\n // to ensure the visible value is cleared/updated immediately.\n if (this.textInput?.nativeElement) {\n this.renderer.setProperty(this.textInput.nativeElement, 'value', value);\n }\n }\n\n private scrollFocusedItemIntoViewWhileNavigating(): void {\n const kirbyItems = this.getKirbyItems();\n if (!kirbyItems || kirbyItems.length === 0) return;\n\n if (!this.focusedItem) {\n return;\n }\n\n const id = this.getItemId(this.focusedItem);\n if (!id) return;\n\n const match = kirbyItems.toArray().find((el) => {\n if (el.nativeElement.id === undefined) {\n console.error(\n 'Each item must have an id attribute for scroll to work. Ensure that the ´[attr.id]´ is set correctly, and that each item has a unique id value.'\n );\n }\n return el.nativeElement.id === id;\n });\n\n if (!match) {\n this.scrollToIndexIntoViewWhenOpeningPopup();\n return;\n }\n\n const scrollIntoView = match.nativeElement.scrollIntoView;\n if (typeof scrollIntoView === 'function') {\n scrollIntoView.call(match.nativeElement, { block: 'nearest' });\n }\n }\n\n private getKirbyItems(): QueryList<ElementRef<HTMLElement>> | undefined {\n return this.kirbyItemsSlotted && this.kirbyItemsSlotted.length\n ? this.kirbyItemsSlotted\n : this.kirbyItemsDefault;\n }\n\n private scrollToIndexIntoViewWhenOpeningPopup(): void {\n const focusedIndex = this.searchItems.indexOf(this.focusedItem);\n if (focusedIndex < 0) return;\n\n if (focusedIndex === 0) {\n this.virtualScrollViewport?.setRenderedRange({ start: 0, end: 20 });\n this.virtualScrollViewport?.checkViewportSize();\n return;\n }\n\n this.virtualScrollViewport?.scrollToIndex(focusedIndex);\n }\n}\n","<span class=\"kirby-visually-hidden\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ _liveRegionText }}\n</span>\n<div (click)=\"onToggle($event)\" #rootElement>\n <input\n kirby-input\n type=\"text\"\n aria-haspopup=\"listbox\"\n role=\"combobox\"\n [hasError]=\"hasError\"\n [size]=\"size\"\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n [attr.id]=\"_comboboxId\"\n [attr.aria-controls]=\"_listboxId\"\n [attr.aria-expanded]=\"isOpen\"\n [attr.aria-activedescendant]=\"isOpen && focusedItem ? getItemId(focusedItem) : null\"\n (input)=\"onInput($event)\"\n />\n <kirby-icon [name]=\"isOpen ? 'arrow-up' : 'arrow-down'\" kirby-affix=\"suffix\"></kirby-icon>\n</div>\n\n<kirby-popover\n [target]=\"rootElement\"\n [popout]=\"popout\"\n (click)=\"onPopoverClick()\"\n (willHide)=\"onPopoverWillHide()\"\n>\n <kirby-card [attr.id]=\"_listboxId\" [attr.aria-labelledby]=\"_comboboxId\">\n @if (searchItems.length === 0) {\n <kirby-item>\n <p class=\"kirby-item-title no-results\">{{ noSearchResultsText }}</p>\n </kirby-item>\n } @else {\n <cdk-virtual-scroll-viewport\n class=\"combobox-viewport\"\n role=\"listbox\"\n minBufferPx=\"1240\"\n maxBufferPx=\"1620\"\n [itemSize]=\"itemHeight\"\n [style.height.px]=\"viewportHeight\"\n >\n <ng-container *cdkVirtualFor=\"let item of searchItems\">\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate || defaultItemTemplate;\n context: {\n $implicit: item,\n selected: item === selectedItem,\n focused: item === focusedItem,\n }\n \"\n ></ng-container>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n }\n </kirby-card>\n</kirby-popover>\n\n<ng-template #defaultItemTemplate let-item let-selected=\"selected\" let-focused=\"focused\">\n <kirby-item\n role=\"option\"\n [selectable]=\"true\"\n [selected]=\"selected\"\n [class.focused]=\"focused\"\n [attr.id]=\"getItemId(item)\"\n [attr.aria-selected]=\"selected\"\n (click)=\"onItemSelect(item)\"\n >\n <p class=\"kirby-item-title\">{{ getItemText(item) }}</p>\n @if (selected) {\n <kirby-icon name=\"checkmark-selected\" slot=\"end\"></kirby-icon>\n }\n </kirby-item>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -37,14 +37,14 @@ class MenuItemComponent {
37
37
  this.iconSize = computed(() => (this.size() === 'lg' ? 'sm' : 'xs'), ...(ngDevMode ? [{ debugName: "iconSize" }] : /* istanbul ignore next */ []));
38
38
  }
39
39
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: MenuItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
40
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.7", type: MenuItemComponent, isStandalone: true, selector: "a[kirby-x-menu-item],button[kirby-x-menu-item]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: true, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: true, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.id": "\"item\" + id()", "class": "size()" } }, ngImport: i0, template: "<div class=\"menu-item-start {{ size() }}\">\n @if (icon(); as icon) {\n <kirby-icon [size]=\"iconSize()\" [name]=\"icon\"></kirby-icon>\n }\n</div>\n\n<div class=\"menu-item-content\">\n <ng-content></ng-content>\n</div>\n\n<div class=\"menu-item-end\">\n <ng-content select=\"[slot='end']\"></ng-content>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-grow:1;align-items:center;align-self:stretch;box-sizing:border-box;min-height:32px;border-radius:8px;padding:4px 12px;gap:8px;border:none;background:inherit;font:inherit;color:inherit;text-decoration:none;cursor:pointer}:host.lg{min-height:40px}:host:hover{background:var(--menuitem-hover-background-color, var(--kirby-inputs-background-color-hover))}:host:active{background:var(--menuitem-active-background-color, var(--kirby-inputs-background-color-active))}:host:focus-visible{outline:none}@media(hover:hover)and (pointer:fine){:host:focus{transition:all 80ms linear 0ms;box-shadow:0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}:host:focus:not(:focus-visible){box-shadow:0 0 0 0 transparent}:host:focus-visible{transition:all 80ms linear 0ms;box-shadow:0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}}:host-context(.cdk-drag-preview){transform:scale(1.05);transition:transform .2s ease;border-radius:var(--kirby-border-radius-s)}:host-context(.cdk-drag-preview):before{content:\"\";position:absolute;inset:0;border-radius:inherit;pointer-events:none;background:var(--menuitem-active-background-color, var(--kirby-inputs-background-color-active))}:host-context(.cdk-drag-preview).selected:before{display:none}:host-context(.cdk-drag-preview):not(.selected){background:var(--sidebar-background-color, var(--kirby-tertiary))}.menu-item-start{display:flex;align-items:center;justify-content:center;flex-shrink:0}.menu-item-start.lg,.menu-item-start.md{width:24px;height:24px}.menu-item-start.sm,.menu-item-start.xs{width:16px;height:16px}.menu-item-start.sm{padding-left:32px}.menu-item-start.xs{padding-left:56px}.menu-item-content{display:flex;flex-grow:1;align-items:center;text-align:left;word-break:break-word;font-size:16px;line-height:24px}.menu-item-end{display:inline-flex;min-width:24px;align-items:center;justify-content:center;gap:8px}.menu-item-end:empty{display:none}\n"], dependencies: [{ kind: "ngmodule", type: IconModule }, { kind: "component", type: i1.IconComponent, selector: "kirby-icon", inputs: ["size", "name"] }] }); }
40
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.7", type: MenuItemComponent, isStandalone: true, selector: "a[kirby-x-menu-item],button[kirby-x-menu-item]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: true, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: true, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.id": "\"item\" + id()", "class": "size()" } }, ngImport: i0, template: "<div class=\"menu-item-start {{ size() }}\">\n @if (icon(); as icon) {\n <kirby-icon [size]=\"iconSize()\" [name]=\"icon\"></kirby-icon>\n }\n</div>\n\n<div class=\"menu-item-content\">\n <ng-content></ng-content>\n</div>\n\n<div class=\"menu-item-end\">\n <ng-content select=\"[slot='end']\"></ng-content>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-grow:1;align-items:center;align-self:stretch;box-sizing:border-box;min-height:32px;border-radius:8px;padding:4px 12px;gap:8px;border:none;background:inherit;font:inherit;color:inherit;text-decoration:none;cursor:pointer}:host.lg{min-height:40px}:host:hover{background:var(--menuitem-hover-background-color, var(--kirby-inputs-background-color-hover))}:host:active{background:var(--menuitem-active-background-color, var(--kirby-inputs-background-color-active))}:host:focus-visible{outline:none}@media(hover:hover)and (pointer:fine){:host:focus{transition:all 80ms linear 0ms;box-shadow:0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}:host:focus:not(:focus-visible){box-shadow:0 0 0 0 transparent}:host:focus-visible{transition:all 80ms linear 0ms;box-shadow:0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}}:host-context(.cdk-drag-preview){transform:scale(1.05);transition:transform .2s ease;border-radius:var(--kirby-border-radius-s)}:host-context(.cdk-drag-preview):before{content:\"\";position:absolute;inset:0;border-radius:inherit;pointer-events:none;background:var(--menuitem-active-background-color, var(--kirby-inputs-background-color-active))}:host-context(.cdk-drag-preview).selected:before{display:none}:host-context(.cdk-drag-preview):not(.selected){background:var(--sidebar-background-color, var(--kirby-tertiary))}.menu-item-start{display:flex;align-items:center;justify-content:center;flex-shrink:0}.menu-item-start.lg,.menu-item-start.md{width:24px;height:24px}.menu-item-start.sm,.menu-item-start.xs{width:16px;height:16px}.menu-item-start.sm{padding-left:32px}.menu-item-start.xs{padding-left:56px}.menu-item-content{display:flex;flex-grow:1;align-items:center;text-align:left;word-break:break-word;-webkit-hyphens:auto;hyphens:auto;hyphenate-limit-chars:10 4 4;font-size:16px;line-height:24px}.menu-item-end{display:inline-flex;min-width:24px;align-items:center;justify-content:center;gap:8px}.menu-item-end:empty{display:none}\n"], dependencies: [{ kind: "ngmodule", type: IconModule }, { kind: "component", type: i1.IconComponent, selector: "kirby-icon", inputs: ["size", "name"] }] }); }
41
41
  }
42
42
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: MenuItemComponent, decorators: [{
43
43
  type: Component,
44
44
  args: [{ selector: 'a[kirby-x-menu-item],button[kirby-x-menu-item]', host: {
45
45
  '[attr.id]': '"item" + id()',
46
46
  '[class]': 'size()',
47
- }, imports: [IconModule], template: "<div class=\"menu-item-start {{ size() }}\">\n @if (icon(); as icon) {\n <kirby-icon [size]=\"iconSize()\" [name]=\"icon\"></kirby-icon>\n }\n</div>\n\n<div class=\"menu-item-content\">\n <ng-content></ng-content>\n</div>\n\n<div class=\"menu-item-end\">\n <ng-content select=\"[slot='end']\"></ng-content>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-grow:1;align-items:center;align-self:stretch;box-sizing:border-box;min-height:32px;border-radius:8px;padding:4px 12px;gap:8px;border:none;background:inherit;font:inherit;color:inherit;text-decoration:none;cursor:pointer}:host.lg{min-height:40px}:host:hover{background:var(--menuitem-hover-background-color, var(--kirby-inputs-background-color-hover))}:host:active{background:var(--menuitem-active-background-color, var(--kirby-inputs-background-color-active))}:host:focus-visible{outline:none}@media(hover:hover)and (pointer:fine){:host:focus{transition:all 80ms linear 0ms;box-shadow:0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}:host:focus:not(:focus-visible){box-shadow:0 0 0 0 transparent}:host:focus-visible{transition:all 80ms linear 0ms;box-shadow:0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}}:host-context(.cdk-drag-preview){transform:scale(1.05);transition:transform .2s ease;border-radius:var(--kirby-border-radius-s)}:host-context(.cdk-drag-preview):before{content:\"\";position:absolute;inset:0;border-radius:inherit;pointer-events:none;background:var(--menuitem-active-background-color, var(--kirby-inputs-background-color-active))}:host-context(.cdk-drag-preview).selected:before{display:none}:host-context(.cdk-drag-preview):not(.selected){background:var(--sidebar-background-color, var(--kirby-tertiary))}.menu-item-start{display:flex;align-items:center;justify-content:center;flex-shrink:0}.menu-item-start.lg,.menu-item-start.md{width:24px;height:24px}.menu-item-start.sm,.menu-item-start.xs{width:16px;height:16px}.menu-item-start.sm{padding-left:32px}.menu-item-start.xs{padding-left:56px}.menu-item-content{display:flex;flex-grow:1;align-items:center;text-align:left;word-break:break-word;font-size:16px;line-height:24px}.menu-item-end{display:inline-flex;min-width:24px;align-items:center;justify-content:center;gap:8px}.menu-item-end:empty{display:none}\n"] }]
47
+ }, imports: [IconModule], template: "<div class=\"menu-item-start {{ size() }}\">\n @if (icon(); as icon) {\n <kirby-icon [size]=\"iconSize()\" [name]=\"icon\"></kirby-icon>\n }\n</div>\n\n<div class=\"menu-item-content\">\n <ng-content></ng-content>\n</div>\n\n<div class=\"menu-item-end\">\n <ng-content select=\"[slot='end']\"></ng-content>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-grow:1;align-items:center;align-self:stretch;box-sizing:border-box;min-height:32px;border-radius:8px;padding:4px 12px;gap:8px;border:none;background:inherit;font:inherit;color:inherit;text-decoration:none;cursor:pointer}:host.lg{min-height:40px}:host:hover{background:var(--menuitem-hover-background-color, var(--kirby-inputs-background-color-hover))}:host:active{background:var(--menuitem-active-background-color, var(--kirby-inputs-background-color-active))}:host:focus-visible{outline:none}@media(hover:hover)and (pointer:fine){:host:focus{transition:all 80ms linear 0ms;box-shadow:0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}:host:focus:not(:focus-visible){box-shadow:0 0 0 0 transparent}:host:focus-visible{transition:all 80ms linear 0ms;box-shadow:0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}}:host-context(.cdk-drag-preview){transform:scale(1.05);transition:transform .2s ease;border-radius:var(--kirby-border-radius-s)}:host-context(.cdk-drag-preview):before{content:\"\";position:absolute;inset:0;border-radius:inherit;pointer-events:none;background:var(--menuitem-active-background-color, var(--kirby-inputs-background-color-active))}:host-context(.cdk-drag-preview).selected:before{display:none}:host-context(.cdk-drag-preview):not(.selected){background:var(--sidebar-background-color, var(--kirby-tertiary))}.menu-item-start{display:flex;align-items:center;justify-content:center;flex-shrink:0}.menu-item-start.lg,.menu-item-start.md{width:24px;height:24px}.menu-item-start.sm,.menu-item-start.xs{width:16px;height:16px}.menu-item-start.sm{padding-left:32px}.menu-item-start.xs{padding-left:56px}.menu-item-content{display:flex;flex-grow:1;align-items:center;text-align:left;word-break:break-word;-webkit-hyphens:auto;hyphens:auto;hyphenate-limit-chars:10 4 4;font-size:16px;line-height:24px}.menu-item-end{display:inline-flex;min-width:24px;align-items:center;justify-content:center;gap:8px}.menu-item-end:empty{display:none}\n"] }]
48
48
  }], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: true }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: true }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }] } });
49
49
 
50
50
  class MenuStateService {
@@ -474,11 +474,11 @@ class SidebarMenuComponent {
474
474
  }
475
475
  }
476
476
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: SidebarMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
477
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.7", type: SidebarMenuComponent, isStandalone: true, selector: "aside[kirby-x-sidebar-menu]", ngImport: i0, template: "<div class=\"sidebar-header\" [class.bottom-border]=\"vm.showHeaderBottomBorder()\">\n <ng-content select=\"[slot='header']\"></ng-content>\n</div>\n<div\n kirbyXHeightObserver\n class=\"sidebar-content\"\n cdkScrollable\n (scroll)=\"vm.setScroll($event)\"\n (heightChange)=\"vm.setContainerHeight($event)\"\n>\n <kirby-x-menu-container\n kirbyXHeightObserver\n (heightChange)=\"vm.setMenuHeight($event)\"\n ></kirby-x-menu-container>\n</div>\n<div class=\"sidebar-footer\" [class.top-border]=\"vm.showFooterTopBorder()\">\n <ng-content select=\"[slot='footer']\"></ng-content>\n</div>\n", styles: ["ion-item-option.primary{background-color:var(--kirby-primary);color:var(--kirby-primary-contrast)}ion-item-option.secondary{background-color:var(--kirby-secondary);color:var(--kirby-secondary-contrast)}ion-item-option.tertiary{background-color:var(--kirby-tertiary);color:var(--kirby-tertiary-contrast)}ion-item-option.success{background-color:var(--kirby-success);color:var(--kirby-success-contrast)}ion-item-option.warning{background-color:var(--kirby-warning);color:var(--kirby-warning-contrast)}ion-item-option.danger{background-color:var(--kirby-danger);color:var(--kirby-danger-contrast)}ion-item-option.white-overlay{background-color:var(--kirby-white-overlay);color:var(--kirby-white-overlay-contrast)}ion-item-option.light{background-color:var(--kirby-light);color:var(--kirby-light-contrast)}ion-item-option.medium{background-color:var(--kirby-medium);color:var(--kirby-medium-contrast)}ion-item-option.dark{background-color:var(--kirby-dark);color:var(--kirby-dark-contrast)}ion-item-option.dark-overlay{background-color:var(--kirby-dark-overlay);color:var(--kirby-dark-overlay-contrast)}:host{--kirby-inputs-background-color: var(--kirby-white-overlay);--kirby-inputs-background-color-hover: var(--kirby-white-overlay-30);--kirby-inputs-background-color-active: var(--kirby-white-overlay-40);--kirby-inputs-color: var(--kirby-white);--kirby-inputs-indicator-background-color: var(--kirby-white);--kirby-inputs-indicator-color: var(--kirby-black);--kirby-inputs-placeholder-color: var(--kirby-white-overlay-50);--kirby-inputs-elevation: none;height:100%;height:100dvh;background-color:var(--sidebar-background-color, var(--kirby-tertiary));color:var(--sidebar-color, var(--kirby-tertiary-contrast));display:flex;flex-direction:column;overflow:auto}:host *{scrollbar-width:thin;scrollbar-color:var(--kirby-semi-dark) var(--kirby-tertiary)}:host *::-webkit-scrollbar{width:16px}:host *::-webkit-scrollbar-track{background:transparent}:host *::-webkit-scrollbar-thumb{background-color:#8e8e8e80;border-radius:20px;border:4px solid transparent;background-clip:content-box}.sidebar-content{flex-grow:1;display:flex;flex-direction:column;overflow-y:auto}@supports (scrollbar-gutter: stable){.sidebar-content{overflow:hidden auto;scrollbar-gutter:auto}}.sidebar-header,.sidebar-footer{z-index:1;display:flex;align-items:center;justify-content:center;position:sticky}.sidebar-header.bottom-border{box-shadow:0 4px 10px 2px #1c1c1c4d;transition:opacity .3s}.sidebar-footer.top-border{box-shadow:0 -4px 10px 2px #1c1c1c4d;transition:opacity .3s}\n"], dependencies: [{ kind: "directive", type: HeightObserverDirective, selector: "[kirbyXHeightObserver]", outputs: ["heightChange"] }, { kind: "component", type: MenuContainerComponent, selector: "kirby-x-menu-container" }, { kind: "directive", type: CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }] }); }
477
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.7", type: SidebarMenuComponent, isStandalone: true, selector: "aside[kirby-x-sidebar-menu]", ngImport: i0, template: "<div class=\"sidebar-header\" [class.bottom-border]=\"vm.showHeaderBottomBorder()\">\n <ng-content select=\"[slot='header']\"></ng-content>\n</div>\n<div\n kirbyXHeightObserver\n class=\"sidebar-content\"\n cdkScrollable\n (scroll)=\"vm.setScroll($event)\"\n (heightChange)=\"vm.setContainerHeight($event)\"\n>\n <kirby-x-menu-container\n kirbyXHeightObserver\n (heightChange)=\"vm.setMenuHeight($event)\"\n ></kirby-x-menu-container>\n</div>\n<div class=\"sidebar-footer\" [class.top-border]=\"vm.showFooterTopBorder()\">\n <ng-content select=\"[slot='footer']\"></ng-content>\n</div>\n", styles: ["ion-item-option.primary{background-color:var(--kirby-primary);color:var(--kirby-primary-contrast)}ion-item-option.secondary{background-color:var(--kirby-secondary);color:var(--kirby-secondary-contrast)}ion-item-option.tertiary{background-color:var(--kirby-tertiary);color:var(--kirby-tertiary-contrast)}ion-item-option.success{background-color:var(--kirby-success);color:var(--kirby-success-contrast)}ion-item-option.warning{background-color:var(--kirby-warning);color:var(--kirby-warning-contrast)}ion-item-option.danger{background-color:var(--kirby-danger);color:var(--kirby-danger-contrast)}ion-item-option.white-overlay{background-color:var(--kirby-white-overlay);color:var(--kirby-white-overlay-contrast)}ion-item-option.light{background-color:var(--kirby-light);color:var(--kirby-light-contrast)}ion-item-option.medium{background-color:var(--kirby-medium);color:var(--kirby-medium-contrast)}ion-item-option.dark{background-color:var(--kirby-dark);color:var(--kirby-dark-contrast)}ion-item-option.dark-overlay{background-color:var(--kirby-dark-overlay);color:var(--kirby-dark-overlay-contrast)}:host{--kirby-inputs-background-color: var(--kirby-white-overlay);--kirby-inputs-background-color-hover: var(--kirby-white-overlay-30);--kirby-inputs-background-color-active: var(--kirby-white-overlay-40);--kirby-inputs-color: var(--kirby-white);--kirby-inputs-indicator-background-color: var(--kirby-white);--kirby-inputs-indicator-color: var(--kirby-black);--kirby-inputs-placeholder-color: var(--kirby-white-overlay-50);--kirby-inputs-color-hover: var(--kirby-white-overlay-50);--kirby-inputs-elevation: none;height:100%;height:100dvh;background-color:var(--sidebar-background-color, var(--kirby-tertiary));color:var(--sidebar-color, var(--kirby-tertiary-contrast));display:flex;flex-direction:column;overflow:auto}:host *{scrollbar-width:thin;scrollbar-color:var(--kirby-semi-dark) var(--kirby-tertiary)}:host *::-webkit-scrollbar{width:16px}:host *::-webkit-scrollbar-track{background:transparent}:host *::-webkit-scrollbar-thumb{background-color:#8e8e8e80;border-radius:20px;border:4px solid transparent;background-clip:content-box}.sidebar-content{flex-grow:1;display:flex;flex-direction:column;overflow-y:auto}@supports (scrollbar-gutter: stable){.sidebar-content{overflow:hidden auto;scrollbar-gutter:auto}}.sidebar-header,.sidebar-footer{z-index:1;display:flex;align-items:center;justify-content:center;position:sticky}.sidebar-header.bottom-border{box-shadow:0 4px 10px 2px #1c1c1c4d;transition:opacity .3s}.sidebar-footer.top-border{box-shadow:0 -4px 10px 2px #1c1c1c4d;transition:opacity .3s}\n"], dependencies: [{ kind: "directive", type: HeightObserverDirective, selector: "[kirbyXHeightObserver]", outputs: ["heightChange"] }, { kind: "component", type: MenuContainerComponent, selector: "kirby-x-menu-container" }, { kind: "directive", type: CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }] }); }
478
478
  }
479
479
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: SidebarMenuComponent, decorators: [{
480
480
  type: Component,
481
- args: [{ selector: 'aside[kirby-x-sidebar-menu]', imports: [HeightObserverDirective, MenuContainerComponent, CdkScrollable], template: "<div class=\"sidebar-header\" [class.bottom-border]=\"vm.showHeaderBottomBorder()\">\n <ng-content select=\"[slot='header']\"></ng-content>\n</div>\n<div\n kirbyXHeightObserver\n class=\"sidebar-content\"\n cdkScrollable\n (scroll)=\"vm.setScroll($event)\"\n (heightChange)=\"vm.setContainerHeight($event)\"\n>\n <kirby-x-menu-container\n kirbyXHeightObserver\n (heightChange)=\"vm.setMenuHeight($event)\"\n ></kirby-x-menu-container>\n</div>\n<div class=\"sidebar-footer\" [class.top-border]=\"vm.showFooterTopBorder()\">\n <ng-content select=\"[slot='footer']\"></ng-content>\n</div>\n", styles: ["ion-item-option.primary{background-color:var(--kirby-primary);color:var(--kirby-primary-contrast)}ion-item-option.secondary{background-color:var(--kirby-secondary);color:var(--kirby-secondary-contrast)}ion-item-option.tertiary{background-color:var(--kirby-tertiary);color:var(--kirby-tertiary-contrast)}ion-item-option.success{background-color:var(--kirby-success);color:var(--kirby-success-contrast)}ion-item-option.warning{background-color:var(--kirby-warning);color:var(--kirby-warning-contrast)}ion-item-option.danger{background-color:var(--kirby-danger);color:var(--kirby-danger-contrast)}ion-item-option.white-overlay{background-color:var(--kirby-white-overlay);color:var(--kirby-white-overlay-contrast)}ion-item-option.light{background-color:var(--kirby-light);color:var(--kirby-light-contrast)}ion-item-option.medium{background-color:var(--kirby-medium);color:var(--kirby-medium-contrast)}ion-item-option.dark{background-color:var(--kirby-dark);color:var(--kirby-dark-contrast)}ion-item-option.dark-overlay{background-color:var(--kirby-dark-overlay);color:var(--kirby-dark-overlay-contrast)}:host{--kirby-inputs-background-color: var(--kirby-white-overlay);--kirby-inputs-background-color-hover: var(--kirby-white-overlay-30);--kirby-inputs-background-color-active: var(--kirby-white-overlay-40);--kirby-inputs-color: var(--kirby-white);--kirby-inputs-indicator-background-color: var(--kirby-white);--kirby-inputs-indicator-color: var(--kirby-black);--kirby-inputs-placeholder-color: var(--kirby-white-overlay-50);--kirby-inputs-elevation: none;height:100%;height:100dvh;background-color:var(--sidebar-background-color, var(--kirby-tertiary));color:var(--sidebar-color, var(--kirby-tertiary-contrast));display:flex;flex-direction:column;overflow:auto}:host *{scrollbar-width:thin;scrollbar-color:var(--kirby-semi-dark) var(--kirby-tertiary)}:host *::-webkit-scrollbar{width:16px}:host *::-webkit-scrollbar-track{background:transparent}:host *::-webkit-scrollbar-thumb{background-color:#8e8e8e80;border-radius:20px;border:4px solid transparent;background-clip:content-box}.sidebar-content{flex-grow:1;display:flex;flex-direction:column;overflow-y:auto}@supports (scrollbar-gutter: stable){.sidebar-content{overflow:hidden auto;scrollbar-gutter:auto}}.sidebar-header,.sidebar-footer{z-index:1;display:flex;align-items:center;justify-content:center;position:sticky}.sidebar-header.bottom-border{box-shadow:0 4px 10px 2px #1c1c1c4d;transition:opacity .3s}.sidebar-footer.top-border{box-shadow:0 -4px 10px 2px #1c1c1c4d;transition:opacity .3s}\n"] }]
481
+ args: [{ selector: 'aside[kirby-x-sidebar-menu]', imports: [HeightObserverDirective, MenuContainerComponent, CdkScrollable], template: "<div class=\"sidebar-header\" [class.bottom-border]=\"vm.showHeaderBottomBorder()\">\n <ng-content select=\"[slot='header']\"></ng-content>\n</div>\n<div\n kirbyXHeightObserver\n class=\"sidebar-content\"\n cdkScrollable\n (scroll)=\"vm.setScroll($event)\"\n (heightChange)=\"vm.setContainerHeight($event)\"\n>\n <kirby-x-menu-container\n kirbyXHeightObserver\n (heightChange)=\"vm.setMenuHeight($event)\"\n ></kirby-x-menu-container>\n</div>\n<div class=\"sidebar-footer\" [class.top-border]=\"vm.showFooterTopBorder()\">\n <ng-content select=\"[slot='footer']\"></ng-content>\n</div>\n", styles: ["ion-item-option.primary{background-color:var(--kirby-primary);color:var(--kirby-primary-contrast)}ion-item-option.secondary{background-color:var(--kirby-secondary);color:var(--kirby-secondary-contrast)}ion-item-option.tertiary{background-color:var(--kirby-tertiary);color:var(--kirby-tertiary-contrast)}ion-item-option.success{background-color:var(--kirby-success);color:var(--kirby-success-contrast)}ion-item-option.warning{background-color:var(--kirby-warning);color:var(--kirby-warning-contrast)}ion-item-option.danger{background-color:var(--kirby-danger);color:var(--kirby-danger-contrast)}ion-item-option.white-overlay{background-color:var(--kirby-white-overlay);color:var(--kirby-white-overlay-contrast)}ion-item-option.light{background-color:var(--kirby-light);color:var(--kirby-light-contrast)}ion-item-option.medium{background-color:var(--kirby-medium);color:var(--kirby-medium-contrast)}ion-item-option.dark{background-color:var(--kirby-dark);color:var(--kirby-dark-contrast)}ion-item-option.dark-overlay{background-color:var(--kirby-dark-overlay);color:var(--kirby-dark-overlay-contrast)}:host{--kirby-inputs-background-color: var(--kirby-white-overlay);--kirby-inputs-background-color-hover: var(--kirby-white-overlay-30);--kirby-inputs-background-color-active: var(--kirby-white-overlay-40);--kirby-inputs-color: var(--kirby-white);--kirby-inputs-indicator-background-color: var(--kirby-white);--kirby-inputs-indicator-color: var(--kirby-black);--kirby-inputs-placeholder-color: var(--kirby-white-overlay-50);--kirby-inputs-color-hover: var(--kirby-white-overlay-50);--kirby-inputs-elevation: none;height:100%;height:100dvh;background-color:var(--sidebar-background-color, var(--kirby-tertiary));color:var(--sidebar-color, var(--kirby-tertiary-contrast));display:flex;flex-direction:column;overflow:auto}:host *{scrollbar-width:thin;scrollbar-color:var(--kirby-semi-dark) var(--kirby-tertiary)}:host *::-webkit-scrollbar{width:16px}:host *::-webkit-scrollbar-track{background:transparent}:host *::-webkit-scrollbar-thumb{background-color:#8e8e8e80;border-radius:20px;border:4px solid transparent;background-clip:content-box}.sidebar-content{flex-grow:1;display:flex;flex-direction:column;overflow-y:auto}@supports (scrollbar-gutter: stable){.sidebar-content{overflow:hidden auto;scrollbar-gutter:auto}}.sidebar-header,.sidebar-footer{z-index:1;display:flex;align-items:center;justify-content:center;position:sticky}.sidebar-header.bottom-border{box-shadow:0 4px 10px 2px #1c1c1c4d;transition:opacity .3s}.sidebar-footer.top-border{box-shadow:0 -4px 10px 2px #1c1c1c4d;transition:opacity .3s}\n"] }]
482
482
  }] });
483
483
 
484
484
  class SidebarComponent {
@@ -563,11 +563,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
563
563
 
564
564
  class SidebarFooterComponent {
565
565
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: SidebarFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
566
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.7", type: SidebarFooterComponent, isStandalone: true, selector: "kirby-x-sidebar-footer", ngImport: i0, template: '<footer><ng-content></ng-content></footer>', isInline: true, styles: [":host,footer{display:flex;flex-direction:column;align-items:center;justify-content:center}:host{min-height:80px}footer{width:100%}\n"] }); }
566
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.7", type: SidebarFooterComponent, isStandalone: true, selector: "kirby-x-sidebar-footer", ngImport: i0, template: '<footer><ng-content></ng-content></footer>', isInline: true, styles: [":host,footer{display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%}:host{min-height:80px}\n"] }); }
567
567
  }
568
568
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: SidebarFooterComponent, decorators: [{
569
569
  type: Component,
570
- args: [{ selector: 'kirby-x-sidebar-footer', template: '<footer><ng-content></ng-content></footer>', styles: [":host,footer{display:flex;flex-direction:column;align-items:center;justify-content:center}:host{min-height:80px}footer{width:100%}\n"] }]
570
+ args: [{ selector: 'kirby-x-sidebar-footer', template: '<footer><ng-content></ng-content></footer>', styles: [":host,footer{display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%}:host{min-height:80px}\n"] }]
571
571
  }] });
572
572
 
573
573
  class SidebarHeaderComponent {
@@ -579,7 +579,7 @@ class SidebarHeaderComponent {
579
579
  <ng-content select="[slot='action']"></ng-content>
580
580
  </div>
581
581
  </header>
582
- `, isInline: true, styles: [":host,header{display:flex;flex-direction:column;align-items:center;justify-content:center}:host{flex-grow:1}header{width:100%}:host::ng-deep [slot=logo]{display:inline-flex}:host::ng-deep [slot=logo] img,:host::ng-deep img[slot=logo]{object-fit:contain;max-width:100%;max-height:100%}.sidebar-logo{display:flex;align-items:center;height:50px;margin:var(--kirby-spacing-l) var(--kirby-spacing-m)}.action-bar{display:flex;flex-direction:row;align-items:center;justify-content:center;box-sizing:border-box;width:100%}.action-bar:has([slot=action]){padding:0 var(--kirby-spacing-xs) var(--kirby-spacing-xs)}\n"] }); }
582
+ `, isInline: true, styles: [":host,header{display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%}:host::ng-deep [slot=logo]{display:inline-flex}:host::ng-deep [slot=logo] img,:host::ng-deep img[slot=logo]{object-fit:contain;max-width:100%;max-height:100%}.sidebar-logo{display:flex;align-items:center;height:50px;margin:var(--kirby-spacing-l) var(--kirby-spacing-m)}.action-bar{display:flex;flex-direction:row;align-items:center;justify-content:center;box-sizing:border-box;width:100%}.action-bar:has([slot=action]){padding:0 var(--kirby-spacing-xs) var(--kirby-spacing-xs)}\n"] }); }
583
583
  }
584
584
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: SidebarHeaderComponent, decorators: [{
585
585
  type: Component,
@@ -590,7 +590,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
590
590
  <ng-content select="[slot='action']"></ng-content>
591
591
  </div>
592
592
  </header>
593
- `, styles: [":host,header{display:flex;flex-direction:column;align-items:center;justify-content:center}:host{flex-grow:1}header{width:100%}:host::ng-deep [slot=logo]{display:inline-flex}:host::ng-deep [slot=logo] img,:host::ng-deep img[slot=logo]{object-fit:contain;max-width:100%;max-height:100%}.sidebar-logo{display:flex;align-items:center;height:50px;margin:var(--kirby-spacing-l) var(--kirby-spacing-m)}.action-bar{display:flex;flex-direction:row;align-items:center;justify-content:center;box-sizing:border-box;width:100%}.action-bar:has([slot=action]){padding:0 var(--kirby-spacing-xs) var(--kirby-spacing-xs)}\n"] }]
593
+ `, styles: [":host,header{display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%}:host::ng-deep [slot=logo]{display:inline-flex}:host::ng-deep [slot=logo] img,:host::ng-deep img[slot=logo]{object-fit:contain;max-width:100%;max-height:100%}.sidebar-logo{display:flex;align-items:center;height:50px;margin:var(--kirby-spacing-l) var(--kirby-spacing-m)}.action-bar{display:flex;flex-direction:row;align-items:center;justify-content:center;box-sizing:border-box;width:100%}.action-bar:has([slot=action]){padding:0 var(--kirby-spacing-xs) var(--kirby-spacing-xs)}\n"] }]
594
594
  }] });
595
595
 
596
596
  class SidebarModule {
@@ -1 +1 @@
1
- {"version":3,"file":"kirbydesign-extensions-angular-sidebar-menu.mjs","sources":["../../sidebar-menu/src/functions/scroll-into-view-if-necessary/scroll-into-view-if-necessary.function.ts","../../sidebar-menu/src/components/menu-item/menu-item.component.ts","../../sidebar-menu/src/components/menu-item/menu-item.component.html","../../sidebar-menu/src/services/menu-state/menu-state.service.ts","../../sidebar-menu/src/components/menu-anchor-item/menu-anchor-item.component.ts","../../sidebar-menu/src/components/menu-anchor-item/menu-anchor-item.component.html","../../sidebar-menu/src/functions/ensure-in-view/ensure-in-view.function.ts","../../sidebar-menu/src/animations/drop-down.animation.ts","../../sidebar-menu/src/components/menu-submenu-item/menu-submenu-item.component.ts","../../sidebar-menu/src/components/menu-submenu-item/menu-submenu-item.component.html","../../sidebar-menu/src/components/menu-item-list/menu-item-list.component.ts","../../sidebar-menu/src/components/menu-item-list/menu-item-list.component.html","../../sidebar-menu/src/components/menu-container/menu-container.component.ts","../../sidebar-menu/src/directives/height-observer/height-observer.directive.ts","../../sidebar-menu/src/services/sidebar/sidebar.service.ts","../../sidebar-menu/src/components/sidebar-menu/sidebar-menu.component.ts","../../sidebar-menu/src/components/sidebar-menu/sidebar-menu.component.html","../../sidebar-menu/src/public-components/sidebar/sidebar.component.ts","../../sidebar-menu/src/public-components/sidebar-footer/sidebar-footer.component.ts","../../sidebar-menu/src/public-components/sidebar-header/sidebar-header.component.ts","../../sidebar-menu/src/sidebar.module.ts","../../sidebar-menu/src/kirbydesign-extensions-angular-sidebar-menu.ts"],"sourcesContent":["/**\n * the HTMLElement.scrollIntoViewIfNecessary is non-standard and not supported in all browsers (e.g. firefox),\n * so we implement a version based on standard\n */\nexport function scrollIntoViewIfNecessary(\n scrollContainer: Element,\n child: Element,\n position: ScrollLogicalPosition = 'center'\n) {\n const containerRect = scrollContainer.getBoundingClientRect();\n const elementRect = child.getBoundingClientRect();\n if (containerRect.top > elementRect.top || containerRect.bottom < elementRect.bottom) {\n child.scrollIntoView({\n behavior: 'instant',\n block: position,\n inline: position,\n });\n }\n}\n","import { Component, computed, input } from '@angular/core';\nimport { IconModule } from '@kirbydesign/designsystem/icon';\nimport { MenuItemSize } from '../../types';\n\n@Component({\n selector: 'a[kirby-x-menu-item],button[kirby-x-menu-item]',\n host: {\n '[attr.id]': '\"item\" + id()',\n '[class]': 'size()',\n },\n templateUrl: './menu-item.component.html',\n styleUrls: ['./menu-item.component.scss'],\n imports: [IconModule],\n})\nexport class MenuItemComponent {\n readonly id = input.required<string>();\n readonly size = input.required<MenuItemSize>();\n readonly icon = input<string>();\n\n readonly iconSize = computed(() => (this.size() === 'lg' ? 'sm' : 'xs'));\n}\n","<div class=\"menu-item-start {{ size() }}\">\n @if (icon(); as icon) {\n <kirby-icon [size]=\"iconSize()\" [name]=\"icon\"></kirby-icon>\n }\n</div>\n\n<div class=\"menu-item-content\">\n <ng-content></ng-content>\n</div>\n\n<div class=\"menu-item-end\">\n <ng-content select=\"[slot='end']\"></ng-content>\n</div>\n","import { Injectable, Signal, signal } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { moveItemInArray } from '@angular/cdk/drag-drop';\nimport {\n CheckEvent,\n ExpandEvent,\n SidebarMenuItem,\n SidebarMenuItemReorderEvent,\n SubmenuItem,\n} from '../../models';\n\n@Injectable({ providedIn: 'root' })\nexport class MenuStateService {\n readonly #menuItems = signal<SidebarMenuItem[]>([]);\n readonly #selectedItem = signal<string | undefined>(undefined);\n readonly #expandedItems = signal<Set<string>>(new Set());\n readonly #checkedItems = signal<Set<string>>(new Set());\n readonly #autoCollapse = signal<boolean>(false);\n readonly #animationsDisabled = signal<boolean>(false);\n readonly #expandEvents = new Subject<ExpandEvent>();\n readonly #checkEvents = new Subject<CheckEvent>();\n readonly #reorderEvents = new Subject<SidebarMenuItemReorderEvent>();\n readonly #selectEvents = new Subject<string>();\n\n get menuItems(): Signal<SidebarMenuItem[]> {\n return this.#menuItems.asReadonly();\n }\n\n set menuItems(items: SidebarMenuItem[]) {\n this.#menuItems.set(items);\n }\n\n get selectedItem(): Signal<string | undefined> {\n return this.#selectedItem.asReadonly();\n }\n\n set selectedItem(id: string) {\n this.#selectedItem.set(id);\n }\n\n get expandedItems(): Signal<Set<string>> {\n return this.#expandedItems.asReadonly();\n }\n\n set expandedItems(ids: Set<string>) {\n this.#expandedItems.set(ids);\n }\n\n get checkedItems(): Signal<Set<string>> {\n return this.#checkedItems.asReadonly();\n }\n\n set checkedItems(ids: Set<string>) {\n this.#checkedItems.set(ids);\n }\n\n set autoCollapse(enabled: boolean) {\n this.#autoCollapse.set(enabled);\n }\n\n get animationsDisabled(): Signal<boolean> {\n return this.#animationsDisabled.asReadonly();\n }\n\n set animationsDisabled(disabled: boolean) {\n this.#animationsDisabled.set(disabled);\n }\n\n get expandEvents(): Observable<ExpandEvent> {\n return this.#expandEvents.asObservable();\n }\n\n get checkEvents(): Observable<CheckEvent> {\n return this.#checkEvents.asObservable();\n }\n\n get reorderEvents(): Observable<SidebarMenuItemReorderEvent> {\n return this.#reorderEvents.asObservable();\n }\n\n get selectEvents(): Observable<string> {\n return this.#selectEvents.asObservable();\n }\n\n expandItem(id: string): void {\n this.#expandEvents.next({ id, isExpanded: true });\n if (this.#autoCollapse()) {\n this.#expandedItems.set(this.#findAncestors(id));\n return;\n }\n this.#expandedItems.update((items) => {\n items.add(id);\n return new Set(items);\n });\n }\n\n collapseItem(id: string): void {\n this.#expandEvents.next({ id, isExpanded: false });\n this.#expandedItems.update((items) => {\n items.delete(id);\n return new Set(items);\n });\n }\n\n checkItem(id: string): void {\n this.#checkEvents.next({ id, isChecked: true });\n this.#checkedItems.update((items) => {\n items.add(id);\n return new Set(items);\n });\n }\n\n uncheckItem(id: string): void {\n this.#checkEvents.next({ id, isChecked: false });\n this.#checkedItems.update((items) => {\n items.delete(id);\n return new Set(items);\n });\n }\n\n selectItem(id: string): void {\n this.#selectEvents.next(id);\n this.#selectedItem.set(id);\n }\n\n #findAncestors(id: string): Set<string> {\n return recursivelyFindAncestors(this.#menuItems(), id) ?? new Set();\n }\n\n reorderItems(\n submenu: SubmenuItem,\n itemId: string,\n previousIndex: number,\n currentIndex: number\n ): void {\n moveItemInArray(submenu.children, previousIndex, currentIndex);\n this.#reorderEvents.next({\n parentId: submenu.id,\n itemId,\n previousIndex,\n currentIndex,\n reorderedItemIds: submenu.children.map((item) => item.id),\n });\n this.#menuItems.update((items) => [...items]);\n }\n}\n\nfunction recursivelyFindAncestors(items: SidebarMenuItem[], id: string): Set<string> | undefined {\n for (const item of items) {\n if (item.id === id) {\n return new Set([item.id]);\n }\n if (item.type === 'submenu') {\n const foundAncestors = recursivelyFindAncestors(item.children, id);\n if (foundAncestors) {\n foundAncestors.add(item.id);\n return foundAncestors;\n }\n }\n }\n return undefined;\n}\n","import { Component, computed, inject, input, Signal } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { ToggleButtonComponent } from '@kirbydesign/designsystem/toggle-button';\nimport { ButtonComponent } from '@kirbydesign/designsystem/button';\nimport { IconComponent } from '@kirbydesign/designsystem/icon';\nimport { BadgeComponent } from '@kirbydesign/designsystem/badge';\nimport { ActionItem, ExternalLinkItem, RouterLinkItem } from '../../models';\nimport { MenuItemSize } from '../../types';\nimport { MenuItemComponent } from '../menu-item';\nimport { MenuStateService } from '../../services/menu-state';\n\ntype ViewModel = {\n item: Signal<ActionItem | RouterLinkItem | ExternalLinkItem>;\n size: Signal<MenuItemSize>;\n isSelected: Signal<boolean>;\n isChecked: Signal<boolean>;\n selectItem: () => void;\n checkItem: (checked: boolean) => void;\n};\n\n@Component({\n selector: 'li[kirby-x-menu-anchor-item]',\n templateUrl: './menu-anchor-item.component.html',\n styleUrls: ['./menu-anchor-item.component.scss'],\n host: {\n '[class.selected]': 'vm.isSelected()',\n '[class.has-toggle]': '!!vm.item().toggle',\n '[class.has-badge]': '!!vm.item().badge',\n },\n imports: [\n MenuItemComponent,\n RouterLink,\n ToggleButtonComponent,\n ButtonComponent,\n IconComponent,\n BadgeComponent,\n ],\n})\nexport class MenuAnchorItemComponent {\n readonly item = input.required<ActionItem | RouterLinkItem | ExternalLinkItem>();\n readonly size = input.required<MenuItemSize>();\n\n readonly #stateService = inject(MenuStateService);\n\n readonly #isSelected = computed(() => this.item().id === this.#stateService.selectedItem());\n readonly #isChecked = computed(() => {\n const id = this.item().id;\n const checkedItems = this.#stateService.checkedItems();\n return checkedItems.has(id);\n });\n\n #selectItem(): void {\n this.#stateService.selectItem(this.item().id);\n }\n\n #checkItem(checked: boolean): void {\n if (checked) {\n this.#stateService.checkItem(this.item().id);\n } else {\n this.#stateService.uncheckItem(this.item().id);\n }\n }\n\n readonly vm: ViewModel = {\n item: this.item,\n size: this.size,\n isSelected: this.#isSelected,\n isChecked: this.#isChecked,\n selectItem: this.#selectItem.bind(this),\n checkItem: this.#checkItem.bind(this),\n };\n}\n","@let item = vm.item();\n@switch (item.type) {\n @case ('action') {\n <a\n kirby-x-menu-item\n [class.selected]=\"vm.isSelected()\"\n [size]=\"vm.size()\"\n [id]=\"item.id\"\n [icon]=\"item.icon\"\n [attr.href]=\"item.href\"\n (click)=\"$event.preventDefault(); vm.selectItem()\"\n (keydown.enter)=\"$event.preventDefault(); vm.selectItem()\"\n >\n {{ item.title }}\n @if (item.badge) {\n <kirby-badge\n slot=\"end\"\n class=\"item-badge\"\n [themeColor]=\"item.badge.themeColor ?? 'primary'\"\n >\n {{ item.badge.value }}\n </kirby-badge>\n }\n @if (item.isLink) {\n <kirby-icon name=\"link\" slot=\"end\" class=\"external-link\"></kirby-icon>\n }\n @if (item.toggle) {\n <div slot=\"end\" class=\"toggle-spacer\"></div>\n }\n </a>\n }\n @case ('router-link') {\n <a\n kirby-x-menu-item\n [class.selected]=\"vm.isSelected()\"\n [size]=\"vm.size()\"\n [id]=\"item.id\"\n [icon]=\"item.icon\"\n [routerLink]=\"item.route\"\n [queryParams]=\"item.queryParams\"\n [skipLocationChange]=\"item.skipLocationChange\"\n [replaceUrl]=\"item.replaceUrl\"\n (click)=\"vm.selectItem()\"\n (keydown.enter)=\"vm.selectItem()\"\n >\n {{ item.title }}\n @if (item.badge) {\n <kirby-badge\n slot=\"end\"\n class=\"item-badge\"\n [themeColor]=\"item.badge.themeColor ?? 'primary'\"\n >\n {{ item.badge.value }}\n </kirby-badge>\n }\n @if (item.toggle) {\n <div slot=\"end\" class=\"toggle-spacer\"></div>\n }\n </a>\n }\n @case ('external-link') {\n <a\n kirby-x-menu-item\n [class.selected]=\"vm.isSelected()\"\n [size]=\"vm.size()\"\n [id]=\"item.id\"\n [icon]=\"item.icon\"\n [attr.href]=\"item.url\"\n [attr.target]=\"item.target\"\n (click)=\"vm.selectItem()\"\n (keydown.enter)=\"vm.selectItem()\"\n >\n {{ item.title }}\n @if (item.badge) {\n <kirby-badge\n slot=\"end\"\n class=\"item-badge\"\n [themeColor]=\"item.badge.themeColor ?? 'primary'\"\n >\n {{ item.badge.value }}\n </kirby-badge>\n }\n <kirby-icon name=\"link\" slot=\"end\" class=\"external-link\"></kirby-icon>\n @if (item.toggle) {\n <div slot=\"end\" class=\"toggle-spacer\"></div>\n }\n </a>\n }\n}\n\n@if (item.toggle) {\n <kirby-toggle-button\n class=\"toggle-button-wrapper\"\n [checked]=\"vm.isChecked()\"\n (checkChanged)=\"vm.checkItem($event)\"\n >\n <button\n kirby-button\n unchecked\n size=\"xs\"\n attentionLevel=\"3\"\n tabindex=\"-1\"\n [noDecoration]=\"true\"\n class=\"toggle-button\"\n >\n <kirby-icon size=\"xs\" [name]=\"item.toggle.uncheckedIcon\"></kirby-icon>\n </button>\n <button\n kirby-button\n checked\n size=\"xs\"\n attentionLevel=\"3\"\n tabindex=\"-1\"\n [noDecoration]=\"true\"\n class=\"toggle-button\"\n >\n <kirby-icon size=\"xs\" [name]=\"item.toggle.checkedIcon\"></kirby-icon>\n </button>\n </kirby-toggle-button>\n}\n","import { scrollIntoViewIfNecessary } from '../scroll-into-view-if-necessary';\n\n/**\n * Ensures the element top is not smaller than the scroll container top.\n */\nexport function ensureInView(scrollContainer: Element, element: Element, durationMs: number): void {\n let startTime: number | null = null;\n\n const updatePosition = (timestamp: number) => {\n if (!startTime) {\n startTime = timestamp;\n }\n\n const elapsedTime = timestamp - startTime;\n\n if (elapsedTime < durationMs) {\n scrollIntoViewIfNecessary(scrollContainer, element, 'start');\n requestAnimationFrame(updatePosition);\n }\n };\n\n requestAnimationFrame(updatePosition);\n}\n","import { animate, AUTO_STYLE, style, transition, trigger } from '@angular/animations';\n\nexport const DropDownAnimation = trigger('dropDownMenu', [\n transition(':enter', [\n style({ height: 0, overflow: 'hidden' }),\n animate('300ms ease', style({ height: AUTO_STYLE })),\n ]),\n\n transition(':leave', [\n style({ height: AUTO_STYLE, overflow: 'hidden' }),\n animate('300ms ease', style({ height: 0 })),\n ]),\n]);\n","import { Component, computed, ElementRef, forwardRef, inject, input, Signal } from '@angular/core';\nimport { IconComponent } from '@kirbydesign/designsystem/icon';\nimport { CdkDragDrop, CdkDropList } from '@angular/cdk/drag-drop';\nimport { SubmenuItem } from '../../models';\nimport { MenuItemComponent } from '../menu-item';\nimport { MenuItemSize } from '../../types';\nimport { MenuItemListComponent } from '../menu-item-list';\nimport { MenuStateService } from '../../services/menu-state';\nimport { ensureInView } from '../../functions/ensure-in-view';\nimport { DropDownAnimation } from '../../animations';\n\ntype ViewModel = {\n item: Signal<SubmenuItem>;\n size: Signal<MenuItemSize>;\n isExpanded: Signal<boolean>;\n submenuId: Signal<string>;\n submenuSize: Signal<MenuItemSize>;\n animationsDisabled: Signal<boolean>;\n toggleSubmenu: () => void;\n reorderItem: (event: CdkDragDrop<string[]>) => void;\n};\n\n@Component({\n selector: 'li[kirby-x-menu-submenu-item]',\n templateUrl: './menu-submenu-item.component.html',\n styleUrls: ['./menu-submenu-item.component.scss'],\n animations: [DropDownAnimation],\n imports: [MenuItemComponent, IconComponent, forwardRef(() => MenuItemListComponent), CdkDropList],\n})\nexport class MenuSubmenuItemComponent {\n readonly item = input.required<SubmenuItem>();\n readonly size = input.required<MenuItemSize>();\n\n readonly #element = inject(ElementRef).nativeElement as Element;\n readonly #stateService = inject(MenuStateService);\n\n readonly #isExpanded = computed(() => {\n const id = this.item().id;\n const expandedItems = this.#stateService.expandedItems();\n return expandedItems.has(id);\n });\n readonly #submenuSize = computed(() => {\n switch (this.size()) {\n case 'lg':\n return 'md';\n case 'md':\n return 'sm';\n default:\n return 'xs';\n }\n });\n\n #toggleSubmenu(): void {\n const button = this.#element.querySelector('button[kirby-x-menu-item]');\n const scrollContainer = this.#element.closest('.sidebar-content');\n if (button && scrollContainer) {\n ensureInView(scrollContainer, button, 400);\n }\n if (this.#isExpanded()) {\n this.#stateService.collapseItem(this.item().id);\n } else {\n this.#stateService.expandItem(this.item().id);\n }\n }\n\n #reorderItem(event: CdkDragDrop<string[]>): void {\n this.#stateService.reorderItems(\n this.item(),\n event.item.data,\n event.previousIndex,\n event.currentIndex\n );\n }\n\n readonly vm: ViewModel = {\n item: this.item,\n size: this.size,\n isExpanded: this.#isExpanded,\n submenuId: computed(() => `item-${this.item().id}-content`),\n submenuSize: this.#submenuSize,\n animationsDisabled: this.#stateService.animationsDisabled,\n toggleSubmenu: this.#toggleSubmenu.bind(this),\n reorderItem: this.#reorderItem.bind(this),\n };\n}\n","@let item = vm.item();\n<button\n kirby-x-menu-item\n type=\"button\"\n class=\"submenu-toggle\"\n [size]=\"vm.size()\"\n [id]=\"item.id\"\n [icon]=\"item.icon\"\n [attr.aria-controls]=\"vm.submenuId()\"\n [attr.aria-expanded]=\"vm.isExpanded()\"\n (click)=\"vm.toggleSubmenu()\"\n>\n {{ item.title }}\n <kirby-icon\n slot=\"end\"\n name=\"arrow-more\"\n class=\"disclosure\"\n [class.rotate]=\"vm.isExpanded()\"\n ></kirby-icon>\n</button>\n@if (vm.isExpanded()) {\n <ul\n kirby-x-menu-item-list\n [items]=\"item.children\"\n [size]=\"vm.submenuSize()\"\n [id]=\"vm.submenuId()\"\n [@dropDownMenu]\n [@.disabled]=\"vm.animationsDisabled()\"\n cdkDropList\n (cdkDropListDropped)=\"vm.reorderItem($event)\"\n [isReorderable]=\"item.isReorderable ?? false\"\n ></ul>\n}\n","import { ChangeDetectionStrategy, Component, forwardRef, input, Signal } from '@angular/core';\nimport { DividerComponent } from '@kirbydesign/designsystem/divider';\nimport { CdkDrag } from '@angular/cdk/drag-drop';\nimport { SidebarMenuItem } from '../../models';\nimport { MenuAnchorItemComponent } from '../menu-anchor-item';\nimport { MenuSubmenuItemComponent } from '../menu-submenu-item';\nimport { MenuItemSize } from '../../types';\n\ntype ViewModel = {\n id: Signal<string | undefined>;\n size: Signal<MenuItemSize>;\n items: Signal<SidebarMenuItem[]>;\n isReorderable: Signal<boolean>;\n};\n\n@Component({\n selector: 'ul[kirby-x-menu-item-list]',\n templateUrl: './menu-item-list.component.html',\n styleUrls: ['./menu-item-list.component.scss'],\n host: {\n '[attr.id]': 'vm.id()',\n '[class]': 'vm.size()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n DividerComponent,\n MenuAnchorItemComponent,\n forwardRef(() => MenuSubmenuItemComponent),\n CdkDrag,\n ],\n})\nexport class MenuItemListComponent {\n readonly items = input.required<SidebarMenuItem[]>();\n readonly size = input<MenuItemSize>('lg');\n readonly id = input<string>();\n readonly isReorderable = input<boolean>(false);\n\n readonly vm: ViewModel = {\n id: this.id,\n size: this.size,\n items: this.items,\n isReorderable: this.isReorderable,\n };\n}\n","@for (item of vm.items(); track item.id) {\n @switch (item.type) {\n @case ('divider') {\n <kirby-divider aria-hidden=\"true\"></kirby-divider>\n }\n @case ('submenu') {\n <li\n kirby-x-menu-submenu-item\n [item]=\"item\"\n [size]=\"vm.size()\"\n cdkDrag\n cdkDragPreviewContainer=\"parent\"\n [cdkDragBoundary]=\"'[cdkDropList]'\"\n [cdkDragDisabled]=\"!vm.isReorderable()\"\n [cdkDragData]=\"item.id\"\n ></li>\n }\n @default {\n <li\n kirby-x-menu-anchor-item\n [item]=\"item\"\n [size]=\"vm.size()\"\n cdkDrag\n cdkDragPreviewContainer=\"parent\"\n [cdkDragBoundary]=\"'[cdkDropList]'\"\n [cdkDragDisabled]=\"!vm.isReorderable()\"\n [cdkDragData]=\"item.id\"\n ></li>\n }\n }\n}\n","import { afterNextRender, Component, ElementRef, inject, Signal } from '@angular/core';\n\nimport { scrollIntoViewIfNecessary } from '../../functions/scroll-into-view-if-necessary';\nimport { SidebarMenuItem } from '../../models';\nimport { MenuItemListComponent } from '../menu-item-list';\nimport { MenuStateService } from '../../services/menu-state';\n\ntype ViewModel = {\n items: Signal<SidebarMenuItem[]>;\n};\n\n@Component({\n selector: 'kirby-x-menu-container',\n template: `\n <nav aria-label=\"Sidebar Menu\">\n <ul kirby-x-menu-item-list [items]=\"vm.items()\"></ul>\n </nav>\n `,\n styles: 'nav { padding: 0 var(--kirby-spacing-xxs); }',\n imports: [MenuItemListComponent],\n})\nexport class MenuContainerComponent {\n readonly #element = inject(ElementRef).nativeElement;\n readonly #stateService = inject(MenuStateService);\n\n constructor() {\n this.#stateService.animationsDisabled = true;\n afterNextRender({\n read: () => {\n this.#scrollSelectedItemIntoView();\n this.#stateService.animationsDisabled = false;\n },\n });\n }\n\n #scrollSelectedItemIntoView() {\n const selectedItem = this.#element.querySelector('li.selected');\n const scrollContainer = this.#element.closest('.sidebar-content');\n if (selectedItem && scrollContainer) {\n scrollIntoViewIfNecessary(scrollContainer, selectedItem);\n }\n }\n\n readonly vm: ViewModel = {\n items: this.#stateService.menuItems,\n };\n}\n","import { Directive, ElementRef, inject, OnDestroy, output } from '@angular/core';\nimport { debounceTime, Subject } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\n\n@Directive({\n selector: '[kirbyXHeightObserver]',\n})\nexport class HeightObserverDirective implements OnDestroy {\n readonly heightChange = output<number>();\n\n readonly #element = inject(ElementRef).nativeElement;\n readonly #heightChanges = new Subject<number>();\n\n readonly #observer = new ResizeObserver((entries) => {\n this.#heightChanges.next(entries[0].contentRect.height);\n });\n\n constructor() {\n this.#observer.observe(this.#element, { box: 'content-box' });\n this.#heightChanges\n .pipe(debounceTime(50), distinctUntilChanged())\n .subscribe(this.heightChange.emit.bind(this.heightChange));\n }\n\n ngOnDestroy() {\n this.#observer.unobserve(this.#element);\n this.#observer.disconnect();\n }\n}\n","import { computed, Injectable, Signal, signal } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class SidebarService {\n readonly #menuHeight = signal<number>(0);\n readonly #containerHeight = signal<number>(0);\n readonly #scrollDistance = signal<number>(0);\n\n readonly #scrollableDistance = computed(() =>\n Math.max(0, this.#menuHeight() - this.#containerHeight())\n );\n readonly #hasScrollbar = computed(() => this.#scrollableDistance() > 0);\n readonly #notAtBottom = computed(() => this.#scrollDistance() < this.#scrollableDistance());\n readonly #showHeaderBottomBorder = computed(() => this.#scrollDistance() > 0);\n readonly #showFooterTopBorder = computed(() => this.#hasScrollbar() && this.#notAtBottom());\n\n get showHeaderBottomBorder(): Signal<boolean> {\n return this.#showHeaderBottomBorder;\n }\n\n get showFooterTopBorder(): Signal<boolean> {\n return this.#showFooterTopBorder;\n }\n\n set menuHeight(height: number) {\n this.#menuHeight.set(height);\n }\n\n set containerHeight(height: number) {\n this.#containerHeight.set(height);\n }\n\n set scrollDistance(distance: number) {\n this.#scrollDistance.set(distance);\n }\n}\n","import { Component, inject, Signal } from '@angular/core';\nimport { CdkScrollable } from '@angular/cdk/overlay';\nimport { MenuContainerComponent } from '../menu-container';\nimport { HeightObserverDirective } from '../../directives/height-observer';\nimport { SidebarService } from '../../services/sidebar';\n\ntype ViewModel = {\n showHeaderBottomBorder: Signal<boolean>;\n showFooterTopBorder: Signal<boolean>;\n setContainerHeight: (height: number) => void;\n setMenuHeight: (height: number) => void;\n setScroll: (scroll: Event) => void;\n};\n\n@Component({\n selector: 'aside[kirby-x-sidebar-menu]',\n templateUrl: './sidebar-menu.component.html',\n styleUrls: ['./sidebar-menu.component.scss'],\n imports: [HeightObserverDirective, MenuContainerComponent, CdkScrollable],\n})\nexport class SidebarMenuComponent {\n readonly #sidebarService = inject(SidebarService);\n\n #setContainerHeight(height: number): void {\n this.#sidebarService.containerHeight = height;\n }\n\n #setMenuHeight(height: number): void {\n this.#sidebarService.menuHeight = height;\n }\n\n #setScrollDistance(event: Event): void {\n const target = event.target as HTMLElement | null;\n if (target) {\n this.#sidebarService.scrollDistance = target.scrollTop;\n }\n }\n\n readonly vm: ViewModel = {\n showHeaderBottomBorder: this.#sidebarService.showHeaderBottomBorder,\n showFooterTopBorder: this.#sidebarService.showFooterTopBorder,\n setContainerHeight: this.#setContainerHeight.bind(this),\n setMenuHeight: this.#setMenuHeight.bind(this),\n setScroll: this.#setScrollDistance.bind(this),\n };\n}\n","<div class=\"sidebar-header\" [class.bottom-border]=\"vm.showHeaderBottomBorder()\">\n <ng-content select=\"[slot='header']\"></ng-content>\n</div>\n<div\n kirbyXHeightObserver\n class=\"sidebar-content\"\n cdkScrollable\n (scroll)=\"vm.setScroll($event)\"\n (heightChange)=\"vm.setContainerHeight($event)\"\n>\n <kirby-x-menu-container\n kirbyXHeightObserver\n (heightChange)=\"vm.setMenuHeight($event)\"\n ></kirby-x-menu-container>\n</div>\n<div class=\"sidebar-footer\" [class.top-border]=\"vm.showFooterTopBorder()\">\n <ng-content select=\"[slot='footer']\"></ng-content>\n</div>\n","import { Component, effect, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { SidebarMenuItem } from '../../models';\nimport { SidebarMenuComponent } from '../../components/sidebar-menu';\nimport { MenuStateService } from '../../services/menu-state';\n\n@Component({\n selector: 'kirby-x-sidebar',\n template: `\n <aside kirby-x-sidebar-menu>\n <ng-content select=\"kirby-x-sidebar-header\" slot=\"header\"></ng-content>\n <ng-content select=\"kirby-x-sidebar-footer\" slot=\"footer\"></ng-content>\n </aside>\n `,\n imports: [SidebarMenuComponent],\n})\nexport class SidebarComponent {\n readonly #stateService = inject(MenuStateService);\n\n @Input()\n set menuItems(menuItems: SidebarMenuItem[]) {\n this.#stateService.menuItems = menuItems;\n }\n\n @Input()\n set selectedItem(value: string) {\n this.#stateService.selectedItem = value;\n }\n\n @Input()\n set expandedItems(value: Set<string>) {\n this.#stateService.expandedItems = value;\n }\n\n @Input()\n set checkedItems(value: Set<string>) {\n this.#stateService.checkedItems = value;\n }\n\n @Input()\n set autoCollapse(value: boolean) {\n this.#stateService.autoCollapse = value;\n }\n\n @Output() menuItemsChange = new EventEmitter<SidebarMenuItem[]>();\n @Output() selectedItemChange = new EventEmitter<string>();\n @Output() expandedItemsChange = new EventEmitter<Set<string>>();\n @Output() checkedItemsChange = new EventEmitter<Set<string>>();\n @Output() expandChange = this.#stateService.expandEvents;\n @Output() checkChange = this.#stateService.checkEvents;\n @Output() itemReorder = this.#stateService.reorderEvents;\n @Output() itemSelect = this.#stateService.selectEvents;\n\n constructor() {\n effect(() => this.menuItemsChange.emit(this.#stateService.menuItems()));\n effect(() => this.selectedItemChange.emit(this.#stateService.selectedItem()));\n effect(() => this.expandedItemsChange.emit(this.#stateService.expandedItems()));\n effect(() => this.checkedItemsChange.emit(this.#stateService.checkedItems()));\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'kirby-x-sidebar-footer',\n template: '<footer><ng-content></ng-content></footer>',\n styles: `\n :host,\n footer {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n }\n\n :host {\n min-height: 80px;\n }\n\n footer {\n width: 100%;\n }\n `,\n})\nexport class SidebarFooterComponent {}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'kirby-x-sidebar-header',\n template: `\n <header>\n <span class=\"sidebar-logo\"><ng-content select=\"[slot='logo']\"></ng-content></span>\n <div class=\"action-bar\">\n <ng-content select=\"[slot='action']\"></ng-content>\n </div>\n </header>\n `,\n styles: `\n :host,\n header {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n }\n\n :host {\n flex-grow: 1;\n }\n\n header {\n width: 100%;\n }\n\n :host::ng-deep [slot='logo'] {\n display: inline-flex;\n }\n\n :host::ng-deep [slot='logo'] img,\n :host::ng-deep img[slot='logo'] {\n object-fit: contain;\n max-width: 100%;\n max-height: 100%;\n }\n\n .sidebar-logo {\n display: flex;\n align-items: center;\n height: 50px;\n margin: var(--kirby-spacing-l) var(--kirby-spacing-m);\n }\n\n .action-bar {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n width: 100%;\n\n &:has([slot='action']) {\n padding: 0 var(--kirby-spacing-xs) var(--kirby-spacing-xs);\n }\n }\n `,\n})\nexport class SidebarHeaderComponent {}\n","import { NgModule } from '@angular/core';\nimport { SidebarComponent } from './public-components/sidebar';\nimport { SidebarFooterComponent } from './public-components/sidebar-footer';\nimport { SidebarHeaderComponent } from './public-components/sidebar-header';\n\n@NgModule({\n imports: [SidebarComponent, SidebarFooterComponent, SidebarHeaderComponent],\n exports: [SidebarComponent, SidebarFooterComponent, SidebarHeaderComponent],\n})\nexport class SidebarModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kirbydesign-extensions-angular-sidebar-menu.mjs","sources":["../../sidebar-menu/src/functions/scroll-into-view-if-necessary/scroll-into-view-if-necessary.function.ts","../../sidebar-menu/src/components/menu-item/menu-item.component.ts","../../sidebar-menu/src/components/menu-item/menu-item.component.html","../../sidebar-menu/src/services/menu-state/menu-state.service.ts","../../sidebar-menu/src/components/menu-anchor-item/menu-anchor-item.component.ts","../../sidebar-menu/src/components/menu-anchor-item/menu-anchor-item.component.html","../../sidebar-menu/src/functions/ensure-in-view/ensure-in-view.function.ts","../../sidebar-menu/src/animations/drop-down.animation.ts","../../sidebar-menu/src/components/menu-submenu-item/menu-submenu-item.component.ts","../../sidebar-menu/src/components/menu-submenu-item/menu-submenu-item.component.html","../../sidebar-menu/src/components/menu-item-list/menu-item-list.component.ts","../../sidebar-menu/src/components/menu-item-list/menu-item-list.component.html","../../sidebar-menu/src/components/menu-container/menu-container.component.ts","../../sidebar-menu/src/directives/height-observer/height-observer.directive.ts","../../sidebar-menu/src/services/sidebar/sidebar.service.ts","../../sidebar-menu/src/components/sidebar-menu/sidebar-menu.component.ts","../../sidebar-menu/src/components/sidebar-menu/sidebar-menu.component.html","../../sidebar-menu/src/public-components/sidebar/sidebar.component.ts","../../sidebar-menu/src/public-components/sidebar-footer/sidebar-footer.component.ts","../../sidebar-menu/src/public-components/sidebar-header/sidebar-header.component.ts","../../sidebar-menu/src/sidebar.module.ts","../../sidebar-menu/src/kirbydesign-extensions-angular-sidebar-menu.ts"],"sourcesContent":["/**\n * the HTMLElement.scrollIntoViewIfNecessary is non-standard and not supported in all browsers (e.g. firefox),\n * so we implement a version based on standard\n */\nexport function scrollIntoViewIfNecessary(\n scrollContainer: Element,\n child: Element,\n position: ScrollLogicalPosition = 'center'\n) {\n const containerRect = scrollContainer.getBoundingClientRect();\n const elementRect = child.getBoundingClientRect();\n if (containerRect.top > elementRect.top || containerRect.bottom < elementRect.bottom) {\n child.scrollIntoView({\n behavior: 'instant',\n block: position,\n inline: position,\n });\n }\n}\n","import { Component, computed, input } from '@angular/core';\nimport { IconModule } from '@kirbydesign/designsystem/icon';\nimport { MenuItemSize } from '../../types';\n\n@Component({\n selector: 'a[kirby-x-menu-item],button[kirby-x-menu-item]',\n host: {\n '[attr.id]': '\"item\" + id()',\n '[class]': 'size()',\n },\n templateUrl: './menu-item.component.html',\n styleUrls: ['./menu-item.component.scss'],\n imports: [IconModule],\n})\nexport class MenuItemComponent {\n readonly id = input.required<string>();\n readonly size = input.required<MenuItemSize>();\n readonly icon = input<string>();\n\n readonly iconSize = computed(() => (this.size() === 'lg' ? 'sm' : 'xs'));\n}\n","<div class=\"menu-item-start {{ size() }}\">\n @if (icon(); as icon) {\n <kirby-icon [size]=\"iconSize()\" [name]=\"icon\"></kirby-icon>\n }\n</div>\n\n<div class=\"menu-item-content\">\n <ng-content></ng-content>\n</div>\n\n<div class=\"menu-item-end\">\n <ng-content select=\"[slot='end']\"></ng-content>\n</div>\n","import { Injectable, Signal, signal } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { moveItemInArray } from '@angular/cdk/drag-drop';\nimport {\n CheckEvent,\n ExpandEvent,\n SidebarMenuItem,\n SidebarMenuItemReorderEvent,\n SubmenuItem,\n} from '../../models';\n\n@Injectable({ providedIn: 'root' })\nexport class MenuStateService {\n readonly #menuItems = signal<SidebarMenuItem[]>([]);\n readonly #selectedItem = signal<string | undefined>(undefined);\n readonly #expandedItems = signal<Set<string>>(new Set());\n readonly #checkedItems = signal<Set<string>>(new Set());\n readonly #autoCollapse = signal<boolean>(false);\n readonly #animationsDisabled = signal<boolean>(false);\n readonly #expandEvents = new Subject<ExpandEvent>();\n readonly #checkEvents = new Subject<CheckEvent>();\n readonly #reorderEvents = new Subject<SidebarMenuItemReorderEvent>();\n readonly #selectEvents = new Subject<string>();\n\n get menuItems(): Signal<SidebarMenuItem[]> {\n return this.#menuItems.asReadonly();\n }\n\n set menuItems(items: SidebarMenuItem[]) {\n this.#menuItems.set(items);\n }\n\n get selectedItem(): Signal<string | undefined> {\n return this.#selectedItem.asReadonly();\n }\n\n set selectedItem(id: string) {\n this.#selectedItem.set(id);\n }\n\n get expandedItems(): Signal<Set<string>> {\n return this.#expandedItems.asReadonly();\n }\n\n set expandedItems(ids: Set<string>) {\n this.#expandedItems.set(ids);\n }\n\n get checkedItems(): Signal<Set<string>> {\n return this.#checkedItems.asReadonly();\n }\n\n set checkedItems(ids: Set<string>) {\n this.#checkedItems.set(ids);\n }\n\n set autoCollapse(enabled: boolean) {\n this.#autoCollapse.set(enabled);\n }\n\n get animationsDisabled(): Signal<boolean> {\n return this.#animationsDisabled.asReadonly();\n }\n\n set animationsDisabled(disabled: boolean) {\n this.#animationsDisabled.set(disabled);\n }\n\n get expandEvents(): Observable<ExpandEvent> {\n return this.#expandEvents.asObservable();\n }\n\n get checkEvents(): Observable<CheckEvent> {\n return this.#checkEvents.asObservable();\n }\n\n get reorderEvents(): Observable<SidebarMenuItemReorderEvent> {\n return this.#reorderEvents.asObservable();\n }\n\n get selectEvents(): Observable<string> {\n return this.#selectEvents.asObservable();\n }\n\n expandItem(id: string): void {\n this.#expandEvents.next({ id, isExpanded: true });\n if (this.#autoCollapse()) {\n this.#expandedItems.set(this.#findAncestors(id));\n return;\n }\n this.#expandedItems.update((items) => {\n items.add(id);\n return new Set(items);\n });\n }\n\n collapseItem(id: string): void {\n this.#expandEvents.next({ id, isExpanded: false });\n this.#expandedItems.update((items) => {\n items.delete(id);\n return new Set(items);\n });\n }\n\n checkItem(id: string): void {\n this.#checkEvents.next({ id, isChecked: true });\n this.#checkedItems.update((items) => {\n items.add(id);\n return new Set(items);\n });\n }\n\n uncheckItem(id: string): void {\n this.#checkEvents.next({ id, isChecked: false });\n this.#checkedItems.update((items) => {\n items.delete(id);\n return new Set(items);\n });\n }\n\n selectItem(id: string): void {\n this.#selectEvents.next(id);\n this.#selectedItem.set(id);\n }\n\n #findAncestors(id: string): Set<string> {\n return recursivelyFindAncestors(this.#menuItems(), id) ?? new Set();\n }\n\n reorderItems(\n submenu: SubmenuItem,\n itemId: string,\n previousIndex: number,\n currentIndex: number\n ): void {\n moveItemInArray(submenu.children, previousIndex, currentIndex);\n this.#reorderEvents.next({\n parentId: submenu.id,\n itemId,\n previousIndex,\n currentIndex,\n reorderedItemIds: submenu.children.map((item) => item.id),\n });\n this.#menuItems.update((items) => [...items]);\n }\n}\n\nfunction recursivelyFindAncestors(items: SidebarMenuItem[], id: string): Set<string> | undefined {\n for (const item of items) {\n if (item.id === id) {\n return new Set([item.id]);\n }\n if (item.type === 'submenu') {\n const foundAncestors = recursivelyFindAncestors(item.children, id);\n if (foundAncestors) {\n foundAncestors.add(item.id);\n return foundAncestors;\n }\n }\n }\n return undefined;\n}\n","import { Component, computed, inject, input, Signal } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { ToggleButtonComponent } from '@kirbydesign/designsystem/toggle-button';\nimport { ButtonComponent } from '@kirbydesign/designsystem/button';\nimport { IconComponent } from '@kirbydesign/designsystem/icon';\nimport { BadgeComponent } from '@kirbydesign/designsystem/badge';\nimport { ActionItem, ExternalLinkItem, RouterLinkItem } from '../../models';\nimport { MenuItemSize } from '../../types';\nimport { MenuItemComponent } from '../menu-item';\nimport { MenuStateService } from '../../services/menu-state';\n\ntype ViewModel = {\n item: Signal<ActionItem | RouterLinkItem | ExternalLinkItem>;\n size: Signal<MenuItemSize>;\n isSelected: Signal<boolean>;\n isChecked: Signal<boolean>;\n selectItem: () => void;\n checkItem: (checked: boolean) => void;\n};\n\n@Component({\n selector: 'li[kirby-x-menu-anchor-item]',\n templateUrl: './menu-anchor-item.component.html',\n styleUrls: ['./menu-anchor-item.component.scss'],\n host: {\n '[class.selected]': 'vm.isSelected()',\n '[class.has-toggle]': '!!vm.item().toggle',\n '[class.has-badge]': '!!vm.item().badge',\n },\n imports: [\n MenuItemComponent,\n RouterLink,\n ToggleButtonComponent,\n ButtonComponent,\n IconComponent,\n BadgeComponent,\n ],\n})\nexport class MenuAnchorItemComponent {\n readonly item = input.required<ActionItem | RouterLinkItem | ExternalLinkItem>();\n readonly size = input.required<MenuItemSize>();\n\n readonly #stateService = inject(MenuStateService);\n\n readonly #isSelected = computed(() => this.item().id === this.#stateService.selectedItem());\n readonly #isChecked = computed(() => {\n const id = this.item().id;\n const checkedItems = this.#stateService.checkedItems();\n return checkedItems.has(id);\n });\n\n #selectItem(): void {\n this.#stateService.selectItem(this.item().id);\n }\n\n #checkItem(checked: boolean): void {\n if (checked) {\n this.#stateService.checkItem(this.item().id);\n } else {\n this.#stateService.uncheckItem(this.item().id);\n }\n }\n\n readonly vm: ViewModel = {\n item: this.item,\n size: this.size,\n isSelected: this.#isSelected,\n isChecked: this.#isChecked,\n selectItem: this.#selectItem.bind(this),\n checkItem: this.#checkItem.bind(this),\n };\n}\n","@let item = vm.item();\n@switch (item.type) {\n @case ('action') {\n <a\n kirby-x-menu-item\n [class.selected]=\"vm.isSelected()\"\n [size]=\"vm.size()\"\n [id]=\"item.id\"\n [icon]=\"item.icon\"\n [attr.href]=\"item.href\"\n (click)=\"$event.preventDefault(); vm.selectItem()\"\n (keydown.enter)=\"$event.preventDefault(); vm.selectItem()\"\n >\n {{ item.title }}\n @if (item.badge) {\n <kirby-badge\n slot=\"end\"\n class=\"item-badge\"\n [themeColor]=\"item.badge.themeColor ?? 'primary'\"\n >\n {{ item.badge.value }}\n </kirby-badge>\n }\n @if (item.isLink) {\n <kirby-icon name=\"link\" slot=\"end\" class=\"external-link\"></kirby-icon>\n }\n @if (item.toggle) {\n <div slot=\"end\" class=\"toggle-spacer\"></div>\n }\n </a>\n }\n @case ('router-link') {\n <a\n kirby-x-menu-item\n [class.selected]=\"vm.isSelected()\"\n [size]=\"vm.size()\"\n [id]=\"item.id\"\n [icon]=\"item.icon\"\n [routerLink]=\"item.route\"\n [queryParams]=\"item.queryParams\"\n [skipLocationChange]=\"item.skipLocationChange\"\n [replaceUrl]=\"item.replaceUrl\"\n (click)=\"vm.selectItem()\"\n (keydown.enter)=\"vm.selectItem()\"\n >\n {{ item.title }}\n @if (item.badge) {\n <kirby-badge\n slot=\"end\"\n class=\"item-badge\"\n [themeColor]=\"item.badge.themeColor ?? 'primary'\"\n >\n {{ item.badge.value }}\n </kirby-badge>\n }\n @if (item.toggle) {\n <div slot=\"end\" class=\"toggle-spacer\"></div>\n }\n </a>\n }\n @case ('external-link') {\n <a\n kirby-x-menu-item\n [class.selected]=\"vm.isSelected()\"\n [size]=\"vm.size()\"\n [id]=\"item.id\"\n [icon]=\"item.icon\"\n [attr.href]=\"item.url\"\n [attr.target]=\"item.target\"\n (click)=\"vm.selectItem()\"\n (keydown.enter)=\"vm.selectItem()\"\n >\n {{ item.title }}\n @if (item.badge) {\n <kirby-badge\n slot=\"end\"\n class=\"item-badge\"\n [themeColor]=\"item.badge.themeColor ?? 'primary'\"\n >\n {{ item.badge.value }}\n </kirby-badge>\n }\n <kirby-icon name=\"link\" slot=\"end\" class=\"external-link\"></kirby-icon>\n @if (item.toggle) {\n <div slot=\"end\" class=\"toggle-spacer\"></div>\n }\n </a>\n }\n}\n\n@if (item.toggle) {\n <kirby-toggle-button\n class=\"toggle-button-wrapper\"\n [checked]=\"vm.isChecked()\"\n (checkChanged)=\"vm.checkItem($event)\"\n >\n <button\n kirby-button\n unchecked\n size=\"xs\"\n attentionLevel=\"3\"\n tabindex=\"-1\"\n [noDecoration]=\"true\"\n class=\"toggle-button\"\n >\n <kirby-icon size=\"xs\" [name]=\"item.toggle.uncheckedIcon\"></kirby-icon>\n </button>\n <button\n kirby-button\n checked\n size=\"xs\"\n attentionLevel=\"3\"\n tabindex=\"-1\"\n [noDecoration]=\"true\"\n class=\"toggle-button\"\n >\n <kirby-icon size=\"xs\" [name]=\"item.toggle.checkedIcon\"></kirby-icon>\n </button>\n </kirby-toggle-button>\n}\n","import { scrollIntoViewIfNecessary } from '../scroll-into-view-if-necessary';\n\n/**\n * Ensures the element top is not smaller than the scroll container top.\n */\nexport function ensureInView(scrollContainer: Element, element: Element, durationMs: number): void {\n let startTime: number | null = null;\n\n const updatePosition = (timestamp: number) => {\n if (!startTime) {\n startTime = timestamp;\n }\n\n const elapsedTime = timestamp - startTime;\n\n if (elapsedTime < durationMs) {\n scrollIntoViewIfNecessary(scrollContainer, element, 'start');\n requestAnimationFrame(updatePosition);\n }\n };\n\n requestAnimationFrame(updatePosition);\n}\n","import { animate, AUTO_STYLE, style, transition, trigger } from '@angular/animations';\n\nexport const DropDownAnimation = trigger('dropDownMenu', [\n transition(':enter', [\n style({ height: 0, overflow: 'hidden' }),\n animate('300ms ease', style({ height: AUTO_STYLE })),\n ]),\n\n transition(':leave', [\n style({ height: AUTO_STYLE, overflow: 'hidden' }),\n animate('300ms ease', style({ height: 0 })),\n ]),\n]);\n","import { Component, computed, ElementRef, forwardRef, inject, input, Signal } from '@angular/core';\nimport { IconComponent } from '@kirbydesign/designsystem/icon';\nimport { CdkDragDrop, CdkDropList } from '@angular/cdk/drag-drop';\nimport { SubmenuItem } from '../../models';\nimport { MenuItemComponent } from '../menu-item';\nimport { MenuItemSize } from '../../types';\nimport { MenuItemListComponent } from '../menu-item-list';\nimport { MenuStateService } from '../../services/menu-state';\nimport { ensureInView } from '../../functions/ensure-in-view';\nimport { DropDownAnimation } from '../../animations';\n\ntype ViewModel = {\n item: Signal<SubmenuItem>;\n size: Signal<MenuItemSize>;\n isExpanded: Signal<boolean>;\n submenuId: Signal<string>;\n submenuSize: Signal<MenuItemSize>;\n animationsDisabled: Signal<boolean>;\n toggleSubmenu: () => void;\n reorderItem: (event: CdkDragDrop<string[]>) => void;\n};\n\n@Component({\n selector: 'li[kirby-x-menu-submenu-item]',\n templateUrl: './menu-submenu-item.component.html',\n styleUrls: ['./menu-submenu-item.component.scss'],\n animations: [DropDownAnimation],\n imports: [MenuItemComponent, IconComponent, forwardRef(() => MenuItemListComponent), CdkDropList],\n})\nexport class MenuSubmenuItemComponent {\n readonly item = input.required<SubmenuItem>();\n readonly size = input.required<MenuItemSize>();\n\n readonly #element = inject(ElementRef).nativeElement as Element;\n readonly #stateService = inject(MenuStateService);\n\n readonly #isExpanded = computed(() => {\n const id = this.item().id;\n const expandedItems = this.#stateService.expandedItems();\n return expandedItems.has(id);\n });\n readonly #submenuSize = computed(() => {\n switch (this.size()) {\n case 'lg':\n return 'md';\n case 'md':\n return 'sm';\n default:\n return 'xs';\n }\n });\n\n #toggleSubmenu(): void {\n const button = this.#element.querySelector('button[kirby-x-menu-item]');\n const scrollContainer = this.#element.closest('.sidebar-content');\n if (button && scrollContainer) {\n ensureInView(scrollContainer, button, 400);\n }\n if (this.#isExpanded()) {\n this.#stateService.collapseItem(this.item().id);\n } else {\n this.#stateService.expandItem(this.item().id);\n }\n }\n\n #reorderItem(event: CdkDragDrop<string[]>): void {\n this.#stateService.reorderItems(\n this.item(),\n event.item.data,\n event.previousIndex,\n event.currentIndex\n );\n }\n\n readonly vm: ViewModel = {\n item: this.item,\n size: this.size,\n isExpanded: this.#isExpanded,\n submenuId: computed(() => `item-${this.item().id}-content`),\n submenuSize: this.#submenuSize,\n animationsDisabled: this.#stateService.animationsDisabled,\n toggleSubmenu: this.#toggleSubmenu.bind(this),\n reorderItem: this.#reorderItem.bind(this),\n };\n}\n","@let item = vm.item();\n<button\n kirby-x-menu-item\n type=\"button\"\n class=\"submenu-toggle\"\n [size]=\"vm.size()\"\n [id]=\"item.id\"\n [icon]=\"item.icon\"\n [attr.aria-controls]=\"vm.submenuId()\"\n [attr.aria-expanded]=\"vm.isExpanded()\"\n (click)=\"vm.toggleSubmenu()\"\n>\n {{ item.title }}\n <kirby-icon\n slot=\"end\"\n name=\"arrow-more\"\n class=\"disclosure\"\n [class.rotate]=\"vm.isExpanded()\"\n ></kirby-icon>\n</button>\n@if (vm.isExpanded()) {\n <ul\n kirby-x-menu-item-list\n [items]=\"item.children\"\n [size]=\"vm.submenuSize()\"\n [id]=\"vm.submenuId()\"\n [@dropDownMenu]\n [@.disabled]=\"vm.animationsDisabled()\"\n cdkDropList\n (cdkDropListDropped)=\"vm.reorderItem($event)\"\n [isReorderable]=\"item.isReorderable ?? false\"\n ></ul>\n}\n","import { ChangeDetectionStrategy, Component, forwardRef, input, Signal } from '@angular/core';\nimport { DividerComponent } from '@kirbydesign/designsystem/divider';\nimport { CdkDrag } from '@angular/cdk/drag-drop';\nimport { SidebarMenuItem } from '../../models';\nimport { MenuAnchorItemComponent } from '../menu-anchor-item';\nimport { MenuSubmenuItemComponent } from '../menu-submenu-item';\nimport { MenuItemSize } from '../../types';\n\ntype ViewModel = {\n id: Signal<string | undefined>;\n size: Signal<MenuItemSize>;\n items: Signal<SidebarMenuItem[]>;\n isReorderable: Signal<boolean>;\n};\n\n@Component({\n selector: 'ul[kirby-x-menu-item-list]',\n templateUrl: './menu-item-list.component.html',\n styleUrls: ['./menu-item-list.component.scss'],\n host: {\n '[attr.id]': 'vm.id()',\n '[class]': 'vm.size()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n DividerComponent,\n MenuAnchorItemComponent,\n forwardRef(() => MenuSubmenuItemComponent),\n CdkDrag,\n ],\n})\nexport class MenuItemListComponent {\n readonly items = input.required<SidebarMenuItem[]>();\n readonly size = input<MenuItemSize>('lg');\n readonly id = input<string>();\n readonly isReorderable = input<boolean>(false);\n\n readonly vm: ViewModel = {\n id: this.id,\n size: this.size,\n items: this.items,\n isReorderable: this.isReorderable,\n };\n}\n","@for (item of vm.items(); track item.id) {\n @switch (item.type) {\n @case ('divider') {\n <kirby-divider aria-hidden=\"true\"></kirby-divider>\n }\n @case ('submenu') {\n <li\n kirby-x-menu-submenu-item\n [item]=\"item\"\n [size]=\"vm.size()\"\n cdkDrag\n cdkDragPreviewContainer=\"parent\"\n [cdkDragBoundary]=\"'[cdkDropList]'\"\n [cdkDragDisabled]=\"!vm.isReorderable()\"\n [cdkDragData]=\"item.id\"\n ></li>\n }\n @default {\n <li\n kirby-x-menu-anchor-item\n [item]=\"item\"\n [size]=\"vm.size()\"\n cdkDrag\n cdkDragPreviewContainer=\"parent\"\n [cdkDragBoundary]=\"'[cdkDropList]'\"\n [cdkDragDisabled]=\"!vm.isReorderable()\"\n [cdkDragData]=\"item.id\"\n ></li>\n }\n }\n}\n","import { afterNextRender, Component, ElementRef, inject, Signal } from '@angular/core';\n\nimport { scrollIntoViewIfNecessary } from '../../functions/scroll-into-view-if-necessary';\nimport { SidebarMenuItem } from '../../models';\nimport { MenuItemListComponent } from '../menu-item-list';\nimport { MenuStateService } from '../../services/menu-state';\n\ntype ViewModel = {\n items: Signal<SidebarMenuItem[]>;\n};\n\n@Component({\n selector: 'kirby-x-menu-container',\n template: `\n <nav aria-label=\"Sidebar Menu\">\n <ul kirby-x-menu-item-list [items]=\"vm.items()\"></ul>\n </nav>\n `,\n styles: 'nav { padding: 0 var(--kirby-spacing-xxs); }',\n imports: [MenuItemListComponent],\n})\nexport class MenuContainerComponent {\n readonly #element = inject(ElementRef).nativeElement;\n readonly #stateService = inject(MenuStateService);\n\n constructor() {\n this.#stateService.animationsDisabled = true;\n afterNextRender({\n read: () => {\n this.#scrollSelectedItemIntoView();\n this.#stateService.animationsDisabled = false;\n },\n });\n }\n\n #scrollSelectedItemIntoView() {\n const selectedItem = this.#element.querySelector('li.selected');\n const scrollContainer = this.#element.closest('.sidebar-content');\n if (selectedItem && scrollContainer) {\n scrollIntoViewIfNecessary(scrollContainer, selectedItem);\n }\n }\n\n readonly vm: ViewModel = {\n items: this.#stateService.menuItems,\n };\n}\n","import { Directive, ElementRef, inject, OnDestroy, output } from '@angular/core';\nimport { debounceTime, Subject } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\n\n@Directive({\n selector: '[kirbyXHeightObserver]',\n})\nexport class HeightObserverDirective implements OnDestroy {\n readonly heightChange = output<number>();\n\n readonly #element = inject(ElementRef).nativeElement;\n readonly #heightChanges = new Subject<number>();\n\n readonly #observer = new ResizeObserver((entries) => {\n this.#heightChanges.next(entries[0].contentRect.height);\n });\n\n constructor() {\n this.#observer.observe(this.#element, { box: 'content-box' });\n this.#heightChanges\n .pipe(debounceTime(50), distinctUntilChanged())\n .subscribe(this.heightChange.emit.bind(this.heightChange));\n }\n\n ngOnDestroy() {\n this.#observer.unobserve(this.#element);\n this.#observer.disconnect();\n }\n}\n","import { computed, Injectable, Signal, signal } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class SidebarService {\n readonly #menuHeight = signal<number>(0);\n readonly #containerHeight = signal<number>(0);\n readonly #scrollDistance = signal<number>(0);\n\n readonly #scrollableDistance = computed(() =>\n Math.max(0, this.#menuHeight() - this.#containerHeight())\n );\n readonly #hasScrollbar = computed(() => this.#scrollableDistance() > 0);\n readonly #notAtBottom = computed(() => this.#scrollDistance() < this.#scrollableDistance());\n readonly #showHeaderBottomBorder = computed(() => this.#scrollDistance() > 0);\n readonly #showFooterTopBorder = computed(() => this.#hasScrollbar() && this.#notAtBottom());\n\n get showHeaderBottomBorder(): Signal<boolean> {\n return this.#showHeaderBottomBorder;\n }\n\n get showFooterTopBorder(): Signal<boolean> {\n return this.#showFooterTopBorder;\n }\n\n set menuHeight(height: number) {\n this.#menuHeight.set(height);\n }\n\n set containerHeight(height: number) {\n this.#containerHeight.set(height);\n }\n\n set scrollDistance(distance: number) {\n this.#scrollDistance.set(distance);\n }\n}\n","import { Component, inject, Signal } from '@angular/core';\nimport { CdkScrollable } from '@angular/cdk/overlay';\nimport { MenuContainerComponent } from '../menu-container';\nimport { HeightObserverDirective } from '../../directives/height-observer';\nimport { SidebarService } from '../../services/sidebar';\n\ntype ViewModel = {\n showHeaderBottomBorder: Signal<boolean>;\n showFooterTopBorder: Signal<boolean>;\n setContainerHeight: (height: number) => void;\n setMenuHeight: (height: number) => void;\n setScroll: (scroll: Event) => void;\n};\n\n@Component({\n selector: 'aside[kirby-x-sidebar-menu]',\n templateUrl: './sidebar-menu.component.html',\n styleUrls: ['./sidebar-menu.component.scss'],\n imports: [HeightObserverDirective, MenuContainerComponent, CdkScrollable],\n})\nexport class SidebarMenuComponent {\n readonly #sidebarService = inject(SidebarService);\n\n #setContainerHeight(height: number): void {\n this.#sidebarService.containerHeight = height;\n }\n\n #setMenuHeight(height: number): void {\n this.#sidebarService.menuHeight = height;\n }\n\n #setScrollDistance(event: Event): void {\n const target = event.target as HTMLElement | null;\n if (target) {\n this.#sidebarService.scrollDistance = target.scrollTop;\n }\n }\n\n readonly vm: ViewModel = {\n showHeaderBottomBorder: this.#sidebarService.showHeaderBottomBorder,\n showFooterTopBorder: this.#sidebarService.showFooterTopBorder,\n setContainerHeight: this.#setContainerHeight.bind(this),\n setMenuHeight: this.#setMenuHeight.bind(this),\n setScroll: this.#setScrollDistance.bind(this),\n };\n}\n","<div class=\"sidebar-header\" [class.bottom-border]=\"vm.showHeaderBottomBorder()\">\n <ng-content select=\"[slot='header']\"></ng-content>\n</div>\n<div\n kirbyXHeightObserver\n class=\"sidebar-content\"\n cdkScrollable\n (scroll)=\"vm.setScroll($event)\"\n (heightChange)=\"vm.setContainerHeight($event)\"\n>\n <kirby-x-menu-container\n kirbyXHeightObserver\n (heightChange)=\"vm.setMenuHeight($event)\"\n ></kirby-x-menu-container>\n</div>\n<div class=\"sidebar-footer\" [class.top-border]=\"vm.showFooterTopBorder()\">\n <ng-content select=\"[slot='footer']\"></ng-content>\n</div>\n","import { Component, effect, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { SidebarMenuItem } from '../../models';\nimport { SidebarMenuComponent } from '../../components/sidebar-menu';\nimport { MenuStateService } from '../../services/menu-state';\n\n@Component({\n selector: 'kirby-x-sidebar',\n template: `\n <aside kirby-x-sidebar-menu>\n <ng-content select=\"kirby-x-sidebar-header\" slot=\"header\"></ng-content>\n <ng-content select=\"kirby-x-sidebar-footer\" slot=\"footer\"></ng-content>\n </aside>\n `,\n imports: [SidebarMenuComponent],\n})\nexport class SidebarComponent {\n readonly #stateService = inject(MenuStateService);\n\n @Input()\n set menuItems(menuItems: SidebarMenuItem[]) {\n this.#stateService.menuItems = menuItems;\n }\n\n @Input()\n set selectedItem(value: string) {\n this.#stateService.selectedItem = value;\n }\n\n @Input()\n set expandedItems(value: Set<string>) {\n this.#stateService.expandedItems = value;\n }\n\n @Input()\n set checkedItems(value: Set<string>) {\n this.#stateService.checkedItems = value;\n }\n\n @Input()\n set autoCollapse(value: boolean) {\n this.#stateService.autoCollapse = value;\n }\n\n @Output() menuItemsChange = new EventEmitter<SidebarMenuItem[]>();\n @Output() selectedItemChange = new EventEmitter<string>();\n @Output() expandedItemsChange = new EventEmitter<Set<string>>();\n @Output() checkedItemsChange = new EventEmitter<Set<string>>();\n @Output() expandChange = this.#stateService.expandEvents;\n @Output() checkChange = this.#stateService.checkEvents;\n @Output() itemReorder = this.#stateService.reorderEvents;\n @Output() itemSelect = this.#stateService.selectEvents;\n\n constructor() {\n effect(() => this.menuItemsChange.emit(this.#stateService.menuItems()));\n effect(() => this.selectedItemChange.emit(this.#stateService.selectedItem()));\n effect(() => this.expandedItemsChange.emit(this.#stateService.expandedItems()));\n effect(() => this.checkedItemsChange.emit(this.#stateService.checkedItems()));\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'kirby-x-sidebar-footer',\n template: '<footer><ng-content></ng-content></footer>',\n styles: `\n :host,\n footer {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 100%;\n }\n\n :host {\n min-height: 80px;\n }\n `,\n})\nexport class SidebarFooterComponent {}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'kirby-x-sidebar-header',\n template: `\n <header>\n <span class=\"sidebar-logo\"><ng-content select=\"[slot='logo']\"></ng-content></span>\n <div class=\"action-bar\">\n <ng-content select=\"[slot='action']\"></ng-content>\n </div>\n </header>\n `,\n styles: `\n :host,\n header {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 100%;\n }\n\n :host::ng-deep [slot='logo'] {\n display: inline-flex;\n }\n\n :host::ng-deep [slot='logo'] img,\n :host::ng-deep img[slot='logo'] {\n object-fit: contain;\n max-width: 100%;\n max-height: 100%;\n }\n\n .sidebar-logo {\n display: flex;\n align-items: center;\n height: 50px;\n margin: var(--kirby-spacing-l) var(--kirby-spacing-m);\n }\n\n .action-bar {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n width: 100%;\n\n &:has([slot='action']) {\n padding: 0 var(--kirby-spacing-xs) var(--kirby-spacing-xs);\n }\n }\n `,\n})\nexport class SidebarHeaderComponent {}\n","import { NgModule } from '@angular/core';\nimport { SidebarComponent } from './public-components/sidebar';\nimport { SidebarFooterComponent } from './public-components/sidebar-footer';\nimport { SidebarHeaderComponent } from './public-components/sidebar-header';\n\n@NgModule({\n imports: [SidebarComponent, SidebarFooterComponent, SidebarHeaderComponent],\n exports: [SidebarComponent, SidebarFooterComponent, SidebarHeaderComponent],\n})\nexport class SidebarModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -51,6 +51,9 @@ const illustrations = {
51
51
  'cross.circle.circle-part.shadow': {
52
52
  lg: 'cross.circle.circle-part.shadow.large.svg',
53
53
  },
54
+ 'document.card.dot.circle': {
55
+ lg: 'document.card.dot.circle.large.svg',
56
+ },
54
57
  'exclamation-mark.circle.circle-part.shadow': {
55
58
  lg: 'exclamation-mark.circle.circle-part.shadow.large.svg',
56
59
  },