@kirbydesign/designsystem 11.4.0 → 11.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/action-group/index.d.ts.map +1 -1
  2. package/badge/index.d.ts.map +1 -1
  3. package/button/index.d.ts.map +1 -1
  4. package/calendar/index.d.ts.map +1 -1
  5. package/card/index.d.ts.map +1 -1
  6. package/chart/index.d.ts.map +1 -1
  7. package/config/index.d.ts.map +1 -1
  8. package/dropdown/index.d.ts +2 -2
  9. package/dropdown/index.d.ts.map +1 -1
  10. package/fesm2022/kirbydesign-designsystem-accordion.mjs +10 -10
  11. package/fesm2022/kirbydesign-designsystem-accordion.mjs.map +1 -1
  12. package/fesm2022/kirbydesign-designsystem-action-group.mjs +3 -3
  13. package/fesm2022/kirbydesign-designsystem-action-group.mjs.map +1 -1
  14. package/fesm2022/kirbydesign-designsystem-avatar.mjs +3 -3
  15. package/fesm2022/kirbydesign-designsystem-avatar.mjs.map +1 -1
  16. package/fesm2022/kirbydesign-designsystem-badge.mjs +3 -3
  17. package/fesm2022/kirbydesign-designsystem-badge.mjs.map +1 -1
  18. package/fesm2022/kirbydesign-designsystem-button.mjs +3 -3
  19. package/fesm2022/kirbydesign-designsystem-button.mjs.map +1 -1
  20. package/fesm2022/kirbydesign-designsystem-calendar.mjs +3 -3
  21. package/fesm2022/kirbydesign-designsystem-calendar.mjs.map +1 -1
  22. package/fesm2022/kirbydesign-designsystem-card.mjs +16 -16
  23. package/fesm2022/kirbydesign-designsystem-card.mjs.map +1 -1
  24. package/fesm2022/kirbydesign-designsystem-chart.mjs +22 -22
  25. package/fesm2022/kirbydesign-designsystem-chart.mjs.map +1 -1
  26. package/fesm2022/kirbydesign-designsystem-checkbox.mjs +3 -3
  27. package/fesm2022/kirbydesign-designsystem-checkbox.mjs.map +1 -1
  28. package/fesm2022/kirbydesign-designsystem-config.mjs.map +1 -1
  29. package/fesm2022/kirbydesign-designsystem-data-table.mjs +7 -7
  30. package/fesm2022/kirbydesign-designsystem-data-table.mjs.map +1 -1
  31. package/fesm2022/kirbydesign-designsystem-divider.mjs +3 -3
  32. package/fesm2022/kirbydesign-designsystem-divider.mjs.map +1 -1
  33. package/fesm2022/kirbydesign-designsystem-dropdown.mjs +16 -14
  34. package/fesm2022/kirbydesign-designsystem-dropdown.mjs.map +1 -1
  35. package/fesm2022/kirbydesign-designsystem-empty-state.mjs +7 -7
  36. package/fesm2022/kirbydesign-designsystem-empty-state.mjs.map +1 -1
  37. package/fesm2022/kirbydesign-designsystem-fab-sheet.mjs +3 -3
  38. package/fesm2022/kirbydesign-designsystem-fab-sheet.mjs.map +1 -1
  39. package/fesm2022/kirbydesign-designsystem-flag.mjs +3 -3
  40. package/fesm2022/kirbydesign-designsystem-flag.mjs.map +1 -1
  41. package/fesm2022/kirbydesign-designsystem-form-field.mjs +28 -28
  42. package/fesm2022/kirbydesign-designsystem-form-field.mjs.map +1 -1
  43. package/fesm2022/kirbydesign-designsystem-header.mjs +19 -19
  44. package/fesm2022/kirbydesign-designsystem-header.mjs.map +1 -1
  45. package/fesm2022/kirbydesign-designsystem-helpers-scss.mjs.map +1 -1
  46. package/fesm2022/kirbydesign-designsystem-helpers.mjs +9 -9
  47. package/fesm2022/kirbydesign-designsystem-helpers.mjs.map +1 -1
  48. package/fesm2022/kirbydesign-designsystem-icon.mjs +10 -10
  49. package/fesm2022/kirbydesign-designsystem-icon.mjs.map +1 -1
  50. package/fesm2022/kirbydesign-designsystem-item-group.mjs +3 -3
  51. package/fesm2022/kirbydesign-designsystem-item-group.mjs.map +1 -1
  52. package/fesm2022/kirbydesign-designsystem-item-sliding.mjs +3 -3
  53. package/fesm2022/kirbydesign-designsystem-item-sliding.mjs.map +1 -1
  54. package/fesm2022/kirbydesign-designsystem-item.mjs +10 -10
  55. package/fesm2022/kirbydesign-designsystem-item.mjs.map +1 -1
  56. package/fesm2022/kirbydesign-designsystem-kirby-app.mjs +7 -7
  57. package/fesm2022/kirbydesign-designsystem-kirby-app.mjs.map +1 -1
  58. package/fesm2022/kirbydesign-designsystem-list.mjs +42 -42
  59. package/fesm2022/kirbydesign-designsystem-list.mjs.map +1 -1
  60. package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs +6 -6
  61. package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs.map +1 -1
  62. package/fesm2022/kirbydesign-designsystem-menu.mjs +3 -3
  63. package/fesm2022/kirbydesign-designsystem-menu.mjs.map +1 -1
  64. package/fesm2022/kirbydesign-designsystem-modal.mjs +42 -42
  65. package/fesm2022/kirbydesign-designsystem-modal.mjs.map +1 -1
  66. package/fesm2022/kirbydesign-designsystem-page.mjs +40 -40
  67. package/fesm2022/kirbydesign-designsystem-page.mjs.map +1 -1
  68. package/fesm2022/kirbydesign-designsystem-popover.mjs +3 -3
  69. package/fesm2022/kirbydesign-designsystem-popover.mjs.map +1 -1
  70. package/fesm2022/kirbydesign-designsystem-progress-circle.mjs +6 -6
  71. package/fesm2022/kirbydesign-designsystem-progress-circle.mjs.map +1 -1
  72. package/fesm2022/kirbydesign-designsystem-radio.mjs +15 -15
  73. package/fesm2022/kirbydesign-designsystem-radio.mjs.map +1 -1
  74. package/fesm2022/kirbydesign-designsystem-range.mjs +8 -5
  75. package/fesm2022/kirbydesign-designsystem-range.mjs.map +1 -1
  76. package/fesm2022/kirbydesign-designsystem-reorder-list.mjs +3 -3
  77. package/fesm2022/kirbydesign-designsystem-reorder-list.mjs.map +1 -1
  78. package/fesm2022/kirbydesign-designsystem-router-outlet.mjs +7 -7
  79. package/fesm2022/kirbydesign-designsystem-router-outlet.mjs.map +1 -1
  80. package/fesm2022/kirbydesign-designsystem-section-header.mjs +3 -3
  81. package/fesm2022/kirbydesign-designsystem-section-header.mjs.map +1 -1
  82. package/fesm2022/kirbydesign-designsystem-shared-floating.mjs +3 -3
  83. package/fesm2022/kirbydesign-designsystem-shared-floating.mjs.map +1 -1
  84. package/fesm2022/kirbydesign-designsystem-shared-portal.mjs +3 -3
  85. package/fesm2022/kirbydesign-designsystem-shared-portal.mjs.map +1 -1
  86. package/fesm2022/kirbydesign-designsystem-shared.mjs +18 -18
  87. package/fesm2022/kirbydesign-designsystem-shared.mjs.map +1 -1
  88. package/fesm2022/kirbydesign-designsystem-slide-button.mjs +3 -3
  89. package/fesm2022/kirbydesign-designsystem-slide-button.mjs.map +1 -1
  90. package/fesm2022/kirbydesign-designsystem-slide.mjs +13 -13
  91. package/fesm2022/kirbydesign-designsystem-slide.mjs.map +1 -1
  92. package/fesm2022/kirbydesign-designsystem-spinner.mjs +7 -7
  93. package/fesm2022/kirbydesign-designsystem-spinner.mjs.map +1 -1
  94. package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs +10 -10
  95. package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs.map +1 -1
  96. package/fesm2022/kirbydesign-designsystem-tabs.mjs +13 -13
  97. package/fesm2022/kirbydesign-designsystem-tabs.mjs.map +1 -1
  98. package/fesm2022/kirbydesign-designsystem-testing-base.mjs +286 -286
  99. package/fesm2022/kirbydesign-designsystem-testing-base.mjs.map +1 -1
  100. package/fesm2022/kirbydesign-designsystem-testing-jasmine.mjs +4 -4
  101. package/fesm2022/kirbydesign-designsystem-testing-jasmine.mjs.map +1 -1
  102. package/fesm2022/kirbydesign-designsystem-testing-jest.mjs +4 -4
  103. package/fesm2022/kirbydesign-designsystem-testing-jest.mjs.map +1 -1
  104. package/fesm2022/kirbydesign-designsystem-testing.mjs +4 -4
  105. package/fesm2022/kirbydesign-designsystem-testing.mjs.map +1 -1
  106. package/fesm2022/kirbydesign-designsystem-toast.mjs +6 -6
  107. package/fesm2022/kirbydesign-designsystem-toast.mjs.map +1 -1
  108. package/fesm2022/kirbydesign-designsystem-toggle-button.mjs +8 -7
  109. package/fesm2022/kirbydesign-designsystem-toggle-button.mjs.map +1 -1
  110. package/fesm2022/kirbydesign-designsystem-toggle.mjs +5 -4
  111. package/fesm2022/kirbydesign-designsystem-toggle.mjs.map +1 -1
  112. package/fesm2022/kirbydesign-designsystem-types.mjs +3 -3
  113. package/fesm2022/kirbydesign-designsystem-types.mjs.map +1 -1
  114. package/fesm2022/kirbydesign-designsystem.mjs +32 -29
  115. package/fesm2022/kirbydesign-designsystem.mjs.map +1 -1
  116. package/flag/index.d.ts.map +1 -1
  117. package/form-field/index.d.ts.map +1 -1
  118. package/icon/index.d.ts.map +1 -1
  119. package/index.d.ts +3 -1
  120. package/index.d.ts.map +1 -1
  121. package/item-sliding/index.d.ts.map +1 -1
  122. package/list/index.d.ts.map +1 -1
  123. package/modal/index.d.ts.map +1 -1
  124. package/package.json +2 -2
  125. package/page/index.d.ts.map +1 -1
  126. package/radio/index.d.ts +2 -2
  127. package/radio/index.d.ts.map +1 -1
  128. package/range/index.d.ts +3 -2
  129. package/range/index.d.ts.map +1 -1
  130. package/shared/floating/index.d.ts.map +1 -1
  131. package/shared/index.d.ts.map +1 -1
  132. package/slide/index.d.ts.map +1 -1
  133. package/testing/index.d.ts.map +1 -1
  134. package/testing-base/index.d.ts.map +1 -1
  135. package/toast/index.d.ts.map +1 -1
  136. package/toggle/index.d.ts.map +1 -1
  137. package/toggle-button/index.d.ts.map +1 -1
  138. package/types/index.d.ts.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"kirbydesign-designsystem-page.mjs","sources":["../tmp-esm2022/page/page.component.js","../tmp-esm2022/page/page-footer/page-footer.component.js","../tmp-esm2022/page/page.module.js","../tmp-esm2022/page/kirbydesign-designsystem-page.js"],"sourcesContent":["import { ChangeDetectionStrategy, Component, ContentChild, ContentChildren, Directive, ElementRef, EventEmitter, HostBinding, HostListener, Inject, InjectionToken, Injector, Input, Optional, Output, RendererStyleFlags2, SkipSelf, TemplateRef, ViewChild, ViewChildren, } from '@angular/core';\nimport { NavigationEnd, NavigationStart } from '@angular/router';\nimport { IonBackButton, IonButtons, IonContent, IonFooter, IonHeader, IonRefresher, IonTitle, IonToolbar, } from '@ionic/angular/standalone';\nimport { componentOnReady } from '@ionic/core';\nimport { selectedTabClickEvent } from '@kirbydesign/designsystem/tabs';\nimport { Subject } from 'rxjs';\nimport { debounceTime, filter, map, takeUntil } from 'rxjs/operators';\nimport { ACTIONGROUP_CONFIG } from '@kirbydesign/designsystem/action-group';\nimport { HeaderComponent, } from '@kirbydesign/designsystem/header';\nimport { IonicElementPartHelper, KirbyAnimation } from '@kirbydesign/designsystem/helpers';\nimport { ModalElementComponent, ModalElementType, } from '@kirbydesign/designsystem/modal';\nimport { FitHeadingDirective, } from '@kirbydesign/designsystem/shared';\nimport { getGlobalConfig } from '@kirbydesign/designsystem/config';\nimport { observeContent } from '@kirbydesign/designsystem/helpers';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { SpinnerComponent } from '@kirbydesign/designsystem/spinner';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@kirbydesign/designsystem/modal\";\nimport * as i2 from \"@angular/router\";\nimport * as i3 from \"@kirbydesign/designsystem/shared\";\nimport * as i4 from \"@kirbydesign/designsystem/tabs\";\nimport * as i5 from \"@ionic/angular/standalone\";\nimport * as i6 from \"@kirbydesign/designsystem/helpers\";\nimport * as i7 from \"@angular/platform-browser\";\n/**\n * Specify scroll event debounce time in ms and scrolled offset from top in pixels\n */\nconst contentScrollDebounceTimeInMS = 10;\nconst contentScrolledOffsetInPixels = 4;\nexport const PAGE_BACK_BUTTON_OVERRIDE = new InjectionToken('page-back-button-override');\nexport class PageTitleDirective {\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: PageTitleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.13\", type: PageTitleDirective, isStandalone: true, selector: \"[kirbyPageTitle]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: PageTitleDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[kirbyPageTitle]' }]\n }] });\nexport class PageSubtitleDirective {\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: PageSubtitleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.13\", type: PageSubtitleDirective, isStandalone: true, selector: \"[kirbyPageSubtitle]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: PageSubtitleDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[kirbyPageSubtitle]' }]\n }] });\nexport class PageToolbarTitleDirective {\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: PageToolbarTitleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.13\", type: PageToolbarTitleDirective, isStandalone: true, selector: \"[kirbyPageToolbarTitle]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: PageToolbarTitleDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[kirbyPageToolbarTitle]' }]\n }] });\nexport class PageActionsDirective {\n constructor(template) {\n this.template = template;\n this.stickyDefault = true;\n this.fixedDefault = false;\n console.warn('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 get isSticky() {\n return this.config ? this.config.sticky : this.stickyDefault;\n }\n get isFixed() {\n return this.config ? this.config.fixed : this.fixedDefault;\n }\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: PageActionsDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }\n /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.13\", type: PageActionsDirective, isStandalone: true, selector: \"[kirbyPageActions]\", inputs: { config: [\"kirbyPageActions\", \"config\"] }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: PageActionsDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[kirbyPageActions]' }]\n }], ctorParameters: () => [{ type: i0.TemplateRef }], propDecorators: { config: [{\n type: Input,\n args: ['kirbyPageActions']\n }] } });\nexport class PageContentDirective {\n constructor(template) {\n this.template = template;\n }\n get isFixed() {\n return this.config && this.config.fixed;\n }\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: PageContentDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }\n /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.13\", type: PageContentDirective, isStandalone: true, selector: \"[kirbyPageContent]\", inputs: { config: [\"kirbyPageContent\", \"config\"] }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: PageContentDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[kirbyPageContent]' }]\n }], ctorParameters: () => [{ type: i0.TemplateRef }], propDecorators: { config: [{\n type: Input,\n args: ['kirbyPageContent']\n }] } });\nexport class PageStickyContentDirective {\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: PageStickyContentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.13\", type: PageStickyContentDirective, isStandalone: true, selector: \"[kirbyPageStickyContent]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: PageStickyContentDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[kirbyPageStickyContent]' }]\n }] });\nexport class PageProgressComponent extends ModalElementComponent {\n constructor(modalElementsAdvertiser, elementRef) {\n super(ModalElementType.PAGE_PROGRESS, elementRef, modalElementsAdvertiser);\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 this.slot = 'start';\n }\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: PageProgressComponent, deps: [{ token: i1.ModalElementsAdvertiser, optional: true }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }\n /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.3.13\", type: PageProgressComponent, isStandalone: true, selector: \"kirby-page-progress\", host: { properties: { \"attr.slot\": \"this.slot\" } }, usesInheritance: true, ngImport: i0, template: `\n <ng-content></ng-content>\n `, isInline: true, styles: [\":host{display:flex;margin-inline-end:4px}\\n\"] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: PageProgressComponent, decorators: [{\n type: Component,\n args: [{ selector: 'kirby-page-progress', template: `\n <ng-content></ng-content>\n `, styles: [\":host{display:flex;margin-inline-end:4px}\\n\"] }]\n }], ctorParameters: () => [{ type: i1.ModalElementsAdvertiser, decorators: [{\n type: Optional\n }] }, { type: i0.ElementRef }], propDecorators: { slot: [{\n type: HostBinding,\n args: ['attr.slot']\n }] } });\nexport class PageTitleComponent extends ModalElementComponent {\n constructor(elementRef, modalElementsAdvertiser) {\n super(ModalElementType.TITLE, elementRef, modalElementsAdvertiser);\n }\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: PageTitleComponent, deps: [{ token: i0.ElementRef }, { token: i1.ModalElementsAdvertiser, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }\n /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.3.13\", type: PageTitleComponent, isStandalone: true, selector: \"kirby-page-title\", usesInheritance: true, ngImport: i0, template: `\n <ng-content></ng-content>\n `, isInline: true }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: PageTitleComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kirby-page-title',\n template: `\n <ng-content></ng-content>\n `,\n }]\n }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.ModalElementsAdvertiser, decorators: [{\n type: Optional\n }] }] });\nexport class PageContentComponent {\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: PageContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.3.13\", type: PageContentComponent, isStandalone: true, selector: \"kirby-page-content\", ngImport: i0, template: `\n <ng-content></ng-content>\n `, isInline: true }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: PageContentComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kirby-page-content',\n template: `\n <ng-content></ng-content>\n `,\n }]\n }] });\nexport class PageActionsComponent {\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: PageActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.3.13\", type: PageActionsComponent, isStandalone: true, selector: \"kirby-page-actions\", ngImport: i0, template: `\n <ng-content select=\"button[kirby-button]\"></ng-content>\n `, isInline: true, styles: [\":host{display:inline-flex;column-gap:8px}\\n\"] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: PageActionsComponent, decorators: [{\n type: Component,\n args: [{ selector: 'kirby-page-actions', template: `\n <ng-content select=\"button[kirby-button]\"></ng-content>\n `, styles: [\":host{display:inline-flex;column-gap:8px}\\n\"] }]\n }] });\nexport class PageComponent {\n set maxWidth(width) {\n this._maxWidth = width;\n }\n get maxWidth() {\n return this._maxWidth;\n }\n get tabBarBottomHidden() {\n return this._tabBarBottomHidden;\n }\n set tabBarBottomHidden(value) {\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 constructor(elementRef, injector, renderer, router, changeDetectorRef, zone, modalNavigationService, resizeObserverService, tabsComponent, backButtonOverride, routerOutlet, navCtrl, ionicElementPartHelper, translations, htmlDocTitle) {\n this.elementRef = elementRef;\n this.injector = injector;\n this.renderer = renderer;\n this.router = router;\n this.changeDetectorRef = changeDetectorRef;\n this.zone = zone;\n this.modalNavigationService = modalNavigationService;\n this.resizeObserverService = resizeObserverService;\n this.tabsComponent = tabsComponent;\n this.backButtonOverride = backButtonOverride;\n this.routerOutlet = routerOutlet;\n this.navCtrl = navCtrl;\n this.ionicElementPartHelper = ionicElementPartHelper;\n this.translations = translations;\n this.htmlDocTitle = htmlDocTitle;\n this.titleAlignment = 'left';\n this._maxWidth = 'default';\n this.enter = new EventEmitter();\n this.leave = new EventEmitter();\n this.refresh = new EventEmitter();\n this.backButtonClick = new EventEmitter();\n this.toolbarTitleClick = new EventEmitter();\n this.isStickyContentPinned = false;\n this.isObservingTitle = false;\n this.isObservingActions = false;\n this.isDocTitleSet = false;\n this.ngOnDestroy$ = new Subject();\n this.navigationStart$ = this.router.events.pipe(filter((event) => event instanceof NavigationStart), takeUntil(this.ngOnDestroy$));\n this.navigationEnd$ = this.router.events.pipe(filter((event) => event instanceof NavigationEnd), takeUntil(this.ngOnDestroy$));\n }\n 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 ngOnInit() {\n this.removeWrapper();\n this.ionicElementPartHelper.setPart('background', this.ionToolbarElement, '.toolbar-background');\n const 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 ngOnChanges(changes) {\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 ngAfterViewInit() {\n this.zone.runOutsideAngular(() => {\n this.contentScrolled$ = this.content.ionScroll.pipe(debounceTime(contentScrollDebounceTimeInMS), map((event) => event.detail), takeUntil(this.ngOnDestroy$));\n this.contentScrolled$.subscribe((scrollInfo) => {\n if (scrollInfo.scrollTop > contentScrolledOffsetInPixels !== this.isContentScrolled) {\n this.isContentScrolled = !this.isContentScrolled;\n this.changeDetectorRef.detectChanges();\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 // Watch navigation events for page enter and leave\n this.navigationStart$.subscribe((event) => {\n if (this.getPathname(event.url) !== this.getPathname(this.url) &&\n !this.modalNavigationService.isModalRoute(this.url) &&\n !this.modalNavigationService.isModalRoute(event.url)) {\n this.onLeave();\n }\n });\n this.navigationEnd$.subscribe((event) => {\n if (this.getPathname(event.urlAfterRedirects) === this.getPathname(this.url)) {\n this.onEnter();\n }\n });\n this.interceptBackButtonClicksSetup();\n this.initializeStickyIntersectionObserver();\n this.setActionButtonsWidth();\n }\n ngAfterContentChecked() {\n this.initializeHeader();\n this.initializeTitle();\n this.initializeActions();\n this.initializeContent();\n this.initializeStickyContent();\n this.changeDetectorRef.detectChanges();\n }\n ngOnDestroy() {\n this.ngOnDestroy$.next();\n this.ngOnDestroy$.complete();\n this.titleIntersectionObserver?.disconnect();\n this.stickyActionsIntersectionObserver?.disconnect();\n this.stickyContentIntersectionObserver?.disconnect();\n this.unobserveTitleMutation?.();\n }\n delegateRefreshEvent(event) {\n this.refresh.emit({\n complete: event.target.complete.bind(event.target),\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 onTitleClick(event) {\n if (this.toolbarTitleClick.observed) {\n this.toolbarTitleClick.emit(event);\n }\n else {\n this.header?.titleClick.emit(event);\n }\n }\n 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 onEnter() {\n if (this.isActive)\n return;\n this.isActive = true;\n this.enter.emit();\n this.patchIonLastFocused();\n this.observeTitle();\n this.observeActions();\n this.setHTMLDocumentTitle(this.header?.title || this.title || this.toolbarTitle);\n this.observeTitleDOMChanges();\n }\n onLeave() {\n if (!this.isActive)\n return;\n this.isActive = false;\n this.leave.emit();\n this.unobserveTitle();\n this.unobserveActions();\n this.unobserveTitleMutation?.();\n if (this.tabBarBottomHidden && this.tabsComponent) {\n this.tabsComponent.tabBarBottomHidden = false;\n }\n }\n interceptBackButtonClicksSetup() {\n if (this.backButtonOverride) {\n this.backButton.onClick = (event) => {\n event.preventDefault();\n this.backButtonOverride.navigateBack(this.routerOutlet, this.navCtrl, this.defaultBackHref);\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) => {\n this.backButtonClick.emit(event);\n };\n }\n patchIonLastFocused() {\n const ionLastFocus = this.ionContentElement.nativeElement.querySelector('[ion-last-focus=\"true\"]');\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')\n return;\n this.renderer.removeAttribute(ionLastFocus, 'tabindex');\n });\n }\n 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 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 // Set document title from header immediately if present, then subscribe to changes\n this.setHTMLDocumentTitle(this.header.title);\n this.header.title$.pipe(takeUntil(this.ngOnDestroy$)).subscribe(() => {\n this.setHTMLDocumentTitle(this.header.title);\n });\n }\n }\n 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 // Ensures rest of initializeTitle() won't run, if already initialized\n return;\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 this.observeTitle();\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 if (this.toolbarTitleClick.observed && this.hasInteractiveTitle === undefined) {\n this.hasInteractiveTitle = true;\n }\n }\n observeTitle() {\n if (!this.hasPageTitle) {\n // Nothing to observe\n return;\n }\n if (this.isObservingTitle) {\n // Already observing\n return;\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 if (!this.titleIntersectionObserver) {\n this.titleIntersectionObserver = new IntersectionObserver((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 }, { root: this.ionContentElement.nativeElement });\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 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 observeTitleDOMChanges() {\n const globalKirbyConfig = getGlobalConfig();\n if (!globalKirbyConfig?.setHtmlDocTitle)\n return;\n if (this.isDocTitleSet)\n return; // we never want to observe if the document title is already set via any title properties (or already observed)\n const titleArea = this.ionHeaderElement.nativeElement.querySelector('ion-toolbar ion-title .toolbar-title');\n this.setHTMLDocumentTitle(titleArea.textContent);\n this.unobserveTitleMutation = observeContent(titleArea, () => {\n this.setHTMLDocumentTitle(titleArea.textContent);\n });\n }\n setHTMLDocumentTitle(title) {\n const globalKirbyConfig = getGlobalConfig();\n if (!globalKirbyConfig?.setHtmlDocTitle || !title || title.trim() === '')\n return;\n this.htmlDocTitle.setTitle(title);\n this.isDocTitleSet = true;\n }\n 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 this.observeActions();\n this.customActions.forEach((pageAction) => {\n if (pageAction.isFixed) {\n this.fixedActionsTemplate = pageAction.template;\n }\n else if (pageAction.isSticky) {\n this.stickyActionsTemplate = pageAction.template;\n }\n else {\n this.pageActionsTemplate = pageAction.template;\n }\n });\n }\n observeActions() {\n if (!this.header?.actionsElement) {\n // Nothing to observe\n return;\n }\n if (this.isObservingActions) {\n // Already observing\n return;\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 if (!this.stickyActionsIntersectionObserver) {\n this.stickyActionsIntersectionObserver = new IntersectionObserver((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 }, { root: this.ionContentElement.nativeElement });\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 unobserveActions() {\n if (this.header?.actionsElement) {\n this.stickyActionsIntersectionObserver?.unobserve(this.header.actionsElement.nativeElement);\n }\n this.isObservingActions = false;\n }\n setActionButtonsWidth() {\n if (!this.ionToolbarButtonsElement)\n return;\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 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 }\n else {\n endButtonsWidth += ionButtonsElement.offsetWidth + margin;\n }\n });\n const actionButtonsMaxWidth = Math.max(startButtonsWidth, endButtonsWidth);\n this.renderer.setStyle(toolbar, '--action-buttons-width', `${actionButtonsMaxWidth}px`, RendererStyleFlags2.DashCase);\n });\n });\n }\n initializeContent() {\n this.customContent.forEach((content) => {\n if (content.isFixed) {\n this.fixedContentTemplate = content.template;\n }\n else {\n this.customContentTemplate = content.template;\n }\n });\n }\n initializeStickyContent() {\n this.stickyContentTemplate = this.stickyContentRef;\n }\n createStickyContentIntersectionObserver() {\n const options = {\n root: this.ionContentElement.nativeElement,\n threshold: 1,\n };\n const callback = (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 getPathname(url) {\n return url.split('?')[0];\n }\n _onKeyboardWillShow(info) {\n if (info && info.keyboardHeight) {\n this.ionContentElement.nativeElement.style.setProperty('--keyboard-offset', `${info.keyboardHeight}px`);\n }\n }\n _onKeyboardWillHide() {\n this.ionContentElement.nativeElement.style.setProperty('--keyboard-offset', '0px');\n }\n _onSelectedTabClick() {\n if (this.content) {\n this.content.scrollToTop(KirbyAnimation.Duration.LONG);\n }\n }\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: PageComponent, deps: [{ token: i0.ElementRef }, { token: i0.Injector }, { token: i0.Renderer2 }, { token: i2.Router }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i1.ModalNavigationService }, { token: i3.ResizeObserverService }, { token: i4.TabsComponent, optional: true, skipSelf: true }, { token: PAGE_BACK_BUTTON_OVERRIDE, optional: true }, { token: i5.IonRouterOutlet, optional: true }, { token: i5.NavController, optional: true }, { token: i6.IonicElementPartHelper }, { token: i3.TranslationService }, { token: i7.Title }], target: i0.ɵɵFactoryTarget.Component }); }\n /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.13\", type: PageComponent, isStandalone: true, selector: \"kirby-page\", inputs: { title: \"title\", subtitle: \"subtitle\", toolbarTitle: \"toolbarTitle\", titleAlignment: \"titleAlignment\", defaultBackHref: \"defaultBackHref\", hideBackButton: \"hideBackButton\", titleMaxLines: \"titleMaxLines\", hasInteractiveTitle: \"hasInteractiveTitle\", maxWidth: \"maxWidth\", tabBarBottomHidden: \"tabBarBottomHidden\" }, outputs: { enter: \"enter\", leave: \"leave\", refresh: \"refresh\", backButtonClick: \"backButtonClick\", toolbarTitleClick: \"toolbarTitleClick\" }, host: { listeners: { \"window:keyboardWillShow\": \"_onKeyboardWillShow($event)\", \"window:keyboardWillHide\": \"_onKeyboardWillHide()\", \"window:kirbySelectedTabClick\": \"_onSelectedTabClick()\" } }, providers: [IonicElementPartHelper], queries: [{ propertyName: \"customToolbarTitleTemplate\", first: true, predicate: PageToolbarTitleDirective, descendants: true, read: TemplateRef }, { propertyName: \"customTitleTemplate\", first: true, predicate: PageTitleDirective, descendants: true, read: TemplateRef }, { propertyName: \"customSubtitleTemplate\", first: true, predicate: PageSubtitleDirective, descendants: true, read: TemplateRef }, { propertyName: \"stickyContentRef\", first: true, predicate: PageStickyContentDirective, descendants: true, read: TemplateRef }, { propertyName: \"header\", first: true, predicate: HeaderComponent, descendants: true }, { propertyName: \"customActions\", predicate: PageActionsDirective }, { propertyName: \"customContent\", predicate: PageContentDirective }], viewQueries: [{ propertyName: \"content\", first: true, predicate: IonContent, descendants: true, static: true }, { propertyName: \"ionContentElement\", first: true, predicate: IonContent, descendants: true, read: ElementRef, static: true }, { propertyName: \"ionHeaderElement\", first: true, predicate: IonHeader, descendants: true, read: ElementRef, static: true }, { propertyName: \"ionFooterElement\", first: true, predicate: IonFooter, descendants: true, read: ElementRef, static: true }, { propertyName: \"ionToolbarElement\", first: true, predicate: IonToolbar, descendants: true, read: ElementRef, static: true }, { propertyName: \"backButton\", first: true, predicate: IonBackButton, descendants: true }, { propertyName: \"pageTitle\", first: true, predicate: [\"pageTitle\"], descendants: true, read: ElementRef }, { propertyName: \"stickyContentContainer\", first: true, predicate: [\"stickyContentContainer\"], descendants: true, read: ElementRef }, { propertyName: \"simpleTitleTemplate\", first: true, predicate: [\"simpleTitleTemplate\"], descendants: true, read: TemplateRef, static: true }, { propertyName: \"simpleToolbarTitleTemplate\", first: true, predicate: [\"simpleToolbarTitleTemplate\"], descendants: true, read: TemplateRef, static: true }, { propertyName: \"ionToolbarButtonsElement\", predicate: IonButtons, descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: \"<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\", styles: [\"ion-header,ion-toolbar{--background: var(--kirby-background-color);margin:0 auto}ion-toolbar{--border-width: 0 !important;--padding-start: 16px;--padding-end: 16px;--padding-top: 0;--padding-bottom: 0;--ion-toolbar-color: var(--kirby-black);--min-height: 56px}@media (min-width: 768px){ion-toolbar{--padding-start: 24px;--padding-end: 24px;--min-height: 72px}}ion-toolbar:before{content:\\\"\\\";position:absolute;left:0;right:0;bottom:0;height:1px}ion-toolbar:before,ion-toolbar::part(background){transition:background-color 50ms linear}ion-toolbar.content-scrolled{--background: rgb(243.294, 243.294, 243.294)}ion-toolbar.content-scrolled:before,ion-toolbar.content-scrolled::part(background){transition-duration:.2s}ion-toolbar.content-scrolled:not(.content-pinned):before{background-color:var(--kirby-medium)}ion-toolbar.content-pinned:before{transition:none}ion-toolbar ion-buttons[slot=start]{margin-right:8px}ion-toolbar ion-buttons[slot=primary],ion-toolbar ion-buttons[slot=secondary]{margin-left:8px}ion-toolbar ion-buttons[slot=secondary]{order:6}ion-toolbar ion-title{box-sizing:border-box;font-size:16px;font-weight:400;padding-inline:calc(var(--action-buttons-width, 48px) + var(--padding-start))}ion-toolbar ion-title h1{margin-bottom:0}ion-toolbar ion-title.slide-and-fade-in .toolbar-title{scale:1;transform:translateY(0)}ion-toolbar ion-title .toolbar-title,ion-toolbar ion-title .toolbar-title>span.has-icon>span{text-overflow:ellipsis;white-space:nowrap;pointer-events:auto;overflow:hidden}ion-toolbar ion-title .toolbar-title{display:flex;align-items:center;justify-content:center;min-height:56px;scale:0;transition-property:opacity,transform;transition-duration:.15s;transition-timing-function:ease;transform:translateY(10px)}ion-toolbar ion-title .toolbar-title span.clickable{cursor:pointer}ion-toolbar ion-title .toolbar-title span.has-icon{display:inline-flex;flex-direction:row;align-items:center;justify-content:center;max-width:100%}ion-toolbar ion-title .toolbar-title ::ng-deep>*{text-overflow:ellipsis;white-space:nowrap;pointer-events:auto;overflow:hidden}.hide{visibility:hidden;opacity:0;transition:opacity .1s linear}.hide.fade-in{visibility:inherit;opacity:1}@media (hover: hover){ion-back-button:hover{--state-layer-opacity: .08;--state-layer-background-color: var(--kirby-black);--background-hover: var(--state-layer-background-color);--background-hover-opacity: var(--state-layer-opacity)}}ion-back-button:active,ion-back-button.ion-activated{--state-layer-opacity: .16;--state-layer-background-color: var(--kirby-black);--background-activated: var(--state-layer-background-color);--background-activated-opacity: var(--state-layer-opacity)}ion-back-button{--color: var(--kirby-black);--background: var(--kirby-white);--icon-font-size: 24px;height:40px;width:40px;opacity:1}ion-back-button::part(icon){margin-inline:0}ion-back-button::part(native){opacity:1;border-radius:999px;overflow:hidden}@media (hover: hover) and (pointer: fine){ion-back-button::part(native):focus{transition:all 80ms linear 0ms;box-shadow:0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}ion-back-button::part(native):focus:not(:focus-visible){box-shadow:0 0 0 0 transparent}ion-back-button::part(native):focus-visible{transition:all 80ms linear 0ms;box-shadow:0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}}ion-back-button::part(native):after{transition:all 80ms linear 0ms}.page-header-container{max-width:var(--page-content-max-width, 792px);margin:0 auto}.page-header{margin-left:16px;margin-top:8px;margin-bottom:var(--kirby-page-title-margin-bottom, 40px)}.page-header .page-title.has-actions{display:flex;justify-content:space-between;align-items:flex-start}.page-header .page-title h1,.page-header .page-title h2,.page-header .page-title h3,.page-header .page-title h4,.page-header .page-title h5,.page-header .page-title h6{margin:0}.page-header .page-subtitle{margin-top:8px}.page-header.text-center{text-align:center;margin-left:0}.page-header.text-right{text-align:right}ion-content{--padding-top: 12px;--padding-start: var(--page-content-padding-start, 16px);--padding-end: var(--page-content-padding-end, 16px);--background: var(--kirby-background-color);--color: var(--kirby-black)}@media (min-width: 768px){ion-content{--padding-start: var(--page-content-padding-start, 48px);--padding-end: var(--page-content-padding-end, 48px)}}ion-content.has-header{--padding-top: 0}ion-content.max-width-lg{--page-content-max-width: 1092px}ion-content.max-width-xl{--page-content-max-width: 1392px}ion-content.max-width-full{--page-content-max-width: 100%}ion-content::part(scroll){scrollbar-gutter:stable}ion-content .content-inner{max-width:var(--page-content-max-width, 792px);margin:0 auto;padding-bottom:40px}ion-content .fixed-content{width:100%;position:absolute;bottom:0;transform:initial}ion-content .fixed-content .content-inner{position:relative}.sticky-content-container{position:sticky;top:-13px;left:0;right:0;padding-top:1px;margin-block-end:24px;z-index:10}.sticky-content-container div{max-width:var(--page-content-max-width, 792px);margin:0 auto}.sticky-content-container:before,.sticky-content-container:after{content:\\\"\\\";position:absolute;left:calc(-1 * var(--padding-start));right:calc(-1 * var(--padding-end));bottom:0}.sticky-content-container:before{top:0;background-color:var(--background)}.sticky-content-container:after{height:1px}.sticky-content-container.content-pinned:before{background-color:#f3f3f3}.sticky-content-container.content-pinned:after{background-color:var(--kirby-medium)}\\n\"], dependencies: [{ kind: \"component\", type: IonHeader, selector: \"ion-header\", inputs: [\"collapse\", \"mode\", \"translucent\"] }, { kind: \"component\", type: IonToolbar, selector: \"ion-toolbar\", inputs: [\"color\", \"mode\"] }, { kind: \"component\", type: IonButtons, selector: \"ion-buttons\", inputs: [\"collapse\"] }, { kind: \"component\", type: IonBackButton, selector: \"ion-back-button\" }, { kind: \"component\", type: IonTitle, selector: \"ion-title\", inputs: [\"color\", \"size\"] }, { kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: IonContent, selector: \"ion-content\", inputs: [\"color\", \"fixedSlotPlacement\", \"forceOverscroll\", \"fullscreen\", \"scrollEvents\", \"scrollX\", \"scrollY\"] }, { kind: \"component\", type: IonRefresher, selector: \"ion-refresher\", inputs: [\"closeDuration\", \"disabled\", \"mode\", \"pullFactor\", \"pullMax\", \"pullMin\", \"snapbackDuration\"] }, { kind: \"component\", type: SpinnerComponent, selector: \"kirby-spinner\" }, { kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"component\", type: IonFooter, selector: \"ion-footer\", inputs: [\"collapse\", \"mode\", \"translucent\"] }, { kind: \"directive\", type: FitHeadingDirective, selector: \"h1[kirbyFitHeading],h2[kirbyFitHeading],h3[kirbyFitHeading],[kirbyFitHeading]\", inputs: [\"kirbyFitHeading\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: PageComponent, decorators: [{\n type: Component,\n args: [{ selector: 'kirby-page', changeDetection: ChangeDetectionStrategy.OnPush, providers: [IonicElementPartHelper], 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 ], template: \"<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\", styles: [\"ion-header,ion-toolbar{--background: var(--kirby-background-color);margin:0 auto}ion-toolbar{--border-width: 0 !important;--padding-start: 16px;--padding-end: 16px;--padding-top: 0;--padding-bottom: 0;--ion-toolbar-color: var(--kirby-black);--min-height: 56px}@media (min-width: 768px){ion-toolbar{--padding-start: 24px;--padding-end: 24px;--min-height: 72px}}ion-toolbar:before{content:\\\"\\\";position:absolute;left:0;right:0;bottom:0;height:1px}ion-toolbar:before,ion-toolbar::part(background){transition:background-color 50ms linear}ion-toolbar.content-scrolled{--background: rgb(243.294, 243.294, 243.294)}ion-toolbar.content-scrolled:before,ion-toolbar.content-scrolled::part(background){transition-duration:.2s}ion-toolbar.content-scrolled:not(.content-pinned):before{background-color:var(--kirby-medium)}ion-toolbar.content-pinned:before{transition:none}ion-toolbar ion-buttons[slot=start]{margin-right:8px}ion-toolbar ion-buttons[slot=primary],ion-toolbar ion-buttons[slot=secondary]{margin-left:8px}ion-toolbar ion-buttons[slot=secondary]{order:6}ion-toolbar ion-title{box-sizing:border-box;font-size:16px;font-weight:400;padding-inline:calc(var(--action-buttons-width, 48px) + var(--padding-start))}ion-toolbar ion-title h1{margin-bottom:0}ion-toolbar ion-title.slide-and-fade-in .toolbar-title{scale:1;transform:translateY(0)}ion-toolbar ion-title .toolbar-title,ion-toolbar ion-title .toolbar-title>span.has-icon>span{text-overflow:ellipsis;white-space:nowrap;pointer-events:auto;overflow:hidden}ion-toolbar ion-title .toolbar-title{display:flex;align-items:center;justify-content:center;min-height:56px;scale:0;transition-property:opacity,transform;transition-duration:.15s;transition-timing-function:ease;transform:translateY(10px)}ion-toolbar ion-title .toolbar-title span.clickable{cursor:pointer}ion-toolbar ion-title .toolbar-title span.has-icon{display:inline-flex;flex-direction:row;align-items:center;justify-content:center;max-width:100%}ion-toolbar ion-title .toolbar-title ::ng-deep>*{text-overflow:ellipsis;white-space:nowrap;pointer-events:auto;overflow:hidden}.hide{visibility:hidden;opacity:0;transition:opacity .1s linear}.hide.fade-in{visibility:inherit;opacity:1}@media (hover: hover){ion-back-button:hover{--state-layer-opacity: .08;--state-layer-background-color: var(--kirby-black);--background-hover: var(--state-layer-background-color);--background-hover-opacity: var(--state-layer-opacity)}}ion-back-button:active,ion-back-button.ion-activated{--state-layer-opacity: .16;--state-layer-background-color: var(--kirby-black);--background-activated: var(--state-layer-background-color);--background-activated-opacity: var(--state-layer-opacity)}ion-back-button{--color: var(--kirby-black);--background: var(--kirby-white);--icon-font-size: 24px;height:40px;width:40px;opacity:1}ion-back-button::part(icon){margin-inline:0}ion-back-button::part(native){opacity:1;border-radius:999px;overflow:hidden}@media (hover: hover) and (pointer: fine){ion-back-button::part(native):focus{transition:all 80ms linear 0ms;box-shadow:0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}ion-back-button::part(native):focus:not(:focus-visible){box-shadow:0 0 0 0 transparent}ion-back-button::part(native):focus-visible{transition:all 80ms linear 0ms;box-shadow:0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}}ion-back-button::part(native):after{transition:all 80ms linear 0ms}.page-header-container{max-width:var(--page-content-max-width, 792px);margin:0 auto}.page-header{margin-left:16px;margin-top:8px;margin-bottom:var(--kirby-page-title-margin-bottom, 40px)}.page-header .page-title.has-actions{display:flex;justify-content:space-between;align-items:flex-start}.page-header .page-title h1,.page-header .page-title h2,.page-header .page-title h3,.page-header .page-title h4,.page-header .page-title h5,.page-header .page-title h6{margin:0}.page-header .page-subtitle{margin-top:8px}.page-header.text-center{text-align:center;margin-left:0}.page-header.text-right{text-align:right}ion-content{--padding-top: 12px;--padding-start: var(--page-content-padding-start, 16px);--padding-end: var(--page-content-padding-end, 16px);--background: var(--kirby-background-color);--color: var(--kirby-black)}@media (min-width: 768px){ion-content{--padding-start: var(--page-content-padding-start, 48px);--padding-end: var(--page-content-padding-end, 48px)}}ion-content.has-header{--padding-top: 0}ion-content.max-width-lg{--page-content-max-width: 1092px}ion-content.max-width-xl{--page-content-max-width: 1392px}ion-content.max-width-full{--page-content-max-width: 100%}ion-content::part(scroll){scrollbar-gutter:stable}ion-content .content-inner{max-width:var(--page-content-max-width, 792px);margin:0 auto;padding-bottom:40px}ion-content .fixed-content{width:100%;position:absolute;bottom:0;transform:initial}ion-content .fixed-content .content-inner{position:relative}.sticky-content-container{position:sticky;top:-13px;left:0;right:0;padding-top:1px;margin-block-end:24px;z-index:10}.sticky-content-container div{max-width:var(--page-content-max-width, 792px);margin:0 auto}.sticky-content-container:before,.sticky-content-container:after{content:\\\"\\\";position:absolute;left:calc(-1 * var(--padding-start));right:calc(-1 * var(--padding-end));bottom:0}.sticky-content-container:before{top:0;background-color:var(--background)}.sticky-content-container:after{height:1px}.sticky-content-container.content-pinned:before{background-color:#f3f3f3}.sticky-content-container.content-pinned:after{background-color:var(--kirby-medium)}\\n\"] }]\n }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Injector }, { type: i0.Renderer2 }, { type: i2.Router }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i1.ModalNavigationService }, { type: i3.ResizeObserverService }, { type: i4.TabsComponent, decorators: [{\n type: Optional\n }, {\n type: SkipSelf\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [PAGE_BACK_BUTTON_OVERRIDE]\n }] }, { type: i5.IonRouterOutlet, decorators: [{\n type: Optional\n }] }, { type: i5.NavController, decorators: [{\n type: Optional\n }] }, { type: i6.IonicElementPartHelper }, { type: i3.TranslationService }, { type: i7.Title }], propDecorators: { title: [{\n type: Input\n }], subtitle: [{\n type: Input\n }], toolbarTitle: [{\n type: Input\n }], titleAlignment: [{\n type: Input\n }], defaultBackHref: [{\n type: Input\n }], hideBackButton: [{\n type: Input\n }], titleMaxLines: [{\n type: Input\n }], hasInteractiveTitle: [{\n type: Input\n }], maxWidth: [{\n type: Input\n }], tabBarBottomHidden: [{\n type: Input\n }], enter: [{\n type: Output\n }], leave: [{\n type: Output\n }], refresh: [{\n type: Output\n }], backButtonClick: [{\n type: Output\n }], toolbarTitleClick: [{\n type: Output\n }], content: [{\n type: ViewChild,\n args: [IonContent, { static: true }]\n }], ionContentElement: [{\n type: ViewChild,\n args: [IonContent, { static: true, read: ElementRef }]\n }], ionHeaderElement: [{\n type: ViewChild,\n args: [IonHeader, { static: true, read: ElementRef }]\n }], ionFooterElement: [{\n type: ViewChild,\n args: [IonFooter, { static: true, read: ElementRef }]\n }], ionToolbarElement: [{\n type: ViewChild,\n args: [IonToolbar, { static: true, read: ElementRef }]\n }], ionToolbarButtonsElement: [{\n type: ViewChildren,\n args: [IonButtons, { read: ElementRef }]\n }], backButton: [{\n type: ViewChild,\n args: [IonBackButton, { static: false }]\n }], pageTitle: [{\n type: ViewChild,\n args: ['pageTitle', { static: false, read: ElementRef }]\n }], stickyContentContainer: [{\n type: ViewChild,\n args: ['stickyContentContainer', { static: false, read: ElementRef }]\n }], simpleTitleTemplate: [{\n type: ViewChild,\n args: ['simpleTitleTemplate', { static: true, read: TemplateRef }]\n }], simpleToolbarTitleTemplate: [{\n type: ViewChild,\n args: ['simpleToolbarTitleTemplate', { static: true, read: TemplateRef }]\n }], customToolbarTitleTemplate: [{\n type: ContentChild,\n args: [PageToolbarTitleDirective, { static: false, read: TemplateRef }]\n }], customTitleTemplate: [{\n type: ContentChild,\n args: [PageTitleDirective, { static: false, read: TemplateRef }]\n }], customSubtitleTemplate: [{\n type: ContentChild,\n args: [PageSubtitleDirective, { static: false, read: TemplateRef }]\n }], customActions: [{\n type: ContentChildren,\n args: [PageActionsDirective]\n }], customContent: [{\n type: ContentChildren,\n args: [PageContentDirective]\n }], stickyContentRef: [{\n type: ContentChild,\n args: [PageStickyContentDirective, { static: false, read: TemplateRef }]\n }], header: [{\n type: ContentChild,\n args: [HeaderComponent]\n }], _onKeyboardWillShow: [{\n type: HostListener,\n args: ['window:keyboardWillShow', ['$event']]\n }], _onKeyboardWillHide: [{\n type: HostListener,\n args: ['window:keyboardWillHide']\n }], _onSelectedTabClick: [{\n type: HostListener,\n args: [`window:${selectedTabClickEvent}`]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWdlL3NyYy9wYWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3BhZ2Uvc3JjL3BhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLE1BQU0sRUFDTixjQUFjLEVBQ2QsUUFBUSxFQUNSLEtBQUssRUFLTCxRQUFRLEVBQ1IsTUFBTSxFQUdOLG1CQUFtQixFQUVuQixRQUFRLEVBQ1IsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RSxPQUFPLEVBQ0wsYUFBYSxFQUNiLFVBQVUsRUFDVixVQUFVLEVBQ1YsU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBRVosUUFBUSxFQUNSLFVBQVUsR0FFWCxNQUFNLDJCQUEyQixDQUFDO0FBR25DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvQyxPQUFPLEVBQUUscUJBQXFCLEVBQWlCLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEYsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEUsT0FBTyxFQUFFLGtCQUFrQixFQUFxQixNQUFNLHdDQUF3QyxDQUFDO0FBRS9GLE9BQU8sRUFFTCxlQUFlLEdBRWhCLE1BQU0sa0NBQWtDLENBQUM7QUFDMUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGNBQWMsRUFB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QU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTs7c0JBRXBFLFNBQVM7dUJBQUMsNEJBQTRCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7O3NCQUUzRSxZQUFZO3VCQUFDLHlCQUF5QixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFOztzQkFFNUUsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTs7c0JBRXJFLFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7O3NCQUV4RSxlQUFlO3VCQUFDLG9CQUFvQjs7c0JBRXBDLGVBQWU7dUJBQUMsb0JBQW9COztzQkFFcEMsWUFBWTt1QkFBQywwQkFBMEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTs7c0JBRTdFLFlBQVk7dUJBQUMsZUFBZTs7c0JBNGpCNUIsWUFBWTt1QkFBQyx5QkFBeUIsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBVWxELFlBQVk7dUJBQUMseUJBQXlCOztzQkFLdEMsWUFBWTt1QkFBQyxVQUFVLHFCQUFxQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50Q2hlY2tlZCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0LFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgUmVuZGVyZXIyLFxuICBSZW5kZXJlclN0eWxlRmxhZ3MyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBTa2lwU2VsZixcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIE5hdmlnYXRpb25TdGFydCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIElvbkJhY2tCdXR0b24sXG4gIElvbkJ1dHRvbnMsXG4gIElvbkNvbnRlbnQsXG4gIElvbkZvb3RlcixcbiAgSW9uSGVhZGVyLFxuICBJb25SZWZyZXNoZXIsXG4gIElvblJvdXRlck91dGxldCxcbiAgSW9uVGl0bGUsXG4gIElvblRvb2xiYXIsXG4gIE5hdkNvbnRyb2xsZXIsXG59IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB0eXBlIHsgU2Nyb2xsRGV0YWlsIH0gZnJvbSAnQGlvbmljL2NvcmUnO1xuaW1wb3J0IHsgY29tcG9uZW50T25SZWFkeSB9IGZyb20gJ0Bpb25pYy9jb3JlJztcbmltcG9ydCB7IHNlbGVjdGVkVGFiQ2xpY2tFdmVudCwgVGFic0NvbXBvbmVudCB9IGZyb20gJ0BraXJieWRlc2lnbi9kZXNpZ25zeXN0ZW0vdGFicyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEFDVElPTkdST1VQX0NPTkZJRywgQWN0aW9uR3JvdXBDb25maWcgfSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL2FjdGlvbi1ncm91cCc7XG5pbXBvcnQgeyBLaXJieUNvbmZpZyB9IGZyb20gJ0BraXJieWRlc2lnbi9kZXNpZ25zeXN0ZW0vY29uZmlnJztcbmltcG9ydCB7XG4gIEhlYWRlckFjdGlvbnNEaXJlY3RpdmUsXG4gIEhlYWRlckNvbXBvbmVudCxcbiAgSGVhZGVyVGl0bGVBY3Rpb25JY29uRGlyZWN0aXZlLFxufSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL2hlYWRlcic7XG5pbXBvcnQgeyBJb25pY0VsZW1lbnRQYXJ0SGVscGVyLCBLaXJieUFuaW1hdGlvbiB9IGZyb20gJ0BraXJieWRlc2lnbi9kZXNpZ25zeXN0ZW0vaGVscGVycyc7XG5pbXBvcnQge1xuICBNb2RhbEVsZW1lbnRDb21wb25lbnQsXG4gIE1vZGFsRWxlbWVudHNBZHZlcnRpc2VyLFxuICBNb2RhbEVsZW1lbnRUeXBlLFxuICBNb2RhbE5hdmlnYXRpb25TZXJ2aWNlLFxufSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL21vZGFsJztcbmltcG9ydCB7XG4gIEZpdEhlYWRpbmdDb25maWcsXG4gIEZpdEhlYWRpbmdEaXJlY3RpdmUsXG4gIFJlc2l6ZU9ic2VydmVyU2VydmljZSxcbiAgVHJhbnNsYXRpb25TZXJ2aWNlLFxufSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL3NoYXJlZCc7XG5pbXBvcnQgeyBVbm9ic2VydmVGbiB9IGZyb20gJ0BraXJieWRlc2lnbi9kZXNpZ25zeXN0ZW0vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0R2xvYmFsQ29uZmlnIH0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9jb25maWcnO1xuaW1wb3J0IHsgb2JzZXJ2ZUNvbnRlbnQgfSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL2hlbHBlcnMnO1xuaW1wb3J0IHsgTmdDbGFzcywgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTcGlubmVyQ29tcG9uZW50IH0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9zcGlubmVyJztcblxuLyoqXG4gKiBTcGVjaWZ5IHNjcm9sbCBldmVudCBkZWJvdW5jZSB0aW1lIGluIG1zIGFuZCBzY3JvbGxlZCBvZmZzZXQgZnJvbSB0b3AgaW4gcGl4ZWxzXG4gKi9cbmNvbnN0IGNvbnRlbnRTY3JvbGxEZWJvdW5jZVRpbWVJbk1TID0gMTA7XG5jb25zdCBjb250ZW50U2Nyb2xsZWRPZmZzZXRJblBpeGVscyA9IDQ7XG5cbnR5cGUgc3RpY2t5Q29uZmlnID0geyBzdGlja3k6IGJvb2xlYW4gfTtcbnR5cGUgZml4ZWRDb25maWcgPSB7IGZpeGVkOiBib29sZWFuIH07XG50eXBlIE1heFdpZHRoID0gJ2RlZmF1bHQnIHwgJ2xnJyB8ICd4bCcgfCAnZnVsbCc7XG5cbmV4cG9ydCBjb25zdCBQQUdFX0JBQ0tfQlVUVE9OX09WRVJSSURFID0gbmV3IEluamVjdGlvblRva2VuPFBhZ2VCYWNrQnV0dG9uT3ZlcnJpZGU+KFxuICAncGFnZS1iYWNrLWJ1dHRvbi1vdmVycmlkZSdcbik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZUJhY2tCdXR0b25PdmVycmlkZSB7XG4gIG5hdmlnYXRlQmFjazogKFxuICAgIHJvdXRlck91dGxldDogSW9uUm91dGVyT3V0bGV0LFxuICAgIG5hdkN0cmw6IE5hdkNvbnRyb2xsZXIsXG4gICAgZGVmYXVsdEJhY2tIcmVmOiBzdHJpbmdcbiAgKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBcInB1bGwtdG8tcmVmcmVzaFwiIGJlZ2lucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWxsVG9SZWZyZXNoRXZlbnQge1xuICAvKipcbiAgICogSW52b2tlIHRoaXMgY2FsbGJhY2stbWV0aG9kIHdoZW4gYWN0aW9uIHRvIHBlcmZvcm0gdXBvbiBcInB1bGwtdG8tcmVmcmVzaFwiIGNvbXBsZXRlcy5cbiAgICovXG4gIGNvbXBsZXRlKCk7XG59XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1traXJieVBhZ2VUaXRsZV0nIH0pXG5leHBvcnQgY2xhc3MgUGFnZVRpdGxlRGlyZWN0aXZlIHt9XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1traXJieVBhZ2VTdWJ0aXRsZV0nIH0pXG5leHBvcnQgY2xhc3MgUGFnZVN1YnRpdGxlRGlyZWN0aXZlIHt9XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1traXJieVBhZ2VUb29sYmFyVGl0bGVdJyB9KVxuZXhwb3J0IGNsYXNzIFBhZ2VUb29sYmFyVGl0bGVEaXJlY3RpdmUge31cblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2tpcmJ5UGFnZUFjdGlvbnNdJyB9KVxuZXhwb3J0IGNsYXNzIFBhZ2VBY3Rpb25zRGlyZWN0aXZlIHtcbiAgQElucHV0KCdraXJieVBhZ2VBY3Rpb25zJykgY29uZmlnOiBzdGlja3lDb25maWcgfCBmaXhlZENvbmZpZztcbiAgcHJpdmF0ZSByZWFkb25seSBzdGlja3lEZWZhdWx0ID0gdHJ1ZTtcbiAgcHJpdmF0ZSByZWFkb25seSBmaXhlZERlZmF1bHQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICAnRGVmaW5pbmcgUGFnZSBBY3Rpb25zIHZpYSAqa2lyYnlQYWdlQWN0aW9ucyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gS2lyYnkgdjExLiBBIEtpcmJ5IEhlYWRlciB3aXRoIEFjdGlvbnMgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCwgYXMgaXQgaGFzIGFuIGltcHJvdmVkIEFQSSB3aXRoIGJldHRlciBzdXBwb3J0IGZvciByZXNwb25zaXZlIGxheW91dHMuJ1xuICAgICk7XG4gIH1cblxuICBnZXQgaXNTdGlja3koKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnID8gKHRoaXMuY29uZmlnIGFzIHN0aWNreUNvbmZpZykuc3RpY2t5IDogdGhpcy5zdGlja3lEZWZhdWx0O1xuICB9XG5cbiAgZ2V0IGlzRml4ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnID8gKHRoaXMuY29uZmlnIGFzIGZpeGVkQ29uZmlnKS5maXhlZCA6IHRoaXMuZml4ZWREZWZhdWx0O1xuICB9XG59XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1traXJieVBhZ2VDb250ZW50XScgfSlcbmV4cG9ydCBjbGFzcyBQYWdlQ29udGVudERpcmVjdGl2ZSB7XG4gIEBJbnB1dCgna2lyYnlQYWdlQ29udGVudCcpIGNvbmZpZzogZml4ZWRDb25maWc7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7fVxuXG4gIGdldCBpc0ZpeGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5maXhlZDtcbiAgfVxufVxuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdba2lyYnlQYWdlU3RpY2t5Q29udGVudF0nIH0pXG5leHBvcnQgY2xhc3MgUGFnZVN0aWNreUNvbnRlbnREaXJlY3RpdmUge31cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAna2lyYnktcGFnZS1wcm9ncmVzcycsXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIG1hcmdpbi1pbmxpbmUtZW5kOiA0cHg7IC8qIEFkZCBzcGFjaW5nIHRvIHBvdGVudGlhbCBzdXBwbGVtZW50YXJ5IGFjdGlvbiBidXR0b24gKi9cbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBQYWdlUHJvZ3Jlc3NDb21wb25lbnQgZXh0ZW5kcyBNb2RhbEVsZW1lbnRDb21wb25lbnQge1xuICAvLyBUT0RPOiBGaW5kIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uLCB3aGljaCBhbGlnbnMgd2l0aCBmdXR1cmUgcGFnZSBjb25maWd1cmF0aW9uIC8gY29uc3VtcHRpb25cbiAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiB3YXMgY2hvc2VuIG92ZXIgZXhwYW5kaW5nIGBtb3ZlQ2hpbGRgIG1ldGhvZCBpbiBjb21wb25lbnQgd3JhcHBlciB3aXRoIHlldCBhbm90aGVyIHNjZW5hcmlvXG4gIEBIb3N0QmluZGluZygnYXR0ci5zbG90Jykgc2xvdCA9ICdzdGFydCc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgbW9kYWxFbGVtZW50c0FkdmVydGlzZXI6IE1vZGFsRWxlbWVudHNBZHZlcnRpc2VyLFxuICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+XG4gICkge1xuICAgIHN1cGVyKE1vZGFsRWxlbWVudFR5cGUuUEFHRV9QUk9HUkVTUywgZWxlbWVudFJlZiwgbW9kYWxFbGVtZW50c0FkdmVydGlzZXIpO1xuICB9XG59XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdraXJieS1wYWdlLXRpdGxlJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VUaXRsZUNvbXBvbmVudCBleHRlbmRzIE1vZGFsRWxlbWVudENvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIEBPcHRpb25hbCgpIG1vZGFsRWxlbWVudHNBZHZlcnRpc2VyOiBNb2RhbEVsZW1lbnRzQWR2ZXJ0aXNlclxuICApIHtcbiAgICBzdXBlcihNb2RhbEVsZW1lbnRUeXBlLlRJVExFLCBlbGVtZW50UmVmLCBtb2RhbEVsZW1lbnRzQWR2ZXJ0aXNlcik7XG4gIH1cbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAna2lyYnktcGFnZS1jb250ZW50JyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VDb250ZW50Q29tcG9uZW50IHt9XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2tpcmJ5LXBhZ2UtYWN0aW9ucycsXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYnV0dG9uW2tpcmJ5LWJ1dHRvbl1cIj48L25nLWNvbnRlbnQ+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgIGNvbHVtbi1nYXA6IDhweDtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBQYWdlQWN0aW9uc0NvbXBvbmVudCB7fVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdraXJieS1wYWdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wYWdlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtJb25pY0VsZW1lbnRQYXJ0SGVscGVyXSxcbiAgaW1wb3J0czogW1xuICAgIElvbkhlYWRlcixcbiAgICBJb25Ub29sYmFyLFxuICAgIElvbkJ1dHRvbnMsXG4gICAgSW9uQmFja0J1dHRvbixcbiAgICBJb25UaXRsZSxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIElvbkNvbnRlbnQsXG4gICAgSW9uUmVmcmVzaGVyLFxuICAgIFNwaW5uZXJDb21wb25lbnQsXG4gICAgTmdDbGFzcyxcbiAgICBJb25Gb290ZXIsXG4gICAgRml0SGVhZGluZ0RpcmVjdGl2ZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgUGFnZUNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRDaGVja2VkLCBPbkNoYW5nZXNcbntcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZztcbiAgQElucHV0KCkgc3VidGl0bGU6IHN0cmluZztcbiAgQElucHV0KCkgdG9vbGJhclRpdGxlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRpdGxlQWxpZ25tZW50OiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCcgPSAnbGVmdCc7XG4gIEBJbnB1dCgpIGRlZmF1bHRCYWNrSHJlZjogc3RyaW5nO1xuICBASW5wdXQoKSBoaWRlQmFja0J1dHRvbjogYm9vbGVhbjtcbiAgQElucHV0KCkgdGl0bGVNYXhMaW5lczogbnVtYmVyO1xuICBASW5wdXQoKSBoYXNJbnRlcmFjdGl2ZVRpdGxlOiBib29sZWFuO1xuXG4gIEBJbnB1dCgpIHNldCBtYXhXaWR0aCh3aWR0aDogTWF4V2lkdGgpIHtcbiAgICB0aGlzLl9tYXhXaWR0aCA9IHdpZHRoO1xuICB9XG5cbiAgZ2V0IG1heFdpZHRoKCk6IE1heFdpZHRoIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4V2lkdGg7XG4gIH1cblxuICBwcml2YXRlIF9tYXhXaWR0aDogTWF4V2lkdGggPSAnZGVmYXVsdCc7XG5cbiAgcHJpdmF0ZSBfdGFiQmFyQm90dG9tSGlkZGVuOiBib29sZWFuO1xuICBwdWJsaWMgZ2V0IHRhYkJhckJvdHRvbUhpZGRlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fdGFiQmFyQm90dG9tSGlkZGVuO1xuICB9XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgdGFiQmFyQm90dG9tSGlkZGVuKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMudGFic0NvbXBvbmVudCkge1xuICAgICAgLy8gYXMgd2UgYXJlIHNldHRpbmcgYSBjbGFzcyBvbiB0YWJzLCB3ZSBuZWVkIHRoaXMgdG8gaGFwcGVuIGluIGEgc2VwYXJhdGUgY2QgY3ljbGVcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnRhYnNDb21wb25lbnQudGFiQmFyQm90dG9tSGlkZGVuID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5fdGFiQmFyQm90dG9tSGlkZGVuID0gdmFsdWU7XG4gIH1cblxuICBAT3V0cHV0KCkgZW50ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBsZWF2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHJlZnJlc2ggPSBuZXcgRXZlbnRFbWl0dGVyPFB1bGxUb1JlZnJlc2hFdmVudD4oKTtcbiAgQE91dHB1dCgpIGJhY2tCdXR0b25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSB0b29sYmFyVGl0bGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8UG9pbnRlckV2ZW50PigpO1xuXG4gIEBWaWV3Q2hpbGQoSW9uQ29udGVudCwgeyBzdGF0aWM6IHRydWUgfSkgcHJpdmF0ZSBjb250ZW50PzogSW9uQ29udGVudDtcbiAgQFZpZXdDaGlsZChJb25Db250ZW50LCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwcml2YXRlIGlvbkNvbnRlbnRFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxJb25Db250ZW50RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoSW9uSGVhZGVyLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogRWxlbWVudFJlZiB9KVxuICBpb25IZWFkZXJFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxJb25IZWFkZXJFbGVtZW50PjtcbiAgQFZpZXdDaGlsZChJb25Gb290ZXIsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHByaXZhdGUgaW9uRm9vdGVyRWxlbWVudDogRWxlbWVudFJlZjxIVE1MSW9uRm9vdGVyRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoSW9uVG9vbGJhciwgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHJpdmF0ZSBpb25Ub29sYmFyRWxlbWVudDogRWxlbWVudFJlZjxIVE1MSW9uVG9vbGJhckVsZW1lbnQ+O1xuICBAVmlld0NoaWxkcmVuKElvbkJ1dHRvbnMsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwcml2YXRlIGlvblRvb2xiYXJCdXR0b25zRWxlbWVudDogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTElvbkJ1dHRvbnNFbGVtZW50Pj47XG4gIEBWaWV3Q2hpbGQoSW9uQmFja0J1dHRvbiwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHByaXZhdGUgYmFja0J1dHRvbjogSW9uQmFja0J1dHRvbjtcbiAgQFZpZXdDaGlsZCgncGFnZVRpdGxlJywgeyBzdGF0aWM6IGZhbHNlLCByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHByaXZhdGUgcGFnZVRpdGxlOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdzdGlja3lDb250ZW50Q29udGFpbmVyJywgeyBzdGF0aWM6IGZhbHNlLCByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHByaXZhdGUgc3RpY2t5Q29udGVudENvbnRhaW5lcjogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkKCdzaW1wbGVUaXRsZVRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHByaXZhdGUgc2ltcGxlVGl0bGVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgnc2ltcGxlVG9vbGJhclRpdGxlVGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgcHJpdmF0ZSBzaW1wbGVUb29sYmFyVGl0bGVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQENvbnRlbnRDaGlsZChQYWdlVG9vbGJhclRpdGxlRGlyZWN0aXZlLCB7IHN0YXRpYzogZmFsc2UsIHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHByaXZhdGUgY3VzdG9tVG9vbGJhclRpdGxlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBDb250ZW50Q2hpbGQoUGFnZVRpdGxlRGlyZWN0aXZlLCB7IHN0YXRpYzogZmFsc2UsIHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIGN1c3RvbVRpdGxlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBDb250ZW50Q2hpbGQoUGFnZVN1YnRpdGxlRGlyZWN0aXZlLCB7IHN0YXRpYzogZmFsc2UsIHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIGN1c3RvbVN1YnRpdGxlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBDb250ZW50Q2hpbGRyZW4oUGFnZUFjdGlvbnNEaXJlY3RpdmUpXG4gIGN1c3RvbUFjdGlvbnM6IFF1ZXJ5TGlzdDxQYWdlQWN0aW9uc0RpcmVjdGl2ZT47XG4gIEBDb250ZW50Q2hpbGRyZW4oUGFnZUNvbnRlbnREaXJlY3RpdmUpXG4gIHByaXZhdGUgY3VzdG9tQ29udGVudDogUXVlcnlMaXN0PFBhZ2VDb250ZW50RGlyZWN0aXZlPjtcbiAgQENvbnRlbnRDaGlsZChQYWdlU3RpY2t5Q29udGVudERpcmVjdGl2ZSwgeyBzdGF0aWM6IGZhbHNlLCByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBwcml2YXRlIHN0aWNreUNvbnRlbnRSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBDb250ZW50Q2hpbGQoSGVhZGVyQ29tcG9uZW50KVxuICBoZWFkZXI/OiBIZWFkZXJDb21wb25lbnQ7XG5cbiAgaGFzSGVhZGVyOiBib29sZWFuO1xuICBoYXNQYWdlVGl0bGU6IGJvb2xlYW47XG4gIGhhc1BhZ2VTdWJ0aXRsZTogYm9vbGVhbjtcbiAgdG9vbGJhclRpdGxlVmlzaWJsZTogYm9vbGVhbjtcbiAgdG9vbGJhckFjdGlvbnNWaXNpYmxlOiBib29sZWFuO1xuICBpc0NvbnRlbnRTY3JvbGxlZDogYm9vbGVhbjtcbiAgaXNTdGlja3lDb250ZW50UGlubmVkID0gZmFsc2U7XG5cbiAgZml0SGVhZGluZ0NvbmZpZzogRml0SGVhZGluZ0NvbmZpZztcblxuICB0b29sYmFyVGl0bGVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgY3VzdG9tQ29udGVudFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBwYWdlQWN0aW9uc1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBmaXhlZENvbnRlbnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgc3RpY2t5QWN0aW9uc1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBmaXhlZEFjdGlvbnNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgc3RpY2t5Q29udGVudFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxQYWdlU3RpY2t5Q29udGVudERpcmVjdGl2ZT47XG4gIGhlYWRlckFjdGlvbnNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8SGVhZGVyQWN0aW9uc0RpcmVjdGl2ZT47XG4gIHRpdGxlQWN0aW9uSWNvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxIZWFkZXJUaXRsZUFjdGlvbkljb25EaXJlY3RpdmU+O1xuXG4gIHByaXZhdGUgdGl0bGVJbnRlcnNlY3Rpb25PYnNlcnZlcj86IEludGVyc2VjdGlvbk9ic2VydmVyO1xuICBwcml2YXRlIHN0aWNreUFjdGlvbnNJbnRlcnNlY3Rpb25PYnNlcnZlcj86IEludGVyc2VjdGlvbk9ic2VydmVyO1xuICBwcml2YXRlIHN0aWNreUNvbnRlbnRJbnRlcnNlY3Rpb25PYnNlcnZlcj86IEludGVyc2VjdGlvbk9ic2VydmVyO1xuICBwcml2YXRlIGlzT2JzZXJ2aW5nVGl0bGUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBpc09ic2VydmluZ0FjdGlvbnMgPSBmYWxzZTtcbiAgcHJpdmF0ZSBpc0RvY1RpdGxlU2V0ID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSB1bm9ic2VydmVUaXRsZU11dGF0aW9uOiBVbm9ic2VydmVGbjtcblxuICBwcml2YXRlIHVybDogc3RyaW5nO1xuICBwcml2YXRlIGlzQWN0aXZlOiBib29sZWFuO1xuXG4gIHByaXZhdGUgbmdPbkRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBjb250ZW50U2Nyb2xsZWQkOiBPYnNlcnZhYmxlPFNjcm9sbERldGFpbD47XG5cbiAgcHJpdmF0ZSBuYXZpZ2F0aW9uU3RhcnQkOiBPYnNlcnZhYmxlPE5hdmlnYXRpb25TdGFydD4gPSB0aGlzLnJvdXRlci5ldmVudHMucGlwZShcbiAgICBmaWx0ZXIoKGV2ZW50KTogZXZlbnQgaXMgTmF2aWdhdGlvblN0YXJ0ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0KSxcbiAgICB0YWtlVW50aWwodGhpcy5uZ09uRGVzdHJveSQpXG4gICk7XG5cbiAgcHJpdmF0ZSBuYXZpZ2F0aW9uRW5kJDogT2JzZXJ2YWJsZTxOYXZpZ2F0aW9uRW5kPiA9IHRoaXMucm91dGVyLmV2ZW50cy5waXBlKFxuICAgIGZpbHRlcigoZXZlbnQpOiBldmVudCBpcyBOYXZpZ2F0aW9uRW5kID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCksXG4gICAgdGFrZVVudGlsKHRoaXMubmdPbkRlc3Ryb3kkKVxuICApO1xuXG4gIHRvb2xiYXJBY3Rpb25Hcm91cEluamVjdG9yOiBJbmplY3RvcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSB6b25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBtb2RhbE5hdmlnYXRpb25TZXJ2aWNlOiBNb2RhbE5hdmlnYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXJTZXJ2aWNlOiBSZXNpemVPYnNlcnZlclNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgcHJpdmF0ZSB0YWJzQ29tcG9uZW50OiBUYWJzQ29tcG9uZW50LFxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChQQUdFX0JBQ0tfQlVUVE9OX09WRVJSSURFKVxuICAgIHByaXZhdGUgYmFja0J1dHRvbk92ZXJyaWRlOiBQYWdlQmFja0J1dHRvbk92ZXJyaWRlLFxuICAgIEBPcHRpb25hbCgpXG4gICAgcHJpdmF0ZSByb3V0ZXJPdXRsZXQ6IElvblJvdXRlck91dGxldCxcbiAgICBAT3B0aW9uYWwoKVxuICAgIHByaXZhdGUgbmF2Q3RybDogTmF2Q29udHJvbGxlcixcbiAgICBwcml2YXRlIGlvbmljRWxlbWVudFBhcnRIZWxwZXI6IElvbmljRWxlbWVudFBhcnRIZWxwZXIsXG4gICAgcHVibGljIHRyYW5zbGF0aW9uczogVHJhbnNsYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgaHRtbERvY1RpdGxlOiBUaXRsZVxuICApIHt9XG5cbiAgcHJpdmF0ZSBjb250ZW50UmVhZHlQcm9taXNlOiBQcm9taXNlPHZvaWQ+O1xuICBwcml2YXRlIHdoZW5Db250ZW50UmVhZHkoKSB7XG4gICAgaWYgKCF0aGlzLmNvbnRlbnRSZWFkeVByb21pc2UpIHtcbiAgICAgIHRoaXMuY29udGVudFJlYWR5UHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXJTZXJ2aWNlLm9ic2VydmUodGhpcy5pb25Db250ZW50RWxlbWVudCwgKGVudHJ5KSA9PiB7XG4gICAgICAgICAgaWYgKGVudHJ5LmNvbnRlbnRSZWN0LmhlaWdodCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXJTZXJ2aWNlLnVub2JzZXJ2ZSh0aGlzLmlvbkNvbnRlbnRFbGVtZW50KTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbnRlbnRSZWFkeVByb21pc2U7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbW92ZVdyYXBwZXIoKTtcbiAgICB0aGlzLmlvbmljRWxlbWVudFBhcnRIZWxwZXIuc2V0UGFydChcbiAgICAgICdiYWNrZ3JvdW5kJyxcbiAgICAgIHRoaXMuaW9uVG9vbGJhckVsZW1lbnQsXG4gICAgICAnLnRvb2xiYXItYmFja2dyb3VuZCdcbiAgICApO1xuXG4gICAgY29uc3QgYWN0aW9uR3JvdXBDb25maWc6IEFjdGlvbkdyb3VwQ29uZmlnID0ge1xuICAgICAgaXNDb25kZW5zZWQ6IHRydWUsXG4gICAgICBtYXhWaXNpYmxlQWN0aW9uczogMSxcbiAgICB9O1xuICAgIHRoaXMudG9vbGJhckFjdGlvbkdyb3VwSW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBBQ1RJT05HUk9VUF9DT05GSUcsXG4gICAgICAgICAgdXNlVmFsdWU6IGFjdGlvbkdyb3VwQ29uZmlnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHBhcmVudDogdGhpcy5pbmplY3RvcixcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy50aXRsZU1heExpbmVzKSB7XG4gICAgICB0aGlzLmZpdEhlYWRpbmdDb25maWcgPSB7XG4gICAgICAgIG1heExpbmVzOiBjaGFuZ2VzLnRpdGxlTWF4TGluZXMuY3VycmVudFZhbHVlLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuc3VidGl0bGUgJiYgIWNoYW5nZXMuc3VidGl0bGUuaXNGaXJzdENoYW5nZSkge1xuICAgICAgdGhpcy5zdWJ0aXRsZSA9IGNoYW5nZXMudGl0bGUuY3VycmVudFZhbHVlO1xuICAgICAgdGhpcy5oYXNQYWdlU3VidGl0bGUgPSB0aGlzLnN1YnRpdGxlICE9PSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLnRpdGxlIHx8IGNoYW5nZXMudG9vbGJhclRpdGxlKSB7XG4gICAgICB0aGlzLnNldEhUTUxEb2N1bWVudFRpdGxlKHRoaXMudGl0bGUgfHwgdGhpcy50b29sYmFyVGl0bGUpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5jb250ZW50U2Nyb2xsZWQkID0gdGhpcy5jb250ZW50LmlvblNjcm9sbC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoY29udGVudFNjcm9sbERlYm91bmNlVGltZUluTVMpLFxuICAgICAgICBtYXAoKGV2ZW50KSA9PiBldmVudC5kZXRhaWwpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5uZ09uRGVzdHJveSQpXG4gICAgICApO1xuXG4gICAgICB0aGlzLmNvbnRlbnRTY3JvbGxlZCQuc3Vic2NyaWJlKChzY3JvbGxJbmZvOiBTY3JvbGxEZXRhaWwpID0+IHtcbiAgICAgICAgaWYgKHNjcm9sbEluZm8uc2Nyb2xsVG9wID4gY29udGVudFNjcm9sbGVkT2Zmc2V0SW5QaXhlbHMgIT09IHRoaXMuaXNDb250ZW50U2Nyb2xsZWQpIHtcbiAgICAgICAgICB0aGlzLmlzQ29udGVudFNjcm9sbGVkID0gIXRoaXMuaXNDb250ZW50U2Nyb2xsZWQ7XG4gICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGhpcyBpbnN0YW5jZSBoYXMgb2JzZXJ2ZWQgYSBwYWdlIGVudGVyIHNvIHJlZ2lzdGVyIHRoZSBjb3JyZWN0IHVybCBmb3IgdGhpcyBpbnN0YW5jZVxuICAgIHRoaXMudXJsID0gdGhpcy5yb3V0ZXIudXJsO1xuICAgIHRoaXMub25FbnRlcigpO1xuXG4gICAgLy8gV2F0Y2ggbmF2aWdhdGlvbiBldmVudHMgZm9yIHBhZ2UgZW50ZXIgYW5kIGxlYXZlXG4gICAgdGhpcy5uYXZpZ2F0aW9uU3RhcnQkLnN1YnNjcmliZSgoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmdldFBhdGhuYW1lKGV2ZW50LnVybCkgIT09IHRoaXMuZ2V0UGF0aG5hbWUodGhpcy51cmwpICYmXG4gICAgICAgICF0aGlzLm1vZGFsTmF2aWdhdGlvblNlcnZpY2UuaXNNb2RhbFJvdXRlKHRoaXMudXJsKSAmJlxuICAgICAgICAhdGhpcy5tb2RhbE5hdmlnYXRpb25TZXJ2aWNlLmlzTW9kYWxSb3V0ZShldmVudC51cmwpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5vbkxlYXZlKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLm5hdmlnYXRpb25FbmQkLnN1YnNjcmliZSgoZXZlbnQ6IE5hdmlnYXRpb25FbmQpID0+IHtcbiAgICAgIGlmICh0aGlzLmdldFBhdGhuYW1lKGV2ZW50LnVybEFmdGVyUmVkaXJlY3RzKSA9PT0gdGhpcy5nZXRQYXRobmFtZSh0aGlzLnVybCkpIHtcbiAgICAgICAgdGhpcy5vbkVudGVyKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmludGVyY2VwdEJhY2tCdXR0b25DbGlja3NTZXR1cCgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZVN0aWNreUludGVyc2VjdGlvbk9ic2VydmVyKCk7XG4gICAgdGhpcy5zZXRBY3Rpb25CdXR0b25zV2lkdGgoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVIZWFkZXIoKTtcbiAgICB0aGlzLmluaXRpYWxpemVUaXRsZSgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZUFjdGlvbnMoKTtcbiAgICB0aGlzLmluaXRpYWxpemVDb250ZW50KCk7XG4gICAgdGhpcy5pbml0aWFsaXplU3RpY2t5Q29udGVudCgpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5uZ09uRGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMubmdPbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG5cbiAgICB0aGlzLnRpdGxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLnN0aWNreUFjdGlvbnNJbnRlcnNlY3Rpb25PYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgIHRoaXMuc3RpY2t5Q29udGVudEludGVyc2VjdGlvbk9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy51bm9ic2VydmVUaXRsZU11dGF0aW9uPy4oKTtcbiAgfVxuXG4gIGRlbGVnYXRlUmVmcmVzaEV2ZW50KGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnJlZnJlc2guZW1pdCh7XG4gICAgICBjb21wbGV0ZTogZXZlbnQudGFyZ2V0LmNvbXBsZXRlLmJpbmQoZXZlbnQudGFyZ2V0KSxcbiAgICB9KTtcbiAgfVxuXG4gIGdldE1heFdpZHRoQ2xhc3NlcygpIHtcbiAgICBpZiAoIXRoaXMubWF4V2lkdGgpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgaWYgKHRoaXMubWF4V2lkdGggPT09ICdkZWZhdWx0Jykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gYG1heC13aWR0aC0ke3RoaXMubWF4V2lkdGh9YDtcbiAgfVxuXG4gIG9uVGl0bGVDbGljayhldmVudDogUG9pbnRlckV2ZW50KSB7XG4gICAgaWYgKHRoaXMudG9vbGJhclRpdGxlQ2xpY2sub2JzZXJ2ZWQpIHtcbiAgICAgIHRoaXMudG9vbGJhclRpdGxlQ2xpY2suZW1pdChldmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGVhZGVyPy50aXRsZUNsaWNrLmVtaXQoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlV3JhcHBlcigpIHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlO1xuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQocGFyZW50LCB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChwYXJlbnQsIHRoaXMuaW9uSGVhZGVyRWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHBhcmVudCwgdGhpcy5pb25Db250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHBhcmVudCwgdGhpcy5pb25Gb290ZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkVudGVyKCkge1xuICAgIGlmICh0aGlzLmlzQWN0aXZlKSByZXR1cm47XG4gICAgdGhpcy5pc0FjdGl2ZSA9IHRydWU7XG5cbiAgICB0aGlzLmVudGVyLmVtaXQoKTtcblxuICAgIHRoaXMucGF0Y2hJb25MYXN0Rm9jdXNlZCgpO1xuXG4gICAgdGhpcy5vYnNlcnZlVGl0bGUoKTtcbiAgICB0aGlzLm9ic2VydmVBY3Rpb25zKCk7XG4gICAgdGhpcy5zZXRIVE1MRG9jdW1lbnRUaXRsZSh0aGlzLmhlYWRlcj8udGl0bGUgfHwgdGhpcy50aXRsZSB8fCB0aGlzLnRvb2xiYXJUaXRsZSk7XG4gICAgdGhpcy5vYnNlcnZlVGl0bGVET01DaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIG9uTGVhdmUoKSB7XG4gICAgaWYgKCF0aGlzLmlzQWN0aXZlKSByZXR1cm47XG4gICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5sZWF2ZS5lbWl0KCk7XG5cbiAgICB0aGlzLnVub2JzZXJ2ZVRpdGxlKCk7XG4gICAgdGhpcy51bm9ic2VydmVBY3Rpb25zKCk7XG4gICAgdGhpcy51bm9ic2VydmVUaXRsZU11dGF0aW9uPy4oKTtcblxuICAgIGlmICh0aGlzLnRhYkJhckJvdHRvbUhpZGRlbiAmJiB0aGlzLnRhYnNDb21wb25lbnQpIHtcbiAgICAgIHRoaXMudGFic0NvbXBvbmVudC50YWJCYXJCb3R0b21IaWRkZW4gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGludGVyY2VwdEJhY2tCdXR0b25DbGlja3NTZXR1cCgpIHtcbiAgICBpZiAodGhpcy5iYWNrQnV0dG9uT3ZlcnJpZGUpIHtcbiAgICAgIHRoaXMuYmFja0J1dHRvbi5vbkNsaWNrID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmJhY2tCdXR0b25PdmVycmlkZS5uYXZpZ2F0ZUJhY2sodGhpcy5yb3V0ZXJPdXRsZXQsIHRoaXMubmF2Q3RybCwgdGhpcy5kZWZhdWx0QmFja0hyZWYpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBJbnRlcmNlcHQgYmFjay1idXR0b24gY2xpY2sgZXZlbnRzLCBkZWZhdWx0aW5nIHRvIHRoZSBidWlsdC1pbiBjbGljay1oYW5kbGVyLlxuICAgIGlmICh0aGlzLmJhY2tCdXR0b25DbGljay5vYnNlcnZlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmJhY2tCdXR0b25DbGlja1xuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ09uRGVzdHJveSQpKVxuICAgICAgICAuc3Vic2NyaWJlKHRoaXMuYmFja0J1dHRvbi5vbkNsaWNrLmJpbmQodGhpcy5iYWNrQnV0dG9uKSk7XG4gICAgfVxuICAgIHRoaXMuYmFja0J1dHRvbi5vbkNsaWNrID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgdGhpcy5iYWNrQnV0dG9uQ2xpY2suZW1pdChldmVudCk7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcGF0Y2hJb25MYXN0Rm9jdXNlZCgpIHtcbiAgICBjb25zdCBpb25MYXN0Rm9jdXM6IEhUTUxFbGVtZW50ID1cbiAgICAgIHRoaXMuaW9uQ29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdbaW9uLWxhc3QtZm9jdXM9XCJ0cnVlXCJdJyk7XG5cbiAgICAvLyBXaGVuIGEgZm9jdXNNYW5hZ2VyUHJpb3JpdHkgaXMgc2V0LCBJb25pYyBoYW5kbGVzIG1vdmluZyBmb2N1cyBiYWNrIHRvIHRoZSBlbGVtZW50IHRoYXQgcHJlc2VudGVkIHRoZSBjdXJyZW50IHZpZXcuXG4gICAgLy8gVW5mb3J0dW5hdGVseSwgd2UgbmVlZCB0byBzY2hlZHVsZSBhIHJlbW92YWwgb2YgdGFiaW5kZXg9XCItMVwiIGZyb20gaW9uTGFzdEZvY3VzIGVsZW1lbnQgYWZ0ZXIgSW9uaWMgbWlnaHQgaGF2ZSBzZXQgaXRcbiAgICAvLyB0byB3b3JrIGFyb3VuZCBlbGVtZW50cyBiZWNvbWluZyBpbmFjY2Vzc2libGUgYWZ0ZXIgbmF2aWdhdGluZyBiYWNrOiBodHRwczovL2dpdGh1Yi5jb20vaW9uaWMtdGVhbS9pb25pYy1mcmFtZXdvcmsvaXNzdWVzLzI5ODc1XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoaW9uTGFzdEZvY3VzPy5nZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JykgIT09ICctMScpIHJldHVybjtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKGlvbkxhc3RGb2N1cywgJ3RhYmluZGV4Jyk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVTdGlja3lJbnRlcnNlY3Rpb25PYnNlcnZlcigpIHtcbiAgICBpZiAodGhpcy5zdGlja3lDb250ZW50VGVtcGxhdGUpIHtcbiAgICAgIC8vIFN0aWNreSBjb250ZW50IHByZXNlbnQgLSBzdGFydCBvYnNlcnZpbmcgZm9yIHN0aWNraW5lc3NcbiAgICAgIGlmICghdGhpcy5zdGlja3lDb250ZW50SW50ZXJzZWN0aW9uT2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5zdGlja3lDb250ZW50SW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSB0aGlzLmNyZWF0ZVN0aWNreUNvbnRlbnRJbnRlcnNlY3Rpb25PYnNlcnZlcigpO1xuICAgICAgfVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc3RpY2t5Q29udGVudEludGVyc2VjdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5zdGlja3lDb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplSGVhZGVyKCkge1xuICAgIGlmICh0aGlzLmhhc0hlYWRlciA9PT0gdW5kZWZpbmVkICYmICEhdGhpcy5oZWFkZXIpIHtcbiAgICAgIHRoaXMuaGFzSGVhZGVyID0gdHJ1ZTtcbiAgICAgIC8vIEhlYWRlciBjb3VsZCBsYXRlciBiZSByZW1vdmVkIGZyb20gRE9NIChlLmcuIGluIHZpcnR1YWwgc2Nyb2xsaW5nIHNjZW5hcmlvcyksXG4gICAgICAvLyBzbyBzdG9yZSBhIHJlZmVyZW5jZSB0byBgaGVhZGVyLnRpdGxlQWN0aW9uSWNvblRlbXBsYXRlYCBhbmQgYGhlYWRlci50aXRsZUNsaWNrYDpcbiAgICAgIHRoaXMudGl0bGVBY3Rpb25JY29uVGVtcGxhdGUgPSB0aGlzLmhlYWRlci50aXRsZUFjdGlvbkljb25UZW1wbGF0ZTtcbiAgICAgIGlmICh0aGlzLmhlYWRlci50aXRsZUNsaWNrLm9ic2VydmVkICYmIHRoaXMuaGFzSW50ZXJhY3RpdmVUaXRsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuaGFzSW50ZXJhY3RpdmVUaXRsZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBkb2N1bWVudCB0aXRsZSBmcm9tIGhlYWRlciBpbW1lZGlhdGVseSBpZiBwcmVzZW50LCB0aGVuIHN1YnNjcmliZSB0byBjaGFuZ2VzXG4gICAgICB0aGlzLnNldEhUTUxEb2N1bWVudFRpdGxlKHRoaXMuaGVhZGVyLnRpdGxlKTtcblxuICAgICAgdGhpcy5oZWFkZXIudGl0bGUkLnBpcGUodGFrZVVudGlsKHRoaXMubmdPbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRIVE1MRG9jdW1lbnRUaXRsZSh0aGlzLmhlYWRlci50aXRsZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVUaXRsZSgpIHtcbiAgICBpZiAodGhpcy5oYXNIZWFkZXIgJiYgdGhpcy5pc09ic2VydmluZ1RpdGxlICYmICF0aGlzLmhlYWRlcj8udGl0bGVFbGVtZW50KSB7XG4gICAgICAvLyBJZiB3ZSdyZSBhbHJlYWR5IG9ic2VydmluZyB0aGUgaGVhZGVyJ3MgdGl0bGUgZWxlbWVudCwgYnV0IGl0J3Mgbm8gbG9uZ2VyIHByZXNlbnQsXG4gICAgICAvLyBpdCBtZWFucyBpdCBoYXMgYmVlbiByZW1vdmVkIGZyb20gRE9NIChlLmcuIGluIHZpcnR1YWwgc2Nyb2xsaW5nIHNjZW5hcmlvcykuXG4gICAgICAvLyBGbGlwIG9ic2VydmluZyBmbGFnOlxuICAgICAgdGhpcy5pc09ic2VydmluZ1RpdGxlID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc1BhZ2VUaXRsZSkge1xuICAgICAgaWYgKCF0aGlzLmlzT2JzZXJ2aW5nVGl0bGUgJiYgISF0aGlzLmhlYWRlcj8udGl0bGVFbGVtZW50KSB7XG4gICAgICAgIC8vIEhlYWRlciBhbmQgdGl0bGUgZWxlbWVudCByZS1hdHRhY2hlZCB0byBET00gLSBvYnNlcnZlIHRpdGxlOlxuICAgICAgICB0aGlzLm9ic2VydmVUaXRsZSgpO1xuICAgICAgfVxuXG4gICAgICAvLyBFbnN1cmVzIHJlc3Qgb2YgaW5pdGlhbGl6ZVRpdGxlKCkgd29uJ3QgcnVuLCBpZiBhbHJlYWR5IGluaXRpYWxpemVkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5oYXNQYWdlVGl0bGUgPVxuICAgICAgdGhpcy50aXRsZSAhPT0gdW5kZWZpbmVkIHx8ICEhdGhpcy5jdXN0b21UaXRsZVRlbXBsYXRlIHx8ICEhdGhpcy5oZWFkZXI/LnRpdGxlO1xuICAgIHRoaXMudG9vbGJhclRpdGxlVmlzaWJsZSA9ICF0aGlzLmhhc1BhZ2VUaXRsZTtcbiAgICB0aGlzLmhhc1BhZ2VTdWJ0aXRsZSA9IHRoaXMuc3VidGl0bGUgIT09IHVuZGVmaW5lZCB8fCAhIXRoaXMuY3VzdG9tU3VidGl0bGVUZW1wbGF0ZTtcbiAgICBpZiAodGhpcy5oZWFkZXI/LnRpdGxlICYmICF0aGlzLnRvb2xiYXJUaXRsZSkge1xuICAgICAgdGhpcy50b29sYmFyVGl0bGUgPSB0aGlzLmhlYWRlci50aXRsZTtcbiAgICAgIHRoaXMuaGVhZGVyLnRpdGxlJC5waXBlKHRha2VVbnRpbCh0aGlzLm5nT25EZXN0cm95JCkpLnN1YnNjcmliZSgodGl0bGUpID0+IHtcbiAgICAgICAgdGhpcy50b29sYmFyVGl0bGUgPSB0aXRsZTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMub2JzZXJ2ZVRpdGxlKCk7XG5cbiAgICBjb25zdCBkZWZhdWx0VGl0bGVUZW1wbGF0ZSA9IHRoaXMuY3VzdG9tVGl0bGVUZW1wbGF0ZSB8fCB0aGlzLnNpbXBsZVRpdGxlVGVtcGxhdGU7XG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cbiAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICB0aGlzLnRvb2xiYXJUaXRsZVRlbXBsYXRlID0gdGhpcy5jdXN0b21Ub29sYmFyVGl0bGVUZW1wbGF0ZVxuICAgICAgPyB0aGlzLmN1c3RvbVRvb2xiYXJUaXRsZVRlbXBsYXRlXG4gICAgICA6IHR5cGVvZiB0aGlzLnRvb2xiYXJUaXRsZSA9PT0gJ3N0cmluZydcbiAgICAgICAgPyB0aGlzLnNpbXBsZVRvb2xiYXJUaXRsZVRlbXBsYXRlXG4gICAgICAgIDogZGVmYXVsdFRpdGxlVGVtcGxhdGU7XG5cbiAgICBpZiAodGhpcy50b29sYmFyVGl0bGVDbGljay5vYnNlcnZlZCAmJiB0aGlzLmhhc0ludGVyYWN0aXZlVGl0bGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5oYXNJbnRlcmFjdGl2ZVRpdGxlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9ic2VydmVUaXRsZSgpIHtcbiAgICBpZiAoIXRoaXMuaGFzUGFnZVRpdGxlKSB7XG4gICAgICAvLyBOb3RoaW5nIHRvIG9ic2VydmVcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNPYnNlcnZpbmdUaXRsZSkge1xuICAgICAgLy8gQWxyZWFkeSBvYnNlcnZpbmdcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBXZSBhcmUgbm90IGFjdHVhbGx5IG9ic2VydmluZyB0aGUgdGl0bGUgdW50aWwgYWZ0ZXIgdGhlIGB3aGVuQ29udGVudFJlYWR5YCBwcm9taXNlIGhhcyByZXNvbHZlZCxcbiAgICAvLyBidXQgc2luY2Ugd2UndmUgYWxyZWFkeSBjaGVja2VkIHRoYXQgdGhlIHBhZ2UgaGFzIGEgdGl0bGUgaW4gdGhlIGd1YXJkIGFib3ZlLFxuICAgIC8vIHdlJ2xsIC0gZWFnZXJseSAtIHNldCB0aGlzIGZsYWcgbm93IHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgcmUtcnVucyBvZiB0aGUgcmVzdCBvZiB0aGlzIG1ldGhvZDpcbiAgICB0aGlzLmlzT2JzZXJ2aW5nVGl0bGUgPSB0cnVlO1xuXG4gICAgaWYgKCF0aGlzLnRpdGxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMudGl0bGVJbnRlcnNlY3Rpb25PYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcbiAgICAgICAgKGVudHJpZXMpID0+IHtcbiAgICAgICAgICAvLyBJbiByYXJlIHNjZW5hcmlvcyB3ZSBnZXQgbW9yZSB0aGFuIDEgZW50cnkgLSB1c2UgdGhlIGxhc3Qgb25lOlxuICAgICAgICAgIGNvbnN0IGxhc3RFbnRyeSA9IGVudHJpZXNbZW50cmllcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICBpZiAobGFzdEVudHJ5KSB7XG4gICAgICAgICAgICBjb25zdCBzaG93VG9vbGJhclRpdGxlID0gIWxhc3RFbnRyeS5pc0ludGVyc2VjdGluZztcbiAgICAgICAgICAgIC8vIE9ubHkgZmxpcCB0aGUgZmxhZyBhbmQgcnVuIENoYW5nZSBEZXRlY3Rpb24gd2hlbiBjaGFuZ2VkOlxuICAgICAgICAgICAgaWYgKHNob3dUb29sYmFyVGl0bGUgIT09IHRoaXMudG9vbGJhclRpdGxlVmlzaWJsZSkge1xuICAgICAgICAgICAgICB0aGlzLnRvb2xiYXJUaXRsZVZpc2libGUgPSBzaG93VG9vbGJhclRpdGxlO1xuICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHsgcm9vdDogdGhpcy5pb25Db250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50IH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gUnVuIG91dHNpZGUgQW5ndWxhciB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHRyaWdnZXJpbmcgY2hhbmdlIGRldGVjdGlvblxuICAgIC8vIGFuZCAtIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucyAtIGFuIGluZmluaXRlIGxvb3Agd2hlbiBjYWxsZWQgd2l0aGluIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZDpcbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy53aGVuQ29udGVudFJlYWR5KCkudGhlbigoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRpdGxlRWxlbWVudFJlZiA9IHRoaXMucGFnZVRpdGxlIHx8IHRoaXMuaGVhZGVyPy50aXRsZUVsZW1lbnQ7XG4gICAgICAgIGlmICh0aXRsZUVsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLnRpdGxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh0aXRsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1bm9ic2VydmVUaXRsZSgpIHtcbiAgICBjb25zdCB0aXRsZUVsZW1lbnRSZWYgPSB0aGlzLnBhZ2VUaXRsZSB8fCB0aGlzLmhlYWRlcj8udGl0bGVFbGVtZW50O1xuICAgIGlmICh0aXRsZUVsZW1lbnRSZWYpIHtcbiAgICAgIHRoaXMudGl0bGVJbnRlcnNlY3Rpb25PYnNlcnZlcj8udW5vYnNlcnZlKHRpdGxlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG4gICAgdGhpcy5pc09ic2VydmluZ1RpdGxlID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIG9ic2VydmVUaXRsZURPTUNoYW5nZXMoKSB7XG4gICAgY29uc3QgZ2xvYmFsS2lyYnlDb25maWc6IEtpcmJ5Q29uZmlnID0gZ2V0R2xvYmFsQ29uZmlnKCk7XG4gICAgaWYgKCFnbG9iYWxLaXJieUNvbmZpZz8uc2V0SHRtbERvY1RpdGxlKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaXNEb2NUaXRsZVNldCkgcmV0dXJuOyAvLyB3ZSBuZXZlciB3YW50IHRvIG9ic2VydmUgaWYgdGhlIGRvY3VtZW50IHRpdGxlIGlzIGFscmVhZHkgc2V0IHZpYSBhbnkgdGl0bGUgcHJvcGVydGllcyAob3IgYWxyZWFkeSBvYnNlcnZlZClcblxuICAgIGNvbnN0IHRpdGxlQXJlYTogSFRNTEVsZW1lbnQgfCBudWxsID0gdGhpcy5pb25IZWFkZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICdpb24tdG9vbGJhciBpb24tdGl0bGUgLnRvb2xiYXItdGl0bGUnXG4gICAgKTtcblxuICAgIHRoaXMuc2V0SFRNTERvY3VtZW50VGl0bGUodGl0bGVBcmVhLnRleHRDb250ZW50KTtcblxuICAgIHRoaXMudW5vYnNlcnZlVGl0bGVNdXRhdGlvbiA9IG9ic2VydmVDb250ZW50KHRpdGxlQXJlYSwgKCkgPT4ge1xuICAgICAgdGhpcy5zZXRIVE1MRG9jdW1lbnRUaXRsZSh0aXRsZUFyZWEudGV4dENvbnRlbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRIVE1MRG9jdW1lbnRUaXRsZSh0aXRsZTogc3RyaW5nKSB7XG4gICAgY29uc3QgZ2xvYmFsS2lyYnlDb25maWc6IEtpcmJ5Q29uZmlnID0gZ2V0R2xvYmFsQ29uZmlnKCk7XG4gICAgaWYgKCFnbG9iYWxLaXJieUNvbmZpZz8uc2V0SHRtbERvY1RpdGxlIHx8ICF0aXRsZSB8fCB0aXRsZS50cmltKCkgPT09ICcnKSByZXR1cm47XG4gICAgdGhpcy5odG1sRG9jVGl0bGUuc2V0VGl0bGUodGl0bGUpO1xuICAgIHRoaXMuaXNEb2NUaXRsZVNldCA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVBY3Rpb25zKCkge1xuICAgIGlmICh0aGlzLmhlYWRlckFjdGlvbnNUZW1wbGF0ZSA9PT0gdW5kZWZpbmVkICYmICEhdGhpcy5oZWFkZXIpIHtcbiAgICAgIHRoaXMuaGVhZGVyQWN0aW9uc1RlbXBsYXRlID0gdGhpcy5oZWFkZXIuYWN0aW9uc1RlbXBsYXRlO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNIZWFkZXIgJiYgdGhpcy5pc09ic2VydmluZ0FjdGlvbnMgJiYgIXRoaXMuaGVhZGVyPy5hY3Rpb25zRWxlbWVudCkge1xuICAgICAgLy8gSWYgd2UncmUgYWxyZWFkeSBvYnNlcnZpbmcgdGhlIGhlYWRlcidzIGFjdGlvbnMgZWxlbWVudCwgYnV0IGl0J3Mgbm8gbG9uZ2VyIHByZXNlbnQsXG4gICAgICAvLyBpdCBtZWFucyBpdCBoYXMgYmVlbiByZW1vdmVkIGZyb20gRE9NIChlLmcuIGluIHZpcnR1YWwgc2Nyb2xsaW5nIHNjZW5hcmlvcykuXG4gICAgICAvLyBGbGlwIG9ic2VydmluZyBmbGFnOlxuICAgICAgdGhpcy5pc09ic2VydmluZ0FjdGlvbnMgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLm9ic2VydmVBY3Rpb25zKCk7XG5cbiAgICB0aGlzLmN1c3RvbUFjdGlvbnMuZm9yRWFjaCgocGFnZUFjdGlvbikgPT4ge1xuICAgICAgaWYgKHBhZ2VBY3Rpb24uaXNGaXhlZCkge1xuICAgICAgICB0aGlzLmZpeGVkQWN0aW9uc1RlbXBsYXRlID0gcGFnZUFjdGlvbi50ZW1wbGF0ZTtcbiAgICAgIH0gZWxzZSBpZiAocGFnZUFjdGlvbi5pc1N0aWNreSkge1xuICAgICAgICB0aGlzLnN0aWNreUFjdGlvbnNUZW1wbGF0ZSA9IHBhZ2VBY3Rpb24udGVtcGxhdGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhZ2VBY3Rpb25zVGVtcGxhdGUgPSBwYWdlQWN0aW9uLnRlbXBsYXRlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvYnNlcnZlQWN0aW9ucygpIHtcbiAgICBpZiAoIXRoaXMuaGVhZGVyPy5hY3Rpb25zRWxlbWVudCkge1xuICAgICAgLy8gTm90aGluZyB0byBvYnNlcnZlXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNPYnNlcnZpbmdBY3Rpb25zKSB7XG4gICAgICAvLyBBbHJlYWR5IG9ic2VydmluZ1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFdlIGFyZSBub3QgYWN0dWFsbHkgb2JzZXJ2aW5nIGFjdGlvbnMgdW50aWwgYWZ0ZXIgdGhlIGB3aGVuQ29udGVudFJlYWR5YCBwcm9taXNlIGhhcyByZXNvbHZlZCxcbiAgICAvLyBidXQgc2luY2Ugd2UndmUgYWxyZWFkeSBjaGVja2VkIHRoYXQgdGhlcmUncyBhbiBhY3Rpb25zIGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgZ3VhcmQgYWJvdmUsXG4gICAgLy8gd2UnbGwgLSBlYWdlcmx5IC0gc2V0IHRoaXMgZmxhZyBub3cgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSByZS1ydW5zIG9mIHRoZSByZXN0IG9mIHRoaXMgbWV0aG9kOlxuICAgIHRoaXMuaXNPYnNlcnZpbmdBY3Rpb25zID0gdHJ1ZTtcblxuICAgIGlmICghdGhpcy5zdGlja3lBY3Rpb25zSW50ZXJzZWN0aW9uT2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMuc3RpY2t5QWN0aW9uc0ludGVyc2VjdGlvbk9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxuICAgICAgICAoZW50cmllcykgPT4ge1xuICAgICAgICAgIC8vIEluIHJhcmUgc2NlbmFyaW9zIHdlIGdldCBtb3JlIHRoYW4gMSBlbnRyeSAtIHVzZSB0aGUgbGFzdCBvbmU6XG4gICAgICAgICAgY29uc3QgbGFzdEVudHJ5ID0gZW50cmllc1tlbnRyaWVzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIGlmIChsYXN0RW50cnkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNob3dUb29sYmFyQWN0aW9ucyA9ICFsYXN0RW50cnkuaXNJbnRlcnNlY3Rpbmc7XG4gICAgICAgICAgICAvLyBPbmx5IGZsaXAgdGhlIGZsYWcgYW5kIHJ1biBDaGFuZ2UgRGV0ZWN0aW9uIHdoZW4gY2hhbmdlZDpcbiAgICAgICAgICAgIGlmIChzaG93VG9vbGJhckFjdGlvbnMgIT09IHRoaXMudG9vbGJhckFjdGlvbnNWaXNpYmxlKSB7XG4gICAgICAgICAgICAgIHRoaXMudG9vbGJhckFjdGlvbnNWaXNpYmxlID0gc2hvd1Rvb2xiYXJBY3Rpb25zO1xuICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHsgcm9vdDogdGhpcy5pb25Db250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50IH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gUnVuIG91dHNpZGUgQW5ndWxhciB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHRyaWdnZXJpbmcgY2hhbmdlIGRldGVjdGlvblxuICAgIC8vIGFuZCAtIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucyAtIGFuIGluZmluaXRlIGxvb3Agd2hlbiBjYWxsZWQgd2l0aGluIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZDpcbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy53aGVuQ29udGVudFJlYWR5KCkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmhlYWRlcj8uYWN0aW9uc0VsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLnN0aWNreUFjdGlvbnNJbnRlcnNlY3Rpb25PYnNlcnZlci5vYnNlcnZlKHRoaXMuaGVhZGVyLmFjdGlvbnNFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdW5vYnNlcnZlQWN0aW9ucygpIHtcbiAgICBpZiAodGhpcy5oZWFkZXI/LmFjdGlvbnNFbGVtZW50KSB7XG4gICAgICB0aGlzLnN0aWNreUFjdGlvbnNJbnRlcnNlY3Rpb25PYnNlcnZlcj8udW5vYnNlcnZlKHRoaXMuaGVhZGVyLmFjdGlvbnNFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cbiAgICB0aGlzLmlzT2JzZXJ2aW5nQWN0aW9ucyA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRBY3Rpb25CdXR0b25zV2lkdGgoKSB7XG4gICAgaWYgKCF0aGlzLmlvblRvb2xiYXJCdXR0b25zRWxlbWVudCkgcmV0dXJuO1xuXG4gICAgLy8gRW5zdXJlIGlvbi10b29sYmFyIGN1c3RvbSBlbGVtZW50IGhhcyBiZWVuIGRlZmluZWQgKHByaW1hcmlseSB3aGVuIHRlc3RpbmcsIGJ1dCBkb2Vzbid0IGh1cnQpOlxuICAgIGN1c3RvbUVsZW1lbnRzLndoZW5EZWZpbmVkKHRoaXMuaW9uVG9vbGJhckVsZW1lbnQubmF0aXZlRWxlbWVudC5sb2NhbE5hbWUpLnRoZW4oKCkgPT4ge1xuICAgICAgLy8gRW5zdXJlIHRvb2xiYXIgYW5kIGJ1dHRvbnMgaGF2ZSBiZWVuIHJlbmRlcmVkIGFuZCBoYXMgZGltZW5zaW9uczpcbiAgICAgIGNvbXBvbmVudE9uUmVhZHkodGhpcy5pb25Ub29sYmFyRWxlbWVudC5uYXRpdmVFbGVtZW50LCAodG9vbGJhcikgPT4ge1xuICAgICAgICBsZXQgc3RhcnRCdXR0b25zV2lkdGggPSAwO1xuICAgICAgICBsZXQgZW5kQnV0dG9uc1dpZHRoID0gMDtcblxuICAgICAgICB0aGlzLmlvblRvb2xiYXJCdXR0b25zRWxlbWVudFxuICAgICAgICAgIC5tYXAoKGlvbkJ1dHRvbnNFbGVtZW50UmVmKSA9PiBpb25CdXR0b25zRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KVxuICAgICAgICAgIC5mb3JFYWNoKChpb25CdXR0b25zRWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGlvbkJ1dHRvbnNFbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IG1hcmdpbiA9IHBhcnNlSW50KHN0eWxlLm1hcmdpbkxlZnQpICsgcGFyc2VJbnQoc3R5bGUubWFyZ2luUmlnaHQpO1xuICAgICAgICAgICAgaWYgKGlvbkJ1dHRvbnNFbGVtZW50LmdldEF0dHJpYnV0ZSgnc2xvdCcpID09PSAnc3RhcnQnKSB7XG4gICAgICAgICAgICAgIHN0YXJ0QnV0dG9uc1dpZHRoICs9IGlvbkJ1dHRvbnNFbGVtZW50Lm9mZnNldFdpZHRoICsgbWFyZ2luO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW5kQnV0dG9uc1dpZHRoICs9IGlvbkJ1dHRvbnNFbGVtZW50Lm9mZnNldFdpZHRoICsgbWFyZ2luO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGFjdGlvbkJ1dHRvbnNNYXhXaWR0aCA9IE1hdGgubWF4KHN0YXJ0QnV0dG9uc1dpZHRoLCBlbmRCdXR0b25zV2lkdGgpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgIHRvb2xiYXIsXG4gICAgICAgICAgJy0tYWN0aW9uLWJ1dHRvbnMtd2lkdGgnLFxuICAgICAgICAgIGAke2FjdGlvbkJ1dHRvbnNNYXhXaWR0aH1weGAsXG4gICAgICAgICAgUmVuZGVyZXJTdHlsZUZsYWdzMi5EYXNoQ2FzZVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVDb250ZW50KCkge1xuICAgIHRoaXMuY3VzdG9tQ29udGVudC5mb3JFYWNoKChjb250ZW50KSA9PiB7XG4gICAgICBpZiAoY29udGVudC5pc0ZpeGVkKSB7XG4gICAgICAgIHRoaXMuZml4ZWRDb250ZW50VGVtcGxhdGUgPSBjb250ZW50LnRlbXBsYXRlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jdXN0b21Db250ZW50VGVtcGxhdGUgPSBjb250ZW50LnRlbXBsYXRlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplU3RpY2t5Q29udGVudCgpIHtcbiAgICB0aGlzLnN0aWNreUNvbnRlbnRUZW1wbGF0ZSA9IHRoaXMuc3RpY2t5Q29udGVudFJlZjtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU3RpY2t5Q29udGVudEludGVyc2VjdGlvbk9ic2VydmVyKCkge1xuICAgIGNvbnN0IG9wdGlvbnM6IEludGVyc2VjdGlvbk9ic2VydmVySW5pdCA9IHtcbiAgICAgIHJvb3Q6IHRoaXMuaW9uQ29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgIHRocmVzaG9sZDogMSxcbiAgICB9O1xuXG4gICAgY29uc3QgY2FsbGJhY2s6IEludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2sgPSAoZW50cmllcykgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNTdGlja3lDb250ZW50UGlubmVkICE9PSAhZW50cmllc1swXS5pc0ludGVyc2VjdGluZykge1xuICAgICAgICB0aGlzLmlzU3RpY2t5Q29udGVudFBpbm5lZCA9ICF0aGlzLmlzU3RpY2t5Q29udGVudFBpbm5lZDtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGNhbGxiYWNrLCBvcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGF0aG5hbWUodXJsOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdXJsLnNwbGl0KCc/JylbMF07XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5Ym9hcmRXaWxsU2hvdycsIFsnJGV2ZW50J10pXG4gIF9vbktleWJvYXJkV2lsbFNob3coaW5mbz86IHsga2V5Ym9hcmRIZWlnaHQ6IG51bWJlciB9KSB7XG4gICAgaWYgKGluZm8gJiYgaW5mby5rZXlib2FyZEhlaWdodCkge1xuICAgICAgdGhpcy5pb25Db250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAnLS1rZXlib2FyZC1vZmZzZXQnLFxuICAgICAgICBgJHtpbmZvLmtleWJvYXJkSGVpZ2h0fXB4YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5Ym9hcmRXaWxsSGlkZScpXG4gIF9vbktleWJvYXJkV2lsbEhpZGUoKSB7XG4gICAgdGhpcy5pb25Db250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWtleWJvYXJkLW9mZnNldCcsICcwcHgnKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoYHdpbmRvdzoke3NlbGVjdGVkVGFiQ2xpY2tFdmVudH1gKVxuICBfb25TZWxlY3RlZFRhYkNsaWNrKCkge1xuICAgIGlmICh0aGlzLmNvbnRlbnQpIHtcbiAgICAgIHRoaXMuY29udGVudC5zY3JvbGxUb1RvcChLaXJieUFuaW1hdGlvbi5EdXJhdGlvbi5MT05HKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxpb24taGVhZGVyIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgPGlvbi10b29sYmFyXG4gICAgW2NsYXNzLmNvbnRlbnQtc2Nyb2xsZWRdPVwiaXNDb250ZW50U2Nyb2xsZWRcIlxuICAgIFtjbGFzcy5jb250ZW50LXBpbm5lZF09XCJpc1N0aWNreUNvbnRlbnRQaW5uZWRcIlxuICA+XG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJzdGFydFwiPlxuICAgICAgPGlvbi1iYWNrLWJ1dHRvblxuICAgICAgICB0ZXh0PVwiXCJcbiAgICAgICAgW2RlZmF1bHRIcmVmXT1cImRlZmF1bHRCYWNrSHJlZlwiXG4gICAgICAgIGljb249XCJhc3NldHMva2lyYnkvaWNvbnMvc3ZnL2Fycm93LWJhY2suc3ZnXCJcbiAgICAgICAgW3N0eWxlLnZpc2liaWxpdHldPVwiaGlkZUJhY2tCdXR0b24gPyAnaGlkZGVuJyA6IG51bGxcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInRyYW5zbGF0aW9ucy5nZXQoJ2JhY2snKVwiXG4gICAgICA+PC9pb24tYmFjay1idXR0b24+XG4gICAgPC9pb24tYnV0dG9ucz5cbiAgICA8aW9uLXRpdGxlIFtjbGFzcy5zbGlkZS1hbmQtZmFkZS1pbl09XCJ0b29sYmFyVGl0bGVWaXNpYmxlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidG9vbGJhci10aXRsZVwiPlxuICAgICAgICBAaWYgKCF0aXRsZUFjdGlvbkljb25UZW1wbGF0ZSAmJiAhaGFzSW50ZXJhY3RpdmVUaXRsZSkge1xuICAgICAgICAgIDxoMSBjbGFzcz1cImtpcmJ5LXRleHQtbm9ybWFsLWJvbGRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b29sYmFyVGl0bGVUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvaDE+XG4gICAgICAgIH1cbiAgICAgICAgQGlmICghIXRpdGxlQWN0aW9uSWNvblRlbXBsYXRlIHx8IGhhc0ludGVyYWN0aXZlVGl0bGUpIHtcbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgW2NsYXNzLmNsaWNrYWJsZV09XCJoYXNJbnRlcmFjdGl2ZVRpdGxlXCJcbiAgICAgICAgICAgIFtjbGFzcy5oYXMtaWNvbl09XCIhIXRpdGxlQWN0aW9uSWNvblRlbXBsYXRlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvblRpdGxlQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGgxIGNsYXNzPVwia2lyYnktdGV4dC1ub3JtYWwtYm9sZFwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidG9vbGJhclRpdGxlVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGl0bGVBY3Rpb25JY29uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvaW9uLXRpdGxlPlxuICAgIEBpZiAoISFoZWFkZXJBY3Rpb25zVGVtcGxhdGUpIHtcbiAgICAgIDxpb24tYnV0dG9ucyBjbGFzcz1cImhpZGVcIiBzbG90PVwicHJpbWFyeVwiIFtjbGFzcy5mYWRlLWluXT1cInRvb2xiYXJBY3Rpb25zVmlzaWJsZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJBY3Rpb25zVGVtcGxhdGU7IGluamVjdG9yOiB0b29sYmFyQWN0aW9uR3JvdXBJbmplY3RvclwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgfVxuICAgIEBpZiAoISFzdGlja3lBY3Rpb25zVGVtcGxhdGUpIHtcbiAgICAgIDxpb24tYnV0dG9ucyBjbGFzcz1cImxlZ2FjeS1hY3Rpb25zXCIgc2xvdD1cInByaW1hcnlcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN0aWNreUFjdGlvbnNUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9pb24tYnV0dG9ucz5cbiAgICB9XG4gICAgQGlmICghIWZpeGVkQWN0aW9uc1RlbXBsYXRlKSB7XG4gICAgICA8aW9uLWJ1dHRvbnMgY2xhc3M9XCJsZWdhY3ktYWN0aW9uc1wiIHNsb3Q9XCJzZWNvbmRhcnlcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpeGVkQWN0aW9uc1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2lvbi1idXR0b25zPlxuICAgIH1cbiAgPC9pb24tdG9vbGJhcj5cbjwvaW9uLWhlYWRlcj5cblxuPGlvbi1jb250ZW50XG4gIHNjcm9sbEV2ZW50cz1cInRydWVcIlxuICBmb3JjZU92ZXJzY3JvbGw9XCJmYWxzZVwiXG4gIFtjbGFzc109XCJnZXRNYXhXaWR0aENsYXNzZXMoKVwiXG4gIFtjbGFzcy5oYXMtaGVhZGVyXT1cImhhc0hlYWRlclwiXG4+XG4gIEBpZiAocmVmcmVzaC5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgIDxpb24tcmVmcmVzaGVyIChpb25SZWZyZXNoKT1cImRlbGVnYXRlUmVmcmVzaEV2ZW50KCRldmVudClcIiBzbG90PVwiZml4ZWRcIj5cbiAgICAgIDxraXJieS1zcGlubmVyPjwva2lyYnktc3Bpbm5lcj5cbiAgICA8L2lvbi1yZWZyZXNoZXI+XG4gIH1cblxuICA8IS0tIFBhZ2UgaGVhZGVyIC0tPlxuICBAaWYgKGhhc1BhZ2VUaXRsZSAmJiAhaGFzSGVhZGVyKSB7XG4gICAgPGRpdiBjbGFzcz1cInBhZ2UtaGVhZGVyLWNvbnRhaW5lclwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInBhZ2UtaGVhZGVyXCJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICd0ZXh0LWNlbnRlcic6IHRpdGxlQWxpZ25tZW50ID09PSAnY2VudGVyJyxcbiAgICAgICAgICAndGV4dC1yaWdodCc6IHRpdGxlQWxpZ25tZW50ID09PSAncmlnaHQnLFxuICAgICAgICB9XCJcbiAgICAgID5cbiAgICAgICAgPGRpdiAjcGFnZVRpdGxlIGNsYXNzPVwicGFnZS10aXRsZVwiIFtjbGFzcy5oYXMtYWN0aW9uc109XCIhIXBhZ2VBY3Rpb25zVGVtcGxhdGVcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbVRpdGxlVGVtcGxhdGUgfHwgZGVmYXVsdFBhZ2VUaXRsZVRlbXBsYXRlXCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwYWdlQWN0aW9uc1RlbXBsYXRlIHx8IGRlZmF1bHRQYWdlQWN0aW9uc1RlbXBsYXRlXCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBAaWYgKGhhc1BhZ2VTdWJ0aXRsZSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdlLXN1YnRpdGxlXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tU3VidGl0bGVUZW1wbGF0ZSB8fCBkZWZhdWx0UGFnZVN1YnRpdGxlVGVtcGxhdGVcIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIDwhLS0gSGVhZGVyIC0tPlxuICBAaWYgKGhhc0hlYWRlcikge1xuICAgIDxkaXYgY2xhc3M9XCJwYWdlLWhlYWRlci1jb250YWluZXJcIj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImtpcmJ5LWhlYWRlclwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIDwhLS0gIFN0aWNreSBjb250ZW50IC0tPlxuICBAaWYgKHN0aWNreUNvbnRlbnRUZW1wbGF0ZSkge1xuICAgIDxkaXZcbiAgICAgICNzdGlja3lDb250ZW50Q29udGFpbmVyXG4gICAgICBjbGFzcz1cInN0aWNreS1jb250ZW50LWNvbnRhaW5lclwiXG4gICAgICBbY2xhc3MuY29udGVudC1waW5uZWRdPVwiaXNTdGlja3lDb250ZW50UGlubmVkXCJcbiAgICA+XG4gICAgICA8ZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3RpY2t5Q29udGVudFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIDwhLS0gQ29udGVudCAtLT5cbiAgPGRpdiBjbGFzcz1cImNvbnRlbnQtaW5uZXJcIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbUNvbnRlbnRUZW1wbGF0ZSB8fCBkZWZhdWx0Q29udGVudFRlbXBsYXRlXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuXG4gIEBpZiAoZml4ZWRDb250ZW50VGVtcGxhdGUpIHtcbiAgICA8ZGl2IHNsb3Q9XCJmaXhlZFwiIGNsYXNzPVwiZml4ZWQtY29udGVudFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnQtaW5uZXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpeGVkQ29udGVudFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuPC9pb24tY29udGVudD5cblxuPGlvbi1mb290ZXI+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cImtpcmJ5LXBhZ2UtZm9vdGVyXCI+PC9uZy1jb250ZW50PlxuPC9pb24tZm9vdGVyPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRQYWdlVGl0bGVUZW1wbGF0ZT5cbiAgPHNwYW4gW2tpcmJ5Rml0SGVhZGluZ109XCJmaXRIZWFkaW5nQ29uZmlnXCIgY2xhc3M9XCJraXJieS10ZXh0LXhsYXJnZVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaW1wbGVUaXRsZVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2RlZmF1bHRQYWdlU3VidGl0bGVUZW1wbGF0ZT5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNpbXBsZVN1YnRpdGxlVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2RlZmF1bHRQYWdlQWN0aW9uc1RlbXBsYXRlPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJraXJieS1wYWdlLWFjdGlvbnNcIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRDb250ZW50VGVtcGxhdGU+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cImtpcmJ5LXBhZ2UtY29udGVudFwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2ltcGxlVGl0bGVUZW1wbGF0ZT57eyB0aXRsZSB9fTwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3NpbXBsZVN1YnRpdGxlVGVtcGxhdGU+e3sgc3VidGl0bGUgfX08L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNzaW1wbGVUb29sYmFyVGl0bGVUZW1wbGF0ZT57eyB0b29sYmFyVGl0bGUgfX08L25nLXRlbXBsYXRlPlxuIl19","import { ChangeDetectionStrategy, Component, Input, Optional, SkipSelf, } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"../page.component\";\nexport class PageFooterComponent {\n constructor(pageComponent, hostElement, renderer) {\n this.pageComponent = pageComponent;\n this.hostElement = hostElement;\n this.renderer = renderer;\n this.hasPadding = true;\n if (!pageComponent) {\n throw new Error('Page footer must reside inside of a Kirby page');\n }\n }\n close() {\n this.pageComponent.tabBarBottomHidden = false;\n this.renderer.removeChild(this.hostElement.nativeElement.parentElement, this.hostElement.nativeElement, true);\n }\n ngOnDestroy() {\n this.pageComponent.tabBarBottomHidden = false;\n }\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: PageFooterComponent, deps: [{ token: i1.PageComponent, optional: true, skipSelf: true }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }\n /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.3.13\", type: PageFooterComponent, isStandalone: true, selector: \"kirby-page-footer\", inputs: { hasPadding: \"hasPadding\" }, ngImport: i0, template: \"<div class=\\\"wrapper\\\" [class.padding]=\\\"hasPadding\\\">\\n <ng-content></ng-content>\\n</div>\\n\", styles: [\"ion-item-option.primary{background-color:var(--kirby-primary);color:var(--kirby-primary-contrast)}ion-item-option.secondary{background-color:var(--kirby-secondary);color:var(--kirby-secondary-contrast)}ion-item-option.tertiary{background-color:var(--kirby-tertiary);color:var(--kirby-tertiary-contrast)}ion-item-option.success{background-color:var(--kirby-success);color:var(--kirby-success-contrast)}ion-item-option.warning{background-color:var(--kirby-warning);color:var(--kirby-warning-contrast)}ion-item-option.danger{background-color:var(--kirby-danger);color:var(--kirby-danger-contrast)}ion-item-option.white-overlay{background-color:var(--kirby-white-overlay);color:var(--kirby-white-overlay-contrast)}ion-item-option.light{background-color:var(--kirby-light);color:var(--kirby-light-contrast)}ion-item-option.medium{background-color:var(--kirby-medium);color:var(--kirby-medium-contrast)}ion-item-option.dark{background-color:var(--kirby-dark);color:var(--kirby-dark-contrast)}ion-item-option.dark-overlay{background-color:var(--kirby-dark-overlay);color:var(--kirby-dark-overlay-contrast)}:host{display:block;background-color:var(--kirby-white);--kirby-inputs-background-color: var(--kirby-dark-overlay);--kirby-inputs-background-color-hover: var(--kirby-dark-overlay-10);--kirby-inputs-background-color-active: var(--kirby-dark-overlay-20);--kirby-inputs-color: var(--kirby-black);--kirby-inputs-indicator-background-color: var(--kirby-black);--kirby-inputs-indicator-color: var(--kirby-white);--kirby-inputs-placeholder-color: var(--kirby-semi-dark);--kirby-inputs-elevation: none;--kirby-divider-color: var(--kirby-background-color)}:host .wrapper{position:relative;max-width:var(--page-content-max-width, 792px);margin:0 auto;padding-bottom:var(--kirby-page-footer-safe-area-bottom, var(--kirby-safe-area-bottom))}:host .wrapper.padding{padding:8px 16px;padding-bottom:calc(8px + var(--kirby-page-footer-safe-area-bottom, var(--kirby-safe-area-bottom)))}\\n\"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: PageFooterComponent, decorators: [{\n type: Component,\n args: [{ selector: 'kirby-page-footer', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<div class=\\\"wrapper\\\" [class.padding]=\\\"hasPadding\\\">\\n <ng-content></ng-content>\\n</div>\\n\", styles: [\"ion-item-option.primary{background-color:var(--kirby-primary);color:var(--kirby-primary-contrast)}ion-item-option.secondary{background-color:var(--kirby-secondary);color:var(--kirby-secondary-contrast)}ion-item-option.tertiary{background-color:var(--kirby-tertiary);color:var(--kirby-tertiary-contrast)}ion-item-option.success{background-color:var(--kirby-success);color:var(--kirby-success-contrast)}ion-item-option.warning{background-color:var(--kirby-warning);color:var(--kirby-warning-contrast)}ion-item-option.danger{background-color:var(--kirby-danger);color:var(--kirby-danger-contrast)}ion-item-option.white-overlay{background-color:var(--kirby-white-overlay);color:var(--kirby-white-overlay-contrast)}ion-item-option.light{background-color:var(--kirby-light);color:var(--kirby-light-contrast)}ion-item-option.medium{background-color:var(--kirby-medium);color:var(--kirby-medium-contrast)}ion-item-option.dark{background-color:var(--kirby-dark);color:var(--kirby-dark-contrast)}ion-item-option.dark-overlay{background-color:var(--kirby-dark-overlay);color:var(--kirby-dark-overlay-contrast)}:host{display:block;background-color:var(--kirby-white);--kirby-inputs-background-color: var(--kirby-dark-overlay);--kirby-inputs-background-color-hover: var(--kirby-dark-overlay-10);--kirby-inputs-background-color-active: var(--kirby-dark-overlay-20);--kirby-inputs-color: var(--kirby-black);--kirby-inputs-indicator-background-color: var(--kirby-black);--kirby-inputs-indicator-color: var(--kirby-white);--kirby-inputs-placeholder-color: var(--kirby-semi-dark);--kirby-inputs-elevation: none;--kirby-divider-color: var(--kirby-background-color)}:host .wrapper{position:relative;max-width:var(--page-content-max-width, 792px);margin:0 auto;padding-bottom:var(--kirby-page-footer-safe-area-bottom, var(--kirby-safe-area-bottom))}:host .wrapper.padding{padding:8px 16px;padding-bottom:calc(8px + var(--kirby-page-footer-safe-area-bottom, var(--kirby-safe-area-bottom)))}\\n\"] }]\n }], ctorParameters: () => [{ type: i1.PageComponent, decorators: [{\n type: Optional\n }, {\n type: SkipSelf\n }] }, { type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { hasPadding: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1mb290ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFnZS9zcmMvcGFnZS1mb290ZXIvcGFnZS1mb290ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcGFnZS9zcmMvcGFnZS1mb290ZXIvcGFnZS1mb290ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsS0FBSyxFQUVMLFFBQVEsRUFFUixRQUFRLEdBQ1QsTUFBTSxlQUFlLENBQUM7OztBQVV2QixNQUFNLE9BQU8sbUJBQW1CO0lBSTlCLFlBQ2tDLGFBQTRCLEVBQ3BELFdBQXVCLEVBQ3ZCLFFBQW1CO1FBRkssa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDcEQsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFDdkIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUw3QixlQUFVLEdBQVksSUFBSSxDQUFDO1FBT3pCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7UUFDcEUsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDOUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFDNUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQzlCLElBQUksQ0FDTCxDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztJQUNoRCxDQUFDO2tJQXpCVSxtQkFBbUI7c0hBQW5CLG1CQUFtQixtSENuQmhDLCtGQUdBOzs0RkRnQmEsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLG1CQUFtQixtQkFHWix1QkFBdUIsQ0FBQyxNQUFNOzswQkFPNUMsUUFBUTs7MEJBQUksUUFBUTs7c0JBSnRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPcHRpb25hbCxcbiAgUmVuZGVyZXIyLFxuICBTa2lwU2VsZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFBhZ2VDb21wb25lbnQgfSBmcm9tICcuLi9wYWdlLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2tpcmJ5LXBhZ2UtZm9vdGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BhZ2UtZm9vdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcGFnZS1mb290ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VGb290ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBASW5wdXQoKVxuICBoYXNQYWRkaW5nOiBib29sZWFuID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBwcml2YXRlIHBhZ2VDb21wb25lbnQ6IFBhZ2VDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBob3N0RWxlbWVudDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjJcbiAgKSB7XG4gICAgaWYgKCFwYWdlQ29tcG9uZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhZ2UgZm9vdGVyIG11c3QgcmVzaWRlIGluc2lkZSBvZiBhIEtpcmJ5IHBhZ2UnKTtcbiAgICB9XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICB0aGlzLnBhZ2VDb21wb25lbnQudGFiQmFyQm90dG9tSGlkZGVuID0gZmFsc2U7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZChcbiAgICAgIHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LFxuICAgICAgdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2VDb21wb25lbnQudGFiQmFyQm90dG9tSGlkZGVuID0gZmFsc2U7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ3cmFwcGVyXCIgW2NsYXNzLnBhZGRpbmddPVwiaGFzUGFkZGluZ1wiPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Rpdj5cbiJdfQ==","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SpinnerModule } from '@kirbydesign/designsystem/spinner';\nimport { FitHeadingDirective } from '@kirbydesign/designsystem/shared';\nimport { HeaderModule } from '@kirbydesign/designsystem/header';\nimport { IonBackButton, IonButtons, IonContent, IonFooter, IonHeader, IonRefresher, IonTitle, IonToolbar, } from '@ionic/angular/standalone';\nimport { PageFooterComponent } from './page-footer/page-footer.component';\nimport { PageActionsComponent, PageActionsDirective, PageComponent, PageContentComponent, PageContentDirective, PageProgressComponent, PageStickyContentDirective, PageSubtitleDirective, PageTitleComponent, PageTitleDirective, PageToolbarTitleDirective, } from './page.component';\nimport * as i0 from \"@angular/core\";\nexport class PageModule {\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: PageModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.13\", ngImport: i0, type: PageModule, imports: [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], exports: [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 /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: PageModule, imports: [CommonModule,\n SpinnerModule,\n HeaderModule,\n IonHeader,\n IonToolbar,\n IonButtons,\n IonBackButton,\n IonContent,\n IonTitle,\n IonRefresher,\n IonFooter,\n PageComponent] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: PageModule, decorators: [{\n type: NgModule,\n args: [{\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 }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWdlL3NyYy9wYWdlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2hFLE9BQU8sRUFDTCxhQUFhLEVBQ2IsVUFBVSxFQUNWLFVBQVUsRUFDVixTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksRUFDWixRQUFRLEVBQ1IsVUFBVSxHQUNYLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDMUUsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIscUJBQXFCLEVBQ3JCLDBCQUEwQixFQUMxQixxQkFBcUIsRUFDckIsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQix5QkFBeUIsR0FDMUIsTUFBTSxrQkFBa0IsQ0FBQzs7QUE2QzFCLE1BQU0sT0FBTyxVQUFVO2tJQUFWLFVBQVU7bUlBQVYsVUFBVSxZQXpDbkIsWUFBWTtZQUNaLG1CQUFtQjtZQUNuQixhQUFhO1lBQ2IsWUFBWTtZQUNaLFNBQVM7WUFDVCxVQUFVO1lBQ1YsVUFBVTtZQUNWLGFBQWE7WUFDYixVQUFVO1lBQ1YsUUFBUTtZQUNSLFlBQVk7WUFDWixTQUFTO1lBQ1QsYUFBYTtZQUNiLG9CQUFvQjtZQUNwQixvQkFBb0I7WUFDcEIsb0JBQW9CO1lBQ3BCLG1CQUFtQjtZQUNuQixvQkFBb0I7WUFDcEIscUJBQXFCO1lBQ3JCLGtCQUFrQjtZQUNsQixrQkFBa0I7WUFDbEIscUJBQXFCO1lBQ3JCLHlCQUF5QjtZQUN6QiwwQkFBMEIsYUFHMUIsYUFBYTtZQUNiLG9CQUFvQjtZQUNwQixvQkFBb0I7WUFDcEIsb0JBQW9CO1lBQ3BCLG1CQUFtQjtZQUNuQixvQkFBb0I7WUFDcEIscUJBQXFCO1lBQ3JCLGtCQUFrQjtZQUNsQixrQkFBa0I7WUFDbEIscUJBQXFCO1lBQ3JCLHlCQUF5QjtZQUN6QixtQkFBbUI7WUFDbkIsMEJBQTBCO21JQUdqQixVQUFVLFlBekNuQixZQUFZO1lBRVosYUFBYTtZQUNiLFlBQVk7WUFDWixTQUFTO1lBQ1QsVUFBVTtZQUNWLFVBQVU7WUFDVixhQUFhO1lBQ2IsVUFBVTtZQUNWLFFBQVE7WUFDUixZQUFZO1lBQ1osU0FBUztZQUNULGFBQWE7OzRGQTZCSixVQUFVO2tCQTNDdEIsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLGFBQWE7d0JBQ2IsWUFBWTt3QkFDWixTQUFTO3dCQUNULFVBQVU7d0JBQ1YsVUFBVTt3QkFDVixhQUFhO3dCQUNiLFVBQVU7d0JBQ1YsUUFBUTt3QkFDUixZQUFZO3dCQUNaLFNBQVM7d0JBQ1QsYUFBYTt3QkFDYixvQkFBb0I7d0JBQ3BCLG9CQUFvQjt3QkFDcEIsb0JBQW9CO3dCQUNwQixtQkFBbUI7d0JBQ25CLG9CQUFvQjt3QkFDcEIscUJBQXFCO3dCQUNyQixrQkFBa0I7d0JBQ2xCLGtCQUFrQjt3QkFDbEIscUJBQXFCO3dCQUNyQix5QkFBeUI7d0JBQ3pCLDBCQUEwQjtxQkFDM0I7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLGFBQWE7d0JBQ2Isb0JBQW9CO3dCQUNwQixvQkFBb0I7d0JBQ3BCLG9CQUFvQjt3QkFDcEIsbUJBQW1CO3dCQUNuQixvQkFBb0I7d0JBQ3BCLHFCQUFxQjt3QkFDckIsa0JBQWtCO3dCQUNsQixrQkFBa0I7d0JBQ2xCLHFCQUFxQjt3QkFDckIseUJBQXlCO3dCQUN6QixtQkFBbUI7d0JBQ25CLDBCQUEwQjtxQkFDM0I7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNwaW5uZXJNb2R1bGUgfSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL3NwaW5uZXInO1xuaW1wb3J0IHsgRml0SGVhZGluZ0RpcmVjdGl2ZSB9IGZyb20gJ0BraXJieWRlc2lnbi9kZXNpZ25zeXN0ZW0vc2hhcmVkJztcblxuaW1wb3J0IHsgSGVhZGVyTW9kdWxlIH0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9oZWFkZXInO1xuaW1wb3J0IHtcbiAgSW9uQmFja0J1dHRvbixcbiAgSW9uQnV0dG9ucyxcbiAgSW9uQ29udGVudCxcbiAgSW9uRm9vdGVyLFxuICBJb25IZWFkZXIsXG4gIElvblJlZnJlc2hlcixcbiAgSW9uVGl0bGUsXG4gIElvblRvb2xiYXIsXG59IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgUGFnZUZvb3RlckNvbXBvbmVudCB9IGZyb20gJy4vcGFnZS1mb290ZXIvcGFnZS1mb290ZXIuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIFBhZ2VBY3Rpb25zQ29tcG9uZW50LFxuICBQYWdlQWN0aW9uc0RpcmVjdGl2ZSxcbiAgUGFnZUNvbXBvbmVudCxcbiAgUGFnZUNvbnRlbnRDb21wb25lbnQsXG4gIFBhZ2VDb250ZW50RGlyZWN0aXZlLFxuICBQYWdlUHJvZ3Jlc3NDb21wb25lbnQsXG4gIFBhZ2VTdGlja3lDb250ZW50RGlyZWN0aXZlLFxuICBQYWdlU3VidGl0bGVEaXJlY3RpdmUsXG4gIFBhZ2VUaXRsZUNvbXBvbmVudCxcbiAgUGFnZVRpdGxlRGlyZWN0aXZlLFxuICBQYWdlVG9vbGJhclRpdGxlRGlyZWN0aXZlLFxufSBmcm9tICcuL3BhZ2UuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGaXRIZWFkaW5nRGlyZWN0aXZlLFxuICAgIFNwaW5uZXJNb2R1bGUsXG4gICAgSGVhZGVyTW9kdWxlLFxuICAgIElvbkhlYWRlcixcbiAgICBJb25Ub29sYmFyLFxuICAgIElvbkJ1dHRvbnMsXG4gICAgSW9uQmFja0J1dHRvbixcbiAgICBJb25Db250ZW50LFxuICAgIElvblRpdGxlLFxuICAgIElvblJlZnJlc2hlcixcbiAgICBJb25Gb290ZXIsXG4gICAgUGFnZUNvbXBvbmVudCxcbiAgICBQYWdlQWN0aW9uc0NvbXBvbmVudCxcbiAgICBQYWdlQWN0aW9uc0RpcmVjdGl2ZSxcbiAgICBQYWdlQ29udGVudENvbXBvbmVudCxcbiAgICBQYWdlRm9vdGVyQ29tcG9uZW50LFxuICAgIFBhZ2VDb250ZW50RGlyZWN0aXZlLFxuICAgIFBhZ2VQcm9ncmVzc0NvbXBvbmVudCxcbiAgICBQYWdlVGl0bGVDb21wb25lbnQsXG4gICAgUGFnZVRpdGxlRGlyZWN0aXZlLFxuICAgIFBhZ2VTdWJ0aXRsZURpcmVjdGl2ZSxcbiAgICBQYWdlVG9vbGJhclRpdGxlRGlyZWN0aXZlLFxuICAgIFBhZ2VTdGlja3lDb250ZW50RGlyZWN0aXZlLFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgUGFnZUNvbXBvbmVudCxcbiAgICBQYWdlQWN0aW9uc0NvbXBvbmVudCxcbiAgICBQYWdlQWN0aW9uc0RpcmVjdGl2ZSxcbiAgICBQYWdlQ29udGVudENvbXBvbmVudCxcbiAgICBQYWdlRm9vdGVyQ29tcG9uZW50LFxuICAgIFBhZ2VDb250ZW50RGlyZWN0aXZlLFxuICAgIFBhZ2VQcm9ncmVzc0NvbXBvbmVudCxcbiAgICBQYWdlVGl0bGVDb21wb25lbnQsXG4gICAgUGFnZVRpdGxlRGlyZWN0aXZlLFxuICAgIFBhZ2VTdWJ0aXRsZURpcmVjdGl2ZSxcbiAgICBQYWdlVG9vbGJhclRpdGxlRGlyZWN0aXZlLFxuICAgIEZpdEhlYWRpbmdEaXJlY3RpdmUsXG4gICAgUGFnZVN0aWNreUNvbnRlbnREaXJlY3RpdmUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VNb2R1bGUge31cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './public_api';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2lyYnlkZXNpZ24tZGVzaWduc3lzdGVtLXBhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWdlL3NyYy9raXJieWRlc2lnbi1kZXNpZ25zeXN0ZW0tcGFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpY19hcGknO1xuIl19"],"names":["i1.PageComponent"],"mappings":"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"}
1
+ {"version":3,"file":"kirbydesign-designsystem-page.mjs","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","../../page/src/kirbydesign-designsystem-page.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} from '@ionic/angular/standalone';\nimport { Title } from '@angular/platform-browser';\nimport type { ScrollDetail } from '@ionic/core';\nimport { componentOnReady } from '@ionic/core';\nimport { selectedTabClickEvent, TabsComponent } from '@kirbydesign/designsystem/tabs';\nimport { 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})\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})\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})\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})\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$ = this.content.ionScroll.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\" [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/standalone';\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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.PageComponent"],"mappings":"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"}