@kirbydesign/designsystem 12.0.0-dev-67d5287 → 12.0.0-dev-286cdc0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/kirbydesign-designsystem-accordion.mjs +12 -12
- package/fesm2022/kirbydesign-designsystem-accordion.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-action-group.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-avatar.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-avatar.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-badge.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-badge.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-button.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-button.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-calendar.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-calendar.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-card.mjs +24 -24
- package/fesm2022/kirbydesign-designsystem-card.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-chart.mjs +22 -22
- package/fesm2022/kirbydesign-designsystem-checkbox.mjs +14 -6
- package/fesm2022/kirbydesign-designsystem-checkbox.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-data-table.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-divider.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-divider.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-dropdown.mjs +10 -10
- package/fesm2022/kirbydesign-designsystem-empty-state.mjs +19 -8
- package/fesm2022/kirbydesign-designsystem-empty-state.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-fab-sheet.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-flag.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-flag.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-form-field.mjs +32 -32
- package/fesm2022/kirbydesign-designsystem-form-field.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-gesture.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-header.mjs +19 -19
- package/fesm2022/kirbydesign-designsystem-helpers.mjs +9 -9
- package/fesm2022/kirbydesign-designsystem-icon.mjs +10 -10
- package/fesm2022/kirbydesign-designsystem-item-group.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-item-sliding.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-item.mjs +12 -12
- package/fesm2022/kirbydesign-designsystem-item.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-kirby-app.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-list.mjs +49 -46
- package/fesm2022/kirbydesign-designsystem-list.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs +8 -8
- package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-menu.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-menu.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-modal.mjs +59 -50
- package/fesm2022/kirbydesign-designsystem-modal.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-page.mjs +69 -48
- package/fesm2022/kirbydesign-designsystem-page.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-popover.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-progress-circle.mjs +6 -6
- package/fesm2022/kirbydesign-designsystem-radio.mjs +12 -12
- package/fesm2022/kirbydesign-designsystem-radio.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-range.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-range.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-reorder-list.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-reorder-list.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-router-outlet.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-section-header.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-segmented-control.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-segmented-control.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-shared-floating.mjs +16 -7
- package/fesm2022/kirbydesign-designsystem-shared-floating.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-shared-portal.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-shared.mjs +21 -21
- package/fesm2022/kirbydesign-designsystem-slide-button.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-slide.mjs +13 -13
- package/fesm2022/kirbydesign-designsystem-spinner.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs +12 -12
- package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-tabs.mjs +15 -15
- package/fesm2022/kirbydesign-designsystem-tabs.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-testing-base.mjs +305 -303
- package/fesm2022/kirbydesign-designsystem-testing-base.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-testing-jasmine.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-testing-jest.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-testing.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-toast.mjs +6 -6
- package/fesm2022/kirbydesign-designsystem-toggle-button.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-toggle.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-toggle.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-types.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem.mjs +10 -10
- package/package.json +2 -2
- package/types/kirbydesign-designsystem-card.d.ts +2 -2
- package/types/kirbydesign-designsystem-card.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-checkbox.d.ts +7 -1
- package/types/kirbydesign-designsystem-checkbox.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-empty-state.d.ts +11 -0
- package/types/kirbydesign-designsystem-empty-state.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-list.d.ts +5 -0
- package/types/kirbydesign-designsystem-list.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-modal.d.ts +2 -1
- package/types/kirbydesign-designsystem-modal.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-page.d.ts +4 -0
- package/types/kirbydesign-designsystem-page.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-shared-floating.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-testing-base.d.ts +5 -0
- package/types/kirbydesign-designsystem-testing-base.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kirbydesign-designsystem-page.mjs","names":[],"sources":["../../page/src/page.component.ts","../../page/src/page.component.html","../../page/src/page-footer/page-footer.component.ts","../../page/src/page-footer/page-footer.component.html","../../page/src/page.module.ts"],"sourcesContent":["import {\n AfterContentChecked,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Inject,\n InjectionToken,\n Injector,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n Renderer2,\n RendererStyleFlags2,\n SimpleChanges,\n SkipSelf,\n TemplateRef,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\nimport { NavigationEnd, NavigationStart, Router } from '@angular/router';\nimport {\n IonBackButton,\n IonButtons,\n IonContent,\n IonFooter,\n IonHeader,\n IonRefresher,\n IonRouterOutlet,\n IonTitle,\n IonToolbar,\n NavController,\n ScrollDetail,\n} from '@ionic/angular';\nimport { Title } from '@angular/platform-browser';\nimport { componentOnReady } from '@ionic/core';\nimport { selectedTabClickEvent, TabsComponent } from '@kirbydesign/designsystem/tabs';\nimport { fromEvent, Observable, Subject } from 'rxjs';\nimport { debounceTime, filter, map, takeUntil } from 'rxjs/operators';\n\nimport { ACTIONGROUP_CONFIG, ActionGroupConfig } from '@kirbydesign/designsystem/action-group';\nimport { KirbyConfig } from '@kirbydesign/designsystem/config';\nimport {\n HeaderActionsDirective,\n HeaderComponent,\n HeaderTitleActionIconDirective,\n} from '@kirbydesign/designsystem/header';\nimport { IonicElementPartHelper, KirbyAnimation } from '@kirbydesign/designsystem/helpers';\nimport {\n ModalElementComponent,\n ModalElementsAdvertiser,\n ModalElementType,\n ModalNavigationService,\n} from '@kirbydesign/designsystem/modal';\nimport {\n FitHeadingConfig,\n FitHeadingDirective,\n ResizeObserverService,\n TranslationService,\n} from '@kirbydesign/designsystem/shared';\nimport { UnobserveFn } from '@kirbydesign/designsystem/types';\nimport { getGlobalConfig } from '@kirbydesign/designsystem/config';\nimport { observeContent } from '@kirbydesign/designsystem/helpers';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { SpinnerComponent } from '@kirbydesign/designsystem/spinner';\n\n/**\n * Specify scroll event debounce time in ms and scrolled offset from top in pixels\n */\nconst contentScrollDebounceTimeInMS = 10;\nconst contentScrolledOffsetInPixels = 4;\n\ntype stickyConfig = { sticky: boolean };\ntype fixedConfig = { fixed: boolean };\ntype MaxWidth = 'default' | 'lg' | 'xl' | 'full';\n\nexport const PAGE_BACK_BUTTON_OVERRIDE = new InjectionToken<PageBackButtonOverride>(\n 'page-back-button-override'\n);\n\nexport interface PageBackButtonOverride {\n navigateBack: (\n routerOutlet: IonRouterOutlet,\n navCtrl: NavController,\n defaultBackHref: string\n ) => void;\n}\n\n/**\n * Event emitted when \"pull-to-refresh\" begins.\n */\nexport interface PullToRefreshEvent {\n /**\n * Invoke this callback-method when action to perform upon \"pull-to-refresh\" completes.\n */\n complete();\n}\n\n@Directive({ selector: '[kirbyPageTitle]' })\nexport class PageTitleDirective {}\n\n@Directive({ selector: '[kirbyPageSubtitle]' })\nexport class PageSubtitleDirective {}\n\n@Directive({ selector: '[kirbyPageToolbarTitle]' })\nexport class PageToolbarTitleDirective {}\n\n@Directive({ selector: '[kirbyPageActions]' })\nexport class PageActionsDirective {\n @Input('kirbyPageActions') config: stickyConfig | fixedConfig;\n private readonly stickyDefault = true;\n private readonly fixedDefault = false;\n\n constructor(public template: TemplateRef<any>) {\n console.warn(\n 'Defining Page Actions via *kirbyPageActions is deprecated and will be removed in Kirby v11. A Kirby Header with Actions should be used instead, as it has an improved API with better support for responsive layouts.'\n );\n }\n\n get isSticky(): boolean {\n return this.config ? (this.config as stickyConfig).sticky : this.stickyDefault;\n }\n\n get isFixed(): boolean {\n return this.config ? (this.config as fixedConfig).fixed : this.fixedDefault;\n }\n}\n\n@Directive({ selector: '[kirbyPageContent]' })\nexport class PageContentDirective {\n @Input('kirbyPageContent') config: fixedConfig;\n\n constructor(public template: TemplateRef<any>) {}\n\n get isFixed(): boolean {\n return this.config && this.config.fixed;\n }\n}\n\n@Directive({ selector: '[kirbyPageStickyContent]' })\nexport class PageStickyContentDirective {}\n\n@Component({\n selector: 'kirby-page-progress',\n template: `\n <ng-content></ng-content>\n `,\n styles: [\n `\n :host {\n display: flex;\n margin-inline-end: 4px; /* Add spacing to potential supplementary action button */\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.Eager,\n})\nexport class PageProgressComponent extends ModalElementComponent {\n // TODO: Find alternative implementation, which aligns with future page configuration / consumption\n // This implementation was chosen over expanding `moveChild` method in component wrapper with yet another scenario\n @HostBinding('attr.slot') slot = 'start';\n\n constructor(\n @Optional() modalElementsAdvertiser: ModalElementsAdvertiser,\n elementRef: ElementRef<HTMLElement>\n ) {\n super(ModalElementType.PAGE_PROGRESS, elementRef, modalElementsAdvertiser);\n }\n}\n@Component({\n selector: 'kirby-page-title',\n template: `\n <ng-content></ng-content>\n `,\n changeDetection: ChangeDetectionStrategy.Eager,\n})\nexport class PageTitleComponent extends ModalElementComponent {\n constructor(\n elementRef: ElementRef<HTMLElement>,\n @Optional() modalElementsAdvertiser: ModalElementsAdvertiser\n ) {\n super(ModalElementType.TITLE, elementRef, modalElementsAdvertiser);\n }\n}\n\n@Component({\n selector: 'kirby-page-content',\n template: `\n <ng-content></ng-content>\n `,\n changeDetection: ChangeDetectionStrategy.Eager,\n})\nexport class PageContentComponent {}\n\n@Component({\n selector: 'kirby-page-actions',\n template: `\n <ng-content select=\"button[kirby-button]\"></ng-content>\n `,\n styles: [\n `\n :host {\n display: inline-flex;\n column-gap: 8px;\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.Eager,\n})\nexport class PageActionsComponent {}\n\n@Component({\n selector: 'kirby-page',\n templateUrl: './page.component.html',\n styleUrls: ['./page.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [IonicElementPartHelper],\n imports: [\n IonHeader,\n IonToolbar,\n IonButtons,\n IonBackButton,\n IonTitle,\n NgTemplateOutlet,\n IonContent,\n IonRefresher,\n SpinnerComponent,\n NgClass,\n IonFooter,\n FitHeadingDirective,\n ],\n})\nexport class PageComponent\n implements OnInit, OnDestroy, AfterViewInit, AfterContentChecked, OnChanges\n{\n @Input() title: string;\n @Input() subtitle: string;\n @Input() toolbarTitle: string;\n @Input() titleAlignment: 'left' | 'center' | 'right' = 'left';\n @Input() defaultBackHref: string;\n @Input() hideBackButton: boolean;\n @Input() titleMaxLines: number;\n @Input() hasInteractiveTitle: boolean;\n\n @Input() set maxWidth(width: MaxWidth) {\n this._maxWidth = width;\n }\n\n get maxWidth(): MaxWidth {\n return this._maxWidth;\n }\n\n private _maxWidth: MaxWidth = 'default';\n\n private _tabBarBottomHidden: boolean;\n public get tabBarBottomHidden(): boolean {\n return this._tabBarBottomHidden;\n }\n @Input()\n public set tabBarBottomHidden(value: boolean) {\n if (this.tabsComponent) {\n // as we are setting a class on tabs, we need this to happen in a separate cd cycle\n setTimeout(() => {\n this.tabsComponent.tabBarBottomHidden = value;\n this.changeDetectorRef.markForCheck();\n });\n }\n this._tabBarBottomHidden = value;\n }\n\n @Output() enter = new EventEmitter<void>();\n @Output() leave = new EventEmitter<void>();\n @Output() refresh = new EventEmitter<PullToRefreshEvent>();\n @Output() backButtonClick = new EventEmitter<Event>();\n @Output() toolbarTitleClick = new EventEmitter<PointerEvent>();\n\n @ViewChild(IonContent, { static: true }) private content?: IonContent;\n @ViewChild(IonContent, { static: true, read: ElementRef })\n private ionContentElement: ElementRef<HTMLIonContentElement>;\n @ViewChild(IonHeader, { static: true, read: ElementRef })\n ionHeaderElement: ElementRef<HTMLIonHeaderElement>;\n @ViewChild(IonFooter, { static: true, read: ElementRef })\n private ionFooterElement: ElementRef<HTMLIonFooterElement>;\n @ViewChild(IonToolbar, { static: true, read: ElementRef })\n private ionToolbarElement: ElementRef<HTMLIonToolbarElement>;\n @ViewChildren(IonButtons, { read: ElementRef })\n private ionToolbarButtonsElement: QueryList<ElementRef<HTMLIonButtonsElement>>;\n @ViewChild(IonBackButton, { static: false })\n private backButton: IonBackButton;\n @ViewChild('pageTitle', { static: false, read: ElementRef })\n private pageTitle: ElementRef;\n @ViewChild('stickyContentContainer', { static: false, read: ElementRef })\n private stickyContentContainer: ElementRef;\n\n @ViewChild('simpleTitleTemplate', { static: true, read: TemplateRef })\n private simpleTitleTemplate: TemplateRef<any>;\n @ViewChild('simpleToolbarTitleTemplate', { static: true, read: TemplateRef })\n private simpleToolbarTitleTemplate: TemplateRef<any>;\n @ContentChild(PageToolbarTitleDirective, { static: false, read: TemplateRef })\n private customToolbarTitleTemplate: TemplateRef<any>;\n @ContentChild(PageTitleDirective, { static: false, read: TemplateRef })\n customTitleTemplate: TemplateRef<any>;\n @ContentChild(PageSubtitleDirective, { static: false, read: TemplateRef })\n customSubtitleTemplate: TemplateRef<any>;\n @ContentChildren(PageActionsDirective)\n customActions: QueryList<PageActionsDirective>;\n @ContentChildren(PageContentDirective)\n private customContent: QueryList<PageContentDirective>;\n @ContentChild(PageStickyContentDirective, { static: false, read: TemplateRef })\n private stickyContentRef: TemplateRef<any>;\n @ContentChild(HeaderComponent)\n header?: HeaderComponent;\n\n hasHeader: boolean;\n hasPageTitle: boolean;\n hasPageSubtitle: boolean;\n toolbarTitleVisible: boolean;\n toolbarActionsVisible: boolean;\n isContentScrolled: boolean;\n isStickyContentPinned = false;\n\n fitHeadingConfig: FitHeadingConfig;\n\n toolbarTitleTemplate: TemplateRef<any>;\n customContentTemplate: TemplateRef<any>;\n pageActionsTemplate: TemplateRef<any>;\n fixedContentTemplate: TemplateRef<any>;\n stickyActionsTemplate: TemplateRef<any>;\n fixedActionsTemplate: TemplateRef<any>;\n stickyContentTemplate: TemplateRef<PageStickyContentDirective>;\n headerActionsTemplate: TemplateRef<HeaderActionsDirective>;\n titleActionIconTemplate: TemplateRef<HeaderTitleActionIconDirective>;\n\n private titleIntersectionObserver?: IntersectionObserver;\n private stickyActionsIntersectionObserver?: IntersectionObserver;\n private stickyContentIntersectionObserver?: IntersectionObserver;\n private isObservingTitle = false;\n private isObservingActions = false;\n private isDocTitleSet = false;\n\n private unobserveTitleMutation: UnobserveFn;\n\n private url: string;\n private isActive: boolean;\n\n private ngOnDestroy$: Subject<void> = new Subject<void>();\n private contentScrolled$: Observable<ScrollDetail>;\n\n private navigationStart$: Observable<NavigationStart> = this.router.events.pipe(\n filter((event): event is NavigationStart => event instanceof NavigationStart),\n takeUntil(this.ngOnDestroy$)\n );\n\n private navigationEnd$: Observable<NavigationEnd> = this.router.events.pipe(\n filter((event): event is NavigationEnd => event instanceof NavigationEnd),\n takeUntil(this.ngOnDestroy$)\n );\n\n toolbarActionGroupInjector: Injector;\n\n constructor(\n private elementRef: ElementRef,\n private injector: Injector,\n private renderer: Renderer2,\n private router: Router,\n private changeDetectorRef: ChangeDetectorRef,\n private zone: NgZone,\n private modalNavigationService: ModalNavigationService,\n private resizeObserverService: ResizeObserverService,\n @Optional() @SkipSelf() private tabsComponent: TabsComponent,\n @Optional()\n @Inject(PAGE_BACK_BUTTON_OVERRIDE)\n private backButtonOverride: PageBackButtonOverride,\n @Optional()\n private routerOutlet: IonRouterOutlet,\n @Optional()\n private navCtrl: NavController,\n private ionicElementPartHelper: IonicElementPartHelper,\n public translations: TranslationService,\n private htmlDocTitle: Title\n ) {}\n\n private contentReadyPromise: Promise<void>;\n private whenContentReady() {\n if (!this.contentReadyPromise) {\n this.contentReadyPromise = new Promise((resolve) => {\n this.resizeObserverService.observe(this.ionContentElement, (entry) => {\n if (entry.contentRect.height > 0) {\n this.resizeObserverService.unobserve(this.ionContentElement);\n resolve();\n }\n });\n });\n }\n return this.contentReadyPromise;\n }\n\n ngOnInit(): void {\n this.removeWrapper();\n this.ionicElementPartHelper.setPart(\n 'background',\n this.ionToolbarElement,\n '.toolbar-background'\n );\n\n const actionGroupConfig: ActionGroupConfig = {\n isCondensed: true,\n maxVisibleActions: 1,\n };\n this.toolbarActionGroupInjector = Injector.create({\n providers: [\n {\n provide: ACTIONGROUP_CONFIG,\n useValue: actionGroupConfig,\n },\n ],\n parent: this.injector,\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.titleMaxLines) {\n this.fitHeadingConfig = {\n maxLines: changes.titleMaxLines.currentValue,\n };\n }\n if (changes.subtitle && !changes.subtitle.isFirstChange) {\n this.subtitle = changes.title.currentValue;\n this.hasPageSubtitle = this.subtitle !== undefined;\n }\n if (changes.title || changes.toolbarTitle) {\n this.setHTMLDocumentTitle(this.title || this.toolbarTitle);\n }\n }\n\n ngAfterViewInit(): void {\n this.zone.runOutsideAngular(() => {\n this.contentScrolled$ = fromEvent<CustomEvent<ScrollDetail>>(\n this.ionContentElement.nativeElement,\n 'ionScroll'\n ).pipe(\n debounceTime(contentScrollDebounceTimeInMS),\n map((event) => event.detail),\n takeUntil(this.ngOnDestroy$)\n );\n\n this.contentScrolled$.subscribe((scrollInfo: ScrollDetail) => {\n if (scrollInfo.scrollTop > contentScrolledOffsetInPixels !== this.isContentScrolled) {\n this.isContentScrolled = !this.isContentScrolled;\n this.changeDetectorRef.detectChanges();\n }\n });\n });\n\n // This instance has observed a page enter so register the correct url for this instance\n this.url = this.router.url;\n this.onEnter();\n\n // Watch navigation events for page enter and leave\n this.navigationStart$.subscribe((event: NavigationStart) => {\n if (\n this.getPathname(event.url) !== this.getPathname(this.url) &&\n !this.modalNavigationService.isModalRoute(this.url) &&\n !this.modalNavigationService.isModalRoute(event.url)\n ) {\n this.onLeave();\n }\n });\n\n this.navigationEnd$.subscribe((event: NavigationEnd) => {\n if (this.getPathname(event.urlAfterRedirects) === this.getPathname(this.url)) {\n this.onEnter();\n }\n });\n\n this.interceptBackButtonClicksSetup();\n this.initializeStickyIntersectionObserver();\n this.setActionButtonsWidth();\n }\n\n ngAfterContentChecked(): void {\n this.initializeHeader();\n this.initializeTitle();\n this.initializeActions();\n this.initializeContent();\n this.initializeStickyContent();\n this.changeDetectorRef.detectChanges();\n }\n\n ngOnDestroy(): void {\n this.ngOnDestroy$.next();\n this.ngOnDestroy$.complete();\n\n this.titleIntersectionObserver?.disconnect();\n this.stickyActionsIntersectionObserver?.disconnect();\n this.stickyContentIntersectionObserver?.disconnect();\n this.unobserveTitleMutation?.();\n }\n\n delegateRefreshEvent(event: any): void {\n this.refresh.emit({\n complete: event.target.complete.bind(event.target),\n });\n }\n\n getMaxWidthClasses() {\n if (!this.maxWidth) {\n return '';\n }\n if (this.maxWidth === 'default') {\n return '';\n }\n return `max-width-${this.maxWidth}`;\n }\n\n onTitleClick(event: PointerEvent) {\n if (this.toolbarTitleClick.observed) {\n this.toolbarTitleClick.emit(event);\n } else {\n this.header?.titleClick.emit(event);\n }\n }\n\n private removeWrapper() {\n const parent = this.elementRef.nativeElement.parentNode;\n this.renderer.removeChild(parent, this.elementRef.nativeElement);\n this.renderer.appendChild(parent, this.ionHeaderElement.nativeElement);\n this.renderer.appendChild(parent, this.ionContentElement.nativeElement);\n this.renderer.appendChild(parent, this.ionFooterElement.nativeElement);\n }\n\n private onEnter() {\n if (this.isActive) return;\n this.isActive = true;\n\n this.enter.emit();\n\n this.patchIonLastFocused();\n\n this.observeTitle();\n this.observeActions();\n this.setHTMLDocumentTitle(this.header?.title || this.title || this.toolbarTitle);\n this.observeTitleDOMChanges();\n }\n\n private onLeave() {\n if (!this.isActive) return;\n this.isActive = false;\n\n this.leave.emit();\n\n this.unobserveTitle();\n this.unobserveActions();\n this.unobserveTitleMutation?.();\n\n if (this.tabBarBottomHidden && this.tabsComponent) {\n this.tabsComponent.tabBarBottomHidden = false;\n }\n }\n\n private interceptBackButtonClicksSetup() {\n if (this.backButtonOverride) {\n this.backButton.onClick = (event: Event) => {\n event.preventDefault();\n this.backButtonOverride.navigateBack(this.routerOutlet, this.navCtrl, this.defaultBackHref);\n };\n }\n\n // Intercept back-button click events, defaulting to the built-in click-handler.\n if (this.backButtonClick.observers.length === 0) {\n this.backButtonClick\n .pipe(takeUntil(this.ngOnDestroy$))\n .subscribe(this.backButton.onClick.bind(this.backButton));\n }\n this.backButton.onClick = (event: Event) => {\n this.backButtonClick.emit(event);\n };\n }\n\n private patchIonLastFocused() {\n const ionLastFocus: HTMLElement =\n this.ionContentElement.nativeElement.querySelector('[ion-last-focus=\"true\"]');\n\n // When a focusManagerPriority is set, Ionic handles moving focus back to the element that presented the current view.\n // Unfortunately, we need to schedule a removal of tabindex=\"-1\" from ionLastFocus element after Ionic might have set it\n // to work around elements becoming inaccessible after navigating back: https://github.com/ionic-team/ionic-framework/issues/29875\n setTimeout(() => {\n if (ionLastFocus?.getAttribute('tabindex') !== '-1') return;\n this.renderer.removeAttribute(ionLastFocus, 'tabindex');\n });\n }\n\n private initializeStickyIntersectionObserver() {\n if (this.stickyContentTemplate) {\n // Sticky content present - start observing for stickiness\n if (!this.stickyContentIntersectionObserver) {\n this.stickyContentIntersectionObserver = this.createStickyContentIntersectionObserver();\n }\n setTimeout(() => {\n this.stickyContentIntersectionObserver.observe(this.stickyContentContainer.nativeElement);\n });\n }\n }\n\n private initializeHeader() {\n if (this.hasHeader === undefined && !!this.header) {\n this.hasHeader = true;\n // Header could later be removed from DOM (e.g. in virtual scrolling scenarios),\n // so store a reference to `header.titleActionIconTemplate` and `header.titleClick`:\n this.titleActionIconTemplate = this.header.titleActionIconTemplate;\n if (this.header.titleClick.observed && this.hasInteractiveTitle === undefined) {\n this.hasInteractiveTitle = true;\n }\n\n // Set document title from header immediately if present, then subscribe to changes\n this.setHTMLDocumentTitle(this.header.title);\n\n this.header.title$.pipe(takeUntil(this.ngOnDestroy$)).subscribe(() => {\n this.setHTMLDocumentTitle(this.header.title);\n });\n }\n }\n\n private initializeTitle() {\n if (this.hasHeader && this.isObservingTitle && !this.header?.titleElement) {\n // If we're already observing the header's title element, but it's no longer present,\n // it means it has been removed from DOM (e.g. in virtual scrolling scenarios).\n // Flip observing flag:\n this.isObservingTitle = false;\n }\n if (this.hasPageTitle) {\n if (!this.isObservingTitle && !!this.header?.titleElement) {\n // Header and title element re-attached to DOM - observe title:\n this.observeTitle();\n }\n\n // Ensures rest of initializeTitle() won't run, if already initialized\n return;\n }\n\n this.hasPageTitle =\n this.title !== undefined || !!this.customTitleTemplate || !!this.header?.title;\n this.toolbarTitleVisible = !this.hasPageTitle;\n this.hasPageSubtitle = this.subtitle !== undefined || !!this.customSubtitleTemplate;\n if (this.header?.title && !this.toolbarTitle) {\n this.toolbarTitle = this.header.title;\n this.header.title$.pipe(takeUntil(this.ngOnDestroy$)).subscribe((title) => {\n this.toolbarTitle = title;\n });\n }\n\n this.observeTitle();\n\n const defaultTitleTemplate = this.customTitleTemplate || this.simpleTitleTemplate;\n /* eslint-disable */\n // prettier-ignore\n this.toolbarTitleTemplate = this.customToolbarTitleTemplate\n ? this.customToolbarTitleTemplate\n : typeof this.toolbarTitle === 'string'\n ? this.simpleToolbarTitleTemplate\n : defaultTitleTemplate;\n\n if (this.toolbarTitleClick.observed && this.hasInteractiveTitle === undefined) {\n this.hasInteractiveTitle = true;\n }\n }\n\n private observeTitle() {\n if (!this.hasPageTitle) {\n // Nothing to observe\n return;\n }\n if (this.isObservingTitle) {\n // Already observing\n return;\n }\n\n // We are not actually observing the title until after the `whenContentReady` promise has resolved,\n // but since we've already checked that the page has a title in the guard above,\n // we'll - eagerly - set this flag now to prevent unnecessary re-runs of the rest of this method:\n this.isObservingTitle = true;\n\n if (!this.titleIntersectionObserver) {\n this.titleIntersectionObserver = new IntersectionObserver(\n (entries) => {\n // In rare scenarios we get more than 1 entry - use the last one:\n const lastEntry = entries[entries.length - 1];\n if (lastEntry) {\n const showToolbarTitle = !lastEntry.isIntersecting;\n // Only flip the flag and run Change Detection when changed:\n if (showToolbarTitle !== this.toolbarTitleVisible) {\n this.toolbarTitleVisible = showToolbarTitle;\n this.changeDetectorRef.detectChanges();\n }\n }\n },\n { root: this.ionContentElement.nativeElement }\n );\n }\n\n // Run outside Angular to prevent unnecessary triggering change detection\n // and - under certain conditions - an infinite loop when called within ngAfterContentChecked:\n this.zone.runOutsideAngular(() => {\n this.whenContentReady().then(() => {\n const titleElementRef = this.pageTitle || this.header?.titleElement;\n if (titleElementRef?.nativeElement) {\n this.titleIntersectionObserver.observe(titleElementRef.nativeElement);\n }\n });\n });\n }\n\n private unobserveTitle() {\n const titleElementRef = this.pageTitle || this.header?.titleElement;\n if (titleElementRef) {\n this.titleIntersectionObserver?.unobserve(titleElementRef.nativeElement);\n }\n this.isObservingTitle = false;\n }\n\n private observeTitleDOMChanges() {\n const globalKirbyConfig: KirbyConfig = getGlobalConfig();\n if (!globalKirbyConfig?.setHtmlDocTitle) return;\n if (this.isDocTitleSet) return; // we never want to observe if the document title is already set via any title properties (or already observed)\n\n const titleArea: HTMLElement | null = this.ionHeaderElement.nativeElement.querySelector(\n 'ion-toolbar ion-title .toolbar-title'\n );\n\n this.setHTMLDocumentTitle(titleArea.textContent);\n\n this.unobserveTitleMutation = observeContent(titleArea, () => {\n this.setHTMLDocumentTitle(titleArea.textContent);\n });\n }\n\n private setHTMLDocumentTitle(title: string) {\n const globalKirbyConfig: KirbyConfig = getGlobalConfig();\n if (!globalKirbyConfig?.setHtmlDocTitle || !title || title.trim() === '') return;\n this.htmlDocTitle.setTitle(title);\n this.isDocTitleSet = true;\n }\n\n private initializeActions() {\n if (this.headerActionsTemplate === undefined && !!this.header) {\n this.headerActionsTemplate = this.header.actionsTemplate;\n }\n if (this.hasHeader && this.isObservingActions && !this.header?.actionsElement) {\n // If we're already observing the header's actions element, but it's no longer present,\n // it means it has been removed from DOM (e.g. in virtual scrolling scenarios).\n // Flip observing flag:\n this.isObservingActions = false;\n }\n\n this.observeActions();\n\n this.customActions.forEach((pageAction) => {\n if (pageAction.isFixed) {\n this.fixedActionsTemplate = pageAction.template;\n } else if (pageAction.isSticky) {\n this.stickyActionsTemplate = pageAction.template;\n } else {\n this.pageActionsTemplate = pageAction.template;\n }\n });\n }\n\n private observeActions() {\n if (!this.header?.actionsElement) {\n // Nothing to observe\n return;\n }\n\n if (this.isObservingActions) {\n // Already observing\n return;\n }\n\n // We are not actually observing actions until after the `whenContentReady` promise has resolved,\n // but since we've already checked that there's an actions element present in the guard above,\n // we'll - eagerly - set this flag now to prevent unnecessary re-runs of the rest of this method:\n this.isObservingActions = true;\n\n if (!this.stickyActionsIntersectionObserver) {\n this.stickyActionsIntersectionObserver = new IntersectionObserver(\n (entries) => {\n // In rare scenarios we get more than 1 entry - use the last one:\n const lastEntry = entries[entries.length - 1];\n if (lastEntry) {\n const showToolbarActions = !lastEntry.isIntersecting;\n // Only flip the flag and run Change Detection when changed:\n if (showToolbarActions !== this.toolbarActionsVisible) {\n this.toolbarActionsVisible = showToolbarActions;\n this.changeDetectorRef.detectChanges();\n }\n }\n },\n { root: this.ionContentElement.nativeElement }\n );\n }\n\n // Run outside Angular to prevent unnecessary triggering change detection\n // and - under certain conditions - an infinite loop when called within ngAfterContentChecked:\n this.zone.runOutsideAngular(() => {\n this.whenContentReady().then(() => {\n if (this.header?.actionsElement?.nativeElement) {\n this.stickyActionsIntersectionObserver.observe(this.header.actionsElement.nativeElement);\n }\n });\n });\n }\n\n private unobserveActions() {\n if (this.header?.actionsElement) {\n this.stickyActionsIntersectionObserver?.unobserve(this.header.actionsElement.nativeElement);\n }\n this.isObservingActions = false;\n }\n\n private setActionButtonsWidth() {\n if (!this.ionToolbarButtonsElement) return;\n\n // Ensure ion-toolbar custom element has been defined (primarily when testing, but doesn't hurt):\n customElements.whenDefined(this.ionToolbarElement.nativeElement.localName).then(() => {\n // Ensure toolbar and buttons have been rendered and has dimensions:\n componentOnReady(this.ionToolbarElement.nativeElement, (toolbar) => {\n let startButtonsWidth = 0;\n let endButtonsWidth = 0;\n\n this.ionToolbarButtonsElement\n .map((ionButtonsElementRef) => ionButtonsElementRef.nativeElement)\n .forEach((ionButtonsElement) => {\n const style = getComputedStyle(ionButtonsElement);\n const margin = parseInt(style.marginLeft) + parseInt(style.marginRight);\n if (ionButtonsElement.getAttribute('slot') === 'start') {\n startButtonsWidth += ionButtonsElement.offsetWidth + margin;\n } else {\n endButtonsWidth += ionButtonsElement.offsetWidth + margin;\n }\n });\n\n const actionButtonsMaxWidth = Math.max(startButtonsWidth, endButtonsWidth);\n this.renderer.setStyle(\n toolbar,\n '--action-buttons-width',\n `${actionButtonsMaxWidth}px`,\n RendererStyleFlags2.DashCase\n );\n });\n });\n }\n\n private initializeContent() {\n this.customContent.forEach((content) => {\n if (content.isFixed) {\n this.fixedContentTemplate = content.template;\n } else {\n this.customContentTemplate = content.template;\n }\n });\n }\n\n private initializeStickyContent() {\n this.stickyContentTemplate = this.stickyContentRef;\n }\n\n private createStickyContentIntersectionObserver() {\n const options: IntersectionObserverInit = {\n root: this.ionContentElement.nativeElement,\n threshold: 1,\n };\n\n const callback: IntersectionObserverCallback = (entries) => {\n if (this.isStickyContentPinned !== !entries[0].isIntersecting) {\n this.isStickyContentPinned = !this.isStickyContentPinned;\n this.changeDetectorRef.detectChanges();\n }\n };\n return new IntersectionObserver(callback, options);\n }\n\n private getPathname(url: string) {\n return url.split('?')[0];\n }\n\n @HostListener('window:keyboardWillShow', ['$event'])\n _onKeyboardWillShow(info?: { keyboardHeight: number }) {\n if (info && info.keyboardHeight) {\n this.ionContentElement.nativeElement.style.setProperty(\n '--keyboard-offset',\n `${info.keyboardHeight}px`\n );\n }\n }\n\n @HostListener('window:keyboardWillHide')\n _onKeyboardWillHide() {\n this.ionContentElement.nativeElement.style.setProperty('--keyboard-offset', '0px');\n }\n\n @HostListener(`window:${selectedTabClickEvent}`)\n _onSelectedTabClick() {\n if (this.content) {\n this.content.scrollToTop(KirbyAnimation.Duration.LONG);\n }\n }\n}\n","<ion-header role=\"presentation\">\n <ion-toolbar\n [class.content-scrolled]=\"isContentScrolled\"\n [class.content-pinned]=\"isStickyContentPinned\"\n >\n <ion-buttons slot=\"start\">\n <ion-back-button\n text=\"\"\n [defaultHref]=\"defaultBackHref\"\n icon=\"assets/kirby/icons/svg/arrow-back.svg\"\n [style.visibility]=\"hideBackButton ? 'hidden' : null\"\n [attr.aria-label]=\"translations.get('back')\"\n ></ion-back-button>\n </ion-buttons>\n <ion-title [class.slide-and-fade-in]=\"toolbarTitleVisible\">\n <div class=\"toolbar-title\">\n @if (!titleActionIconTemplate && !hasInteractiveTitle) {\n <h1 class=\"kirby-text-normal-bold\">\n <ng-container *ngTemplateOutlet=\"toolbarTitleTemplate\"></ng-container>\n </h1>\n }\n @if (!!titleActionIconTemplate || hasInteractiveTitle) {\n <span\n [class.clickable]=\"hasInteractiveTitle\"\n [class.has-icon]=\"!!titleActionIconTemplate\"\n (click)=\"onTitleClick($event)\"\n >\n <h1 class=\"kirby-text-normal-bold\">\n <ng-container *ngTemplateOutlet=\"toolbarTitleTemplate\"></ng-container>\n </h1>\n <ng-container *ngTemplateOutlet=\"titleActionIconTemplate\"></ng-container>\n </span>\n }\n </div>\n </ion-title>\n @if (!!headerActionsTemplate) {\n <ion-buttons class=\"hide\" slot=\"primary\" [class.fade-in]=\"toolbarActionsVisible\">\n <ng-container\n *ngTemplateOutlet=\"headerActionsTemplate; injector: toolbarActionGroupInjector\"\n ></ng-container>\n </ion-buttons>\n }\n @if (!!stickyActionsTemplate) {\n <ion-buttons class=\"legacy-actions\" slot=\"primary\">\n <ng-container *ngTemplateOutlet=\"stickyActionsTemplate\"></ng-container>\n </ion-buttons>\n }\n @if (!!fixedActionsTemplate) {\n <ion-buttons class=\"legacy-actions\" slot=\"secondary\">\n <ng-container *ngTemplateOutlet=\"fixedActionsTemplate\"></ng-container>\n </ion-buttons>\n }\n </ion-toolbar>\n</ion-header>\n\n<ion-content\n scrollEvents=\"true\"\n forceOverscroll=\"false\"\n [class]=\"getMaxWidthClasses()\"\n [class.has-header]=\"hasHeader\"\n>\n @if (refresh.observers.length > 0) {\n <ion-refresher (ionRefresh)=\"delegateRefreshEvent($event)\" slot=\"fixed\">\n <kirby-spinner></kirby-spinner>\n </ion-refresher>\n }\n\n <!-- Page header -->\n @if (hasPageTitle && !hasHeader) {\n <div class=\"page-header-container\">\n <div\n class=\"page-header\"\n [ngClass]=\"{\n 'text-center': titleAlignment === 'center',\n 'text-right': titleAlignment === 'right',\n }\"\n >\n <div #pageTitle class=\"page-title\" [class.has-actions]=\"!!pageActionsTemplate\">\n <ng-container\n *ngTemplateOutlet=\"customTitleTemplate || defaultPageTitleTemplate\"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"pageActionsTemplate || defaultPageActionsTemplate\"\n ></ng-container>\n </div>\n @if (hasPageSubtitle) {\n <div class=\"page-subtitle\">\n <ng-container\n *ngTemplateOutlet=\"customSubtitleTemplate || defaultPageSubtitleTemplate\"\n ></ng-container>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Header -->\n @if (hasHeader) {\n <div class=\"page-header-container\">\n <ng-content select=\"kirby-header\"></ng-content>\n </div>\n }\n\n <!-- Sticky content -->\n @if (stickyContentTemplate) {\n <div\n #stickyContentContainer\n class=\"sticky-content-container\"\n [class.content-pinned]=\"isStickyContentPinned\"\n >\n <div>\n <ng-container *ngTemplateOutlet=\"stickyContentTemplate\"></ng-container>\n </div>\n </div>\n }\n\n <!-- Content -->\n <div class=\"content-inner\">\n <ng-container\n *ngTemplateOutlet=\"customContentTemplate || defaultContentTemplate\"\n ></ng-container>\n </div>\n\n @if (fixedContentTemplate) {\n <div slot=\"fixed\" class=\"fixed-content\">\n <div class=\"content-inner\">\n <ng-container *ngTemplateOutlet=\"fixedContentTemplate\"></ng-container>\n </div>\n </div>\n }\n</ion-content>\n\n<ion-footer>\n <ng-content select=\"kirby-page-footer\"></ng-content>\n</ion-footer>\n\n<ng-template #defaultPageTitleTemplate>\n <span [kirbyFitHeading]=\"fitHeadingConfig\" class=\"kirby-text-xlarge\">\n <ng-container *ngTemplateOutlet=\"simpleTitleTemplate\"></ng-container>\n </span>\n</ng-template>\n<ng-template #defaultPageSubtitleTemplate>\n <ng-container *ngTemplateOutlet=\"simpleSubtitleTemplate\"></ng-container>\n</ng-template>\n<ng-template #defaultPageActionsTemplate>\n <ng-content select=\"kirby-page-actions\"></ng-content>\n</ng-template>\n\n<ng-template #defaultContentTemplate>\n <ng-content select=\"kirby-page-content\"></ng-content>\n</ng-template>\n\n<ng-template #simpleTitleTemplate>{{ title }}</ng-template>\n<ng-template #simpleSubtitleTemplate>{{ subtitle }}</ng-template>\n<ng-template #simpleToolbarTitleTemplate>{{ toolbarTitle }}</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n Optional,\n Renderer2,\n SkipSelf,\n} from '@angular/core';\n\nimport { PageComponent } from '../page.component';\n\n@Component({\n selector: 'kirby-page-footer',\n templateUrl: './page-footer.component.html',\n styleUrls: ['./page-footer.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PageFooterComponent implements OnDestroy {\n @Input()\n hasPadding: boolean = true;\n\n constructor(\n @Optional() @SkipSelf() private pageComponent: PageComponent,\n private hostElement: ElementRef,\n private renderer: Renderer2\n ) {\n if (!pageComponent) {\n throw new Error('Page footer must reside inside of a Kirby page');\n }\n }\n\n close() {\n this.pageComponent.tabBarBottomHidden = false;\n this.renderer.removeChild(\n this.hostElement.nativeElement.parentElement,\n this.hostElement.nativeElement,\n true\n );\n }\n\n ngOnDestroy(): void {\n this.pageComponent.tabBarBottomHidden = false;\n }\n}\n","<div class=\"wrapper kirby-surface-raised\" [class.padding]=\"hasPadding\">\n <ng-content></ng-content>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SpinnerModule } from '@kirbydesign/designsystem/spinner';\nimport { FitHeadingDirective } from '@kirbydesign/designsystem/shared';\n\nimport { HeaderModule } from '@kirbydesign/designsystem/header';\nimport {\n IonBackButton,\n IonButtons,\n IonContent,\n IonFooter,\n IonHeader,\n IonRefresher,\n IonTitle,\n IonToolbar,\n} from '@ionic/angular';\nimport { PageFooterComponent } from './page-footer/page-footer.component';\nimport {\n PageActionsComponent,\n PageActionsDirective,\n PageComponent,\n PageContentComponent,\n PageContentDirective,\n PageProgressComponent,\n PageStickyContentDirective,\n PageSubtitleDirective,\n PageTitleComponent,\n PageTitleDirective,\n PageToolbarTitleDirective,\n} from './page.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FitHeadingDirective,\n SpinnerModule,\n HeaderModule,\n IonHeader,\n IonToolbar,\n IonButtons,\n IonBackButton,\n IonContent,\n IonTitle,\n IonRefresher,\n IonFooter,\n PageComponent,\n PageActionsComponent,\n PageActionsDirective,\n PageContentComponent,\n PageFooterComponent,\n PageContentDirective,\n PageProgressComponent,\n PageTitleComponent,\n PageTitleDirective,\n PageSubtitleDirective,\n PageToolbarTitleDirective,\n PageStickyContentDirective,\n ],\n exports: [\n PageComponent,\n PageActionsComponent,\n PageActionsDirective,\n PageContentComponent,\n PageFooterComponent,\n PageContentDirective,\n PageProgressComponent,\n PageTitleComponent,\n PageTitleDirective,\n PageSubtitleDirective,\n PageToolbarTitleDirective,\n FitHeadingDirective,\n PageStickyContentDirective,\n ],\n})\nexport class PageModule {}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kirbydesign-designsystem-page.mjs","names":[],"sources":["../../page/src/page.component.ts","../../page/src/page.component.html","../../page/src/page-footer/page-footer.component.ts","../../page/src/page-footer/page-footer.component.html","../../page/src/page.module.ts"],"sourcesContent":["import {\n AfterContentChecked,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Inject,\n InjectionToken,\n Injector,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n Renderer2,\n RendererStyleFlags2,\n SimpleChanges,\n SkipSelf,\n TemplateRef,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\nimport { NavigationEnd, NavigationStart, Router } from '@angular/router';\nimport {\n IonBackButton,\n IonButtons,\n IonContent,\n IonFooter,\n IonHeader,\n IonRefresher,\n IonRouterOutlet,\n IonTitle,\n IonToolbar,\n NavController,\n ScrollDetail,\n} from '@ionic/angular';\nimport { Title } from '@angular/platform-browser';\nimport { componentOnReady } from '@ionic/core';\nimport { selectedTabClickEvent, TabsComponent } from '@kirbydesign/designsystem/tabs';\nimport { fromEvent, Observable, Subject } from 'rxjs';\nimport { debounceTime, filter, map, startWith, takeUntil } from 'rxjs/operators';\n\nimport { ACTIONGROUP_CONFIG, ActionGroupConfig } from '@kirbydesign/designsystem/action-group';\nimport { KirbyConfig } from '@kirbydesign/designsystem/config';\nimport {\n HeaderActionsDirective,\n HeaderComponent,\n HeaderTitleActionIconDirective,\n} from '@kirbydesign/designsystem/header';\nimport { IonicElementPartHelper, KirbyAnimation } from '@kirbydesign/designsystem/helpers';\nimport {\n ModalElementComponent,\n ModalElementsAdvertiser,\n ModalElementType,\n ModalNavigationService,\n} from '@kirbydesign/designsystem/modal';\nimport {\n FitHeadingConfig,\n FitHeadingDirective,\n ResizeObserverService,\n TranslationService,\n} from '@kirbydesign/designsystem/shared';\nimport { UnobserveFn } from '@kirbydesign/designsystem/types';\nimport { getGlobalConfig } from '@kirbydesign/designsystem/config';\nimport { observeContent } from '@kirbydesign/designsystem/helpers';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { SpinnerComponent } from '@kirbydesign/designsystem/spinner';\n\n/**\n * Specify scroll event debounce time in ms and scrolled offset from top in pixels\n */\nconst contentScrollDebounceTimeInMS = 10;\nconst contentScrolledOffsetInPixels = 4;\n\ntype stickyConfig = { sticky: boolean };\ntype fixedConfig = { fixed: boolean };\ntype MaxWidth = 'default' | 'lg' | 'xl' | 'full';\n\nexport const PAGE_BACK_BUTTON_OVERRIDE = new InjectionToken<PageBackButtonOverride>(\n 'page-back-button-override'\n);\n\nexport interface PageBackButtonOverride {\n navigateBack: (\n routerOutlet: IonRouterOutlet,\n navCtrl: NavController,\n defaultBackHref: string\n ) => void;\n}\n\n/**\n * Event emitted when \"pull-to-refresh\" begins.\n */\nexport interface PullToRefreshEvent {\n /**\n * Invoke this callback-method when action to perform upon \"pull-to-refresh\" completes.\n */\n complete();\n}\n\n@Directive({ selector: '[kirbyPageTitle]' })\nexport class PageTitleDirective {}\n\n@Directive({ selector: '[kirbyPageSubtitle]' })\nexport class PageSubtitleDirective {}\n\n@Directive({ selector: '[kirbyPageToolbarTitle]' })\nexport class PageToolbarTitleDirective {}\n\n@Directive({ selector: '[kirbyPageActions]' })\nexport class PageActionsDirective {\n @Input('kirbyPageActions') config: stickyConfig | fixedConfig;\n private readonly stickyDefault = true;\n private readonly fixedDefault = false;\n\n constructor(public template: TemplateRef<any>) {\n console.warn(\n 'Defining Page Actions via *kirbyPageActions is deprecated and will be removed in Kirby v11. A Kirby Header with Actions should be used instead, as it has an improved API with better support for responsive layouts.'\n );\n }\n\n get isSticky(): boolean {\n return this.config ? (this.config as stickyConfig).sticky : this.stickyDefault;\n }\n\n get isFixed(): boolean {\n return this.config ? (this.config as fixedConfig).fixed : this.fixedDefault;\n }\n}\n\n@Directive({ selector: '[kirbyPageContent]' })\nexport class PageContentDirective {\n @Input('kirbyPageContent') config: fixedConfig;\n\n constructor(public template: TemplateRef<any>) {}\n\n get isFixed(): boolean {\n return this.config && this.config.fixed;\n }\n}\n\n@Directive({ selector: '[kirbyPageStickyContent]' })\nexport class PageStickyContentDirective {}\n\n@Component({\n selector: 'kirby-page-progress',\n template: `\n <ng-content></ng-content>\n `,\n styles: [\n `\n :host {\n display: flex;\n margin-inline-end: 4px; /* Add spacing to potential supplementary action button */\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.Eager,\n})\nexport class PageProgressComponent extends ModalElementComponent {\n // TODO: Find alternative implementation, which aligns with future page configuration / consumption\n // This implementation was chosen over expanding `moveChild` method in component wrapper with yet another scenario\n @HostBinding('attr.slot') slot = 'start';\n\n constructor(\n @Optional() modalElementsAdvertiser: ModalElementsAdvertiser,\n elementRef: ElementRef<HTMLElement>\n ) {\n super(ModalElementType.PAGE_PROGRESS, elementRef, modalElementsAdvertiser);\n }\n}\n@Component({\n selector: 'kirby-page-title',\n template: `\n <ng-content></ng-content>\n `,\n changeDetection: ChangeDetectionStrategy.Eager,\n})\nexport class PageTitleComponent extends ModalElementComponent {\n constructor(\n elementRef: ElementRef<HTMLElement>,\n @Optional() modalElementsAdvertiser: ModalElementsAdvertiser\n ) {\n super(ModalElementType.TITLE, elementRef, modalElementsAdvertiser);\n }\n}\n\n@Component({\n selector: 'kirby-page-content',\n template: `\n <ng-content></ng-content>\n `,\n changeDetection: ChangeDetectionStrategy.Eager,\n})\nexport class PageContentComponent {}\n\n@Component({\n selector: 'kirby-page-actions',\n template: `\n <ng-content select=\"button[kirby-button]\"></ng-content>\n `,\n styles: [\n `\n :host {\n display: inline-flex;\n column-gap: 8px;\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.Eager,\n})\nexport class PageActionsComponent {}\n\n@Component({\n selector: 'kirby-page',\n templateUrl: './page.component.html',\n styleUrls: ['./page.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [IonicElementPartHelper],\n imports: [\n IonHeader,\n IonToolbar,\n IonButtons,\n IonBackButton,\n IonTitle,\n NgTemplateOutlet,\n IonContent,\n IonRefresher,\n SpinnerComponent,\n NgClass,\n IonFooter,\n FitHeadingDirective,\n ],\n})\nexport class PageComponent\n implements OnInit, OnDestroy, AfterViewInit, AfterContentChecked, OnChanges\n{\n @Input() title: string;\n @Input() subtitle: string;\n @Input() toolbarTitle: string;\n @Input() titleAlignment: 'left' | 'center' | 'right' = 'left';\n @Input() defaultBackHref: string;\n @Input() hideBackButton: boolean;\n @Input() titleMaxLines: number;\n @Input() hasInteractiveTitle: boolean;\n\n @Input() set maxWidth(width: MaxWidth) {\n this._maxWidth = width;\n }\n\n get maxWidth(): MaxWidth {\n return this._maxWidth;\n }\n\n private _maxWidth: MaxWidth = 'default';\n\n private _tabBarBottomHidden: boolean;\n public get tabBarBottomHidden(): boolean {\n return this._tabBarBottomHidden;\n }\n @Input()\n public set tabBarBottomHidden(value: boolean) {\n if (this.tabsComponent) {\n // as we are setting a class on tabs, we need this to happen in a separate cd cycle\n setTimeout(() => {\n this.tabsComponent.tabBarBottomHidden = value;\n this.changeDetectorRef.markForCheck();\n });\n }\n this._tabBarBottomHidden = value;\n }\n\n @Output() enter = new EventEmitter<void>();\n @Output() leave = new EventEmitter<void>();\n @Output() refresh = new EventEmitter<PullToRefreshEvent>();\n @Output() backButtonClick = new EventEmitter<Event>();\n @Output() toolbarTitleClick = new EventEmitter<PointerEvent>();\n\n @ViewChild(IonContent, { static: true }) private content?: IonContent;\n @ViewChild(IonContent, { static: true, read: ElementRef })\n private ionContentElement: ElementRef<HTMLIonContentElement>;\n @ViewChild(IonHeader, { static: true, read: ElementRef })\n ionHeaderElement: ElementRef<HTMLIonHeaderElement>;\n @ViewChild(IonFooter, { static: true, read: ElementRef })\n private ionFooterElement: ElementRef<HTMLIonFooterElement>;\n @ViewChild(IonToolbar, { static: true, read: ElementRef })\n private ionToolbarElement: ElementRef<HTMLIonToolbarElement>;\n @ViewChildren(IonButtons, { read: ElementRef })\n private ionToolbarButtonsElement: QueryList<ElementRef<HTMLIonButtonsElement>>;\n @ViewChild(IonBackButton, { static: false })\n private backButton: IonBackButton;\n @ViewChild('pageTitle', { static: false, read: ElementRef })\n private pageTitle: ElementRef;\n @ViewChild('stickyContentContainer', { static: false, read: ElementRef })\n private stickyContentContainer: ElementRef;\n\n @ViewChild('simpleTitleTemplate', { static: true, read: TemplateRef })\n private simpleTitleTemplate: TemplateRef<any>;\n @ViewChild('simpleToolbarTitleTemplate', { static: true, read: TemplateRef })\n private simpleToolbarTitleTemplate: TemplateRef<any>;\n @ContentChild(PageToolbarTitleDirective, { static: false, read: TemplateRef })\n private customToolbarTitleTemplate: TemplateRef<any>;\n @ContentChild(PageTitleDirective, { static: false, read: TemplateRef })\n customTitleTemplate: TemplateRef<any>;\n @ContentChild(PageSubtitleDirective, { static: false, read: TemplateRef })\n customSubtitleTemplate: TemplateRef<any>;\n @ContentChildren(PageActionsDirective)\n customActions: QueryList<PageActionsDirective>;\n @ContentChildren(PageContentDirective)\n private customContent: QueryList<PageContentDirective>;\n @ContentChild(PageStickyContentDirective, { static: false, read: TemplateRef })\n private stickyContentRef: TemplateRef<any>;\n @ContentChild(HeaderComponent)\n header?: HeaderComponent;\n\n hasHeader: boolean;\n hasPageTitle: boolean;\n hasPageSubtitle: boolean;\n toolbarTitleVisible: boolean;\n toolbarActionsVisible: boolean;\n isContentScrolled: boolean;\n isStickyContentPinned = false;\n\n fitHeadingConfig: FitHeadingConfig;\n\n toolbarTitleTemplate: TemplateRef<any>;\n customContentTemplate: TemplateRef<any>;\n pageActionsTemplate: TemplateRef<any>;\n fixedContentTemplate: TemplateRef<any>;\n stickyActionsTemplate: TemplateRef<any>;\n fixedActionsTemplate: TemplateRef<any>;\n stickyContentTemplate: TemplateRef<PageStickyContentDirective>;\n headerActionsTemplate: TemplateRef<HeaderActionsDirective>;\n titleActionIconTemplate: TemplateRef<HeaderTitleActionIconDirective>;\n\n private titleIntersectionObserver?: IntersectionObserver;\n private stickyActionsIntersectionObserver?: IntersectionObserver;\n private stickyContentIntersectionObserver?: IntersectionObserver;\n private isObservingTitle = false;\n private isObservingActions = false;\n private isDocTitleSet = false;\n private observedToolbarButtons = new Set<HTMLIonButtonsElement>();\n\n private unobserveTitleMutation: UnobserveFn;\n\n private url: string;\n private isActive: boolean;\n\n private ngOnDestroy$: Subject<void> = new Subject<void>();\n private contentScrolled$: Observable<ScrollDetail>;\n\n private navigationStart$: Observable<NavigationStart> = this.router.events.pipe(\n filter((event): event is NavigationStart => event instanceof NavigationStart),\n takeUntil(this.ngOnDestroy$)\n );\n\n private navigationEnd$: Observable<NavigationEnd> = this.router.events.pipe(\n filter((event): event is NavigationEnd => event instanceof NavigationEnd),\n takeUntil(this.ngOnDestroy$)\n );\n\n toolbarActionGroupInjector: Injector;\n\n constructor(\n private elementRef: ElementRef,\n private injector: Injector,\n private renderer: Renderer2,\n private router: Router,\n private changeDetectorRef: ChangeDetectorRef,\n private zone: NgZone,\n private modalNavigationService: ModalNavigationService,\n private resizeObserverService: ResizeObserverService,\n @Optional() @SkipSelf() private tabsComponent: TabsComponent,\n @Optional()\n @Inject(PAGE_BACK_BUTTON_OVERRIDE)\n private backButtonOverride: PageBackButtonOverride,\n @Optional()\n private routerOutlet: IonRouterOutlet,\n @Optional()\n private navCtrl: NavController,\n private ionicElementPartHelper: IonicElementPartHelper,\n public translations: TranslationService,\n private htmlDocTitle: Title\n ) {}\n\n private contentReadyPromise: Promise<void>;\n private whenContentReady() {\n if (!this.contentReadyPromise) {\n this.contentReadyPromise = new Promise((resolve) => {\n this.resizeObserverService.observe(this.ionContentElement, (entry) => {\n if (entry.contentRect.height > 0) {\n this.resizeObserverService.unobserve(this.ionContentElement);\n resolve();\n }\n });\n });\n }\n return this.contentReadyPromise;\n }\n\n ngOnInit(): void {\n this.removeWrapper();\n this.ionicElementPartHelper.setPart(\n 'background',\n this.ionToolbarElement,\n '.toolbar-background'\n );\n\n const actionGroupConfig: ActionGroupConfig = {\n isCondensed: true,\n maxVisibleActions: 1,\n };\n this.toolbarActionGroupInjector = Injector.create({\n providers: [\n {\n provide: ACTIONGROUP_CONFIG,\n useValue: actionGroupConfig,\n },\n ],\n parent: this.injector,\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.titleMaxLines) {\n this.fitHeadingConfig = {\n maxLines: changes.titleMaxLines.currentValue,\n };\n }\n if (changes.subtitle && !changes.subtitle.isFirstChange) {\n this.subtitle = changes.title.currentValue;\n this.hasPageSubtitle = this.subtitle !== undefined;\n }\n if (changes.title || changes.toolbarTitle) {\n this.setHTMLDocumentTitle(this.title || this.toolbarTitle);\n }\n }\n\n ngAfterViewInit(): void {\n this.zone.runOutsideAngular(() => {\n this.contentScrolled$ = fromEvent<CustomEvent<ScrollDetail>>(\n this.ionContentElement.nativeElement,\n 'ionScroll'\n ).pipe(\n debounceTime(contentScrollDebounceTimeInMS),\n map((event) => event.detail),\n takeUntil(this.ngOnDestroy$)\n );\n\n this.contentScrolled$.subscribe((scrollInfo: ScrollDetail) => {\n if (scrollInfo.scrollTop > contentScrolledOffsetInPixels !== this.isContentScrolled) {\n this.isContentScrolled = !this.isContentScrolled;\n this.changeDetectorRef.detectChanges();\n }\n });\n });\n\n // This instance has observed a page enter so register the correct url for this instance\n this.url = this.router.url;\n this.onEnter();\n\n // Watch navigation events for page enter and leave\n this.navigationStart$.subscribe((event: NavigationStart) => {\n if (\n this.getPathname(event.url) !== this.getPathname(this.url) &&\n !this.modalNavigationService.isModalRoute(this.url) &&\n !this.modalNavigationService.isModalRoute(event.url)\n ) {\n this.onLeave();\n }\n });\n\n this.navigationEnd$.subscribe((event: NavigationEnd) => {\n if (this.getPathname(event.urlAfterRedirects) === this.getPathname(this.url)) {\n this.onEnter();\n }\n });\n\n this.interceptBackButtonClicksSetup();\n this.initializeStickyIntersectionObserver();\n this.subscribeToToolbarButtonsChanges();\n }\n\n ngAfterContentChecked(): void {\n this.initializeHeader();\n this.initializeTitle();\n this.initializeActions();\n this.initializeContent();\n this.initializeStickyContent();\n this.changeDetectorRef.detectChanges();\n }\n\n ngOnDestroy(): void {\n this.ngOnDestroy$.next();\n this.ngOnDestroy$.complete();\n\n this.titleIntersectionObserver?.disconnect();\n this.stickyActionsIntersectionObserver?.disconnect();\n this.stickyContentIntersectionObserver?.disconnect();\n this.unobserveTitleMutation?.();\n this.unobserveToolbarButtons();\n }\n\n delegateRefreshEvent(event: any): void {\n this.refresh.emit({\n complete: event.target.complete.bind(event.target),\n });\n }\n\n getMaxWidthClasses() {\n if (!this.maxWidth) {\n return '';\n }\n if (this.maxWidth === 'default') {\n return '';\n }\n return `max-width-${this.maxWidth}`;\n }\n\n onTitleClick(event: PointerEvent) {\n if (this.toolbarTitleClick.observed) {\n this.toolbarTitleClick.emit(event);\n } else {\n this.header?.titleClick.emit(event);\n }\n }\n\n private removeWrapper() {\n const parent = this.elementRef.nativeElement.parentNode;\n this.renderer.removeChild(parent, this.elementRef.nativeElement);\n this.renderer.appendChild(parent, this.ionHeaderElement.nativeElement);\n this.renderer.appendChild(parent, this.ionContentElement.nativeElement);\n this.renderer.appendChild(parent, this.ionFooterElement.nativeElement);\n }\n\n private onEnter() {\n if (this.isActive) return;\n this.isActive = true;\n\n this.enter.emit();\n\n this.patchIonLastFocused();\n\n this.observeTitle();\n this.observeActions();\n this.setHTMLDocumentTitle(this.header?.title || this.title || this.toolbarTitle);\n this.observeTitleDOMChanges();\n }\n\n private onLeave() {\n if (!this.isActive) return;\n this.isActive = false;\n\n this.leave.emit();\n\n this.unobserveTitle();\n this.unobserveActions();\n this.unobserveTitleMutation?.();\n\n if (this.tabBarBottomHidden && this.tabsComponent) {\n this.tabsComponent.tabBarBottomHidden = false;\n }\n }\n\n private interceptBackButtonClicksSetup() {\n if (this.backButtonOverride) {\n this.backButton.onClick = (event: Event) => {\n event.preventDefault();\n this.backButtonOverride.navigateBack(this.routerOutlet, this.navCtrl, this.defaultBackHref);\n };\n }\n\n // Intercept back-button click events, defaulting to the built-in click-handler.\n if (this.backButtonClick.observers.length === 0) {\n this.backButtonClick\n .pipe(takeUntil(this.ngOnDestroy$))\n .subscribe(this.backButton.onClick.bind(this.backButton));\n }\n this.backButton.onClick = (event: Event) => {\n this.backButtonClick.emit(event);\n };\n }\n\n private patchIonLastFocused() {\n const ionLastFocus: HTMLElement =\n this.ionContentElement.nativeElement.querySelector('[ion-last-focus=\"true\"]');\n\n // When a focusManagerPriority is set, Ionic handles moving focus back to the element that presented the current view.\n // Unfortunately, we need to schedule a removal of tabindex=\"-1\" from ionLastFocus element after Ionic might have set it\n // to work around elements becoming inaccessible after navigating back: https://github.com/ionic-team/ionic-framework/issues/29875\n setTimeout(() => {\n if (ionLastFocus?.getAttribute('tabindex') !== '-1') return;\n this.renderer.removeAttribute(ionLastFocus, 'tabindex');\n });\n }\n\n private initializeStickyIntersectionObserver() {\n if (this.stickyContentTemplate) {\n // Sticky content present - start observing for stickiness\n if (!this.stickyContentIntersectionObserver) {\n this.stickyContentIntersectionObserver = this.createStickyContentIntersectionObserver();\n }\n setTimeout(() => {\n this.stickyContentIntersectionObserver.observe(this.stickyContentContainer.nativeElement);\n });\n }\n }\n\n private initializeHeader() {\n if (this.hasHeader === undefined && !!this.header) {\n this.hasHeader = true;\n // Header could later be removed from DOM (e.g. in virtual scrolling scenarios),\n // so store a reference to `header.titleActionIconTemplate` and `header.titleClick`:\n this.titleActionIconTemplate = this.header.titleActionIconTemplate;\n if (this.header.titleClick.observed && this.hasInteractiveTitle === undefined) {\n this.hasInteractiveTitle = true;\n }\n\n // Set document title from header immediately if present, then subscribe to changes\n this.setHTMLDocumentTitle(this.header.title);\n\n this.header.title$.pipe(takeUntil(this.ngOnDestroy$)).subscribe(() => {\n this.setHTMLDocumentTitle(this.header.title);\n });\n }\n }\n\n private initializeTitle() {\n if (this.hasHeader && this.isObservingTitle && !this.header?.titleElement) {\n // If we're already observing the header's title element, but it's no longer present,\n // it means it has been removed from DOM (e.g. in virtual scrolling scenarios).\n // Flip observing flag:\n this.isObservingTitle = false;\n }\n if (this.hasPageTitle) {\n if (!this.isObservingTitle && !!this.header?.titleElement) {\n // Header and title element re-attached to DOM - observe title:\n this.observeTitle();\n }\n\n // Ensures rest of initializeTitle() won't run, if already initialized\n return;\n }\n\n this.hasPageTitle =\n this.title !== undefined || !!this.customTitleTemplate || !!this.header?.title;\n this.toolbarTitleVisible = !this.hasPageTitle;\n this.hasPageSubtitle = this.subtitle !== undefined || !!this.customSubtitleTemplate;\n if (this.header?.title && !this.toolbarTitle) {\n this.toolbarTitle = this.header.title;\n this.header.title$.pipe(takeUntil(this.ngOnDestroy$)).subscribe((title) => {\n this.toolbarTitle = title;\n });\n }\n\n this.observeTitle();\n\n const defaultTitleTemplate = this.customTitleTemplate || this.simpleTitleTemplate;\n /* eslint-disable */\n // prettier-ignore\n this.toolbarTitleTemplate = this.customToolbarTitleTemplate\n ? this.customToolbarTitleTemplate\n : typeof this.toolbarTitle === 'string'\n ? this.simpleToolbarTitleTemplate\n : defaultTitleTemplate;\n\n if (this.toolbarTitleClick.observed && this.hasInteractiveTitle === undefined) {\n this.hasInteractiveTitle = true;\n }\n }\n\n private observeTitle() {\n if (!this.hasPageTitle) {\n // Nothing to observe\n return;\n }\n if (this.isObservingTitle) {\n // Already observing\n return;\n }\n\n // We are not actually observing the title until after the `whenContentReady` promise has resolved,\n // but since we've already checked that the page has a title in the guard above,\n // we'll - eagerly - set this flag now to prevent unnecessary re-runs of the rest of this method:\n this.isObservingTitle = true;\n\n if (!this.titleIntersectionObserver) {\n this.titleIntersectionObserver = new IntersectionObserver(\n (entries) => {\n // In rare scenarios we get more than 1 entry - use the last one:\n const lastEntry = entries[entries.length - 1];\n if (lastEntry) {\n const showToolbarTitle = !lastEntry.isIntersecting;\n // Only flip the flag and run Change Detection when changed:\n if (showToolbarTitle !== this.toolbarTitleVisible) {\n this.toolbarTitleVisible = showToolbarTitle;\n this.changeDetectorRef.detectChanges();\n }\n }\n },\n { root: this.ionContentElement.nativeElement }\n );\n }\n\n // Run outside Angular to prevent unnecessary triggering change detection\n // and - under certain conditions - an infinite loop when called within ngAfterContentChecked:\n this.zone.runOutsideAngular(() => {\n this.whenContentReady().then(() => {\n const titleElementRef = this.pageTitle || this.header?.titleElement;\n if (titleElementRef?.nativeElement) {\n this.titleIntersectionObserver.observe(titleElementRef.nativeElement);\n }\n });\n });\n }\n\n private unobserveTitle() {\n const titleElementRef = this.pageTitle || this.header?.titleElement;\n if (titleElementRef) {\n this.titleIntersectionObserver?.unobserve(titleElementRef.nativeElement);\n }\n this.isObservingTitle = false;\n }\n\n private observeTitleDOMChanges() {\n const globalKirbyConfig: KirbyConfig = getGlobalConfig();\n if (!globalKirbyConfig?.setHtmlDocTitle) return;\n if (this.isDocTitleSet) return; // we never want to observe if the document title is already set via any title properties (or already observed)\n\n const titleArea: HTMLElement | null = this.ionHeaderElement.nativeElement.querySelector(\n 'ion-toolbar ion-title .toolbar-title'\n );\n\n this.setHTMLDocumentTitle(titleArea.textContent);\n\n this.unobserveTitleMutation = observeContent(titleArea, () => {\n this.setHTMLDocumentTitle(titleArea.textContent);\n });\n }\n\n private setHTMLDocumentTitle(title: string) {\n const globalKirbyConfig: KirbyConfig = getGlobalConfig();\n if (!globalKirbyConfig?.setHtmlDocTitle || !title || title.trim() === '') return;\n this.htmlDocTitle.setTitle(title);\n this.isDocTitleSet = true;\n }\n\n private initializeActions() {\n if (this.headerActionsTemplate === undefined && !!this.header) {\n this.headerActionsTemplate = this.header.actionsTemplate;\n }\n if (this.hasHeader && this.isObservingActions && !this.header?.actionsElement) {\n // If we're already observing the header's actions element, but it's no longer present,\n // it means it has been removed from DOM (e.g. in virtual scrolling scenarios).\n // Flip observing flag:\n this.isObservingActions = false;\n }\n\n this.observeActions();\n\n this.customActions.forEach((pageAction) => {\n if (pageAction.isFixed) {\n this.fixedActionsTemplate = pageAction.template;\n } else if (pageAction.isSticky) {\n this.stickyActionsTemplate = pageAction.template;\n } else {\n this.pageActionsTemplate = pageAction.template;\n }\n });\n }\n\n private observeActions() {\n if (!this.header?.actionsElement) {\n // Nothing to observe\n return;\n }\n\n if (this.isObservingActions) {\n // Already observing\n return;\n }\n\n // We are not actually observing actions until after the `whenContentReady` promise has resolved,\n // but since we've already checked that there's an actions element present in the guard above,\n // we'll - eagerly - set this flag now to prevent unnecessary re-runs of the rest of this method:\n this.isObservingActions = true;\n\n if (!this.stickyActionsIntersectionObserver) {\n this.stickyActionsIntersectionObserver = new IntersectionObserver(\n (entries) => {\n // In rare scenarios we get more than 1 entry - use the last one:\n const lastEntry = entries[entries.length - 1];\n if (lastEntry) {\n const showToolbarActions = !lastEntry.isIntersecting;\n // Only flip the flag and run Change Detection when changed:\n if (showToolbarActions !== this.toolbarActionsVisible) {\n this.toolbarActionsVisible = showToolbarActions;\n this.changeDetectorRef.detectChanges();\n }\n }\n },\n { root: this.ionContentElement.nativeElement }\n );\n }\n\n // Run outside Angular to prevent unnecessary triggering change detection\n // and - under certain conditions - an infinite loop when called within ngAfterContentChecked:\n this.zone.runOutsideAngular(() => {\n this.whenContentReady().then(() => {\n if (this.header?.actionsElement?.nativeElement) {\n this.stickyActionsIntersectionObserver.observe(this.header.actionsElement.nativeElement);\n }\n });\n });\n }\n\n private unobserveActions() {\n if (this.header?.actionsElement) {\n this.stickyActionsIntersectionObserver?.unobserve(this.header.actionsElement.nativeElement);\n }\n this.isObservingActions = false;\n }\n\n private setActionButtonsWidth() {\n if (!this.ionToolbarButtonsElement) return;\n\n // Ensure ion-toolbar custom element has been defined (primarily when testing, but doesn't hurt):\n customElements.whenDefined(this.ionToolbarElement.nativeElement.localName).then(() => {\n // Ensure toolbar and buttons have been rendered and has dimensions:\n componentOnReady(this.ionToolbarElement.nativeElement, (toolbar) => {\n let startButtonsWidth = 0;\n let endButtonsWidth = 0;\n\n this.ionToolbarButtonsElement\n .map((ionButtonsElementRef) => ionButtonsElementRef.nativeElement)\n .forEach((ionButtonsElement) => {\n const style = getComputedStyle(ionButtonsElement);\n const margin = parseInt(style.marginLeft) + parseInt(style.marginRight);\n if (ionButtonsElement.getAttribute('slot') === 'start') {\n startButtonsWidth += ionButtonsElement.offsetWidth + margin;\n } else {\n endButtonsWidth += ionButtonsElement.offsetWidth + margin;\n }\n });\n\n const actionButtonsMaxWidth = Math.max(startButtonsWidth, endButtonsWidth);\n this.renderer.setStyle(\n toolbar,\n '--action-buttons-width',\n `${actionButtonsMaxWidth}px`,\n RendererStyleFlags2.DashCase\n );\n });\n });\n }\n\n private observeToolbarButtons() {\n this.unobserveToolbarButtons();\n\n this.ionToolbarButtonsElement.forEach(({ nativeElement: ionButtonsElement }) => {\n this.observedToolbarButtons.add(ionButtonsElement);\n this.resizeObserverService.observe(ionButtonsElement, () => this.setActionButtonsWidth());\n });\n }\n\n private subscribeToToolbarButtonsChanges() {\n this.ionToolbarButtonsElement.changes\n .pipe(startWith(this.ionToolbarButtonsElement), takeUntil(this.ngOnDestroy$))\n .subscribe(() => {\n this.observeToolbarButtons();\n this.setActionButtonsWidth();\n });\n }\n\n private unobserveToolbarButtons() {\n this.observedToolbarButtons.forEach((ionButtonsElement) =>\n this.resizeObserverService.unobserve(ionButtonsElement)\n );\n this.observedToolbarButtons.clear();\n }\n\n private initializeContent() {\n this.customContent.forEach((content) => {\n if (content.isFixed) {\n this.fixedContentTemplate = content.template;\n } else {\n this.customContentTemplate = content.template;\n }\n });\n }\n\n private initializeStickyContent() {\n this.stickyContentTemplate = this.stickyContentRef;\n }\n\n private createStickyContentIntersectionObserver() {\n const options: IntersectionObserverInit = {\n root: this.ionContentElement.nativeElement,\n threshold: 1,\n };\n\n const callback: IntersectionObserverCallback = (entries) => {\n if (this.isStickyContentPinned !== !entries[0].isIntersecting) {\n this.isStickyContentPinned = !this.isStickyContentPinned;\n this.changeDetectorRef.detectChanges();\n }\n };\n return new IntersectionObserver(callback, options);\n }\n\n private getPathname(url: string) {\n return url.split('?')[0];\n }\n\n @HostListener('window:keyboardWillShow', ['$event'])\n _onKeyboardWillShow(info?: { keyboardHeight: number }) {\n if (info && info.keyboardHeight) {\n this.ionContentElement.nativeElement.style.setProperty(\n '--keyboard-offset',\n `${info.keyboardHeight}px`\n );\n }\n }\n\n @HostListener('window:keyboardWillHide')\n _onKeyboardWillHide() {\n this.ionContentElement.nativeElement.style.setProperty('--keyboard-offset', '0px');\n }\n\n @HostListener(`window:${selectedTabClickEvent}`)\n _onSelectedTabClick() {\n if (this.content) {\n this.content.scrollToTop(KirbyAnimation.Duration.LONG);\n }\n }\n}\n","<ion-header role=\"presentation\">\n <ion-toolbar\n [class.content-scrolled]=\"isContentScrolled\"\n [class.content-pinned]=\"isStickyContentPinned\"\n >\n <ion-buttons slot=\"start\">\n <ion-back-button\n text=\"\"\n [defaultHref]=\"defaultBackHref\"\n icon=\"assets/kirby/icons/svg/arrow-back.svg\"\n [style.visibility]=\"hideBackButton ? 'hidden' : null\"\n [attr.aria-label]=\"translations.get('back')\"\n ></ion-back-button>\n </ion-buttons>\n <ion-title [class.slide-and-fade-in]=\"toolbarTitleVisible\">\n <div class=\"toolbar-title\">\n @if (!titleActionIconTemplate && !hasInteractiveTitle) {\n <h1 class=\"kirby-text-normal-bold\">\n <ng-container *ngTemplateOutlet=\"toolbarTitleTemplate\"></ng-container>\n </h1>\n }\n @if (!!titleActionIconTemplate || hasInteractiveTitle) {\n <span\n [class.clickable]=\"hasInteractiveTitle\"\n [class.has-icon]=\"!!titleActionIconTemplate\"\n (click)=\"onTitleClick($event)\"\n >\n <h1 class=\"kirby-text-normal-bold\">\n <ng-container *ngTemplateOutlet=\"toolbarTitleTemplate\"></ng-container>\n </h1>\n <ng-container *ngTemplateOutlet=\"titleActionIconTemplate\"></ng-container>\n </span>\n }\n </div>\n </ion-title>\n @if (!!headerActionsTemplate) {\n <ion-buttons class=\"hide\" slot=\"primary\" [class.fade-in]=\"toolbarActionsVisible\">\n <ng-container\n *ngTemplateOutlet=\"headerActionsTemplate; injector: toolbarActionGroupInjector\"\n ></ng-container>\n </ion-buttons>\n }\n @if (!!stickyActionsTemplate) {\n <ion-buttons class=\"legacy-actions\" slot=\"primary\">\n <ng-container *ngTemplateOutlet=\"stickyActionsTemplate\"></ng-container>\n </ion-buttons>\n }\n @if (!!fixedActionsTemplate) {\n <ion-buttons class=\"legacy-actions\" slot=\"secondary\">\n <ng-container *ngTemplateOutlet=\"fixedActionsTemplate\"></ng-container>\n </ion-buttons>\n }\n </ion-toolbar>\n</ion-header>\n\n<ion-content\n scrollEvents=\"true\"\n forceOverscroll=\"false\"\n [class]=\"getMaxWidthClasses()\"\n [class.has-header]=\"hasHeader\"\n>\n @if (refresh.observers.length > 0) {\n <ion-refresher (ionRefresh)=\"delegateRefreshEvent($event)\" slot=\"fixed\">\n <kirby-spinner></kirby-spinner>\n </ion-refresher>\n }\n\n <!-- Page header -->\n @if (hasPageTitle && !hasHeader) {\n <div class=\"page-header-container\">\n <div\n class=\"page-header\"\n [ngClass]=\"{\n 'text-center': titleAlignment === 'center',\n 'text-right': titleAlignment === 'right',\n }\"\n >\n <div #pageTitle class=\"page-title\" [class.has-actions]=\"!!pageActionsTemplate\">\n <ng-container\n *ngTemplateOutlet=\"customTitleTemplate || defaultPageTitleTemplate\"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"pageActionsTemplate || defaultPageActionsTemplate\"\n ></ng-container>\n </div>\n @if (hasPageSubtitle) {\n <div class=\"page-subtitle\">\n <ng-container\n *ngTemplateOutlet=\"customSubtitleTemplate || defaultPageSubtitleTemplate\"\n ></ng-container>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Header -->\n @if (hasHeader) {\n <div class=\"page-header-container\">\n <ng-content select=\"kirby-header\"></ng-content>\n </div>\n }\n\n <!-- Sticky content -->\n @if (stickyContentTemplate) {\n <div\n #stickyContentContainer\n class=\"sticky-content-container\"\n [class.content-pinned]=\"isStickyContentPinned\"\n >\n <div>\n <ng-container *ngTemplateOutlet=\"stickyContentTemplate\"></ng-container>\n </div>\n </div>\n }\n\n <!-- Content -->\n <div class=\"content-inner\">\n <ng-container\n *ngTemplateOutlet=\"customContentTemplate || defaultContentTemplate\"\n ></ng-container>\n </div>\n\n @if (fixedContentTemplate) {\n <div slot=\"fixed\" class=\"fixed-content\">\n <div class=\"content-inner\">\n <ng-container *ngTemplateOutlet=\"fixedContentTemplate\"></ng-container>\n </div>\n </div>\n }\n</ion-content>\n\n<ion-footer>\n <ng-content select=\"kirby-page-footer\"></ng-content>\n</ion-footer>\n\n<ng-template #defaultPageTitleTemplate>\n <span [kirbyFitHeading]=\"fitHeadingConfig\" class=\"kirby-text-xlarge\">\n <ng-container *ngTemplateOutlet=\"simpleTitleTemplate\"></ng-container>\n </span>\n</ng-template>\n<ng-template #defaultPageSubtitleTemplate>\n <ng-container *ngTemplateOutlet=\"simpleSubtitleTemplate\"></ng-container>\n</ng-template>\n<ng-template #defaultPageActionsTemplate>\n <ng-content select=\"kirby-page-actions\"></ng-content>\n</ng-template>\n\n<ng-template #defaultContentTemplate>\n <ng-content select=\"kirby-page-content\"></ng-content>\n</ng-template>\n\n<ng-template #simpleTitleTemplate>{{ title }}</ng-template>\n<ng-template #simpleSubtitleTemplate>{{ subtitle }}</ng-template>\n<ng-template #simpleToolbarTitleTemplate>{{ toolbarTitle }}</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n Optional,\n Renderer2,\n SkipSelf,\n} from '@angular/core';\n\nimport { PageComponent } from '../page.component';\n\n@Component({\n selector: 'kirby-page-footer',\n templateUrl: './page-footer.component.html',\n styleUrls: ['./page-footer.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'kirby-surface-raised' },\n})\nexport class PageFooterComponent implements OnDestroy {\n @Input()\n hasPadding: boolean = true;\n\n constructor(\n @Optional() @SkipSelf() private pageComponent: PageComponent,\n private hostElement: ElementRef,\n private renderer: Renderer2\n ) {\n if (!pageComponent) {\n throw new Error('Page footer must reside inside of a Kirby page');\n }\n }\n\n close() {\n this.pageComponent.tabBarBottomHidden = false;\n this.renderer.removeChild(\n this.hostElement.nativeElement.parentElement,\n this.hostElement.nativeElement,\n true\n );\n }\n\n ngOnDestroy(): void {\n this.pageComponent.tabBarBottomHidden = false;\n }\n}\n","<div class=\"wrapper\" [class.padding]=\"hasPadding\">\n <ng-content></ng-content>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SpinnerModule } from '@kirbydesign/designsystem/spinner';\nimport { FitHeadingDirective } from '@kirbydesign/designsystem/shared';\n\nimport { HeaderModule } from '@kirbydesign/designsystem/header';\nimport {\n IonBackButton,\n IonButtons,\n IonContent,\n IonFooter,\n IonHeader,\n IonRefresher,\n IonTitle,\n IonToolbar,\n} from '@ionic/angular';\nimport { PageFooterComponent } from './page-footer/page-footer.component';\nimport {\n PageActionsComponent,\n PageActionsDirective,\n PageComponent,\n PageContentComponent,\n PageContentDirective,\n PageProgressComponent,\n PageStickyContentDirective,\n PageSubtitleDirective,\n PageTitleComponent,\n PageTitleDirective,\n PageToolbarTitleDirective,\n} from './page.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FitHeadingDirective,\n SpinnerModule,\n HeaderModule,\n IonHeader,\n IonToolbar,\n IonButtons,\n IonBackButton,\n IonContent,\n IonTitle,\n IonRefresher,\n IonFooter,\n PageComponent,\n PageActionsComponent,\n PageActionsDirective,\n PageContentComponent,\n PageFooterComponent,\n PageContentDirective,\n PageProgressComponent,\n PageTitleComponent,\n PageTitleDirective,\n PageSubtitleDirective,\n PageToolbarTitleDirective,\n PageStickyContentDirective,\n ],\n exports: [\n PageComponent,\n PageActionsComponent,\n PageActionsDirective,\n PageContentComponent,\n PageFooterComponent,\n PageContentDirective,\n PageProgressComponent,\n PageTitleComponent,\n PageTitleDirective,\n PageSubtitleDirective,\n PageToolbarTitleDirective,\n FitHeadingDirective,\n PageStickyContentDirective,\n ],\n})\nexport class PageModule {}\n"],"mappings":"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AA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAU,MAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAAV;EAAA,KAAA,OAAA,GAAA,oBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAU,SAAA;IAzCnB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GAA0B;GAAA,SAAA;IAG1B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GAA0B;EAAA,CAAA;CAAA;CAGjB;EAAA,KAAA,OAAA,GAAA,oBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAU,SAAA;IAzCnB;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GAAa;EAAA,CAAA;CAAA;;AA6BJ,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAU,YAAA,CAAA;EA3CtB,MAAA;EAAS,MAAA,CAAA;GACR,SAAS;IACP;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACD;GACD,SAAS;IACP;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACD;EACF,CAAA"}
|
|
@@ -132,7 +132,7 @@ var PopoverComponent = class PopoverComponent {
|
|
|
132
132
|
static {
|
|
133
133
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
134
134
|
minVersion: "12.0.0",
|
|
135
|
-
version: "22.2.
|
|
135
|
+
version: "22.2.3",
|
|
136
136
|
ngImport: i0,
|
|
137
137
|
type: PopoverComponent,
|
|
138
138
|
deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }],
|
|
@@ -142,7 +142,7 @@ var PopoverComponent = class PopoverComponent {
|
|
|
142
142
|
static {
|
|
143
143
|
this.ɵcmp = i0.ɵɵngDeclareComponent({
|
|
144
144
|
minVersion: "14.0.0",
|
|
145
|
-
version: "22.2.
|
|
145
|
+
version: "22.2.3",
|
|
146
146
|
type: PopoverComponent,
|
|
147
147
|
isStandalone: true,
|
|
148
148
|
selector: "kirby-popover",
|
|
@@ -172,7 +172,7 @@ var PopoverComponent = class PopoverComponent {
|
|
|
172
172
|
};
|
|
173
173
|
i0.ɵɵngDeclareClassMetadata({
|
|
174
174
|
minVersion: "12.0.0",
|
|
175
|
-
version: "22.2.
|
|
175
|
+
version: "22.2.3",
|
|
176
176
|
ngImport: i0,
|
|
177
177
|
type: PopoverComponent,
|
|
178
178
|
decorators: [{
|
|
@@ -28,7 +28,7 @@ var ProgressCircleRingComponent = class ProgressCircleRingComponent {
|
|
|
28
28
|
static {
|
|
29
29
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
30
30
|
minVersion: "12.0.0",
|
|
31
|
-
version: "22.2.
|
|
31
|
+
version: "22.2.3",
|
|
32
32
|
ngImport: i0,
|
|
33
33
|
type: ProgressCircleRingComponent,
|
|
34
34
|
deps: [],
|
|
@@ -38,7 +38,7 @@ var ProgressCircleRingComponent = class ProgressCircleRingComponent {
|
|
|
38
38
|
static {
|
|
39
39
|
this.ɵcmp = i0.ɵɵngDeclareComponent({
|
|
40
40
|
minVersion: "14.0.0",
|
|
41
|
-
version: "22.2.
|
|
41
|
+
version: "22.2.3",
|
|
42
42
|
type: ProgressCircleRingComponent,
|
|
43
43
|
isStandalone: true,
|
|
44
44
|
selector: "kirby-progress-circle-ring",
|
|
@@ -60,7 +60,7 @@ var ProgressCircleRingComponent = class ProgressCircleRingComponent {
|
|
|
60
60
|
};
|
|
61
61
|
i0.ɵɵngDeclareClassMetadata({
|
|
62
62
|
minVersion: "12.0.0",
|
|
63
|
-
version: "22.2.
|
|
63
|
+
version: "22.2.3",
|
|
64
64
|
ngImport: i0,
|
|
65
65
|
type: ProgressCircleRingComponent,
|
|
66
66
|
decorators: [{
|
|
@@ -126,7 +126,7 @@ var ProgressCircleComponent = class ProgressCircleComponent {
|
|
|
126
126
|
static {
|
|
127
127
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
128
128
|
minVersion: "12.0.0",
|
|
129
|
-
version: "22.2.
|
|
129
|
+
version: "22.2.3",
|
|
130
130
|
ngImport: i0,
|
|
131
131
|
type: ProgressCircleComponent,
|
|
132
132
|
deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }],
|
|
@@ -136,7 +136,7 @@ var ProgressCircleComponent = class ProgressCircleComponent {
|
|
|
136
136
|
static {
|
|
137
137
|
this.ɵcmp = i0.ɵɵngDeclareComponent({
|
|
138
138
|
minVersion: "14.0.0",
|
|
139
|
-
version: "22.2.
|
|
139
|
+
version: "22.2.3",
|
|
140
140
|
type: ProgressCircleComponent,
|
|
141
141
|
isStandalone: true,
|
|
142
142
|
selector: "kirby-progress-circle",
|
|
@@ -174,7 +174,7 @@ var ProgressCircleComponent = class ProgressCircleComponent {
|
|
|
174
174
|
};
|
|
175
175
|
i0.ɵɵngDeclareClassMetadata({
|
|
176
176
|
minVersion: "12.0.0",
|
|
177
|
-
version: "22.2.
|
|
177
|
+
version: "22.2.3",
|
|
178
178
|
ngImport: i0,
|
|
179
179
|
type: ProgressCircleComponent,
|
|
180
180
|
decorators: [{
|
|
@@ -44,7 +44,7 @@ var RadioComponent = class RadioComponent {
|
|
|
44
44
|
static {
|
|
45
45
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
46
46
|
minVersion: "12.0.0",
|
|
47
|
-
version: "22.2.
|
|
47
|
+
version: "22.2.3",
|
|
48
48
|
ngImport: i0,
|
|
49
49
|
type: RadioComponent,
|
|
50
50
|
deps: [{ token: i0.ElementRef }, { token: i1.IonicElementPartHelper }],
|
|
@@ -54,7 +54,7 @@ var RadioComponent = class RadioComponent {
|
|
|
54
54
|
static {
|
|
55
55
|
this.ɵcmp = i0.ɵɵngDeclareComponent({
|
|
56
56
|
minVersion: "17.0.0",
|
|
57
|
-
version: "22.2.
|
|
57
|
+
version: "22.2.3",
|
|
58
58
|
type: RadioComponent,
|
|
59
59
|
isStandalone: true,
|
|
60
60
|
selector: "kirby-radio",
|
|
@@ -80,7 +80,7 @@ var RadioComponent = class RadioComponent {
|
|
|
80
80
|
}],
|
|
81
81
|
ngImport: i0,
|
|
82
82
|
template: "<ion-radio\n [value]=\"value\"\n [disabled]=\"disabled\"\n mode=\"md\"\n [labelPlacement]=\"_labelPlacement\"\n [justify]=\"_justify\"\n>\n @if (_labelText) {\n <span class=\"hidden-label\">{{ _labelText }}</span>\n }\n @if (text) {\n <span [attr.aria-hidden]=\"_labelText ? true : undefined\">{{ text }}</span>\n }\n <span class=\"default-content\" [attr.aria-hidden]=\"_labelText ? true : undefined\">\n <ng-content></ng-content>\n </span>\n</ion-radio>\n",
|
|
83
|
-
styles: [".kirby-line-clamp{display:-webkit-box;-webkit-line-clamp:var(--line-clamp, none);-webkit-box-orient:vertical;overflow:hidden}:host{display:flex}:host[disabled] ion-radio::part(label-text-wrapper),:host[disabled] ion-radio::part(native-wrapper){opacity
|
|
83
|
+
styles: [".kirby-line-clamp{display:-webkit-box;-webkit-line-clamp:var(--line-clamp, none);-webkit-box-orient:vertical;overflow:hidden}:host{display:flex}:host[disabled] ion-radio::part(label-text-wrapper),:host[disabled] ion-radio::part(native-wrapper){opacity:var(--kirby-opacity-40)}:host:has(ion-radio.in-item.radio-justify-space-between){width:100%}:host.has-hidden-label:has(ion-radio.in-item){position:initial}:host.has-hidden-label:has(ion-radio.in-item) ion-radio{position:initial}:host.has-hidden-label:has(ion-radio.in-item) ion-radio::part(label){position:initial}:host.has-hidden-label:has(ion-radio.in-item) ion-radio.radio-label-placement-start::part(label-text-wrapper),:host.has-hidden-label:has(ion-radio.in-item) ion-radio.radio-label-placement-end::part(label-text-wrapper){margin-inline:0}:host.has-hidden-label[slot=end] ion-radio{margin-inline-start:12px}:host.has-hidden-label .hidden-label{position:absolute;inset:0;opacity:0}:host.xs ion-radio:not(.in-item)::part(label){padding-block:calc((32px - var(--kirby-spacing-m)) * .5)}:host.sm ion-radio:not(.in-item)::part(label){padding-block:calc((44px - var(--kirby-spacing-m)) * .5)}:host.md ion-radio:not(.in-item)::part(label){padding-block:calc((56px - var(--kirby-spacing-m)) * .5)}ion-radio{box-sizing:border-box;--border-width: var(--kirby-stroke-xs);--color: var(--kirby-color-border-raised);--color-checked: var(--kirby-color-border-raised)}@media(hover:hover){ion-radio:hover{--color: var(--kirby-color-border-raised-hover);--color-checked: var(--kirby-color-border-raised-hover)}ion-radio:hover::part(container){background-color:var(--kirby-color-fill-raised-hover)}ion-radio:hover::part(mark){--color-checked: var(--kirby-color-fill-engaged-hover)}}ion-radio:active{--color: var(--kirby-color-border-raised-active);--color-checked: var(--kirby-color-border-raised-active)}ion-radio:active::part(container){background-color:var(--kirby-color-fill-raised-active)}ion-radio:active::part(mark){--color-checked: var(--kirby-color-fill-engaged-active)}ion-radio:focus-visible{--color: var(--kirby-color-border-focus);--color-checked: var(--kirby-color-border-focus)}ion-radio:focus-visible::part(container){transition:box-shadow 80ms linear;box-shadow:var(--kirby-focus-ring-sm-combined-inset)}ion-radio::part(container){transition:all 80ms linear 0ms;transition-property:background-color,box-shadow;background-color:var(--kirby-color-fill-raised);margin:var(--kirby-spacing-xxxxs);width:20px;height:20px}ion-radio::part(mark){--color-checked: var(--kirby-color-fill-engaged);width:var(--kirby-spacing-xs);height:var(--kirby-spacing-xs)}ion-radio::part(label){align-items:start;padding-inline:16px;line-height:var(--kirby-line-height-n)}ion-radio::part(label-text-wrapper){margin-inline:12px 0;white-space:pre-line}ion-radio::part(native-wrapper){height:var(--kirby-relative-size-m)}ion-radio.in-item::part(label){align-items:center;padding-inline:0}ion-radio.in-item::part(label-text-wrapper){margin-block:0}ion-radio.in-item.radio-label-placement-start::part(label-text-wrapper){margin-inline:0 var(--kirby-spacing-xxs)}ion-radio.in-item.radio-label-placement-end::part(label-text-wrapper){margin-inline:var(--kirby-spacing-xxs) 0}ion-radio :host-context(kirby-radio-group.error) ion-radio,ion-radio :host-context(kirby-radio-group.ng-touched.ng-invalid) ion-radio{--color: var(--kirby-color-border-raised-danger);--color-checked: var(--kirby-color-border-raised-danger)}ion-radio :host-context(kirby-radio-group.error) ion-radio::part(container),ion-radio :host-context(kirby-radio-group.ng-touched.ng-invalid) ion-radio::part(container){box-shadow:var(--kirby-error-ring-combined-inset)}ion-radio :host-context(kirby-radio-group.error) ion-radio:focus-visible,ion-radio :host-context(kirby-radio-group.ng-touched.ng-invalid) ion-radio:focus-visible{--color: var(--kirby-color-border-focus);--color-checked: var(--kirby-color-border-focus)}ion-radio :host-context(kirby-radio-group.error) ion-radio:focus-visible::part(container),ion-radio :host-context(kirby-radio-group.ng-touched.ng-invalid) ion-radio:focus-visible::part(container){box-shadow:var(--kirby-focus-ring-sm-combined-inset)}:host-context(kirby-item){z-index:var(--kirby-z-index-default)}:host-context(kirby-item) ion-radio{margin:0}:host-context(kirby-item)[slot=start]{margin-block:0;margin-inline-end:12px}\n"],
|
|
84
84
|
dependencies: [{
|
|
85
85
|
kind: "component",
|
|
86
86
|
type: IonRadio,
|
|
@@ -103,7 +103,7 @@ var RadioComponent = class RadioComponent {
|
|
|
103
103
|
};
|
|
104
104
|
i0.ɵɵngDeclareClassMetadata({
|
|
105
105
|
minVersion: "12.0.0",
|
|
106
|
-
version: "22.2.
|
|
106
|
+
version: "22.2.3",
|
|
107
107
|
ngImport: i0,
|
|
108
108
|
type: RadioComponent,
|
|
109
109
|
decorators: [{
|
|
@@ -114,7 +114,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
114
114
|
providers: [IonicElementPartHelper],
|
|
115
115
|
imports: [IonRadio],
|
|
116
116
|
template: "<ion-radio\n [value]=\"value\"\n [disabled]=\"disabled\"\n mode=\"md\"\n [labelPlacement]=\"_labelPlacement\"\n [justify]=\"_justify\"\n>\n @if (_labelText) {\n <span class=\"hidden-label\">{{ _labelText }}</span>\n }\n @if (text) {\n <span [attr.aria-hidden]=\"_labelText ? true : undefined\">{{ text }}</span>\n }\n <span class=\"default-content\" [attr.aria-hidden]=\"_labelText ? true : undefined\">\n <ng-content></ng-content>\n </span>\n</ion-radio>\n",
|
|
117
|
-
styles: [".kirby-line-clamp{display:-webkit-box;-webkit-line-clamp:var(--line-clamp, none);-webkit-box-orient:vertical;overflow:hidden}:host{display:flex}:host[disabled] ion-radio::part(label-text-wrapper),:host[disabled] ion-radio::part(native-wrapper){opacity
|
|
117
|
+
styles: [".kirby-line-clamp{display:-webkit-box;-webkit-line-clamp:var(--line-clamp, none);-webkit-box-orient:vertical;overflow:hidden}:host{display:flex}:host[disabled] ion-radio::part(label-text-wrapper),:host[disabled] ion-radio::part(native-wrapper){opacity:var(--kirby-opacity-40)}:host:has(ion-radio.in-item.radio-justify-space-between){width:100%}:host.has-hidden-label:has(ion-radio.in-item){position:initial}:host.has-hidden-label:has(ion-radio.in-item) ion-radio{position:initial}:host.has-hidden-label:has(ion-radio.in-item) ion-radio::part(label){position:initial}:host.has-hidden-label:has(ion-radio.in-item) ion-radio.radio-label-placement-start::part(label-text-wrapper),:host.has-hidden-label:has(ion-radio.in-item) ion-radio.radio-label-placement-end::part(label-text-wrapper){margin-inline:0}:host.has-hidden-label[slot=end] ion-radio{margin-inline-start:12px}:host.has-hidden-label .hidden-label{position:absolute;inset:0;opacity:0}:host.xs ion-radio:not(.in-item)::part(label){padding-block:calc((32px - var(--kirby-spacing-m)) * .5)}:host.sm ion-radio:not(.in-item)::part(label){padding-block:calc((44px - var(--kirby-spacing-m)) * .5)}:host.md ion-radio:not(.in-item)::part(label){padding-block:calc((56px - var(--kirby-spacing-m)) * .5)}ion-radio{box-sizing:border-box;--border-width: var(--kirby-stroke-xs);--color: var(--kirby-color-border-raised);--color-checked: var(--kirby-color-border-raised)}@media(hover:hover){ion-radio:hover{--color: var(--kirby-color-border-raised-hover);--color-checked: var(--kirby-color-border-raised-hover)}ion-radio:hover::part(container){background-color:var(--kirby-color-fill-raised-hover)}ion-radio:hover::part(mark){--color-checked: var(--kirby-color-fill-engaged-hover)}}ion-radio:active{--color: var(--kirby-color-border-raised-active);--color-checked: var(--kirby-color-border-raised-active)}ion-radio:active::part(container){background-color:var(--kirby-color-fill-raised-active)}ion-radio:active::part(mark){--color-checked: var(--kirby-color-fill-engaged-active)}ion-radio:focus-visible{--color: var(--kirby-color-border-focus);--color-checked: var(--kirby-color-border-focus)}ion-radio:focus-visible::part(container){transition:box-shadow 80ms linear;box-shadow:var(--kirby-focus-ring-sm-combined-inset)}ion-radio::part(container){transition:all 80ms linear 0ms;transition-property:background-color,box-shadow;background-color:var(--kirby-color-fill-raised);margin:var(--kirby-spacing-xxxxs);width:20px;height:20px}ion-radio::part(mark){--color-checked: var(--kirby-color-fill-engaged);width:var(--kirby-spacing-xs);height:var(--kirby-spacing-xs)}ion-radio::part(label){align-items:start;padding-inline:16px;line-height:var(--kirby-line-height-n)}ion-radio::part(label-text-wrapper){margin-inline:12px 0;white-space:pre-line}ion-radio::part(native-wrapper){height:var(--kirby-relative-size-m)}ion-radio.in-item::part(label){align-items:center;padding-inline:0}ion-radio.in-item::part(label-text-wrapper){margin-block:0}ion-radio.in-item.radio-label-placement-start::part(label-text-wrapper){margin-inline:0 var(--kirby-spacing-xxs)}ion-radio.in-item.radio-label-placement-end::part(label-text-wrapper){margin-inline:var(--kirby-spacing-xxs) 0}ion-radio :host-context(kirby-radio-group.error) ion-radio,ion-radio :host-context(kirby-radio-group.ng-touched.ng-invalid) ion-radio{--color: var(--kirby-color-border-raised-danger);--color-checked: var(--kirby-color-border-raised-danger)}ion-radio :host-context(kirby-radio-group.error) ion-radio::part(container),ion-radio :host-context(kirby-radio-group.ng-touched.ng-invalid) ion-radio::part(container){box-shadow:var(--kirby-error-ring-combined-inset)}ion-radio :host-context(kirby-radio-group.error) ion-radio:focus-visible,ion-radio :host-context(kirby-radio-group.ng-touched.ng-invalid) ion-radio:focus-visible{--color: var(--kirby-color-border-focus);--color-checked: var(--kirby-color-border-focus)}ion-radio :host-context(kirby-radio-group.error) ion-radio:focus-visible::part(container),ion-radio :host-context(kirby-radio-group.ng-touched.ng-invalid) ion-radio:focus-visible::part(container){box-shadow:var(--kirby-focus-ring-sm-combined-inset)}:host-context(kirby-item){z-index:var(--kirby-z-index-default)}:host-context(kirby-item) ion-radio{margin:0}:host-context(kirby-item)[slot=start]{margin-block:0;margin-inline-end:12px}\n"]
|
|
118
118
|
}]
|
|
119
119
|
}],
|
|
120
120
|
ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.IonicElementPartHelper }],
|
|
@@ -308,7 +308,7 @@ var RadioGroupComponent = class RadioGroupComponent {
|
|
|
308
308
|
static {
|
|
309
309
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
310
310
|
minVersion: "12.0.0",
|
|
311
|
-
version: "22.2.
|
|
311
|
+
version: "22.2.3",
|
|
312
312
|
ngImport: i0,
|
|
313
313
|
type: RadioGroupComponent,
|
|
314
314
|
deps: [
|
|
@@ -322,7 +322,7 @@ var RadioGroupComponent = class RadioGroupComponent {
|
|
|
322
322
|
static {
|
|
323
323
|
this.ɵcmp = i0.ɵɵngDeclareComponent({
|
|
324
324
|
minVersion: "17.0.0",
|
|
325
|
-
version: "22.2.
|
|
325
|
+
version: "22.2.3",
|
|
326
326
|
type: RadioGroupComponent,
|
|
327
327
|
isStandalone: true,
|
|
328
328
|
selector: "kirby-radio-group",
|
|
@@ -412,7 +412,7 @@ var RadioGroupComponent = class RadioGroupComponent {
|
|
|
412
412
|
};
|
|
413
413
|
i0.ɵɵngDeclareClassMetadata({
|
|
414
414
|
minVersion: "12.0.0",
|
|
415
|
-
version: "22.2.
|
|
415
|
+
version: "22.2.3",
|
|
416
416
|
ngImport: i0,
|
|
417
417
|
type: RadioGroupComponent,
|
|
418
418
|
decorators: [{
|
|
@@ -478,7 +478,7 @@ var RadioModule = class RadioModule {
|
|
|
478
478
|
static {
|
|
479
479
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
480
480
|
minVersion: "12.0.0",
|
|
481
|
-
version: "22.2.
|
|
481
|
+
version: "22.2.3",
|
|
482
482
|
ngImport: i0,
|
|
483
483
|
type: RadioModule,
|
|
484
484
|
deps: [],
|
|
@@ -488,7 +488,7 @@ var RadioModule = class RadioModule {
|
|
|
488
488
|
static {
|
|
489
489
|
this.ɵmod = i0.ɵɵngDeclareNgModule({
|
|
490
490
|
minVersion: "14.0.0",
|
|
491
|
-
version: "22.2.
|
|
491
|
+
version: "22.2.3",
|
|
492
492
|
ngImport: i0,
|
|
493
493
|
type: RadioModule,
|
|
494
494
|
imports: [
|
|
@@ -504,7 +504,7 @@ var RadioModule = class RadioModule {
|
|
|
504
504
|
static {
|
|
505
505
|
this.ɵinj = i0.ɵɵngDeclareInjector({
|
|
506
506
|
minVersion: "12.0.0",
|
|
507
|
-
version: "22.2.
|
|
507
|
+
version: "22.2.3",
|
|
508
508
|
ngImport: i0,
|
|
509
509
|
type: RadioModule,
|
|
510
510
|
imports: [
|
|
@@ -518,7 +518,7 @@ var RadioModule = class RadioModule {
|
|
|
518
518
|
};
|
|
519
519
|
i0.ɵɵngDeclareClassMetadata({
|
|
520
520
|
minVersion: "12.0.0",
|
|
521
|
-
version: "22.2.
|
|
521
|
+
version: "22.2.3",
|
|
522
522
|
ngImport: i0,
|
|
523
523
|
type: RadioModule,
|
|
524
524
|
decorators: [{
|