@koobiq/components 18.18.0 → 18.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/actions-panel/actions-panel-config.d.ts +79 -0
- package/actions-panel/actions-panel-container.d.ts +90 -0
- package/actions-panel/actions-panel-container.scss +33 -0
- package/actions-panel/actions-panel-ref.d.ts +31 -0
- package/actions-panel/actions-panel-tokens.scss +13 -0
- package/actions-panel/actions-panel.d.ts +144 -0
- package/actions-panel/index.d.ts +5 -0
- package/actions-panel/module.d.ts +7 -0
- package/core/animation/animation.d.ts +26 -0
- package/core/form-field/form-field-ref.d.ts +4 -0
- package/core/locales/en-US.d.ts +45 -0
- package/core/locales/es-LA.d.ts +45 -0
- package/core/locales/fa-IR.d.ts +45 -0
- package/core/locales/locale-service.d.ts +315 -0
- package/core/locales/pt-BR.d.ts +45 -0
- package/core/locales/ru-RU.d.ts +45 -0
- package/core/locales/tk-TM.d.ts +45 -0
- package/core/locales/types.d.ts +6 -0
- package/core/locales/zh-CN.d.ts +45 -0
- package/core/option/option-tokens.scss +5 -1
- package/core/option/option.d.ts +3 -1
- package/core/option/option.scss +6 -4
- package/core/styles/common/_list.scss +2 -9
- package/core/styles/common/_select.scss +6 -0
- package/core/styles/common/_tokens.scss +1 -1
- package/datepicker/calendar.component.d.ts +9 -0
- package/datepicker/datepicker-input.directive.d.ts +5 -1
- package/dl/dl.component.d.ts +4 -4
- package/dropdown/_dropdown-theme.scss +9 -10
- package/dropdown/dropdown-tokens.scss +1 -0
- package/dropdown/dropdown.component.d.ts +1 -1
- package/dropdown/dropdown.scss +5 -0
- package/dropdown/dropdown.types.d.ts +3 -1
- package/esm2022/accordion/accordion-trigger.component.mjs +1 -1
- package/esm2022/actions-panel/actions-panel-config.mjs +55 -0
- package/esm2022/actions-panel/actions-panel-container.mjs +217 -0
- package/esm2022/actions-panel/actions-panel-ref.mjs +62 -0
- package/esm2022/actions-panel/actions-panel.mjs +220 -0
- package/esm2022/actions-panel/index.mjs +6 -0
- package/esm2022/actions-panel/koobiq-components-actions-panel.mjs +5 -0
- package/esm2022/actions-panel/module.mjs +21 -0
- package/esm2022/breadcrumbs/breadcrumbs.mjs +2 -2
- package/esm2022/button-toggle/button-toggle.component.mjs +2 -2
- package/esm2022/code-block/code-block.mjs +1 -1
- package/esm2022/core/animation/animation.mjs +29 -1
- package/esm2022/core/common-behaviors/common-module.mjs +2 -2
- package/esm2022/core/form-field/form-field-ref.mjs +1 -1
- package/esm2022/core/locales/en-US.mjs +46 -1
- package/esm2022/core/locales/es-LA.mjs +46 -1
- package/esm2022/core/locales/fa-IR.mjs +46 -1
- package/esm2022/core/locales/pt-BR.mjs +46 -1
- package/esm2022/core/locales/ru-RU.mjs +46 -1
- package/esm2022/core/locales/tk-TM.mjs +46 -1
- package/esm2022/core/locales/types.mjs +1 -1
- package/esm2022/core/locales/zh-CN.mjs +46 -1
- package/esm2022/core/option/option.mjs +12 -5
- package/esm2022/core/version.mjs +2 -2
- package/esm2022/datepicker/calendar-header.component.mjs +1 -1
- package/esm2022/datepicker/calendar.component.mjs +20 -2
- package/esm2022/datepicker/datepicker-input.directive.mjs +22 -11
- package/esm2022/datepicker/datepicker-toggle.component.mjs +1 -1
- package/esm2022/dl/dl.component.mjs +12 -9
- package/esm2022/dropdown/dropdown-item.component.mjs +2 -2
- package/esm2022/dropdown/dropdown-trigger.directive.mjs +6 -1
- package/esm2022/dropdown/dropdown.component.mjs +4 -4
- package/esm2022/dropdown/dropdown.types.mjs +1 -1
- package/esm2022/file-upload/multiple-file-upload.component.mjs +1 -1
- package/esm2022/file-upload/single-file-upload.component.mjs +1 -1
- package/esm2022/filter-bar/filter-bar-button.mjs +30 -0
- package/esm2022/filter-bar/filter-bar.mjs +168 -0
- package/esm2022/filter-bar/filter-bar.module.mjs +65 -0
- package/esm2022/filter-bar/filter-bar.types.mjs +13 -0
- package/esm2022/filter-bar/filter-refresher.mjs +34 -0
- package/esm2022/filter-bar/filter-reset.mjs +38 -0
- package/esm2022/filter-bar/filter-search.mjs +132 -0
- package/esm2022/filter-bar/filters.mjs +225 -0
- package/esm2022/filter-bar/index.mjs +2 -0
- package/esm2022/filter-bar/koobiq-components-filter-bar.mjs +5 -0
- package/esm2022/filter-bar/pipe-add.mjs +129 -0
- package/esm2022/filter-bar/pipe.directive.mjs +55 -0
- package/esm2022/filter-bar/pipes/base-pipe.mjs +106 -0
- package/esm2022/filter-bar/pipes/pipe-button.mjs +59 -0
- package/esm2022/filter-bar/pipes/pipe-date.mjs +171 -0
- package/esm2022/filter-bar/pipes/pipe-datetime.mjs +172 -0
- package/esm2022/filter-bar/pipes/pipe-multi-select.mjs +96 -0
- package/esm2022/filter-bar/pipes/pipe-select.mjs +88 -0
- package/esm2022/filter-bar/pipes/pipe-state.mjs +45 -0
- package/esm2022/filter-bar/pipes/pipe-text.mjs +89 -0
- package/esm2022/filter-bar/pipes/pipe-title.mjs +96 -0
- package/esm2022/filter-bar/public-api.mjs +20 -0
- package/esm2022/form-field/cleaner.mjs +1 -1
- package/esm2022/form-field/form-field.mjs +13 -6
- package/esm2022/form-field/password-hint.mjs +1 -1
- package/esm2022/form-field/password-toggle.mjs +1 -1
- package/esm2022/form-field/stepper.mjs +1 -1
- package/esm2022/icon/icon-button.component.mjs +9 -9
- package/esm2022/icon/icon-item.component.mjs +10 -10
- package/esm2022/icon/icon.component.mjs +9 -12
- package/esm2022/list/list-selection.component.mjs +18 -15
- package/esm2022/list/list.component.mjs +2 -2
- package/esm2022/modal/modal.component.mjs +1 -1
- package/esm2022/modal/modal.directive.mjs +1 -1
- package/esm2022/navbar/navbar-item.component.mjs +2 -2
- package/esm2022/navbar/navbar.component.mjs +2 -2
- package/esm2022/navbar/vertical-navbar.component.mjs +18 -16
- package/esm2022/overflow-items/overflow-items.mjs +129 -139
- package/esm2022/popover/popover-confirm.component.mjs +3 -3
- package/esm2022/popover/popover.component.mjs +30 -10
- package/esm2022/radio/radio.component.mjs +2 -2
- package/esm2022/select/select.component.mjs +3 -3
- package/esm2022/sidepanel/sidepanel-container.component.mjs +3 -3
- package/esm2022/sidepanel/sidepanel-directives.mjs +2 -2
- package/esm2022/tabs/tab-header.component.mjs +1 -1
- package/esm2022/tabs/tab-nav-bar.mjs +2 -2
- package/esm2022/tags/tag.component.mjs +2 -2
- package/esm2022/textarea/textarea.component.mjs +9 -5
- package/esm2022/timezone/timezone-option.component.mjs +2 -2
- package/esm2022/timezone/timezone-select.component.mjs +2 -2
- package/esm2022/title/title.directive.mjs +12 -5
- package/esm2022/toast/toast.component.mjs +2 -2
- package/esm2022/tree/toggle.mjs +1 -1
- package/esm2022/tree/tree-option.component.mjs +5 -4
- package/esm2022/tree/tree-selection.component.mjs +10 -3
- package/esm2022/tree-select/tree-select.component.mjs +6 -4
- package/fesm2022/koobiq-components-accordion.mjs +1 -1
- package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
- package/fesm2022/koobiq-components-actions-panel.mjs +567 -0
- package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -0
- package/fesm2022/koobiq-components-breadcrumbs.mjs +1 -1
- package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
- package/fesm2022/koobiq-components-button-toggle.mjs +2 -2
- package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
- package/fesm2022/koobiq-components-code-block.mjs +1 -1
- package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
- package/fesm2022/koobiq-components-core.mjs +357 -7
- package/fesm2022/koobiq-components-core.mjs.map +1 -1
- package/fesm2022/koobiq-components-datepicker.mjs +40 -12
- package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
- package/fesm2022/koobiq-components-dl.mjs +11 -8
- package/fesm2022/koobiq-components-dl.mjs.map +1 -1
- package/fesm2022/koobiq-components-dropdown.mjs +10 -5
- package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
- package/fesm2022/koobiq-components-file-upload.mjs +2 -2
- package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
- package/fesm2022/koobiq-components-filter-bar.mjs +1596 -0
- package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -0
- package/fesm2022/koobiq-components-form-field.mjs +16 -9
- package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
- package/fesm2022/koobiq-components-icon.mjs +23 -26
- package/fesm2022/koobiq-components-icon.mjs.map +1 -1
- package/fesm2022/koobiq-components-list.mjs +19 -16
- package/fesm2022/koobiq-components-list.mjs.map +1 -1
- package/fesm2022/koobiq-components-modal.mjs +2 -2
- package/fesm2022/koobiq-components-modal.mjs.map +1 -1
- package/fesm2022/koobiq-components-navbar.mjs +21 -19
- package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
- package/fesm2022/koobiq-components-overflow-items.mjs +129 -139
- package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
- package/fesm2022/koobiq-components-popover.mjs +31 -11
- package/fesm2022/koobiq-components-popover.mjs.map +1 -1
- package/fesm2022/koobiq-components-radio.mjs +2 -2
- package/fesm2022/koobiq-components-radio.mjs.map +1 -1
- package/fesm2022/koobiq-components-select.mjs +2 -2
- package/fesm2022/koobiq-components-select.mjs.map +1 -1
- package/fesm2022/koobiq-components-sidepanel.mjs +3 -3
- package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
- package/fesm2022/koobiq-components-tabs.mjs +2 -2
- package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
- package/fesm2022/koobiq-components-tags.mjs +2 -2
- package/fesm2022/koobiq-components-tags.mjs.map +1 -1
- package/fesm2022/koobiq-components-textarea.mjs +8 -4
- package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
- package/fesm2022/koobiq-components-timezone.mjs +4 -4
- package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
- package/fesm2022/koobiq-components-title.mjs +11 -4
- package/fesm2022/koobiq-components-title.mjs.map +1 -1
- package/fesm2022/koobiq-components-toast.mjs +1 -1
- package/fesm2022/koobiq-components-toast.mjs.map +1 -1
- package/fesm2022/koobiq-components-tree-select.mjs +5 -3
- package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
- package/fesm2022/koobiq-components-tree.mjs +14 -6
- package/fesm2022/koobiq-components-tree.mjs.map +1 -1
- package/filter-bar/_filter-bar-theme.scss +61 -0
- package/filter-bar/filter-bar-button.d.ts +8 -0
- package/filter-bar/filter-bar.d.ts +55 -0
- package/filter-bar/filter-bar.module.d.ts +17 -0
- package/filter-bar/filter-bar.scss +60 -0
- package/filter-bar/filter-bar.types.d.ts +97 -0
- package/filter-bar/filter-refresher.d.ts +5 -0
- package/filter-bar/filter-refresher.scss +6 -0
- package/filter-bar/filter-reset.d.ts +11 -0
- package/filter-bar/filter-search.d.ts +25 -0
- package/filter-bar/filter-search.scss +14 -0
- package/filter-bar/filters.d.ts +72 -0
- package/filter-bar/filters.scss +92 -0
- package/filter-bar/index.d.ts +1 -0
- package/filter-bar/pipe-add.d.ts +18 -0
- package/filter-bar/pipe-add.scss +5 -0
- package/filter-bar/pipe.directive.d.ts +13 -0
- package/filter-bar/pipes/base-pipe.d.ts +40 -0
- package/filter-bar/pipes/base-pipe.scss +117 -0
- package/filter-bar/pipes/pipe-button.d.ts +13 -0
- package/filter-bar/pipes/pipe-button.scss +5 -0
- package/filter-bar/pipes/pipe-date.d.ts +41 -0
- package/filter-bar/pipes/pipe-date.scss +132 -0
- package/filter-bar/pipes/pipe-datetime.d.ts +41 -0
- package/filter-bar/pipes/pipe-multi-select.d.ts +22 -0
- package/filter-bar/pipes/pipe-multiselect.scss +15 -0
- package/filter-bar/pipes/pipe-select.d.ts +21 -0
- package/filter-bar/pipes/pipe-select.scss +3 -0
- package/filter-bar/pipes/pipe-state.d.ts +14 -0
- package/filter-bar/pipes/pipe-text.d.ts +19 -0
- package/filter-bar/pipes/pipe-title.d.ts +25 -0
- package/filter-bar/public-api.d.ts +19 -0
- package/form-field/form-field.d.ts +6 -1
- package/form-field/form-field.scss +1 -0
- package/icon/icon-button.component.d.ts +5 -3
- package/icon/icon-item.component.d.ts +5 -3
- package/icon/icon.component.d.ts +5 -4
- package/list/list.scss +2 -3
- package/navbar/vertical-navbar.component.d.ts +4 -1
- package/overflow-items/overflow-items.d.ts +59 -71
- package/package.json +19 -7
- package/popover/popover.component.d.ts +6 -1
- package/radio/radio-tokens.scss +7 -3
- package/radio/radio.scss +19 -15
- package/schematics/ng-add/index.js +6 -6
- package/select/_select-theme.scss +9 -1
- package/tags/tag.scss +3 -0
- package/textarea/textarea.component.d.ts +2 -1
- package/timezone/timezone-option-tokens.scss +3 -2
- package/title/title.directive.d.ts +2 -0
- package/tree/tree-option.scss +2 -1
- package/tree-select/_tree-select-theme.scss +9 -1
|
@@ -59,11 +59,20 @@ export declare class KbqCalendar<D> implements AfterContentInit, OnDestroy, OnCh
|
|
|
59
59
|
* Emits whenever there is a state change that the header may need to respond to.
|
|
60
60
|
*/
|
|
61
61
|
stateChanges: Subject<void>;
|
|
62
|
+
/** The input element this datepicker is associated with. */
|
|
63
|
+
datepickerInput: any;
|
|
62
64
|
private readonly intlChanges;
|
|
65
|
+
/** Subscription to value changes in the associated input element. */
|
|
66
|
+
private inputSubscription;
|
|
63
67
|
constructor(intl: KbqDatepickerIntl, adapter: DateAdapter<D>, changeDetectorRef: ChangeDetectorRef);
|
|
64
68
|
ngAfterContentInit(): void;
|
|
65
69
|
ngOnDestroy(): void;
|
|
66
70
|
ngOnChanges(changes: SimpleChanges): void;
|
|
71
|
+
/**
|
|
72
|
+
* Register an input with this calendar.
|
|
73
|
+
* @param input The calendar input to register with this calendar.
|
|
74
|
+
*/
|
|
75
|
+
registerInput(input: any): void;
|
|
67
76
|
/** Updates today's date after an update of the active date */
|
|
68
77
|
updateTodaysDate(): void;
|
|
69
78
|
/** Handles date selection in the month view. */
|
|
@@ -4,6 +4,7 @@ import { DateAdapter, KbqDateFormats, KbqLocaleService } from '@koobiq/component
|
|
|
4
4
|
import { KbqFormFieldControl } from '@koobiq/components/form-field';
|
|
5
5
|
import { KbqWarningTooltipTrigger } from '@koobiq/components/tooltip';
|
|
6
6
|
import { Subject } from 'rxjs';
|
|
7
|
+
import { KbqCalendar } from './calendar.component';
|
|
7
8
|
import { KbqDatepicker } from './datepicker.component';
|
|
8
9
|
import * as i0 from "@angular/core";
|
|
9
10
|
export declare const MAX_YEAR = 9999;
|
|
@@ -41,6 +42,7 @@ export declare class KbqDatepickerInput<D> implements KbqFormFieldControl<D>, Co
|
|
|
41
42
|
controlType: string;
|
|
42
43
|
focused: boolean;
|
|
43
44
|
datepicker: KbqDatepicker<D>;
|
|
45
|
+
calendar: KbqCalendar<D>;
|
|
44
46
|
dateFilter: (date: D | null) => boolean;
|
|
45
47
|
/** Emits when the value changes (either due to user input or programmatic change). */
|
|
46
48
|
valueChange: EventEmitter<D | null>;
|
|
@@ -54,6 +56,8 @@ export declare class KbqDatepickerInput<D> implements KbqFormFieldControl<D>, Co
|
|
|
54
56
|
private _required;
|
|
55
57
|
/** The datepicker that this input is associated with. */
|
|
56
58
|
set kbqDatepicker(value: KbqDatepicker<D>);
|
|
59
|
+
/** The calendar that this input is associated with. */
|
|
60
|
+
set kbqCalendar(value: KbqCalendar<D>);
|
|
57
61
|
/** Function that can be used to filter out dates within the datepicker. */
|
|
58
62
|
set kbqDatepickerFilter(value: (date: D | null) => boolean);
|
|
59
63
|
/** The value of the input. */
|
|
@@ -187,5 +191,5 @@ export declare class KbqDatepickerInput<D> implements KbqFormFieldControl<D>, Co
|
|
|
187
191
|
private createDateTime;
|
|
188
192
|
private correctCursorPosition;
|
|
189
193
|
static ɵfac: i0.ɵɵFactoryDeclaration<KbqDatepickerInput<any>, [null, null, { optional: true; }, { optional: true; }, { optional: true; }]>;
|
|
190
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<KbqDatepickerInput<any>, "input[kbqDatepicker]", ["kbqDatepickerInput"], { "placeholder": { "alias": "placeholder"; "required": false; }; "required": { "alias": "required"; "required": false; }; "kbqDatepicker": { "alias": "kbqDatepicker"; "required": false; }; "kbqDatepickerFilter": { "alias": "kbqDatepickerFilter"; "required": false; }; "value": { "alias": "value"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "id": { "alias": "id"; "required": false; }; "kbqValidationTooltip": { "alias": "kbqValidationTooltip"; "required": false; }; }, { "incorrectInput": "incorrectInput"; "dateChange": "dateChange"; "dateInput": "dateInput"; }, never, never, false, never>;
|
|
194
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<KbqDatepickerInput<any>, "input[kbqDatepicker], input[kbqCalendar]", ["kbqDatepickerInput"], { "placeholder": { "alias": "placeholder"; "required": false; }; "required": { "alias": "required"; "required": false; }; "kbqDatepicker": { "alias": "kbqDatepicker"; "required": false; }; "kbqCalendar": { "alias": "kbqCalendar"; "required": false; }; "kbqDatepickerFilter": { "alias": "kbqDatepickerFilter"; "required": false; }; "value": { "alias": "value"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "id": { "alias": "id"; "required": false; }; "kbqValidationTooltip": { "alias": "kbqValidationTooltip"; "required": false; }; }, { "incorrectInput": "incorrectInput"; "dateChange": "dateChange"; "dateInput": "dateInput"; }, never, never, false, never>;
|
|
191
195
|
}
|
package/dl/dl.component.d.ts
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { AfterContentInit,
|
|
1
|
+
import { AfterContentInit, OnDestroy } from '@angular/core';
|
|
2
2
|
import { Subject } from 'rxjs';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
export declare class KbqDlComponent implements AfterContentInit, OnDestroy {
|
|
5
|
-
protected elementRef: ElementRef;
|
|
6
5
|
minWidth: number;
|
|
7
6
|
wide: boolean;
|
|
8
7
|
vertical: boolean | null;
|
|
9
8
|
readonly resizeStream: Subject<Event>;
|
|
10
9
|
private readonly resizeDebounceInterval;
|
|
11
10
|
private resizeSubscription;
|
|
12
|
-
|
|
11
|
+
private readonly elementRef;
|
|
12
|
+
private readonly changeDetectorRef;
|
|
13
13
|
ngAfterContentInit(): void;
|
|
14
14
|
ngOnDestroy(): void;
|
|
15
|
-
|
|
15
|
+
private readonly updateState;
|
|
16
16
|
static ɵfac: i0.ɵɵFactoryDeclaration<KbqDlComponent, never>;
|
|
17
17
|
static ɵcmp: i0.ɵɵComponentDeclaration<KbqDlComponent, "kbq-dl", never, { "minWidth": { "alias": "minWidth"; "required": false; }; "wide": { "alias": "wide"; "required": false; }; "vertical": { "alias": "vertical"; "required": false; }; }, {}, never, ["*"], false, never>;
|
|
18
18
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
@use '../core/styles/
|
|
2
|
-
@use '../core/styles/common/tokens' as *;
|
|
1
|
+
@use '../core/styles/common/tokens';
|
|
3
2
|
|
|
4
3
|
@mixin kbq-dropdown-item-state($style-name) {
|
|
5
4
|
background: var(--kbq-list-#{$style-name}-container-background);
|
|
@@ -8,10 +7,6 @@
|
|
|
8
7
|
.kbq-icon:not(.kbq-icon-button, .kbq-icon-item) {
|
|
9
8
|
color: var(--kbq-list-#{$style-name}-text-color);
|
|
10
9
|
}
|
|
11
|
-
|
|
12
|
-
.kbq-dropdown-item__caption {
|
|
13
|
-
color: var(--kbq-list-#{$style-name}-caption-color);
|
|
14
|
-
}
|
|
15
10
|
}
|
|
16
11
|
|
|
17
12
|
@mixin kbq-dropdown-theme() {
|
|
@@ -23,6 +18,10 @@
|
|
|
23
18
|
.kbq-dropdown-item {
|
|
24
19
|
@include kbq-dropdown-item-state(default);
|
|
25
20
|
|
|
21
|
+
.kbq-dropdown-item__caption {
|
|
22
|
+
color: var(--kbq-dropdown-item-caption-color);
|
|
23
|
+
}
|
|
24
|
+
|
|
26
25
|
&.kbq-dropdown-item_highlighted,
|
|
27
26
|
&:hover:not(.kbq-disabled) {
|
|
28
27
|
@include kbq-dropdown-item-state(states-hover);
|
|
@@ -70,19 +69,19 @@
|
|
|
70
69
|
@mixin kbq-dropdown-typography() {
|
|
71
70
|
.kbq-dropdown-item,
|
|
72
71
|
.kbq-dropdown__content {
|
|
73
|
-
@include kbq-typography-level-to-styles-css-variables(typography, text-normal);
|
|
72
|
+
@include tokens.kbq-typography-level-to-styles-css-variables(typography, text-normal);
|
|
74
73
|
|
|
75
74
|
.kbq-dropdown-item__caption {
|
|
76
|
-
@include kbq-typography-level-to-styles-css-variables(typography, text-compact);
|
|
75
|
+
@include tokens.kbq-typography-level-to-styles-css-variables(typography, text-compact);
|
|
77
76
|
}
|
|
78
77
|
}
|
|
79
78
|
|
|
80
79
|
.kbq-dropdown__group-header {
|
|
81
|
-
@include kbq-typography-level-to-styles-css-variables(typography, big-strong);
|
|
80
|
+
@include tokens.kbq-typography-level-to-styles-css-variables(typography, big-strong);
|
|
82
81
|
|
|
83
82
|
// @deprecated, use <kbq-optgroup label="Label" /> instead. Will be removed in the next major release
|
|
84
83
|
&.kbq-dropdown__group-header_small {
|
|
85
|
-
@include kbq-typography-level-to-styles-css-variables(typography, caps-compact-strong);
|
|
84
|
+
@include tokens.kbq-typography-level-to-styles-css-variables(typography, caps-compact-strong);
|
|
86
85
|
}
|
|
87
86
|
}
|
|
88
87
|
}
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
--kbq-dropdown-container-background: var(--kbq-background-card);
|
|
10
10
|
--kbq-dropdown-container-shadow: var(--kbq-shadow-popup);
|
|
11
11
|
--kbq-dropdown-item-border-radius: var(--kbq-size-xs);
|
|
12
|
+
--kbq-dropdown-item-caption-color: var(--kbq-foreground-contrast-secondary);
|
|
12
13
|
/* LIST THEME TOKENS */
|
|
13
14
|
@include list-tokens.list-theme-tokens;
|
|
14
15
|
}
|
|
@@ -111,7 +111,7 @@ export declare class KbqDropdown implements AfterContentInit, KbqDropdownPanel,
|
|
|
111
111
|
close(): void;
|
|
112
112
|
/**
|
|
113
113
|
* Sets up a stream that will keep track of any newly-added menu items and will update the list
|
|
114
|
-
* of direct descendants. We collect the descendants this way, because `
|
|
114
|
+
* of direct descendants. We collect the descendants this way, because `items` can include
|
|
115
115
|
* items that are part of child menus, and using a custom way of registering items is unreliable
|
|
116
116
|
* when it comes to maintaining the item order.
|
|
117
117
|
*/
|
package/dropdown/dropdown.scss
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { FocusOrigin } from '@angular/cdk/a11y';
|
|
2
2
|
import { Direction } from '@angular/cdk/bidi';
|
|
3
|
-
import { EventEmitter, InjectionToken, TemplateRef } from '@angular/core';
|
|
3
|
+
import { EventEmitter, InjectionToken, QueryList, TemplateRef } from '@angular/core';
|
|
4
4
|
import { KbqDropdownContent } from './dropdown-content.directive';
|
|
5
|
+
import { KbqDropdownItem } from './dropdown-item.component';
|
|
5
6
|
export type DropdownPositionX = 'before' | 'after';
|
|
6
7
|
export type DropdownPositionY = 'above' | 'below';
|
|
7
8
|
/** Reason why the menu was closed. */
|
|
@@ -23,6 +24,7 @@ export interface KbqDropdownPanel {
|
|
|
23
24
|
lazyContent?: KbqDropdownContent;
|
|
24
25
|
backdropClass?: string;
|
|
25
26
|
hasBackdrop?: boolean;
|
|
27
|
+
items: QueryList<KbqDropdownItem>;
|
|
26
28
|
focusFirstItem(origin?: FocusOrigin): void;
|
|
27
29
|
resetActiveItem(): void;
|
|
28
30
|
setPositionClasses?(x: DropdownPositionX, y: DropdownPositionY): void;
|
|
@@ -26,7 +26,7 @@ export class KbqAccordionTrigger {
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
<ng-content />
|
|
29
|
-
`, isInline: true, styles: [".kbq-accordion-trigger{display:flex;flex-direction:row;align-items:center;background:transparent;border:none;outline:none}.kbq-accordion-trigger .kbq-accordion-trigger__icon{padding:var(--kbq-size-xxs);transition:transform .3s ease-out}.kbq-accordion-trigger .kbq-accordion-trigger__badge,.kbq-accordion-trigger .kbq-accordion-trigger__caption{margin-top:var(--kbq-size-xxs);margin-right:var(--kbq-size-s)}.kbq-accordion-trigger .kbq-accordion-trigger__action{padding:var(--kbq-size-xxs) var(--kbq-size-xxs) var(--kbq-size-3xs);margin-bottom:calc(-1 * var(--kbq-size-3xs))}.kbq-accordion-trigger:hover:not([data-disabled=true]){cursor:pointer}.kbq-accordion-trigger:hover:not([data-disabled=true]) .kbq-accordion-trigger__icon{color:var(--kbq-accordion-item-states-hover-icon-color)}.kbq-accordion-trigger.kbq-accordion-trigger_fill{padding:var(--kbq-accordion-size-item-header-variant-fill-padding)}.kbq-accordion-trigger.kbq-accordion-trigger_fill[data-state=open]>.kbq-accordion-trigger__icon{transform:rotate(90deg)}.kbq-accordion-trigger.kbq-accordion-trigger_hug{flex-direction:row-reverse;justify-content:flex-end;padding:var(--kbq-accordion-size-item-header-variant-hug-padding)}.kbq-accordion-trigger.kbq-accordion-trigger_hug[data-state=open]>.kbq-accordion-trigger__icon{transform:rotate(90deg)}.kbq-accordion-trigger.kbq-accordion-trigger_hug-space-between{flex-direction:row-reverse;justify-content:space-between;padding:var(--kbq-accordion-size-item-header-variant-hug-padding)}.kbq-accordion-trigger.kbq-accordion-trigger_hug-space-between[data-state=open]>.kbq-accordion-trigger__icon{transform:rotate(-180deg)}.kbq-accordion-trigger[data-disabled=true] .kbq-accordion-trigger__icon{color:var(--kbq-accordion-item-states-disabled-icon-color)!important}button.kbq-accordion-trigger{flex:1}\n", ".kbq-accordion{--kbq-accordion-size-item-header-height: 36px;--kbq-accordion-size-item-header-variant-fill-padding: var(--kbq-size-xs) var(--kbq-size-s);--kbq-accordion-size-item-header-variant-hug-padding: var(--kbq-size-xs) var(--kbq-size-s) var(--kbq-size-xs) var(--kbq-size-m);--kbq-accordion-size-item-content-padding: 0px var(--kbq-size-m) var(--kbq-size-s) var(--kbq-size-m);--kbq-accordion-item-default-background: transparent;--kbq-accordion-item-default-text-color: var(--kbq-foreground-contrast);--kbq-accordion-item-default-icon-color: var(--kbq-icon-contrast-fade);--kbq-accordion-item-states-hover-icon-color: var(--kbq-icon-contrast);--kbq-accordion-item-states-focus-border-color: var(--kbq-line-theme);--kbq-accordion-item-states-disabled-text-color: var(--kbq-foreground-contrast-secondary);--kbq-accordion-item-states-disabled-icon-color: var(--kbq-states-icon-disabled)}\n"], dependencies: [{ kind: "component", type: i2.KbqIcon, selector: "[kbq-icon]", inputs: ["color", "small", "autoColor"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
29
|
+
`, isInline: true, styles: [".kbq-accordion-trigger{display:flex;flex-direction:row;align-items:center;background:transparent;border:none;outline:none}.kbq-accordion-trigger .kbq-accordion-trigger__icon{padding:var(--kbq-size-xxs);transition:transform .3s ease-out}.kbq-accordion-trigger .kbq-accordion-trigger__badge,.kbq-accordion-trigger .kbq-accordion-trigger__caption{margin-top:var(--kbq-size-xxs);margin-right:var(--kbq-size-s)}.kbq-accordion-trigger .kbq-accordion-trigger__action{padding:var(--kbq-size-xxs) var(--kbq-size-xxs) var(--kbq-size-3xs);margin-bottom:calc(-1 * var(--kbq-size-3xs))}.kbq-accordion-trigger:hover:not([data-disabled=true]){cursor:pointer}.kbq-accordion-trigger:hover:not([data-disabled=true]) .kbq-accordion-trigger__icon{color:var(--kbq-accordion-item-states-hover-icon-color)}.kbq-accordion-trigger.kbq-accordion-trigger_fill{padding:var(--kbq-accordion-size-item-header-variant-fill-padding)}.kbq-accordion-trigger.kbq-accordion-trigger_fill[data-state=open]>.kbq-accordion-trigger__icon{transform:rotate(90deg)}.kbq-accordion-trigger.kbq-accordion-trigger_hug{flex-direction:row-reverse;justify-content:flex-end;padding:var(--kbq-accordion-size-item-header-variant-hug-padding)}.kbq-accordion-trigger.kbq-accordion-trigger_hug[data-state=open]>.kbq-accordion-trigger__icon{transform:rotate(90deg)}.kbq-accordion-trigger.kbq-accordion-trigger_hug-space-between{flex-direction:row-reverse;justify-content:space-between;padding:var(--kbq-accordion-size-item-header-variant-hug-padding)}.kbq-accordion-trigger.kbq-accordion-trigger_hug-space-between[data-state=open]>.kbq-accordion-trigger__icon{transform:rotate(-180deg)}.kbq-accordion-trigger[data-disabled=true] .kbq-accordion-trigger__icon{color:var(--kbq-accordion-item-states-disabled-icon-color)!important}button.kbq-accordion-trigger{flex:1}\n", ".kbq-accordion{--kbq-accordion-size-item-header-height: 36px;--kbq-accordion-size-item-header-variant-fill-padding: var(--kbq-size-xs) var(--kbq-size-s);--kbq-accordion-size-item-header-variant-hug-padding: var(--kbq-size-xs) var(--kbq-size-s) var(--kbq-size-xs) var(--kbq-size-m);--kbq-accordion-size-item-content-padding: 0px var(--kbq-size-m) var(--kbq-size-s) var(--kbq-size-m);--kbq-accordion-item-default-background: transparent;--kbq-accordion-item-default-text-color: var(--kbq-foreground-contrast);--kbq-accordion-item-default-icon-color: var(--kbq-icon-contrast-fade);--kbq-accordion-item-states-hover-icon-color: var(--kbq-icon-contrast);--kbq-accordion-item-states-focus-border-color: var(--kbq-line-theme);--kbq-accordion-item-states-disabled-text-color: var(--kbq-foreground-contrast-secondary);--kbq-accordion-item-states-disabled-icon-color: var(--kbq-states-icon-disabled)}\n"], dependencies: [{ kind: "component", type: i2.KbqIcon, selector: "[kbq-icon]", inputs: ["color", "small", "autoColor", "kbq-icon"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
30
30
|
}
|
|
31
31
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KbqAccordionTrigger, decorators: [{
|
|
32
32
|
type: Component,
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
/** Injection token that can be used to specify default actions panel config. */
|
|
3
|
+
export const KBQ_ACTIONS_PANEL_DEFAULT_CONFIG = new InjectionToken('KBQ_ACTIONS_PANEL_DEFAULT_CONFIG', { factory: () => new KbqActionsPanelConfig() });
|
|
4
|
+
/**
|
|
5
|
+
* Utility for providing default actions panel config.
|
|
6
|
+
*
|
|
7
|
+
* @see `KBQ_ACTIONS_PANEL_DEFAULT_CONFIG`
|
|
8
|
+
*/
|
|
9
|
+
export const kbqActionsPanelDefaultConfigProvider = (config) => ({
|
|
10
|
+
provide: KBQ_ACTIONS_PANEL_DEFAULT_CONFIG,
|
|
11
|
+
useValue: config
|
|
12
|
+
});
|
|
13
|
+
/**
|
|
14
|
+
* Configuration for opened actions panel.
|
|
15
|
+
* Based on cdk `DialogConfig`.
|
|
16
|
+
*
|
|
17
|
+
* @see `DialogConfig`
|
|
18
|
+
*
|
|
19
|
+
*/
|
|
20
|
+
export class KbqActionsPanelConfig {
|
|
21
|
+
constructor() {
|
|
22
|
+
/**
|
|
23
|
+
* Data being injected into the child component.
|
|
24
|
+
*
|
|
25
|
+
* @see `KBQ_ACTIONS_PANEL_DATA`
|
|
26
|
+
*/
|
|
27
|
+
this.data = null;
|
|
28
|
+
/**
|
|
29
|
+
* Whether the actions panel should be closed of when the user goes backwards/forwards in history.
|
|
30
|
+
* NOTE! This does not apply to router navigation.
|
|
31
|
+
*
|
|
32
|
+
* @default true
|
|
33
|
+
*/
|
|
34
|
+
this.closeOnNavigation = true;
|
|
35
|
+
/**
|
|
36
|
+
* Direction of the text in the actions panel.
|
|
37
|
+
*
|
|
38
|
+
* @default 'ltr'
|
|
39
|
+
*/
|
|
40
|
+
this.direction = 'ltr';
|
|
41
|
+
/**
|
|
42
|
+
* Scroll strategy to be used for the actions panel.
|
|
43
|
+
*
|
|
44
|
+
* @default `RepositionScrollStrategy`
|
|
45
|
+
*/
|
|
46
|
+
this.scrollStrategy = (overlay) => overlay.scrollStrategies.reposition();
|
|
47
|
+
/**
|
|
48
|
+
* Whether the user can use ESC or click on close button to close the actions panel.
|
|
49
|
+
*
|
|
50
|
+
* @default false
|
|
51
|
+
*/
|
|
52
|
+
this.disableClose = false;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy1wYW5lbC1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL2FjdGlvbnMtcGFuZWwvYWN0aW9ucy1wYW5lbC1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFjLGNBQWMsRUFBc0IsTUFBTSxlQUFlLENBQUM7QUFFL0UsZ0ZBQWdGO0FBQ2hGLE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUFHLElBQUksY0FBYyxDQUM5RCxrQ0FBa0MsRUFDbEMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxxQkFBcUIsRUFBRSxFQUFFLENBQ2pELENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0NBQW9DLEdBQUcsQ0FBSSxNQUFnQyxFQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQ3BHLE9BQU8sRUFBRSxnQ0FBZ0M7SUFDekMsUUFBUSxFQUFFLE1BQU07Q0FDbkIsQ0FBQyxDQUFDO0FBRUg7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFPLHFCQUFxQjtJQUFsQztRQU1JOzs7O1dBSUc7UUFDSCxTQUFJLEdBQWMsSUFBSSxDQUFDO1FBS3ZCOzs7OztXQUtHO1FBQ0gsc0JBQWlCLEdBQWEsSUFBSSxDQUFDO1FBNkJuQzs7OztXQUlHO1FBQ0gsY0FBUyxHQUFlLEtBQUssQ0FBQztRQUU5Qjs7OztXQUlHO1FBQ0gsbUJBQWMsR0FBMEMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUUzRzs7OztXQUlHO1FBQ0gsaUJBQVksR0FBYSxLQUFLLENBQUM7SUFDbkMsQ0FBQztDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2JpZGknO1xuaW1wb3J0IHsgT3ZlcmxheSwgU2Nyb2xsU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3Rpb25Ub2tlbiwgSW5qZWN0b3IsIFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKiBJbmplY3Rpb24gdG9rZW4gdGhhdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGRlZmF1bHQgYWN0aW9ucyBwYW5lbCBjb25maWcuICovXG5leHBvcnQgY29uc3QgS0JRX0FDVElPTlNfUEFORUxfREVGQVVMVF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48S2JxQWN0aW9uc1BhbmVsQ29uZmlnPihcbiAgICAnS0JRX0FDVElPTlNfUEFORUxfREVGQVVMVF9DT05GSUcnLFxuICAgIHsgZmFjdG9yeTogKCkgPT4gbmV3IEticUFjdGlvbnNQYW5lbENvbmZpZygpIH1cbik7XG5cbi8qKlxuICogVXRpbGl0eSBmb3IgcHJvdmlkaW5nIGRlZmF1bHQgYWN0aW9ucyBwYW5lbCBjb25maWcuXG4gKlxuICogQHNlZSBgS0JRX0FDVElPTlNfUEFORUxfREVGQVVMVF9DT05GSUdgXG4gKi9cbmV4cG9ydCBjb25zdCBrYnFBY3Rpb25zUGFuZWxEZWZhdWx0Q29uZmlnUHJvdmlkZXIgPSA8RD4oY29uZmlnOiBLYnFBY3Rpb25zUGFuZWxDb25maWc8RD4pOiBQcm92aWRlciA9PiAoe1xuICAgIHByb3ZpZGU6IEtCUV9BQ1RJT05TX1BBTkVMX0RFRkFVTFRfQ09ORklHLFxuICAgIHVzZVZhbHVlOiBjb25maWdcbn0pO1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIG9wZW5lZCBhY3Rpb25zIHBhbmVsLlxuICogQmFzZWQgb24gY2RrIGBEaWFsb2dDb25maWdgLlxuICpcbiAqIEBzZWUgYERpYWxvZ0NvbmZpZ2BcbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBLYnFBY3Rpb25zUGFuZWxDb25maWc8RCA9IHVua25vd24+IHtcbiAgICAvKipcbiAgICAgKiBJbmplY3RvciB1c2VkIGZvciB0aGUgaW5zdGFudGlhdGlvbiBvZiB0aGUgY29tcG9uZW50IHRvIGJlIGF0dGFjaGVkLlxuICAgICAqL1xuICAgIGluamVjdG9yPzogSW5qZWN0b3I7XG5cbiAgICAvKipcbiAgICAgKiBEYXRhIGJlaW5nIGluamVjdGVkIGludG8gdGhlIGNoaWxkIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIEBzZWUgYEtCUV9BQ1RJT05TX1BBTkVMX0RBVEFgXG4gICAgICovXG4gICAgZGF0YT86IEQgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBFeHRyYSBDU1MgY2xhc3NlcyB0byBiZSBhZGRlZCB0byB0aGUgYWN0aW9ucyBwYW5lbCBjb250YWluZXIuICovXG4gICAgY29udGFpbmVyQ2xhc3M/OiBzdHJpbmcgfCBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGFjdGlvbnMgcGFuZWwgc2hvdWxkIGJlIGNsb3NlZCBvZiB3aGVuIHRoZSB1c2VyIGdvZXMgYmFja3dhcmRzL2ZvcndhcmRzIGluIGhpc3RvcnkuXG4gICAgICogTk9URSEgVGhpcyBkb2VzIG5vdCBhcHBseSB0byByb3V0ZXIgbmF2aWdhdGlvbi5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBjbG9zZU9uTmF2aWdhdGlvbj86IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogT3ZlcmxheSBjb250YWluZXIgZWxlbWVudCBpbiB3aGljaCB0aGUgYWN0aW9ucyBwYW5lbCBhcmUgcmVuZGVyZWQuXG4gICAgICovXG4gICAgb3ZlcmxheUNvbnRhaW5lcj86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgLyoqXG4gICAgICogRXh0cmEgQ1NTIGNsYXNzZXMgdG8gYmUgYWRkZWQgdG8gdGhlIG92ZXJsYXkgcGFuZWwuXG4gICAgICovXG4gICAgb3ZlcmxheVBhbmVsQ2xhc3M/OiBzdHJpbmcgfCBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIFdpZHRoIG9mIHRoZSBhY3Rpb25zIHBhbmVsLlxuICAgICAqL1xuICAgIHdpZHRoPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogTWluLXdpZHRoIG9mIHRoZSBhY3Rpb25zIHBhbmVsLlxuICAgICAqIElmIGEgbnVtYmVyIGlzIHByb3ZpZGVkLCBhc3N1bWVzIHBpeGVsIHVuaXRzLlxuICAgICAqL1xuICAgIG1pbldpZHRoPzogbnVtYmVyIHwgc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogTWF4LXdpZHRoIG9mIHRoZSBhY3Rpb25zIHBhbmVsLlxuICAgICAqIElmIGEgbnVtYmVyIGlzIHByb3ZpZGVkLCBhc3N1bWVzIHBpeGVsIHVuaXRzLlxuICAgICAqL1xuICAgIG1heFdpZHRoPzogbnVtYmVyIHwgc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogRGlyZWN0aW9uIG9mIHRoZSB0ZXh0IGluIHRoZSBhY3Rpb25zIHBhbmVsLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ2x0cidcbiAgICAgKi9cbiAgICBkaXJlY3Rpb24/OiBEaXJlY3Rpb24gPSAnbHRyJztcblxuICAgIC8qKlxuICAgICAqIFNjcm9sbCBzdHJhdGVneSB0byBiZSB1c2VkIGZvciB0aGUgYWN0aW9ucyBwYW5lbC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGBSZXBvc2l0aW9uU2Nyb2xsU3RyYXRlZ3lgXG4gICAgICovXG4gICAgc2Nyb2xsU3RyYXRlZ3k/OiAob3ZlcmxheTogT3ZlcmxheSkgPT4gU2Nyb2xsU3RyYXRlZ3kgPSAob3ZlcmxheSkgPT4gb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHVzZXIgY2FuIHVzZSBFU0Mgb3IgY2xpY2sgb24gY2xvc2UgYnV0dG9uIHRvIGNsb3NlIHRoZSBhY3Rpb25zIHBhbmVsLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBkaXNhYmxlQ2xvc2U/OiBib29sZWFuID0gZmFsc2U7XG59XG4iXX0=
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { animate, animateChild, group, query, state, style, transition, trigger } from '@angular/animations';
|
|
2
|
+
import { CdkDialogContainer } from '@angular/cdk/dialog';
|
|
3
|
+
import { CdkPortalOutlet } from '@angular/cdk/portal';
|
|
4
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, inject, InjectionToken, Renderer2, ViewEncapsulation } from '@angular/core';
|
|
5
|
+
import { toSignal } from '@angular/core/rxjs-interop';
|
|
6
|
+
import { KbqButtonModule } from '@koobiq/components/button';
|
|
7
|
+
import { KBQ_LOCALE_SERVICE, KbqAnimationCurves, KbqAnimationDurations, ruRULocaleData } from '@koobiq/components/core';
|
|
8
|
+
import { KbqDividerModule } from '@koobiq/components/divider';
|
|
9
|
+
import { KbqIconModule } from '@koobiq/components/icon';
|
|
10
|
+
import { KbqToolTipModule } from '@koobiq/components/tooltip';
|
|
11
|
+
import { map, of } from 'rxjs';
|
|
12
|
+
import { KbqActionsPanel } from './actions-panel';
|
|
13
|
+
import { KbqActionsPanelConfig } from './actions-panel-config';
|
|
14
|
+
import * as i0 from "@angular/core";
|
|
15
|
+
import * as i1 from "@koobiq/components/divider";
|
|
16
|
+
import * as i2 from "@koobiq/components/button";
|
|
17
|
+
import * as i3 from "@koobiq/components/icon";
|
|
18
|
+
import * as i4 from "@koobiq/components/tooltip";
|
|
19
|
+
/** Localization configuration provider. */
|
|
20
|
+
export const KBQ_ACTIONS_PANEL_LOCALE_CONFIGURATION = new InjectionToken('KBQ_ACTIONS_PANEL_LOCALE_CONFIGURATION', { factory: () => ruRULocaleData.actionsPanel });
|
|
21
|
+
/** Utility provider for `KBQ_ACTIONS_PANEL_LOCALE_CONFIGURATION`. */
|
|
22
|
+
export const kbqActionsPanelLocaleConfigurationProvider = (configuration) => ({
|
|
23
|
+
provide: KBQ_ACTIONS_PANEL_LOCALE_CONFIGURATION,
|
|
24
|
+
useValue: configuration
|
|
25
|
+
});
|
|
26
|
+
/**
|
|
27
|
+
* Animation that shows and hides the actions panel.
|
|
28
|
+
*/
|
|
29
|
+
const KBQ_ACTIONS_PANEL_CONTAINER_ANIMATION = trigger('state', [
|
|
30
|
+
state('void, hidden', style({ transform: 'translateY(100%)' })),
|
|
31
|
+
state('visible', style({ transform: 'translateY(0%)' })),
|
|
32
|
+
transition('visible => void, visible => hidden', group([
|
|
33
|
+
animate(`${KbqAnimationDurations.Entering} ${KbqAnimationCurves.StandardCurve}`),
|
|
34
|
+
query('@*', animateChild(), { optional: true })
|
|
35
|
+
])),
|
|
36
|
+
transition('void => visible', group([
|
|
37
|
+
animate(`${KbqAnimationDurations.Exiting} ${KbqAnimationCurves.StandardCurve}`),
|
|
38
|
+
query('@*', animateChild(), { optional: true })
|
|
39
|
+
]))
|
|
40
|
+
]);
|
|
41
|
+
/**
|
|
42
|
+
* Internal component that wraps user-provided actions panel content.
|
|
43
|
+
*
|
|
44
|
+
* @docs-private
|
|
45
|
+
*/
|
|
46
|
+
export class KbqActionsPanelContainer extends CdkDialogContainer {
|
|
47
|
+
constructor() {
|
|
48
|
+
super(...arguments);
|
|
49
|
+
/**
|
|
50
|
+
* The state of the actions panel animations.
|
|
51
|
+
*
|
|
52
|
+
* @docs-private
|
|
53
|
+
*/
|
|
54
|
+
this.animationState = 'void';
|
|
55
|
+
/**
|
|
56
|
+
* Emits whenever the state of the animation changes.
|
|
57
|
+
*
|
|
58
|
+
* @docs-private
|
|
59
|
+
*/
|
|
60
|
+
this.animationStateChanged = new EventEmitter();
|
|
61
|
+
/**
|
|
62
|
+
* Actions panel configuration.
|
|
63
|
+
*
|
|
64
|
+
* @docs-private
|
|
65
|
+
*/
|
|
66
|
+
this.config = inject(KbqActionsPanelConfig);
|
|
67
|
+
this.actionsPanel = inject(KbqActionsPanel);
|
|
68
|
+
this.renderer = inject(Renderer2);
|
|
69
|
+
this.localeService = inject(KBQ_LOCALE_SERVICE, { optional: true });
|
|
70
|
+
/**
|
|
71
|
+
* Actions panel locale configuration.
|
|
72
|
+
*
|
|
73
|
+
* @docs-private
|
|
74
|
+
*/
|
|
75
|
+
this.localeConfiguration = toSignal(this.localeService
|
|
76
|
+
? this.localeService.changes.pipe(map(() => this.localeService.getParams('actionsPanel')))
|
|
77
|
+
: of(inject(KBQ_ACTIONS_PANEL_LOCALE_CONFIGURATION)));
|
|
78
|
+
}
|
|
79
|
+
ngOnDestroy() {
|
|
80
|
+
super.ngOnDestroy();
|
|
81
|
+
this.destroyed = true;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Close the actions panel.
|
|
85
|
+
*
|
|
86
|
+
* @docs-private
|
|
87
|
+
*/
|
|
88
|
+
close() {
|
|
89
|
+
this.actionsPanel.close();
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Start animation of the actions panel entrance into view.
|
|
93
|
+
*
|
|
94
|
+
* @docs-private
|
|
95
|
+
*/
|
|
96
|
+
startOpenAnimation() {
|
|
97
|
+
if (!this.destroyed) {
|
|
98
|
+
this.animationState = 'visible';
|
|
99
|
+
// animationState lives in host bindings and `detectChanges` does not refresh host bindings so we have to
|
|
100
|
+
// call `markForCheck` to ensure the host view is refreshed eventually.
|
|
101
|
+
this._changeDetectorRef.markForCheck();
|
|
102
|
+
this._changeDetectorRef.detectChanges();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Start animation of the actions panel exiting from view.
|
|
107
|
+
*
|
|
108
|
+
* @docs-private
|
|
109
|
+
*/
|
|
110
|
+
startCloseAnimation() {
|
|
111
|
+
if (!this.destroyed) {
|
|
112
|
+
this.animationState = 'hidden';
|
|
113
|
+
this._changeDetectorRef.markForCheck();
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Handles animation done events.
|
|
118
|
+
*
|
|
119
|
+
* @docs-private
|
|
120
|
+
*/
|
|
121
|
+
onAnimationDone(event) {
|
|
122
|
+
if (event.toState === 'visible') {
|
|
123
|
+
this._trapFocus();
|
|
124
|
+
}
|
|
125
|
+
this.animationStateChanged.emit(event);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Handles animation start events.
|
|
129
|
+
*
|
|
130
|
+
* @docs-private
|
|
131
|
+
*/
|
|
132
|
+
onAnimationStart(event) {
|
|
133
|
+
this.animationStateChanged.emit(event);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Handles escape key events.
|
|
137
|
+
*
|
|
138
|
+
* @docs-private
|
|
139
|
+
*/
|
|
140
|
+
handleEscape(event) {
|
|
141
|
+
if (!this.config.disableClose) {
|
|
142
|
+
event.preventDefault();
|
|
143
|
+
this.close();
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* @docs-private
|
|
148
|
+
*/
|
|
149
|
+
_contentAttached() {
|
|
150
|
+
this.applyContainerClass();
|
|
151
|
+
}
|
|
152
|
+
applyContainerClass() {
|
|
153
|
+
const { containerClass } = this.config;
|
|
154
|
+
if (containerClass) {
|
|
155
|
+
if (Array.isArray(containerClass)) {
|
|
156
|
+
containerClass.forEach((cssClass) => this.renderer.addClass(this._elementRef.nativeElement, cssClass));
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
this.renderer.addClass(this._elementRef.nativeElement, containerClass);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KbqActionsPanelContainer, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
164
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.6", type: KbqActionsPanelContainer, isStandalone: true, selector: "kbq-actions-panel-container", host: { listeners: { "@state.start": "onAnimationStart($event)", "@state.done": "onAnimationDone($event)", "keydown.escape": "handleEscape($event)" }, properties: { "class.kbq-actions-panel-container_rtl": "config.direction === \"rtl\"", "@state": "animationState" }, classAttribute: "kbq-actions-panel-container" }, usesInheritance: true, ngImport: i0, template: `
|
|
165
|
+
<div class="kbq-actions-panel-container__content">
|
|
166
|
+
<ng-template cdkPortalOutlet />
|
|
167
|
+
</div>
|
|
168
|
+
@if (!config.disableClose) {
|
|
169
|
+
<kbq-divider class="kbq-actions-panel-container__vertical-divider" [vertical]="true" />
|
|
170
|
+
<button
|
|
171
|
+
class="kbq-actions-panel-container__close-button"
|
|
172
|
+
[kbqTooltip]="localeConfiguration()!.closeTooltip"
|
|
173
|
+
[kbqTooltipOffset]="16"
|
|
174
|
+
(click)="close()"
|
|
175
|
+
color="contrast"
|
|
176
|
+
kbq-button
|
|
177
|
+
>
|
|
178
|
+
<i kbq-icon="kbq-xmark-circle_16"></i>
|
|
179
|
+
</button>
|
|
180
|
+
}
|
|
181
|
+
`, isInline: true, styles: [".kbq-actions-panel-container{--kbq-actions-panel-background-color: var(--kbq-background-contrast);--kbq-actions-panel-text-color: var(--kbq-foreground-on-contrast);--kbq-actions-panel-padding: var(--kbq-size-s);--kbq-actions-panel-margin: var(--kbq-size-s) var(--kbq-size-s) var(--kbq-size-l);--kbq-actions-panel-border-radius: var(--kbq-size-l);--kbq-actions-panel-box-shadow: var(--kbq-shadow-card);--kbq-actions-panel-height: var(--kbq-size-5xl);--kbq-actions-panel-vertical-divider-background-color: var(--kbq-line-contrast-fade);--kbq-actions-panel-vertical-divider-height: var(--kbq-size-m);--kbq-actions-panel-vertical-divider-margin: 0 var(--kbq-size-s)}\n", ".kbq-actions-panel-container{background:var(--kbq-actions-panel-background-color);color:var(--kbq-actions-panel-text-color);box-shadow:var(--kbq-actions-panel-box-shadow);height:var(--kbq-actions-panel-height);padding:var(--kbq-actions-panel-padding);margin:var(--kbq-actions-panel-margin);border-radius:var(--kbq-actions-panel-border-radius);display:flex;flex-grow:1;align-items:center;overflow:hidden;box-sizing:border-box}.kbq-actions-panel-container .kbq-actions-panel-container__content{display:flex;align-items:center;flex-grow:1;overflow:hidden}.kbq-actions-panel-container .kbq-actions-panel-container__vertical-divider{background-color:var(--kbq-actions-panel-vertical-divider-background-color);height:var(--kbq-actions-panel-vertical-divider-height)!important;margin:var(--kbq-actions-panel-vertical-divider-margin)}.kbq-actions-panel-overlay-container{position:relative}\n"], dependencies: [{ kind: "directive", type: CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "ngmodule", type: KbqDividerModule }, { kind: "component", type: i1.KbqDivider, selector: "kbq-divider", inputs: ["vertical", "inset", "paddings"] }, { kind: "ngmodule", type: KbqButtonModule }, { kind: "component", type: i2.KbqButton, selector: "[kbq-button]", inputs: ["color", "tabIndex", "kbqStyle", "disabled"] }, { kind: "directive", type: i2.KbqButtonCssStyler, selector: "[kbq-button]" }, { kind: "ngmodule", type: KbqIconModule }, { kind: "component", type: i3.KbqIcon, selector: "[kbq-icon]", inputs: ["color", "small", "autoColor", "kbq-icon"] }, { kind: "ngmodule", type: KbqToolTipModule }, { kind: "directive", type: i4.KbqTooltipTrigger, selector: "[kbqTooltip]", inputs: ["kbqVisible", "kbqPlacement", "kbqRelativeToPointer", "kbqPlacementPriority", "kbqTooltip", "kbqTooltipDisabled", "kbqEnterDelay", "kbqLeaveDelay", "kbqTrigger", "kbqTooltipClass", "kbqTooltipContext", "kbqTooltipColor", "kbqTooltipArrow", "kbqTooltipOffset"], outputs: ["kbqPlacementChange", "kbqVisibleChange"], exportAs: ["kbqTooltip"] }], animations: [KBQ_ACTIONS_PANEL_CONTAINER_ANIMATION], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None }); }
|
|
182
|
+
}
|
|
183
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KbqActionsPanelContainer, decorators: [{
|
|
184
|
+
type: Component,
|
|
185
|
+
args: [{ standalone: true, imports: [
|
|
186
|
+
CdkPortalOutlet,
|
|
187
|
+
KbqDividerModule,
|
|
188
|
+
KbqButtonModule,
|
|
189
|
+
KbqIconModule,
|
|
190
|
+
KbqToolTipModule
|
|
191
|
+
], selector: 'kbq-actions-panel-container', template: `
|
|
192
|
+
<div class="kbq-actions-panel-container__content">
|
|
193
|
+
<ng-template cdkPortalOutlet />
|
|
194
|
+
</div>
|
|
195
|
+
@if (!config.disableClose) {
|
|
196
|
+
<kbq-divider class="kbq-actions-panel-container__vertical-divider" [vertical]="true" />
|
|
197
|
+
<button
|
|
198
|
+
class="kbq-actions-panel-container__close-button"
|
|
199
|
+
[kbqTooltip]="localeConfiguration()!.closeTooltip"
|
|
200
|
+
[kbqTooltipOffset]="16"
|
|
201
|
+
(click)="close()"
|
|
202
|
+
color="contrast"
|
|
203
|
+
kbq-button
|
|
204
|
+
>
|
|
205
|
+
<i kbq-icon="kbq-xmark-circle_16"></i>
|
|
206
|
+
</button>
|
|
207
|
+
}
|
|
208
|
+
`, animations: [KBQ_ACTIONS_PANEL_CONTAINER_ANIMATION], host: {
|
|
209
|
+
class: 'kbq-actions-panel-container',
|
|
210
|
+
'[class.kbq-actions-panel-container_rtl]': 'config.direction === "rtl"',
|
|
211
|
+
'[@state]': 'animationState',
|
|
212
|
+
'(@state.start)': 'onAnimationStart($event)',
|
|
213
|
+
'(@state.done)': 'onAnimationDone($event)',
|
|
214
|
+
'(keydown.escape)': 'handleEscape($event)'
|
|
215
|
+
}, changeDetection: ChangeDetectionStrategy.Default, encapsulation: ViewEncapsulation.None, styles: [".kbq-actions-panel-container{--kbq-actions-panel-background-color: var(--kbq-background-contrast);--kbq-actions-panel-text-color: var(--kbq-foreground-on-contrast);--kbq-actions-panel-padding: var(--kbq-size-s);--kbq-actions-panel-margin: var(--kbq-size-s) var(--kbq-size-s) var(--kbq-size-l);--kbq-actions-panel-border-radius: var(--kbq-size-l);--kbq-actions-panel-box-shadow: var(--kbq-shadow-card);--kbq-actions-panel-height: var(--kbq-size-5xl);--kbq-actions-panel-vertical-divider-background-color: var(--kbq-line-contrast-fade);--kbq-actions-panel-vertical-divider-height: var(--kbq-size-m);--kbq-actions-panel-vertical-divider-margin: 0 var(--kbq-size-s)}\n", ".kbq-actions-panel-container{background:var(--kbq-actions-panel-background-color);color:var(--kbq-actions-panel-text-color);box-shadow:var(--kbq-actions-panel-box-shadow);height:var(--kbq-actions-panel-height);padding:var(--kbq-actions-panel-padding);margin:var(--kbq-actions-panel-margin);border-radius:var(--kbq-actions-panel-border-radius);display:flex;flex-grow:1;align-items:center;overflow:hidden;box-sizing:border-box}.kbq-actions-panel-container .kbq-actions-panel-container__content{display:flex;align-items:center;flex-grow:1;overflow:hidden}.kbq-actions-panel-container .kbq-actions-panel-container__vertical-divider{background-color:var(--kbq-actions-panel-vertical-divider-background-color);height:var(--kbq-actions-panel-vertical-divider-height)!important;margin:var(--kbq-actions-panel-vertical-divider-margin)}.kbq-actions-panel-overlay-container{position:relative}\n"] }]
|
|
216
|
+
}] });
|
|
217
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy1wYW5lbC1jb250YWluZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL2FjdGlvbnMtcGFuZWwvYWN0aW9ucy1wYW5lbC1jb250YWluZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILE9BQU8sRUFDUCxZQUFZLEVBRVosS0FBSyxFQUNMLEtBQUssRUFDTCxLQUFLLEVBQ0wsS0FBSyxFQUNMLFVBQVUsRUFDVixPQUFPLEVBQ1YsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixjQUFjLEVBR2QsU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFDSCxrQkFBa0IsRUFFbEIsa0JBQWtCLEVBQ2xCLHFCQUFxQixFQUNyQixjQUFjLEVBQ2pCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUscUJBQXFC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ZCxcbiAgICBBbmltYXRpb25FdmVudCxcbiAgICBncm91cCxcbiAgICBxdWVyeSxcbiAgICBzdGF0ZSxcbiAgICBzdHlsZSxcbiAgICB0cmFuc2l0aW9uLFxuICAgIHRyaWdnZXJcbn0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBDZGtEaWFsb2dDb250YWluZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvZGlhbG9nJztcbmltcG9ydCB7IENka1BvcnRhbE91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGluamVjdCxcbiAgICBJbmplY3Rpb25Ub2tlbixcbiAgICBPbkRlc3Ryb3ksXG4gICAgUHJvdmlkZXIsXG4gICAgUmVuZGVyZXIyLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBLYnFCdXR0b25Nb2R1bGUgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7XG4gICAgS0JRX0xPQ0FMRV9TRVJWSUNFLFxuICAgIEticUFjdGlvbnNQYW5lbExvY2FsZUNvbmZpZ3VyYXRpb24sXG4gICAgS2JxQW5pbWF0aW9uQ3VydmVzLFxuICAgIEticUFuaW1hdGlvbkR1cmF0aW9ucyxcbiAgICBydVJVTG9jYWxlRGF0YVxufSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvY29yZSc7XG5pbXBvcnQgeyBLYnFEaXZpZGVyTW9kdWxlIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2RpdmlkZXInO1xuaW1wb3J0IHsgS2JxSWNvbk1vZHVsZSB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9pY29uJztcbmltcG9ydCB7IEticVRvb2xUaXBNb2R1bGUgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvdG9vbHRpcCc7XG5pbXBvcnQgeyBtYXAsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBLYnFBY3Rpb25zUGFuZWwgfSBmcm9tICcuL2FjdGlvbnMtcGFuZWwnO1xuaW1wb3J0IHsgS2JxQWN0aW9uc1BhbmVsQ29uZmlnIH0gZnJvbSAnLi9hY3Rpb25zLXBhbmVsLWNvbmZpZyc7XG5cbi8qKiBMb2NhbGl6YXRpb24gY29uZmlndXJhdGlvbiBwcm92aWRlci4gKi9cbmV4cG9ydCBjb25zdCBLQlFfQUNUSU9OU19QQU5FTF9MT0NBTEVfQ09ORklHVVJBVElPTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxLYnFBY3Rpb25zUGFuZWxMb2NhbGVDb25maWd1cmF0aW9uPihcbiAgICAnS0JRX0FDVElPTlNfUEFORUxfTE9DQUxFX0NPTkZJR1VSQVRJT04nLFxuICAgIHsgZmFjdG9yeTogKCkgPT4gcnVSVUxvY2FsZURhdGEuYWN0aW9uc1BhbmVsIH1cbik7XG5cbi8qKiBVdGlsaXR5IHByb3ZpZGVyIGZvciBgS0JRX0FDVElPTlNfUEFORUxfTE9DQUxFX0NPTkZJR1VSQVRJT05gLiAqL1xuZXhwb3J0IGNvbnN0IGticUFjdGlvbnNQYW5lbExvY2FsZUNvbmZpZ3VyYXRpb25Qcm92aWRlciA9IChcbiAgICBjb25maWd1cmF0aW9uOiBLYnFBY3Rpb25zUGFuZWxMb2NhbGVDb25maWd1cmF0aW9uXG4pOiBQcm92aWRlciA9PiAoe1xuICAgIHByb3ZpZGU6IEtCUV9BQ1RJT05TX1BBTkVMX0xPQ0FMRV9DT05GSUdVUkFUSU9OLFxuICAgIHVzZVZhbHVlOiBjb25maWd1cmF0aW9uXG59KTtcblxuLyoqXG4gKiBBbmltYXRpb24gdGhhdCBzaG93cyBhbmQgaGlkZXMgdGhlIGFjdGlvbnMgcGFuZWwuXG4gKi9cbmNvbnN0IEtCUV9BQ1RJT05TX1BBTkVMX0NPTlRBSU5FUl9BTklNQVRJT04gPSB0cmlnZ2VyKCdzdGF0ZScsIFtcbiAgICBzdGF0ZSgndm9pZCwgaGlkZGVuJywgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDEwMCUpJyB9KSksXG4gICAgc3RhdGUoJ3Zpc2libGUnLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCUpJyB9KSksXG4gICAgdHJhbnNpdGlvbihcbiAgICAgICAgJ3Zpc2libGUgPT4gdm9pZCwgdmlzaWJsZSA9PiBoaWRkZW4nLFxuICAgICAgICBncm91cChbXG4gICAgICAgICAgICBhbmltYXRlKGAke0ticUFuaW1hdGlvbkR1cmF0aW9ucy5FbnRlcmluZ30gJHtLYnFBbmltYXRpb25DdXJ2ZXMuU3RhbmRhcmRDdXJ2ZX1gKSxcbiAgICAgICAgICAgIHF1ZXJ5KCdAKicsIGFuaW1hdGVDaGlsZCgpLCB7IG9wdGlvbmFsOiB0cnVlIH0pXG4gICAgICAgIF0pXG4gICAgKSxcbiAgICB0cmFuc2l0aW9uKFxuICAgICAgICAndm9pZCA9PiB2aXNpYmxlJyxcbiAgICAgICAgZ3JvdXAoW1xuICAgICAgICAgICAgYW5pbWF0ZShgJHtLYnFBbmltYXRpb25EdXJhdGlvbnMuRXhpdGluZ30gJHtLYnFBbmltYXRpb25DdXJ2ZXMuU3RhbmRhcmRDdXJ2ZX1gKSxcbiAgICAgICAgICAgIHF1ZXJ5KCdAKicsIGFuaW1hdGVDaGlsZCgpLCB7IG9wdGlvbmFsOiB0cnVlIH0pXG4gICAgICAgIF0pXG4gICAgKVxuXSk7XG5cbi8qKlxuICogSW50ZXJuYWwgY29tcG9uZW50IHRoYXQgd3JhcHMgdXNlci1wcm92aWRlZCBhY3Rpb25zIHBhbmVsIGNvbnRlbnQuXG4gKlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ2RrUG9ydGFsT3V0bGV0LFxuICAgICAgICBLYnFEaXZpZGVyTW9kdWxlLFxuICAgICAgICBLYnFCdXR0b25Nb2R1bGUsXG4gICAgICAgIEticUljb25Nb2R1bGUsXG4gICAgICAgIEticVRvb2xUaXBNb2R1bGVcbiAgICBdLFxuICAgIHNlbGVjdG9yOiAna2JxLWFjdGlvbnMtcGFuZWwtY29udGFpbmVyJyxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8ZGl2IGNsYXNzPVwia2JxLWFjdGlvbnMtcGFuZWwtY29udGFpbmVyX19jb250ZW50XCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgY2RrUG9ydGFsT3V0bGV0IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBAaWYgKCFjb25maWcuZGlzYWJsZUNsb3NlKSB7XG4gICAgICAgICAgICA8a2JxLWRpdmlkZXIgY2xhc3M9XCJrYnEtYWN0aW9ucy1wYW5lbC1jb250YWluZXJfX3ZlcnRpY2FsLWRpdmlkZXJcIiBbdmVydGljYWxdPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJrYnEtYWN0aW9ucy1wYW5lbC1jb250YWluZXJfX2Nsb3NlLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgW2ticVRvb2x0aXBdPVwibG9jYWxlQ29uZmlndXJhdGlvbigpIS5jbG9zZVRvb2x0aXBcIlxuICAgICAgICAgICAgICAgIFtrYnFUb29sdGlwT2Zmc2V0XT1cIjE2XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xvc2UoKVwiXG4gICAgICAgICAgICAgICAgY29sb3I9XCJjb250cmFzdFwiXG4gICAgICAgICAgICAgICAga2JxLWJ1dHRvblxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGticS1pY29uPVwia2JxLXhtYXJrLWNpcmNsZV8xNlwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgYCxcbiAgICBzdHlsZVVybHM6IFtcbiAgICAgICAgJy4vYWN0aW9ucy1wYW5lbC10b2tlbnMuc2NzcycsXG4gICAgICAgICcuL2FjdGlvbnMtcGFuZWwtY29udGFpbmVyLnNjc3MnXG4gICAgXSxcbiAgICBhbmltYXRpb25zOiBbS0JRX0FDVElPTlNfUEFORUxfQ09OVEFJTkVSX0FOSU1BVElPTl0sXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2ticS1hY3Rpb25zLXBhbmVsLWNvbnRhaW5lcicsXG4gICAgICAgICdbY2xhc3Mua2JxLWFjdGlvbnMtcGFuZWwtY29udGFpbmVyX3J0bF0nOiAnY29uZmlnLmRpcmVjdGlvbiA9PT0gXCJydGxcIicsXG4gICAgICAgICdbQHN0YXRlXSc6ICdhbmltYXRpb25TdGF0ZScsXG4gICAgICAgICcoQHN0YXRlLnN0YXJ0KSc6ICdvbkFuaW1hdGlvblN0YXJ0KCRldmVudCknLFxuICAgICAgICAnKEBzdGF0ZS5kb25lKSc6ICdvbkFuaW1hdGlvbkRvbmUoJGV2ZW50KScsXG4gICAgICAgICcoa2V5ZG93bi5lc2NhcGUpJzogJ2hhbmRsZUVzY2FwZSgkZXZlbnQpJ1xuICAgIH0sXG4gICAgLy8gVXNlcyB0aGUgYERlZmF1bHRgIGNoYW5nZSBkZXRlY3Rpb24gc3RyYXRlZ3kgYXMgcGFyZW50IGBDZGtEaWFsb2dDb250YWluZXJgOlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvYmxvYi8xOC4yLjE0L3NyYy9jZGsvZGlhbG9nL2RpYWxvZy1jb250YWluZXIudHMjTDYwXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5EZWZhdWx0LFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgS2JxQWN0aW9uc1BhbmVsQ29udGFpbmVyIGV4dGVuZHMgQ2RrRGlhbG9nQ29udGFpbmVyIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RhdGUgb2YgdGhlIGFjdGlvbnMgcGFuZWwgYW5pbWF0aW9ucy5cbiAgICAgKlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYW5pbWF0aW9uU3RhdGU6ICd2b2lkJyB8ICd2aXNpYmxlJyB8ICdoaWRkZW4nID0gJ3ZvaWQnO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgd2hlbmV2ZXIgdGhlIHN0YXRlIG9mIHRoZSBhbmltYXRpb24gY2hhbmdlcy5cbiAgICAgKlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICByZWFkb25seSBhbmltYXRpb25TdGF0ZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEFuaW1hdGlvbkV2ZW50PigpO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGFjdGlvbnMgcGFuZWwgY29udGFpbmVyIGhhcyBiZWVuIGRlc3Ryb3llZC4gKi9cbiAgICBwcml2YXRlIGRlc3Ryb3llZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEFjdGlvbnMgcGFuZWwgY29uZmlndXJhdGlvbi5cbiAgICAgKlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29uZmlnID0gaW5qZWN0KEticUFjdGlvbnNQYW5lbENvbmZpZyk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGFjdGlvbnNQYW5lbCA9IGluamVjdChLYnFBY3Rpb25zUGFuZWwpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsZVNlcnZpY2UgPSBpbmplY3QoS0JRX0xPQ0FMRV9TRVJWSUNFLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gICAgLyoqXG4gICAgICogQWN0aW9ucyBwYW5lbCBsb2NhbGUgY29uZmlndXJhdGlvbi5cbiAgICAgKlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbG9jYWxlQ29uZmlndXJhdGlvbiA9IHRvU2lnbmFsPEticUFjdGlvbnNQYW5lbExvY2FsZUNvbmZpZ3VyYXRpb24+KFxuICAgICAgICB0aGlzLmxvY2FsZVNlcnZpY2VcbiAgICAgICAgICAgID8gdGhpcy5sb2NhbGVTZXJ2aWNlLmNoYW5nZXMucGlwZShtYXAoKCkgPT4gdGhpcy5sb2NhbGVTZXJ2aWNlIS5nZXRQYXJhbXMoJ2FjdGlvbnNQYW5lbCcpKSlcbiAgICAgICAgICAgIDogb2YoaW5qZWN0KEtCUV9BQ1RJT05TX1BBTkVMX0xPQ0FMRV9DT05GSUdVUkFUSU9OKSlcbiAgICApO1xuXG4gICAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbG9zZSB0aGUgYWN0aW9ucyBwYW5lbC5cbiAgICAgKlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY2xvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWN0aW9uc1BhbmVsLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3RhcnQgYW5pbWF0aW9uIG9mIHRoZSBhY3Rpb25zIHBhbmVsIGVudHJhbmNlIGludG8gdmlldy5cbiAgICAgKlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBzdGFydE9wZW5BbmltYXRpb24oKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uU3RhdGUgPSAndmlzaWJsZSc7XG4gICAgICAgICAgICAvLyBhbmltYXRpb25TdGF0ZSBsaXZlcyBpbiBob3N0IGJpbmRpbmdzIGFuZCBgZGV0ZWN0Q2hhbmdlc2AgZG9lcyBub3QgcmVmcmVzaCBob3N0IGJpbmRpbmdzICBzbyB3ZSBoYXZlIHRvXG4gICAgICAgICAgICAvLyBjYWxsIGBtYXJrRm9yQ2hlY2tgIHRvIGVuc3VyZSB0aGUgaG9zdCB2aWV3IGlzIHJlZnJlc2hlZCBldmVudHVhbGx5LlxuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdGFydCBhbmltYXRpb24gb2YgdGhlIGFjdGlvbnMgcGFuZWwgZXhpdGluZyBmcm9tIHZpZXcuXG4gICAgICpcbiAgICAgKiBAZG9jcy1wcml2YXRlXG4gICAgICovXG4gICAgc3RhcnRDbG9zZUFuaW1hdGlvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgdGhpcy5hbmltYXRpb25TdGF0ZSA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIGFuaW1hdGlvbiBkb25lIGV2ZW50cy5cbiAgICAgKlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb25BbmltYXRpb25Eb25lKGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQudG9TdGF0ZSA9PT0gJ3Zpc2libGUnKSB7XG4gICAgICAgICAgICB0aGlzLl90cmFwRm9jdXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgYW5pbWF0aW9uIHN0YXJ0IGV2ZW50cy5cbiAgICAgKlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb25BbmltYXRpb25TdGFydChldmVudDogQW5pbWF0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hbmltYXRpb25TdGF0ZUNoYW5nZWQuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyBlc2NhcGUga2V5IGV2ZW50cy5cbiAgICAgKlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgaGFuZGxlRXNjYXBlKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jb25maWcuZGlzYWJsZUNsb3NlKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRvY3MtcHJpdmF0ZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBvdmVycmlkZSBfY29udGVudEF0dGFjaGVkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFwcGx5Q29udGFpbmVyQ2xhc3MoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFwcGx5Q29udGFpbmVyQ2xhc3MoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgY29udGFpbmVyQ2xhc3MgfSA9IHRoaXMuY29uZmlnO1xuICAgICAgICBpZiAoY29udGFpbmVyQ2xhc3MpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbnRhaW5lckNsYXNzKSkge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lckNsYXNzLmZvckVhY2goKGNzc0NsYXNzKSA9PiB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgY3NzQ2xhc3MpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIGNvbnRhaW5lckNsYXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { filter, Subject, take } from 'rxjs';
|
|
2
|
+
/**
|
|
3
|
+
* Reference to actions panel opened by `KbqActionsPanel` service.
|
|
4
|
+
*/
|
|
5
|
+
export class KbqActionsPanelRef {
|
|
6
|
+
/** Gets an observable that is notified when the actions panel is finished closing. */
|
|
7
|
+
get afterClosed() {
|
|
8
|
+
return this.dialogRef.closed;
|
|
9
|
+
}
|
|
10
|
+
/** Gets an observable that emits when keydown events are targeted on the overlay. */
|
|
11
|
+
get keydownEvents() {
|
|
12
|
+
return this.dialogRef.keydownEvents;
|
|
13
|
+
}
|
|
14
|
+
/** Gets an observable that is notified when the actions panel has opened and appeared. */
|
|
15
|
+
get afterOpened() {
|
|
16
|
+
return this._afterOpened;
|
|
17
|
+
}
|
|
18
|
+
constructor(dialogRef, containerInstance) {
|
|
19
|
+
this.dialogRef = dialogRef;
|
|
20
|
+
this._afterOpened = new Subject();
|
|
21
|
+
this.containerInstance = containerInstance;
|
|
22
|
+
this.handleAnimation();
|
|
23
|
+
this.handleOverlayDetachments();
|
|
24
|
+
}
|
|
25
|
+
/** Closes the actions panel. */
|
|
26
|
+
close(result) {
|
|
27
|
+
if (!this.containerInstance) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
this.containerInstance.animationStateChanged
|
|
31
|
+
.pipe(filter((event) => event.phaseName === 'start'), take(1))
|
|
32
|
+
.subscribe(({ totalTime }) => {
|
|
33
|
+
this.closeAnimationFallbackTimeout = setTimeout(() => this.dialogRef.close(this.result), totalTime + 100);
|
|
34
|
+
});
|
|
35
|
+
this.result = result;
|
|
36
|
+
this.containerInstance.startCloseAnimation();
|
|
37
|
+
this.containerInstance = null;
|
|
38
|
+
}
|
|
39
|
+
handleAnimation() {
|
|
40
|
+
this.containerInstance.animationStateChanged
|
|
41
|
+
.pipe(filter((event) => event.phaseName === 'done' && event.toState === 'visible'), take(1))
|
|
42
|
+
.subscribe(() => {
|
|
43
|
+
this._afterOpened.next();
|
|
44
|
+
this._afterOpened.complete();
|
|
45
|
+
});
|
|
46
|
+
this.containerInstance.animationStateChanged
|
|
47
|
+
.pipe(filter((event) => event.phaseName === 'done' && event.toState === 'hidden'), take(1))
|
|
48
|
+
.subscribe(() => {
|
|
49
|
+
clearTimeout(this.closeAnimationFallbackTimeout);
|
|
50
|
+
this.dialogRef.close(this.result);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
handleOverlayDetachments() {
|
|
54
|
+
this.dialogRef.overlayRef
|
|
55
|
+
.detachments()
|
|
56
|
+
.pipe(take(1))
|
|
57
|
+
.subscribe(() => {
|
|
58
|
+
this.dialogRef.close(this.result);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy1wYW5lbC1yZWYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL2FjdGlvbnMtcGFuZWwvYWN0aW9ucy1wYW5lbC1yZWYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBYyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3pEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGtCQUFrQjtJQVEzQixzRkFBc0Y7SUFDdEYsSUFBSSxXQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztJQUNqQyxDQUFDO0lBRUQscUZBQXFGO0lBQ3JGLElBQUksYUFBYTtRQUNiLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUM7SUFDeEMsQ0FBQztJQUVELDBGQUEwRjtJQUMxRixJQUFJLFdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDN0IsQ0FBQztJQVVELFlBQ3FCLFNBQTBCLEVBQzNDLGlCQUEyQztRQUQxQixjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQVQ5QixpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFZaEQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO1FBQzNDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsZ0NBQWdDO0lBQ2hDLEtBQUssQ0FBQyxNQUFVO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzFCLE9BQU87UUFDWCxDQUFDO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHFCQUFxQjthQUN2QyxJQUFJLENBQ0QsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxLQUFLLE9BQU8sQ0FBQyxFQUM5QyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQ1Y7YUFDQSxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7WUFDekIsSUFBSSxDQUFDLDZCQUE2QixHQUFHLFVBQVUsQ0FDM0MsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUN2QyxTQUFTLEdBQUcsR0FBRyxDQUNsQixDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7UUFFUCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSyxDQUFDO0lBQ25DLENBQUM7SUFFTyxlQUFlO1FBQ25CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUI7YUFDdkMsSUFBSSxDQUNELE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsS0FBSyxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUMsRUFDNUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNWO2FBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztRQUVQLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUI7YUFDdkMsSUFBSSxDQUNELE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsS0FBSyxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxRQUFRLENBQUMsRUFDM0UsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNWO2FBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNaLFlBQVksQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRU8sd0JBQXdCO1FBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVTthQUNwQixXQUFXLEVBQUU7YUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2IsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kaWFsb2cnO1xuaW1wb3J0IHsgZmlsdGVyLCBPYnNlcnZhYmxlLCBTdWJqZWN0LCB0YWtlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBLYnFBY3Rpb25zUGFuZWxDb250YWluZXIgfSBmcm9tICcuL2FjdGlvbnMtcGFuZWwtY29udGFpbmVyJztcblxuLyoqXG4gKiBSZWZlcmVuY2UgdG8gYWN0aW9ucyBwYW5lbCBvcGVuZWQgYnkgYEticUFjdGlvbnNQYW5lbGAgc2VydmljZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEticUFjdGlvbnNQYW5lbFJlZjxJID0gdW5rbm93biwgUiA9IHVua25vd24+IHtcbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiB0aGUgY29tcG9uZW50IGludG8gd2hpY2ggdGhlIGFjdGlvbnMgcGFuZWwgY29udGVudCBpcyBwcm9qZWN0ZWQuXG4gICAgICpcbiAgICAgKiBAZG9jcy1wcml2YXRlXG4gICAgICovXG4gICAgY29udGFpbmVySW5zdGFuY2U6IEticUFjdGlvbnNQYW5lbENvbnRhaW5lcjtcblxuICAgIC8qKiBHZXRzIGFuIG9ic2VydmFibGUgdGhhdCBpcyBub3RpZmllZCB3aGVuIHRoZSBhY3Rpb25zIHBhbmVsIGlzIGZpbmlzaGVkIGNsb3NpbmcuICovXG4gICAgZ2V0IGFmdGVyQ2xvc2VkKCk6IE9ic2VydmFibGU8UiB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kaWFsb2dSZWYuY2xvc2VkO1xuICAgIH1cblxuICAgIC8qKiBHZXRzIGFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB3aGVuIGtleWRvd24gZXZlbnRzIGFyZSB0YXJnZXRlZCBvbiB0aGUgb3ZlcmxheS4gKi9cbiAgICBnZXQga2V5ZG93bkV2ZW50cygpOiBPYnNlcnZhYmxlPEtleWJvYXJkRXZlbnQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlhbG9nUmVmLmtleWRvd25FdmVudHM7XG4gICAgfVxuXG4gICAgLyoqIEdldHMgYW4gb2JzZXJ2YWJsZSB0aGF0IGlzIG5vdGlmaWVkIHdoZW4gdGhlIGFjdGlvbnMgcGFuZWwgaGFzIG9wZW5lZCBhbmQgYXBwZWFyZWQuICovXG4gICAgZ2V0IGFmdGVyT3BlbmVkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWZ0ZXJPcGVuZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfYWZ0ZXJPcGVuZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIFJlc3VsdCB0byBiZSBwYXNzZWQgZG93biB0byB0aGUgYGFmdGVyQ2xvc2VkYCBzdHJlYW0uICovXG4gICAgcHJpdmF0ZSByZXN1bHQ6IFIgfCB1bmRlZmluZWQ7XG5cbiAgICAvKiogSGFuZGxlIHRvIHRoZSB0aW1lb3V0IHRoYXQncyBydW5uaW5nIGFzIGEgZmFsbGJhY2sgaW4gY2FzZSB0aGUgY2xvc2UgYW5pbWF0aW9uIGRvZXNuJ3QgZmlyZS4gKi9cbiAgICBwcml2YXRlIGNsb3NlQW5pbWF0aW9uRmFsbGJhY2tUaW1lb3V0OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZ1JlZjogRGlhbG9nUmVmPFIsIEk+LFxuICAgICAgICBjb250YWluZXJJbnN0YW5jZTogS2JxQWN0aW9uc1BhbmVsQ29udGFpbmVyXG4gICAgKSB7XG4gICAgICAgIHRoaXMuY29udGFpbmVySW5zdGFuY2UgPSBjb250YWluZXJJbnN0YW5jZTtcbiAgICAgICAgdGhpcy5oYW5kbGVBbmltYXRpb24oKTtcbiAgICAgICAgdGhpcy5oYW5kbGVPdmVybGF5RGV0YWNobWVudHMoKTtcbiAgICB9XG5cbiAgICAvKiogQ2xvc2VzIHRoZSBhY3Rpb25zIHBhbmVsLiAqL1xuICAgIGNsb3NlKHJlc3VsdD86IFIpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRhaW5lckluc3RhbmNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbnRhaW5lckluc3RhbmNlLmFuaW1hdGlvblN0YXRlQ2hhbmdlZFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKChldmVudCkgPT4gZXZlbnQucGhhc2VOYW1lID09PSAnc3RhcnQnKSxcbiAgICAgICAgICAgICAgICB0YWtlKDEpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IHRvdGFsVGltZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZUFuaW1hdGlvbkZhbGxiYWNrVGltZW91dCA9IHNldFRpbWVvdXQoXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRoaXMucmVzdWx0KSxcbiAgICAgICAgICAgICAgICAgICAgdG90YWxUaW1lICsgMTAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICB0aGlzLmNvbnRhaW5lckluc3RhbmNlLnN0YXJ0Q2xvc2VBbmltYXRpb24oKTtcbiAgICAgICAgdGhpcy5jb250YWluZXJJbnN0YW5jZSA9IG51bGwhO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQW5pbWF0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRhaW5lckluc3RhbmNlLmFuaW1hdGlvblN0YXRlQ2hhbmdlZFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKChldmVudCkgPT4gZXZlbnQucGhhc2VOYW1lID09PSAnZG9uZScgJiYgZXZlbnQudG9TdGF0ZSA9PT0gJ3Zpc2libGUnKSxcbiAgICAgICAgICAgICAgICB0YWtlKDEpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZnRlck9wZW5lZC5uZXh0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWZ0ZXJPcGVuZWQuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuY29udGFpbmVySW5zdGFuY2UuYW5pbWF0aW9uU3RhdGVDaGFuZ2VkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiBldmVudC5waGFzZU5hbWUgPT09ICdkb25lJyAmJiBldmVudC50b1N0YXRlID09PSAnaGlkZGVuJyksXG4gICAgICAgICAgICAgICAgdGFrZSgxKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuY2xvc2VBbmltYXRpb25GYWxsYmFja1RpbWVvdXQpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRoaXMucmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlT3ZlcmxheURldGFjaG1lbnRzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5vdmVybGF5UmVmXG4gICAgICAgICAgICAuZGV0YWNobWVudHMoKVxuICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRoaXMucmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
|