@kirbydesign/designsystem 6.0.3 → 6.2.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.
- package/README.md +7 -0
- package/esm2020/lib/components/chart/configs/annotations.config.mjs +1 -1
- package/esm2020/lib/components/dropdown/dropdown.component.mjs +48 -29
- package/esm2020/lib/components/fab-sheet/fab-sheet.component.mjs +13 -8
- package/esm2020/lib/components/flag/flag.component.mjs +2 -2
- package/esm2020/lib/components/form-field/input/input.component.mjs +2 -2
- package/esm2020/lib/components/form-field/textarea/textarea.component.mjs +2 -2
- package/esm2020/lib/components/icon/kirby-icon-settings.mjs +7 -1
- package/esm2020/lib/components/modal/footer/modal-footer.component.mjs +13 -8
- package/esm2020/lib/components/modal/modal-wrapper/modal-elements-mover.delegate.mjs +62 -0
- package/esm2020/lib/components/modal/modal-wrapper/modal-wrapper.component.mjs +66 -120
- package/esm2020/lib/components/modal/services/modal.interfaces.mjs +39 -1
- package/esm2020/lib/components/page/page.component.mjs +50 -22
- package/esm2020/lib/components/segmented-control/segmented-control.component.mjs +10 -5
- package/esm2020/lib/components/slide-button/slide-button.component.mjs +2 -2
- package/esm2020/testing-base/lib/components/mock.page.component.mjs +5 -2
- package/fesm2015/kirbydesign-designsystem-testing-base.mjs +4 -1
- package/fesm2015/kirbydesign-designsystem-testing-base.mjs.map +1 -1
- package/fesm2015/kirbydesign-designsystem.mjs +293 -180
- package/fesm2015/kirbydesign-designsystem.mjs.map +1 -1
- package/fesm2020/kirbydesign-designsystem-testing-base.mjs +4 -1
- package/fesm2020/kirbydesign-designsystem-testing-base.mjs.map +1 -1
- package/fesm2020/kirbydesign-designsystem.mjs +286 -180
- package/fesm2020/kirbydesign-designsystem.mjs.map +1 -1
- package/icons/svg/car.svg +5 -0
- package/icons/svg/coinstack.svg +5 -0
- package/icons/svg/contact.svg +5 -0
- package/icons/svg/insurance.svg +5 -0
- package/icons/svg/recurring.svg +5 -0
- package/icons/svg/salary.svg +5 -0
- package/lib/components/avatar/avatar.component.d.ts +1 -1
- package/lib/components/chart/configs/annotations.config.d.ts +1 -1
- package/lib/components/dropdown/dropdown.component.d.ts +9 -5
- package/lib/components/fab-sheet/fab-sheet.component.d.ts +3 -2
- package/lib/components/modal/footer/modal-footer.component.d.ts +5 -2
- package/lib/components/modal/modal-wrapper/modal-elements-mover.delegate.d.ts +14 -0
- package/lib/components/modal/modal-wrapper/modal-wrapper.component.d.ts +13 -16
- package/lib/components/modal/services/modal.interfaces.d.ts +22 -0
- package/lib/components/page/page.component.d.ts +11 -6
- package/lib/components/segmented-control/segmented-control.component.d.ts +5 -1
- package/package.json +2 -2
- package/readme.md +5 -37
- package/testing-base/lib/components/mock.page.component.d.ts +2 -1
- package/scss/base/_link.scss +0 -1
- package/scss/interaction-state/_active.scss +0 -1
- package/scss/interaction-state/_focus.scss +0 -1
- package/scss/interaction-state/_hover.scss +0 -1
- package/scss/interaction-state/_index.scss +0 -1
- package/scss/interaction-state/_interaction-state.utilities.scss +0 -1
- package/scss/interaction-state/_layer.scss +0 -1
- package/scss/opt-out/_index.scss +0 -1
- package/scss/opt-out/_link.scss +0 -1
- package/src/lib/components/icon/README.md +0 -16
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { DesignTokenHelper, ColorHelper, capitalizeFirstLetter } from '@kirbydesign/core';
|
|
2
2
|
export { ColorHelper, DesignTokenHelper, camelToKebabCase, capitalizeFirstLetter, kebabToCamelCase, kebabToTitleCase } from '@kirbydesign/core';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { Directive, Injectable, Component, ChangeDetectionStrategy, HostBinding, Input, InjectionToken, Injector, HostListener, ElementRef, ContentChild, RendererStyleFlags2, ViewChildren, ViewChild, EventEmitter, Output, ContentChildren,
|
|
4
|
+
import { Directive, Injectable, Component, ChangeDetectionStrategy, HostBinding, Input, Optional, InjectionToken, Injector, HostListener, ElementRef, ContentChild, RendererStyleFlags2, ViewChildren, ViewChild, EventEmitter, Output, ContentChildren, Inject, NgModule, ChangeDetectorRef, NgZone, LOCALE_ID, forwardRef, TemplateRef, Pipe, SkipSelf, APP_INITIALIZER } from '@angular/core';
|
|
5
5
|
import { trigger, state, style, transition, animate } from '@angular/animations';
|
|
6
6
|
import * as i1 from '@ionic/angular';
|
|
7
|
-
import { IonContent, IonHeader, IonToolbar, IonTitle, IonApp, IonicModule, IonRadio, IonFabButton, IonItemSliding, IonList, IonTabs, IonFooter } from '@ionic/angular';
|
|
7
|
+
import { IonContent, IonHeader, IonToolbar, IonTitle, IonApp, IonicModule, IonRadio, IonFabButton, IonItemSliding, IonList, IonTabs, IonFooter, IonBackButtonDelegate } from '@ionic/angular';
|
|
8
8
|
export { IonRouterOutlet, NavController } from '@ionic/angular';
|
|
9
9
|
import * as i2 from '@angular/common';
|
|
10
10
|
import { CommonModule, formatNumber, getLocaleDateFormat, FormatWidth, getLocaleNumberSymbol, NumberSymbol, DOCUMENT } from '@angular/common';
|
|
@@ -77,11 +77,14 @@ const kirbyIconSettings = {
|
|
|
77
77
|
{ name: 'backspace', svg: 'assets/kirby/icons/svg/backspace.svg' },
|
|
78
78
|
{ name: 'calendar', svg: 'assets/kirby/icons/svg/calendar.svg' },
|
|
79
79
|
{ name: 'camera', svg: 'assets/kirby/icons/svg/camera.svg' },
|
|
80
|
+
{ name: 'car', svg: 'assets/kirby/icons/svg/car.svg' },
|
|
80
81
|
{ name: 'checkbox-outline', svg: 'assets/kirby/icons/svg/checkbox-outline.svg' },
|
|
81
82
|
{ name: 'checkbox', svg: 'assets/kirby/icons/svg/checkbox.svg' },
|
|
82
83
|
{ name: 'checkmark-selected', svg: 'assets/kirby/icons/svg/checkmark-selected.svg' },
|
|
83
84
|
{ name: 'close', svg: 'assets/kirby/icons/svg/close.svg' },
|
|
84
85
|
{ name: 'cog', svg: 'assets/kirby/icons/svg/cog.svg' },
|
|
86
|
+
{ name: 'coinstack', svg: 'assets/kirby/icons/svg/coinstack.svg' },
|
|
87
|
+
{ name: 'contact', svg: 'assets/kirby/icons/svg/contact.svg' },
|
|
85
88
|
{ name: 'copy', svg: 'assets/kirby/icons/svg/copy.svg' },
|
|
86
89
|
{ name: 'flag', svg: 'assets/kirby/icons/svg/flag.svg' },
|
|
87
90
|
{ name: 'edit', svg: 'assets/kirby/icons/svg/edit.svg' },
|
|
@@ -94,6 +97,7 @@ const kirbyIconSettings = {
|
|
|
94
97
|
{ name: 'inbox', svg: 'assets/kirby/icons/svg/inbox.svg' },
|
|
95
98
|
{ name: 'inbox-outline', svg: 'assets/kirby/icons/svg/inbox-outline.svg' },
|
|
96
99
|
{ name: 'information', svg: 'assets/kirby/icons/svg/information.svg' },
|
|
100
|
+
{ name: 'insurance', svg: 'assets/kirby/icons/svg/insurance.svg' },
|
|
97
101
|
{ name: 'investment', svg: 'assets/kirby/icons/svg/investment.svg' },
|
|
98
102
|
{ name: 'kirby', svg: 'assets/kirby/icons/svg/kirby.svg' },
|
|
99
103
|
{ name: 'link', svg: 'assets/kirby/icons/svg/link.svg' },
|
|
@@ -108,6 +112,8 @@ const kirbyIconSettings = {
|
|
|
108
112
|
{ name: 'person-outline', svg: 'assets/kirby/icons/svg/person-outline.svg' },
|
|
109
113
|
{ name: 'person', svg: 'assets/kirby/icons/svg/person.svg' },
|
|
110
114
|
{ name: 'qr', svg: 'assets/kirby/icons/svg/QR.svg' },
|
|
115
|
+
{ name: 'recurring', svg: 'assets/kirby/icons/svg/recurring.svg' },
|
|
116
|
+
{ name: 'salary', svg: 'assets/kirby/icons/svg/salary.svg' },
|
|
111
117
|
{ name: 'search', svg: 'assets/kirby/icons/svg/search.svg' },
|
|
112
118
|
{ name: 'share', svg: 'assets/kirby/icons/svg/share.svg' },
|
|
113
119
|
{ name: 'sort', svg: 'assets/kirby/icons/svg/sort.svg' },
|
|
@@ -286,6 +292,44 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImpor
|
|
|
286
292
|
|
|
287
293
|
class Modal {
|
|
288
294
|
}
|
|
295
|
+
var ModalElementType;
|
|
296
|
+
(function (ModalElementType) {
|
|
297
|
+
ModalElementType[ModalElementType["PAGE_PROGRESS"] = 0] = "PAGE_PROGRESS";
|
|
298
|
+
ModalElementType[ModalElementType["FOOTER"] = 1] = "FOOTER";
|
|
299
|
+
ModalElementType[ModalElementType["TITLE"] = 2] = "TITLE";
|
|
300
|
+
})(ModalElementType || (ModalElementType = {}));
|
|
301
|
+
class ModalElementsAdvertiser {
|
|
302
|
+
}
|
|
303
|
+
class ModalElementComponent {
|
|
304
|
+
constructor(modalElementType, elementRef, modalElementsAdvertiser) {
|
|
305
|
+
this.modalElementType = modalElementType;
|
|
306
|
+
this.elementRef = elementRef;
|
|
307
|
+
this.modalElementsAdvertiser = modalElementsAdvertiser;
|
|
308
|
+
}
|
|
309
|
+
get isContainedInModal() {
|
|
310
|
+
return this.modalElementsAdvertiser !== null;
|
|
311
|
+
}
|
|
312
|
+
ngAfterViewInit() {
|
|
313
|
+
if (this.isContainedInModal) {
|
|
314
|
+
this.modalElementsAdvertiser.addModalElement(this.modalElementType, this.elementRef);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
ngOnDestroy() {
|
|
318
|
+
if (this.isContainedInModal) {
|
|
319
|
+
this.modalElementsAdvertiser.removeModalElement(this.modalElementType, this.elementRef);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
/** @nocollapse */ ModalElementComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: ModalElementComponent, deps: [{ token: ModalElementType }, { token: i0.ElementRef }, { token: ModalElementsAdvertiser, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
324
|
+
/** @nocollapse */ ModalElementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: ModalElementComponent, selector: "ng-component", ngImport: i0, template: '', isInline: true });
|
|
325
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: ModalElementComponent, decorators: [{
|
|
326
|
+
type: Component,
|
|
327
|
+
args: [{ template: '' }]
|
|
328
|
+
}], ctorParameters: function () {
|
|
329
|
+
return [{ type: ModalElementType }, { type: i0.ElementRef }, { type: ModalElementsAdvertiser, decorators: [{
|
|
330
|
+
type: Optional
|
|
331
|
+
}] }];
|
|
332
|
+
} });
|
|
289
333
|
|
|
290
334
|
const COMPONENT_PROPS = new InjectionToken('componentProps');
|
|
291
335
|
|
|
@@ -473,6 +517,67 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImpor
|
|
|
473
517
|
args: [IconComponent, { read: ElementRef }]
|
|
474
518
|
}] } });
|
|
475
519
|
|
|
520
|
+
/*
|
|
521
|
+
The ModalWrapperComponent class was growing large.
|
|
522
|
+
|
|
523
|
+
Hence the functions responsible for moving modal elements around
|
|
524
|
+
has been encapsulated in this class.
|
|
525
|
+
*/
|
|
526
|
+
class ModalElementsMoverDelegate {
|
|
527
|
+
constructor(renderer, elementRef) {
|
|
528
|
+
this.renderer = renderer;
|
|
529
|
+
this.elementRef = elementRef;
|
|
530
|
+
}
|
|
531
|
+
addFooter(footerElementRef) {
|
|
532
|
+
// Move the footer next to ion-content
|
|
533
|
+
this.moveChild(footerElementRef, this.elementRef);
|
|
534
|
+
}
|
|
535
|
+
removeFooter(footerElementRef) {
|
|
536
|
+
this.removeChild(footerElementRef);
|
|
537
|
+
}
|
|
538
|
+
addPageProgress(pageProgressElementRef, ionToolbarElement) {
|
|
539
|
+
this.moveChild(pageProgressElementRef, ionToolbarElement);
|
|
540
|
+
}
|
|
541
|
+
removePageProgress(pageProgressElementRef) {
|
|
542
|
+
this.removeChild(pageProgressElementRef);
|
|
543
|
+
}
|
|
544
|
+
/*
|
|
545
|
+
contentTitleElement & ionTitleElement has to be passed
|
|
546
|
+
as arguments to the method; not part of the constructor, as they
|
|
547
|
+
might reference completely different elements between calls.
|
|
548
|
+
|
|
549
|
+
For example in a multi-page routed modal where the elements are destroyed
|
|
550
|
+
and recreated.
|
|
551
|
+
*/
|
|
552
|
+
addTitle(titleElementRef, contentTitleElement, hasCollapsibleTitle, ionTitleElement) {
|
|
553
|
+
this.moveChild(titleElementRef, ionTitleElement);
|
|
554
|
+
// If title is collapsible append it to content area; required by ionic implementation.
|
|
555
|
+
if (hasCollapsibleTitle) {
|
|
556
|
+
const titleElementClone = titleElementRef.nativeElement.cloneNode(true);
|
|
557
|
+
this.moveChild(new ElementRef(titleElementClone), contentTitleElement);
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
removeTitle(titleElementRef, hasCollapsibleTitle, contentTitleElement) {
|
|
561
|
+
this.removeChild(titleElementRef);
|
|
562
|
+
if (hasCollapsibleTitle) {
|
|
563
|
+
const kirbyPageTitleElement = contentTitleElement.nativeElement.querySelector('kirby-page-title');
|
|
564
|
+
this.removeChild(new ElementRef(kirbyPageTitleElement));
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
moveChild(childElementRef, newParentElementRef) {
|
|
568
|
+
const child = childElementRef.nativeElement;
|
|
569
|
+
const newParent = newParentElementRef.nativeElement;
|
|
570
|
+
this.renderer.removeChild(child.parentElement, child);
|
|
571
|
+
this.renderer.appendChild(newParent, child);
|
|
572
|
+
}
|
|
573
|
+
removeChild(childElementRef, parentElement) {
|
|
574
|
+
const child = childElementRef.nativeElement;
|
|
575
|
+
if (!!child) {
|
|
576
|
+
this.renderer.removeChild(parentElement || child.parentElement, child);
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
|
|
476
581
|
/**
|
|
477
582
|
* Factory that creates a new ResizeObserver and allows us to stub it out in unit tests.
|
|
478
583
|
* @docs-private
|
|
@@ -568,7 +673,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImpor
|
|
|
568
673
|
}], ctorParameters: function () { return [{ type: WindowRef }]; } });
|
|
569
674
|
|
|
570
675
|
class ModalWrapperComponent {
|
|
571
|
-
constructor(injector, elementRef, renderer, zone, resizeObserverService, componentFactoryResolver, windowRef, platform) {
|
|
676
|
+
constructor(changeDetector, injector, elementRef, renderer, zone, resizeObserverService, componentFactoryResolver, windowRef, platform) {
|
|
677
|
+
this.changeDetector = changeDetector;
|
|
572
678
|
this.injector = injector;
|
|
573
679
|
this.elementRef = elementRef;
|
|
574
680
|
this.renderer = renderer;
|
|
@@ -593,13 +699,10 @@ class ModalWrapperComponent {
|
|
|
593
699
|
.pipe(debounceTime(this.VIEWPORT_RESIZE_DEBOUNCE_TIME));
|
|
594
700
|
this.destroy$ = new Subject();
|
|
595
701
|
this.willClose$ = this.ionModalWillDismiss.pipe(first());
|
|
596
|
-
this.
|
|
597
|
-
'KIRBY-MODAL-FOOTER': () => [this.elementRef.nativeElement],
|
|
598
|
-
'KIRBY-PAGE-TITLE': () => { var _a; return [this.ionTitleElement.nativeElement, (_a = this.contentTitle) === null || _a === void 0 ? void 0 : _a.nativeElement].filter((element) => element !== undefined); },
|
|
599
|
-
'KIRBY-PAGE-PROGRESS': () => [this.ionToolbarElement.nativeElement],
|
|
600
|
-
};
|
|
702
|
+
this._currentFooter = null;
|
|
601
703
|
this.setViewportHeight();
|
|
602
704
|
this.observeViewportResize();
|
|
705
|
+
this.modalElementsMoverDelegate = new ModalElementsMoverDelegate(renderer, elementRef);
|
|
603
706
|
}
|
|
604
707
|
get _hasCollapsibleTitle() {
|
|
605
708
|
var _a;
|
|
@@ -608,11 +711,15 @@ class ModalWrapperComponent {
|
|
|
608
711
|
set scrollDisabled(disabled) {
|
|
609
712
|
this.ionContent.scrollY = !disabled;
|
|
610
713
|
}
|
|
611
|
-
get
|
|
612
|
-
|
|
613
|
-
|
|
714
|
+
get contentTitleElement() {
|
|
715
|
+
/*
|
|
716
|
+
contentTitleElement has ngIf directive dependent on _hasCollapsibleTitle; trigger CD to make sure element has been queried.
|
|
717
|
+
Solution taken from: https://danieleyassu.com/angular-viewchild-and-ngif/
|
|
718
|
+
*/
|
|
719
|
+
if (!this._contentTitleElement && this._hasCollapsibleTitle) {
|
|
720
|
+
this.changeDetector.detectChanges();
|
|
614
721
|
}
|
|
615
|
-
return this.
|
|
722
|
+
return this._contentTitleElement;
|
|
616
723
|
}
|
|
617
724
|
get intersectionObserver() {
|
|
618
725
|
if (!this._intersectionObserver) {
|
|
@@ -635,6 +742,43 @@ class ModalWrapperComponent {
|
|
|
635
742
|
parent: this.injector,
|
|
636
743
|
});
|
|
637
744
|
}
|
|
745
|
+
set currentFooter(footer) {
|
|
746
|
+
if (footer !== null) {
|
|
747
|
+
this.resizeObserverService.observe(footer, (entry) => {
|
|
748
|
+
const [property, pixelValue] = [
|
|
749
|
+
'--footer-height',
|
|
750
|
+
`${Math.floor(entry.contentRect.height)}px`,
|
|
751
|
+
];
|
|
752
|
+
this.setCssVar(this.elementRef.nativeElement, property, pixelValue);
|
|
753
|
+
});
|
|
754
|
+
}
|
|
755
|
+
this._currentFooter = footer;
|
|
756
|
+
}
|
|
757
|
+
get currentFooter() {
|
|
758
|
+
return this._currentFooter;
|
|
759
|
+
}
|
|
760
|
+
addModalElement(type, modalElement) {
|
|
761
|
+
const addModalElementFn = {
|
|
762
|
+
[ModalElementType.FOOTER]: () => {
|
|
763
|
+
this.modalElementsMoverDelegate.addFooter(modalElement);
|
|
764
|
+
this.currentFooter = modalElement.nativeElement;
|
|
765
|
+
},
|
|
766
|
+
[ModalElementType.TITLE]: () => this.modalElementsMoverDelegate.addTitle(modalElement, this.contentTitleElement, this._hasCollapsibleTitle, this.ionTitleElement),
|
|
767
|
+
[ModalElementType.PAGE_PROGRESS]: () => this.modalElementsMoverDelegate.addPageProgress(modalElement, this.ionToolbarElement),
|
|
768
|
+
}[type];
|
|
769
|
+
addModalElementFn();
|
|
770
|
+
}
|
|
771
|
+
removeModalElement(type, modalElement) {
|
|
772
|
+
const removeModalElementFn = {
|
|
773
|
+
[ModalElementType.FOOTER]: () => {
|
|
774
|
+
this.modalElementsMoverDelegate.removeFooter(modalElement);
|
|
775
|
+
this.currentFooter = null;
|
|
776
|
+
},
|
|
777
|
+
[ModalElementType.TITLE]: () => this.modalElementsMoverDelegate.removeTitle(modalElement, this._hasCollapsibleTitle, this.contentTitleElement),
|
|
778
|
+
[ModalElementType.PAGE_PROGRESS]: () => this.modalElementsMoverDelegate.removePageProgress(modalElement),
|
|
779
|
+
}[type];
|
|
780
|
+
removeModalElementFn();
|
|
781
|
+
}
|
|
638
782
|
initializeResizeModalToModalWrapper() {
|
|
639
783
|
if (this.config.flavor === 'drawer' && this.config.interactWithBackground) {
|
|
640
784
|
merge(this.ionModalDidPresent, this.viewportResize$)
|
|
@@ -671,12 +815,9 @@ class ModalWrapperComponent {
|
|
|
671
815
|
return;
|
|
672
816
|
siblingModalRouteActivated$.pipe(takeUntil(this.willClose$)).subscribe((route) => {
|
|
673
817
|
if (this.routerOutlet.isActivated) {
|
|
674
|
-
this.mutationObserver.disconnect();
|
|
675
818
|
this.routerOutlet.deactivate();
|
|
676
|
-
this.clearEmbeddedElements();
|
|
677
819
|
}
|
|
678
820
|
this.routerOutlet.activateWith(route, this.componentFactoryResolver);
|
|
679
|
-
this.checkForEmbeddedElements();
|
|
680
821
|
});
|
|
681
822
|
}
|
|
682
823
|
patchScrollElementSize() {
|
|
@@ -704,11 +845,6 @@ class ModalWrapperComponent {
|
|
|
704
845
|
if (this.toolbarButtonsQuery) {
|
|
705
846
|
this.toolbarButtons = this.toolbarButtonsQuery.map((buttonRef) => buttonRef.nativeElement);
|
|
706
847
|
}
|
|
707
|
-
this.checkForEmbeddedElements();
|
|
708
|
-
}
|
|
709
|
-
checkForEmbeddedElements() {
|
|
710
|
-
this.moveEmbeddedElements();
|
|
711
|
-
this.observeEmbeddedElements();
|
|
712
848
|
}
|
|
713
849
|
observeHeaderResize() {
|
|
714
850
|
this.resizeObserverService.observe(this.ionHeaderElement.nativeElement, (entry) => {
|
|
@@ -716,17 +852,6 @@ class ModalWrapperComponent {
|
|
|
716
852
|
this.setCssVar(this.elementRef.nativeElement, property, pixelValue);
|
|
717
853
|
});
|
|
718
854
|
}
|
|
719
|
-
moveEmbeddedElements() {
|
|
720
|
-
const parentElement = this.getEmbeddedComponentElement();
|
|
721
|
-
if (parentElement) {
|
|
722
|
-
Object.entries(this.elementToParentMap).forEach(([tagName, getNewParent]) => {
|
|
723
|
-
const embeddedElement = parentElement.querySelector(tagName);
|
|
724
|
-
if (embeddedElement) {
|
|
725
|
-
this.moveChild(embeddedElement, getNewParent());
|
|
726
|
-
}
|
|
727
|
-
});
|
|
728
|
-
}
|
|
729
|
-
}
|
|
730
855
|
listenForIonModalDidPresent() {
|
|
731
856
|
if (this.ionModalElement) {
|
|
732
857
|
this.ionModalElement.addEventListener('ionModalDidPresent', () => {
|
|
@@ -825,7 +950,7 @@ class ModalWrapperComponent {
|
|
|
825
950
|
this.toggleCssClass(this.elementRef.nativeElement, 'keyboard-visible', keyboardHeight > 0);
|
|
826
951
|
const keyboardOverlap = this.getKeyboardOverlap(keyboardHeight, this.elementRef.nativeElement);
|
|
827
952
|
let snapFooterToKeyboard = false;
|
|
828
|
-
const embeddedFooterElement = this.
|
|
953
|
+
const embeddedFooterElement = this.currentFooter;
|
|
829
954
|
if (embeddedFooterElement) {
|
|
830
955
|
this.setCssVar(embeddedFooterElement, '--keyboard-offset', `${keyboardOverlap}px`);
|
|
831
956
|
snapFooterToKeyboard = embeddedFooterElement.classList.contains('snap-to-keyboard');
|
|
@@ -884,86 +1009,6 @@ class ModalWrapperComponent {
|
|
|
884
1009
|
}
|
|
885
1010
|
}
|
|
886
1011
|
}
|
|
887
|
-
clearEmbeddedElements() {
|
|
888
|
-
Object.entries(this.elementToParentMap).forEach(([tagName, getParents]) => {
|
|
889
|
-
const newParents = getParents();
|
|
890
|
-
newParents.forEach((newParent) => {
|
|
891
|
-
const embeddedElement = newParent.querySelector(`:scope > ${tagName}`);
|
|
892
|
-
this.removeChild(embeddedElement);
|
|
893
|
-
});
|
|
894
|
-
});
|
|
895
|
-
}
|
|
896
|
-
/* TODO: Rewrite to make this function independent of element order.
|
|
897
|
-
See: https://github.com/kirbydesign/designsystem/issues/2096
|
|
898
|
-
*/
|
|
899
|
-
getEmbeddedComponentElement() {
|
|
900
|
-
const contentElementChildren = Array.from(this.ionContentElement.nativeElement.children).reverse(); // Reverse makes it easier to retrieve the last children in the list
|
|
901
|
-
const embeddedComponentElement = !!this.config.modalRoute
|
|
902
|
-
? contentElementChildren[0]
|
|
903
|
-
: contentElementChildren[1];
|
|
904
|
-
/*
|
|
905
|
-
As ModalConfig.component has type 'any' all values are valid for component;
|
|
906
|
-
explicitly handle the case where no embedded component element is found due to
|
|
907
|
-
this.
|
|
908
|
-
*/
|
|
909
|
-
if (!embeddedComponentElement)
|
|
910
|
-
return null;
|
|
911
|
-
return embeddedComponentElement;
|
|
912
|
-
}
|
|
913
|
-
getEmbeddedFooterElement() {
|
|
914
|
-
return this.elementRef.nativeElement.querySelector('kirby-modal-footer');
|
|
915
|
-
}
|
|
916
|
-
moveChild(child, newParents) {
|
|
917
|
-
this.renderer.removeChild(child.parentElement, child);
|
|
918
|
-
newParents.forEach((newParent, index) => {
|
|
919
|
-
const childToAppend = index > 0 ? child.cloneNode(true) : child;
|
|
920
|
-
this.renderer.appendChild(newParent, childToAppend);
|
|
921
|
-
// Append adds child as last element of parent; therefore retrieve with lastElementChild
|
|
922
|
-
const childElement = newParent.lastElementChild;
|
|
923
|
-
if (childElement.tagName === 'KIRBY-MODAL-FOOTER') {
|
|
924
|
-
this.resizeObserverService.observe(childElement, (entry) => {
|
|
925
|
-
const [property, pixelValue] = [
|
|
926
|
-
'--footer-height',
|
|
927
|
-
`${Math.floor(entry.contentRect.height)}px`,
|
|
928
|
-
];
|
|
929
|
-
this.setCssVar(this.elementRef.nativeElement, property, pixelValue);
|
|
930
|
-
});
|
|
931
|
-
}
|
|
932
|
-
});
|
|
933
|
-
}
|
|
934
|
-
removeChild(child) {
|
|
935
|
-
if (!!child) {
|
|
936
|
-
this.renderer.removeChild(child.parentElement, child);
|
|
937
|
-
}
|
|
938
|
-
}
|
|
939
|
-
observeEmbeddedElements() {
|
|
940
|
-
const parentElement = this.getEmbeddedComponentElement();
|
|
941
|
-
if (parentElement === null)
|
|
942
|
-
return; // Mute observe warning when parentElement is null
|
|
943
|
-
this.mutationObserver.observe(parentElement, {
|
|
944
|
-
childList: true, // Listen for addition or removal of child nodes
|
|
945
|
-
});
|
|
946
|
-
}
|
|
947
|
-
createEmbeddedElementsMutationObserver() {
|
|
948
|
-
const observedElements = Object.keys(this.elementToParentMap);
|
|
949
|
-
const callback = (mutations) => {
|
|
950
|
-
const addedNodes = mutations
|
|
951
|
-
.filter((mutation) => mutation.type === 'childList') // Filter for mutation to the tree of nodes
|
|
952
|
-
.map((mutation) => {
|
|
953
|
-
// Only check for addedNodes as removal is handled by the Angular renderer:
|
|
954
|
-
return Array.from(mutation.addedNodes).filter((node) => observedElements.includes(node.nodeName));
|
|
955
|
-
});
|
|
956
|
-
const addedElements = Array.prototype
|
|
957
|
-
.concat(...addedNodes)
|
|
958
|
-
.filter((node) => node instanceof HTMLElement);
|
|
959
|
-
addedElements.forEach((addedElement) => {
|
|
960
|
-
const newParentElement = this.elementToParentMap[addedElement.nodeName]();
|
|
961
|
-
// Move embedded element out of content and append to new parent:
|
|
962
|
-
this.moveChild(addedElement, newParentElement);
|
|
963
|
-
});
|
|
964
|
-
};
|
|
965
|
-
return new MutationObserver(callback);
|
|
966
|
-
}
|
|
967
1012
|
createModalWrapperIntersectionObserver() {
|
|
968
1013
|
const callback = (entries) => {
|
|
969
1014
|
const entry = entries[0];
|
|
@@ -991,26 +1036,31 @@ class ModalWrapperComponent {
|
|
|
991
1036
|
this.routerOutlet.deactivate();
|
|
992
1037
|
}
|
|
993
1038
|
//clean up the observer
|
|
994
|
-
this.mutationObserver.disconnect();
|
|
995
1039
|
delete this._mutationObserver;
|
|
996
1040
|
this.intersectionObserver.disconnect();
|
|
997
1041
|
delete this._intersectionObserver;
|
|
998
1042
|
if (this.resizeObserverService) {
|
|
999
1043
|
this.resizeObserverService.unobserve(this.windowRef.nativeWindow.document.body);
|
|
1000
1044
|
this.resizeObserverService.unobserve(this.ionHeaderElement.nativeElement);
|
|
1001
|
-
this.resizeObserverService.unobserve(this.
|
|
1045
|
+
this.resizeObserverService.unobserve(this.currentFooter);
|
|
1002
1046
|
}
|
|
1003
1047
|
this.destroy$.next();
|
|
1004
1048
|
this.destroy$.complete();
|
|
1005
1049
|
}
|
|
1006
1050
|
}
|
|
1007
1051
|
ModalWrapperComponent.KEYBOARD_HIDE_DELAY_IN_MS = 100;
|
|
1008
|
-
/** @nocollapse */ ModalWrapperComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: ModalWrapperComponent, deps: [{ token: i0.Injector }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: ResizeObserverService }, { token: i0.ComponentFactoryResolver }, { token: WindowRef }, { token: PlatformService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1009
|
-
/** @nocollapse */ ModalWrapperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: ModalWrapperComponent, selector: "kirby-modal-wrapper", inputs: { config: "config" }, host: { listeners: { "window:focus": "onFocusChange()", "window:focusout": "onFocusChange()", "window:ionKeyboardDidShow": "_onKeyboardShow($event.detail.keyboardHeight)", "window:keyboardWillShow": "_onKeyboardShow($event.keyboardHeight)", "window:ionKeyboardDidHide": "_onKeyboardHide()", "window:keyboardWillHide": "_onKeyboardHide()", "window:resize": "_onWindowResize()" }, properties: { "class.collapsible-title": "this._hasCollapsibleTitle", "class.drawer": "this._isDrawer" } }, providers: [
|
|
1052
|
+
/** @nocollapse */ ModalWrapperComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: ModalWrapperComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: ResizeObserverService }, { token: i0.ComponentFactoryResolver }, { token: WindowRef }, { token: PlatformService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1053
|
+
/** @nocollapse */ ModalWrapperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: ModalWrapperComponent, selector: "kirby-modal-wrapper", inputs: { config: "config" }, host: { listeners: { "window:focus": "onFocusChange()", "window:focusout": "onFocusChange()", "window:ionKeyboardDidShow": "_onKeyboardShow($event.detail.keyboardHeight)", "window:keyboardWillShow": "_onKeyboardShow($event.keyboardHeight)", "window:ionKeyboardDidHide": "_onKeyboardHide()", "window:keyboardWillHide": "_onKeyboardHide()", "window:resize": "_onWindowResize()" }, properties: { "class.collapsible-title": "this._hasCollapsibleTitle", "class.drawer": "this._isDrawer" } }, providers: [
|
|
1054
|
+
{ provide: Modal, useExisting: ModalWrapperComponent },
|
|
1055
|
+
{ provide: ModalElementsAdvertiser, useExisting: ModalWrapperComponent },
|
|
1056
|
+
], viewQueries: [{ propertyName: "ionContent", 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: "ionToolbarElement", first: true, predicate: IonToolbar, descendants: true, read: ElementRef, static: true }, { propertyName: "ionTitleElement", first: true, predicate: IonTitle, descendants: true, read: ElementRef, static: true }, { propertyName: "routerOutlet", first: true, predicate: RouterOutlet, descendants: true, static: true }, { propertyName: "_contentTitleElement", first: true, predicate: ["contentTitle"], descendants: true, read: ElementRef }, { propertyName: "toolbarButtonsQuery", predicate: ButtonComponent, descendants: true, read: ElementRef }], ngImport: i0, template: "<ion-header (touchstart)=\"onHeaderTouchStart($event)\">\n <ion-toolbar>\n <ion-title></ion-title>\n <ion-buttons slot=\"start\" *ngIf=\"config.flavor === 'drawer'\">\n <ng-container *ngTemplateOutlet=\"closeButton; context: { icon: 'arrow-down' }\"></ng-container>\n </ion-buttons>\n <ion-buttons slot=\"end\" *ngIf=\"config.flavor === 'modal'\">\n <ng-container *ngTemplateOutlet=\"closeButton; context: { icon: 'close' }\"></ng-container>\n </ion-buttons>\n <ion-buttons slot=\"end\" *ngIf=\"config.flavor === 'drawer' && config.drawerSupplementaryAction\">\n <ng-container\n *ngTemplateOutlet=\"supplementaryButton; context: { btn: config.drawerSupplementaryAction }\"\n ></ng-container>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content [scrollEvents]=\"true\">\n <ion-header *ngIf=\"_hasCollapsibleTitle\" collapse=\"condense\">\n <ion-toolbar>\n <span class=\"kirby-text-large\" #contentTitle></span>\n </ion-toolbar>\n </ion-header>\n <ng-container\n *ngComponentOutlet=\"config.component; injector: componentPropsInjector\"\n ></ng-container>\n <router-outlet\n name=\"kirbyModalWrapperOutlet\"\n [style.visibility]=\"config.modalRoute ? 'visible' : 'hidden'\"\n ></router-outlet>\n</ion-content>\n\n<ng-template #closeButton let-icon=\"icon\">\n <button kirby-button attentionLevel=\"4\" size=\"md\" (click)=\"close()\">\n <kirby-icon [name]=\"icon\"></kirby-icon>\n </button>\n</ng-template>\n\n<ng-template #supplementaryButton let-btn=\"btn\">\n <button kirby-button attentionLevel=\"2\" size=\"md\" (click)=\"btn.action($event)\">\n <kirby-icon [name]=\"btn.iconName\"></kirby-icon>\n </button>\n</ng-template>\n", styles: ["ion-header ion-toolbar{--padding-start: 16px;--padding-end: 16px;--padding-bottom: 12px;--padding-top: 12px;--border-width: 0;--background: transparent;--color: var(--kirby-modal-color, var(--kirby-black))}ion-header ion-toolbar button{color:var(--color)}@media (min-width: 721px){ion-header ion-toolbar{padding-top:8px}}:host{--vh100: var(--vh, 1vh) * 100;--header-height: 0px;--footer-height: 0px}:host.drawer ion-header ion-toolbar:first-of-type{padding-top:0}@media (min-width: 721px){:host-context(ion-modal:not(.kirby-modal-full-height)){padding-top:0;position:relative;contain:inherit;min-height:min(var(--min-height),var(--vh100) - var(--kirby-modal-padding-top, 0px))}:host-context(ion-modal:not(.kirby-modal-full-height)) ion-content{contain:content;max-height:calc(var(--vh100) - var(--kirby-modal-padding-top, 0px) - var(--header-height) - var(--footer-height))}:host-context(ion-modal:not(.kirby-modal-full-height)) ion-content::part(scroll){height:\"100%\";position:relative}:host-context(ion-modal:not(.kirby-modal-full-height)).drawer ion-content::part(scroll){transition:padding-bottom .15s ease-out}:host-context(ion-modal:not(.kirby-modal-full-height)).drawer.keyboard-visible ion-content::part(scroll){transition:padding-bottom .25s ease-out 1ms}}:host-context(ion-modal:not(.kirby-modal-full-height)).drawer{padding-top:0;position:relative;contain:inherit;min-height:min(var(--min-height),var(--vh100) - var(--kirby-modal-padding-top, 0px))}:host-context(ion-modal:not(.kirby-modal-full-height)).drawer ion-content{contain:content;max-height:calc(var(--vh100) - var(--kirby-modal-padding-top, 0px) - var(--header-height) - var(--footer-height))}:host-context(ion-modal:not(.kirby-modal-full-height)).drawer ion-content::part(scroll){height:\"100%\";position:relative}:host-context(ion-modal:not(.kirby-modal-full-height)).drawer.drawer ion-content::part(scroll){transition:padding-bottom .15s ease-out}:host-context(ion-modal:not(.kirby-modal-full-height)).drawer.drawer.keyboard-visible ion-content::part(scroll){transition:padding-bottom .25s ease-out 1ms}:host-context(ion-modal.modal-card:not(.kirby-drawer)) ion-header ion-toolbar:first-of-type{padding-top:var(--kirby-safe-area-top, 0)}@media (min-width: 721px){:host-context(ion-modal.modal-card:not(.kirby-drawer)) ion-header ion-toolbar:first-of-type{padding-top:8px}}ion-title{box-sizing:border-box;padding-inline-start:calc(48px + var(--padding-start));padding-inline-end:calc(48px + var(--padding-end));font-size:22px;font-weight:700}:host(.drawer) ion-title{font-size:18px}ion-content{--background: transparent;--color: var(--kirby-modal-color, var(--kirby-black));display:flex;flex-direction:column;--padding-top: 24px;--padding-bottom: 24px;--padding-start: 16px;--padding-end: 16px}ion-content ::ng-deep>*{box-sizing:border-box;display:block}@media (min-width: 721px){ion-content{--padding-start: 56px;--padding-end: 56px}}:host(.collapsible-title) ion-content{--padding-top: 0px}:host(.collapsible-title) ion-content ion-header ion-toolbar:first-of-type{padding-top:0;--padding-top: 0px;--padding-bottom: 0px;--padding-start: 0px;--padding-end: 0px}:host(.collapsible-title) ion-title{font-size:16px;font-weight:700}\n"], components: [{ type: i1.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { type: i1.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { type: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { type: i1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { type: ButtonComponent, selector: "button[kirby-button],Button[kirby-button]", inputs: ["attentionLevel", "isDestructive", "themeColor", "expand", "isFloating", "size"] }, { type: IconComponent, selector: "kirby-icon", inputs: ["size", "name", "customName"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModuleFactory"] }, { type: i1$1.RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] });
|
|
1010
1057
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: ModalWrapperComponent, decorators: [{
|
|
1011
1058
|
type: Component,
|
|
1012
|
-
args: [{ selector: 'kirby-modal-wrapper', providers: [
|
|
1013
|
-
|
|
1059
|
+
args: [{ selector: 'kirby-modal-wrapper', providers: [
|
|
1060
|
+
{ provide: Modal, useExisting: ModalWrapperComponent },
|
|
1061
|
+
{ provide: ModalElementsAdvertiser, useExisting: ModalWrapperComponent },
|
|
1062
|
+
], template: "<ion-header (touchstart)=\"onHeaderTouchStart($event)\">\n <ion-toolbar>\n <ion-title></ion-title>\n <ion-buttons slot=\"start\" *ngIf=\"config.flavor === 'drawer'\">\n <ng-container *ngTemplateOutlet=\"closeButton; context: { icon: 'arrow-down' }\"></ng-container>\n </ion-buttons>\n <ion-buttons slot=\"end\" *ngIf=\"config.flavor === 'modal'\">\n <ng-container *ngTemplateOutlet=\"closeButton; context: { icon: 'close' }\"></ng-container>\n </ion-buttons>\n <ion-buttons slot=\"end\" *ngIf=\"config.flavor === 'drawer' && config.drawerSupplementaryAction\">\n <ng-container\n *ngTemplateOutlet=\"supplementaryButton; context: { btn: config.drawerSupplementaryAction }\"\n ></ng-container>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content [scrollEvents]=\"true\">\n <ion-header *ngIf=\"_hasCollapsibleTitle\" collapse=\"condense\">\n <ion-toolbar>\n <span class=\"kirby-text-large\" #contentTitle></span>\n </ion-toolbar>\n </ion-header>\n <ng-container\n *ngComponentOutlet=\"config.component; injector: componentPropsInjector\"\n ></ng-container>\n <router-outlet\n name=\"kirbyModalWrapperOutlet\"\n [style.visibility]=\"config.modalRoute ? 'visible' : 'hidden'\"\n ></router-outlet>\n</ion-content>\n\n<ng-template #closeButton let-icon=\"icon\">\n <button kirby-button attentionLevel=\"4\" size=\"md\" (click)=\"close()\">\n <kirby-icon [name]=\"icon\"></kirby-icon>\n </button>\n</ng-template>\n\n<ng-template #supplementaryButton let-btn=\"btn\">\n <button kirby-button attentionLevel=\"2\" size=\"md\" (click)=\"btn.action($event)\">\n <kirby-icon [name]=\"btn.iconName\"></kirby-icon>\n </button>\n</ng-template>\n", styles: ["ion-header ion-toolbar{--padding-start: 16px;--padding-end: 16px;--padding-bottom: 12px;--padding-top: 12px;--border-width: 0;--background: transparent;--color: var(--kirby-modal-color, var(--kirby-black))}ion-header ion-toolbar button{color:var(--color)}@media (min-width: 721px){ion-header ion-toolbar{padding-top:8px}}:host{--vh100: var(--vh, 1vh) * 100;--header-height: 0px;--footer-height: 0px}:host.drawer ion-header ion-toolbar:first-of-type{padding-top:0}@media (min-width: 721px){:host-context(ion-modal:not(.kirby-modal-full-height)){padding-top:0;position:relative;contain:inherit;min-height:min(var(--min-height),var(--vh100) - var(--kirby-modal-padding-top, 0px))}:host-context(ion-modal:not(.kirby-modal-full-height)) ion-content{contain:content;max-height:calc(var(--vh100) - var(--kirby-modal-padding-top, 0px) - var(--header-height) - var(--footer-height))}:host-context(ion-modal:not(.kirby-modal-full-height)) ion-content::part(scroll){height:\"100%\";position:relative}:host-context(ion-modal:not(.kirby-modal-full-height)).drawer ion-content::part(scroll){transition:padding-bottom .15s ease-out}:host-context(ion-modal:not(.kirby-modal-full-height)).drawer.keyboard-visible ion-content::part(scroll){transition:padding-bottom .25s ease-out 1ms}}:host-context(ion-modal:not(.kirby-modal-full-height)).drawer{padding-top:0;position:relative;contain:inherit;min-height:min(var(--min-height),var(--vh100) - var(--kirby-modal-padding-top, 0px))}:host-context(ion-modal:not(.kirby-modal-full-height)).drawer ion-content{contain:content;max-height:calc(var(--vh100) - var(--kirby-modal-padding-top, 0px) - var(--header-height) - var(--footer-height))}:host-context(ion-modal:not(.kirby-modal-full-height)).drawer ion-content::part(scroll){height:\"100%\";position:relative}:host-context(ion-modal:not(.kirby-modal-full-height)).drawer.drawer ion-content::part(scroll){transition:padding-bottom .15s ease-out}:host-context(ion-modal:not(.kirby-modal-full-height)).drawer.drawer.keyboard-visible ion-content::part(scroll){transition:padding-bottom .25s ease-out 1ms}:host-context(ion-modal.modal-card:not(.kirby-drawer)) ion-header ion-toolbar:first-of-type{padding-top:var(--kirby-safe-area-top, 0)}@media (min-width: 721px){:host-context(ion-modal.modal-card:not(.kirby-drawer)) ion-header ion-toolbar:first-of-type{padding-top:8px}}ion-title{box-sizing:border-box;padding-inline-start:calc(48px + var(--padding-start));padding-inline-end:calc(48px + var(--padding-end));font-size:22px;font-weight:700}:host(.drawer) ion-title{font-size:18px}ion-content{--background: transparent;--color: var(--kirby-modal-color, var(--kirby-black));display:flex;flex-direction:column;--padding-top: 24px;--padding-bottom: 24px;--padding-start: 16px;--padding-end: 16px}ion-content ::ng-deep>*{box-sizing:border-box;display:block}@media (min-width: 721px){ion-content{--padding-start: 56px;--padding-end: 56px}}:host(.collapsible-title) ion-content{--padding-top: 0px}:host(.collapsible-title) ion-content ion-header ion-toolbar:first-of-type{padding-top:0;--padding-top: 0px;--padding-bottom: 0px;--padding-start: 0px;--padding-end: 0px}:host(.collapsible-title) ion-title{font-size:16px;font-weight:700}\n"] }]
|
|
1063
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.Injector }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: ResizeObserverService }, { type: i0.ComponentFactoryResolver }, { type: WindowRef }, { type: PlatformService }]; }, propDecorators: { _hasCollapsibleTitle: [{
|
|
1014
1064
|
type: HostBinding,
|
|
1015
1065
|
args: ['class.collapsible-title']
|
|
1016
1066
|
}], config: [{
|
|
@@ -1036,7 +1086,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImpor
|
|
|
1036
1086
|
}], routerOutlet: [{
|
|
1037
1087
|
type: ViewChild,
|
|
1038
1088
|
args: [RouterOutlet, { static: true }]
|
|
1039
|
-
}],
|
|
1089
|
+
}], _contentTitleElement: [{
|
|
1040
1090
|
type: ViewChild,
|
|
1041
1091
|
args: ['contentTitle', { read: ElementRef }]
|
|
1042
1092
|
}], _isDrawer: [{
|
|
@@ -5088,7 +5138,6 @@ class DropdownComponent {
|
|
|
5088
5138
|
this.changeDetectorRef = changeDetectorRef;
|
|
5089
5139
|
this.keyboardHandlerService = keyboardHandlerService;
|
|
5090
5140
|
this.state = OpenState.closed;
|
|
5091
|
-
this.hasConfiguredSlottedItems = false;
|
|
5092
5141
|
this.horizontalDirection = HorizontalDirection.right;
|
|
5093
5142
|
this.verticalDirection = VerticalDirection.down;
|
|
5094
5143
|
this._items = [];
|
|
@@ -5164,6 +5213,25 @@ class DropdownComponent {
|
|
|
5164
5213
|
get _popoutUp() {
|
|
5165
5214
|
return this.verticalDirection === VerticalDirection.up;
|
|
5166
5215
|
}
|
|
5216
|
+
set kirbyItemsSlotted(kirbyItems) {
|
|
5217
|
+
var _a;
|
|
5218
|
+
const hasSlottedItems = ((_a = this.itemClickUnlisten) === null || _a === void 0 ? void 0 : _a.length) > 0;
|
|
5219
|
+
if (hasSlottedItems) {
|
|
5220
|
+
this.unlistenAllSlottedItems();
|
|
5221
|
+
}
|
|
5222
|
+
// Setup a click listener for each new slotted items
|
|
5223
|
+
kirbyItems.forEach((kirbyItem, index) => {
|
|
5224
|
+
this.renderer.setAttribute(kirbyItem.nativeElement, 'role', 'option');
|
|
5225
|
+
const unlisten = this.renderer.listen(kirbyItem.nativeElement, 'click', () => {
|
|
5226
|
+
this.onItemSelect(index);
|
|
5227
|
+
});
|
|
5228
|
+
this.itemClickUnlisten.push(unlisten);
|
|
5229
|
+
});
|
|
5230
|
+
this._kirbyItemsSlotted = kirbyItems;
|
|
5231
|
+
}
|
|
5232
|
+
get kirbyItemsSlotted() {
|
|
5233
|
+
return this._kirbyItemsSlotted;
|
|
5234
|
+
}
|
|
5167
5235
|
onToggle(event) {
|
|
5168
5236
|
event.stopPropagation();
|
|
5169
5237
|
if (!this.isOpen) {
|
|
@@ -5181,18 +5249,6 @@ class DropdownComponent {
|
|
|
5181
5249
|
// Prevent button focus;
|
|
5182
5250
|
event.preventDefault();
|
|
5183
5251
|
}
|
|
5184
|
-
ngAfterContentChecked() {
|
|
5185
|
-
if (!this.hasConfiguredSlottedItems && this.kirbyItemsSlotted.length) {
|
|
5186
|
-
this.kirbyItemsSlotted.forEach((kirbyItem, index) => {
|
|
5187
|
-
this.renderer.setAttribute(kirbyItem.nativeElement, 'role', 'option');
|
|
5188
|
-
const unlisten = this.renderer.listen(kirbyItem.nativeElement, 'click', () => {
|
|
5189
|
-
this.onItemSelect(index);
|
|
5190
|
-
});
|
|
5191
|
-
this.itemClickUnlisten.push(unlisten);
|
|
5192
|
-
});
|
|
5193
|
-
this.hasConfiguredSlottedItems = true;
|
|
5194
|
-
}
|
|
5195
|
-
}
|
|
5196
5252
|
/* Utility that makes it easier to set styles on card element
|
|
5197
5253
|
when using popover*/
|
|
5198
5254
|
setPopoverCardStyle(style, value) {
|
|
@@ -5391,6 +5447,11 @@ class DropdownComponent {
|
|
|
5391
5447
|
event.stopImmediatePropagation();
|
|
5392
5448
|
}
|
|
5393
5449
|
}
|
|
5450
|
+
_onTouchStart(event) {
|
|
5451
|
+
if (this.isOpen) {
|
|
5452
|
+
event.stopPropagation();
|
|
5453
|
+
}
|
|
5454
|
+
}
|
|
5394
5455
|
_onFocus() {
|
|
5395
5456
|
if (this.disabled) {
|
|
5396
5457
|
this.elementRef.nativeElement.blur();
|
|
@@ -5400,14 +5461,17 @@ class DropdownComponent {
|
|
|
5400
5461
|
this.state = OpenState.closed;
|
|
5401
5462
|
this.elementRef.nativeElement.focus();
|
|
5402
5463
|
}
|
|
5464
|
+
_onEnterOrEscape() {
|
|
5465
|
+
this.close();
|
|
5466
|
+
this._onTouched();
|
|
5467
|
+
}
|
|
5468
|
+
_onPopoverClick(event) {
|
|
5469
|
+
this.close();
|
|
5470
|
+
}
|
|
5403
5471
|
_onBlur(event) {
|
|
5404
|
-
if (this.
|
|
5472
|
+
if (this.usePopover)
|
|
5405
5473
|
return;
|
|
5406
|
-
|
|
5407
|
-
if (!this.cardElement.nativeElement.contains(event === null || event === void 0 ? void 0 : event.relatedTarget)) {
|
|
5408
|
-
this.close();
|
|
5409
|
-
}
|
|
5410
|
-
}
|
|
5474
|
+
this.close();
|
|
5411
5475
|
this._onTouched();
|
|
5412
5476
|
}
|
|
5413
5477
|
_onSpace(event) {
|
|
@@ -5444,11 +5508,14 @@ class DropdownComponent {
|
|
|
5444
5508
|
}
|
|
5445
5509
|
return false;
|
|
5446
5510
|
}
|
|
5447
|
-
|
|
5448
|
-
let
|
|
5449
|
-
while ((
|
|
5450
|
-
|
|
5511
|
+
unlistenAllSlottedItems() {
|
|
5512
|
+
let unlistenItem;
|
|
5513
|
+
while ((unlistenItem = this.itemClickUnlisten.pop()) !== undefined) {
|
|
5514
|
+
unlistenItem();
|
|
5451
5515
|
}
|
|
5516
|
+
}
|
|
5517
|
+
ngOnDestroy() {
|
|
5518
|
+
this.unlistenAllSlottedItems();
|
|
5452
5519
|
if (this.intersectionObserverRef) {
|
|
5453
5520
|
this.intersectionObserverRef.disconnect();
|
|
5454
5521
|
}
|
|
@@ -5456,13 +5523,13 @@ class DropdownComponent {
|
|
|
5456
5523
|
}
|
|
5457
5524
|
DropdownComponent.OPEN_DELAY_IN_MS = 100;
|
|
5458
5525
|
/** @nocollapse */ DropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: DropdownComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: KeyboardHandlerService }], target: i0.ɵɵFactoryTarget.Component });
|
|
5459
|
-
/** @nocollapse */ DropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: DropdownComponent, selector: "kirby-dropdown", inputs: { items: "items", selectedIndex: "selectedIndex", itemTextProperty: "itemTextProperty", placeholder: "placeholder", popout: "popout", attentionLevel: "attentionLevel", expand: "expand", disabled: "disabled", hasError: "hasError", size: "size", tabindex: "tabindex", usePopover: "usePopover" }, outputs: { change: "change" }, host: { listeners: { "keydown.tab": "_onTab($event)", "mousedown": "_onMouseDown($event)", "focus": "_onFocus()", "keydown.enter": "_onEnter($event)", "keydown.escape": "
|
|
5526
|
+
/** @nocollapse */ DropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: DropdownComponent, selector: "kirby-dropdown", inputs: { items: "items", selectedIndex: "selectedIndex", itemTextProperty: "itemTextProperty", placeholder: "placeholder", popout: "popout", attentionLevel: "attentionLevel", expand: "expand", disabled: "disabled", hasError: "hasError", size: "size", tabindex: "tabindex", usePopover: "usePopover" }, outputs: { change: "change" }, host: { listeners: { "keydown.tab": "_onTab($event)", "mousedown": "_onMouseDown($event)", "touchstart": "_onTouchStart($event)", "focus": "_onFocus()", "keydown.enter": "_onEnter($event)", "keydown.escape": "_onEnterOrEscape()", "blur": "_onBlur($event)", "keydown.space": "_onSpace($event)", "keydown.arrowup": "_onArrowKeys($event)", "keydown.arrowdown": "_onArrowKeys($event)", "keydown.arrowleft": "_onArrowKeys($event)", "keydown.arrowright": "_onArrowKeys($event)", "keydown.home": "_onHomeEndKeys($event)", "keydown.end": "_onHomeEndKeys($event)" }, properties: { "attr.disabled": "this._isDisabled", "class.error": "this.hasError", "class.with-popover": "this.usePopover", "attr.tabindex": "this._tabindex", "attr.no-blur": "this._noBlurOnScroll", "class.expand": "this._isBlockLevel", "attr.role": "this._role", "class.is-opening": "this._isOpening", "class.is-open": "this.isOpen", "class.popout-left": "this._popoutLeft", "class.popout-up": "this._popoutUp" } }, providers: [
|
|
5460
5527
|
{
|
|
5461
5528
|
provide: NG_VALUE_ACCESSOR,
|
|
5462
5529
|
useExisting: forwardRef((() => DropdownComponent)),
|
|
5463
5530
|
multi: true,
|
|
5464
5531
|
},
|
|
5465
|
-
], queries: [{ propertyName: "itemTemplate", first: true, predicate: ListItemTemplateDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "slottedItems", predicate: ListItemTemplateDirective, read: ElementRef }, { propertyName: "kirbyItemsSlotted", predicate: ItemComponent, read: ElementRef }], viewQueries: [{ propertyName: "cardElement", first: true, predicate: CardComponent, descendants: true, read: ElementRef }, { propertyName: "popover", first: true, predicate: PopoverComponent, descendants: true }, { propertyName: "buttonElement", first: true, predicate: ButtonComponent, descendants: true, read: ElementRef, static: true }, { propertyName: "kirbyItemsDefault", predicate: ItemComponent, descendants: true, read: ElementRef }], ngImport: i0, template: "<button\n kirby-button\n [size]=\"size\"\n [attentionLevel]=\"isOpen ? attentionLevelOpen : attentionLevel\"\n tabindex=\"-1\"\n (click)=\"onToggle($event)\"\n (mousedown)=\"onButtonMouseEvent($event)\"\n [disabled]=\"disabled\"\n type=\"button\"\n>\n <span class=\"text\">{{ selectedText || placeholder }}</span>\n <kirby-icon [name]=\"isOpen ? 'arrow-up' : 'arrow-down'\"></kirby-icon>\n</button>\n\n<ng-container *ngTemplateOutlet=\"usePopover ? popoverTemplate : itemWrapperTemplate\"></ng-container>\n\n<ng-template #popoverTemplate>\n <kirby-popover
|
|
5532
|
+
], queries: [{ propertyName: "itemTemplate", first: true, predicate: ListItemTemplateDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "slottedItems", predicate: ListItemTemplateDirective, read: ElementRef }, { propertyName: "kirbyItemsSlotted", predicate: ItemComponent, read: ElementRef }], viewQueries: [{ propertyName: "cardElement", first: true, predicate: CardComponent, descendants: true, read: ElementRef }, { propertyName: "popover", first: true, predicate: PopoverComponent, descendants: true }, { propertyName: "buttonElement", first: true, predicate: ButtonComponent, descendants: true, read: ElementRef, static: true }, { propertyName: "kirbyItemsDefault", predicate: ItemComponent, descendants: true, read: ElementRef }], ngImport: i0, template: "<button\n kirby-button\n [size]=\"size\"\n [attentionLevel]=\"isOpen ? attentionLevelOpen : attentionLevel\"\n tabindex=\"-1\"\n (click)=\"onToggle($event)\"\n (mousedown)=\"onButtonMouseEvent($event)\"\n [disabled]=\"disabled\"\n type=\"button\"\n>\n <span class=\"text\">{{ selectedText || placeholder }}</span>\n <kirby-icon [name]=\"isOpen ? 'arrow-up' : 'arrow-down'\"></kirby-icon>\n</button>\n\n<ng-container *ngTemplateOutlet=\"usePopover ? popoverTemplate : itemWrapperTemplate\"></ng-container>\n\n<ng-template #popoverTemplate>\n <kirby-popover\n [target]=\"buttonElement\"\n [popout]=\"popout\"\n (click)=\"_onPopoverClick($event)\"\n (willHide)=\"_onPopoverWillHide()\"\n >\n <ng-container *ngTemplateOutlet=\"itemWrapperTemplate\"></ng-container>\n </kirby-popover>\n</ng-template>\n\n<ng-template #itemWrapperTemplate>\n <kirby-card>\n <ng-container *ngFor=\"let item of items; let i = index\">\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate || defaultItemTemplate;\n context: { $implicit: item, selected: i === selectedIndex, index: i }\n \"\n ></ng-container>\n </ng-container>\n </kirby-card>\n</ng-template>\n\n<ng-template #defaultItemTemplate let-item let-selected=\"selected\" let-index=\"index\">\n <kirby-item [selectable]=\"true\" [selected]=\"selected\" (click)=\"onItemSelect(index)\" role=\"option\">\n <!-- Tabindex fixes issue with popover dropdown not working in safari -->\n <h3 tabindex=\"0\">{{ getTextFromItem(item) }}</h3>\n <kirby-icon *ngIf=\"selected\" name=\"checkmark-selected\" slot=\"end\"></kirby-icon>\n </kirby-item>\n</ng-template>\n", styles: [":host{display:inline-block;position:relative;max-width:calc(100vw - 32px);outline:none}:host.expand{display:block}:host.expand kirby-card{width:100%;min-width:initial;max-width:initial}@media (hover: hover){:host:focus>button,:host:focus>button.attention-level3{border-color:#4d90fe}}:host.error>button,:host.ng-touched.ng-invalid>button{border-color:var(--kirby-danger)}:host>button{position:relative;margin:0;outline:none;width:100%;transition:box-shadow .2s,border-color .2s}:host>button.attention-level2{border:1px solid transparent}:host>button .text{overflow:hidden;text-overflow:ellipsis}kirby-popover{--max-height: 352px}kirby-card{max-height:352px;margin-top:4px;margin-bottom:4px;overflow-y:auto;box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14;min-width:288px;max-width:calc(100vw - 32px)}@media (min-width: 321px){kirby-card{min-width:343px}}:host(:not(.with-popover)) kirby-card{display:none;opacity:0;position:absolute;z-index:800}:host(:not(.with-popover)).is-opening kirby-card{display:block}:host(:not(.with-popover)).is-open kirby-card{display:block;opacity:1}:host(:not(.with-popover)).popout-left kirby-card{right:0}:host(:not(.with-popover)).popout-up kirby-card{top:0;margin-top:-4px;transform:translateY(-100%)}:host(:not(.with-popover)).popout-up.is-open>button{z-index:801}:host(.with-popover).is-open kirby-card{display:block}:host(.is-open)>button{box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14}:host-context(kirby-calendar)>button{border-color:transparent;font-weight:700;font-size:initial}:host-context(kirby-calendar).is-open>button{box-shadow:none}\n"], components: [{ type: ButtonComponent, selector: "button[kirby-button],Button[kirby-button]", inputs: ["attentionLevel", "isDestructive", "themeColor", "expand", "isFloating", "size"] }, { type: IconComponent, selector: "kirby-icon", inputs: ["size", "name", "customName"] }, { type: PopoverComponent, selector: "kirby-popover", inputs: ["popout", "target"], outputs: ["willHide"] }, { type: CardComponent, selector: "kirby-card", inputs: ["title", "subtitle", "backgroundImageUrl", "hasPadding", "sizes", "mode"] }, { type: ItemComponent, selector: "kirby-item", inputs: ["disabled", "selected", "selectable", "reorderable", "size"] }], directives: [{ type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
5466
5533
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: DropdownComponent, decorators: [{
|
|
5467
5534
|
type: Component,
|
|
5468
5535
|
args: [{ selector: 'kirby-dropdown', providers: [
|
|
@@ -5471,7 +5538,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImpor
|
|
|
5471
5538
|
useExisting: forwardRef((() => DropdownComponent)),
|
|
5472
5539
|
multi: true,
|
|
5473
5540
|
},
|
|
5474
|
-
], template: "<button\n kirby-button\n [size]=\"size\"\n [attentionLevel]=\"isOpen ? attentionLevelOpen : attentionLevel\"\n tabindex=\"-1\"\n (click)=\"onToggle($event)\"\n (mousedown)=\"onButtonMouseEvent($event)\"\n [disabled]=\"disabled\"\n type=\"button\"\n>\n <span class=\"text\">{{ selectedText || placeholder }}</span>\n <kirby-icon [name]=\"isOpen ? 'arrow-up' : 'arrow-down'\"></kirby-icon>\n</button>\n\n<ng-container *ngTemplateOutlet=\"usePopover ? popoverTemplate : itemWrapperTemplate\"></ng-container>\n\n<ng-template #popoverTemplate>\n <kirby-popover
|
|
5541
|
+
], template: "<button\n kirby-button\n [size]=\"size\"\n [attentionLevel]=\"isOpen ? attentionLevelOpen : attentionLevel\"\n tabindex=\"-1\"\n (click)=\"onToggle($event)\"\n (mousedown)=\"onButtonMouseEvent($event)\"\n [disabled]=\"disabled\"\n type=\"button\"\n>\n <span class=\"text\">{{ selectedText || placeholder }}</span>\n <kirby-icon [name]=\"isOpen ? 'arrow-up' : 'arrow-down'\"></kirby-icon>\n</button>\n\n<ng-container *ngTemplateOutlet=\"usePopover ? popoverTemplate : itemWrapperTemplate\"></ng-container>\n\n<ng-template #popoverTemplate>\n <kirby-popover\n [target]=\"buttonElement\"\n [popout]=\"popout\"\n (click)=\"_onPopoverClick($event)\"\n (willHide)=\"_onPopoverWillHide()\"\n >\n <ng-container *ngTemplateOutlet=\"itemWrapperTemplate\"></ng-container>\n </kirby-popover>\n</ng-template>\n\n<ng-template #itemWrapperTemplate>\n <kirby-card>\n <ng-container *ngFor=\"let item of items; let i = index\">\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate || defaultItemTemplate;\n context: { $implicit: item, selected: i === selectedIndex, index: i }\n \"\n ></ng-container>\n </ng-container>\n </kirby-card>\n</ng-template>\n\n<ng-template #defaultItemTemplate let-item let-selected=\"selected\" let-index=\"index\">\n <kirby-item [selectable]=\"true\" [selected]=\"selected\" (click)=\"onItemSelect(index)\" role=\"option\">\n <!-- Tabindex fixes issue with popover dropdown not working in safari -->\n <h3 tabindex=\"0\">{{ getTextFromItem(item) }}</h3>\n <kirby-icon *ngIf=\"selected\" name=\"checkmark-selected\" slot=\"end\"></kirby-icon>\n </kirby-item>\n</ng-template>\n", styles: [":host{display:inline-block;position:relative;max-width:calc(100vw - 32px);outline:none}:host.expand{display:block}:host.expand kirby-card{width:100%;min-width:initial;max-width:initial}@media (hover: hover){:host:focus>button,:host:focus>button.attention-level3{border-color:#4d90fe}}:host.error>button,:host.ng-touched.ng-invalid>button{border-color:var(--kirby-danger)}:host>button{position:relative;margin:0;outline:none;width:100%;transition:box-shadow .2s,border-color .2s}:host>button.attention-level2{border:1px solid transparent}:host>button .text{overflow:hidden;text-overflow:ellipsis}kirby-popover{--max-height: 352px}kirby-card{max-height:352px;margin-top:4px;margin-bottom:4px;overflow-y:auto;box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14;min-width:288px;max-width:calc(100vw - 32px)}@media (min-width: 321px){kirby-card{min-width:343px}}:host(:not(.with-popover)) kirby-card{display:none;opacity:0;position:absolute;z-index:800}:host(:not(.with-popover)).is-opening kirby-card{display:block}:host(:not(.with-popover)).is-open kirby-card{display:block;opacity:1}:host(:not(.with-popover)).popout-left kirby-card{right:0}:host(:not(.with-popover)).popout-up kirby-card{top:0;margin-top:-4px;transform:translateY(-100%)}:host(:not(.with-popover)).popout-up.is-open>button{z-index:801}:host(.with-popover).is-open kirby-card{display:block}:host(.is-open)>button{box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14}:host-context(kirby-calendar)>button{border-color:transparent;font-weight:700;font-size:initial}:host-context(kirby-calendar).is-open>button{box-shadow:none}\n"] }]
|
|
5475
5542
|
}], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: KeyboardHandlerService }]; }, propDecorators: { items: [{
|
|
5476
5543
|
type: Input
|
|
5477
5544
|
}], selectedIndex: [{
|
|
@@ -5558,16 +5625,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImpor
|
|
|
5558
5625
|
}], _onMouseDown: [{
|
|
5559
5626
|
type: HostListener,
|
|
5560
5627
|
args: ['mousedown', ['$event']]
|
|
5628
|
+
}], _onTouchStart: [{
|
|
5629
|
+
type: HostListener,
|
|
5630
|
+
args: ['touchstart', ['$event']]
|
|
5561
5631
|
}], _onFocus: [{
|
|
5562
5632
|
type: HostListener,
|
|
5563
5633
|
args: ['focus']
|
|
5564
|
-
}],
|
|
5634
|
+
}], _onEnterOrEscape: [{
|
|
5565
5635
|
type: HostListener,
|
|
5566
5636
|
args: ['keydown.enter']
|
|
5567
5637
|
}, {
|
|
5568
5638
|
type: HostListener,
|
|
5569
5639
|
args: ['keydown.escape']
|
|
5570
|
-
}, {
|
|
5640
|
+
}], _onBlur: [{
|
|
5571
5641
|
type: HostListener,
|
|
5572
5642
|
args: ['blur', ['$event']]
|
|
5573
5643
|
}], _onSpace: [{
|
|
@@ -6504,10 +6574,10 @@ InputComponent.typeToInputmodeMap = {
|
|
|
6504
6574
|
search: 'search',
|
|
6505
6575
|
};
|
|
6506
6576
|
/** @nocollapse */ InputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: InputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6507
|
-
/** @nocollapse */ InputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: InputComponent, selector: "input[kirby-input]", inputs: { type: "type", size: "size", borderless: "borderless", hasError: "hasError", autocomplete: "autocomplete", autocorrect: "autocorrect", value: "value", maxlength: "maxlength", inputmode: "inputmode" }, host: { listeners: { "keyup": "_onKeyUp($event.target.value)", "paste": "_onCutPaste($event.target)", "cut": "_onCutPaste($event.target)" }, properties: { "class": "this.size", "class.borderless": "this.borderless", "class.error": "this.hasError", "attr.autocomplete": "this.autocomplete", "attr.autocorrect": "this.autocorrect", "attr.value": "this.value", "attr.maxlength": "this.maxlength", "attr.inputmode": "this.inputmode" } }, usesOnChanges: true, ngImport: i0, template: '', isInline: true, styles: [":host(.error){border:1px solid var(--kirby-danger);padding:calc(1em - 1px)}:host(.cloned-input){pointer-events:none;position:absolute;top:0;left:0}:host-context(label).cloned-input{top:24px}:host{background-color:var(--kirby-white);color:var(--kirby-white-contrast);border:none;box-sizing:border-box;display:block;font-family:var(--kirby-font-family);font-size:1rem;line-height:1.5;outline:none;margin:0;-webkit-appearance:none;appearance:none;border-radius:16px;box-shadow:0 5px 10px -10px #1c1c1c4d,0 0 5px #1c1c1c14;padding:1em;width:100%}:host:host-context(kirby-item),:host.borderless{border-radius:0;box-shadow:none;padding-inline:0;width:auto}:host:disabled{background-color:var(--kirby-light-tint);color:var(--kirby-text-color-semi-dark);box-shadow:none}:host::placeholder{color:var(--kirby-text-color-semi-dark)}:host[type=number]{-webkit-appearance:textfield;appearance:textfield}:host::-webkit-outer-spin-button,:host::-webkit-inner-spin-button{-webkit-appearance:none;appearance:none;margin:0}:host(.md){border-radius:24px;padding-block:.5em}:host-context(kirby-item kirby-form-field[slot=end])[type=number]{font-weight:700}.date-mask-wrapper{position:relative}:host-context(.date-mask-wrapper){color:var(--kirby-text-color-semi-dark)}.date-mask{font-family:var(--kirby-font-family);line-height:1.5;color:var(--kirby-white-contrast);position:absolute;top:0;left:0;padding:1em}:host(.md)+.date-mask{padding-block:.5em}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
6577
|
+
/** @nocollapse */ InputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: InputComponent, selector: "input[kirby-input]", inputs: { type: "type", size: "size", borderless: "borderless", hasError: "hasError", autocomplete: "autocomplete", autocorrect: "autocorrect", value: "value", maxlength: "maxlength", inputmode: "inputmode" }, host: { listeners: { "keyup": "_onKeyUp($event.target.value)", "paste": "_onCutPaste($event.target)", "cut": "_onCutPaste($event.target)" }, properties: { "class": "this.size", "class.borderless": "this.borderless", "class.error": "this.hasError", "attr.autocomplete": "this.autocomplete", "attr.autocorrect": "this.autocorrect", "attr.value": "this.value", "attr.maxlength": "this.maxlength", "attr.inputmode": "this.inputmode" } }, usesOnChanges: true, ngImport: i0, template: '', isInline: true, styles: [":host(.error){border:1px solid var(--kirby-danger);padding:calc(1em - 1px)}:host(.cloned-input){pointer-events:none;position:absolute;top:0;left:0}:host-context(label).cloned-input{top:24px}:host{background-color:var(--kirby-white);color:var(--kirby-white-contrast);border:none;box-sizing:border-box;display:block;font-family:var(--kirby-font-family);font-size:1rem;line-height:1.5;outline:none;margin:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:16px;box-shadow:0 5px 10px -10px #1c1c1c4d,0 0 5px #1c1c1c14;padding:1em;width:100%}:host:host-context(kirby-item),:host.borderless{border-radius:0;box-shadow:none;padding-inline:0;width:auto}:host:disabled{background-color:var(--kirby-light-tint);color:var(--kirby-text-color-semi-dark);box-shadow:none}:host::placeholder{color:var(--kirby-text-color-semi-dark)}:host[type=number]{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}:host::-webkit-outer-spin-button,:host::-webkit-inner-spin-button{-webkit-appearance:none;appearance:none;margin:0}:host(.md){border-radius:24px;padding-block:.5em}:host-context(kirby-item kirby-form-field[slot=end])[type=number]{font-weight:700}.date-mask-wrapper{position:relative}:host-context(.date-mask-wrapper){color:var(--kirby-text-color-semi-dark)}.date-mask{font-family:var(--kirby-font-family);line-height:1.5;color:var(--kirby-white-contrast);position:absolute;top:0;left:0;padding:1em}:host(.md)+.date-mask{padding-block:.5em}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
6508
6578
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: InputComponent, decorators: [{
|
|
6509
6579
|
type: Component,
|
|
6510
|
-
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'input[kirby-input]', template: '', styles: [":host(.error){border:1px solid var(--kirby-danger);padding:calc(1em - 1px)}:host(.cloned-input){pointer-events:none;position:absolute;top:0;left:0}:host-context(label).cloned-input{top:24px}:host{background-color:var(--kirby-white);color:var(--kirby-white-contrast);border:none;box-sizing:border-box;display:block;font-family:var(--kirby-font-family);font-size:1rem;line-height:1.5;outline:none;margin:0;-webkit-appearance:none;appearance:none;border-radius:16px;box-shadow:0 5px 10px -10px #1c1c1c4d,0 0 5px #1c1c1c14;padding:1em;width:100%}:host:host-context(kirby-item),:host.borderless{border-radius:0;box-shadow:none;padding-inline:0;width:auto}:host:disabled{background-color:var(--kirby-light-tint);color:var(--kirby-text-color-semi-dark);box-shadow:none}:host::placeholder{color:var(--kirby-text-color-semi-dark)}:host[type=number]{-webkit-appearance:textfield;appearance:textfield}:host::-webkit-outer-spin-button,:host::-webkit-inner-spin-button{-webkit-appearance:none;appearance:none;margin:0}:host(.md){border-radius:24px;padding-block:.5em}:host-context(kirby-item kirby-form-field[slot=end])[type=number]{font-weight:700}.date-mask-wrapper{position:relative}:host-context(.date-mask-wrapper){color:var(--kirby-text-color-semi-dark)}.date-mask{font-family:var(--kirby-font-family);line-height:1.5;color:var(--kirby-white-contrast);position:absolute;top:0;left:0;padding:1em}:host(.md)+.date-mask{padding-block:.5em}\n"] }]
|
|
6580
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'input[kirby-input]', template: '', styles: [":host(.error){border:1px solid var(--kirby-danger);padding:calc(1em - 1px)}:host(.cloned-input){pointer-events:none;position:absolute;top:0;left:0}:host-context(label).cloned-input{top:24px}:host{background-color:var(--kirby-white);color:var(--kirby-white-contrast);border:none;box-sizing:border-box;display:block;font-family:var(--kirby-font-family);font-size:1rem;line-height:1.5;outline:none;margin:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:16px;box-shadow:0 5px 10px -10px #1c1c1c4d,0 0 5px #1c1c1c14;padding:1em;width:100%}:host:host-context(kirby-item),:host.borderless{border-radius:0;box-shadow:none;padding-inline:0;width:auto}:host:disabled{background-color:var(--kirby-light-tint);color:var(--kirby-text-color-semi-dark);box-shadow:none}:host::placeholder{color:var(--kirby-text-color-semi-dark)}:host[type=number]{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}:host::-webkit-outer-spin-button,:host::-webkit-inner-spin-button{-webkit-appearance:none;appearance:none;margin:0}:host(.md){border-radius:24px;padding-block:.5em}:host-context(kirby-item kirby-form-field[slot=end])[type=number]{font-weight:700}.date-mask-wrapper{position:relative}:host-context(.date-mask-wrapper){color:var(--kirby-text-color-semi-dark)}.date-mask{font-family:var(--kirby-font-family);line-height:1.5;color:var(--kirby-white-contrast);position:absolute;top:0;left:0;padding:1em}:host(.md)+.date-mask{padding-block:.5em}\n"] }]
|
|
6511
6581
|
}], propDecorators: { type: [{
|
|
6512
6582
|
type: Input
|
|
6513
6583
|
}], size: [{
|
|
@@ -6581,10 +6651,10 @@ class TextareaComponent {
|
|
|
6581
6651
|
}
|
|
6582
6652
|
}
|
|
6583
6653
|
/** @nocollapse */ TextareaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: TextareaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6584
|
-
/** @nocollapse */ TextareaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: TextareaComponent, selector: "textarea[kirby-textarea]", inputs: { value: "value", borderless: "borderless", hasError: "hasError", autocomplete: "autocomplete", autocorrect: "autocorrect", maxlength: "maxlength" }, host: { listeners: { "keyup": "_onKeyUp($event.target.value)", "paste": "_onCutPaste($event.target)", "cut": "_onCutPaste($event.target)" }, properties: { "class.borderless": "this.borderless", "class.error": "this.hasError", "attr.autocomplete": "this.autocomplete", "attr.autocorrect": "this.autocorrect", "attr.maxlength": "this.maxlength" } }, usesOnChanges: true, ngImport: i0, template: "<ng-content *ngIf=\"!value\"></ng-content>\n<ng-container *ngIf=\"value\">{{ value }}</ng-container>\n", styles: [":host(.error){border:1px solid var(--kirby-danger);padding:calc(1em - 1px)}:host(.cloned-input){pointer-events:none;position:absolute;top:0;left:0}:host-context(label).cloned-input{top:24px}:host{background-color:var(--kirby-white);color:var(--kirby-white-contrast);border:none;box-sizing:border-box;display:block;font-family:var(--kirby-font-family);font-size:1rem;line-height:1.5;outline:none;margin:0;-webkit-appearance:none;appearance:none;border-radius:16px;box-shadow:0 5px 10px -10px #1c1c1c4d,0 0 5px #1c1c1c14;padding:1em;width:100%}:host:host-context(kirby-item),:host.borderless{border-radius:0;box-shadow:none;padding-inline:0;width:auto}:host:disabled{background-color:var(--kirby-light-tint);color:var(--kirby-text-color-semi-dark);box-shadow:none}:host::placeholder{color:var(--kirby-text-color-semi-dark)}:host{font-family:var(--kirby-font-family);resize:none}@media (min-width: 721px){:host{resize:vertical}}\n"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
6654
|
+
/** @nocollapse */ TextareaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: TextareaComponent, selector: "textarea[kirby-textarea]", inputs: { value: "value", borderless: "borderless", hasError: "hasError", autocomplete: "autocomplete", autocorrect: "autocorrect", maxlength: "maxlength" }, host: { listeners: { "keyup": "_onKeyUp($event.target.value)", "paste": "_onCutPaste($event.target)", "cut": "_onCutPaste($event.target)" }, properties: { "class.borderless": "this.borderless", "class.error": "this.hasError", "attr.autocomplete": "this.autocomplete", "attr.autocorrect": "this.autocorrect", "attr.maxlength": "this.maxlength" } }, usesOnChanges: true, ngImport: i0, template: "<ng-content *ngIf=\"!value\"></ng-content>\n<ng-container *ngIf=\"value\">{{ value }}</ng-container>\n", styles: [":host(.error){border:1px solid var(--kirby-danger);padding:calc(1em - 1px)}:host(.cloned-input){pointer-events:none;position:absolute;top:0;left:0}:host-context(label).cloned-input{top:24px}:host{background-color:var(--kirby-white);color:var(--kirby-white-contrast);border:none;box-sizing:border-box;display:block;font-family:var(--kirby-font-family);font-size:1rem;line-height:1.5;outline:none;margin:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:16px;box-shadow:0 5px 10px -10px #1c1c1c4d,0 0 5px #1c1c1c14;padding:1em;width:100%}:host:host-context(kirby-item),:host.borderless{border-radius:0;box-shadow:none;padding-inline:0;width:auto}:host:disabled{background-color:var(--kirby-light-tint);color:var(--kirby-text-color-semi-dark);box-shadow:none}:host::placeholder{color:var(--kirby-text-color-semi-dark)}:host{font-family:var(--kirby-font-family);resize:none}@media (min-width: 721px){:host{resize:vertical}}\n"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
6585
6655
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: TextareaComponent, decorators: [{
|
|
6586
6656
|
type: Component,
|
|
6587
|
-
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'textarea[kirby-textarea]', template: "<ng-content *ngIf=\"!value\"></ng-content>\n<ng-container *ngIf=\"value\">{{ value }}</ng-container>\n", styles: [":host(.error){border:1px solid var(--kirby-danger);padding:calc(1em - 1px)}:host(.cloned-input){pointer-events:none;position:absolute;top:0;left:0}:host-context(label).cloned-input{top:24px}:host{background-color:var(--kirby-white);color:var(--kirby-white-contrast);border:none;box-sizing:border-box;display:block;font-family:var(--kirby-font-family);font-size:1rem;line-height:1.5;outline:none;margin:0;-webkit-appearance:none;appearance:none;border-radius:16px;box-shadow:0 5px 10px -10px #1c1c1c4d,0 0 5px #1c1c1c14;padding:1em;width:100%}:host:host-context(kirby-item),:host.borderless{border-radius:0;box-shadow:none;padding-inline:0;width:auto}:host:disabled{background-color:var(--kirby-light-tint);color:var(--kirby-text-color-semi-dark);box-shadow:none}:host::placeholder{color:var(--kirby-text-color-semi-dark)}:host{font-family:var(--kirby-font-family);resize:none}@media (min-width: 721px){:host{resize:vertical}}\n"] }]
|
|
6657
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'textarea[kirby-textarea]', template: "<ng-content *ngIf=\"!value\"></ng-content>\n<ng-container *ngIf=\"value\">{{ value }}</ng-container>\n", styles: [":host(.error){border:1px solid var(--kirby-danger);padding:calc(1em - 1px)}:host(.cloned-input){pointer-events:none;position:absolute;top:0;left:0}:host-context(label).cloned-input{top:24px}:host{background-color:var(--kirby-white);color:var(--kirby-white-contrast);border:none;box-sizing:border-box;display:block;font-family:var(--kirby-font-family);font-size:1rem;line-height:1.5;outline:none;margin:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:16px;box-shadow:0 5px 10px -10px #1c1c1c4d,0 0 5px #1c1c1c14;padding:1em;width:100%}:host:host-context(kirby-item),:host.borderless{border-radius:0;box-shadow:none;padding-inline:0;width:auto}:host:disabled{background-color:var(--kirby-light-tint);color:var(--kirby-text-color-semi-dark);box-shadow:none}:host::placeholder{color:var(--kirby-text-color-semi-dark)}:host{font-family:var(--kirby-font-family);resize:none}@media (min-width: 721px){:host{resize:vertical}}\n"] }]
|
|
6588
6658
|
}], propDecorators: { value: [{
|
|
6589
6659
|
type: Input
|
|
6590
6660
|
}], borderless: [{
|
|
@@ -6922,8 +6992,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImpor
|
|
|
6922
6992
|
}] } });
|
|
6923
6993
|
|
|
6924
6994
|
class FabSheetComponent {
|
|
6925
|
-
constructor(renderer, document) {
|
|
6995
|
+
constructor(renderer, changeDetectorRef, document) {
|
|
6926
6996
|
this.renderer = renderer;
|
|
6997
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
6927
6998
|
this.document = document;
|
|
6928
6999
|
this.disabled = false;
|
|
6929
7000
|
this.horizontalAlignment = 'right';
|
|
@@ -6955,16 +7026,20 @@ class FabSheetComponent {
|
|
|
6955
7026
|
else {
|
|
6956
7027
|
this.renderer.removeClass(this.document.body, 'fab-sheet-active');
|
|
6957
7028
|
}
|
|
6958
|
-
|
|
7029
|
+
// Postpone backdrop visibility update to allow for animation of opacity
|
|
7030
|
+
setTimeout(() => {
|
|
7031
|
+
this._isBackdropVisible = this.isFabSheetOpen;
|
|
7032
|
+
this.changeDetectorRef.markForCheck();
|
|
7033
|
+
});
|
|
6959
7034
|
}
|
|
6960
7035
|
}
|
|
6961
|
-
/** @nocollapse */ FabSheetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: FabSheetComponent, deps: [{ token: i0.Renderer2 }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
|
|
6962
|
-
/** @nocollapse */ FabSheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: FabSheetComponent, selector: "kirby-fab-sheet", inputs: { disabled: "disabled", horizontalAlignment: "horizontalAlignment" }, host: { properties: { "class.is-open": "this.isFabSheetOpen", "class.backdrop-visible": "this.isBackdropVisible" } }, queries: [{ propertyName: "actionSheet", first: true, predicate: ActionSheetComponent, descendants: true }], viewQueries: [{ propertyName: "ionFabButton", first: true, predicate: IonFabButton, descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<ion-backdrop\n *ngIf=\"actionSheet && isFabSheetOpen\"\n (ionBackdropTap)=\"hideActions(fab)\"\n (click)=\"hideActions(fab)\"\n></ion-backdrop>\n<ion-fab #fab (click)=\"disabled || onFabClick(fab)\">\n <ion-fab-button
|
|
7036
|
+
/** @nocollapse */ FabSheetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: FabSheetComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
|
|
7037
|
+
/** @nocollapse */ FabSheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: FabSheetComponent, selector: "kirby-fab-sheet", inputs: { disabled: "disabled", horizontalAlignment: "horizontalAlignment" }, host: { properties: { "class.is-open": "this.isFabSheetOpen", "class.backdrop-visible": "this.isBackdropVisible" } }, queries: [{ propertyName: "actionSheet", first: true, predicate: ActionSheetComponent, descendants: true }], viewQueries: [{ propertyName: "ionFabButton", first: true, predicate: IonFabButton, descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<ion-backdrop\n *ngIf=\"actionSheet && isFabSheetOpen\"\n (ionBackdropTap)=\"hideActions(fab)\"\n (click)=\"hideActions(fab)\"\n></ion-backdrop>\n<ion-fab #fab (click)=\"disabled || onFabClick(fab)\">\n <ion-fab-button [disabled]=\"disabled\" [attr.disabled]=\"disabled ? true : null\" tabindex=\"-1\">\n <ng-content select=\"kirby-icon\"></ng-content>\n </ion-fab-button>\n <ion-fab-list *ngIf=\"actionSheet\" side=\"top\" class=\"{{ horizontalAlignment }}\">\n <ng-content select=\"kirby-action-sheet\"></ng-content>\n </ion-fab-list>\n</ion-fab>\n", styles: [":host{--kirby-action-sheet-margin-horizontal: 16px}ion-fab-button{--box-shadow: 0 20px 30px -15px rgba(28, 28, 28, .3), 0 0 5px 0 rgba(28, 28, 28, .08);width:64px;height:64px;-webkit-user-select:none;user-select:none;outline:none}@media (hover: hover){ion-fab-button:focus{--border-width: 1px;--border-style: solid;--border-color: #4d90fe}}ion-fab-button[disabled]{--background: var(--kirby-semi-light);--box-shadow: none;opacity:1}ion-fab{position:fixed;bottom:16px;right:16px}:host-context(.fixed-content) ion-fab{position:absolute}ion-backdrop{opacity:0;transition:opacity .75s;position:fixed;z-index:999}:host(.backdrop-visible) ion-backdrop{opacity:.4}@media (min-width: 721px){:host(.backdrop-visible) ion-backdrop{opacity:0}}ion-fab-list{margin-top:76px;margin-bottom:76px;right:0}\n"], components: [{ type: i1.IonBackdrop, selector: "ion-backdrop", inputs: ["stopPropagation", "tappable", "visible"] }, { type: i1.IonFab, selector: "ion-fab", inputs: ["activated", "edge", "horizontal", "vertical"] }, { type: i1.IonFabButton, selector: "ion-fab-button", inputs: ["activated", "closeIcon", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "show", "size", "target", "translucent", "type"] }, { type: i1.IonFabList, selector: "ion-fab-list", inputs: ["activated", "side"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
6963
7038
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: FabSheetComponent, decorators: [{
|
|
6964
7039
|
type: Component,
|
|
6965
|
-
args: [{ selector: 'kirby-fab-sheet', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-backdrop\n *ngIf=\"actionSheet && isFabSheetOpen\"\n (ionBackdropTap)=\"hideActions(fab)\"\n (click)=\"hideActions(fab)\"\n></ion-backdrop>\n<ion-fab #fab (click)=\"disabled || onFabClick(fab)\">\n <ion-fab-button
|
|
7040
|
+
args: [{ selector: 'kirby-fab-sheet', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-backdrop\n *ngIf=\"actionSheet && isFabSheetOpen\"\n (ionBackdropTap)=\"hideActions(fab)\"\n (click)=\"hideActions(fab)\"\n></ion-backdrop>\n<ion-fab #fab (click)=\"disabled || onFabClick(fab)\">\n <ion-fab-button [disabled]=\"disabled\" [attr.disabled]=\"disabled ? true : null\" tabindex=\"-1\">\n <ng-content select=\"kirby-icon\"></ng-content>\n </ion-fab-button>\n <ion-fab-list *ngIf=\"actionSheet\" side=\"top\" class=\"{{ horizontalAlignment }}\">\n <ng-content select=\"kirby-action-sheet\"></ng-content>\n </ion-fab-list>\n</ion-fab>\n", styles: [":host{--kirby-action-sheet-margin-horizontal: 16px}ion-fab-button{--box-shadow: 0 20px 30px -15px rgba(28, 28, 28, .3), 0 0 5px 0 rgba(28, 28, 28, .08);width:64px;height:64px;-webkit-user-select:none;user-select:none;outline:none}@media (hover: hover){ion-fab-button:focus{--border-width: 1px;--border-style: solid;--border-color: #4d90fe}}ion-fab-button[disabled]{--background: var(--kirby-semi-light);--box-shadow: none;opacity:1}ion-fab{position:fixed;bottom:16px;right:16px}:host-context(.fixed-content) ion-fab{position:absolute}ion-backdrop{opacity:0;transition:opacity .75s;position:fixed;z-index:999}:host(.backdrop-visible) ion-backdrop{opacity:.4}@media (min-width: 721px){:host(.backdrop-visible) ion-backdrop{opacity:0}}ion-fab-list{margin-top:76px;margin-bottom:76px;right:0}\n"] }]
|
|
6966
7041
|
}], ctorParameters: function () {
|
|
6967
|
-
return [{ type: i0.Renderer2 }, { type: undefined, decorators: [{
|
|
7042
|
+
return [{ type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
|
|
6968
7043
|
type: Inject,
|
|
6969
7044
|
args: [DOCUMENT]
|
|
6970
7045
|
}] }];
|
|
@@ -6996,10 +7071,10 @@ class FlagComponent {
|
|
|
6996
7071
|
}
|
|
6997
7072
|
}
|
|
6998
7073
|
/** @nocollapse */ FlagComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: FlagComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6999
|
-
/** @nocollapse */ FlagComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: FlagComponent, selector: "kirby-flag", inputs: { size: "size", themeColor: "themeColor" }, host: { properties: { "class": "this._cssClass" } }, ngImport: i0, template: ` <ng-content></ng-content> `, isInline: true, styles: [":host{display:inline-block;background-color:var(--kirby-flag-background-color, transparent);color:var(--kirby-flag-color, var(--kirby-white-contrast));border:1px solid var(--kirby-flag-border-color, var(--kirby-medium));border-radius:4px;font-size:16px;padding:2px 8px;font-weight:500}:host.sm{font-size:14px}:host.xs{font-size:12px;padding-left:4px;padding-right:4px}:host(.success){--kirby-flag-background-color:
|
|
7074
|
+
/** @nocollapse */ FlagComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: FlagComponent, selector: "kirby-flag", inputs: { size: "size", themeColor: "themeColor" }, host: { properties: { "class": "this._cssClass" } }, ngImport: i0, template: ` <ng-content></ng-content> `, isInline: true, styles: [":host{display:inline-block;background-color:var(--kirby-flag-background-color, transparent);color:var(--kirby-flag-color, var(--kirby-white-contrast));border:1px solid var(--kirby-flag-border-color, var(--kirby-medium));border-radius:4px;font-size:16px;padding:2px 8px;font-weight:500;line-height:1.375}:host.sm{font-size:14px;line-height:1.2857142857}:host.xs{font-size:12px;line-height:1.1666666667;padding-left:4px;padding-right:4px}:host(.success){--kirby-flag-background-color: var(--kirby-success);--kirby-flag-color: var(--kirby-success-contrast);--kirby-flag-border-color: var(--kirby-success)}:host(.warning){--kirby-flag-background-color: var(--kirby-warning);--kirby-flag-color: var(--kirby-warning-contrast);--kirby-flag-border-color: var(--kirby-warning)}:host(.semi-light){--kirby-flag-background-color: var(--kirby-semi-light);--kirby-flag-color: var(--kirby-semi-light-contrast);--kirby-flag-border-color: var(--kirby-semi-light)}:host(.danger){--kirby-flag-background-color: #ff878a;--kirby-flag-color: #1c1c1c;--kirby-flag-border-color: #ff878a}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
7000
7075
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: FlagComponent, decorators: [{
|
|
7001
7076
|
type: Component,
|
|
7002
|
-
args: [{ selector: 'kirby-flag', template: ` <ng-content></ng-content> `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:inline-block;background-color:var(--kirby-flag-background-color, transparent);color:var(--kirby-flag-color, var(--kirby-white-contrast));border:1px solid var(--kirby-flag-border-color, var(--kirby-medium));border-radius:4px;font-size:16px;padding:2px 8px;font-weight:500}:host.sm{font-size:14px}:host.xs{font-size:12px;padding-left:4px;padding-right:4px}:host(.success){--kirby-flag-background-color:
|
|
7077
|
+
args: [{ selector: 'kirby-flag', template: ` <ng-content></ng-content> `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:inline-block;background-color:var(--kirby-flag-background-color, transparent);color:var(--kirby-flag-color, var(--kirby-white-contrast));border:1px solid var(--kirby-flag-border-color, var(--kirby-medium));border-radius:4px;font-size:16px;padding:2px 8px;font-weight:500;line-height:1.375}:host.sm{font-size:14px;line-height:1.2857142857}:host.xs{font-size:12px;line-height:1.1666666667;padding-left:4px;padding-right:4px}:host(.success){--kirby-flag-background-color: var(--kirby-success);--kirby-flag-color: var(--kirby-success-contrast);--kirby-flag-border-color: var(--kirby-success)}:host(.warning){--kirby-flag-background-color: var(--kirby-warning);--kirby-flag-color: var(--kirby-warning-contrast);--kirby-flag-border-color: var(--kirby-warning)}:host(.semi-light){--kirby-flag-background-color: var(--kirby-semi-light);--kirby-flag-color: var(--kirby-semi-light-contrast);--kirby-flag-border-color: var(--kirby-semi-light)}:host(.danger){--kirby-flag-background-color: #ff878a;--kirby-flag-color: #1c1c1c;--kirby-flag-border-color: #ff878a}\n"] }]
|
|
7003
7078
|
}], propDecorators: { size: [{
|
|
7004
7079
|
type: Input
|
|
7005
7080
|
}], themeColor: [{
|
|
@@ -7858,18 +7933,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImpor
|
|
|
7858
7933
|
}]
|
|
7859
7934
|
}] });
|
|
7860
7935
|
|
|
7861
|
-
class ModalFooterComponent {
|
|
7862
|
-
constructor() {
|
|
7936
|
+
class ModalFooterComponent extends ModalElementComponent {
|
|
7937
|
+
constructor(elementRef, modalElementsAdvertiser) {
|
|
7938
|
+
super(ModalElementType.FOOTER, elementRef, modalElementsAdvertiser);
|
|
7863
7939
|
this.snapToKeyboard = false;
|
|
7864
7940
|
this.type = 'fixed';
|
|
7865
7941
|
}
|
|
7866
7942
|
}
|
|
7867
|
-
/** @nocollapse */ ModalFooterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: ModalFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
7868
|
-
/** @nocollapse */ ModalFooterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: ModalFooterComponent, selector: "kirby-modal-footer", inputs: { snapToKeyboard: "snapToKeyboard", type: "type" }, host: { properties: { "class.snap-to-keyboard": "this.snapToKeyboard", "class": "this.type" } }, ngImport: i0, template: "<ion-footer>\n <ng-content></ng-content>\n</ion-footer>\n", styles: ["ion-footer{box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14;display:flex;justify-content:var(--kirby-modal-footer-justify-content, center);align-items:center;background-color:var(--kirby-modal-footer-background, var(--kirby-white));color:var(--kirby-modal-footer-color, var(--kirby-white-contrast));padding:8px 16px;padding-bottom:calc(8px + var(--kirby-modal-footer-safe-area-bottom, 0px))}@media (max-width: 720px){:host{--kirby-modal-footer-safe-area-bottom: var(--kirby-safe-area-bottom)}}:host(.snap-to-keyboard) ion-footer{transition:transform .15s ease-out}:host(.light) ion-footer{background-color:var(--kirby-background-color)}:host(.inline) ion-footer{background:transparent;box-shadow:none}:host-context(.keyboard-visible).snap-to-keyboard ion-footer{transition:transform .25s ease-out 1ms;transform:translateY(calc((var(--keyboard-offset, 0px) - var(--kirby-modal-footer-safe-area-bottom, 0px)) * -1))}:host-context(.modal-wrapper.full-height){--kirby-modal-footer-safe-area-bottom: var(--kirby-safe-area-bottom)}\n"], components: [{ type: i1.IonFooter, selector: "ion-footer", inputs: ["mode", "translucent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
7943
|
+
/** @nocollapse */ ModalFooterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: ModalFooterComponent, deps: [{ token: i0.ElementRef }, { token: ModalElementsAdvertiser, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
7944
|
+
/** @nocollapse */ ModalFooterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: ModalFooterComponent, selector: "kirby-modal-footer", inputs: { snapToKeyboard: "snapToKeyboard", type: "type" }, host: { properties: { "class.snap-to-keyboard": "this.snapToKeyboard", "class": "this.type" } }, usesInheritance: true, ngImport: i0, template: "<ion-footer>\n <ng-content></ng-content>\n</ion-footer>\n", styles: ["ion-footer{box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14;display:flex;justify-content:var(--kirby-modal-footer-justify-content, center);align-items:center;background-color:var(--kirby-modal-footer-background, var(--kirby-white));color:var(--kirby-modal-footer-color, var(--kirby-white-contrast));padding:8px 16px;padding-bottom:calc(8px + var(--kirby-modal-footer-safe-area-bottom, 0px))}@media (max-width: 720px){:host{--kirby-modal-footer-safe-area-bottom: var(--kirby-safe-area-bottom)}}:host(.snap-to-keyboard) ion-footer{transition:transform .15s ease-out}:host(.light) ion-footer{background-color:var(--kirby-background-color)}:host(.inline) ion-footer{background:transparent;box-shadow:none}:host-context(.keyboard-visible).snap-to-keyboard ion-footer{transition:transform .25s ease-out 1ms;transform:translateY(calc((var(--keyboard-offset, 0px) - var(--kirby-modal-footer-safe-area-bottom, 0px)) * -1))}:host-context(.modal-wrapper.full-height){--kirby-modal-footer-safe-area-bottom: var(--kirby-safe-area-bottom)}\n"], components: [{ type: i1.IonFooter, selector: "ion-footer", inputs: ["mode", "translucent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
7869
7945
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: ModalFooterComponent, decorators: [{
|
|
7870
7946
|
type: Component,
|
|
7871
7947
|
args: [{ selector: 'kirby-modal-footer', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-footer>\n <ng-content></ng-content>\n</ion-footer>\n", styles: ["ion-footer{box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14;display:flex;justify-content:var(--kirby-modal-footer-justify-content, center);align-items:center;background-color:var(--kirby-modal-footer-background, var(--kirby-white));color:var(--kirby-modal-footer-color, var(--kirby-white-contrast));padding:8px 16px;padding-bottom:calc(8px + var(--kirby-modal-footer-safe-area-bottom, 0px))}@media (max-width: 720px){:host{--kirby-modal-footer-safe-area-bottom: var(--kirby-safe-area-bottom)}}:host(.snap-to-keyboard) ion-footer{transition:transform .15s ease-out}:host(.light) ion-footer{background-color:var(--kirby-background-color)}:host(.inline) ion-footer{background:transparent;box-shadow:none}:host-context(.keyboard-visible).snap-to-keyboard ion-footer{transition:transform .25s ease-out 1ms;transform:translateY(calc((var(--keyboard-offset, 0px) - var(--kirby-modal-footer-safe-area-bottom, 0px)) * -1))}:host-context(.modal-wrapper.full-height){--kirby-modal-footer-safe-area-bottom: var(--kirby-safe-area-bottom)}\n"] }]
|
|
7872
|
-
}],
|
|
7948
|
+
}], ctorParameters: function () {
|
|
7949
|
+
return [{ type: i0.ElementRef }, { type: ModalElementsAdvertiser, decorators: [{
|
|
7950
|
+
type: Optional
|
|
7951
|
+
}] }];
|
|
7952
|
+
}, propDecorators: { snapToKeyboard: [{
|
|
7873
7953
|
type: HostBinding,
|
|
7874
7954
|
args: ['class.snap-to-keyboard']
|
|
7875
7955
|
}, {
|
|
@@ -8124,8 +8204,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImpor
|
|
|
8124
8204
|
type: Input,
|
|
8125
8205
|
args: ['kirbyPageContent']
|
|
8126
8206
|
}] } });
|
|
8127
|
-
class PageProgressComponent {
|
|
8128
|
-
constructor(modalWrapper) {
|
|
8207
|
+
class PageProgressComponent extends ModalElementComponent {
|
|
8208
|
+
constructor(modalWrapper, modalElementsAdvertiser, elementRef) {
|
|
8209
|
+
super(ModalElementType.PAGE_PROGRESS, elementRef, modalElementsAdvertiser);
|
|
8129
8210
|
this.modalWrapper = modalWrapper;
|
|
8130
8211
|
// TODO: Find alternative implementation, which aligns with future page configuration / consumption
|
|
8131
8212
|
// This implementation was chosen over expanding `moveChild` method in component wrapper with yet another scenario
|
|
@@ -8137,8 +8218,8 @@ class PageProgressComponent {
|
|
|
8137
8218
|
}
|
|
8138
8219
|
}
|
|
8139
8220
|
}
|
|
8140
|
-
/** @nocollapse */ PageProgressComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PageProgressComponent, deps: [{ token: ModalWrapperComponent, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
8141
|
-
/** @nocollapse */ PageProgressComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: PageProgressComponent, selector: "kirby-page-progress", host: { properties: { "attr.slot": "this.slot" } }, ngImport: i0, template: ` <ng-content></ng-content> `, isInline: true, styles: [":host{display:flex}\n"] });
|
|
8221
|
+
/** @nocollapse */ PageProgressComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PageProgressComponent, deps: [{ token: ModalWrapperComponent, optional: true, skipSelf: true }, { token: ModalElementsAdvertiser, optional: true }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
8222
|
+
/** @nocollapse */ PageProgressComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: PageProgressComponent, selector: "kirby-page-progress", host: { properties: { "attr.slot": "this.slot" } }, usesInheritance: true, ngImport: i0, template: ` <ng-content></ng-content> `, isInline: true, styles: [":host{display:flex}\n"] });
|
|
8142
8223
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PageProgressComponent, decorators: [{
|
|
8143
8224
|
type: Component,
|
|
8144
8225
|
args: [{
|
|
@@ -8151,22 +8232,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImpor
|
|
|
8151
8232
|
type: Optional
|
|
8152
8233
|
}, {
|
|
8153
8234
|
type: SkipSelf
|
|
8154
|
-
}] }
|
|
8235
|
+
}] }, { type: ModalElementsAdvertiser, decorators: [{
|
|
8236
|
+
type: Optional
|
|
8237
|
+
}] }, { type: i0.ElementRef }];
|
|
8155
8238
|
}, propDecorators: { slot: [{
|
|
8156
8239
|
type: HostBinding,
|
|
8157
8240
|
args: ['attr.slot']
|
|
8158
8241
|
}] } });
|
|
8159
|
-
class PageTitleComponent {
|
|
8242
|
+
class PageTitleComponent extends ModalElementComponent {
|
|
8243
|
+
constructor(elementRef, modalElementsAdvertiser) {
|
|
8244
|
+
super(ModalElementType.TITLE, elementRef, modalElementsAdvertiser);
|
|
8245
|
+
}
|
|
8160
8246
|
}
|
|
8161
|
-
/** @nocollapse */ PageTitleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PageTitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8162
|
-
/** @nocollapse */ PageTitleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: PageTitleComponent, selector: "kirby-page-title", ngImport: i0, template: ` <ng-content></ng-content> `, isInline: true });
|
|
8247
|
+
/** @nocollapse */ PageTitleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PageTitleComponent, deps: [{ token: i0.ElementRef }, { token: ModalElementsAdvertiser, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
8248
|
+
/** @nocollapse */ PageTitleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: PageTitleComponent, selector: "kirby-page-title", usesInheritance: true, ngImport: i0, template: ` <ng-content></ng-content> `, isInline: true });
|
|
8163
8249
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PageTitleComponent, decorators: [{
|
|
8164
8250
|
type: Component,
|
|
8165
8251
|
args: [{
|
|
8166
8252
|
selector: 'kirby-page-title',
|
|
8167
8253
|
template: ` <ng-content></ng-content> `,
|
|
8168
8254
|
}]
|
|
8169
|
-
}]
|
|
8255
|
+
}], ctorParameters: function () {
|
|
8256
|
+
return [{ type: i0.ElementRef }, { type: ModalElementsAdvertiser, decorators: [{
|
|
8257
|
+
type: Optional
|
|
8258
|
+
}] }];
|
|
8259
|
+
} });
|
|
8170
8260
|
class PageContentComponent {
|
|
8171
8261
|
}
|
|
8172
8262
|
/** @nocollapse */ PageContentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PageContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
@@ -8202,6 +8292,7 @@ class PageComponent {
|
|
|
8202
8292
|
this.enter = new EventEmitter();
|
|
8203
8293
|
this.leave = new EventEmitter();
|
|
8204
8294
|
this.refresh = new EventEmitter();
|
|
8295
|
+
this.backButtonClick = new EventEmitter();
|
|
8205
8296
|
this.pageTitleIntersectionObserverRef = this.pageTitleIntersectionObserver();
|
|
8206
8297
|
this.urls = [];
|
|
8207
8298
|
this.ngOnDestroy$ = new Subject();
|
|
@@ -8246,6 +8337,7 @@ class PageComponent {
|
|
|
8246
8337
|
this.windowRef.nativeWindow.addEventListener(selectedTabClickEvent, () => {
|
|
8247
8338
|
this.content.scrollToTop(KirbyAnimation.Duration.LONG);
|
|
8248
8339
|
});
|
|
8340
|
+
this.interceptBackButtonClicksSetup();
|
|
8249
8341
|
}
|
|
8250
8342
|
ngAfterContentChecked() {
|
|
8251
8343
|
if (!this.urls.includes(this.router.url)) {
|
|
@@ -8289,6 +8381,17 @@ class PageComponent {
|
|
|
8289
8381
|
this.tabsComponent.tabBarBottomHidden = false;
|
|
8290
8382
|
}
|
|
8291
8383
|
}
|
|
8384
|
+
interceptBackButtonClicksSetup() {
|
|
8385
|
+
// Intercept back-button click events, defaulting to the built-in click-handler.
|
|
8386
|
+
if (this.backButtonClick.observers.length === 0) {
|
|
8387
|
+
this.backButtonClick
|
|
8388
|
+
.pipe(takeUntil(this.ngOnDestroy$))
|
|
8389
|
+
.subscribe(this.backButtonDelegate.onClick.bind(this.backButtonDelegate));
|
|
8390
|
+
}
|
|
8391
|
+
this.backButtonDelegate.onClick = (event) => {
|
|
8392
|
+
this.backButtonClick.emit(event);
|
|
8393
|
+
};
|
|
8394
|
+
}
|
|
8292
8395
|
initializeTitle() {
|
|
8293
8396
|
// Ensures initializeTitle() won't run, if already initialized
|
|
8294
8397
|
if (this.hasPageTitle)
|
|
@@ -8369,7 +8472,7 @@ class PageComponent {
|
|
|
8369
8472
|
}
|
|
8370
8473
|
}
|
|
8371
8474
|
/** @nocollapse */ PageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PageComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1$1.Router }, { token: i0.ChangeDetectorRef }, { token: WindowRef }, { token: ModalNavigationService }, { token: TabsComponent, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
8372
|
-
/** @nocollapse */ PageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: PageComponent, selector: "kirby-page", inputs: { title: "title", subtitle: "subtitle", toolbarTitle: "toolbarTitle", titleAlignment: "titleAlignment", defaultBackHref: "defaultBackHref", hideBackButton: "hideBackButton", titleMaxLines: "titleMaxLines", tabBarBottomHidden: "tabBarBottomHidden" }, outputs: { enter: "enter", leave: "leave", refresh: "refresh" }, host: { listeners: { "window:keyboardWillShow": "_onKeyboardWillShow($event)", "window:keyboardWillHide": "_onKeyboardWillHide()" } }, 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: "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: "pageTitle", first: true, predicate: ["pageTitle"], 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 }], usesOnChanges: true, ngImport: i0, template: "<ion-header>\n <ion-toolbar>\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 ></ion-back-button>\n </ion-buttons>\n <ion-title>\n <div class=\"toolbar-title hide\" [class.fade-in]=\"toolbarTitleVisible\">\n <ng-container *ngTemplateOutlet=\"toolbarTitleTemplate\"></ng-container>\n </div>\n </ion-title>\n <ion-buttons\n class=\"hide\"\n slot=\"primary\"\n [class.fade-in]=\"toolbarStickyActionsVisible && stickyActionsTemplate\"\n >\n <ng-container *ngTemplateOutlet=\"stickyActionsTemplate\"></ng-container>\n </ion-buttons>\n <ion-buttons\n class=\"hide\"\n slot=\"secondary\"\n [class.fade-in]=\"toolbarFixedActionsVisible && fixedActionsTemplate\"\n >\n <ng-container *ngTemplateOutlet=\"fixedActionsTemplate\"></ng-container>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content scrollEvents=\"true\" forceOverscroll=\"false\">\n <ion-refresher\n *ngIf=\"refresh.observers.length > 0\"\n (ionRefresh)=\"delegateRefreshEvent($event)\"\n slot=\"fixed\"\n >\n <kirby-spinner></kirby-spinner>\n </ion-refresher>\n\n <div class=\"content-inner\">\n <div\n class=\"page-header\"\n *ngIf=\"hasPageTitle\"\n [ngClass]=\"{\n 'text-center': titleAlignment === 'center',\n 'text-right': titleAlignment === 'right'\n }\"\n >\n <div #pageTitle class=\"page-title\" [class.has-actions]=\"hasActionsInPage\">\n <ng-container\n *ngTemplateOutlet=\"customTitleTemplate || defaultPageTitleTemplate\"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"pageActionsTemplate || defaultPageActionsTemplate\"\n ></ng-container>\n </div>\n <div *ngIf=\"hasPageSubtitle\" class=\"page-subtitle\">\n <ng-container\n *ngTemplateOutlet=\"customSubtitleTemplate || defaultPageSubtitleTemplate\"\n ></ng-container>\n </div>\n </div>\n\n <!-- Content -->\n <ng-container\n *ngTemplateOutlet=\"customContentTemplate || defaultContentTemplate\"\n ></ng-container>\n </div>\n\n <div slot=\"fixed\" class=\"fixed-content\" *ngIf=\"fixedContentTemplate\">\n <div class=\"content-inner\">\n <ng-container *ngTemplateOutlet=\"fixedContentTemplate\"></ng-container>\n </div>\n </div>\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 <h1 [kirbyFitHeading]=\"fitHeadingConfig\">\n <ng-container *ngTemplateOutlet=\"simpleTitleTemplate\"></ng-container>\n </h1>\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}@media (min-width: 1025px) and (hover: hover) and (pointer: fine){ion-header,ion-toolbar{max-width:768px}}ion-toolbar{--border-width: 0 !important;--padding-start: 4px;--padding-end: 4px;--padding-top: 0;--padding-bottom: 0}ion-toolbar ion-buttons[slot=secondary]{order:6}ion-toolbar ion-title .toolbar-title{text-overflow:ellipsis;white-space:nowrap;pointer-events:auto;overflow:hidden}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}ion-title{box-sizing:border-box;font-size:16px;font-weight:400}ion-back-button{--color: var(--kirby-black);--icon-font-size: 24px;height:44px;width:44px}.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-start: var(--page-content-padding-start, 16px);--padding-end: var(--page-content-padding-end, 16px);--background: var(--kirby-background-color)}ion-content .content-inner{max-width:var(--page-content-max-width, 720px);margin:0 auto;padding-bottom:40px}ion-content .fixed-content{width:100%;position:absolute;bottom:0}ion-content .fixed-content .content-inner{position:relative}\n"], components: [{ type: i1.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { type: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { type: i1.IonBackButton, selector: "ion-back-button", inputs: ["color", "defaultHref", "disabled", "icon", "mode", "routerAnimation", "text", "type"] }, { type: i1.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { type: i1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { type: i1.IonRefresher, selector: "ion-refresher", inputs: ["closeDuration", "disabled", "pullFactor", "pullMax", "pullMin", "snapbackDuration"] }, { type: SpinnerComponent, selector: "kirby-spinner" }, { type: i1.IonFooter, selector: "ion-footer", inputs: ["mode", "translucent"] }], directives: [{ type: i1.IonBackButtonDelegate, selector: "ion-back-button", inputs: ["defaultHref", "routerAnimation"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: FitHeadingDirective, selector: "h1[kirbyFitHeading],h2[kirbyFitHeading],h3[kirbyFitHeading]", inputs: ["kirbyFitHeading"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
8475
|
+
/** @nocollapse */ PageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: PageComponent, selector: "kirby-page", inputs: { title: "title", subtitle: "subtitle", toolbarTitle: "toolbarTitle", titleAlignment: "titleAlignment", defaultBackHref: "defaultBackHref", hideBackButton: "hideBackButton", titleMaxLines: "titleMaxLines", tabBarBottomHidden: "tabBarBottomHidden" }, outputs: { enter: "enter", leave: "leave", refresh: "refresh", backButtonClick: "backButtonClick" }, host: { listeners: { "window:keyboardWillShow": "_onKeyboardWillShow($event)", "window:keyboardWillHide": "_onKeyboardWillHide()" } }, 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: "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: "backButtonDelegate", first: true, predicate: IonBackButtonDelegate, descendants: true }, { propertyName: "pageTitle", first: true, predicate: ["pageTitle"], 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 }], usesOnChanges: true, ngImport: i0, template: "<ion-header>\n <ion-toolbar>\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 ></ion-back-button>\n </ion-buttons>\n <ion-title>\n <div class=\"toolbar-title hide\" [class.fade-in]=\"toolbarTitleVisible\">\n <ng-container *ngTemplateOutlet=\"toolbarTitleTemplate\"></ng-container>\n </div>\n </ion-title>\n <ion-buttons\n class=\"hide\"\n slot=\"primary\"\n [class.fade-in]=\"toolbarStickyActionsVisible && stickyActionsTemplate\"\n >\n <ng-container *ngTemplateOutlet=\"stickyActionsTemplate\"></ng-container>\n </ion-buttons>\n <ion-buttons\n class=\"hide\"\n slot=\"secondary\"\n [class.fade-in]=\"toolbarFixedActionsVisible && fixedActionsTemplate\"\n >\n <ng-container *ngTemplateOutlet=\"fixedActionsTemplate\"></ng-container>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content scrollEvents=\"true\" forceOverscroll=\"false\">\n <ion-refresher\n *ngIf=\"refresh.observers.length > 0\"\n (ionRefresh)=\"delegateRefreshEvent($event)\"\n slot=\"fixed\"\n >\n <kirby-spinner></kirby-spinner>\n </ion-refresher>\n\n <div class=\"content-inner\">\n <div\n class=\"page-header\"\n *ngIf=\"hasPageTitle\"\n [ngClass]=\"{\n 'text-center': titleAlignment === 'center',\n 'text-right': titleAlignment === 'right'\n }\"\n >\n <div #pageTitle class=\"page-title\" [class.has-actions]=\"hasActionsInPage\">\n <ng-container\n *ngTemplateOutlet=\"customTitleTemplate || defaultPageTitleTemplate\"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"pageActionsTemplate || defaultPageActionsTemplate\"\n ></ng-container>\n </div>\n <div *ngIf=\"hasPageSubtitle\" class=\"page-subtitle\">\n <ng-container\n *ngTemplateOutlet=\"customSubtitleTemplate || defaultPageSubtitleTemplate\"\n ></ng-container>\n </div>\n </div>\n\n <!-- Content -->\n <ng-container\n *ngTemplateOutlet=\"customContentTemplate || defaultContentTemplate\"\n ></ng-container>\n </div>\n\n <div slot=\"fixed\" class=\"fixed-content\" *ngIf=\"fixedContentTemplate\">\n <div class=\"content-inner\">\n <ng-container *ngTemplateOutlet=\"fixedContentTemplate\"></ng-container>\n </div>\n </div>\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 <h1 [kirbyFitHeading]=\"fitHeadingConfig\">\n <ng-container *ngTemplateOutlet=\"simpleTitleTemplate\"></ng-container>\n </h1>\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}@media (min-width: 1025px) and (hover: hover) and (pointer: fine){ion-header,ion-toolbar{max-width:768px}}ion-toolbar{--border-width: 0 !important;--padding-start: 4px;--padding-end: 4px;--padding-top: 0;--padding-bottom: 0}ion-toolbar ion-buttons[slot=secondary]{order:6}ion-toolbar ion-title .toolbar-title{text-overflow:ellipsis;white-space:nowrap;pointer-events:auto;overflow:hidden}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}ion-title{box-sizing:border-box;font-size:16px;font-weight:400}ion-back-button{--color: var(--kirby-black);--icon-font-size: 24px;height:44px;width:44px}.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-start: var(--page-content-padding-start, 16px);--padding-end: var(--page-content-padding-end, 16px);--background: var(--kirby-background-color)}ion-content .content-inner{max-width:var(--page-content-max-width, 720px);margin:0 auto;padding-bottom:40px}ion-content .fixed-content{width:100%;position:absolute;bottom:0}ion-content .fixed-content .content-inner{position:relative}\n"], components: [{ type: i1.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { type: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { type: i1.IonBackButton, selector: "ion-back-button", inputs: ["color", "defaultHref", "disabled", "icon", "mode", "routerAnimation", "text", "type"] }, { type: i1.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { type: i1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { type: i1.IonRefresher, selector: "ion-refresher", inputs: ["closeDuration", "disabled", "pullFactor", "pullMax", "pullMin", "snapbackDuration"] }, { type: SpinnerComponent, selector: "kirby-spinner" }, { type: i1.IonFooter, selector: "ion-footer", inputs: ["mode", "translucent"] }], directives: [{ type: i1.IonBackButtonDelegate, selector: "ion-back-button", inputs: ["defaultHref", "routerAnimation"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: FitHeadingDirective, selector: "h1[kirbyFitHeading],h2[kirbyFitHeading],h3[kirbyFitHeading]", inputs: ["kirbyFitHeading"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
8373
8476
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PageComponent, decorators: [{
|
|
8374
8477
|
type: Component,
|
|
8375
8478
|
args: [{ selector: 'kirby-page', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-header>\n <ion-toolbar>\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 ></ion-back-button>\n </ion-buttons>\n <ion-title>\n <div class=\"toolbar-title hide\" [class.fade-in]=\"toolbarTitleVisible\">\n <ng-container *ngTemplateOutlet=\"toolbarTitleTemplate\"></ng-container>\n </div>\n </ion-title>\n <ion-buttons\n class=\"hide\"\n slot=\"primary\"\n [class.fade-in]=\"toolbarStickyActionsVisible && stickyActionsTemplate\"\n >\n <ng-container *ngTemplateOutlet=\"stickyActionsTemplate\"></ng-container>\n </ion-buttons>\n <ion-buttons\n class=\"hide\"\n slot=\"secondary\"\n [class.fade-in]=\"toolbarFixedActionsVisible && fixedActionsTemplate\"\n >\n <ng-container *ngTemplateOutlet=\"fixedActionsTemplate\"></ng-container>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content scrollEvents=\"true\" forceOverscroll=\"false\">\n <ion-refresher\n *ngIf=\"refresh.observers.length > 0\"\n (ionRefresh)=\"delegateRefreshEvent($event)\"\n slot=\"fixed\"\n >\n <kirby-spinner></kirby-spinner>\n </ion-refresher>\n\n <div class=\"content-inner\">\n <div\n class=\"page-header\"\n *ngIf=\"hasPageTitle\"\n [ngClass]=\"{\n 'text-center': titleAlignment === 'center',\n 'text-right': titleAlignment === 'right'\n }\"\n >\n <div #pageTitle class=\"page-title\" [class.has-actions]=\"hasActionsInPage\">\n <ng-container\n *ngTemplateOutlet=\"customTitleTemplate || defaultPageTitleTemplate\"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"pageActionsTemplate || defaultPageActionsTemplate\"\n ></ng-container>\n </div>\n <div *ngIf=\"hasPageSubtitle\" class=\"page-subtitle\">\n <ng-container\n *ngTemplateOutlet=\"customSubtitleTemplate || defaultPageSubtitleTemplate\"\n ></ng-container>\n </div>\n </div>\n\n <!-- Content -->\n <ng-container\n *ngTemplateOutlet=\"customContentTemplate || defaultContentTemplate\"\n ></ng-container>\n </div>\n\n <div slot=\"fixed\" class=\"fixed-content\" *ngIf=\"fixedContentTemplate\">\n <div class=\"content-inner\">\n <ng-container *ngTemplateOutlet=\"fixedContentTemplate\"></ng-container>\n </div>\n </div>\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 <h1 [kirbyFitHeading]=\"fitHeadingConfig\">\n <ng-container *ngTemplateOutlet=\"simpleTitleTemplate\"></ng-container>\n </h1>\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}@media (min-width: 1025px) and (hover: hover) and (pointer: fine){ion-header,ion-toolbar{max-width:768px}}ion-toolbar{--border-width: 0 !important;--padding-start: 4px;--padding-end: 4px;--padding-top: 0;--padding-bottom: 0}ion-toolbar ion-buttons[slot=secondary]{order:6}ion-toolbar ion-title .toolbar-title{text-overflow:ellipsis;white-space:nowrap;pointer-events:auto;overflow:hidden}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}ion-title{box-sizing:border-box;font-size:16px;font-weight:400}ion-back-button{--color: var(--kirby-black);--icon-font-size: 24px;height:44px;width:44px}.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-start: var(--page-content-padding-start, 16px);--padding-end: var(--page-content-padding-end, 16px);--background: var(--kirby-background-color)}ion-content .content-inner{max-width:var(--page-content-max-width, 720px);margin:0 auto;padding-bottom:40px}ion-content .fixed-content{width:100%;position:absolute;bottom:0}ion-content .fixed-content .content-inner{position:relative}\n"] }]
|
|
@@ -8401,6 +8504,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImpor
|
|
|
8401
8504
|
type: Output
|
|
8402
8505
|
}], refresh: [{
|
|
8403
8506
|
type: Output
|
|
8507
|
+
}], backButtonClick: [{
|
|
8508
|
+
type: Output
|
|
8404
8509
|
}], content: [{
|
|
8405
8510
|
type: ViewChild,
|
|
8406
8511
|
args: [IonContent, { static: true }]
|
|
@@ -8413,6 +8518,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImpor
|
|
|
8413
8518
|
}], ionFooterElement: [{
|
|
8414
8519
|
type: ViewChild,
|
|
8415
8520
|
args: [IonFooter, { static: true, read: ElementRef }]
|
|
8521
|
+
}], backButtonDelegate: [{
|
|
8522
|
+
type: ViewChild,
|
|
8523
|
+
args: [IonBackButtonDelegate, { static: false }]
|
|
8416
8524
|
}], pageTitle: [{
|
|
8417
8525
|
type: ViewChild,
|
|
8418
8526
|
args: ['pageTitle', { static: false, read: ElementRef }]
|
|
@@ -8773,9 +8881,14 @@ class SegmentedControlComponent {
|
|
|
8773
8881
|
this._disableChangeOnSwipe = false;
|
|
8774
8882
|
this.segmentSelect = new EventEmitter();
|
|
8775
8883
|
}
|
|
8776
|
-
|
|
8884
|
+
/**
|
|
8885
|
+
* Ensure that the click actually did originate from within the segment-button.
|
|
8886
|
+
* We do not want to react to clicks on e.g. segment-btn-wrapper or badge.
|
|
8887
|
+
*/
|
|
8888
|
+
preventOutsideClick(event) {
|
|
8777
8889
|
if (event.target instanceof HTMLElement) {
|
|
8778
|
-
|
|
8890
|
+
const targetIsInSegmentBtn = !!event.target.closest('ion-segment-button');
|
|
8891
|
+
if (!targetIsInSegmentBtn) {
|
|
8779
8892
|
event.stopImmediatePropagation();
|
|
8780
8893
|
}
|
|
8781
8894
|
}
|
|
@@ -8835,10 +8948,10 @@ class SegmentedControlComponent {
|
|
|
8835
8948
|
}
|
|
8836
8949
|
}
|
|
8837
8950
|
/** @nocollapse */ SegmentedControlComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: SegmentedControlComponent, deps: [{ token: IconRegistryService }], target: i0.ɵɵFactoryTarget.Component });
|
|
8838
|
-
/** @nocollapse */ SegmentedControlComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: SegmentedControlComponent, selector: "kirby-segmented-control", inputs: { mode: "mode", items: "items", selectedIndex: "selectedIndex", value: "value", size: "size", disableChangeOnSwipe: "disableChangeOnSwipe" }, outputs: { segmentSelect: "segmentSelect" }, host: { attributes: { "role": "group" }, properties: { "class": "this._modeCssClass", "class.sm": "this.isSmallSize" } }, ngImport: i0, template: "<ion-segment\n *ngIf=\"mode === 'default'\"\n [value]=\"value?.id\"\n [scrollable]=\"disableChangeOnSwipe\"\n (ionChange)=\"onSegmentSelect($event.detail.value)\"\n (click)=\"
|
|
8951
|
+
/** @nocollapse */ SegmentedControlComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: SegmentedControlComponent, selector: "kirby-segmented-control", inputs: { mode: "mode", items: "items", selectedIndex: "selectedIndex", value: "value", size: "size", disableChangeOnSwipe: "disableChangeOnSwipe" }, outputs: { segmentSelect: "segmentSelect" }, host: { attributes: { "role": "group" }, properties: { "class": "this._modeCssClass", "class.sm": "this.isSmallSize" } }, ngImport: i0, template: "<ion-segment\n *ngIf=\"mode === 'default'\"\n [value]=\"value?.id\"\n [scrollable]=\"disableChangeOnSwipe\"\n (ionChange)=\"onSegmentSelect($event.detail.value)\"\n (click)=\"preventOutsideClick($event)\"\n>\n <div *ngFor=\"let item of items\" class=\"segment-btn-wrapper\">\n <ion-segment-button [value]=\"item.id\">{{ item.text }}</ion-segment-button>\n <kirby-badge\n *ngIf=\"item.badge\"\n role=\"text\"\n [attr.aria-label]=\"item.badge.description\"\n [themeColor]=\"item.badge.themeColor\"\n >\n <ng-container *ngIf=\"item.badge.icon; else badgeContent\">\n <kirby-icon\n *ngIf=\"item.badge.isCustomIcon; else defaultIconName\"\n [customName]=\"item.badge.icon\"\n ></kirby-icon>\n <ng-template #defaultIconName>\n <kirby-icon [name]=\"item.badge.icon\"></kirby-icon>\n </ng-template>\n </ng-container>\n <ng-template #badgeContent>\n {{ item.badge.content }}\n </ng-template>\n </kirby-badge>\n </div>\n</ion-segment>\n\n<ng-container *ngIf=\"mode === 'chip' || mode === 'compactChip'\">\n <kirby-chip\n *ngFor=\"let item of items; let index = index\"\n [text]=\"item.text\"\n [isSelected]=\"index === selectedIndex\"\n (click)=\"onSegmentSelect(item.id)\"\n role=\"button\"\n ></kirby-chip>\n</ng-container>\n", styles: [":host{display:block;-webkit-user-select:none;user-select:none;--kirby-badge-elevation: 0 5px 10px -10px rgba(28, 28, 28, .3), 0 0 5px 0 rgba(28, 28, 28, .08);--kirby-badge-position: absolute;--kirby-badge-top: -8px;--kirby-badge-right: 8px;--kirby-badge-z-index: 2}:host.sm ion-segment-button{min-height:32px;font-size:12px;--padding-start: 16px;--padding-end: 16px}:host.chip-mode{display:flex;flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden}@media (pointer: coarse){:host.chip-mode{scrollbar-width:none}:host.chip-mode::-webkit-scrollbar{display:none}}ion-segment{display:inline-flex;width:auto;overflow:visible;contain:unset;--background: var(--kirby-white);border-radius:999px}ion-segment-button{position:relative;min-height:40px;font-weight:400;font-size:14px;text-transform:none;--border-radius: 999px;--border-style: none;--background: none;--color: var(--kirby-white-contrast);--indicator-color: var(--kirby-black);--color-checked: var(--kirby-black-contrast);--color-hover: var(--kirby-black-tint);--indicator-box-shadow: none;--padding-start: 24px;--padding-end: 24px;--margin-bottom: 0;--margin-end: 0;--margin-start: 0;--margin-top: 0;margin:0}ion-segment-button:after{content:\"\";position:absolute;min-height:44px;min-width:44px;width:100%;height:100%;transform:translate(-50%,-50%);left:50%;top:50%}.segment-btn-wrapper{position:relative}:host-context(.plt-desktop) ion-segment-button:focus-within{outline-color:-webkit-focus-ring-color;outline-style:auto}\n"], components: [{ type: i1.IonSegment, selector: "ion-segment", inputs: ["color", "disabled", "mode", "scrollable", "swipeGesture", "value"] }, { type: i1.IonSegmentButton, selector: "ion-segment-button", inputs: ["disabled", "layout", "mode", "type", "value"] }, { type: KirbyBadge, selector: "kirby-badge", inputs: ["size", "text", "themeColor"] }, { type: IconComponent, selector: "kirby-icon", inputs: ["size", "name", "customName"] }, { type: ChipComponent, selector: "kirby-chip", inputs: ["text", "isSelected"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.SelectValueAccessor, selector: "ion-range, ion-select, ion-radio-group, ion-segment, ion-datetime" }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
8839
8952
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: SegmentedControlComponent, decorators: [{
|
|
8840
8953
|
type: Component,
|
|
8841
|
-
args: [{ selector: 'kirby-segmented-control', host: { role: 'group' }, template: "<ion-segment\n *ngIf=\"mode === 'default'\"\n [value]=\"value?.id\"\n [scrollable]=\"disableChangeOnSwipe\"\n (ionChange)=\"onSegmentSelect($event.detail.value)\"\n (click)=\"
|
|
8954
|
+
args: [{ selector: 'kirby-segmented-control', host: { role: 'group' }, template: "<ion-segment\n *ngIf=\"mode === 'default'\"\n [value]=\"value?.id\"\n [scrollable]=\"disableChangeOnSwipe\"\n (ionChange)=\"onSegmentSelect($event.detail.value)\"\n (click)=\"preventOutsideClick($event)\"\n>\n <div *ngFor=\"let item of items\" class=\"segment-btn-wrapper\">\n <ion-segment-button [value]=\"item.id\">{{ item.text }}</ion-segment-button>\n <kirby-badge\n *ngIf=\"item.badge\"\n role=\"text\"\n [attr.aria-label]=\"item.badge.description\"\n [themeColor]=\"item.badge.themeColor\"\n >\n <ng-container *ngIf=\"item.badge.icon; else badgeContent\">\n <kirby-icon\n *ngIf=\"item.badge.isCustomIcon; else defaultIconName\"\n [customName]=\"item.badge.icon\"\n ></kirby-icon>\n <ng-template #defaultIconName>\n <kirby-icon [name]=\"item.badge.icon\"></kirby-icon>\n </ng-template>\n </ng-container>\n <ng-template #badgeContent>\n {{ item.badge.content }}\n </ng-template>\n </kirby-badge>\n </div>\n</ion-segment>\n\n<ng-container *ngIf=\"mode === 'chip' || mode === 'compactChip'\">\n <kirby-chip\n *ngFor=\"let item of items; let index = index\"\n [text]=\"item.text\"\n [isSelected]=\"index === selectedIndex\"\n (click)=\"onSegmentSelect(item.id)\"\n role=\"button\"\n ></kirby-chip>\n</ng-container>\n", styles: [":host{display:block;-webkit-user-select:none;user-select:none;--kirby-badge-elevation: 0 5px 10px -10px rgba(28, 28, 28, .3), 0 0 5px 0 rgba(28, 28, 28, .08);--kirby-badge-position: absolute;--kirby-badge-top: -8px;--kirby-badge-right: 8px;--kirby-badge-z-index: 2}:host.sm ion-segment-button{min-height:32px;font-size:12px;--padding-start: 16px;--padding-end: 16px}:host.chip-mode{display:flex;flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden}@media (pointer: coarse){:host.chip-mode{scrollbar-width:none}:host.chip-mode::-webkit-scrollbar{display:none}}ion-segment{display:inline-flex;width:auto;overflow:visible;contain:unset;--background: var(--kirby-white);border-radius:999px}ion-segment-button{position:relative;min-height:40px;font-weight:400;font-size:14px;text-transform:none;--border-radius: 999px;--border-style: none;--background: none;--color: var(--kirby-white-contrast);--indicator-color: var(--kirby-black);--color-checked: var(--kirby-black-contrast);--color-hover: var(--kirby-black-tint);--indicator-box-shadow: none;--padding-start: 24px;--padding-end: 24px;--margin-bottom: 0;--margin-end: 0;--margin-start: 0;--margin-top: 0;margin:0}ion-segment-button:after{content:\"\";position:absolute;min-height:44px;min-width:44px;width:100%;height:100%;transform:translate(-50%,-50%);left:50%;top:50%}.segment-btn-wrapper{position:relative}:host-context(.plt-desktop) ion-segment-button:focus-within{outline-color:-webkit-focus-ring-color;outline-style:auto}\n"] }]
|
|
8842
8955
|
}], ctorParameters: function () { return [{ type: IconRegistryService }]; }, propDecorators: { mode: [{
|
|
8843
8956
|
type: Input
|
|
8844
8957
|
}], _modeCssClass: [{
|
|
@@ -8917,10 +9030,10 @@ class SlideButtonComponent {
|
|
|
8917
9030
|
}
|
|
8918
9031
|
}
|
|
8919
9032
|
/** @nocollapse */ SlideButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: SlideButtonComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
8920
|
-
/** @nocollapse */ SlideButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: SlideButtonComponent, selector: "kirby-slide-button", inputs: { text: "text", expand: "expand" }, outputs: { slideDone: "slideDone", slidingPercentageChanged: "slidingPercentageChanged" }, ngImport: i0, template: "<div class=\"slide-button-container\" [ngClass]=\"{ 'slide-done': isSlideDone }\">\n <input\n type=\"range\"\n (mouseup)=\"onSliderMouseup()\"\n (touchend)=\"onSliderMouseup()\"\n (input)=\"onSliderValueChange($event.target.value)\"\n (mousedown)=\"onSliderMousedown()\"\n (touchstart)=\"onSliderMousedown()\"\n class=\"slide-button\"\n [value]=\"value\"\n max=\"100\"\n />\n <p class=\"slide-button-text slide-{{ pctInTens }}-pct\">{{ text }}</p>\n</div>\n", styles: [":host{position:relative;display:inline-block;width:256px;-webkit-user-select:none;user-select:none}:host[expand=block]{display:block;width:100%}:host .slide-button-container{width:100%;display:flex;justify-content:center;align-items:center;color:var(--kirby-primary-contrast);background-color:var(--kirby-primary);height:56px;border-radius:26px}:host .slide-10-pct{opacity:.9}:host .slide-20-pct{opacity:.8}:host .slide-30-pct{opacity:.7}:host .slide-40-pct{opacity:.6}:host .slide-50-pct{opacity:.5}:host .slide-60-pct{opacity:.4}:host .slide-70-pct{opacity:.3}:host .slide-80-pct{opacity:.2}:host .slide-90-pct{opacity:.1}:host .slide-100-pct{opacity:0}:host .slide-button-text{position:absolute;font-size:16px;margin:0;line-height:1;z-index:1;width:100%;text-align:center;padding:0 26px 0 56px}:host .slide-button{width:100%;height:100%;-webkit-appearance:none;appearance:none;background:transparent;z-index:2}:host .slide-button::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;border-radius:50%;background-color:var(--kirby-white);background-image:url(/assets/kirby/icons/svg/arrow-more.svg);background-repeat:no-repeat;background-position:center;background-size:24px;width:52px;height:52px;border:none;cursor:pointer}:host .slide-button::-moz-range-thumb{appearance:none;border-radius:50%;background-color:var(--kirby-white);background-image:url(/assets/kirby/icons/svg/arrow-more.svg);background-repeat:no-repeat;background-position:center;background-size:24px;width:52px;height:52px;border:none;cursor:pointer}:host .slide-done{transition:all .3s ease-in-out;opacity:0;height:0;transform:scale(0);pointer-events:none}\n"], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
9033
|
+
/** @nocollapse */ SlideButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: SlideButtonComponent, selector: "kirby-slide-button", inputs: { text: "text", expand: "expand" }, outputs: { slideDone: "slideDone", slidingPercentageChanged: "slidingPercentageChanged" }, ngImport: i0, template: "<div class=\"slide-button-container\" [ngClass]=\"{ 'slide-done': isSlideDone }\">\n <input\n type=\"range\"\n (mouseup)=\"onSliderMouseup()\"\n (touchend)=\"onSliderMouseup()\"\n (input)=\"onSliderValueChange($event.target.value)\"\n (mousedown)=\"onSliderMousedown()\"\n (touchstart)=\"onSliderMousedown()\"\n class=\"slide-button\"\n [value]=\"value\"\n max=\"100\"\n />\n <p class=\"slide-button-text slide-{{ pctInTens }}-pct\">{{ text }}</p>\n</div>\n", styles: [":host{position:relative;display:inline-block;width:256px;-webkit-user-select:none;user-select:none}:host[expand=block]{display:block;width:100%}:host .slide-button-container{width:100%;display:flex;justify-content:center;align-items:center;color:var(--kirby-primary-contrast);background-color:var(--kirby-primary);height:56px;border-radius:26px}:host .slide-10-pct{opacity:.9}:host .slide-20-pct{opacity:.8}:host .slide-30-pct{opacity:.7}:host .slide-40-pct{opacity:.6}:host .slide-50-pct{opacity:.5}:host .slide-60-pct{opacity:.4}:host .slide-70-pct{opacity:.3}:host .slide-80-pct{opacity:.2}:host .slide-90-pct{opacity:.1}:host .slide-100-pct{opacity:0}:host .slide-button-text{position:absolute;font-size:16px;margin:0;line-height:1;z-index:1;width:100%;text-align:center;padding:0 26px 0 56px}:host .slide-button{width:100%;height:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;z-index:2}:host .slide-button::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;border-radius:50%;background-color:var(--kirby-white);background-image:url(/assets/kirby/icons/svg/arrow-more.svg);background-repeat:no-repeat;background-position:center;background-size:24px;width:52px;height:52px;border:none;cursor:pointer}:host .slide-button::-moz-range-thumb{-moz-appearance:none;appearance:none;border-radius:50%;background-color:var(--kirby-white);background-image:url(/assets/kirby/icons/svg/arrow-more.svg);background-repeat:no-repeat;background-position:center;background-size:24px;width:52px;height:52px;border:none;cursor:pointer}:host .slide-done{transition:all .3s ease-in-out;opacity:0;height:0;transform:scale(0);pointer-events:none}\n"], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
8921
9034
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: SlideButtonComponent, decorators: [{
|
|
8922
9035
|
type: Component,
|
|
8923
|
-
args: [{ selector: 'kirby-slide-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"slide-button-container\" [ngClass]=\"{ 'slide-done': isSlideDone }\">\n <input\n type=\"range\"\n (mouseup)=\"onSliderMouseup()\"\n (touchend)=\"onSliderMouseup()\"\n (input)=\"onSliderValueChange($event.target.value)\"\n (mousedown)=\"onSliderMousedown()\"\n (touchstart)=\"onSliderMousedown()\"\n class=\"slide-button\"\n [value]=\"value\"\n max=\"100\"\n />\n <p class=\"slide-button-text slide-{{ pctInTens }}-pct\">{{ text }}</p>\n</div>\n", styles: [":host{position:relative;display:inline-block;width:256px;-webkit-user-select:none;user-select:none}:host[expand=block]{display:block;width:100%}:host .slide-button-container{width:100%;display:flex;justify-content:center;align-items:center;color:var(--kirby-primary-contrast);background-color:var(--kirby-primary);height:56px;border-radius:26px}:host .slide-10-pct{opacity:.9}:host .slide-20-pct{opacity:.8}:host .slide-30-pct{opacity:.7}:host .slide-40-pct{opacity:.6}:host .slide-50-pct{opacity:.5}:host .slide-60-pct{opacity:.4}:host .slide-70-pct{opacity:.3}:host .slide-80-pct{opacity:.2}:host .slide-90-pct{opacity:.1}:host .slide-100-pct{opacity:0}:host .slide-button-text{position:absolute;font-size:16px;margin:0;line-height:1;z-index:1;width:100%;text-align:center;padding:0 26px 0 56px}:host .slide-button{width:100%;height:100%;-webkit-appearance:none;appearance:none;background:transparent;z-index:2}:host .slide-button::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;border-radius:50%;background-color:var(--kirby-white);background-image:url(/assets/kirby/icons/svg/arrow-more.svg);background-repeat:no-repeat;background-position:center;background-size:24px;width:52px;height:52px;border:none;cursor:pointer}:host .slide-button::-moz-range-thumb{appearance:none;border-radius:50%;background-color:var(--kirby-white);background-image:url(/assets/kirby/icons/svg/arrow-more.svg);background-repeat:no-repeat;background-position:center;background-size:24px;width:52px;height:52px;border:none;cursor:pointer}:host .slide-done{transition:all .3s ease-in-out;opacity:0;height:0;transform:scale(0);pointer-events:none}\n"] }]
|
|
9036
|
+
args: [{ selector: 'kirby-slide-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"slide-button-container\" [ngClass]=\"{ 'slide-done': isSlideDone }\">\n <input\n type=\"range\"\n (mouseup)=\"onSliderMouseup()\"\n (touchend)=\"onSliderMouseup()\"\n (input)=\"onSliderValueChange($event.target.value)\"\n (mousedown)=\"onSliderMousedown()\"\n (touchstart)=\"onSliderMousedown()\"\n class=\"slide-button\"\n [value]=\"value\"\n max=\"100\"\n />\n <p class=\"slide-button-text slide-{{ pctInTens }}-pct\">{{ text }}</p>\n</div>\n", styles: [":host{position:relative;display:inline-block;width:256px;-webkit-user-select:none;user-select:none}:host[expand=block]{display:block;width:100%}:host .slide-button-container{width:100%;display:flex;justify-content:center;align-items:center;color:var(--kirby-primary-contrast);background-color:var(--kirby-primary);height:56px;border-radius:26px}:host .slide-10-pct{opacity:.9}:host .slide-20-pct{opacity:.8}:host .slide-30-pct{opacity:.7}:host .slide-40-pct{opacity:.6}:host .slide-50-pct{opacity:.5}:host .slide-60-pct{opacity:.4}:host .slide-70-pct{opacity:.3}:host .slide-80-pct{opacity:.2}:host .slide-90-pct{opacity:.1}:host .slide-100-pct{opacity:0}:host .slide-button-text{position:absolute;font-size:16px;margin:0;line-height:1;z-index:1;width:100%;text-align:center;padding:0 26px 0 56px}:host .slide-button{width:100%;height:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;z-index:2}:host .slide-button::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;border-radius:50%;background-color:var(--kirby-white);background-image:url(/assets/kirby/icons/svg/arrow-more.svg);background-repeat:no-repeat;background-position:center;background-size:24px;width:52px;height:52px;border:none;cursor:pointer}:host .slide-button::-moz-range-thumb{-moz-appearance:none;appearance:none;border-radius:50%;background-color:var(--kirby-white);background-image:url(/assets/kirby/icons/svg/arrow-more.svg);background-repeat:no-repeat;background-position:center;background-size:24px;width:52px;height:52px;border:none;cursor:pointer}:host .slide-done{transition:all .3s ease-in-out;opacity:0;height:0;transform:scale(0);pointer-events:none}\n"] }]
|
|
8924
9037
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { text: [{
|
|
8925
9038
|
type: Input
|
|
8926
9039
|
}], expand: [{
|