@kirbydesign/designsystem 3.0.15 → 4.0.2
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/bundles/kirbydesign-designsystem-testing-base.umd.js +44 -15
- package/bundles/kirbydesign-designsystem-testing-base.umd.js.map +1 -1
- package/bundles/kirbydesign-designsystem-testing-base.umd.min.js +1 -1
- package/bundles/kirbydesign-designsystem-testing-base.umd.min.js.map +1 -1
- package/bundles/kirbydesign-designsystem.umd.js +280 -63
- package/bundles/kirbydesign-designsystem.umd.js.map +1 -1
- package/bundles/kirbydesign-designsystem.umd.min.js +1 -1
- package/bundles/kirbydesign-designsystem.umd.min.js.map +1 -1
- package/esm2015/kirbydesign-designsystem.js +18 -16
- package/esm2015/kirbydesign-designsystem.metadata.json +1 -1
- package/esm2015/lib/components/card/card.component.js +1 -1
- package/esm2015/lib/components/card/card.component.metadata.json +1 -1
- package/esm2015/lib/components/dropdown/dropdown.component.js +53 -59
- package/esm2015/lib/components/dropdown/dropdown.component.metadata.json +1 -1
- package/esm2015/lib/components/dropdown/dropdown.types.js +12 -0
- package/esm2015/lib/components/dropdown/dropdown.types.metadata.json +1 -0
- package/esm2015/lib/components/dropdown/keyboard-handler.service.js +43 -0
- package/esm2015/lib/components/dropdown/keyboard-handler.service.metadata.json +1 -0
- package/esm2015/lib/components/index.js +3 -2
- package/esm2015/lib/components/index.metadata.json +1 -1
- package/esm2015/lib/components/item/item.component.js +1 -1
- package/esm2015/lib/components/item/item.component.metadata.json +1 -1
- package/esm2015/lib/components/popover/popover.component.js +156 -0
- package/esm2015/lib/components/popover/popover.component.metadata.json +1 -0
- package/esm2015/lib/components/tabs/index.js +2 -2
- package/esm2015/lib/components/tabs/index.metadata.json +1 -1
- package/esm2015/lib/components/tabs/tabs.service.js +3 -1
- package/esm2015/lib/components/tabs/tabs.service.metadata.json +1 -1
- package/esm2015/lib/helpers/design-token-helper.js +4 -1
- package/esm2015/lib/helpers/design-token-helper.metadata.json +1 -1
- package/esm2015/lib/helpers/design-token-helper.styles.js +2 -1
- package/esm2015/lib/helpers/design-token-helper.styles.metadata.json +1 -1
- package/esm2015/lib/kirby.module.js +3 -1
- package/esm2015/lib/kirby.module.metadata.json +1 -1
- package/esm2015/testing-base/kirbydesign-designsystem-testing-base.js +17 -16
- package/esm2015/testing-base/kirbydesign-designsystem-testing-base.metadata.json +1 -1
- package/esm2015/testing-base/lib/components/mock.dropdown.component.js +2 -1
- package/esm2015/testing-base/lib/components/mock.dropdown.component.metadata.json +1 -1
- package/esm2015/testing-base/lib/components/mock.popover.component.js +27 -0
- package/esm2015/testing-base/lib/components/mock.popover.component.metadata.json +1 -0
- package/esm2015/testing-base/lib/mock-components.js +3 -1
- package/esm2015/testing-base/lib/mock-components.metadata.json +1 -1
- package/fesm2015/kirbydesign-designsystem-testing-base.js +29 -2
- package/fesm2015/kirbydesign-designsystem-testing-base.js.map +1 -1
- package/fesm2015/kirbydesign-designsystem.js +252 -50
- package/fesm2015/kirbydesign-designsystem.js.map +1 -1
- package/kirbydesign-designsystem.d.ts +17 -15
- package/kirbydesign-designsystem.metadata.json +1 -1
- package/lib/components/dropdown/dropdown.component.d.ts +13 -14
- package/lib/components/dropdown/dropdown.types.d.ts +9 -0
- package/lib/components/dropdown/keyboard-handler.service.d.ts +3 -0
- package/lib/components/index.d.ts +2 -1
- package/lib/components/popover/popover.component.d.ts +34 -0
- package/lib/components/tabs/index.d.ts +1 -1
- package/lib/components/tabs/tabs.service.d.ts +1 -0
- package/lib/helpers/design-token-helper.d.ts +1 -0
- package/lib/helpers/design-token-helper.styles.d.ts +1 -0
- package/package.json +1 -1
- package/scss/_global-styles.scss +3 -1
- package/scss/base/_functions.scss +15 -0
- package/scss/base/_list.scss +82 -0
- package/scss/base/_variables.scss +1 -0
- package/testing-base/kirbydesign-designsystem-testing-base.d.ts +16 -15
- package/testing-base/kirbydesign-designsystem-testing-base.metadata.json +1 -1
- package/testing-base/lib/components/mock.dropdown.component.d.ts +1 -0
- package/testing-base/lib/components/mock.popover.component.d.ts +7 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Component, Input, EventEmitter, Output, Injectable, ɵɵdefineInjectable, ElementRef, ViewChild, ɵɵinject, InjectionToken, Injector, HostListener, Optional, Inject, HostBinding, ContentChild, NgZone, RendererStyleFlags2, Renderer2, ComponentFactoryResolver, ViewChildren, NgModule, ChangeDetectionStrategy, LOCALE_ID, Directive, forwardRef, ChangeDetectorRef, TemplateRef, ContentChildren, INJECTOR, Pipe, SkipSelf, ViewContainerRef } from '@angular/core';
|
|
2
2
|
import { ModalController as ModalController$1, IonContent, IonHeader, IonToolbar, IonTitle, AnimationController, IonApp, IonicModule, IonRadio, IonFabButton, LoadingController, IonItemSliding, IonTabs, IonFooter, ToastController as ToastController$1 } from '@ionic/angular';
|
|
3
|
-
export { NavController } from '@ionic/angular';
|
|
3
|
+
export { IonRouterOutlet, NavController } from '@ionic/angular';
|
|
4
4
|
import { NavigationEnd, Router, ActivatedRoute, RouterOutlet, ROUTES, NavigationStart, RouterModule } from '@angular/router';
|
|
5
5
|
import { of, EMPTY, Subject, merge, fromEvent, ReplaySubject } from 'rxjs';
|
|
6
6
|
import { filter, first, startWith, map, pairwise, debounceTime, takeUntil } from 'rxjs/operators';
|
|
@@ -55,6 +55,7 @@ const styles = {
|
|
|
55
55
|
default: '1',
|
|
56
56
|
segmentBadge: '2',
|
|
57
57
|
dropdown: '800',
|
|
58
|
+
popover: '850',
|
|
58
59
|
modalOverlay: '900',
|
|
59
60
|
modal: '901',
|
|
60
61
|
loadingOverlay: '1001',
|
|
@@ -1114,6 +1115,9 @@ class DesignTokenHelper {
|
|
|
1114
1115
|
static itemHeight(key) {
|
|
1115
1116
|
return styles.itemHeights[key];
|
|
1116
1117
|
}
|
|
1118
|
+
static zLayer(key) {
|
|
1119
|
+
return styles.zLayers[key];
|
|
1120
|
+
}
|
|
1117
1121
|
}
|
|
1118
1122
|
DesignTokenHelper.breakpoints = styles.breakpoints;
|
|
1119
1123
|
DesignTokenHelper.softKeyboardTransitionEnter = styles.softKeyboardTransitionEnter;
|
|
@@ -2628,7 +2632,7 @@ CardComponent.decorators = [
|
|
|
2628
2632
|
{ type: Component, args: [{
|
|
2629
2633
|
selector: 'kirby-card',
|
|
2630
2634
|
template: "<ng-content select=\"kirby-card-header\"></ng-content>\n<div class=\"content-wrapper\" [class.padding]=\"hasPadding\">\n <ng-content></ng-content>\n</div>\n<ng-content select=\"kirby-card-footer\"></ng-content>\n",
|
|
2631
|
-
styles: [":host{--kirby-card-main-background-color:var(--kirby-white);--kirby-card-main-color:var(--kirby-white-contrast);--kirby-card-footer-background-color:var(--kirby-white);--kirby-card-footer-color:var(--kirby-white-contrast);border-radius:16px;box-shadow:0 5px 10px -10px rgba(28,28,28,.3),0 0 5px 0 rgba(28,28,28,.08);color:var(--kirby-card-main-color);background-color:var(--kirby-card-main-background-color);display:flex;flex-direction:column;justify-content:space-between;overflow:hidden;position:relative;z-index:1}:host .content-wrapper.padding{padding:16px}:host.highlighted{box-shadow:0 10px 15px -10px rgba(28,28,28,.3),0 0 5px 0 rgba(28,28,28,.08)}:host.flat{box-shadow:none}:host-context(.swiper-slide-active){box-shadow:0 10px 15px -10px rgba(28,28,28,.3),0 0 5px 0 rgba(28,28,28,.08);transition:all .5s;transform:translateY(-3px)}:host(.primary){--kirby-card-main-background-color:var(--kirby-primary);--kirby-card-main-color:var(--kirby-primary-contrast)}:host(.secondary){--kirby-card-main-background-color:var(--kirby-secondary);--kirby-card-main-color:var(--kirby-secondary-contrast)}:host(.tertiary){--kirby-card-main-background-color:var(--kirby-tertiary);--kirby-card-main-color:var(--kirby-tertiary-contrast)}:host(.success){--kirby-card-main-background-color:var(--kirby-success);--kirby-card-main-color:var(--kirby-success-contrast)}:host(.warning){--kirby-card-main-background-color:var(--kirby-warning);--kirby-card-main-color:var(--kirby-warning-contrast)}:host(.danger){--kirby-card-main-background-color:var(--kirby-danger);--kirby-card-main-color:var(--kirby-danger-contrast)}:host(.light){--kirby-card-main-background-color:var(--kirby-light);--kirby-card-main-color:var(--kirby-light-contrast)}:host(.medium){--kirby-card-main-background-color:var(--kirby-medium);--kirby-card-main-color:var(--kirby-medium-contrast)}:host(.dark){--kirby-card-main-background-color:var(--kirby-dark);--kirby-card-main-color:var(--kirby-dark-contrast)}"]
|
|
2635
|
+
styles: [":host{--kirby-card-main-background-color:var(--kirby-white);--kirby-card-main-color:var(--kirby-white-contrast);--kirby-card-footer-background-color:var(--kirby-white);--kirby-card-footer-color:var(--kirby-white-contrast);border-radius:16px;box-shadow:0 5px 10px -10px rgba(28,28,28,.3),0 0 5px 0 rgba(28,28,28,.08);color:var(--kirby-card-main-color);background-color:var(--kirby-card-main-background-color);display:flex;flex-direction:column;justify-content:space-between;overflow:hidden;position:relative;z-index:1;width:var(--kirby-card-width,auto)}:host .content-wrapper.padding{padding:16px}:host.highlighted{box-shadow:0 10px 15px -10px rgba(28,28,28,.3),0 0 5px 0 rgba(28,28,28,.08)}:host.flat{box-shadow:none}:host-context(.swiper-slide-active){box-shadow:0 10px 15px -10px rgba(28,28,28,.3),0 0 5px 0 rgba(28,28,28,.08);transition:all .5s;transform:translateY(-3px)}:host(.primary){--kirby-card-main-background-color:var(--kirby-primary);--kirby-card-main-color:var(--kirby-primary-contrast)}:host(.secondary){--kirby-card-main-background-color:var(--kirby-secondary);--kirby-card-main-color:var(--kirby-secondary-contrast)}:host(.tertiary){--kirby-card-main-background-color:var(--kirby-tertiary);--kirby-card-main-color:var(--kirby-tertiary-contrast)}:host(.success){--kirby-card-main-background-color:var(--kirby-success);--kirby-card-main-color:var(--kirby-success-contrast)}:host(.warning){--kirby-card-main-background-color:var(--kirby-warning);--kirby-card-main-color:var(--kirby-warning-contrast)}:host(.danger){--kirby-card-main-background-color:var(--kirby-danger);--kirby-card-main-color:var(--kirby-danger-contrast)}:host(.light){--kirby-card-main-background-color:var(--kirby-light);--kirby-card-main-color:var(--kirby-light-contrast)}:host(.medium){--kirby-card-main-background-color:var(--kirby-medium);--kirby-card-main-color:var(--kirby-medium-contrast)}:host(.dark){--kirby-card-main-background-color:var(--kirby-dark);--kirby-card-main-color:var(--kirby-dark-contrast)}"]
|
|
2632
2636
|
},] }
|
|
2633
2637
|
];
|
|
2634
2638
|
/** @nocollapse */
|
|
@@ -4875,7 +4879,7 @@ ItemComponent.decorators = [
|
|
|
4875
4879
|
{ type: Component, args: [{
|
|
4876
4880
|
selector: 'kirby-item',
|
|
4877
4881
|
template: "<ion-item\n lines=\"none\"\n [attr.disabled]=\"disabled\"\n [attr.button]=\"selectable ? true : null\"\n [attr.tabindex]=\"selectable ? null : 0\"\n detail=\"false\"\n (mousedown)=\"onMouseDown($event)\"\n>\n <div class=\"outside\" slot=\"start\">\n <ng-content select=\"[slot='outside']\"></ng-content>\n </div>\n <ng-content></ng-content>\n <ion-reorder slot=\"end\" *ngIf=\"reorderable\">\n <kirby-icon name=\"reorder\"></kirby-icon>\n </ion-reorder>\n</ion-item>\n",
|
|
4878
|
-
styles: [":host{display:block;position:relative}:host ion-item{font-size:14px;--min-height:56px;--padding-start:16px;--inner-padding-top:8px;--inner-padding-bottom:8px;--inner-padding-end:16px;--background:var(--kirby-item-background,var(--kirby-white));--background-activated:var(--kirby-item-background-activated,var(--kirby-white-shade));--background-activated-opacity:0.99;--background-focused:var(--kirby-item-background-focused,var(--kirby-background-color));--background-focused-opacity:1;--background-hover:var(--kirby-item-background-hover,var(--kirby-background-color));--background-hover-opacity:1}@media screen and (orientation:landscape){:host ion-item{--ion-safe-area-left:0px;--ion-safe-area-right:0px}}:host ion-item ::ng-deep>[slot=end]{margin-inline-start:0;margin-inline-end:0;text-align:right}:host ion-item ::ng-deep>time[slot=end]{margin-inline-start:12px}:host ion-item ::ng-deep>[detail][slot=end],:host ion-item ::ng-deep>data[slot=end],:host ion-item ::ng-deep>ion-reorder[slot=end]{margin-inline-start:16px}:host ion-item ::ng-deep>data,:host ion-item ::ng-deep>h1,:host ion-item ::ng-deep>h2,:host ion-item ::ng-deep>h3,:host ion-item ::ng-deep>h4,:host ion-item ::ng-deep>h5,:host ion-item ::ng-deep>h6,:host ion-item ::ng-deep>p{font-size:16px;line-height:24px;color:var(--kirby-text-color-black);display:block;margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:400}:host ion-item ::ng-deep>data.kirby-text-bold,:host ion-item ::ng-deep>h1.kirby-text-bold,:host ion-item ::ng-deep>h2.kirby-text-bold,:host ion-item ::ng-deep>h3.kirby-text-bold,:host ion-item ::ng-deep>h4.kirby-text-bold,:host ion-item ::ng-deep>h5.kirby-text-bold,:host ion-item ::ng-deep>h6.kirby-text-bold,:host ion-item ::ng-deep>p.kirby-text-bold{font-weight:700}:host ion-item ::ng-deep>p{font-size:14px}:host ion-item ::ng-deep>[detail],:host ion-item ::ng-deep>[subtitle]{font-size:12px;line-height:16px}:host ion-item ::ng-deep>[subtitle]:not(:last-child){margin-bottom:4px}:host ion-item ::ng-deep>[detail]{color:var(--kirby-text-color-semi-dark)}:host ion-item ::ng-deep>:not([slot]){width:100%}:host ion-item ::ng-deep>input[slot=end],:host ion-item ::ng-deep>kirby-form-field[slot=end] input{margin-inline-start:16px;width:auto;text-align:right}:host.sm ion-item{--min-height:44px}:host.xs ion-item{--min-height:32px;--inner-padding-top:4px;--inner-padding-bottom:4px}:host .outside{left:4px;margin:0;position:absolute;width:16px;z-index:1}:host-context(kirby-dropdown) ion-item{--min-height:44px}:host-context(kirby-list-item:first-of-type) ion-item{--padding-top:8px}:host-context(kirby-list-item:first-of-type kirby-card) ion-item{--padding-top:0}:host-context(kirby-list-item:last-of-type) ion-item{--padding-bottom:8px}:host-context(kirby-list-item:last-of-type kirby-card) ion-item{--padding-bottom:0}:host(.selected) ion-item ::ng-deep>data,:host(.selected) ion-item ::ng-deep>h1,:host(.selected) ion-item ::ng-deep>h2,:host(.selected) ion-item ::ng-deep>h3,:host(.selected) ion-item ::ng-deep>h4,:host(.selected) ion-item ::ng-deep>h5,:host(.selected) ion-item ::ng-deep>h6,:host(.selected) ion-item ::ng-deep>p,:host-context(kirby-list .selected) ion-item ::ng-deep>data,:host-context(kirby-list .selected) ion-item ::ng-deep>h1,:host-context(kirby-list .selected) ion-item ::ng-deep>h2,:host-context(kirby-list .selected) ion-item ::ng-deep>h3,:host-context(kirby-list .selected) ion-item ::ng-deep>h4,:host-context(kirby-list .selected) ion-item ::ng-deep>h5,:host-context(kirby-list .selected) ion-item ::ng-deep>h6,:host-context(kirby-list .selected) ion-item ::ng-deep>p{font-weight:700}:host-context(.shape-rounded .is-single) ion-item{--border-radius:16px}:host-context(.has-header .is-single) ion-item::part(native){border-top-left-radius:0;border-top-right-radius:0}:host-context(.has-footer .is-single) ion-item::part(native){border-bottom-left-radius:0;border-bottom-right-radius:0}:host-context(.shape-rounded.has-sections .list-items kirby-list-item:first-of-type) ion-item::part(native){border-top-left-radius:16px;border-top-right-radius:16px}"]
|
|
4882
|
+
styles: [":host{display:block;position:relative}:host ion-item{font-size:14px;--min-height:56px;--padding-start:16px;--inner-padding-top:8px;--inner-padding-bottom:8px;--inner-padding-end:16px;--background:var(--kirby-item-background,var(--kirby-white));--background-activated:var(--kirby-item-background-activated,var(--kirby-white-shade));--background-activated-opacity:0.99;--background-focused:var(--kirby-item-background-focused,var(--kirby-background-color));--background-focused-opacity:1;--background-hover:var(--kirby-item-background-hover,var(--kirby-background-color));--background-hover-opacity:1}@media screen and (orientation:landscape){:host ion-item{--ion-safe-area-left:0px;--ion-safe-area-right:0px}}:host ion-item ::ng-deep>[slot=end]{margin-inline-start:0;margin-inline-end:0;text-align:right}:host ion-item ::ng-deep>time[slot=end]{margin-inline-start:12px}:host ion-item ::ng-deep>[detail][slot=end],:host ion-item ::ng-deep>data[slot=end],:host ion-item ::ng-deep>ion-reorder[slot=end]{margin-inline-start:16px}:host ion-item ::ng-deep>data,:host ion-item ::ng-deep>h1,:host ion-item ::ng-deep>h2,:host ion-item ::ng-deep>h3,:host ion-item ::ng-deep>h4,:host ion-item ::ng-deep>h5,:host ion-item ::ng-deep>h6,:host ion-item ::ng-deep>p{font-size:16px;line-height:24px;color:var(--kirby-text-color-black);display:block;margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:400}:host ion-item ::ng-deep>data.kirby-text-bold,:host ion-item ::ng-deep>h1.kirby-text-bold,:host ion-item ::ng-deep>h2.kirby-text-bold,:host ion-item ::ng-deep>h3.kirby-text-bold,:host ion-item ::ng-deep>h4.kirby-text-bold,:host ion-item ::ng-deep>h5.kirby-text-bold,:host ion-item ::ng-deep>h6.kirby-text-bold,:host ion-item ::ng-deep>p.kirby-text-bold{font-weight:700}:host ion-item ::ng-deep>p{font-size:14px}:host ion-item ::ng-deep>[detail],:host ion-item ::ng-deep>[subtitle]{font-size:12px;line-height:16px}:host ion-item ::ng-deep>[subtitle]:not(:last-child){margin-bottom:4px}:host ion-item ::ng-deep>[detail]{color:var(--kirby-text-color-semi-dark)}:host ion-item ::ng-deep>:not([slot]){width:100%}:host ion-item ::ng-deep>input[slot=end],:host ion-item ::ng-deep>kirby-form-field[slot=end] input{margin-inline-start:16px;width:auto;text-align:right}:host.sm ion-item{--min-height:44px}:host.xs ion-item{--min-height:32px;--inner-padding-top:4px;--inner-padding-bottom:4px}:host .outside{left:4px;margin:0;position:absolute;width:16px;z-index:1}:host-context(kirby-dropdown) ion-item,:host-context(kirby-popover) ion-item{--min-height:44px}:host-context(kirby-list-item:first-of-type) ion-item{--padding-top:8px}:host-context(kirby-list-item:first-of-type kirby-card) ion-item{--padding-top:0}:host-context(kirby-list-item:last-of-type) ion-item{--padding-bottom:8px}:host-context(kirby-list-item:last-of-type kirby-card) ion-item{--padding-bottom:0}:host(.selected) ion-item ::ng-deep>data,:host(.selected) ion-item ::ng-deep>h1,:host(.selected) ion-item ::ng-deep>h2,:host(.selected) ion-item ::ng-deep>h3,:host(.selected) ion-item ::ng-deep>h4,:host(.selected) ion-item ::ng-deep>h5,:host(.selected) ion-item ::ng-deep>h6,:host(.selected) ion-item ::ng-deep>p,:host-context(kirby-list .selected) ion-item ::ng-deep>data,:host-context(kirby-list .selected) ion-item ::ng-deep>h1,:host-context(kirby-list .selected) ion-item ::ng-deep>h2,:host-context(kirby-list .selected) ion-item ::ng-deep>h3,:host-context(kirby-list .selected) ion-item ::ng-deep>h4,:host-context(kirby-list .selected) ion-item ::ng-deep>h5,:host-context(kirby-list .selected) ion-item ::ng-deep>h6,:host-context(kirby-list .selected) ion-item ::ng-deep>p{font-weight:700}:host-context(.shape-rounded .is-single) ion-item{--border-radius:16px}:host-context(.has-header .is-single) ion-item::part(native){border-top-left-radius:0;border-top-right-radius:0}:host-context(.has-footer .is-single) ion-item::part(native){border-bottom-left-radius:0;border-bottom-right-radius:0}:host-context(.shape-rounded.has-sections .list-items kirby-list-item:first-of-type) ion-item::part(native){border-top-left-radius:16px;border-top-right-radius:16px}"]
|
|
4879
4883
|
},] }
|
|
4880
4884
|
];
|
|
4881
4885
|
ItemComponent.propDecorators = {
|
|
@@ -4939,27 +4943,219 @@ ListFooterDirective.decorators = [
|
|
|
4939
4943
|
},] }
|
|
4940
4944
|
];
|
|
4941
4945
|
|
|
4946
|
+
var HorizontalDirection;
|
|
4947
|
+
(function (HorizontalDirection) {
|
|
4948
|
+
HorizontalDirection["right"] = "right";
|
|
4949
|
+
HorizontalDirection["left"] = "left";
|
|
4950
|
+
})(HorizontalDirection || (HorizontalDirection = {}));
|
|
4951
|
+
class PopoverComponent {
|
|
4952
|
+
constructor(elementRef, renderer) {
|
|
4953
|
+
this.elementRef = elementRef;
|
|
4954
|
+
this.renderer = renderer;
|
|
4955
|
+
// removeEventListener same instance of event handler & options
|
|
4956
|
+
this.preventScrollEventListenerOptions = {
|
|
4957
|
+
passive: false,
|
|
4958
|
+
};
|
|
4959
|
+
this.POPOVER_BODY_PADDING = 12;
|
|
4960
|
+
this.isShowing = false;
|
|
4961
|
+
this.popout = HorizontalDirection.right;
|
|
4962
|
+
this.willHide = new EventEmitter();
|
|
4963
|
+
this.document = elementRef.nativeElement.ownerDocument;
|
|
4964
|
+
}
|
|
4965
|
+
get targetElement() {
|
|
4966
|
+
if (this.target instanceof ElementRef) {
|
|
4967
|
+
return this.target.nativeElement;
|
|
4968
|
+
}
|
|
4969
|
+
else {
|
|
4970
|
+
return this.target;
|
|
4971
|
+
}
|
|
4972
|
+
}
|
|
4973
|
+
_backdropClick() {
|
|
4974
|
+
this.willHide.emit();
|
|
4975
|
+
this.hide();
|
|
4976
|
+
}
|
|
4977
|
+
_onWindowResize() {
|
|
4978
|
+
if (this.isShowing) {
|
|
4979
|
+
this.willHide.emit();
|
|
4980
|
+
this.hide();
|
|
4981
|
+
}
|
|
4982
|
+
}
|
|
4983
|
+
ngAfterViewInit() {
|
|
4984
|
+
this.placePopoverAboveClosestModal();
|
|
4985
|
+
this.renderer.removeChild(this.elementRef.nativeElement.parentElement, this.elementRef.nativeElement);
|
|
4986
|
+
}
|
|
4987
|
+
ngOnDestroy() {
|
|
4988
|
+
this.hide();
|
|
4989
|
+
}
|
|
4990
|
+
placePopoverAboveClosestModal() {
|
|
4991
|
+
const closestIonModal = this.elementRef.nativeElement.closest('ion-modal');
|
|
4992
|
+
if (closestIonModal) {
|
|
4993
|
+
this.zIndex = parseInt(closestIonModal.style.zIndex) + 1;
|
|
4994
|
+
this.elementRef.nativeElement.style.zIndex = `${this.zIndex}`;
|
|
4995
|
+
}
|
|
4996
|
+
else {
|
|
4997
|
+
this.zIndex = parseInt(DesignTokenHelper.zLayer('popover'));
|
|
4998
|
+
}
|
|
4999
|
+
}
|
|
5000
|
+
// document.removeEventListener needs the exact same event handler & options reference:
|
|
5001
|
+
preventEvent(event) {
|
|
5002
|
+
event.preventDefault();
|
|
5003
|
+
}
|
|
5004
|
+
preventScroll() {
|
|
5005
|
+
this.isFirstToLockScroll = !this.document.body.classList.contains('backdrop-no-scroll');
|
|
5006
|
+
if (this.isFirstToLockScroll) {
|
|
5007
|
+
this.renderer.addClass(this.document.body, 'backdrop-no-scroll');
|
|
5008
|
+
}
|
|
5009
|
+
// preventDefault does not work with Renderer2.listen method; add event listener directly to document instead
|
|
5010
|
+
this.document.addEventListener('touchmove', this.preventEvent, this.preventScrollEventListenerOptions);
|
|
5011
|
+
}
|
|
5012
|
+
releaseScroll() {
|
|
5013
|
+
if (this.isFirstToLockScroll) {
|
|
5014
|
+
this.renderer.removeClass(this.document.body, 'backdrop-no-scroll');
|
|
5015
|
+
}
|
|
5016
|
+
this.document.removeEventListener('touchmove', this.preventEvent, this.preventScrollEventListenerOptions);
|
|
5017
|
+
}
|
|
5018
|
+
show() {
|
|
5019
|
+
this.renderer.addClass(this.elementRef.nativeElement, 'is-opening');
|
|
5020
|
+
this.renderer.appendChild(this.document.body, this.elementRef.nativeElement);
|
|
5021
|
+
this.preventScroll();
|
|
5022
|
+
this.positionWrapper();
|
|
5023
|
+
this.renderer.addClass(this.elementRef.nativeElement, 'is-open');
|
|
5024
|
+
this.renderer.removeClass(this.elementRef.nativeElement, 'is-opening');
|
|
5025
|
+
this.isShowing = true;
|
|
5026
|
+
}
|
|
5027
|
+
hide() {
|
|
5028
|
+
this.renderer.removeChild(this.document.body, this.elementRef.nativeElement);
|
|
5029
|
+
this.releaseScroll();
|
|
5030
|
+
this.renderer.removeStyle(this.targetElement, 'z-index');
|
|
5031
|
+
this.renderer.removeStyle(this.targetElement, 'pointer-events');
|
|
5032
|
+
this.isShowing = false;
|
|
5033
|
+
}
|
|
5034
|
+
positionWrapper() {
|
|
5035
|
+
const targetDimensions = this.targetElement.getBoundingClientRect();
|
|
5036
|
+
this.renderer.appendChild(this.document.body, this.elementRef.nativeElement);
|
|
5037
|
+
const wrapperElement = this.wrapperElement.nativeElement;
|
|
5038
|
+
const wrapperDimensions = wrapperElement.getBoundingClientRect();
|
|
5039
|
+
const viewport = wrapperElement.ownerDocument.defaultView;
|
|
5040
|
+
this.positionHorizontally(viewport, wrapperElement, targetDimensions, wrapperDimensions);
|
|
5041
|
+
this.positionVertically(viewport, wrapperElement, targetDimensions, wrapperDimensions);
|
|
5042
|
+
}
|
|
5043
|
+
positionHorizontally(viewPort, wrapperElement, targetDimensions, wrapperDimensions) {
|
|
5044
|
+
const viewPortWidth = viewPort.innerWidth;
|
|
5045
|
+
const contentWidth = wrapperDimensions.width;
|
|
5046
|
+
const availableSpaceRight = viewPortWidth - targetDimensions.left;
|
|
5047
|
+
const availableSpaceLeft = targetDimensions.right;
|
|
5048
|
+
const contentCanFitRightOfTarget = availableSpaceRight >= contentWidth + this.POPOVER_BODY_PADDING;
|
|
5049
|
+
const openRight = contentCanFitRightOfTarget || availableSpaceRight >= availableSpaceLeft;
|
|
5050
|
+
const [direction, oppositeDirection] = this.popout === HorizontalDirection.left || !openRight
|
|
5051
|
+
? ['left', 'right']
|
|
5052
|
+
: ['right', 'left'];
|
|
5053
|
+
const pxValue = direction === 'left' ? viewPortWidth - targetDimensions.right : targetDimensions.left;
|
|
5054
|
+
this.renderer.removeStyle(wrapperElement, direction);
|
|
5055
|
+
this.renderer.setStyle(wrapperElement, oppositeDirection, `${pxValue}px`);
|
|
5056
|
+
}
|
|
5057
|
+
positionVertically(viewPort, wrapperElement, targetDimensions, wrapperDimensions) {
|
|
5058
|
+
const viewPortHeight = viewPort.innerHeight;
|
|
5059
|
+
const contentHeight = wrapperDimensions.height;
|
|
5060
|
+
const availableSpaceDown = viewPortHeight - targetDimensions.bottom;
|
|
5061
|
+
const availableSpaceUp = targetDimensions.top;
|
|
5062
|
+
const contentCanFitBelowTarget = availableSpaceDown >= contentHeight + this.POPOVER_BODY_PADDING;
|
|
5063
|
+
const isAvailableSpaceBelow = contentCanFitBelowTarget || availableSpaceDown >= availableSpaceUp;
|
|
5064
|
+
const [direction, oppositeDirection] = isAvailableSpaceBelow
|
|
5065
|
+
? ['bottom', 'top']
|
|
5066
|
+
: ['top', 'bottom'];
|
|
5067
|
+
const pxValue = direction === 'bottom' ? targetDimensions.bottom : viewPortHeight - targetDimensions.top;
|
|
5068
|
+
this.renderer.removeStyle(wrapperElement, direction);
|
|
5069
|
+
this.renderer.setStyle(wrapperElement, oppositeDirection, `${pxValue}px`);
|
|
5070
|
+
if (direction === 'top') {
|
|
5071
|
+
// Ensure target is elevated above shadows in popover, i.e. content wrapped in Card:
|
|
5072
|
+
this.renderer.setStyle(this.targetElement, 'z-index', `${this.zIndex + 1}`);
|
|
5073
|
+
this.renderer.setStyle(this.targetElement, 'pointer-events', 'none');
|
|
5074
|
+
}
|
|
5075
|
+
}
|
|
5076
|
+
}
|
|
5077
|
+
PopoverComponent.decorators = [
|
|
5078
|
+
{ type: Component, args: [{
|
|
5079
|
+
selector: 'kirby-popover',
|
|
5080
|
+
template: `
|
|
5081
|
+
<div #wrapper class="wrapper"><ng-content></ng-content></div>
|
|
5082
|
+
`,
|
|
5083
|
+
styles: [":host{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:850}:host(.is-opening){display:block;visibility:hidden}:host(.is-open){display:block}.wrapper{position:fixed;margin-top:4px;margin-bottom:4px}"]
|
|
5084
|
+
},] }
|
|
5085
|
+
];
|
|
5086
|
+
/** @nocollapse */
|
|
5087
|
+
PopoverComponent.ctorParameters = () => [
|
|
5088
|
+
{ type: ElementRef },
|
|
5089
|
+
{ type: Renderer2 }
|
|
5090
|
+
];
|
|
5091
|
+
PopoverComponent.propDecorators = {
|
|
5092
|
+
wrapperElement: [{ type: ViewChild, args: ['wrapper', { static: true, read: ElementRef },] }],
|
|
5093
|
+
popout: [{ type: Input }],
|
|
5094
|
+
target: [{ type: Input }],
|
|
5095
|
+
willHide: [{ type: Output }],
|
|
5096
|
+
_backdropClick: [{ type: HostListener, args: ['click',] }],
|
|
5097
|
+
_onWindowResize: [{ type: HostListener, args: ['window:resize',] }]
|
|
5098
|
+
};
|
|
5099
|
+
|
|
4942
5100
|
var OpenState;
|
|
4943
5101
|
(function (OpenState) {
|
|
4944
5102
|
OpenState[OpenState["closed"] = 0] = "closed";
|
|
4945
5103
|
OpenState[OpenState["opening"] = 1] = "opening";
|
|
4946
5104
|
OpenState[OpenState["open"] = 2] = "open";
|
|
4947
5105
|
})(OpenState || (OpenState = {}));
|
|
4948
|
-
var HorizontalDirection;
|
|
4949
|
-
(function (HorizontalDirection) {
|
|
4950
|
-
HorizontalDirection["right"] = "right";
|
|
4951
|
-
HorizontalDirection["left"] = "left";
|
|
4952
|
-
})(HorizontalDirection || (HorizontalDirection = {}));
|
|
4953
5106
|
var VerticalDirection;
|
|
4954
5107
|
(function (VerticalDirection) {
|
|
4955
5108
|
VerticalDirection[VerticalDirection["up"] = 0] = "up";
|
|
4956
5109
|
VerticalDirection[VerticalDirection["down"] = 1] = "down";
|
|
4957
5110
|
})(VerticalDirection || (VerticalDirection = {}));
|
|
5111
|
+
|
|
5112
|
+
class KeyboardHandlerService {
|
|
5113
|
+
handle(event, items, selectedIndex) {
|
|
5114
|
+
let newIndex = -1;
|
|
5115
|
+
switch (event.key) {
|
|
5116
|
+
case 'ArrowUp':
|
|
5117
|
+
case 'ArrowLeft':
|
|
5118
|
+
// Select previous item:
|
|
5119
|
+
newIndex = selectedIndex - 1;
|
|
5120
|
+
break;
|
|
5121
|
+
case 'ArrowDown':
|
|
5122
|
+
case 'ArrowRight':
|
|
5123
|
+
if (selectedIndex === undefined) {
|
|
5124
|
+
// None selected, select first item:
|
|
5125
|
+
newIndex = 0;
|
|
5126
|
+
}
|
|
5127
|
+
else if (selectedIndex < items.length - 1) {
|
|
5128
|
+
// Select next item:
|
|
5129
|
+
newIndex = selectedIndex + 1;
|
|
5130
|
+
}
|
|
5131
|
+
break;
|
|
5132
|
+
case 'Home':
|
|
5133
|
+
// Select first item:
|
|
5134
|
+
newIndex = 0;
|
|
5135
|
+
break;
|
|
5136
|
+
case 'End':
|
|
5137
|
+
// Select last item:
|
|
5138
|
+
newIndex = items.length - 1;
|
|
5139
|
+
break;
|
|
5140
|
+
default:
|
|
5141
|
+
break;
|
|
5142
|
+
}
|
|
5143
|
+
return newIndex;
|
|
5144
|
+
}
|
|
5145
|
+
}
|
|
5146
|
+
/** @nocollapse */ KeyboardHandlerService.ɵprov = ɵɵdefineInjectable({ factory: function KeyboardHandlerService_Factory() { return new KeyboardHandlerService(); }, token: KeyboardHandlerService, providedIn: "root" });
|
|
5147
|
+
KeyboardHandlerService.decorators = [
|
|
5148
|
+
{ type: Injectable, args: [{
|
|
5149
|
+
providedIn: 'root',
|
|
5150
|
+
},] }
|
|
5151
|
+
];
|
|
5152
|
+
|
|
4958
5153
|
class DropdownComponent {
|
|
4959
|
-
constructor(renderer, elementRef, changeDetectorRef) {
|
|
5154
|
+
constructor(renderer, elementRef, changeDetectorRef, keyboardHandlerService) {
|
|
4960
5155
|
this.renderer = renderer;
|
|
4961
5156
|
this.elementRef = elementRef;
|
|
4962
5157
|
this.changeDetectorRef = changeDetectorRef;
|
|
5158
|
+
this.keyboardHandlerService = keyboardHandlerService;
|
|
4963
5159
|
this.state = OpenState.closed;
|
|
4964
5160
|
this.hasConfiguredSlottedItems = false;
|
|
4965
5161
|
this.horizontalDirection = HorizontalDirection.right;
|
|
@@ -4973,6 +5169,7 @@ class DropdownComponent {
|
|
|
4973
5169
|
this.disabled = false;
|
|
4974
5170
|
this.size = 'md';
|
|
4975
5171
|
this.tabindex = 0;
|
|
5172
|
+
this.usePopover = false;
|
|
4976
5173
|
/**
|
|
4977
5174
|
* Emitted when an item is selected (tap on mobile, click/keypress on web)
|
|
4978
5175
|
*/
|
|
@@ -5065,10 +5262,25 @@ class DropdownComponent {
|
|
|
5065
5262
|
this.hasConfiguredSlottedItems = true;
|
|
5066
5263
|
}
|
|
5067
5264
|
}
|
|
5265
|
+
/* Utility that makes it easier to set styles on card element
|
|
5266
|
+
when using popover*/
|
|
5267
|
+
setPopoverCardStyle(style, value) {
|
|
5268
|
+
if (!this.usePopover)
|
|
5269
|
+
return;
|
|
5270
|
+
this.renderer.setStyle(this.cardElement.nativeElement, style, value, RendererStyleFlags2.DashCase);
|
|
5271
|
+
}
|
|
5068
5272
|
ngAfterViewInit() {
|
|
5273
|
+
if (this.usePopover && this.expand === 'block') {
|
|
5274
|
+
const { width } = this.elementRef.nativeElement.getBoundingClientRect();
|
|
5275
|
+
this.setPopoverCardStyle('--kirby-card-width', `${width}px`);
|
|
5276
|
+
this.setPopoverCardStyle('max-width', 'initial');
|
|
5277
|
+
this.setPopoverCardStyle('min-width', 'initial');
|
|
5278
|
+
}
|
|
5069
5279
|
this.initializeAlignment();
|
|
5070
5280
|
}
|
|
5071
5281
|
initializeAlignment() {
|
|
5282
|
+
if (this.usePopover)
|
|
5283
|
+
return;
|
|
5072
5284
|
if (!this.intersectionObserverRef) {
|
|
5073
5285
|
const options = {
|
|
5074
5286
|
rootMargin: '0px',
|
|
@@ -5135,13 +5347,16 @@ class DropdownComponent {
|
|
|
5135
5347
|
}
|
|
5136
5348
|
}
|
|
5137
5349
|
showDropdown() {
|
|
5350
|
+
var _a;
|
|
5138
5351
|
if (this.state === OpenState.opening) {
|
|
5139
5352
|
this.state = OpenState.open;
|
|
5353
|
+
(_a = this.popover) === null || _a === void 0 ? void 0 : _a.show();
|
|
5140
5354
|
this.scrollItemIntoView(this.selectedIndex);
|
|
5141
5355
|
this.changeDetectorRef.markForCheck();
|
|
5142
5356
|
}
|
|
5143
5357
|
}
|
|
5144
5358
|
close() {
|
|
5359
|
+
var _a;
|
|
5145
5360
|
if (this.disabled) {
|
|
5146
5361
|
return;
|
|
5147
5362
|
}
|
|
@@ -5149,6 +5364,7 @@ class DropdownComponent {
|
|
|
5149
5364
|
this.state = OpenState.closed;
|
|
5150
5365
|
// Reset vertical direction to default
|
|
5151
5366
|
this.verticalDirection = VerticalDirection.down;
|
|
5367
|
+
(_a = this.popover) === null || _a === void 0 ? void 0 : _a.hide();
|
|
5152
5368
|
}
|
|
5153
5369
|
}
|
|
5154
5370
|
onItemSelect(index) {
|
|
@@ -5249,12 +5465,17 @@ class DropdownComponent {
|
|
|
5249
5465
|
this.elementRef.nativeElement.blur();
|
|
5250
5466
|
}
|
|
5251
5467
|
}
|
|
5252
|
-
|
|
5253
|
-
|
|
5468
|
+
_onPopoverWillHide() {
|
|
5469
|
+
this.state = OpenState.closed;
|
|
5470
|
+
this.elementRef.nativeElement.focus();
|
|
5471
|
+
}
|
|
5472
|
+
_onBlur(event) {
|
|
5473
|
+
if (this.disabled)
|
|
5254
5474
|
return;
|
|
5255
|
-
}
|
|
5256
5475
|
if (this.isOpen) {
|
|
5257
|
-
this.
|
|
5476
|
+
if (!this.cardElement.nativeElement.contains(event === null || event === void 0 ? void 0 : event.relatedTarget)) {
|
|
5477
|
+
this.close();
|
|
5478
|
+
}
|
|
5258
5479
|
}
|
|
5259
5480
|
this._onTouched();
|
|
5260
5481
|
}
|
|
@@ -5271,50 +5492,26 @@ class DropdownComponent {
|
|
|
5271
5492
|
this.toggle();
|
|
5272
5493
|
}
|
|
5273
5494
|
_onArrowKeys(event) {
|
|
5274
|
-
if (this.disabled)
|
|
5495
|
+
if (this.disabled)
|
|
5275
5496
|
return;
|
|
5276
|
-
|
|
5497
|
+
// Mirror default HTML5 select behaviour - prevent left/right arrows when open:
|
|
5277
5498
|
if (this.isOpen && (event.key === 'ArrowLeft' || event.key === 'ArrowRight')) {
|
|
5278
|
-
// Mirror default HTML5 select behaviour - prevent left/right arrows when open:
|
|
5279
5499
|
return;
|
|
5280
5500
|
}
|
|
5281
|
-
event.
|
|
5282
|
-
let newIndex = -1;
|
|
5283
|
-
if (event.key === 'ArrowUp' || event.key === 'ArrowLeft') {
|
|
5284
|
-
// Select previous item:
|
|
5285
|
-
newIndex = this.selectedIndex - 1;
|
|
5286
|
-
}
|
|
5287
|
-
if (event.key === 'ArrowDown' || event.key === 'ArrowRight') {
|
|
5288
|
-
if (this.selectedIndex === undefined) {
|
|
5289
|
-
// None selected, select first item:
|
|
5290
|
-
newIndex = 0;
|
|
5291
|
-
}
|
|
5292
|
-
else if (this.selectedIndex < this.items.length - 1) {
|
|
5293
|
-
// Select next item:
|
|
5294
|
-
newIndex = this.selectedIndex + 1;
|
|
5295
|
-
}
|
|
5296
|
-
}
|
|
5501
|
+
const newIndex = this.keyboardHandlerService.handle(event, this.items, this.selectedIndex);
|
|
5297
5502
|
if (newIndex > -1) {
|
|
5298
5503
|
this.selectItem(newIndex);
|
|
5299
5504
|
}
|
|
5505
|
+
return false;
|
|
5300
5506
|
}
|
|
5301
5507
|
_onHomeEndKeys(event) {
|
|
5302
|
-
|
|
5303
|
-
if (this.disabled) {
|
|
5508
|
+
if (this.disabled)
|
|
5304
5509
|
return;
|
|
5305
|
-
|
|
5306
|
-
let newIndex = -1;
|
|
5307
|
-
if (event.key === 'Home') {
|
|
5308
|
-
// Select first item:
|
|
5309
|
-
newIndex = 0;
|
|
5310
|
-
}
|
|
5311
|
-
if (event.key === 'End') {
|
|
5312
|
-
// Select last item:
|
|
5313
|
-
newIndex = this.items.length - 1;
|
|
5314
|
-
}
|
|
5510
|
+
const newIndex = this.keyboardHandlerService.handle(event, this.items, this.selectedIndex);
|
|
5315
5511
|
if (newIndex > -1) {
|
|
5316
5512
|
this.selectItem(newIndex);
|
|
5317
5513
|
}
|
|
5514
|
+
return false;
|
|
5318
5515
|
}
|
|
5319
5516
|
ngOnDestroy() {
|
|
5320
5517
|
let unlisten;
|
|
@@ -5330,7 +5527,7 @@ DropdownComponent.OPEN_DELAY_IN_MS = 100;
|
|
|
5330
5527
|
DropdownComponent.decorators = [
|
|
5331
5528
|
{ type: Component, args: [{
|
|
5332
5529
|
selector: 'kirby-dropdown',
|
|
5333
|
-
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>\n <span class=\"text\">{{ selectedText || placeholder }}</span>\n <kirby-icon [name]=\"isOpen ? 'arrow-up' : 'arrow-down'\"></kirby-icon>\n</button>\n<kirby-
|
|
5530
|
+
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>\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 [target]=\"buttonElement\" [popout]=\"popout\" (willHide)=\"_onPopoverWillHide()\">\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",
|
|
5334
5531
|
providers: [
|
|
5335
5532
|
{
|
|
5336
5533
|
provide: NG_VALUE_ACCESSOR,
|
|
@@ -5338,14 +5535,15 @@ DropdownComponent.decorators = [
|
|
|
5338
5535
|
multi: true,
|
|
5339
5536
|
},
|
|
5340
5537
|
],
|
|
5341
|
-
styles: [":host{
|
|
5538
|
+
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:0;max-width:none}@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 rgba(28,28,28,.3),0 0 5px 0 rgba(28,28,28,.08);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(.is-open)>button{box-shadow:0 20px 30px -15px rgba(28,28,28,.3),0 0 5px 0 rgba(28,28,28,.08)}:host-context(kirby-calendar)>button{border-color:transparent;font-weight:700;font-size:medium}:host-context(kirby-calendar).is-open>button{box-shadow:none}"]
|
|
5342
5539
|
},] }
|
|
5343
5540
|
];
|
|
5344
5541
|
/** @nocollapse */
|
|
5345
5542
|
DropdownComponent.ctorParameters = () => [
|
|
5346
5543
|
{ type: Renderer2 },
|
|
5347
5544
|
{ type: ElementRef },
|
|
5348
|
-
{ type: ChangeDetectorRef }
|
|
5545
|
+
{ type: ChangeDetectorRef },
|
|
5546
|
+
{ type: KeyboardHandlerService }
|
|
5349
5547
|
];
|
|
5350
5548
|
DropdownComponent.propDecorators = {
|
|
5351
5549
|
items: [{ type: Input }],
|
|
@@ -5360,6 +5558,7 @@ DropdownComponent.propDecorators = {
|
|
|
5360
5558
|
hasError: [{ type: HostBinding, args: ['class.error',] }, { type: Input }],
|
|
5361
5559
|
size: [{ type: Input }],
|
|
5362
5560
|
tabindex: [{ type: Input }],
|
|
5561
|
+
usePopover: [{ type: HostBinding, args: ['class.with-popover',] }, { type: Input }],
|
|
5363
5562
|
_tabindex: [{ type: HostBinding, args: ['attr.tabindex',] }],
|
|
5364
5563
|
_noBlurOnScroll: [{ type: HostBinding, args: ['attr.no-blur',] }],
|
|
5365
5564
|
change: [{ type: Output }],
|
|
@@ -5371,13 +5570,15 @@ DropdownComponent.propDecorators = {
|
|
|
5371
5570
|
_popoutUp: [{ type: HostBinding, args: ['class.popout-up',] }],
|
|
5372
5571
|
itemTemplate: [{ type: ContentChild, args: [ListItemTemplateDirective, { static: true, read: TemplateRef },] }],
|
|
5373
5572
|
slottedItems: [{ type: ContentChildren, args: [ListItemTemplateDirective, { read: ElementRef },] }],
|
|
5374
|
-
cardElement: [{ type: ViewChild, args: [CardComponent, {
|
|
5573
|
+
cardElement: [{ type: ViewChild, args: [CardComponent, { read: ElementRef },] }],
|
|
5574
|
+
popover: [{ type: ViewChild, args: [PopoverComponent,] }],
|
|
5575
|
+
buttonElement: [{ type: ViewChild, args: [ButtonComponent, { static: true, read: ElementRef },] }],
|
|
5375
5576
|
kirbyItemsDefault: [{ type: ViewChildren, args: [ItemComponent, { read: ElementRef },] }],
|
|
5376
5577
|
kirbyItemsSlotted: [{ type: ContentChildren, args: [ItemComponent, { read: ElementRef },] }],
|
|
5377
5578
|
_onTab: [{ type: HostListener, args: ['keydown.tab', ['$event'],] }],
|
|
5378
5579
|
_onMouseDown: [{ type: HostListener, args: ['mousedown', ['$event'],] }],
|
|
5379
5580
|
_onFocus: [{ type: HostListener, args: ['focus',] }],
|
|
5380
|
-
_onBlur: [{ type: HostListener, args: ['keydown.enter',] }, { type: HostListener, args: ['keydown.escape',] }, { type: HostListener, args: ['blur',] }],
|
|
5581
|
+
_onBlur: [{ type: HostListener, args: ['keydown.enter',] }, { type: HostListener, args: ['keydown.escape',] }, { type: HostListener, args: ['blur', ['$event'],] }],
|
|
5381
5582
|
_onSpace: [{ type: HostListener, args: ['keydown.space', ['$event'],] }],
|
|
5382
5583
|
_onEnter: [{ type: HostListener, args: ['keydown.enter', ['$event'],] }],
|
|
5383
5584
|
_onArrowKeys: [{ type: HostListener, args: ['keydown.arrowup', ['$event'],] }, { type: HostListener, args: ['keydown.arrowdown', ['$event'],] }, { type: HostListener, args: ['keydown.arrowleft', ['$event'],] }, { type: HostListener, args: ['keydown.arrowright', ['$event'],] }],
|
|
@@ -8584,6 +8785,7 @@ const declarations$1 = [
|
|
|
8584
8785
|
ModalWrapperComponent,
|
|
8585
8786
|
ModalCompactWrapperComponent,
|
|
8586
8787
|
ProgressCircleRingComponent,
|
|
8788
|
+
PopoverComponent,
|
|
8587
8789
|
];
|
|
8588
8790
|
const exportedModules = [
|
|
8589
8791
|
AppModule,
|
|
@@ -8664,5 +8866,5 @@ KirbyModule.ctorParameters = () => [
|
|
|
8664
8866
|
* Generated bundle index. Do not edit.
|
|
8665
8867
|
*/
|
|
8666
8868
|
|
|
8667
|
-
export { AccordionDirective, AccordionItemComponent, ActionSheetComponent, AppComponent, AppModule, AvatarComponent, AvatarSize, BadgeComponent, ButtonComponent, ButtonSize, COMPONENT_PROPS, CalendarComponent, CardComponent, CardFooterComponent, CardHeaderComponent, ChartComponent, ChartDeprecatedComponent, ChartDeprecatedType, CheckboxComponent, ChipComponent, ColorHelper, ComponentLoaderDirective, DateInputDirective, DecimalMaskDirective, DesignTokenHelper, DividerComponent, DropdownComponent, EmptyStateComponent, FabSheetComponent, FitHeadingDirective, FitHeadingModule, FlagComponent, FormFieldComponent, FormFieldMessageComponent, GridCardConfiguration, GridComponent, GroupByPipe, HorizontalDirection, ICON_SETTINGS, IconComponent, IconModule, IconRegistryService, IconSize, InfiniteScrollDirective, InputComponent, InputCounterComponent, InputSize, ItemComponent, ItemModule, ItemSize, KeyHandlerDirective, KirbyAnimation, KirbyModule, LabelComponent, ListComponent, ListFlexItemDirective, ListFooterDirective, ListHeaderComponent, ListHeaderDirective, ListItemColorDirective, ListItemComponent, ListItemDirective, ListItemTemplateDirective, ListSectionHeaderComponent, ListSectionHeaderDirective, LoadingOverlayComponent, LoadingOverlayService, Modal, ModalController, ModalFooterComponent, PageActionsComponent, PageActionsDirective, PageComponent, PageContentComponent, PageContentDirective, PageFooterComponent, PageModule, PageProgressComponent, PageTitleComponent, PageTitleDirective, PageToolbarTitleDirective, PlatformService, ProgressCircleComponent, RadioComponent, RadioGroupComponent, RangeComponent, ReorderEvent, ReorderListComponent, ResizeObserverFactory, ResizeObserverService, RouterOutletComponent, RouterOutletModule, ScssHelper, SegmentedControlComponent, SegmentedControlMode, SlideButtonComponent, SlideDirective, SlidesComponent, SpinnerComponent, StockChartDeprecatedComponent, TabButtonComponent, TabsComponent, TabsModule, TabsService, TextareaComponent, ThemeColorDirective, ToastController, ToggleButtonComponent, ToggleComponent, annotations, camelToKebabCase, capitalizeFirstLetter, defaultIcons, isNumberArray, kebabToCamelCase, kebabToTitleCase, selectedTabClickEvent, stockChartDeprecatedOptions, ɵ0$6 as ɵ0, AppModule as ɵa, AppComponent as ɵb, Modal as ɵba, ButtonComponent as ɵbb, IconComponent as ɵbc, IconRegistryService as ɵbd, ICON_SETTINGS as ɵbf, ResizeObserverService as ɵbg, ResizeObserverFactory as ɵbh, FitHeadingModule as ɵbi, FitHeadingDirective as ɵbj, LineClampHelper as ɵbk, TabsModule as ɵbl, IconModule as ɵbm, TabButtonComponent as ɵbn, ItemModule as ɵbo, ItemComponent as ɵbp, LabelComponent as ɵbq, ToggleButtonModule as ɵbr, ToggleButtonComponent as ɵbs, ListModule as ɵbt, ListComponent as ɵbu, ListHelper as ɵbv, GroupByPipe as ɵbw, InfiniteScrollDirective as ɵbx, ListItemDirective as ɵby, ListFlexItemDirective as ɵbz, RouterOutletComponent as ɵc, ListItemTemplateDirective as ɵca, ListHeaderDirective as ɵcb, ListSectionHeaderDirective as ɵcc, ListFooterDirective as ɵcd, ListItemComponent as ɵce, ListSectionHeaderComponent as ɵcf, ListHeaderComponent as ɵcg, ListItemColorDirective as ɵch, SpinnerModule as ɵci, SpinnerComponent as ɵcj, ChartModule as ɵck, ChartComponent as ɵcl, ChartJSService as ɵcm, ChartConfigService as ɵcn, CardComponent as ɵco, CardHeaderComponent as ɵcp, CardFooterComponent as ɵcq, ChartDeprecatedComponent as ɵcr, ChartDeprecatedHelper as ɵcs, DONUT_OPTIONS as ɵct, DonutOptions as ɵcu, AREASPLINE_OPTIONS as ɵcv, AreaSplineOptions as ɵcw, TIMESERIES_OPTIONS as ɵcx, TimeSeriesOptions as ɵcy, ACTIVITYGAUGE_OPTIONS as ɵcz, ModalController as ɵd, ActivityGaugeOptions as ɵda, StockChartDeprecatedComponent as ɵdb, GridComponent as ɵdc, BreakpointHelperService as ɵdd, ComponentLoaderDirective as ɵde, AvatarComponent as ɵdf, CalendarComponent as ɵdg, CalendarHelper as ɵdh, CheckboxComponent as ɵdi, ActionSheetComponent as ɵdj, ModalFooterComponent as ɵdk, ModalRouterLinkDirective as ɵdl, SegmentedControlComponent as ɵdm, ChipComponent as ɵdn, BadgeComponent as ɵdo, ThemeColorDirective as ɵdp, DateInputDirective as ɵdq, DecimalMaskDirective as ɵdr, SlideButtonComponent as ɵds, ToggleComponent as ɵdt, EmptyStateComponent as ɵdu, FormFieldComponent as ɵdv, InputCounterComponent as ɵdw, RadioGroupComponent as ɵdx, RadioComponent as ɵdy, InputComponent as ɵdz, ModalHelper as ɵe, TextareaComponent as ɵea, FabSheetComponent as ɵeb, DividerComponent as ɵec, ReorderListComponent as ɵed, DropdownComponent as ɵee,
|
|
8869
|
+
export { AccordionDirective, AccordionItemComponent, ActionSheetComponent, AppComponent, AppModule, AvatarComponent, AvatarSize, BadgeComponent, ButtonComponent, ButtonSize, COMPONENT_PROPS, CalendarComponent, CardComponent, CardFooterComponent, CardHeaderComponent, ChartComponent, ChartDeprecatedComponent, ChartDeprecatedType, CheckboxComponent, ChipComponent, ColorHelper, ComponentLoaderDirective, DateInputDirective, DecimalMaskDirective, DesignTokenHelper, DividerComponent, DropdownComponent, EmptyStateComponent, FabSheetComponent, FitHeadingDirective, FitHeadingModule, FlagComponent, FormFieldComponent, FormFieldMessageComponent, GridCardConfiguration, GridComponent, GroupByPipe, HorizontalDirection, ICON_SETTINGS, IconComponent, IconModule, IconRegistryService, IconSize, InfiniteScrollDirective, InputComponent, InputCounterComponent, InputSize, ItemComponent, ItemModule, ItemSize, KeyHandlerDirective, KirbyAnimation, KirbyModule, LabelComponent, ListComponent, ListFlexItemDirective, ListFooterDirective, ListHeaderComponent, ListHeaderDirective, ListItemColorDirective, ListItemComponent, ListItemDirective, ListItemTemplateDirective, ListSectionHeaderComponent, ListSectionHeaderDirective, LoadingOverlayComponent, LoadingOverlayService, Modal, ModalController, ModalFooterComponent, PageActionsComponent, PageActionsDirective, PageComponent, PageContentComponent, PageContentDirective, PageFooterComponent, PageModule, PageProgressComponent, PageTitleComponent, PageTitleDirective, PageToolbarTitleDirective, PlatformService, PopoverComponent, ProgressCircleComponent, RadioComponent, RadioGroupComponent, RangeComponent, ReorderEvent, ReorderListComponent, ResizeObserverFactory, ResizeObserverService, RouterOutletComponent, RouterOutletModule, ScssHelper, SegmentedControlComponent, SegmentedControlMode, SlideButtonComponent, SlideDirective, SlidesComponent, SpinnerComponent, StockChartDeprecatedComponent, TabButtonComponent, TabsComponent, TabsModule, TabsService, TextareaComponent, ThemeColorDirective, ToastController, ToggleButtonComponent, ToggleComponent, annotations, camelToKebabCase, capitalizeFirstLetter, defaultIcons, isNumberArray, kebabToCamelCase, kebabToTitleCase, selectedTabClickEvent, stockChartDeprecatedOptions, ɵ0$6 as ɵ0, AppModule as ɵa, AppComponent as ɵb, Modal as ɵba, ButtonComponent as ɵbb, IconComponent as ɵbc, IconRegistryService as ɵbd, ICON_SETTINGS as ɵbf, ResizeObserverService as ɵbg, ResizeObserverFactory as ɵbh, FitHeadingModule as ɵbi, FitHeadingDirective as ɵbj, LineClampHelper as ɵbk, TabsModule as ɵbl, IconModule as ɵbm, TabButtonComponent as ɵbn, ItemModule as ɵbo, ItemComponent as ɵbp, LabelComponent as ɵbq, ToggleButtonModule as ɵbr, ToggleButtonComponent as ɵbs, ListModule as ɵbt, ListComponent as ɵbu, ListHelper as ɵbv, GroupByPipe as ɵbw, InfiniteScrollDirective as ɵbx, ListItemDirective as ɵby, ListFlexItemDirective as ɵbz, RouterOutletComponent as ɵc, ListItemTemplateDirective as ɵca, ListHeaderDirective as ɵcb, ListSectionHeaderDirective as ɵcc, ListFooterDirective as ɵcd, ListItemComponent as ɵce, ListSectionHeaderComponent as ɵcf, ListHeaderComponent as ɵcg, ListItemColorDirective as ɵch, SpinnerModule as ɵci, SpinnerComponent as ɵcj, ChartModule as ɵck, ChartComponent as ɵcl, ChartJSService as ɵcm, ChartConfigService as ɵcn, CardComponent as ɵco, CardHeaderComponent as ɵcp, CardFooterComponent as ɵcq, ChartDeprecatedComponent as ɵcr, ChartDeprecatedHelper as ɵcs, DONUT_OPTIONS as ɵct, DonutOptions as ɵcu, AREASPLINE_OPTIONS as ɵcv, AreaSplineOptions as ɵcw, TIMESERIES_OPTIONS as ɵcx, TimeSeriesOptions as ɵcy, ACTIVITYGAUGE_OPTIONS as ɵcz, ModalController as ɵd, ActivityGaugeOptions as ɵda, StockChartDeprecatedComponent as ɵdb, GridComponent as ɵdc, BreakpointHelperService as ɵdd, ComponentLoaderDirective as ɵde, AvatarComponent as ɵdf, CalendarComponent as ɵdg, CalendarHelper as ɵdh, CheckboxComponent as ɵdi, ActionSheetComponent as ɵdj, ModalFooterComponent as ɵdk, ModalRouterLinkDirective as ɵdl, SegmentedControlComponent as ɵdm, ChipComponent as ɵdn, BadgeComponent as ɵdo, ThemeColorDirective as ɵdp, DateInputDirective as ɵdq, DecimalMaskDirective as ɵdr, SlideButtonComponent as ɵds, ToggleComponent as ɵdt, EmptyStateComponent as ɵdu, FormFieldComponent as ɵdv, InputCounterComponent as ɵdw, RadioGroupComponent as ɵdx, RadioComponent as ɵdy, InputComponent as ɵdz, ModalHelper as ɵe, TextareaComponent as ɵea, FabSheetComponent as ɵeb, DividerComponent as ɵec, ReorderListComponent as ɵed, DropdownComponent as ɵee, PopoverComponent as ɵef, KeyboardHandlerService as ɵeg, LoadingOverlayComponent as ɵeh, ProgressCircleComponent as ɵei, FlagComponent as ɵej, SlideDirective as ɵek, SlidesComponent as ɵel, AccordionDirective as ɵem, AccordionItemComponent as ɵen, RangeComponent as ɵeo, KeyHandlerDirective as ɵep, FormFieldMessageComponent as ɵeq, AlertComponent as ɵer, ModalCompactWrapperComponent as ɵes, ProgressCircleRingComponent as ɵet, ToastHelper as ɵeu, ToastController as ɵev, LoadingOverlayService as ɵew, ModalAnimationBuilderService as ɵf, PlatformService as ɵg, WindowRef as ɵh, ActionSheetHelper as ɵi, AlertHelper as ɵj, ModalNavigationService as ɵk, RouterOutletModule as ɵl, PageModule as ɵm, PageTitleDirective as ɵn, PageToolbarTitleDirective as ɵo, PageActionsDirective as ɵp, PageContentDirective as ɵq, PageProgressComponent as ɵr, PageTitleComponent as ɵs, PageContentComponent as ɵt, PageActionsComponent as ɵu, PageComponent as ɵv, TabsComponent as ɵw, TabsService as ɵx, PageFooterComponent as ɵy, ModalWrapperComponent as ɵz };
|
|
8668
8870
|
//# sourceMappingURL=kirbydesign-designsystem.js.map
|