@fundamental-ngx/cdk 0.54.2-rc.9 → 0.55.0-rc.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/fesm2022/fundamental-ngx-cdk-data-source.mjs +7 -7
- package/fesm2022/fundamental-ngx-cdk-forms.mjs +21 -14
- package/fesm2022/fundamental-ngx-cdk-forms.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-cdk-utils.mjs +361 -312
- package/fesm2022/fundamental-ngx-cdk-utils.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-cdk.mjs +4 -4
- package/forms/cva/cva.directive.d.ts +7 -3
- package/package.json +8 -16
- package/utils/abstract-fd-ngx-class.d.ts +1 -1
- package/utils/directives/overflow-list/overflow-list.directive.d.ts +7 -0
- package/utils/drag-and-drop/dnd-item/dnd-item.directive.d.ts +1 -1
- package/utils/drag-and-drop/dnd-keyboard-group/dnd-keyboard-group.directive.d.ts +1 -1
- package/utils/drag-and-drop/dnd-keyboard-item/dnd-keyboard-item.directive.d.ts +1 -1
- package/utils/drag-and-drop/dnd-list/dnd-list.directive.d.ts +1 -1
- package/utils/drag-and-drop/drag-and-drop.module.d.ts +7 -7
- package/utils/toast/base-toast-positions.d.ts +16 -16
- package/utils/toast/classes/base-toast-animated-container.component.d.ts +1 -1
- package/utils/toast/classes/base-toast-container.component.d.ts +1 -1
- package/utils/toast/classes/duration-dismissible/base-toast-duration-dismissible-container.component.d.ts +1 -1
- package/esm2022/data-source/base/abstract-data-provider.class.mjs +0 -142
- package/esm2022/data-source/base/base-data-source.class.mjs +0 -112
- package/esm2022/data-source/data-source.directive.mjs +0 -95
- package/esm2022/data-source/data-source.module.mjs +0 -16
- package/esm2022/data-source/fundamental-ngx-cdk-data-source.mjs +0 -5
- package/esm2022/data-source/helpers/apply-datasource-directive.mjs +0 -7
- package/esm2022/data-source/helpers/common.mjs +0 -17
- package/esm2022/data-source/helpers/is-datasource.mjs +0 -7
- package/esm2022/data-source/index.mjs +0 -9
- package/esm2022/data-source/models/data-source-provider.mjs +0 -2
- package/esm2022/data-source/models/data-source.mjs +0 -2
- package/esm2022/data-source/models/index.mjs +0 -4
- package/esm2022/data-source/models/matching-strategy.mjs +0 -7
- package/esm2022/data-source/tokens.mjs +0 -6
- package/esm2022/forms/cva/cva-control.class.mjs +0 -42
- package/esm2022/forms/cva/cva.directive.mjs +0 -321
- package/esm2022/forms/forms.module.mjs +0 -16
- package/esm2022/forms/fundamental-ngx-cdk-forms.mjs +0 -5
- package/esm2022/forms/helpers/state.mjs +0 -7
- package/esm2022/forms/index.mjs +0 -13
- package/esm2022/forms/models/control-type.model.mjs +0 -2
- package/esm2022/forms/models/cva.mjs +0 -2
- package/esm2022/forms/models/form-error.mjs +0 -2
- package/esm2022/forms/models/form-field.mjs +0 -9
- package/esm2022/forms/models/form-state.mjs +0 -2
- package/esm2022/forms/models/select-item.mjs +0 -14
- package/esm2022/forms/tokens/form-field-control.token.mjs +0 -3
- package/esm2022/forms/tokens/form-field.token.mjs +0 -3
- package/esm2022/fundamental-ngx-cdk.mjs +0 -5
- package/esm2022/fundamental-ngx.module.mjs +0 -19
- package/esm2022/index.mjs +0 -5
- package/esm2022/utils/abstract-fd-ngx-class.mjs +0 -61
- package/esm2022/utils/async-strategy/function-strategy.class.mjs +0 -12
- package/esm2022/utils/async-strategy/index.mjs +0 -7
- package/esm2022/utils/async-strategy/observable-strategy.class.mjs +0 -13
- package/esm2022/utils/async-strategy/promise-strategy.class.mjs +0 -12
- package/esm2022/utils/async-strategy/select-strategy.class.mjs +0 -23
- package/esm2022/utils/async-strategy/subscription-strategy.interface.mjs +0 -2
- package/esm2022/utils/async-strategy/value-strategy.class.mjs +0 -10
- package/esm2022/utils/coercion/array.mjs +0 -7
- package/esm2022/utils/components/dynamic-portal/dynamic-portal.component.mjs +0 -98
- package/esm2022/utils/components/index.mjs +0 -2
- package/esm2022/utils/consts/error-messages.mjs +0 -6
- package/esm2022/utils/consts/index.mjs +0 -5
- package/esm2022/utils/consts/overflow-priority-score.mjs +0 -8
- package/esm2022/utils/consts/unicode-letters.regex.mjs +0 -11
- package/esm2022/utils/consts/unicode-numbers.regex.mjs +0 -8
- package/esm2022/utils/datatypes/color-accent.datatype.mjs +0 -2
- package/esm2022/utils/datatypes/hash.datatype.mjs +0 -2
- package/esm2022/utils/datatypes/index.mjs +0 -5
- package/esm2022/utils/datatypes/object-nesting.types.mjs +0 -2
- package/esm2022/utils/datatypes/size.datatype.mjs +0 -2
- package/esm2022/utils/decorators/apply-css-class.decorator.mjs +0 -61
- package/esm2022/utils/decorators/apply-css-style.decorator.mjs +0 -26
- package/esm2022/utils/decorators/coerce-boolean.mjs +0 -7
- package/esm2022/utils/decorators/coerce-css-pixel.mjs +0 -4
- package/esm2022/utils/decorators/index.mjs +0 -6
- package/esm2022/utils/decorators/setter-alternator.mjs +0 -18
- package/esm2022/utils/deprecated-selector.class.mjs +0 -35
- package/esm2022/utils/directives/auto-complete/auto-complete.directive.mjs +0 -135
- package/esm2022/utils/directives/auto-complete/auto-complete.module.mjs +0 -17
- package/esm2022/utils/directives/breakpoints/breakpoint.directive.mjs +0 -156
- package/esm2022/utils/directives/breakpoints/responsive-breakpoints.mjs +0 -19
- package/esm2022/utils/directives/clicked/clicked-behavior.module.mjs +0 -35
- package/esm2022/utils/directives/clicked/clicked-event.plugin.mjs +0 -79
- package/esm2022/utils/directives/clicked/clicked.directive.mjs +0 -36
- package/esm2022/utils/directives/clicked/element-click.observable.mjs +0 -21
- package/esm2022/utils/directives/clicked/fdk-clicked-provider.service.mjs +0 -48
- package/esm2022/utils/directives/clicked/index.mjs +0 -6
- package/esm2022/utils/directives/clicked/provide-fdk-clicked.mjs +0 -29
- package/esm2022/utils/directives/disabled/default-disabled-view-modifier.mjs +0 -12
- package/esm2022/utils/directives/disabled/disabled-behavior.directive.mjs +0 -84
- package/esm2022/utils/directives/disabled/disabled-behavior.interface.mjs +0 -2
- package/esm2022/utils/directives/disabled/disabled-behavior.module.mjs +0 -16
- package/esm2022/utils/directives/disabled/disabled-view-modifier.interface.mjs +0 -2
- package/esm2022/utils/directives/disabled/disabled.observer.mjs +0 -35
- package/esm2022/utils/directives/disabled/fdk-disabled-provider.service.mjs +0 -101
- package/esm2022/utils/directives/disabled/fdk-disabled.token.mjs +0 -3
- package/esm2022/utils/directives/disabled/index.mjs +0 -9
- package/esm2022/utils/directives/disabled/set-disabled-state.mjs +0 -18
- package/esm2022/utils/directives/focus-key-manager/focus-key-manager-helpers.module.mjs +0 -17
- package/esm2022/utils/directives/focus-key-manager/focus-key-manager-item.directive.mjs +0 -67
- package/esm2022/utils/directives/focus-key-manager/focus-key-manager-list.directive.mjs +0 -88
- package/esm2022/utils/directives/focus-key-manager/focus-key-manager.tokens.mjs +0 -3
- package/esm2022/utils/directives/focus-key-manager/index.mjs +0 -5
- package/esm2022/utils/directives/focusable-grid/focusable-grid.directive.mjs +0 -164
- package/esm2022/utils/directives/focusable-grid/focusable-grid.module.mjs +0 -17
- package/esm2022/utils/directives/focusable-grid/focusable-grid.tokens.mjs +0 -3
- package/esm2022/utils/directives/focusable-grid/index.mjs +0 -4
- package/esm2022/utils/directives/focusable-item/focusable-item.directive.mjs +0 -198
- package/esm2022/utils/directives/focusable-item/focusable-item.module.mjs +0 -16
- package/esm2022/utils/directives/focusable-item/focusable-item.tokens.mjs +0 -3
- package/esm2022/utils/directives/focusable-item/focusable-list.position.mjs +0 -2
- package/esm2022/utils/directives/focusable-item/focusable.item.mjs +0 -2
- package/esm2022/utils/directives/focusable-item/focusable.observer.mjs +0 -46
- package/esm2022/utils/directives/focusable-item/get-item-element.mjs +0 -14
- package/esm2022/utils/directives/focusable-item/index.mjs +0 -9
- package/esm2022/utils/directives/focusable-item/indirect-focusable-item.directive.mjs +0 -44
- package/esm2022/utils/directives/focusable-item/is-element-focusable-by-default.mjs +0 -32
- package/esm2022/utils/directives/focusable-item/is-item-focusable.mjs +0 -8
- package/esm2022/utils/directives/focusable-list/focusable-list.directive.mjs +0 -300
- package/esm2022/utils/directives/focusable-list/focusable-list.module.mjs +0 -17
- package/esm2022/utils/directives/focusable-list/focusable-list.tokens.mjs +0 -3
- package/esm2022/utils/directives/focusable-list/index.mjs +0 -6
- package/esm2022/utils/directives/focusable-list/indirect-focusable-list.directive.mjs +0 -59
- package/esm2022/utils/directives/focusable-list/scroll.mjs +0 -43
- package/esm2022/utils/directives/ignore-click-on-selection/ignore-click-on-selection.directive.mjs +0 -55
- package/esm2022/utils/directives/ignore-click-on-selection/ignore-click-on-selection.module.mjs +0 -16
- package/esm2022/utils/directives/ignore-click-on-selection/tokens.mjs +0 -3
- package/esm2022/utils/directives/index.mjs +0 -35
- package/esm2022/utils/directives/initial-focus/initial-focus.directive.mjs +0 -99
- package/esm2022/utils/directives/initial-focus/initial-focus.module.mjs +0 -16
- package/esm2022/utils/directives/intersection-spy/intersection-spy.directive.mjs +0 -42
- package/esm2022/utils/directives/line-clamp/line-clamp.directive.mjs +0 -213
- package/esm2022/utils/directives/line-clamp/line-clamp.module.mjs +0 -16
- package/esm2022/utils/directives/only-digits/only-digits.directive.mjs +0 -206
- package/esm2022/utils/directives/only-digits/only-digits.module.mjs +0 -16
- package/esm2022/utils/directives/overflow-list/overflow-list-item.directive.mjs +0 -18
- package/esm2022/utils/directives/overflow-list/overflow-list.directive.mjs +0 -114
- package/esm2022/utils/directives/overflow-list/overflow-list.module.mjs +0 -17
- package/esm2022/utils/directives/readonly/default-readonly-view-modifier.mjs +0 -12
- package/esm2022/utils/directives/readonly/fdk-readonly-provider.service.mjs +0 -101
- package/esm2022/utils/directives/readonly/fdk-readonly.token.mjs +0 -3
- package/esm2022/utils/directives/readonly/index.mjs +0 -10
- package/esm2022/utils/directives/readonly/readonly-behavior.directive.mjs +0 -67
- package/esm2022/utils/directives/readonly/readonly-behavior.interface.mjs +0 -2
- package/esm2022/utils/directives/readonly/readonly-behavior.module.mjs +0 -16
- package/esm2022/utils/directives/readonly/readonly-view-modifier.interface.mjs +0 -2
- package/esm2022/utils/directives/readonly/readonly.observer.mjs +0 -33
- package/esm2022/utils/directives/readonly/set-readonly-state.mjs +0 -14
- package/esm2022/utils/directives/repeat/repeat.directive.mjs +0 -34
- package/esm2022/utils/directives/repeat/repeat.module.mjs +0 -16
- package/esm2022/utils/directives/resize/resize-handle.directive.mjs +0 -18
- package/esm2022/utils/directives/resize/resize.directive.mjs +0 -241
- package/esm2022/utils/directives/resize/resize.module.mjs +0 -17
- package/esm2022/utils/directives/resize-observer/index.mjs +0 -2
- package/esm2022/utils/directives/resize-observer/resize-observer.directive.mjs +0 -29
- package/esm2022/utils/directives/selectable-list/index.mjs +0 -8
- package/esm2022/utils/directives/selectable-list/select-component-root.token.mjs +0 -3
- package/esm2022/utils/directives/selectable-list/selectable-item.directive.mjs +0 -147
- package/esm2022/utils/directives/selectable-list/selectable-item.token.mjs +0 -3
- package/esm2022/utils/directives/selectable-list/selectable-list.directive.mjs +0 -85
- package/esm2022/utils/directives/selectable-list/selectable-list.module.mjs +0 -17
- package/esm2022/utils/directives/selectable-list/selectable-list.tokens.mjs +0 -3
- package/esm2022/utils/directives/selectable-list/selection.service.mjs +0 -138
- package/esm2022/utils/directives/template/template.directive.mjs +0 -25
- package/esm2022/utils/directives/template/template.module.mjs +0 -16
- package/esm2022/utils/directives/truncate/truncate.directive.mjs +0 -94
- package/esm2022/utils/directives/truncate/truncate.module.mjs +0 -16
- package/esm2022/utils/drag-and-drop/dnd-item/dnd-item.directive.mjs +0 -274
- package/esm2022/utils/drag-and-drop/dnd-keyboard-group/dnd-keyboard-group.directive.mjs +0 -88
- package/esm2022/utils/drag-and-drop/dnd-keyboard-item/dnd-keyboard-item.directive.mjs +0 -83
- package/esm2022/utils/drag-and-drop/dnd-list/dnd-list.directive.mjs +0 -378
- package/esm2022/utils/drag-and-drop/dnd.interfaces.mjs +0 -2
- package/esm2022/utils/drag-and-drop/drag-and-drop.module.mjs +0 -22
- package/esm2022/utils/drag-and-drop/index.mjs +0 -8
- package/esm2022/utils/drag-and-drop/tokens.mjs +0 -4
- package/esm2022/utils/dynamic-component/dynamic-component-config.mjs +0 -2
- package/esm2022/utils/dynamic-component/dynamic-component-container.mjs +0 -32
- package/esm2022/utils/dynamic-component/dynamic-component-injector.mjs +0 -20
- package/esm2022/utils/dynamic-component/dynamic-component.service.mjs +0 -100
- package/esm2022/utils/dynamic-component/index.mjs +0 -5
- package/esm2022/utils/functions/consumer-provider-factory.mjs +0 -12
- package/esm2022/utils/functions/element-size.mjs +0 -23
- package/esm2022/utils/functions/get-document-font-size.mjs +0 -9
- package/esm2022/utils/functions/index.mjs +0 -14
- package/esm2022/utils/functions/intersection-observable.mjs +0 -26
- package/esm2022/utils/functions/is-compact-density.mjs +0 -11
- package/esm2022/utils/functions/is-odd.mjs +0 -9
- package/esm2022/utils/functions/key-util.mjs +0 -90
- package/esm2022/utils/functions/module-deprecations-provider.mjs +0 -18
- package/esm2022/utils/functions/parser-file-size.mjs +0 -37
- package/esm2022/utils/functions/random-color-accent.mjs +0 -5
- package/esm2022/utils/functions/resize-observable.mjs +0 -33
- package/esm2022/utils/functions/scroll.mjs +0 -19
- package/esm2022/utils/functions/uuidv4-generator.mjs +0 -12
- package/esm2022/utils/fundamental-ngx-cdk-utils.mjs +0 -5
- package/esm2022/utils/helpers/destroy-observable.mjs +0 -12
- package/esm2022/utils/helpers/dfs.mjs +0 -47
- package/esm2022/utils/helpers/get-native-element.mjs +0 -19
- package/esm2022/utils/helpers/index.mjs +0 -6
- package/esm2022/utils/helpers/range-selector.mjs +0 -117
- package/esm2022/utils/helpers/warn-once.mjs +0 -9
- package/esm2022/utils/index.mjs +0 -25
- package/esm2022/utils/interfaces/content-density.mjs +0 -2
- package/esm2022/utils/interfaces/css-class-builder.interface.mjs +0 -2
- package/esm2022/utils/interfaces/css-style-builder.interface.mjs +0 -2
- package/esm2022/utils/interfaces/has-element-ref.interface.mjs +0 -2
- package/esm2022/utils/interfaces/index.mjs +0 -8
- package/esm2022/utils/interfaces/keyboard-support-item.interface.mjs +0 -2
- package/esm2022/utils/interfaces/module-deprecation.interface.mjs +0 -2
- package/esm2022/utils/interfaces/require.interface.mjs +0 -2
- package/esm2022/utils/list-item/list-item-utils.mjs +0 -3
- package/esm2022/utils/models/nullable.mjs +0 -2
- package/esm2022/utils/pipes/async-or-sync.pipe.mjs +0 -35
- package/esm2022/utils/pipes/displayFn.pipe.mjs +0 -18
- package/esm2022/utils/pipes/filter-strings.pipe.mjs +0 -31
- package/esm2022/utils/pipes/index.mjs +0 -12
- package/esm2022/utils/pipes/is-compact.pipe.mjs +0 -16
- package/esm2022/utils/pipes/make-async.pipe.mjs +0 -24
- package/esm2022/utils/pipes/pipe.module.mjs +0 -65
- package/esm2022/utils/pipes/safe.pipe.mjs +0 -37
- package/esm2022/utils/pipes/search-highlight.pipe.mjs +0 -40
- package/esm2022/utils/pipes/truncate.pipe.mjs +0 -18
- package/esm2022/utils/pipes/two-digits.pipe.mjs +0 -23
- package/esm2022/utils/pipes/value-by-path.pipe.mjs +0 -16
- package/esm2022/utils/services/content-density.service.mjs +0 -35
- package/esm2022/utils/services/destroyed.service.mjs +0 -26
- package/esm2022/utils/services/focus-trap.service.mjs +0 -92
- package/esm2022/utils/services/index.mjs +0 -10
- package/esm2022/utils/services/keyboard-support/keyboard-support.service.mjs +0 -73
- package/esm2022/utils/services/local-storage.service.mjs +0 -38
- package/esm2022/utils/services/observers/attribute.observer.mjs +0 -81
- package/esm2022/utils/services/resize-observer.service.mjs +0 -92
- package/esm2022/utils/services/rtl.service.mjs +0 -32
- package/esm2022/utils/services/tabbable-element.service.mjs +0 -43
- package/esm2022/utils/toast/base-toast-animations.mjs +0 -22
- package/esm2022/utils/toast/base-toast-positions.mjs +0 -108
- package/esm2022/utils/toast/base-toast.service.mjs +0 -261
- package/esm2022/utils/toast/classes/action-dismissible/base-toast-action-dismissible-ref.mjs +0 -36
- package/esm2022/utils/toast/classes/base-toast-animated-container.component.mjs +0 -87
- package/esm2022/utils/toast/classes/base-toast-config.mjs +0 -23
- package/esm2022/utils/toast/classes/base-toast-container.component.mjs +0 -72
- package/esm2022/utils/toast/classes/base-toast-overlay-container.mjs +0 -25
- package/esm2022/utils/toast/classes/base-toast-ref.mjs +0 -45
- package/esm2022/utils/toast/classes/duration-dismissible/base-toast-duration-dismissible-config.mjs +0 -19
- package/esm2022/utils/toast/classes/duration-dismissible/base-toast-duration-dismissible-container.component.mjs +0 -39
- package/esm2022/utils/toast/classes/duration-dismissible/base-toast-duration-dismissible-ref.mjs +0 -23
- package/esm2022/utils/toast/classes/duration-dismissible/base-toast-duration-dismissible.service.mjs +0 -25
- package/esm2022/utils/toast/index.mjs +0 -16
- package/esm2022/utils/toast/interfaces/toast-container-component.interface.mjs +0 -2
- package/esm2022/utils/toast/interfaces/toast-duration-dismissible-container-component.interface.mjs +0 -2
- package/esm2022/utils/toast/interfaces/toast-text-component.interface.mjs +0 -2
- package/esm2022/utils/tokens/module-deprecations.token.mjs +0 -3
- package/esm2022/utils/tokens/viewport-size.observable.mjs +0 -20
- package/esm2022/utils/typecheck.mjs +0 -75
- package/esm2022/utils/utils.module.mjs +0 -131
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { NgModule } from '@angular/core';
|
|
2
|
-
import { TruncateDirective, TruncatedTitleDirective } from './truncate.directive';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export class TruncateModule {
|
|
5
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: TruncateModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
6
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.3", ngImport: i0, type: TruncateModule, imports: [TruncateDirective, TruncatedTitleDirective], exports: [TruncateDirective, TruncatedTitleDirective] }); }
|
|
7
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: TruncateModule }); }
|
|
8
|
-
}
|
|
9
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: TruncateModule, decorators: [{
|
|
10
|
-
type: NgModule,
|
|
11
|
-
args: [{
|
|
12
|
-
imports: [TruncateDirective, TruncatedTitleDirective],
|
|
13
|
-
exports: [TruncateDirective, TruncatedTitleDirective]
|
|
14
|
-
}]
|
|
15
|
-
}] });
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1bmNhdGUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvdXRpbHMvZGlyZWN0aXZlcy90cnVuY2F0ZS90cnVuY2F0ZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFNbEYsTUFBTSxPQUFPLGNBQWM7OEdBQWQsY0FBYzsrR0FBZCxjQUFjLFlBSGIsaUJBQWlCLEVBQUUsdUJBQXVCLGFBQzFDLGlCQUFpQixFQUFFLHVCQUF1QjsrR0FFM0MsY0FBYzs7MkZBQWQsY0FBYztrQkFKMUIsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSx1QkFBdUIsQ0FBQztvQkFDckQsT0FBTyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsdUJBQXVCLENBQUM7aUJBQ3hEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgVHJ1bmNhdGVEaXJlY3RpdmUsIFRydW5jYXRlZFRpdGxlRGlyZWN0aXZlIH0gZnJvbSAnLi90cnVuY2F0ZS5kaXJlY3RpdmUnO1xuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtUcnVuY2F0ZURpcmVjdGl2ZSwgVHJ1bmNhdGVkVGl0bGVEaXJlY3RpdmVdLFxuICAgIGV4cG9ydHM6IFtUcnVuY2F0ZURpcmVjdGl2ZSwgVHJ1bmNhdGVkVGl0bGVEaXJlY3RpdmVdXG59KVxuZXhwb3J0IGNsYXNzIFRydW5jYXRlTW9kdWxlIHt9XG4iXX0=
|
|
@@ -1,274 +0,0 @@
|
|
|
1
|
-
import { DragDrop } from '@angular/cdk/drag-drop';
|
|
2
|
-
import { Directive, ElementRef, EventEmitter, HostBinding, Input, Output, Renderer2, forwardRef } from '@angular/core';
|
|
3
|
-
import { Subscription } from 'rxjs';
|
|
4
|
-
import { delay } from 'rxjs/operators';
|
|
5
|
-
import { DND_ITEM } from '../tokens';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "@angular/cdk/drag-drop";
|
|
8
|
-
export class DndItemDirective {
|
|
9
|
-
/** Defines if element is draggable */
|
|
10
|
-
set draggable(draggable) {
|
|
11
|
-
this._draggable = draggable;
|
|
12
|
-
this.changeCDKDragState();
|
|
13
|
-
}
|
|
14
|
-
/** @hidden */
|
|
15
|
-
constructor(elementRef, _dragDrop, _renderer) {
|
|
16
|
-
this.elementRef = elementRef;
|
|
17
|
-
this._dragDrop = _dragDrop;
|
|
18
|
-
this._renderer = _renderer;
|
|
19
|
-
/**
|
|
20
|
-
* Whether to apply "fd-dnd-item" class.
|
|
21
|
-
* @default true
|
|
22
|
-
*/
|
|
23
|
-
this.applyDragItemClass = true;
|
|
24
|
-
/** Event thrown when the element is moved by 1px */
|
|
25
|
-
this.moved = new EventEmitter();
|
|
26
|
-
/** Event thrown when the element is released */
|
|
27
|
-
this.released = new EventEmitter();
|
|
28
|
-
/** Event thrown when the element is started to be dragged */
|
|
29
|
-
this.started = new EventEmitter();
|
|
30
|
-
/**
|
|
31
|
-
* Defines if the item is prevented from being moved by other elements.
|
|
32
|
-
* So nothing can be placed just before and just after it
|
|
33
|
-
*/
|
|
34
|
-
this.stickInPlace = false;
|
|
35
|
-
/** Class added to element, when it's dragged. */
|
|
36
|
-
this.classWhenElementDragged = 'fd-dnd-on-drag';
|
|
37
|
-
/** Defines if every element in list is draggable */
|
|
38
|
-
this.listDraggable = true;
|
|
39
|
-
/** @hidden */
|
|
40
|
-
this._draggable = true;
|
|
41
|
-
/** @hidden */
|
|
42
|
-
this._subscriptions = new Subscription();
|
|
43
|
-
}
|
|
44
|
-
/** @hidden */
|
|
45
|
-
getElementCoordinates(isBefore) {
|
|
46
|
-
/** Takes distance from the beginning of window page */
|
|
47
|
-
const rect = this.elementRef.nativeElement.getBoundingClientRect();
|
|
48
|
-
const position = isBefore ? 'before' : 'after';
|
|
49
|
-
/** Vertically distance is counted by distance from top of the side + half of the element height */
|
|
50
|
-
return {
|
|
51
|
-
x: rect.left,
|
|
52
|
-
position,
|
|
53
|
-
y: rect.top,
|
|
54
|
-
stickToPosition: this.stickInPlace,
|
|
55
|
-
width: rect.width,
|
|
56
|
-
height: rect.height
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
/** @hidden */
|
|
60
|
-
ngAfterContentInit() {
|
|
61
|
-
this._setCDKDrag();
|
|
62
|
-
this._listenElementEvents();
|
|
63
|
-
}
|
|
64
|
-
/** @hidden */
|
|
65
|
-
ngOnDestroy() {
|
|
66
|
-
this._subscriptions.unsubscribe();
|
|
67
|
-
this._dragRef.dispose();
|
|
68
|
-
}
|
|
69
|
-
/** @hidden */
|
|
70
|
-
onCdkMove(position) {
|
|
71
|
-
this.moved.emit(position);
|
|
72
|
-
}
|
|
73
|
-
/** @hidden */
|
|
74
|
-
onCdkDragReleased() {
|
|
75
|
-
/** Remove class which is added, when element is dragged */
|
|
76
|
-
this.elementRef.nativeElement.classList.remove(this.classWhenElementDragged);
|
|
77
|
-
this.released.emit();
|
|
78
|
-
/** Resets the position of element. */
|
|
79
|
-
this._dragRef.reset();
|
|
80
|
-
/** Removes placeholder element */
|
|
81
|
-
this.removePlaceholder();
|
|
82
|
-
}
|
|
83
|
-
/** @hidden */
|
|
84
|
-
onCdkDragStart() {
|
|
85
|
-
/** Adds class */
|
|
86
|
-
this.elementRef.nativeElement.classList.add(this.classWhenElementDragged);
|
|
87
|
-
if (!this._placeholderElement) {
|
|
88
|
-
this.createPlaceholder();
|
|
89
|
-
}
|
|
90
|
-
this.started.emit();
|
|
91
|
-
}
|
|
92
|
-
/** @hidden */
|
|
93
|
-
removePlaceholder() {
|
|
94
|
-
if (this._placeholderElement && this._placeholderElement.parentNode) {
|
|
95
|
-
// IE11 workaround
|
|
96
|
-
this._placeholderElement.parentNode.removeChild(this._placeholderElement);
|
|
97
|
-
this._placeholderElement = null;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
/** @hidden */
|
|
101
|
-
removeLine() {
|
|
102
|
-
if (this._lineElement && this._lineElement.parentNode) {
|
|
103
|
-
// IE11 workaround
|
|
104
|
-
this._lineElement.parentNode.removeChild(this._lineElement);
|
|
105
|
-
this._lineElement = null;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
/** @hidden */
|
|
109
|
-
removeReplaceIndicator() {
|
|
110
|
-
if (this._replaceIndicator && this._replaceIndicator.parentNode) {
|
|
111
|
-
// IE11 workaround
|
|
112
|
-
this._replaceIndicator.parentNode.removeChild(this._replaceIndicator);
|
|
113
|
-
this._replaceIndicator = null;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
/** @hidden */
|
|
117
|
-
createReplaceIndicator() {
|
|
118
|
-
this._replaceIndicator = document.createElement('DIV');
|
|
119
|
-
this._replaceIndicator.classList.add('fd-replace-indicator');
|
|
120
|
-
let container = this.elementRef.nativeElement;
|
|
121
|
-
if (this.containerSelector) {
|
|
122
|
-
const newContainer = this.elementRef.nativeElement.querySelector(this.containerSelector);
|
|
123
|
-
if (newContainer) {
|
|
124
|
-
container = newContainer;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
container.appendChild(this._replaceIndicator);
|
|
128
|
-
}
|
|
129
|
-
/** @hidden */
|
|
130
|
-
createLine(position, gridMode) {
|
|
131
|
-
/** Creating of line element */
|
|
132
|
-
this._lineElement = document.createElement('div');
|
|
133
|
-
this._lineElement.classList.add('drop-area__line');
|
|
134
|
-
if (gridMode) {
|
|
135
|
-
this._lineElement.classList.add('drop-area__line--vertical');
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
this._lineElement.classList.add('drop-area__line--horizontal');
|
|
139
|
-
}
|
|
140
|
-
if (position === 'after') {
|
|
141
|
-
this._lineElement.classList.add('after');
|
|
142
|
-
}
|
|
143
|
-
if (position === 'before') {
|
|
144
|
-
this._lineElement.classList.add('before');
|
|
145
|
-
}
|
|
146
|
-
/** Putting element to the container */
|
|
147
|
-
let container = this.elementRef.nativeElement;
|
|
148
|
-
if (this.containerSelector) {
|
|
149
|
-
const newContainer = this.elementRef.nativeElement.querySelector(this.containerSelector);
|
|
150
|
-
if (newContainer) {
|
|
151
|
-
container = newContainer;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
container.appendChild(this._lineElement);
|
|
155
|
-
}
|
|
156
|
-
/** @hidden */
|
|
157
|
-
changeCDKDragState() {
|
|
158
|
-
if (this._dragRef) {
|
|
159
|
-
this._dragRef.disabled = !(this._draggable && this.listDraggable);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* Sets the disabled state of the dnd item.
|
|
164
|
-
* @param state
|
|
165
|
-
*/
|
|
166
|
-
setDisabledState(state) {
|
|
167
|
-
if (state) {
|
|
168
|
-
this._renderer.addClass(this.elementRef.nativeElement, 'fd-dnd-item--disabled');
|
|
169
|
-
}
|
|
170
|
-
else {
|
|
171
|
-
this._renderer.removeClass(this.elementRef.nativeElement, 'fd-dnd-item--disabled');
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
/** @hidden */
|
|
175
|
-
createPlaceholder() {
|
|
176
|
-
const placeholder = this.elementRef.nativeElement.cloneNode(true);
|
|
177
|
-
/** Cloning container element */
|
|
178
|
-
this._placeholderElement = placeholder;
|
|
179
|
-
placeholder.classList.add('fd-dnd-placeholder');
|
|
180
|
-
this._setPlaceholderStyles();
|
|
181
|
-
/** Including element to the container
|
|
182
|
-
* IE11 equivalent to `this.element.nativeElement.after(clone);`
|
|
183
|
-
*/
|
|
184
|
-
this._placeAfter(this.elementRef.nativeElement, placeholder);
|
|
185
|
-
}
|
|
186
|
-
/** @hidden */
|
|
187
|
-
_setPlaceholderStyles() {
|
|
188
|
-
const offset = this._getOffsetToParent(this.elementRef.nativeElement);
|
|
189
|
-
if (!offset || !this._placeholderElement) {
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
this._placeholderElement.style.top = offset.y + 'px';
|
|
193
|
-
this._placeholderElement.style.left = offset.x + 'px';
|
|
194
|
-
this._placeholderElement.style.position = 'absolute';
|
|
195
|
-
this._placeholderElement.style.zIndex = '0';
|
|
196
|
-
this._placeholderElement.style.opacity = '0.3';
|
|
197
|
-
this._placeholderElement.style.width = this.elementRef.nativeElement.offsetWidth + 'px';
|
|
198
|
-
this._placeholderElement.style.height = this.elementRef.nativeElement.offsetHeight + 'px';
|
|
199
|
-
}
|
|
200
|
-
/** @hidden */
|
|
201
|
-
_getOffsetToParent(element) {
|
|
202
|
-
const parentElement = element.parentElement;
|
|
203
|
-
if (!parentElement) {
|
|
204
|
-
return;
|
|
205
|
-
}
|
|
206
|
-
const parentElmRect = parentElement.getBoundingClientRect();
|
|
207
|
-
const elmRect = element.getBoundingClientRect();
|
|
208
|
-
const parentTop = parentElmRect.top;
|
|
209
|
-
const parentLeft = parentElmRect.left;
|
|
210
|
-
return {
|
|
211
|
-
x: Math.abs(elmRect.left - parentLeft),
|
|
212
|
-
y: Math.abs(elmRect.top - parentTop)
|
|
213
|
-
};
|
|
214
|
-
}
|
|
215
|
-
/** @hidden */
|
|
216
|
-
_setCDKDrag() {
|
|
217
|
-
this._dragRef = this._dragDrop.createDrag(this.elementRef);
|
|
218
|
-
this._dragRef.disabled = !this._draggable;
|
|
219
|
-
this._subscriptions.add(this._dragRef.moved.subscribe((event) => this.onCdkMove(event.pointerPosition)));
|
|
220
|
-
this._subscriptions.add(this._dragRef.released.subscribe(() => this.onCdkDragReleased()));
|
|
221
|
-
this._subscriptions.add(this._dragRef.started.subscribe(() => this.onCdkDragStart()));
|
|
222
|
-
}
|
|
223
|
-
/** IE11 equivalent of Node.after() Method */
|
|
224
|
-
_placeAfter(element, cloneNode) {
|
|
225
|
-
const docFrag = document.createDocumentFragment();
|
|
226
|
-
docFrag.appendChild(cloneNode);
|
|
227
|
-
element.parentNode?.insertBefore(docFrag, element.nextSibling);
|
|
228
|
-
}
|
|
229
|
-
/** @hidden */
|
|
230
|
-
_listenElementEvents() {
|
|
231
|
-
this._subscriptions.add(this.released
|
|
232
|
-
.pipe(
|
|
233
|
-
// postpone blur
|
|
234
|
-
delay(0))
|
|
235
|
-
.subscribe(() => {
|
|
236
|
-
if (this.containerSelector) {
|
|
237
|
-
this.elementRef.nativeElement.children[0].blur();
|
|
238
|
-
}
|
|
239
|
-
this.elementRef.nativeElement.blur();
|
|
240
|
-
}));
|
|
241
|
-
}
|
|
242
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: DndItemDirective, deps: [{ token: i0.ElementRef }, { token: i1.DragDrop }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
243
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.3", type: DndItemDirective, selector: "[fdkDndItem], [fd-dnd-item]", inputs: { item: ["fdkDndItem", "item"], applyDragItemClass: "applyDragItemClass", containerSelector: "containerSelector", stickInPlace: "stickInPlace", draggable: "draggable", classWhenElementDragged: "classWhenElementDragged" }, outputs: { moved: "moved", released: "released", started: "started" }, host: { properties: { "class.fd-dnd-item": "this.applyDragItemClass" } }, providers: [DragDrop, { provide: DND_ITEM, useExisting: forwardRef(() => DndItemDirective) }], ngImport: i0 }); }
|
|
244
|
-
}
|
|
245
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: DndItemDirective, decorators: [{
|
|
246
|
-
type: Directive,
|
|
247
|
-
args: [{
|
|
248
|
-
selector: '[fdkDndItem], [fd-dnd-item]',
|
|
249
|
-
providers: [DragDrop, { provide: DND_ITEM, useExisting: forwardRef(() => DndItemDirective) }]
|
|
250
|
-
}]
|
|
251
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.DragDrop }, { type: i0.Renderer2 }], propDecorators: { item: [{
|
|
252
|
-
type: Input,
|
|
253
|
-
args: ['fdkDndItem']
|
|
254
|
-
}], applyDragItemClass: [{
|
|
255
|
-
type: Input
|
|
256
|
-
}, {
|
|
257
|
-
type: HostBinding,
|
|
258
|
-
args: ['class.fd-dnd-item']
|
|
259
|
-
}], containerSelector: [{
|
|
260
|
-
type: Input
|
|
261
|
-
}], moved: [{
|
|
262
|
-
type: Output
|
|
263
|
-
}], released: [{
|
|
264
|
-
type: Output
|
|
265
|
-
}], started: [{
|
|
266
|
-
type: Output
|
|
267
|
-
}], stickInPlace: [{
|
|
268
|
-
type: Input
|
|
269
|
-
}], draggable: [{
|
|
270
|
-
type: Input
|
|
271
|
-
}], classWhenElementDragged: [{
|
|
272
|
-
type: Input
|
|
273
|
-
}] } });
|
|
274
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5kLWl0ZW0uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvdXRpbHMvZHJhZy1hbmQtZHJvcC9kbmQtaXRlbS9kbmQtaXRlbS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBVyxNQUFNLHdCQUF3QixDQUFDO0FBQzNELE9BQU8sRUFFSCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1QsVUFBVSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3ZDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7OztBQU1yQyxNQUFNLE9BQU8sZ0JBQWdCO0lBbUN6QixzQ0FBc0M7SUFDdEMsSUFDSSxTQUFTLENBQUMsU0FBa0I7UUFDNUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDNUIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQTZCRCxjQUFjO0lBQ2QsWUFDb0IsVUFBc0IsRUFDckIsU0FBbUIsRUFDbkIsU0FBb0I7UUFGckIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNyQixjQUFTLEdBQVQsU0FBUyxDQUFVO1FBQ25CLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFyRXpDOzs7V0FHRztRQUdILHVCQUFrQixHQUFHLElBQUksQ0FBQztRQU0xQixvREFBb0Q7UUFFM0MsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO1FBRXJELGdEQUFnRDtRQUV2QyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUU3Qyw2REFBNkQ7UUFFcEQsWUFBTyxHQUFH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RHJhZ0Ryb3AsIERyYWdSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE91dHB1dCxcbiAgICBSZW5kZXJlcjIsXG4gICAgZm9yd2FyZFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJy4uLy4uL21vZGVscy9udWxsYWJsZSc7XG5pbXBvcnQgeyBEbmRJdGVtLCBFbGVtZW50Q2hvcmQsIEVsZW1lbnRQb3NpdGlvbiwgTGlua1Bvc2l0aW9uIH0gZnJvbSAnLi4vZG5kLmludGVyZmFjZXMnO1xuaW1wb3J0IHsgRE5EX0lURU0gfSBmcm9tICcuLi90b2tlbnMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tmZGtEbmRJdGVtXSwgW2ZkLWRuZC1pdGVtXScsXG4gICAgcHJvdmlkZXJzOiBbRHJhZ0Ryb3AsIHsgcHJvdmlkZTogRE5EX0lURU0sIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERuZEl0ZW1EaXJlY3RpdmUpIH1dXG59KVxuZXhwb3J0IGNsYXNzIERuZEl0ZW1EaXJlY3RpdmU8VCA9IGFueT4gaW1wbGVtZW50cyBEbmRJdGVtLCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKiBJdGVtIHJlZmVyZW5jZS4gVXNlZCBmb3IgY2FzZXMgd2hlbiBgW2l0ZW1zXWAgYXJyYXkgb2YgZG5kIGxpc3QgaXMgZGlmZmVyZW50IHRoYW4gYGRuZEl0ZW1zYCBjb250ZW50IGNoaWxkcmVuLiAqL1xuICAgIEBJbnB1dCgnZmRrRG5kSXRlbScpXG4gICAgaXRlbTogTnVsbGFibGU8VD47XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBhcHBseSBcImZkLWRuZC1pdGVtXCIgY2xhc3MuXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC1kbmQtaXRlbScpXG4gICAgYXBwbHlEcmFnSXRlbUNsYXNzID0gdHJ1ZTtcblxuICAgIC8qKiBDb250YWluZXIgc2VsZWN0b3IgKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbnRhaW5lclNlbGVjdG9yPzogc3RyaW5nO1xuXG4gICAgLyoqIEV2ZW50IHRocm93biB3aGVuIHRoZSBlbGVtZW50IGlzIG1vdmVkIGJ5IDFweCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IG1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxFbGVtZW50UG9zaXRpb24+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duIHdoZW4gdGhlIGVsZW1lbnQgaXMgcmVsZWFzZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSByZWxlYXNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gd2hlbiB0aGUgZWxlbWVudCBpcyBzdGFydGVkIHRvIGJlIGRyYWdnZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBzdGFydGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICogIERlZmluZXMgaWYgdGhlIGl0ZW0gaXMgcHJldmVudGVkIGZyb20gYmVpbmcgbW92ZWQgYnkgb3RoZXIgZWxlbWVudHMuXG4gICAgICogU28gbm90aGluZyBjYW4gYmUgcGxhY2VkIGp1c3QgYmVmb3JlIGFuZCBqdXN0IGFmdGVyIGl0XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzdGlja0luUGxhY2UgPSBmYWxzZTtcblxuICAgIC8qKiBEZWZpbmVzIGlmIGVsZW1lbnQgaXMgZHJhZ2dhYmxlICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZHJhZ2dhYmxlKGRyYWdnYWJsZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9kcmFnZ2FibGUgPSBkcmFnZ2FibGU7XG4gICAgICAgIHRoaXMuY2hhbmdlQ0RLRHJhZ1N0YXRlKCk7XG4gICAgfVxuXG4gICAgLyoqIENsYXNzIGFkZGVkIHRvIGVsZW1lbnQsIHdoZW4gaXQncyBkcmFnZ2VkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xhc3NXaGVuRWxlbWVudERyYWdnZWQgPSAnZmQtZG5kLW9uLWRyYWcnO1xuXG4gICAgLyoqIERlZmluZXMgaWYgZXZlcnkgZWxlbWVudCBpbiBsaXN0IGlzIGRyYWdnYWJsZSAqL1xuICAgIGxpc3REcmFnZ2FibGUgPSB0cnVlO1xuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBEcmFnIHJlZmVyZW5jZSwgb2JqZWN0IGNyZWF0ZWQgZnJvbSBETkQgQ0RLIFNlcnZpY2VcbiAgICAgKi9cbiAgICBwcml2YXRlIF9kcmFnUmVmOiBEcmFnUmVmO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kcmFnZ2FibGUgPSB0cnVlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9wbGFjZWhvbGRlckVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGluZUVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVwbGFjZUluZGljYXRvcjogSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2RyYWdEcm9wOiBEcmFnRHJvcCxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfcmVuZGVyZXI6IFJlbmRlcmVyMlxuICAgICkge31cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0RWxlbWVudENvb3JkaW5hdGVzKGlzQmVmb3JlOiBib29sZWFuKTogRWxlbWVudENob3JkIHtcbiAgICAgICAgLyoqIFRha2VzIGRpc3RhbmNlIGZyb20gdGhlIGJlZ2lubmluZyBvZiB3aW5kb3cgcGFnZSAqL1xuICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgY29uc3QgcG9zaXRpb246IExpbmtQb3NpdGlvbiA9IGlzQmVmb3JlID8gJ2JlZm9yZScgOiAnYWZ0ZXInO1xuXG4gICAgICAgIC8qKiBWZXJ0aWNhbGx5IGRpc3RhbmNlIGlzIGNvdW50ZWQgYnkgZGlzdGFuY2UgZnJvbSB0b3Agb2YgdGhlIHNpZGUgKyBoYWxmIG9mIHRoZSBlbGVtZW50IGhlaWdodCAqL1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogcmVjdC5sZWZ0LFxuICAgICAgICAgICAgcG9zaXRpb24sXG4gICAgICAgICAgICB5OiByZWN0LnRvcCxcbiAgICAgICAgICAgIHN0aWNrVG9Qb3NpdGlvbjogdGhpcy5zdGlja0luUGxhY2UsXG4gICAgICAgICAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogcmVjdC5oZWlnaHRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2V0Q0RLRHJhZygpO1xuICAgICAgICB0aGlzLl9saXN0ZW5FbGVtZW50RXZlbnRzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLl9kcmFnUmVmLmRpc3Bvc2UoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uQ2RrTW92ZShwb3NpdGlvbjogRWxlbWVudFBvc2l0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMubW92ZWQuZW1pdChwb3NpdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbkNka0RyYWdSZWxlYXNlZCgpOiB2b2lkIHtcbiAgICAgICAgLyoqIFJlbW92ZSBjbGFzcyB3aGljaCBpcyBhZGRlZCwgd2hlbiBlbGVtZW50IGlzIGRyYWdnZWQgKi9cbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLmNsYXNzV2hlbkVsZW1lbnREcmFnZ2VkKTtcbiAgICAgICAgdGhpcy5yZWxlYXNlZC5lbWl0KCk7XG5cbiAgICAgICAgLyoqIFJlc2V0cyB0aGUgcG9zaXRpb24gb2YgZWxlbWVudC4gKi9cbiAgICAgICAgdGhpcy5fZHJhZ1JlZi5yZXNldCgpO1xuXG4gICAgICAgIC8qKiBSZW1vdmVzIHBsYWNlaG9sZGVyIGVsZW1lbnQgKi9cbiAgICAgICAgdGhpcy5yZW1vdmVQbGFjZWhvbGRlcigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25DZGtEcmFnU3RhcnQoKTogdm9pZCB7XG4gICAgICAgIC8qKiBBZGRzIGNsYXNzICovXG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc1doZW5FbGVtZW50RHJhZ2dlZCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLl9wbGFjZWhvbGRlckVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlUGxhY2Vob2xkZXIoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXJ0ZWQuZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVtb3ZlUGxhY2Vob2xkZXIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9wbGFjZWhvbGRlckVsZW1lbnQgJiYgdGhpcy5fcGxhY2Vob2xkZXJFbGVtZW50LnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgIC8vIElFMTEgd29ya2Fyb3VuZFxuICAgICAgICAgICAgdGhpcy5fcGxhY2Vob2xkZXJFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fcGxhY2Vob2xkZXJFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuX3BsYWNlaG9sZGVyRWxlbWVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlbW92ZUxpbmUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9saW5lRWxlbWVudCAmJiB0aGlzLl9saW5lRWxlbWVudC5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAvLyBJRTExIHdvcmthcm91bmRcbiAgICAgICAgICAgIHRoaXMuX2xpbmVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fbGluZUVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5fbGluZUVsZW1lbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZW1vdmVSZXBsYWNlSW5kaWNhdG9yKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fcmVwbGFjZUluZGljYXRvciAmJiB0aGlzLl9yZXBsYWNlSW5kaWNhdG9yLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgIC8vIElFMTEgd29ya2Fyb3VuZFxuICAgICAgICAgICAgdGhpcy5fcmVwbGFjZUluZGljYXRvci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX3JlcGxhY2VJbmRpY2F0b3IpO1xuICAgICAgICAgICAgdGhpcy5fcmVwbGFjZUluZGljYXRvciA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNyZWF0ZVJlcGxhY2VJbmRpY2F0b3IoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlcGxhY2VJbmRpY2F0b3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTtcbiAgICAgICAgdGhpcy5fcmVwbGFjZUluZGljYXRvci5jbGFzc0xpc3QuYWRkKCdmZC1yZXBsYWNlLWluZGljYXRvcicpO1xuXG4gICAgICAgIGxldCBjb250YWluZXIgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKHRoaXMuY29udGFpbmVyU2VsZWN0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NvbnRhaW5lciA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5jb250YWluZXJTZWxlY3Rvcik7XG4gICAgICAgICAgICBpZiAobmV3Q29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyID0gbmV3Q29udGFpbmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX3JlcGxhY2VJbmRpY2F0b3IpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY3JlYXRlTGluZShwb3NpdGlvbjogTGlua1Bvc2l0aW9uLCBncmlkTW9kZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICAvKiogQ3JlYXRpbmcgb2YgbGluZSBlbGVtZW50ICovXG4gICAgICAgIHRoaXMuX2xpbmVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRoaXMuX2xpbmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2Ryb3AtYXJlYV9fbGluZScpO1xuXG4gICAgICAgIGlmIChncmlkTW9kZSkge1xuICAgICAgICAgICAgdGhpcy5fbGluZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZHJvcC1hcmVhX19saW5lLS12ZXJ0aWNhbCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbGluZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZHJvcC1hcmVhX19saW5lLS1ob3Jpem9udGFsJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSAnYWZ0ZXInKSB7XG4gICAgICAgICAgICB0aGlzLl9saW5lRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdhZnRlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gJ2JlZm9yZScpIHtcbiAgICAgICAgICAgIHRoaXMuX2xpbmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2JlZm9yZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqIFB1dHRpbmcgZWxlbWVudCB0byB0aGUgY29udGFpbmVyICovXG4gICAgICAgIGxldCBjb250YWluZXIgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKHRoaXMuY29udGFpbmVyU2VsZWN0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NvbnRhaW5lciA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5jb250YWluZXJTZWxlY3Rvcik7XG4gICAgICAgICAgICBpZiAobmV3Q29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyID0gbmV3Q29udGFpbmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX2xpbmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNoYW5nZUNES0RyYWdTdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2RyYWdSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuX2RyYWdSZWYuZGlzYWJsZWQgPSAhKHRoaXMuX2RyYWdnYWJsZSAmJiB0aGlzLmxpc3REcmFnZ2FibGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIGRuZCBpdGVtLlxuICAgICAqIEBwYXJhbSBzdGF0ZVxuICAgICAqL1xuICAgIHNldERpc2FibGVkU3RhdGUoc3RhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2ZkLWRuZC1pdGVtLS1kaXNhYmxlZCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdmZC1kbmQtaXRlbS0tZGlzYWJsZWQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBjcmVhdGVQbGFjZWhvbGRlcigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXIgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICAgIC8qKiBDbG9uaW5nIGNvbnRhaW5lciBlbGVtZW50ICovXG4gICAgICAgIHRoaXMuX3BsYWNlaG9sZGVyRWxlbWVudCA9IHBsYWNlaG9sZGVyO1xuXG4gICAgICAgIHBsYWNlaG9sZGVyLmNsYXNzTGlzdC5hZGQoJ2ZkLWRuZC1wbGFjZWhvbGRlcicpO1xuICAgICAgICB0aGlzLl9zZXRQbGFjZWhvbGRlclN0eWxlcygpO1xuXG4gICAgICAgIC8qKiBJbmNsdWRpbmcgZWxlbWVudCB0byB0aGUgY29udGFpbmVyXG4gICAgICAgICAqICBJRTExIGVxdWl2YWxlbnQgdG8gYHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmFmdGVyKGNsb25lKTtgXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9wbGFjZUFmdGVyKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBwbGFjZWhvbGRlcik7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRQbGFjZWhvbGRlclN0eWxlcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5fZ2V0T2Zmc2V0VG9QYXJlbnQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgIGlmICghb2Zmc2V0IHx8ICF0aGlzLl9wbGFjZWhvbGRlckVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3BsYWNlaG9sZGVyRWxlbWVudC5zdHlsZS50b3AgPSBvZmZzZXQueSArICdweCc7XG4gICAgICAgIHRoaXMuX3BsYWNlaG9sZGVyRWxlbWVudC5zdHlsZS5sZWZ0ID0gb2Zmc2V0LnggKyAncHgnO1xuICAgICAgICB0aGlzLl9wbGFjZWhvbGRlckVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgICB0aGlzLl9wbGFjZWhvbGRlckVsZW1lbnQuc3R5bGUuekluZGV4ID0gJzAnO1xuICAgICAgICB0aGlzLl9wbGFjZWhvbGRlckVsZW1lbnQuc3R5bGUub3BhY2l0eSA9ICcwLjMnO1xuXG4gICAgICAgIHRoaXMuX3BsYWNlaG9sZGVyRWxlbWVudC5zdHlsZS53aWR0aCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICsgJ3B4JztcbiAgICAgICAgdGhpcy5fcGxhY2Vob2xkZXJFbGVtZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCArICdweCc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRPZmZzZXRUb1BhcmVudChlbGVtZW50OiBFbGVtZW50KTogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgcGFyZW50RWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJlbnRFbG1SZWN0ID0gcGFyZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgZWxtUmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgY29uc3QgcGFyZW50VG9wID0gcGFyZW50RWxtUmVjdC50b3A7XG4gICAgICAgIGNvbnN0IHBhcmVudExlZnQgPSBwYXJlbnRFbG1SZWN0LmxlZnQ7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IE1hdGguYWJzKGVsbVJlY3QubGVmdCAtIHBhcmVudExlZnQpLFxuICAgICAgICAgICAgeTogTWF0aC5hYnMoZWxtUmVjdC50b3AgLSBwYXJlbnRUb3ApXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRDREtEcmFnKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kcmFnUmVmID0gdGhpcy5fZHJhZ0Ryb3AuY3JlYXRlRHJhZyh0aGlzLmVsZW1lbnRSZWYpO1xuICAgICAgICB0aGlzLl9kcmFnUmVmLmRpc2FibGVkID0gIXRoaXMuX2RyYWdnYWJsZTtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5fZHJhZ1JlZi5tb3ZlZC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB0aGlzLm9uQ2RrTW92ZShldmVudC5wb2ludGVyUG9zaXRpb24pKSk7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKHRoaXMuX2RyYWdSZWYucmVsZWFzZWQuc3Vic2NyaWJlKCgpID0+IHRoaXMub25DZGtEcmFnUmVsZWFzZWQoKSkpO1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZCh0aGlzLl9kcmFnUmVmLnN0YXJ0ZWQuc3Vic2NyaWJlKCgpID0+IHRoaXMub25DZGtEcmFnU3RhcnQoKSkpO1xuICAgIH1cblxuICAgIC8qKiBJRTExIGVxdWl2YWxlbnQgb2YgTm9kZS5hZnRlcigpIE1ldGhvZCAqL1xuICAgIHByaXZhdGUgX3BsYWNlQWZ0ZXIoZWxlbWVudDogRWxlbWVudCwgY2xvbmVOb2RlOiBOb2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRvY0ZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICAgIGRvY0ZyYWcuYXBwZW5kQ2hpbGQoY2xvbmVOb2RlKTtcbiAgICAgICAgZWxlbWVudC5wYXJlbnROb2RlPy5pbnNlcnRCZWZvcmUoZG9jRnJhZywgZWxlbWVudC5uZXh0U2libGluZyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5FbGVtZW50RXZlbnRzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMucmVsZWFzZWRcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgLy8gcG9zdHBvbmUgYmx1clxuICAgICAgICAgICAgICAgICAgICBkZWxheSgwKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udGFpbmVyU2VsZWN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdLmJsdXIoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';
|
|
2
|
-
import { DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';
|
|
3
|
-
import { ChangeDetectorRef, Directive, Input, Optional } from '@angular/core';
|
|
4
|
-
import { Subject } from 'rxjs';
|
|
5
|
-
import { KeyUtil } from '../../functions';
|
|
6
|
-
import { RtlService } from '../../services/rtl.service';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "../../services/rtl.service";
|
|
9
|
-
/**
|
|
10
|
-
* This directive is used to provide drag & drop with keyboard support.
|
|
11
|
-
* It should be used together with directive fdDndKeyboardItem.
|
|
12
|
-
*/
|
|
13
|
-
export class DndKeyboardGroupDirective {
|
|
14
|
-
/** @hidden */
|
|
15
|
-
constructor(_cdr, _rtlService) {
|
|
16
|
-
this._cdr = _cdr;
|
|
17
|
-
this._rtlService = _rtlService;
|
|
18
|
-
/** Whether to disable drag & drop */
|
|
19
|
-
this.disableKeyboardDragDrop = false;
|
|
20
|
-
/** Used to apply indexes when moving between groups */
|
|
21
|
-
this.orientation = 'vertical';
|
|
22
|
-
/** @hidden */
|
|
23
|
-
this._onDndItemFocus$ = new Subject();
|
|
24
|
-
/** Custom function to call when moving item inside the group */
|
|
25
|
-
this.customMoveFn = (group, fromIndex, toIndex) => moveItemInArray(group, fromIndex, toIndex);
|
|
26
|
-
/** Custom function to call when moving item between groups */
|
|
27
|
-
this.customTransferFn = (group, nextGroup, fromIndex, toIndex) => transferArrayItem(group, nextGroup, fromIndex, toIndex);
|
|
28
|
-
}
|
|
29
|
-
/** Process drag & drop */
|
|
30
|
-
processDragDrop(event, itemIndex, groupIndex) {
|
|
31
|
-
if (this.disableKeyboardDragDrop || !event.altKey) {
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
const isRtl = this._rtlService.rtl.value;
|
|
35
|
-
const group = this.groups[groupIndex];
|
|
36
|
-
const indexInNextGroup = this.orientation === 'vertical' ? 0 : itemIndex;
|
|
37
|
-
const nextGroupExists = this.groups.length > groupIndex + 1;
|
|
38
|
-
const prevGroupExists = !!groupIndex;
|
|
39
|
-
if (KeyUtil.isKeyCode(event, RIGHT_ARROW) && (isRtl ? prevGroupExists : nextGroupExists)) {
|
|
40
|
-
event.preventDefault();
|
|
41
|
-
const nextGroupIndex = groupIndex + (isRtl ? -1 : 1);
|
|
42
|
-
const nextGroup = this.groups[nextGroupIndex];
|
|
43
|
-
this.customTransferFn(group, nextGroup, itemIndex, indexInNextGroup);
|
|
44
|
-
this._focusDndItem(nextGroupIndex, indexInNextGroup);
|
|
45
|
-
}
|
|
46
|
-
else if (KeyUtil.isKeyCode(event, LEFT_ARROW) && (isRtl ? nextGroupExists : prevGroupExists)) {
|
|
47
|
-
event.preventDefault();
|
|
48
|
-
const nextGroupIndex = groupIndex + (isRtl ? 1 : -1);
|
|
49
|
-
const nextGroup = this.groups[nextGroupIndex];
|
|
50
|
-
this.customTransferFn(group, nextGroup, itemIndex, indexInNextGroup);
|
|
51
|
-
this._focusDndItem(nextGroupIndex, indexInNextGroup);
|
|
52
|
-
}
|
|
53
|
-
else if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {
|
|
54
|
-
event.preventDefault();
|
|
55
|
-
this.customMoveFn(group, itemIndex, itemIndex + 1);
|
|
56
|
-
this._focusDndItem(groupIndex, itemIndex + 1);
|
|
57
|
-
}
|
|
58
|
-
else if (KeyUtil.isKeyCode(event, UP_ARROW)) {
|
|
59
|
-
event.preventDefault();
|
|
60
|
-
this.customMoveFn(group, itemIndex, itemIndex - 1);
|
|
61
|
-
this._focusDndItem(groupIndex, itemIndex - 1);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
/** @hidden Focus after moving elements with keyboard */
|
|
65
|
-
_focusDndItem(groupIndex, itemIndex) {
|
|
66
|
-
this._cdr.detectChanges();
|
|
67
|
-
this._onDndItemFocus$.next([groupIndex, itemIndex]);
|
|
68
|
-
}
|
|
69
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: DndKeyboardGroupDirective, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.RtlService, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
70
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.3", type: DndKeyboardGroupDirective, selector: "[fdkDndKeyboardGroup], [fdDndKeyboardGroup]", inputs: { groups: "groups", disableKeyboardDragDrop: "disableKeyboardDragDrop", orientation: "orientation", customMoveFn: "customMoveFn", customTransferFn: "customTransferFn" }, ngImport: i0 }); }
|
|
71
|
-
}
|
|
72
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: DndKeyboardGroupDirective, decorators: [{
|
|
73
|
-
type: Directive,
|
|
74
|
-
args: [{ selector: '[fdkDndKeyboardGroup], [fdDndKeyboardGroup]' }]
|
|
75
|
-
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.RtlService, decorators: [{
|
|
76
|
-
type: Optional
|
|
77
|
-
}] }], propDecorators: { groups: [{
|
|
78
|
-
type: Input
|
|
79
|
-
}], disableKeyboardDragDrop: [{
|
|
80
|
-
type: Input
|
|
81
|
-
}], orientation: [{
|
|
82
|
-
type: Input
|
|
83
|
-
}], customMoveFn: [{
|
|
84
|
-
type: Input
|
|
85
|
-
}], customTransferFn: [{
|
|
86
|
-
type: Input
|
|
87
|
-
}] } });
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5kLWtleWJvYXJkLWdyb3VwLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2RrL3V0aWxzL2RyYWctYW5kLWRyb3AvZG5kLWtleWJvYXJkLWdyb3VwL2RuZC1rZXlib2FyZC1ncm91cC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7QUFFeEQ7OztHQUdHO0FBRUgsTUFBTSxPQUFPLHlCQUF5QjtJQWdCbEMsY0FBYztJQUNkLFlBQ3FCLElBQXVCLEVBQ1gsV0FBdUI7UUFEbkMsU0FBSSxHQUFKLElBQUksQ0FBbUI7UUFDWCxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQWR4RCxxQ0FBcUM7UUFFckMsNEJBQXVCLEdBQUcsS0FBSyxDQUFDO1FBRWhDLHVEQUF1RDtRQUV2RCxnQkFBVyxHQUE4QixVQUFVLENBQUM7UUFFcEQsY0FBYztRQUNkLHFCQUFnQixHQUFHLElBQUksT0FBTyxFQUFvQixDQUFDO1FBUW5ELGdFQUFnRTtRQUVoRSxpQkFBWSxHQUFHLENBQUMsS0FBWSxFQUFFLFNBQWlCLEVBQUUsT0FBZSxFQUFRLEVBQUUsQ0FDdEUsZUFBZSxDQUFDLEtBQUssRUFBRSxTQUFTLEVB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Q0FBQyxFQUFFLENBQUM7WUFDNUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBRXZCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2xELENBQUM7SUFDTCxDQUFDO0lBRUQsd0RBQXdEO0lBQ2hELGFBQWEsQ0FBQyxVQUFrQixFQUFFLFNBQWlCO1FBQ3ZELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7OEdBaEZRLHlCQUF5QjtrR0FBekIseUJBQXlCOzsyRkFBekIseUJBQXlCO2tCQURyQyxTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLDZDQUE2QyxFQUFFOzswQkFvQjdELFFBQVE7eUNBaEJiLE1BQU07c0JBREwsS0FBSztnQkFLTix1QkFBdUI7c0JBRHRCLEtBQUs7Z0JBS04sV0FBVztzQkFEVixLQUFLO2dCQWNOLFlBQVk7c0JBRFgsS0FBSztnQkFNTixnQkFBZ0I7c0JBRGYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1vdmVJdGVtSW5BcnJheSwgdHJhbnNmZXJBcnJheUl0ZW0gfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IERPV05fQVJST1csIExFRlRfQVJST1csIFJJR0hUX0FSUk9XLCBVUF9BUlJPVyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBJbnB1dCwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEtleVV0aWwgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgUnRsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3J0bC5zZXJ2aWNlJztcblxuLyoqXG4gKiBUaGlzIGRpcmVjdGl2ZSBpcyB1c2VkIHRvIHByb3ZpZGUgZHJhZyAmIGRyb3Agd2l0aCBrZXlib2FyZCBzdXBwb3J0LlxuICogSXQgc2hvdWxkIGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBkaXJlY3RpdmUgZmREbmRLZXlib2FyZEl0ZW0uXG4gKi9cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1tmZGtEbmRLZXlib2FyZEdyb3VwXSwgW2ZkRG5kS2V5Ym9hcmRHcm91cF0nIH0pXG5leHBvcnQgY2xhc3MgRG5kS2V5Ym9hcmRHcm91cERpcmVjdGl2ZSB7XG4gICAgLyoqIEdyb3VwIG9mIGl0ZW1zICovXG4gICAgQElucHV0KClcbiAgICBncm91cHM6IGFueVtdW107XG5cbiAgICAvKiogV2hldGhlciB0byBkaXNhYmxlIGRyYWcgJiBkcm9wICovXG4gICAgQElucHV0KClcbiAgICBkaXNhYmxlS2V5Ym9hcmREcmFnRHJvcCA9IGZhbHNlO1xuXG4gICAgLyoqIFVzZWQgdG8gYXBwbHkgaW5kZXhlcyB3aGVuIG1vdmluZyBiZXR3ZWVuIGdyb3VwcyAqL1xuICAgIEBJbnB1dCgpXG4gICAgb3JpZW50YXRpb246ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCcgPSAndmVydGljYWwnO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25EbmRJdGVtRm9jdXMkID0gbmV3IFN1YmplY3Q8W251bWJlciwgbnVtYmVyXT4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgX3J0bFNlcnZpY2U6IFJ0bFNlcnZpY2VcbiAgICApIHt9XG5cbiAgICAvKiogQ3VzdG9tIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBtb3ZpbmcgaXRlbSBpbnNpZGUgdGhlIGdyb3VwICovXG4gICAgQElucHV0KClcbiAgICBjdXN0b21Nb3ZlRm4gPSAoZ3JvdXA6IGFueVtdLCBmcm9tSW5kZXg6IG51bWJlciwgdG9JbmRleDogbnVtYmVyKTogdm9pZCA9PlxuICAgICAgICBtb3ZlSXRlbUluQXJyYXkoZ3JvdXAsIGZyb21JbmRleCwgdG9JbmRleCk7XG5cbiAgICAvKiogQ3VzdG9tIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBtb3ZpbmcgaXRlbSBiZXR3ZWVuIGdyb3VwcyAqL1xuICAgIEBJbnB1dCgpXG4gICAgY3VzdG9tVHJhbnNmZXJGbiA9IChncm91cDogYW55W10sIG5leHRHcm91cDogYW55W10sIGZyb21JbmRleDogbnVtYmVyLCB0b0luZGV4OiBudW1iZXIpOiB2b2lkID0+XG4gICAgICAgIHRyYW5zZmVyQXJyYXlJdGVtKGdyb3VwLCBuZXh0R3JvdXAsIGZyb21JbmRleCwgdG9JbmRleCk7XG5cbiAgICAvKiogUHJvY2VzcyBkcmFnICYgZHJvcCAqL1xuICAgIHByb2Nlc3NEcmFnRHJvcChldmVudDogS2V5Ym9hcmRFdmVudCwgaXRlbUluZGV4OiBudW1iZXIsIGdyb3VwSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlS2V5Ym9hcmREcmFnRHJvcCB8fCAhZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc1J0bCA9IHRoaXMuX3J0bFNlcnZpY2UucnRsLnZhbHVlO1xuXG4gICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5ncm91cHNbZ3JvdXBJbmRleF07XG4gICAgICAgIGNvbnN0IGluZGV4SW5OZXh0R3JvdXAgPSB0aGlzLm9yaWVudGF0aW9uID09PSAndmVydGljYWwnID8gMCA6IGl0ZW1JbmRleDtcblxuICAgICAgICBjb25zdCBuZXh0R3JvdXBFeGlzdHMgPSB0aGlzLmdyb3Vwcy5sZW5ndGggPiBncm91cEluZGV4ICsgMTtcbiAgICAgICAgY29uc3QgcHJldkdyb3VwRXhpc3RzID0gISFncm91cEluZGV4O1xuXG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgUklHSFRfQVJST1cpICYmIChpc1J0bCA/IHByZXZHcm91cEV4aXN0cyA6IG5leHRHcm91cEV4aXN0cykpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIGNvbnN0IG5leHRHcm91cEluZGV4ID0gZ3JvdXBJbmRleCArIChpc1J0bCA/IC0xIDogMSk7XG4gICAgICAgICAgICBjb25zdCBuZXh0R3JvdXAgPSB0aGlzLmdyb3Vwc1tuZXh0R3JvdXBJbmRleF07XG5cbiAgICAgICAgICAgIHRoaXMuY3VzdG9tVHJhbnNmZXJGbihncm91cCwgbmV4dEdyb3VwLCBpdGVtSW5kZXgsIGluZGV4SW5OZXh0R3JvdXApO1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNEbmRJdGVtKG5leHRHcm91cEluZGV4LCBpbmRleEluTmV4dEdyb3VwKTtcbiAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgTEVGVF9BUlJPVykgJiYgKGlzUnRsID8gbmV4dEdyb3VwRXhpc3RzIDogcHJldkdyb3VwRXhpc3RzKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgY29uc3QgbmV4dEdyb3VwSW5kZXggPSBncm91cEluZGV4ICsgKGlzUnRsID8gMSA6IC0xKTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRHcm91cCA9IHRoaXMuZ3JvdXBzW25leHRHcm91cEluZGV4XTtcblxuICAgICAgICAgICAgdGhpcy5jdXN0b21UcmFuc2ZlckZuKGdyb3VwLCBuZXh0R3JvdXAsIGl0ZW1JbmRleCwgaW5kZXhJbk5leHRHcm91cCk7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c0RuZEl0ZW0obmV4dEdyb3VwSW5kZXgsIGluZGV4SW5OZXh0R3JvdXApO1xuICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBET1dOX0FSUk9XKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgdGhpcy5jdXN0b21Nb3ZlRm4oZ3JvdXAsIGl0ZW1JbmRleCwgaXRlbUluZGV4ICsgMSk7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c0RuZEl0ZW0oZ3JvdXBJbmRleCwgaXRlbUluZGV4ICsgMSk7XG4gICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFVQX0FSUk9XKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgdGhpcy5jdXN0b21Nb3ZlRm4oZ3JvdXAsIGl0ZW1JbmRleCwgaXRlbUluZGV4IC0gMSk7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c0RuZEl0ZW0oZ3JvdXBJbmRleCwgaXRlbUluZGV4IC0gMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBGb2N1cyBhZnRlciBtb3ZpbmcgZWxlbWVudHMgd2l0aCBrZXlib2FyZCAqL1xuICAgIHByaXZhdGUgX2ZvY3VzRG5kSXRlbShncm91cEluZGV4OiBudW1iZXIsIGl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5fb25EbmRJdGVtRm9jdXMkLm5leHQoW2dyb3VwSW5kZXgsIGl0ZW1JbmRleF0pO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import { Directive, ElementRef, HostListener, Input } from '@angular/core';
|
|
2
|
-
import { Subject } from 'rxjs';
|
|
3
|
-
import { DndKeyboardGroupDirective } from '../dnd-keyboard-group/dnd-keyboard-group.directive';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "../dnd-keyboard-group/dnd-keyboard-group.directive";
|
|
6
|
-
/**
|
|
7
|
-
* This directive is used to provide drag & drop with keyboard support.
|
|
8
|
-
* It should be used together with directive fdDndKeyboardGroup.
|
|
9
|
-
* We are using _groups from fdDndKeyboardGroup and adding a possibility to move cards.
|
|
10
|
-
* Please see example below:
|
|
11
|
-
* @Component({
|
|
12
|
-
* selector: 'cdk-drag-drop-example',
|
|
13
|
-
* template: `<div
|
|
14
|
-
* cdkDragListGroup
|
|
15
|
-
* fdDndKeyboardGroup
|
|
16
|
-
* [groups]="groups"
|
|
17
|
-
* >
|
|
18
|
-
* <div
|
|
19
|
-
* *ngFor="let group of groups; let groupIndex = index"
|
|
20
|
-
* cdkDragList
|
|
21
|
-
* >
|
|
22
|
-
* Group #{{ groupIndex }}
|
|
23
|
-
* <div
|
|
24
|
-
* *ngFor="let item of group; let index = index"
|
|
25
|
-
* cdkDrag
|
|
26
|
-
* fdDndKeyboardItem
|
|
27
|
-
* [itemIndex]="index"
|
|
28
|
-
* [groupIndex]="groupIndex"
|
|
29
|
-
* [dndKeyboardDisabled]="flag for disable/enable keyboard navigation if needed"
|
|
30
|
-
* tabindex="0"
|
|
31
|
-
* >
|
|
32
|
-
* Item #{{ item }}
|
|
33
|
-
* </div>
|
|
34
|
-
* </div>
|
|
35
|
-
* </div>`,
|
|
36
|
-
* })
|
|
37
|
-
* export class CdkDragDropExample {
|
|
38
|
-
* groups = [
|
|
39
|
-
* [1, 2, 3],
|
|
40
|
-
* [4, 5, 6],
|
|
41
|
-
* ];
|
|
42
|
-
* }
|
|
43
|
-
*/
|
|
44
|
-
export class DndKeyboardItemDirective {
|
|
45
|
-
/** @hidden */
|
|
46
|
-
constructor(_dndGroup, _elementRef) {
|
|
47
|
-
this._dndGroup = _dndGroup;
|
|
48
|
-
this._elementRef = _elementRef;
|
|
49
|
-
/** @hidden */
|
|
50
|
-
this._onDestroy$ = new Subject();
|
|
51
|
-
}
|
|
52
|
-
/** @hidden */
|
|
53
|
-
_onKeyDown(event) {
|
|
54
|
-
this._dndGroup.processDragDrop(event, this.itemIndex, this.groupIndex);
|
|
55
|
-
}
|
|
56
|
-
/** @hidden */
|
|
57
|
-
ngOnInit() {
|
|
58
|
-
this._dndGroup._onDndItemFocus$.subscribe(([groupIndex, itemIndex]) => {
|
|
59
|
-
if (this.groupIndex === groupIndex && this.itemIndex === itemIndex) {
|
|
60
|
-
this._elementRef.nativeElement.focus();
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
/** @hidden */
|
|
65
|
-
ngOnDestroy() {
|
|
66
|
-
this._onDestroy$.next();
|
|
67
|
-
this._onDestroy$.complete();
|
|
68
|
-
}
|
|
69
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: DndKeyboardItemDirective, deps: [{ token: i1.DndKeyboardGroupDirective }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
70
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.3", type: DndKeyboardItemDirective, selector: "[fdkDndKeyboardItem], [fdDndKeyboardItem]", inputs: { itemIndex: "itemIndex", groupIndex: "groupIndex" }, host: { listeners: { "keydown": "_onKeyDown($event)" } }, ngImport: i0 }); }
|
|
71
|
-
}
|
|
72
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: DndKeyboardItemDirective, decorators: [{
|
|
73
|
-
type: Directive,
|
|
74
|
-
args: [{ selector: '[fdkDndKeyboardItem], [fdDndKeyboardItem]' }]
|
|
75
|
-
}], ctorParameters: () => [{ type: i1.DndKeyboardGroupDirective }, { type: i0.ElementRef }], propDecorators: { itemIndex: [{
|
|
76
|
-
type: Input
|
|
77
|
-
}], groupIndex: [{
|
|
78
|
-
type: Input
|
|
79
|
-
}], _onKeyDown: [{
|
|
80
|
-
type: HostListener,
|
|
81
|
-
args: ['keydown', ['$event']]
|
|
82
|
-
}] } });
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5kLWtleWJvYXJkLWl0ZW0uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvdXRpbHMvZHJhZy1hbmQtZHJvcC9kbmQta2V5Ym9hcmQtaXRlbS9kbmQta2V5Ym9hcmQtaXRlbS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQzs7O0FBRS9GOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUNHO0FBRUgsTUFBTSxPQUFPLHdCQUF3QjtJQVlqQyxjQUFjO0lBQ2QsWUFDcUIsU0FBb0MsRUFDcEMsV0FBdUI7UUFEdkIsY0FBUyxHQUFULFNBQVMsQ0FBMkI7UUFDcEMsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFONUMsY0FBYztRQUNHLGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQU1oRCxDQUFDO0lBRUosY0FBYztJQUVkLFVBQVUsQ0FBQyxLQUFvQjtRQUMzQixJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELGNBQWM7SUFDZCxRQUFRO1FBQ0osSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFO1lBQ2xFLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxVQUFVLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDakUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDM0MsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGNBQWM7SUFDZCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2hDLENBQUM7OEdBckNRLHdCQUF3QjtrR0FBeEIsd0JBQXdCOzsyRkFBeEIsd0JBQXdCO2tCQURwQyxTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLDJDQUEyQyxFQUFFO3VIQUloRSxTQUFTO3NCQURSLEtBQUs7Z0JBS04sVUFBVTtzQkFEVCxLQUFLO2dCQWNOLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IERuZEtleWJvYXJkR3JvdXBEaXJlY3RpdmUgfSBmcm9tICcuLi9kbmQta2V5Ym9hcmQtZ3JvdXAvZG5kLWtleWJvYXJkLWdyb3VwLmRpcmVjdGl2ZSc7XG5cbi8qKlxuICogVGhpcyBkaXJlY3RpdmUgaXMgdXNlZCB0byBwcm92aWRlIGRyYWcgJiBkcm9wIHdpdGgga2V5Ym9hcmQgc3VwcG9ydC5cbiAqIEl0IHNob3VsZCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggZGlyZWN0aXZlIGZkRG5kS2V5Ym9hcmRHcm91cC5cbiAqIFdlIGFyZSB1c2luZyBfZ3JvdXBzIGZyb20gZmREbmRLZXlib2FyZEdyb3VwIGFuZCBhZGRpbmcgYSBwb3NzaWJpbGl0eSB0byBtb3ZlIGNhcmRzLlxuICogUGxlYXNlIHNlZSBleGFtcGxlIGJlbG93OlxuICogQENvbXBvbmVudCh7XG4gKiBzZWxlY3RvcjogJ2Nkay1kcmFnLWRyb3AtZXhhbXBsZScsXG4gKiB0ZW1wbGF0ZTogYDxkaXZcbiAqICAgICAgICAgICAgICAgY2RrRHJhZ0xpc3RHcm91cFxuICogICAgICAgICAgICAgICBmZERuZEtleWJvYXJkR3JvdXBcbiAqICAgICAgICAgICAgICAgW2dyb3Vwc109XCJncm91cHNcIlxuICogICAgICAgICAgID5cbiAqICAgICAgICAgICAgICAgPGRpdlxuICogICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGdyb3VwczsgbGV0IGdyb3VwSW5kZXggPSBpbmRleFwiXG4gKiAgICAgICAgICAgICAgICAgICBjZGtEcmFnTGlzdFxuICogICAgICAgICAgICAgICA+XG4gKiAgICAgICAgICAgICAgICAgICBHcm91cCAje3sgZ3JvdXBJbmRleCB9fVxuICogICAgICAgICAgICAgICAgICAgPGRpdlxuICogICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdyb3VwOyBsZXQgaW5kZXggPSBpbmRleFwiXG4gKiAgICAgICAgICAgICAgICAgICAgICAgY2RrRHJhZ1xuICogICAgICAgICAgICAgICAgICAgICAgIGZkRG5kS2V5Ym9hcmRJdGVtXG4gKiAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1JbmRleF09XCJpbmRleFwiXG4gKiAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwSW5kZXhdPVwiZ3JvdXBJbmRleFwiXG4gKiAgICAgICAgICAgICAgICAgICAgICAgW2RuZEtleWJvYXJkRGlzYWJsZWRdPVwiZmxhZyBmb3IgZGlzYWJsZS9lbmFibGUga2V5Ym9hcmQgbmF2aWdhdGlvbiBpZiBuZWVkZWRcIlxuICogICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gKiAgICAgICAgICAgICAgICAgICA+XG4gKiAgICAgICAgICAgICAgICAgICAgICAgSXRlbSAje3sgaXRlbSB9fVxuICogICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gKiAgICAgICAgICAgICAgIDwvZGl2PlxuICogICAgICAgICAgIDwvZGl2PmAsXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIENka0RyYWdEcm9wRXhhbXBsZSB7XG4gKiAgIGdyb3VwcyA9IFtcbiAqICAgICAgICBbMSwgMiwgM10sXG4gKiAgICAgICAgWzQsIDUsIDZdLFxuICogICAgICBdO1xuICogICB9XG4gKi9cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1tmZGtEbmRLZXlib2FyZEl0ZW1dLCBbZmREbmRLZXlib2FyZEl0ZW1dJyB9KVxuZXhwb3J0IGNsYXNzIERuZEtleWJvYXJkSXRlbURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICAvKiogaXRlbSBpbmRleCBpbiBncm91cChjb2x1bW4pICovXG4gICAgQElucHV0KClcbiAgICBpdGVtSW5kZXg6IG51bWJlcjtcblxuICAgIC8qKiBncm91cChjb2x1bW4pIGluZGV4ICovXG4gICAgQElucHV0KClcbiAgICBncm91cEluZGV4OiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZG5kR3JvdXA6IERuZEtleWJvYXJkR3JvdXBEaXJlY3RpdmUsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWZcbiAgICApIHt9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICAgIF9vbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZG5kR3JvdXAucHJvY2Vzc0RyYWdEcm9wKGV2ZW50LCB0aGlzLml0ZW1JbmRleCwgdGhpcy5ncm91cEluZGV4KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kbmRHcm91cC5fb25EbmRJdGVtRm9jdXMkLnN1YnNjcmliZSgoW2dyb3VwSW5kZXgsIGl0ZW1JbmRleF0pID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdyb3VwSW5kZXggPT09IGdyb3VwSW5kZXggJiYgdGhpcy5pdGVtSW5kZXggPT09IGl0ZW1JbmRleCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cbn1cbiJdfQ==
|