@fundamental-ngx/cdk 0.38.3-rc.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +89 -0
- package/data-source/README.md +7 -0
- package/data-source/base/abstract-data-provider.class.d.ts +43 -0
- package/data-source/base/base-data-source.class.d.ts +57 -0
- package/data-source/data-source.directive.d.ts +47 -0
- package/data-source/data-source.module.d.ts +7 -0
- package/data-source/helpers/apply-datasource-directive.d.ts +6 -0
- package/data-source/helpers/common.d.ts +7 -0
- package/data-source/helpers/is-datasource.d.ts +5 -0
- package/data-source/index.d.ts +8 -0
- package/data-source/models/data-source-provider.d.ts +23 -0
- package/data-source/models/data-source.d.ts +16 -0
- package/data-source/models/index.d.ts +3 -0
- package/data-source/models/matching-strategy.d.ts +10 -0
- package/data-source/tokens.d.ts +6 -0
- package/esm2020/data-source/base/abstract-data-provider.class.mjs +126 -0
- package/esm2020/data-source/base/base-data-source.class.mjs +99 -0
- package/esm2020/data-source/data-source.directive.mjs +96 -0
- package/esm2020/data-source/data-source.module.mjs +16 -0
- package/esm2020/data-source/fundamental-ngx-cdk-data-source.mjs +5 -0
- package/esm2020/data-source/helpers/apply-datasource-directive.mjs +7 -0
- package/esm2020/data-source/helpers/common.mjs +17 -0
- package/esm2020/data-source/helpers/is-datasource.mjs +7 -0
- package/esm2020/data-source/index.mjs +9 -0
- package/esm2020/data-source/models/data-source-provider.mjs +2 -0
- package/esm2020/data-source/models/data-source.mjs +2 -0
- package/esm2020/data-source/models/index.mjs +4 -0
- package/esm2020/data-source/models/matching-strategy.mjs +7 -0
- package/esm2020/data-source/tokens.mjs +6 -0
- package/esm2020/forms/cva/cva-control.class.mjs +43 -0
- package/esm2020/forms/cva/cva.directive.mjs +309 -0
- package/esm2020/forms/forms.module.mjs +16 -0
- package/esm2020/forms/fundamental-ngx-cdk-forms.mjs +5 -0
- package/esm2020/forms/helpers/state.mjs +6 -0
- package/esm2020/forms/index.mjs +13 -0
- package/esm2020/forms/models/cva.mjs +2 -0
- package/esm2020/forms/models/form-error.mjs +2 -0
- package/esm2020/forms/models/form-field-control.mjs +2 -0
- package/esm2020/forms/models/form-field.mjs +9 -0
- package/esm2020/forms/models/form-state.mjs +2 -0
- package/esm2020/forms/models/select-item.mjs +14 -0
- package/esm2020/forms/tokens/form-field-control.token.mjs +3 -0
- package/esm2020/forms/tokens/form-field.token.mjs +3 -0
- package/esm2020/fundamental-ngx-cdk.mjs +5 -0
- package/esm2020/fundamental-ngx.module.mjs +19 -0
- package/esm2020/public_api.mjs +5 -0
- package/esm2020/utils/abstract-fd-ngx-class.mjs +56 -0
- package/esm2020/utils/coercion/array.mjs +7 -0
- package/esm2020/utils/consts/error-messages.mjs +6 -0
- package/esm2020/utils/consts/index.mjs +5 -0
- package/esm2020/utils/consts/overflow-priority-score.mjs +8 -0
- package/esm2020/utils/consts/unicode-letters.regex.mjs +11 -0
- package/esm2020/utils/consts/unicode-numbers.regex.mjs +8 -0
- package/esm2020/utils/datatypes/color-accent.datatype.mjs +2 -0
- package/esm2020/utils/datatypes/hash.datatype.mjs +2 -0
- package/esm2020/utils/datatypes/index.mjs +4 -0
- package/esm2020/utils/datatypes/size.datatype.mjs +2 -0
- package/esm2020/utils/decorators/apply-css-class.decorator.mjs +60 -0
- package/esm2020/utils/decorators/apply-css-style.decorator.mjs +28 -0
- package/esm2020/utils/decorators/coerce-boolean.mjs +7 -0
- package/esm2020/utils/decorators/coerce-css-pixel.mjs +4 -0
- package/esm2020/utils/decorators/index.mjs +6 -0
- package/esm2020/utils/decorators/setter-alternator.mjs +18 -0
- package/esm2020/utils/deprecated-selector.class.mjs +20 -0
- package/esm2020/utils/directives/auto-complete/auto-complete.directive.mjs +136 -0
- package/esm2020/utils/directives/auto-complete/auto-complete.module.mjs +17 -0
- package/esm2020/utils/directives/clicked/clicked-behavior.module.mjs +45 -0
- package/esm2020/utils/directives/clicked/clicked-event.plugin.mjs +74 -0
- package/esm2020/utils/directives/clicked/clicked.directive.mjs +52 -0
- package/esm2020/utils/directives/clicked/fdk-clicked-provider.service.mjs +49 -0
- package/esm2020/utils/directives/clicked/index.mjs +4 -0
- package/esm2020/utils/directives/disabled/default-disabled-view-modifier.mjs +12 -0
- package/esm2020/utils/directives/disabled/disabled-behavior.directive.mjs +102 -0
- package/esm2020/utils/directives/disabled/disabled-behavior.interface.mjs +2 -0
- package/esm2020/utils/directives/disabled/disabled-behavior.module.mjs +16 -0
- package/esm2020/utils/directives/disabled/disabled-view-modifier.interface.mjs +2 -0
- package/esm2020/utils/directives/disabled/disabled.observer.mjs +35 -0
- package/esm2020/utils/directives/disabled/fdk-disabled-provider.service.mjs +101 -0
- package/esm2020/utils/directives/disabled/fdk-disabled.token.mjs +3 -0
- package/esm2020/utils/directives/disabled/index.mjs +9 -0
- package/esm2020/utils/directives/disabled/set-disabled-state.mjs +16 -0
- package/esm2020/utils/directives/focus-key-manager/focus-key-manager-helpers.module.mjs +33 -0
- package/esm2020/utils/directives/focus-key-manager/focus-key-manager-item.directive.mjs +98 -0
- package/esm2020/utils/directives/focus-key-manager/focus-key-manager-list.directive.mjs +113 -0
- package/esm2020/utils/directives/focus-key-manager/focus-key-manager.tokens.mjs +3 -0
- package/esm2020/utils/directives/focus-key-manager/index.mjs +5 -0
- package/esm2020/utils/directives/focusable-item/default-focusable-item-view-modifier.mjs +14 -0
- package/esm2020/utils/directives/focusable-item/fdk-focusable-item-provider.service.mjs +97 -0
- package/esm2020/utils/directives/focusable-item/focusable-item-view-modifier.interface.mjs +2 -0
- package/esm2020/utils/directives/focusable-item/focusable-item.directive.mjs +106 -0
- package/esm2020/utils/directives/focusable-item/focusable-item.module.mjs +16 -0
- package/esm2020/utils/directives/focusable-item/focusable.observer.mjs +47 -0
- package/esm2020/utils/directives/focusable-item/focusable.tokens.mjs +3 -0
- package/esm2020/utils/directives/focusable-item/index.mjs +9 -0
- package/esm2020/utils/directives/focusable-item/is-element-focusable-by-default.mjs +32 -0
- package/esm2020/utils/directives/focusable-item/set-focusable.mjs +12 -0
- package/esm2020/utils/directives/focusable-list/focusable-list.directive.mjs +79 -0
- package/esm2020/utils/directives/focusable-list/focusable-list.module.mjs +17 -0
- package/esm2020/utils/directives/focusable-list/focusable-list.service.mjs +54 -0
- package/esm2020/utils/directives/focusable-list/index.mjs +4 -0
- package/esm2020/utils/directives/ignore-click-on-selection/ignore-click-on-selection.directive.mjs +79 -0
- package/esm2020/utils/directives/ignore-click-on-selection/ignore-click-on-selection.module.mjs +16 -0
- package/esm2020/utils/directives/ignore-click-on-selection/tokens.mjs +3 -0
- package/esm2020/utils/directives/index.mjs +31 -0
- package/esm2020/utils/directives/initial-focus/initial-focus.directive.mjs +117 -0
- package/esm2020/utils/directives/initial-focus/initial-focus.module.mjs +16 -0
- package/esm2020/utils/directives/line-clamp/line-clamp.directive.mjs +263 -0
- package/esm2020/utils/directives/line-clamp/line-clamp.module.mjs +32 -0
- package/esm2020/utils/directives/only-digits/only-digits.directive.mjs +218 -0
- package/esm2020/utils/directives/only-digits/only-digits.module.mjs +16 -0
- package/esm2020/utils/directives/overflow-list/overflow-list-item.directive.mjs +42 -0
- package/esm2020/utils/directives/overflow-list/overflow-list.directive.mjs +140 -0
- package/esm2020/utils/directives/overflow-list/overflow-list.module.mjs +33 -0
- package/esm2020/utils/directives/readonly/default-readonly-view-modifier.mjs +12 -0
- package/esm2020/utils/directives/readonly/fdk-readonly-provider.service.mjs +102 -0
- package/esm2020/utils/directives/readonly/fdk-readonly.token.mjs +3 -0
- package/esm2020/utils/directives/readonly/index.mjs +10 -0
- package/esm2020/utils/directives/readonly/readonly-behavior.directive.mjs +97 -0
- package/esm2020/utils/directives/readonly/readonly-behavior.interface.mjs +2 -0
- package/esm2020/utils/directives/readonly/readonly-behavior.module.mjs +16 -0
- package/esm2020/utils/directives/readonly/readonly-view-modifier.interface.mjs +2 -0
- package/esm2020/utils/directives/readonly/readonly.observer.mjs +33 -0
- package/esm2020/utils/directives/readonly/set-readonly-state.mjs +14 -0
- package/esm2020/utils/directives/repeat/repeat.directive.mjs +65 -0
- package/esm2020/utils/directives/repeat/repeat.module.mjs +16 -0
- package/esm2020/utils/directives/resize/resize-handle.directive.mjs +42 -0
- package/esm2020/utils/directives/resize/resize.directive.mjs +231 -0
- package/esm2020/utils/directives/resize/resize.module.mjs +17 -0
- package/esm2020/utils/directives/selectable-list/index.mjs +8 -0
- package/esm2020/utils/directives/selectable-list/select-component-root.token.mjs +3 -0
- package/esm2020/utils/directives/selectable-list/selectable-item.directive.mjs +147 -0
- package/esm2020/utils/directives/selectable-list/selectable-item.token.mjs +3 -0
- package/esm2020/utils/directives/selectable-list/selectable-list.directive.mjs +93 -0
- package/esm2020/utils/directives/selectable-list/selectable-list.module.mjs +17 -0
- package/esm2020/utils/directives/selectable-list/selectable-list.tokens.mjs +3 -0
- package/esm2020/utils/directives/selectable-list/selection.service.mjs +135 -0
- package/esm2020/utils/directives/template/template.directive.mjs +49 -0
- package/esm2020/utils/directives/template/template.module.mjs +16 -0
- package/esm2020/utils/directives/truncate/truncate.directive.mjs +96 -0
- package/esm2020/utils/directives/truncate/truncate.module.mjs +16 -0
- package/esm2020/utils/drag-and-drop/dnd-item/dnd-item.directive.mjs +255 -0
- package/esm2020/utils/drag-and-drop/dnd-keyboard-group/dnd-keyboard-group.directive.mjs +88 -0
- package/esm2020/utils/drag-and-drop/dnd-keyboard-item/dnd-keyboard-item.directive.mjs +83 -0
- package/esm2020/utils/drag-and-drop/dnd-list/dnd-list.directive.mjs +220 -0
- package/esm2020/utils/drag-and-drop/dnd.interfaces.mjs +2 -0
- package/esm2020/utils/drag-and-drop/drag-and-drop.module.mjs +22 -0
- package/esm2020/utils/drag-and-drop/index.mjs +8 -0
- package/esm2020/utils/drag-and-drop/tokens.mjs +4 -0
- package/esm2020/utils/dynamic-component/dynamic-component-config.mjs +2 -0
- package/esm2020/utils/dynamic-component/dynamic-component-container.mjs +21 -0
- package/esm2020/utils/dynamic-component/dynamic-component-injector.mjs +20 -0
- package/esm2020/utils/dynamic-component/dynamic-component.service.mjs +90 -0
- package/esm2020/utils/dynamic-component/index.mjs +5 -0
- package/esm2020/utils/functions/consumer-provider-factory.mjs +12 -0
- package/esm2020/utils/functions/element-size.mjs +23 -0
- package/esm2020/utils/functions/get-document-font-size.mjs +5 -0
- package/esm2020/utils/functions/index.mjs +13 -0
- package/esm2020/utils/functions/intersection-observable.mjs +26 -0
- package/esm2020/utils/functions/is-compact-density.mjs +11 -0
- package/esm2020/utils/functions/key-util.mjs +77 -0
- package/esm2020/utils/functions/module-deprecations-provider.mjs +18 -0
- package/esm2020/utils/functions/parser-file-size.mjs +37 -0
- package/esm2020/utils/functions/random-color-accent.mjs +5 -0
- package/esm2020/utils/functions/resize-observable.mjs +33 -0
- package/esm2020/utils/functions/scroll.mjs +19 -0
- package/esm2020/utils/functions/uuidv4-generator.mjs +12 -0
- package/esm2020/utils/fundamental-ngx-cdk-utils.mjs +5 -0
- package/esm2020/utils/helpers/get-native-element.mjs +18 -0
- package/esm2020/utils/helpers/index.mjs +3 -0
- package/esm2020/utils/helpers/range-selector.mjs +117 -0
- package/esm2020/utils/index.mjs +19 -0
- package/esm2020/utils/interfaces/content-density.mjs +2 -0
- package/esm2020/utils/interfaces/css-class-builder.interface.mjs +2 -0
- package/esm2020/utils/interfaces/css-style-builder.interface.mjs +2 -0
- package/esm2020/utils/interfaces/has-element-ref.interface.mjs +2 -0
- package/esm2020/utils/interfaces/index.mjs +8 -0
- package/esm2020/utils/interfaces/keyboard-support-item.interface.mjs +2 -0
- package/esm2020/utils/interfaces/module-deprecation.interface.mjs +2 -0
- package/esm2020/utils/interfaces/require.interface.mjs +2 -0
- package/esm2020/utils/list-item/list-item-utils.mjs +3 -0
- package/esm2020/utils/models/nullable.mjs +2 -0
- package/esm2020/utils/pipes/displayFn.pipe.mjs +17 -0
- package/esm2020/utils/pipes/filter-strings.pipe.mjs +30 -0
- package/esm2020/utils/pipes/index.mjs +10 -0
- package/esm2020/utils/pipes/is-compact.pipe.mjs +16 -0
- package/esm2020/utils/pipes/pipe.module.mjs +55 -0
- package/esm2020/utils/pipes/safe.pipe.mjs +36 -0
- package/esm2020/utils/pipes/search-highlight.pipe.mjs +31 -0
- package/esm2020/utils/pipes/truncate.pipe.mjs +17 -0
- package/esm2020/utils/pipes/two-digits.pipe.mjs +22 -0
- package/esm2020/utils/pipes/value-by-path.pipe.mjs +16 -0
- package/esm2020/utils/services/content-density.service.mjs +34 -0
- package/esm2020/utils/services/destroyed.service.mjs +20 -0
- package/esm2020/utils/services/focus-trap.service.mjs +92 -0
- package/esm2020/utils/services/index.mjs +11 -0
- package/esm2020/utils/services/keyboard-support/keyboard-support.service.mjs +73 -0
- package/esm2020/utils/services/local-storage.service.mjs +38 -0
- package/esm2020/utils/services/observers/attribute.observer.mjs +81 -0
- package/esm2020/utils/services/resize-observer.service.mjs +94 -0
- package/esm2020/utils/services/rtl.service.mjs +29 -0
- package/esm2020/utils/services/tabbable-element.service.mjs +43 -0
- package/esm2020/utils/services/themes.service.mjs +133 -0
- package/esm2020/utils/tokens/module-deprecations.token.mjs +3 -0
- package/esm2020/utils/typecheck.mjs +75 -0
- package/esm2020/utils/utils.module.mjs +136 -0
- package/fesm2015/fundamental-ngx-cdk-data-source.mjs +378 -0
- package/fesm2015/fundamental-ngx-cdk-data-source.mjs.map +1 -0
- package/fesm2015/fundamental-ngx-cdk-forms.mjs +404 -0
- package/fesm2015/fundamental-ngx-cdk-forms.mjs.map +1 -0
- package/fesm2015/fundamental-ngx-cdk-utils.mjs +5767 -0
- package/fesm2015/fundamental-ngx-cdk-utils.mjs.map +1 -0
- package/fesm2015/fundamental-ngx-cdk.mjs +30 -0
- package/fesm2015/fundamental-ngx-cdk.mjs.map +1 -0
- package/fesm2020/fundamental-ngx-cdk-data-source.mjs +374 -0
- package/fesm2020/fundamental-ngx-cdk-data-source.mjs.map +1 -0
- package/fesm2020/fundamental-ngx-cdk-forms.mjs +399 -0
- package/fesm2020/fundamental-ngx-cdk-forms.mjs.map +1 -0
- package/fesm2020/fundamental-ngx-cdk-utils.mjs +5724 -0
- package/fesm2020/fundamental-ngx-cdk-utils.mjs.map +1 -0
- package/fesm2020/fundamental-ngx-cdk.mjs +30 -0
- package/fesm2020/fundamental-ngx-cdk.mjs.map +1 -0
- package/forms/README.md +7 -0
- package/forms/cva/cva-control.class.d.ts +26 -0
- package/forms/cva/cva.directive.d.ts +178 -0
- package/forms/forms.module.d.ts +7 -0
- package/forms/helpers/state.d.ts +3 -0
- package/forms/index.d.ts +12 -0
- package/forms/models/cva.d.ts +4 -0
- package/forms/models/form-error.d.ts +31 -0
- package/forms/models/form-field-control.d.ts +61 -0
- package/forms/models/form-field.d.ts +30 -0
- package/forms/models/form-state.d.ts +1 -0
- package/forms/models/select-item.d.ts +47 -0
- package/forms/tokens/form-field-control.token.d.ts +3 -0
- package/forms/tokens/form-field.token.d.ts +3 -0
- package/fundamental-ngx-cdk-v0.38.3-rc.4.tgz +0 -0
- package/fundamental-ngx.module.d.ts +9 -0
- package/index.d.ts +5 -0
- package/package.json +80 -0
- package/public_api.d.ts +4 -0
- package/utils/README.md +7 -0
- package/utils/abstract-fd-ngx-class.d.ts +27 -0
- package/utils/coercion/array.d.ts +2 -0
- package/utils/consts/error-messages.d.ts +3 -0
- package/utils/consts/index.d.ts +4 -0
- package/utils/consts/overflow-priority-score.d.ts +2 -0
- package/utils/consts/unicode-letters.regex.d.ts +7 -0
- package/utils/consts/unicode-numbers.regex.d.ts +6 -0
- package/utils/datatypes/color-accent.datatype.d.ts +1 -0
- package/utils/datatypes/hash.datatype.d.ts +3 -0
- package/utils/datatypes/index.d.ts +3 -0
- package/utils/datatypes/size.datatype.d.ts +1 -0
- package/utils/decorators/apply-css-class.decorator.d.ts +10 -0
- package/utils/decorators/apply-css-style.decorator.d.ts +10 -0
- package/utils/decorators/coerce-boolean.d.ts +4 -0
- package/utils/decorators/coerce-css-pixel.d.ts +1 -0
- package/utils/decorators/index.d.ts +5 -0
- package/utils/decorators/setter-alternator.d.ts +4 -0
- package/utils/deprecated-selector.class.d.ts +14 -0
- package/utils/directives/auto-complete/auto-complete.directive.d.ts +58 -0
- package/utils/directives/auto-complete/auto-complete.module.d.ts +7 -0
- package/utils/directives/clicked/clicked-behavior.module.d.ts +12 -0
- package/utils/directives/clicked/clicked-event.plugin.d.ts +22 -0
- package/utils/directives/clicked/clicked.directive.d.ts +21 -0
- package/utils/directives/clicked/fdk-clicked-provider.service.d.ts +24 -0
- package/utils/directives/clicked/index.d.ts +3 -0
- package/utils/directives/disabled/default-disabled-view-modifier.d.ts +9 -0
- package/utils/directives/disabled/disabled-behavior.directive.d.ts +35 -0
- package/utils/directives/disabled/disabled-behavior.interface.d.ts +7 -0
- package/utils/directives/disabled/disabled-behavior.module.d.ts +7 -0
- package/utils/directives/disabled/disabled-view-modifier.interface.d.ts +3 -0
- package/utils/directives/disabled/disabled.observer.d.ts +18 -0
- package/utils/directives/disabled/fdk-disabled-provider.service.d.ts +35 -0
- package/utils/directives/disabled/fdk-disabled.token.d.ts +3 -0
- package/utils/directives/disabled/index.d.ts +8 -0
- package/utils/directives/disabled/set-disabled-state.d.ts +4 -0
- package/utils/directives/focus-key-manager/focus-key-manager-helpers.module.d.ts +8 -0
- package/utils/directives/focus-key-manager/focus-key-manager-item.directive.d.ts +37 -0
- package/utils/directives/focus-key-manager/focus-key-manager-list.directive.d.ts +42 -0
- package/utils/directives/focus-key-manager/focus-key-manager.tokens.d.ts +3 -0
- package/utils/directives/focus-key-manager/index.d.ts +4 -0
- package/utils/directives/focusable-item/default-focusable-item-view-modifier.d.ts +11 -0
- package/utils/directives/focusable-item/fdk-focusable-item-provider.service.d.ts +43 -0
- package/utils/directives/focusable-item/focusable-item-view-modifier.interface.d.ts +3 -0
- package/utils/directives/focusable-item/focusable-item.directive.d.ts +37 -0
- package/utils/directives/focusable-item/focusable-item.module.d.ts +7 -0
- package/utils/directives/focusable-item/focusable.observer.d.ts +18 -0
- package/utils/directives/focusable-item/focusable.tokens.d.ts +2 -0
- package/utils/directives/focusable-item/index.d.ts +8 -0
- package/utils/directives/focusable-item/is-element-focusable-by-default.d.ts +4 -0
- package/utils/directives/focusable-item/set-focusable.d.ts +4 -0
- package/utils/directives/focusable-list/focusable-list.directive.d.ts +25 -0
- package/utils/directives/focusable-list/focusable-list.module.d.ts +8 -0
- package/utils/directives/focusable-list/focusable-list.service.d.ts +35 -0
- package/utils/directives/focusable-list/index.d.ts +3 -0
- package/utils/directives/ignore-click-on-selection/ignore-click-on-selection.directive.d.ts +22 -0
- package/utils/directives/ignore-click-on-selection/ignore-click-on-selection.module.d.ts +7 -0
- package/utils/directives/ignore-click-on-selection/tokens.d.ts +2 -0
- package/utils/directives/index.d.ts +30 -0
- package/utils/directives/initial-focus/initial-focus.directive.d.ts +43 -0
- package/utils/directives/initial-focus/initial-focus.module.d.ts +7 -0
- package/utils/directives/line-clamp/line-clamp.directive.d.ts +101 -0
- package/utils/directives/line-clamp/line-clamp.module.d.ts +7 -0
- package/utils/directives/only-digits/only-digits.directive.d.ts +44 -0
- package/utils/directives/only-digits/only-digits.module.d.ts +7 -0
- package/utils/directives/overflow-list/overflow-list-item.directive.d.ts +14 -0
- package/utils/directives/overflow-list/overflow-list.directive.d.ts +62 -0
- package/utils/directives/overflow-list/overflow-list.module.d.ts +8 -0
- package/utils/directives/readonly/default-readonly-view-modifier.d.ts +9 -0
- package/utils/directives/readonly/fdk-readonly-provider.service.d.ts +35 -0
- package/utils/directives/readonly/fdk-readonly.token.d.ts +2 -0
- package/utils/directives/readonly/index.d.ts +9 -0
- package/utils/directives/readonly/readonly-behavior.directive.d.ts +32 -0
- package/utils/directives/readonly/readonly-behavior.interface.d.ts +7 -0
- package/utils/directives/readonly/readonly-behavior.module.d.ts +7 -0
- package/utils/directives/readonly/readonly-view-modifier.interface.d.ts +3 -0
- package/utils/directives/readonly/readonly.observer.d.ts +18 -0
- package/utils/directives/readonly/set-readonly-state.d.ts +4 -0
- package/utils/directives/repeat/repeat.directive.d.ts +28 -0
- package/utils/directives/repeat/repeat.module.d.ts +7 -0
- package/utils/directives/resize/resize-handle.directive.d.ts +14 -0
- package/utils/directives/resize/resize.directive.d.ts +57 -0
- package/utils/directives/resize/resize.module.d.ts +8 -0
- package/utils/directives/selectable-list/index.d.ts +7 -0
- package/utils/directives/selectable-list/select-component-root.token.d.ts +10 -0
- package/utils/directives/selectable-list/selectable-item.directive.d.ts +47 -0
- package/utils/directives/selectable-list/selectable-item.token.d.ts +11 -0
- package/utils/directives/selectable-list/selectable-list.directive.d.ts +33 -0
- package/utils/directives/selectable-list/selectable-list.module.d.ts +8 -0
- package/utils/directives/selectable-list/selectable-list.tokens.d.ts +2 -0
- package/utils/directives/selectable-list/selection.service.d.ts +65 -0
- package/utils/directives/template/template.directive.d.ts +18 -0
- package/utils/directives/template/template.module.d.ts +7 -0
- package/utils/directives/truncate/truncate.directive.d.ts +51 -0
- package/utils/directives/truncate/truncate.module.d.ts +7 -0
- package/utils/drag-and-drop/dnd-item/dnd-item.directive.d.ts +86 -0
- package/utils/drag-and-drop/dnd-keyboard-group/dnd-keyboard-group.directive.d.ts +32 -0
- package/utils/drag-and-drop/dnd-keyboard-item/dnd-keyboard-item.directive.d.ts +61 -0
- package/utils/drag-and-drop/dnd-list/dnd-list.directive.d.ts +65 -0
- package/utils/drag-and-drop/dnd.interfaces.d.ts +33 -0
- package/utils/drag-and-drop/drag-and-drop.module.d.ts +12 -0
- package/utils/drag-and-drop/index.d.ts +7 -0
- package/utils/drag-and-drop/tokens.d.ts +3 -0
- package/utils/dynamic-component/dynamic-component-config.d.ts +6 -0
- package/utils/dynamic-component/dynamic-component-container.d.ts +19 -0
- package/utils/dynamic-component/dynamic-component-injector.d.ts +13 -0
- package/utils/dynamic-component/dynamic-component.service.d.ts +46 -0
- package/utils/dynamic-component/index.d.ts +4 -0
- package/utils/functions/consumer-provider-factory.d.ts +5 -0
- package/utils/functions/element-size.d.ts +12 -0
- package/utils/functions/get-document-font-size.d.ts +2 -0
- package/utils/functions/index.d.ts +12 -0
- package/utils/functions/intersection-observable.d.ts +8 -0
- package/utils/functions/is-compact-density.d.ts +7 -0
- package/utils/functions/key-util.d.ts +16 -0
- package/utils/functions/module-deprecations-provider.d.ts +5 -0
- package/utils/functions/parser-file-size.d.ts +2 -0
- package/utils/functions/random-color-accent.d.ts +3 -0
- package/utils/functions/resize-observable.d.ts +8 -0
- package/utils/functions/scroll.d.ts +7 -0
- package/utils/functions/uuidv4-generator.d.ts +2 -0
- package/utils/helpers/get-native-element.d.ts +13 -0
- package/utils/helpers/index.d.ts +2 -0
- package/utils/helpers/range-selector.d.ts +84 -0
- package/utils/index.d.ts +18 -0
- package/utils/interfaces/content-density.d.ts +1 -0
- package/utils/interfaces/css-class-builder.interface.d.ts +6 -0
- package/utils/interfaces/css-style-builder.interface.d.ts +5 -0
- package/utils/interfaces/has-element-ref.interface.d.ts +5 -0
- package/utils/interfaces/index.d.ts +7 -0
- package/utils/interfaces/keyboard-support-item.interface.d.ts +6 -0
- package/utils/interfaces/module-deprecation.interface.d.ts +8 -0
- package/utils/interfaces/require.interface.d.ts +6 -0
- package/utils/list-item/list-item-utils.d.ts +7 -0
- package/utils/models/nullable.d.ts +6 -0
- package/utils/pipes/displayFn.pipe.d.ts +8 -0
- package/utils/pipes/filter-strings.pipe.d.ts +16 -0
- package/utils/pipes/index.d.ts +9 -0
- package/utils/pipes/is-compact.pipe.d.ts +9 -0
- package/utils/pipes/pipe.module.d.ts +14 -0
- package/utils/pipes/safe.pipe.d.ts +12 -0
- package/utils/pipes/search-highlight.pipe.d.ts +8 -0
- package/utils/pipes/truncate.pipe.d.ts +8 -0
- package/utils/pipes/two-digits.pipe.d.ts +8 -0
- package/utils/pipes/value-by-path.pipe.d.ts +8 -0
- package/utils/services/content-density.service.d.ts +19 -0
- package/utils/services/destroyed.service.d.ts +11 -0
- package/utils/services/focus-trap.service.d.ts +43 -0
- package/utils/services/index.d.ts +10 -0
- package/utils/services/keyboard-support/keyboard-support.service.d.ts +34 -0
- package/utils/services/local-storage.service.d.ts +13 -0
- package/utils/services/observers/attribute.observer.d.ts +26 -0
- package/utils/services/resize-observer.service.d.ts +34 -0
- package/utils/services/rtl.service.d.ts +12 -0
- package/utils/services/tabbable-element.service.d.ts +12 -0
- package/utils/services/themes.service.d.ts +43 -0
- package/utils/tokens/module-deprecations.token.d.ts +3 -0
- package/utils/typecheck.d.ts +47 -0
- package/utils/utils.module.d.ts +23 -0
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import { Directive, ElementRef, EventEmitter, forwardRef, HostBinding, Input, Output } from '@angular/core';
|
|
2
|
+
import { DragDrop } from '@angular/cdk/drag-drop';
|
|
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
|
+
/** @hidden */
|
|
10
|
+
constructor(elementRef, _dragDrop) {
|
|
11
|
+
this.elementRef = elementRef;
|
|
12
|
+
this._dragDrop = _dragDrop;
|
|
13
|
+
/**
|
|
14
|
+
* Whether to apply "fd-dnd-item" class.
|
|
15
|
+
* @default true
|
|
16
|
+
*/
|
|
17
|
+
this.applyDragItemClass = true;
|
|
18
|
+
/** Event thrown when the element is moved by 1px */
|
|
19
|
+
this.moved = new EventEmitter();
|
|
20
|
+
/** Event thrown when the element is released */
|
|
21
|
+
this.released = new EventEmitter();
|
|
22
|
+
/** Event thrown when the element is started to be dragged */
|
|
23
|
+
this.started = new EventEmitter();
|
|
24
|
+
/**
|
|
25
|
+
* Defines if the item is prevented from being moved by other elements.
|
|
26
|
+
* So nothing can be placed just before and just after it
|
|
27
|
+
*/
|
|
28
|
+
this.stickInPlace = false;
|
|
29
|
+
/** Class added to element, when it's dragged. */
|
|
30
|
+
this.classWhenElementDragged = 'fd-dnd-on-drag';
|
|
31
|
+
/** Defines if every element in list is draggable */
|
|
32
|
+
this.listDraggable = true;
|
|
33
|
+
/** @hidden */
|
|
34
|
+
this._draggable = true;
|
|
35
|
+
/** @hidden */
|
|
36
|
+
this._subscriptions = new Subscription();
|
|
37
|
+
}
|
|
38
|
+
/** Defines if element is draggable */
|
|
39
|
+
set draggable(draggable) {
|
|
40
|
+
this._draggable = draggable;
|
|
41
|
+
this.changeCDKDragState();
|
|
42
|
+
}
|
|
43
|
+
/** @hidden */
|
|
44
|
+
getElementCoordinates(isBefore) {
|
|
45
|
+
/** Takes distance from the beginning of window page */
|
|
46
|
+
const rect = this.elementRef.nativeElement.getBoundingClientRect();
|
|
47
|
+
const position = isBefore ? 'before' : 'after';
|
|
48
|
+
/** Vertically distance is counted by distance from top of the side + half of the element height */
|
|
49
|
+
return {
|
|
50
|
+
x: rect.left,
|
|
51
|
+
position,
|
|
52
|
+
y: rect.top,
|
|
53
|
+
stickToPosition: this.stickInPlace,
|
|
54
|
+
width: rect.width,
|
|
55
|
+
height: rect.height
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/** @hidden */
|
|
59
|
+
ngAfterContentInit() {
|
|
60
|
+
this._setCDKDrag();
|
|
61
|
+
this._listenElementEvents();
|
|
62
|
+
}
|
|
63
|
+
/** @hidden */
|
|
64
|
+
ngOnDestroy() {
|
|
65
|
+
this._subscriptions.unsubscribe();
|
|
66
|
+
}
|
|
67
|
+
/** @hidden */
|
|
68
|
+
onCdkMove(position) {
|
|
69
|
+
this.moved.emit(position);
|
|
70
|
+
}
|
|
71
|
+
/** @hidden */
|
|
72
|
+
onCdkDragReleased() {
|
|
73
|
+
/** Remove class which is added, when element is dragged */
|
|
74
|
+
this.elementRef.nativeElement.classList.remove(this.classWhenElementDragged);
|
|
75
|
+
this.released.emit();
|
|
76
|
+
/** Resets the position of element. */
|
|
77
|
+
this._dragRef.reset();
|
|
78
|
+
/** Removes placeholder element */
|
|
79
|
+
this.removePlaceholder();
|
|
80
|
+
}
|
|
81
|
+
/** @hidden */
|
|
82
|
+
onCdkDragStart() {
|
|
83
|
+
/** Adds class */
|
|
84
|
+
this.elementRef.nativeElement.classList.add(this.classWhenElementDragged);
|
|
85
|
+
if (!this._placeholderElement) {
|
|
86
|
+
this.createPlaceholder();
|
|
87
|
+
}
|
|
88
|
+
this.started.emit();
|
|
89
|
+
}
|
|
90
|
+
/** @hidden */
|
|
91
|
+
removePlaceholder() {
|
|
92
|
+
if (this._placeholderElement && this._placeholderElement.parentNode) {
|
|
93
|
+
// IE11 workaround
|
|
94
|
+
this._placeholderElement.parentNode.removeChild(this._placeholderElement);
|
|
95
|
+
this._placeholderElement = null;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/** @hidden */
|
|
99
|
+
removeLine() {
|
|
100
|
+
if (this._lineElement && this._lineElement.parentNode) {
|
|
101
|
+
// IE11 workaround
|
|
102
|
+
this._lineElement.parentNode.removeChild(this._lineElement);
|
|
103
|
+
this._lineElement = null;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/** @hidden */
|
|
107
|
+
removeReplaceIndicator() {
|
|
108
|
+
if (this._replaceIndicator && this._replaceIndicator.parentNode) {
|
|
109
|
+
// IE11 workaround
|
|
110
|
+
this._replaceIndicator.parentNode.removeChild(this._replaceIndicator);
|
|
111
|
+
this._replaceIndicator = null;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/** @hidden */
|
|
115
|
+
createReplaceIndicator() {
|
|
116
|
+
this._replaceIndicator = document.createElement('DIV');
|
|
117
|
+
this._replaceIndicator.classList.add('fd-replace-indicator');
|
|
118
|
+
let container = this.elementRef.nativeElement;
|
|
119
|
+
if (this.containerSelector) {
|
|
120
|
+
const newContainer = this.elementRef.nativeElement.querySelector(this.containerSelector);
|
|
121
|
+
if (newContainer) {
|
|
122
|
+
container = newContainer;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
container.appendChild(this._replaceIndicator);
|
|
126
|
+
}
|
|
127
|
+
/** @hidden */
|
|
128
|
+
createLine(position, gridMode) {
|
|
129
|
+
/** Creating of line element */
|
|
130
|
+
this._lineElement = document.createElement('div');
|
|
131
|
+
this._lineElement.classList.add('drop-area__line');
|
|
132
|
+
if (gridMode) {
|
|
133
|
+
this._lineElement.classList.add('drop-area__line--vertical');
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
this._lineElement.classList.add('drop-area__line--horizontal');
|
|
137
|
+
}
|
|
138
|
+
if (position === 'after') {
|
|
139
|
+
this._lineElement.classList.add('after');
|
|
140
|
+
}
|
|
141
|
+
if (position === 'before') {
|
|
142
|
+
this._lineElement.classList.add('before');
|
|
143
|
+
}
|
|
144
|
+
/** Putting element to the container */
|
|
145
|
+
let container = this.elementRef.nativeElement;
|
|
146
|
+
if (this.containerSelector) {
|
|
147
|
+
const newContainer = this.elementRef.nativeElement.querySelector(this.containerSelector);
|
|
148
|
+
if (newContainer) {
|
|
149
|
+
container = newContainer;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
container.appendChild(this._lineElement);
|
|
153
|
+
}
|
|
154
|
+
/** @hidden */
|
|
155
|
+
changeCDKDragState() {
|
|
156
|
+
if (this._dragRef) {
|
|
157
|
+
this._dragRef.disabled = !(this._draggable && this.listDraggable);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/** @hidden */
|
|
161
|
+
createPlaceholder() {
|
|
162
|
+
const placeholder = this.elementRef.nativeElement.cloneNode(true);
|
|
163
|
+
/** Cloning container element */
|
|
164
|
+
this._placeholderElement = placeholder;
|
|
165
|
+
placeholder.classList.add('fd-dnd-placeholder');
|
|
166
|
+
this._setPlaceholderStyles();
|
|
167
|
+
/** Including element to the container
|
|
168
|
+
* IE11 equivalent to `this.element.nativeElement.after(clone);`
|
|
169
|
+
*/
|
|
170
|
+
this._placeAfter(this.elementRef.nativeElement, placeholder);
|
|
171
|
+
}
|
|
172
|
+
/** @hidden */
|
|
173
|
+
_setPlaceholderStyles() {
|
|
174
|
+
const offset = this._getOffsetToParent(this.elementRef.nativeElement);
|
|
175
|
+
if (!offset || !this._placeholderElement) {
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
this._placeholderElement.style.top = offset.y + 'px';
|
|
179
|
+
this._placeholderElement.style.left = offset.x + 'px';
|
|
180
|
+
this._placeholderElement.style.position = 'absolute';
|
|
181
|
+
this._placeholderElement.style.zIndex = '0';
|
|
182
|
+
this._placeholderElement.style.opacity = '0.3';
|
|
183
|
+
this._placeholderElement.style.width = this.elementRef.nativeElement.offsetWidth + 'px';
|
|
184
|
+
this._placeholderElement.style.height = this.elementRef.nativeElement.offsetHeight + 'px';
|
|
185
|
+
}
|
|
186
|
+
/** @hidden */
|
|
187
|
+
_getOffsetToParent(element) {
|
|
188
|
+
const parentElement = element.parentElement;
|
|
189
|
+
if (!parentElement) {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
const parentTop = parentElement.getBoundingClientRect().top;
|
|
193
|
+
const parentLeft = parentElement.getBoundingClientRect().left;
|
|
194
|
+
return {
|
|
195
|
+
x: Math.abs(element.getBoundingClientRect().left - parentLeft),
|
|
196
|
+
y: Math.abs(element.getBoundingClientRect().top - parentTop)
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
/** @hidden */
|
|
200
|
+
_setCDKDrag() {
|
|
201
|
+
this._dragRef = this._dragDrop.createDrag(this.elementRef);
|
|
202
|
+
this._dragRef.disabled = !this._draggable;
|
|
203
|
+
this._subscriptions.add(this._dragRef.moved.subscribe((event) => this.onCdkMove(event.pointerPosition)));
|
|
204
|
+
this._subscriptions.add(this._dragRef.released.subscribe(() => this.onCdkDragReleased()));
|
|
205
|
+
this._subscriptions.add(this._dragRef.started.subscribe(() => this.onCdkDragStart()));
|
|
206
|
+
}
|
|
207
|
+
/** IE11 equivalent of Node.after() Method */
|
|
208
|
+
_placeAfter(element, cloneNode) {
|
|
209
|
+
const docFrag = document.createDocumentFragment();
|
|
210
|
+
docFrag.appendChild(cloneNode);
|
|
211
|
+
element.parentNode?.insertBefore(docFrag, element.nextSibling);
|
|
212
|
+
}
|
|
213
|
+
/** @hidden */
|
|
214
|
+
_listenElementEvents() {
|
|
215
|
+
this._subscriptions.add(this.released
|
|
216
|
+
.pipe(
|
|
217
|
+
// postpone blur
|
|
218
|
+
delay(0))
|
|
219
|
+
.subscribe(() => {
|
|
220
|
+
if (this.containerSelector) {
|
|
221
|
+
this.elementRef.nativeElement.children[0].blur();
|
|
222
|
+
}
|
|
223
|
+
this.elementRef.nativeElement.blur();
|
|
224
|
+
}));
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
DndItemDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DndItemDirective, deps: [{ token: i0.ElementRef }, { token: i1.DragDrop }], target: i0.ɵɵFactoryTarget.Directive });
|
|
228
|
+
DndItemDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: DndItemDirective, selector: "[fdkDndItem], [fd-dnd-item]", inputs: { 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 });
|
|
229
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DndItemDirective, decorators: [{
|
|
230
|
+
type: Directive,
|
|
231
|
+
args: [{
|
|
232
|
+
selector: '[fdkDndItem], [fd-dnd-item]',
|
|
233
|
+
providers: [DragDrop, { provide: DND_ITEM, useExisting: forwardRef(() => DndItemDirective) }]
|
|
234
|
+
}]
|
|
235
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.DragDrop }]; }, propDecorators: { applyDragItemClass: [{
|
|
236
|
+
type: Input
|
|
237
|
+
}, {
|
|
238
|
+
type: HostBinding,
|
|
239
|
+
args: ['class.fd-dnd-item']
|
|
240
|
+
}], containerSelector: [{
|
|
241
|
+
type: Input
|
|
242
|
+
}], moved: [{
|
|
243
|
+
type: Output
|
|
244
|
+
}], released: [{
|
|
245
|
+
type: Output
|
|
246
|
+
}], started: [{
|
|
247
|
+
type: Output
|
|
248
|
+
}], stickInPlace: [{
|
|
249
|
+
type: Input
|
|
250
|
+
}], draggable: [{
|
|
251
|
+
type: Input
|
|
252
|
+
}], classWhenElementDragged: [{
|
|
253
|
+
type: Input
|
|
254
|
+
}] } });
|
|
255
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5kLWl0ZW0uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi91dGlscy9kcmFnLWFuZC1kcm9wL2RuZC1pdGVtL2RuZC1pdGVtLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxLQUFLLEVBRUwsTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQVcsTUFBTSx3QkFBd0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7QUFNckMsTUFBTSxPQUFPLGdCQUFnQjtJQWtFekIsY0FBYztJQUNkLFlBQW1CLFVBQXNCLEVBQVUsU0FBbUI7UUFBbkQsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUFVLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFsRXRFOzs7V0FHRztRQUdILHVCQUFrQixHQUFHLElBQUksQ0FBQztRQU0xQixvREFBb0Q7UUFFM0MsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO1FBRXJELGdEQUFnRDtRQUV2QyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUU3Qyw2REFBNkQ7UUFFcEQsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFNUM7OztXQUdHO1FBRUgsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFTckIsaURBQWlEO1FBRWpELDRCQUF1QixHQUFHLGdCQUFnQixDQUFDO1FBRTNDLG9EQUFvRDtRQUNwRCxrQkFBYSxHQUFHLElBQUksQ0FBQztRQU9yQixjQUFjO1FBQ04sZUFB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QUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7aUJBQ2hHO3dIQVFHLGtCQUFrQjtzQkFGakIsS0FBSzs7c0JBQ0wsV0FBVzt1QkFBQyxtQkFBbUI7Z0JBS2hDLGlCQUFpQjtzQkFEaEIsS0FBSztnQkFLRyxLQUFLO3NCQURiLE1BQU07Z0JBS0UsUUFBUTtzQkFEaEIsTUFBTTtnQkFLRSxPQUFPO3NCQURmLE1BQU07Z0JBUVAsWUFBWTtzQkFEWCxLQUFLO2dCQUtGLFNBQVM7c0JBRFosS0FBSztnQkFRTix1QkFBdUI7c0JBRHRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE91dHB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERyYWdEcm9wLCBEcmFnUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBEbmRJdGVtLCBFbGVtZW50Q2hvcmQsIEVsZW1lbnRQb3NpdGlvbiwgTGlua1Bvc2l0aW9uIH0gZnJvbSAnLi4vZG5kLmludGVyZmFjZXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERORF9JVEVNIH0gZnJvbSAnLi4vdG9rZW5zJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbZmRrRG5kSXRlbV0sIFtmZC1kbmQtaXRlbV0nLFxuICAgIHByb3ZpZGVyczogW0RyYWdEcm9wLCB7IHByb3ZpZGU6IERORF9JVEVNLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEbmRJdGVtRGlyZWN0aXZlKSB9XVxufSlcbmV4cG9ydCBjbGFzcyBEbmRJdGVtRGlyZWN0aXZlIGltcGxlbWVudHMgRG5kSXRlbSwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGFwcGx5IFwiZmQtZG5kLWl0ZW1cIiBjbGFzcy5cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkLWRuZC1pdGVtJylcbiAgICBhcHBseURyYWdJdGVtQ2xhc3MgPSB0cnVlO1xuXG4gICAgLyoqIENvbnRhaW5lciBzZWxlY3RvciAqL1xuICAgIEBJbnB1dCgpXG4gICAgY29udGFpbmVyU2VsZWN0b3I/OiBzdHJpbmc7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duIHdoZW4gdGhlIGVsZW1lbnQgaXMgbW92ZWQgYnkgMXB4ICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgbW92ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEVsZW1lbnRQb3NpdGlvbj4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gd2hlbiB0aGUgZWxlbWVudCBpcyByZWxlYXNlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHJlbGVhc2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEV2ZW50IHRocm93biB3aGVuIHRoZSBlbGVtZW50IGlzIHN0YXJ0ZWQgdG8gYmUgZHJhZ2dlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHN0YXJ0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiAgRGVmaW5lcyBpZiB0aGUgaXRlbSBpcyBwcmV2ZW50ZWQgZnJvbSBiZWluZyBtb3ZlZCBieSBvdGhlciBlbGVtZW50cy5cbiAgICAgKiBTbyBub3RoaW5nIGNhbiBiZSBwbGFjZWQganVzdCBiZWZvcmUgYW5kIGp1c3QgYWZ0ZXIgaXRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHN0aWNrSW5QbGFjZSA9IGZhbHNlO1xuXG4gICAgLyoqIERlZmluZXMgaWYgZWxlbWVudCBpcyBkcmFnZ2FibGUgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBkcmFnZ2FibGUoZHJhZ2dhYmxlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2RyYWdnYWJsZSA9IGRyYWdnYWJsZTtcbiAgICAgICAgdGhpcy5jaGFuZ2VDREtEcmFnU3RhdGUoKTtcbiAgICB9XG5cbiAgICAvKiogQ2xhc3MgYWRkZWQgdG8gZWxlbWVudCwgd2hlbiBpdCdzIGRyYWdnZWQuICovXG4gICAgQElucHV0KClcbiAgICBjbGFzc1doZW5FbGVtZW50RHJhZ2dlZCA9ICdmZC1kbmQtb24tZHJhZyc7XG5cbiAgICAvKiogRGVmaW5lcyBpZiBldmVyeSBlbGVtZW50IGluIGxpc3QgaXMgZHJhZ2dhYmxlICovXG4gICAgbGlzdERyYWdnYWJsZSA9IHRydWU7XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIERyYWcgcmVmZXJlbmNlLCBvYmplY3QgY3JlYXRlZCBmcm9tIERORCBDREsgU2VydmljZVxuICAgICAqL1xuICAgIHByaXZhdGUgX2RyYWdSZWY6IERyYWdSZWY7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RyYWdnYWJsZSA9IHRydWU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3BsYWNlaG9sZGVyRWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saW5lRWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZXBsYWNlSW5kaWNhdG9yOiBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIF9kcmFnRHJvcDogRHJhZ0Ryb3ApIHt9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldEVsZW1lbnRDb29yZGluYXRlcyhpc0JlZm9yZTogYm9vbGVhbik6IEVsZW1lbnRDaG9yZCB7XG4gICAgICAgIC8qKiBUYWtlcyBkaXN0YW5jZSBmcm9tIHRoZSBiZWdpbm5pbmcgb2Ygd2luZG93IHBhZ2UgKi9cbiAgICAgICAgY29uc3QgcmVjdDogRE9NUmVjdCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uOiBMaW5rUG9zaXRpb24gPSBpc0JlZm9yZSA/ICdiZWZvcmUnIDogJ2FmdGVyJztcblxuICAgICAgICAvKiogVmVydGljYWxseSBkaXN0YW5jZSBpcyBjb3VudGVkIGJ5IGRpc3RhbmNlIGZyb20gdG9wIG9mIHRoZSBzaWRlICsgaGFsZiBvZiB0aGUgZWxlbWVudCBoZWlnaHQgKi9cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IHJlY3QubGVmdCxcbiAgICAgICAgICAgIHBvc2l0aW9uLFxuICAgICAgICAgICAgeTogcmVjdC50b3AsXG4gICAgICAgICAgICBzdGlja1RvUG9zaXRpb246IHRoaXMuc3RpY2tJblBsYWNlLFxuICAgICAgICAgICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NldENES0RyYWcoKTtcbiAgICAgICAgdGhpcy5fbGlzdGVuRWxlbWVudEV2ZW50cygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uQ2RrTW92ZShwb3NpdGlvbjogRWxlbWVudFBvc2l0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMubW92ZWQuZW1pdChwb3NpdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbkNka0RyYWdSZWxlYXNlZCgpOiB2b2lkIHtcbiAgICAgICAgLyoqIFJlbW92ZSBjbGFzcyB3aGljaCBpcyBhZGRlZCwgd2hlbiBlbGVtZW50IGlzIGRyYWdnZWQgKi9cbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLmNsYXNzV2hlbkVsZW1lbnREcmFnZ2VkKTtcbiAgICAgICAgdGhpcy5yZWxlYXNlZC5lbWl0KCk7XG5cbiAgICAgICAgLyoqIFJlc2V0cyB0aGUgcG9zaXRpb24gb2YgZWxlbWVudC4gKi9cbiAgICAgICAgdGhpcy5fZHJhZ1JlZi5yZXNldCgpO1xuXG4gICAgICAgIC8qKiBSZW1vdmVzIHBsYWNlaG9sZGVyIGVsZW1lbnQgKi9cbiAgICAgICAgdGhpcy5yZW1vdmVQbGFjZWhvbGRlcigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25DZGtEcmFnU3RhcnQoKTogdm9pZCB7XG4gICAgICAgIC8qKiBBZGRzIGNsYXNzICovXG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc1doZW5FbGVtZW50RHJhZ2dlZCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLl9wbGFjZWhvbGRlckVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlUGxhY2Vob2xkZXIoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXJ0ZWQuZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVtb3ZlUGxhY2Vob2xkZXIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9wbGFjZWhvbGRlckVsZW1lbnQgJiYgdGhpcy5fcGxhY2Vob2xkZXJFbGVtZW50LnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgIC8vIElFMTEgd29ya2Fyb3VuZFxuICAgICAgICAgICAgdGhpcy5fcGxhY2Vob2xkZXJFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fcGxhY2Vob2xkZXJFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuX3BsYWNlaG9sZGVyRWxlbWVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlbW92ZUxpbmUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9saW5lRWxlbWVudCAmJiB0aGlzLl9saW5lRWxlbWVudC5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAvLyBJRTExIHdvcmthcm91bmRcbiAgICAgICAgICAgIHRoaXMuX2xpbmVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fbGluZUVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5fbGluZUVsZW1lbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZW1vdmVSZXBsYWNlSW5kaWNhdG9yKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fcmVwbGFjZUluZGljYXRvciAmJiB0aGlzLl9yZXBsYWNlSW5kaWNhdG9yLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgIC8vIElFMTEgd29ya2Fyb3VuZFxuICAgICAgICAgICAgdGhpcy5fcmVwbGFjZUluZGljYXRvci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX3JlcGxhY2VJbmRpY2F0b3IpO1xuICAgICAgICAgICAgdGhpcy5fcmVwbGFjZUluZGljYXRvciA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNyZWF0ZVJlcGxhY2VJbmRpY2F0b3IoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlcGxhY2VJbmRpY2F0b3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTtcbiAgICAgICAgdGhpcy5fcmVwbGFjZUluZGljYXRvci5jbGFzc0xpc3QuYWRkKCdmZC1yZXBsYWNlLWluZGljYXRvcicpO1xuXG4gICAgICAgIGxldCBjb250YWluZXIgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKHRoaXMuY29udGFpbmVyU2VsZWN0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NvbnRhaW5lciA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5jb250YWluZXJTZWxlY3Rvcik7XG4gICAgICAgICAgICBpZiAobmV3Q29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyID0gbmV3Q29udGFpbmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX3JlcGxhY2VJbmRpY2F0b3IpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY3JlYXRlTGluZShwb3NpdGlvbjogTGlua1Bvc2l0aW9uLCBncmlkTW9kZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICAvKiogQ3JlYXRpbmcgb2YgbGluZSBlbGVtZW50ICovXG4gICAgICAgIHRoaXMuX2xpbmVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRoaXMuX2xpbmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2Ryb3AtYXJlYV9fbGluZScpO1xuXG4gICAgICAgIGlmIChncmlkTW9kZSkge1xuICAgICAgICAgICAgdGhpcy5fbGluZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZHJvcC1hcmVhX19saW5lLS12ZXJ0aWNhbCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbGluZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZHJvcC1hcmVhX19saW5lLS1ob3Jpem9udGFsJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSAnYWZ0ZXInKSB7XG4gICAgICAgICAgICB0aGlzLl9saW5lRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdhZnRlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gJ2JlZm9yZScpIHtcbiAgICAgICAgICAgIHRoaXMuX2xpbmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2JlZm9yZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqIFB1dHRpbmcgZWxlbWVudCB0byB0aGUgY29udGFpbmVyICovXG4gICAgICAgIGxldCBjb250YWluZXIgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKHRoaXMuY29udGFpbmVyU2VsZWN0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NvbnRhaW5lciA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5jb250YWluZXJTZWxlY3Rvcik7XG4gICAgICAgICAgICBpZiAobmV3Q29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyID0gbmV3Q29udGFpbmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX2xpbmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNoYW5nZUNES0RyYWdTdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2RyYWdSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuX2RyYWdSZWYuZGlzYWJsZWQgPSAhKHRoaXMuX2RyYWdnYWJsZSAmJiB0aGlzLmxpc3REcmFnZ2FibGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGNyZWF0ZVBsYWNlaG9sZGVyKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwbGFjZWhvbGRlciA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgLyoqIENsb25pbmcgY29udGFpbmVyIGVsZW1lbnQgKi9cbiAgICAgICAgdGhpcy5fcGxhY2Vob2xkZXJFbGVtZW50ID0gcGxhY2Vob2xkZXI7XG5cbiAgICAgICAgcGxhY2Vob2xkZXIuY2xhc3NMaXN0LmFkZCgnZmQtZG5kLXBsYWNlaG9sZGVyJyk7XG4gICAgICAgIHRoaXMuX3NldFBsYWNlaG9sZGVyU3R5bGVzKCk7XG5cbiAgICAgICAgLyoqIEluY2x1ZGluZyBlbGVtZW50IHRvIHRoZSBjb250YWluZXJcbiAgICAgICAgICogIElFMTEgZXF1aXZhbGVudCB0byBgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYWZ0ZXIoY2xvbmUpO2BcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX3BsYWNlQWZ0ZXIodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHBsYWNlaG9sZGVyKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFBsYWNlaG9sZGVyU3R5bGVzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSB0aGlzLl9nZXRPZmZzZXRUb1BhcmVudCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgaWYgKCFvZmZzZXQgfHwgIXRoaXMuX3BsYWNlaG9sZGVyRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcGxhY2Vob2xkZXJFbGVtZW50LnN0eWxlLnRvcCA9IG9mZnNldC55ICsgJ3B4JztcbiAgICAgICAgdGhpcy5fcGxhY2Vob2xkZXJFbGVtZW50LnN0eWxlLmxlZnQgPSBvZmZzZXQueCArICdweCc7XG4gICAgICAgIHRoaXMuX3BsYWNlaG9sZGVyRWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgICAgIHRoaXMuX3BsYWNlaG9sZGVyRWxlbWVudC5zdHlsZS56SW5kZXggPSAnMCc7XG4gICAgICAgIHRoaXMuX3BsYWNlaG9sZGVyRWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gJzAuMyc7XG5cbiAgICAgICAgdGhpcy5fcGxhY2Vob2xkZXJFbGVtZW50LnN0eWxlLndpZHRoID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggKyAncHgnO1xuICAgICAgICB0aGlzLl9wbGFjZWhvbGRlckVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0ICsgJ3B4JztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldE9mZnNldFRvUGFyZW50KGVsZW1lbnQ6IEVsZW1lbnQpOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmVudFRvcCA9IHBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgICAgICBjb25zdCBwYXJlbnRMZWZ0ID0gcGFyZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiBNYXRoLmFicyhlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSBwYXJlbnRMZWZ0KSxcbiAgICAgICAgICAgIHk6IE1hdGguYWJzKGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC0gcGFyZW50VG9wKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0Q0RLRHJhZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZHJhZ1JlZiA9IHRoaXMuX2RyYWdEcm9wLmNyZWF0ZURyYWcodGhpcy5lbGVtZW50UmVmKTtcbiAgICAgICAgdGhpcy5fZHJhZ1JlZi5kaXNhYmxlZCA9ICF0aGlzLl9kcmFnZ2FibGU7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKHRoaXMuX2RyYWdSZWYubW92ZWQuc3Vic2NyaWJlKChldmVudCkgPT4gdGhpcy5vbkNka01vdmUoZXZlbnQucG9pbnRlclBvc2l0aW9uKSkpO1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZCh0aGlzLl9kcmFnUmVmLnJlbGVhc2VkLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uQ2RrRHJhZ1JlbGVhc2VkKCkpKTtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5fZHJhZ1JlZi5zdGFydGVkLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uQ2RrRHJhZ1N0YXJ0KCkpKTtcbiAgICB9XG5cbiAgICAvKiogSUUxMSBlcXVpdmFsZW50IG9mIE5vZGUuYWZ0ZXIoKSBNZXRob2QgKi9cbiAgICBwcml2YXRlIF9wbGFjZUFmdGVyKGVsZW1lbnQ6IEVsZW1lbnQsIGNsb25lTm9kZTogTm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBkb2NGcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgICBkb2NGcmFnLmFwcGVuZENoaWxkKGNsb25lTm9kZSk7XG4gICAgICAgIGVsZW1lbnQucGFyZW50Tm9kZT8uaW5zZXJ0QmVmb3JlKGRvY0ZyYWcsIGVsZW1lbnQubmV4dFNpYmxpbmcpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuRWxlbWVudEV2ZW50cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLnJlbGVhc2VkXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIC8vIHBvc3Rwb25lIGJsdXJcbiAgICAgICAgICAgICAgICAgICAgZGVsYXkoMClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRhaW5lclNlbGVjdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jaGlsZHJlblswXS5ibHVyKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,88 @@
|
|
|
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
|
+
}
|
|
70
|
+
DndKeyboardGroupDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DndKeyboardGroupDirective, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.RtlService, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
|
|
71
|
+
DndKeyboardGroupDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: DndKeyboardGroupDirective, selector: "[fdkDndKeyboardGroup], [fdDndKeyboardGroup]", inputs: { groups: "groups", disableKeyboardDragDrop: "disableKeyboardDragDrop", orientation: "orientation", customMoveFn: "customMoveFn", customTransferFn: "customTransferFn" }, ngImport: i0 });
|
|
72
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DndKeyboardGroupDirective, decorators: [{
|
|
73
|
+
type: Directive,
|
|
74
|
+
args: [{ selector: '[fdkDndKeyboardGroup], [fdDndKeyboardGroup]' }]
|
|
75
|
+
}], ctorParameters: function () { return [{ 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5kLWtleWJvYXJkLWdyb3VwLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2RrL3NyYy9saWIvdXRpbHMvZHJhZy1hbmQtZHJvcC9kbmQta2V5Ym9hcmQtZ3JvdXAvZG5kLWtleWJvYXJkLWdyb3VwLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7OztBQUV4RDs7O0dBR0c7QUFFSCxNQUFNLE9BQU8seUJBQXlCO0lBMEJsQyxjQUFjO0lBQ2QsWUFBNkIsSUFBdUIsRUFBK0IsV0FBdUI7UUFBN0UsU0FBSSxHQUFKLElBQUksQ0FBbUI7UUFBK0IsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUF0QjFHLHFDQUFxQztRQUVyQyw0QkFBdUIsR0FBRyxLQUFLLENBQUM7UUFFaEMsdURBQXVEO1FBRXZELGdCQUFXLEdBQThCLFVBQVUsQ0FBQztRQUVwRCxjQUFjO1FBQ2QscUJBQWdCLEdBQUcsSUFBSSxPQUFPLEVBQW9CLENBQUM7UUFFbkQsZ0VBQWdFO1FBRWhFLGlCQUFZLEdBQUcsQ0FBQyxLQUFZLEVBQUUsU0FBaUIsRUFBRSxPQUFlLEVBQVEsRUFBRSxDQUN0RSxlQUFlLENBQUMsS0FBSyxF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QWMsRUFBRSxDQUFDO1lBRXZCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ2pEO0lBQ0wsQ0FBQztJQUVELHdEQUF3RDtJQUNoRCxhQUFhLENBQUMsVUFBa0IsRUFBRSxTQUFpQjtRQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRTFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDOztzSEE3RVEseUJBQXlCOzBHQUF6Qix5QkFBeUI7MkZBQXpCLHlCQUF5QjtrQkFEckMsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSw2Q0FBNkMsRUFBRTs7MEJBNEJYLFFBQVE7NENBeEIvRCxNQUFNO3NCQURMLEtBQUs7Z0JBS04sdUJBQXVCO3NCQUR0QixLQUFLO2dCQUtOLFdBQVc7c0JBRFYsS0FBSztnQkFRTixZQUFZO3NCQURYLEtBQUs7Z0JBTU4sZ0JBQWdCO3NCQURmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtb3ZlSXRlbUluQXJyYXksIHRyYW5zZmVyQXJyYXlJdGVtIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBET1dOX0FSUk9XLCBMRUZUX0FSUk9XLCBSSUdIVF9BUlJPVywgVVBfQVJST1cgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgSW5wdXQsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBLZXlVdGlsIH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7IFJ0bFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ydGwuc2VydmljZSc7XG5cbi8qKlxuICogVGhpcyBkaXJlY3RpdmUgaXMgdXNlZCB0byBwcm92aWRlIGRyYWcgJiBkcm9wIHdpdGgga2V5Ym9hcmQgc3VwcG9ydC5cbiAqIEl0IHNob3VsZCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggZGlyZWN0aXZlIGZkRG5kS2V5Ym9hcmRJdGVtLlxuICovXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbZmRrRG5kS2V5Ym9hcmRHcm91cF0sIFtmZERuZEtleWJvYXJkR3JvdXBdJyB9KVxuZXhwb3J0IGNsYXNzIERuZEtleWJvYXJkR3JvdXBEaXJlY3RpdmUge1xuICAgIC8qKiBHcm91cCBvZiBpdGVtcyAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ3JvdXBzOiBhbnlbXVtdO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gZGlzYWJsZSBkcmFnICYgZHJvcCAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZUtleWJvYXJkRHJhZ0Ryb3AgPSBmYWxzZTtcblxuICAgIC8qKiBVc2VkIHRvIGFwcGx5IGluZGV4ZXMgd2hlbiBtb3ZpbmcgYmV0d2VlbiBncm91cHMgKi9cbiAgICBASW5wdXQoKVxuICAgIG9yaWVudGF0aW9uOiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnID0gJ3ZlcnRpY2FsJztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uRG5kSXRlbUZvY3VzJCA9IG5ldyBTdWJqZWN0PFtudW1iZXIsIG51bWJlcl0+KCk7XG5cbiAgICAvKiogQ3VzdG9tIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBtb3ZpbmcgaXRlbSBpbnNpZGUgdGhlIGdyb3VwICovXG4gICAgQElucHV0KClcbiAgICBjdXN0b21Nb3ZlRm4gPSAoZ3JvdXA6IGFueVtdLCBmcm9tSW5kZXg6IG51bWJlciwgdG9JbmRleDogbnVtYmVyKTogdm9pZCA9PlxuICAgICAgICBtb3ZlSXRlbUluQXJyYXkoZ3JvdXAsIGZyb21JbmRleCwgdG9JbmRleCk7XG5cbiAgICAvKiogQ3VzdG9tIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBtb3ZpbmcgaXRlbSBiZXR3ZWVuIGdyb3VwcyAqL1xuICAgIEBJbnB1dCgpXG4gICAgY3VzdG9tVHJhbnNmZXJGbiA9IChncm91cDogYW55W10sIG5leHRHcm91cDogYW55W10sIGZyb21JbmRleDogbnVtYmVyLCB0b0luZGV4OiBudW1iZXIpOiB2b2lkID0+XG4gICAgICAgIHRyYW5zZmVyQXJyYXlJdGVtKGdyb3VwLCBuZXh0R3JvdXAsIGZyb21JbmRleCwgdG9JbmRleCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgX3J0bFNlcnZpY2U6IFJ0bFNlcnZpY2UpIHt9XG5cbiAgICAvKiogUHJvY2VzcyBkcmFnICYgZHJvcCAqL1xuICAgIHByb2Nlc3NEcmFnRHJvcChldmVudDogS2V5Ym9hcmRFdmVudCwgaXRlbUluZGV4OiBudW1iZXIsIGdyb3VwSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlS2V5Ym9hcmREcmFnRHJvcCB8fCAhZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc1J0bCA9IHRoaXMuX3J0bFNlcnZpY2UucnRsLnZhbHVlO1xuXG4gICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5ncm91cHNbZ3JvdXBJbmRleF07XG4gICAgICAgIGNvbnN0IGluZGV4SW5OZXh0R3JvdXAgPSB0aGlzLm9yaWVudGF0aW9uID09PSAndmVydGljYWwnID8gMCA6IGl0ZW1JbmRleDtcblxuICAgICAgICBjb25zdCBuZXh0R3JvdXBFeGlzdHMgPSB0aGlzLmdyb3Vwcy5sZW5ndGggPiBncm91cEluZGV4ICsgMTtcbiAgICAgICAgY29uc3QgcHJldkdyb3VwRXhpc3RzID0gISFncm91cEluZGV4O1xuXG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgUklHSFRfQVJST1cpICYmIChpc1J0bCA/IHByZXZHcm91cEV4aXN0cyA6IG5leHRHcm91cEV4aXN0cykpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIGNvbnN0IG5leHRHcm91cEluZGV4ID0gZ3JvdXBJbmRleCArIChpc1J0bCA/IC0xIDogMSk7XG4gICAgICAgICAgICBjb25zdCBuZXh0R3JvdXAgPSB0aGlzLmdyb3Vwc1tuZXh0R3JvdXBJbmRleF07XG5cbiAgICAgICAgICAgIHRoaXMuY3VzdG9tVHJhbnNmZXJGbihncm91cCwgbmV4dEdyb3VwLCBpdGVtSW5kZXgsIGluZGV4SW5OZXh0R3JvdXApO1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNEbmRJdGVtKG5leHRHcm91cEluZGV4LCBpbmRleEluTmV4dEdyb3VwKTtcbiAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgTEVGVF9BUlJPVykgJiYgKGlzUnRsID8gbmV4dEdyb3VwRXhpc3RzIDogcHJldkdyb3VwRXhpc3RzKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgY29uc3QgbmV4dEdyb3VwSW5kZXggPSBncm91cEluZGV4ICsgKGlzUnRsID8gMSA6IC0xKTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRHcm91cCA9IHRoaXMuZ3JvdXBzW25leHRHcm91cEluZGV4XTtcblxuICAgICAgICAgICAgdGhpcy5jdXN0b21UcmFuc2ZlckZuKGdyb3VwLCBuZXh0R3JvdXAsIGl0ZW1JbmRleCwgaW5kZXhJbk5leHRHcm91cCk7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c0RuZEl0ZW0obmV4dEdyb3VwSW5kZXgsIGluZGV4SW5OZXh0R3JvdXApO1xuICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBET1dOX0FSUk9XKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgdGhpcy5jdXN0b21Nb3ZlRm4oZ3JvdXAsIGl0ZW1JbmRleCwgaXRlbUluZGV4ICsgMSk7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c0RuZEl0ZW0oZ3JvdXBJbmRleCwgaXRlbUluZGV4ICsgMSk7XG4gICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFVQX0FSUk9XKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgdGhpcy5jdXN0b21Nb3ZlRm4oZ3JvdXAsIGl0ZW1JbmRleCwgaXRlbUluZGV4IC0gMSk7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c0RuZEl0ZW0oZ3JvdXBJbmRleCwgaXRlbUluZGV4IC0gMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBGb2N1cyBhZnRlciBtb3ZpbmcgZWxlbWVudHMgd2l0aCBrZXlib2FyZCAqL1xuICAgIHByaXZhdGUgX2ZvY3VzRG5kSXRlbShncm91cEluZGV4OiBudW1iZXIsIGl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5fb25EbmRJdGVtRm9jdXMkLm5leHQoW2dyb3VwSW5kZXgsIGl0ZW1JbmRleF0pO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,83 @@
|
|
|
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
|
+
ngOnInit() {
|
|
54
|
+
this._dndGroup._onDndItemFocus$.subscribe(([groupIndex, itemIndex]) => {
|
|
55
|
+
if (this.groupIndex === groupIndex && this.itemIndex === itemIndex) {
|
|
56
|
+
this._elementRef.nativeElement.focus();
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/** @hidden */
|
|
61
|
+
ngOnDestroy() {
|
|
62
|
+
this._onDestroy$.next();
|
|
63
|
+
this._onDestroy$.complete();
|
|
64
|
+
}
|
|
65
|
+
/** @hidden */
|
|
66
|
+
_onKeyDown(event) {
|
|
67
|
+
this._dndGroup.processDragDrop(event, this.itemIndex, this.groupIndex);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
DndKeyboardItemDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DndKeyboardItemDirective, deps: [{ token: i1.DndKeyboardGroupDirective }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
71
|
+
DndKeyboardItemDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: DndKeyboardItemDirective, selector: "[fdkDndKeyboardItem], [fdDndKeyboardItem]", inputs: { itemIndex: "itemIndex", groupIndex: "groupIndex" }, host: { listeners: { "keydown": "_onKeyDown($event)" } }, ngImport: i0 });
|
|
72
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DndKeyboardItemDirective, decorators: [{
|
|
73
|
+
type: Directive,
|
|
74
|
+
args: [{ selector: '[fdkDndKeyboardItem], [fdDndKeyboardItem]' }]
|
|
75
|
+
}], ctorParameters: function () { return [{ 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5kLWtleWJvYXJkLWl0ZW0uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi91dGlscy9kcmFnLWFuZC1kcm9wL2RuZC1rZXlib2FyZC1pdGVtL2RuZC1rZXlib2FyZC1pdGVtLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDOzs7QUFFL0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQ0c7QUFFSCxNQUFNLE9BQU8sd0JBQXdCO0lBWWpDLGNBQWM7SUFDZCxZQUE2QixTQUFvQyxFQUFtQixXQUF1QjtRQUE5RSxjQUFTLEdBQVQsU0FBUyxDQUEyQjtRQUFtQixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUozRyxjQUFjO1FBQ0csZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRzJELENBQUM7SUFFL0csY0FBYztJQUNkLFFBQVE7UUFDSixJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUU7WUFDbEUsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFVBQVUsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRTtnQkFDaEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDMUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxjQUFjO0lBQ2QsV0FBVztRQUNQLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsY0FBYztJQUVkLFVBQVUsQ0FBQyxLQUFvQjtRQUMzQixJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0UsQ0FBQzs7cUhBbENRLHdCQUF3Qjt5R0FBeEIsd0JBQXdCOzJGQUF4Qix3QkFBd0I7a0JBRHBDLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsMkNBQTJDLEVBQUU7eUlBSWhFLFNBQVM7c0JBRFIsS0FBSztnQkFLTixVQUFVO3NCQURULEtBQUs7Z0JBMEJOLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IERuZEtleWJvYXJkR3JvdXBEaXJlY3RpdmUgfSBmcm9tICcuLi9kbmQta2V5Ym9hcmQtZ3JvdXAvZG5kLWtleWJvYXJkLWdyb3VwLmRpcmVjdGl2ZSc7XG5cbi8qKlxuICogVGhpcyBkaXJlY3RpdmUgaXMgdXNlZCB0byBwcm92aWRlIGRyYWcgJiBkcm9wIHdpdGgga2V5Ym9hcmQgc3VwcG9ydC5cbiAqIEl0IHNob3VsZCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggZGlyZWN0aXZlIGZkRG5kS2V5Ym9hcmRHcm91cC5cbiAqIFdlIGFyZSB1c2luZyBfZ3JvdXBzIGZyb20gZmREbmRLZXlib2FyZEdyb3VwIGFuZCBhZGRpbmcgYSBwb3NzaWJpbGl0eSB0byBtb3ZlIGNhcmRzLlxuICogUGxlYXNlIHNlZSBleGFtcGxlIGJlbG93OlxuICogQENvbXBvbmVudCh7XG4gKiBzZWxlY3RvcjogJ2Nkay1kcmFnLWRyb3AtZXhhbXBsZScsXG4gKiB0ZW1wbGF0ZTogYDxkaXZcbiAqICAgICAgICAgICAgICAgY2RrRHJhZ0xpc3RHcm91cFxuICogICAgICAgICAgICAgICBmZERuZEtleWJvYXJkR3JvdXBcbiAqICAgICAgICAgICAgICAgW2dyb3Vwc109XCJncm91cHNcIlxuICogICAgICAgICAgID5cbiAqICAgICAgICAgICAgICAgPGRpdlxuICogICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGdyb3VwczsgbGV0IGdyb3VwSW5kZXggPSBpbmRleFwiXG4gKiAgICAgICAgICAgICAgICAgICBjZGtEcmFnTGlzdFxuICogICAgICAgICAgICAgICA+XG4gKiAgICAgICAgICAgICAgICAgICBHcm91cCAje3sgZ3JvdXBJbmRleCB9fVxuICogICAgICAgICAgICAgICAgICAgPGRpdlxuICogICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdyb3VwOyBsZXQgaW5kZXggPSBpbmRleFwiXG4gKiAgICAgICAgICAgICAgICAgICAgICAgY2RrRHJhZ1xuICogICAgICAgICAgICAgICAgICAgICAgIGZkRG5kS2V5Ym9hcmRJdGVtXG4gKiAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1JbmRleF09XCJpbmRleFwiXG4gKiAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwSW5kZXhdPVwiZ3JvdXBJbmRleFwiXG4gKiAgICAgICAgICAgICAgICAgICAgICAgW2RuZEtleWJvYXJkRGlzYWJsZWRdPVwiZmxhZyBmb3IgZGlzYWJsZS9lbmFibGUga2V5Ym9hcmQgbmF2aWdhdGlvbiBpZiBuZWVkZWRcIlxuICogICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gKiAgICAgICAgICAgICAgICAgICA+XG4gKiAgICAgICAgICAgICAgICAgICAgICAgSXRlbSAje3sgaXRlbSB9fVxuICogICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gKiAgICAgICAgICAgICAgIDwvZGl2PlxuICogICAgICAgICAgIDwvZGl2PmAsXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIENka0RyYWdEcm9wRXhhbXBsZSB7XG4gKiAgIGdyb3VwcyA9IFtcbiAqICAgICAgICBbMSwgMiwgM10sXG4gKiAgICAgICAgWzQsIDUsIDZdLFxuICogICAgICBdO1xuICogICB9XG4gKi9cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1tmZGtEbmRLZXlib2FyZEl0ZW1dLCBbZmREbmRLZXlib2FyZEl0ZW1dJyB9KVxuZXhwb3J0IGNsYXNzIERuZEtleWJvYXJkSXRlbURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICAvKiogaXRlbSBpbmRleCBpbiBncm91cChjb2x1bW4pICovXG4gICAgQElucHV0KClcbiAgICBpdGVtSW5kZXg6IG51bWJlcjtcblxuICAgIC8qKiBncm91cChjb2x1bW4pIGluZGV4ICovXG4gICAgQElucHV0KClcbiAgICBncm91cEluZGV4OiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9kbmRHcm91cDogRG5kS2V5Ym9hcmRHcm91cERpcmVjdGl2ZSwgcHJpdmF0ZSByZWFkb25seSBfZWxlbWVudFJlZjogRWxlbWVudFJlZikge31cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RuZEdyb3VwLl9vbkRuZEl0ZW1Gb2N1cyQuc3Vic2NyaWJlKChbZ3JvdXBJbmRleCwgaXRlbUluZGV4XSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ3JvdXBJbmRleCA9PT0gZ3JvdXBJbmRleCAmJiB0aGlzLml0ZW1JbmRleCA9PT0gaXRlbUluZGV4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBfb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RuZEdyb3VwLnByb2Nlc3NEcmFnRHJvcChldmVudCwgdGhpcy5pdGVtSW5kZXgsIHRoaXMuZ3JvdXBJbmRleCk7XG4gICAgfVxufVxuIl19
|