@clr/angular 13.3.2 → 13.4.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.
@@ -0,0 +1,120 @@
1
+ /*
2
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
3
+ * This software is released under MIT license.
4
+ * The full license information can be found in LICENSE in the root directory of this project.
5
+ */
6
+ import { Directive, HostListener, Inject, Input } from '@angular/core';
7
+ import { focusElement, getFlattenedFocusableItems, initializeKeyListItems, setActiveKeyListItem, validKeyNavigationCode, } from '@cds/core/internal';
8
+ import { FOCUSABLE_ELEMENT_SELECTORS } from './providers/focusable-items';
9
+ import { CLR_LIST_KEY_NAVIGATION_CONFIG } from './providers/key-navigation-list.config';
10
+ import { getNextKeyListItem } from './utils';
11
+ import * as i0 from "@angular/core";
12
+ export class ClrKeyNavigationList {
13
+ constructor(host, defaultConfig, focusableElementSelectors) {
14
+ this.host = host;
15
+ this.defaultConfig = defaultConfig;
16
+ this.focusableElementSelectors = focusableElementSelectors;
17
+ this.config = {
18
+ ...this.defaultConfig,
19
+ dir: this.getClosestDirAttribute(),
20
+ };
21
+ }
22
+ set configuration(config) {
23
+ this.config = {
24
+ ...this.defaultConfig,
25
+ dir: this.getClosestDirAttribute(),
26
+ ...config,
27
+ };
28
+ }
29
+ ngAfterViewInit() {
30
+ this.initializeTabIndex();
31
+ }
32
+ onClick(e) {
33
+ this.clickItem(e);
34
+ }
35
+ onKeyDown(e) {
36
+ this.focusItem(e);
37
+ }
38
+ initializeTabIndex() {
39
+ if (this.config.manageFocus && this.config.manageTabindex) {
40
+ initializeKeyListItems(this.getListItems());
41
+ }
42
+ }
43
+ clickItem(e) {
44
+ const activeItem = this.getActiveItem(e);
45
+ if (activeItem) {
46
+ this.setActiveItem(e, activeItem);
47
+ }
48
+ }
49
+ focusItem(e) {
50
+ if (validKeyNavigationCode(e)) {
51
+ const activeItem = this.getActiveItem(e);
52
+ if (activeItem) {
53
+ const listItems = this.getListItems();
54
+ const { next, previous } = getNextKeyListItem(activeItem, Array.from(listItems), {
55
+ ...this.config,
56
+ dir: this.getClosestDirAttribute(),
57
+ code: e.code,
58
+ });
59
+ if (next !== previous) {
60
+ this.setActiveItem(e, listItems[next], listItems[previous]);
61
+ }
62
+ }
63
+ }
64
+ }
65
+ getActiveItem(e) {
66
+ const listItems = this.getListItems();
67
+ return Array.from(listItems).find(c => c === e.target.closest(listItems[0].tagName.toLocaleLowerCase()) ?? c === e.target);
68
+ }
69
+ setActiveItem(e, activeItem, previousItem) {
70
+ if (this.config.manageFocus) {
71
+ if (this.config.manageTabindex) {
72
+ setActiveKeyListItem(this.getListItems(), activeItem);
73
+ }
74
+ const items = getFlattenedFocusableItems(activeItem);
75
+ const item = items[0] ?? activeItem;
76
+ focusElement(item);
77
+ e.preventDefault();
78
+ }
79
+ activeItem.dispatchEvent(new CustomEvent('cdsKeyChange', {
80
+ bubbles: true,
81
+ detail: {
82
+ activeItem,
83
+ previousItem,
84
+ code: e.code,
85
+ metaKey: e.ctrlKey || e.metaKey,
86
+ keyListItems: this.config.keyListItems,
87
+ },
88
+ }));
89
+ }
90
+ getListItems() {
91
+ return this.host.nativeElement.querySelectorAll(this.focusableElementSelectors.join(','));
92
+ }
93
+ getClosestDirAttribute() {
94
+ const el = this.host.nativeElement.closest('[dir]');
95
+ return el ? el.getAttribute('dir') : null;
96
+ }
97
+ }
98
+ ClrKeyNavigationList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrKeyNavigationList, deps: [{ token: i0.ElementRef }, { token: CLR_LIST_KEY_NAVIGATION_CONFIG }, { token: FOCUSABLE_ELEMENT_SELECTORS }], target: i0.ɵɵFactoryTarget.Directive });
99
+ ClrKeyNavigationList.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.3", type: ClrKeyNavigationList, selector: "[clrKeyNavigationList]", inputs: { configuration: "configuration" }, host: { listeners: { "click": "onClick($event)", "keydown": "onKeyDown($event)" } }, ngImport: i0 });
100
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrKeyNavigationList, decorators: [{
101
+ type: Directive,
102
+ args: [{
103
+ selector: '[clrKeyNavigationList]',
104
+ }]
105
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: undefined, decorators: [{
106
+ type: Inject,
107
+ args: [CLR_LIST_KEY_NAVIGATION_CONFIG]
108
+ }] }, { type: undefined, decorators: [{
109
+ type: Inject,
110
+ args: [FOCUSABLE_ELEMENT_SELECTORS]
111
+ }] }]; }, propDecorators: { configuration: [{
112
+ type: Input
113
+ }], onClick: [{
114
+ type: HostListener,
115
+ args: ['click', ['$event']]
116
+ }], onKeyDown: [{
117
+ type: HostListener,
118
+ args: ['keydown', ['$event']]
119
+ }] } });
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5LW5hdmlnYXRpb24tbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL3V0aWxzL2xpc3Qta2V5LW5hdmlnYXRpb24va2V5LW5hdmlnYXRpb24tbGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFpQixTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUNMLFlBQVksRUFDWiwwQkFBMEIsRUFDMUIsc0JBQXNCLEVBRXRCLG9CQUFvQixFQUNwQixzQkFBc0IsR0FDdkIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN4RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxTQUFTLENBQUM7O0FBYzdDLE1BQU0sT0FBTyxvQkFBb0I7SUFZL0IsWUFDVSxJQUE2QixFQUNXLGFBQXNDLEVBQ3pDLHlCQUFtQztRQUZ4RSxTQUFJLEdBQUosSUFBSSxDQUF5QjtRQUNXLGtCQUFhLEdBQWIsYUFBYSxDQUF5QjtRQUN6Qyw4QkFBeUIsR0FBekIseUJBQXlCLENBQVU7UUFFaEYsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLEdBQUcsSUFBSSxDQUFDLGFBQWE7WUFDckIsR0FBRyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtTQUNuQyxDQUFDO0lBQ0osQ0FBQztJQWxCRCxJQUNJLGFBQWEsQ0FBQyxNQUF3QztRQUN4RCxJQUFJLENBQUMsTUFBTSxHQUFHO1lBQ1osR0FBRyxJQUFJLENBQUMsYUFBYTtZQUNyQixHQUFHLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixFQUFFO1lBQ2xDLEdBQUcsTUFBTTtTQUNWLENBQUM7SUFD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VUFBVTtnQkFDVixZQUFZO2dCQUNaLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSTtnQkFDWixPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsT0FBTztnQkFDL0IsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWTthQUN2QztTQUNGLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVPLFlBQVk7UUFDbEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEQsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM1QyxDQUFDOztpSEE1R1Usb0JBQW9CLDRDQWNyQiw4QkFBOEIsYUFDOUIsMkJBQTJCO3FHQWYxQixvQkFBb0I7MkZBQXBCLG9CQUFvQjtrQkFIaEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsd0JBQXdCO2lCQUNuQzs7MEJBZUksTUFBTTsyQkFBQyw4QkFBOEI7OzBCQUNyQyxNQUFNOzJCQUFDLDJCQUEyQjs0Q0FYakMsYUFBYTtzQkFEaEIsS0FBSztnQkF5Qk4sT0FBTztzQkFETixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNakMsU0FBUztzQkFEUixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMiBWTXdhcmUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UuXG4gKiBUaGUgZnVsbCBsaWNlbnNlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiBMSUNFTlNFIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHByb2plY3QuXG4gKi9cblxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIGZvY3VzRWxlbWVudCxcbiAgZ2V0RmxhdHRlbmVkRm9jdXNhYmxlSXRlbXMsXG4gIGluaXRpYWxpemVLZXlMaXN0SXRlbXMsXG4gIEtleU5hdmlnYXRpb25Db2RlLFxuICBzZXRBY3RpdmVLZXlMaXN0SXRlbSxcbiAgdmFsaWRLZXlOYXZpZ2F0aW9uQ29kZSxcbn0gZnJvbSAnQGNkcy9jb3JlL2ludGVybmFsJztcblxuaW1wb3J0IHsgRk9DVVNBQkxFX0VMRU1FTlRfU0VMRUNUT1JTIH0gZnJvbSAnLi9wcm92aWRlcnMvZm9jdXNhYmxlLWl0ZW1zJztcbmltcG9ydCB7IENMUl9MSVNUX0tFWV9OQVZJR0FUSU9OX0NPTkZJRyB9IGZyb20gJy4vcHJvdmlkZXJzL2tleS1uYXZpZ2F0aW9uLWxpc3QuY29uZmlnJztcbmltcG9ydCB7IGdldE5leHRLZXlMaXN0SXRlbSB9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEtleU5hdmlnYXRpb25MaXN0Q29uZmlnIHtcbiAga2V5TGlzdEl0ZW1zOiBzdHJpbmc7XG4gIGxheW91dDogJ2JvdGgnIHwgJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJztcbiAgbWFuYWdlRm9jdXM6IGJvb2xlYW47XG4gIG1hbmFnZVRhYmluZGV4OiBib29sZWFuO1xuICBsb29wOiBib29sZWFuO1xuICBkaXI6IHN0cmluZyB8IG51bGw7XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tjbHJLZXlOYXZpZ2F0aW9uTGlzdF0nLFxufSlcbmV4cG9ydCBjbGFzcyBDbHJLZXlOYXZpZ2F0aW9uTGlzdCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBwcml2YXRlIGNvbmZpZzogS2V5TmF2aWdhdGlvbkxpc3RDb25maWc7XG5cbiAgQElucHV0KClcbiAgc2V0IGNvbmZpZ3VyYXRpb24oY29uZmlnOiBQYXJ0aWFsPEtleU5hdmlnYXRpb25MaXN0Q29uZmlnPikge1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgLi4udGhpcy5kZWZhdWx0Q29uZmlnLFxuICAgICAgZGlyOiB0aGlzLmdldENsb3Nlc3REaXJBdHRyaWJ1dGUoKSxcbiAgICAgIC4uLmNvbmZpZyxcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBob3N0OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBASW5qZWN0KENMUl9MSVNUX0tFWV9OQVZJR0FUSU9OX0NPTkZJRykgcHJpdmF0ZSBkZWZhdWx0Q29uZmlnOiBLZXlOYXZpZ2F0aW9uTGlzdENvbmZpZyxcbiAgICBASW5qZWN0KEZPQ1VTQUJMRV9FTEVNRU5UX1NFTEVDVE9SUykgcHJpdmF0ZSBmb2N1c2FibGVFbGVtZW50U2VsZWN0b3JzOiBzdHJpbmdbXVxuICApIHtcbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIC4uLnRoaXMuZGVmYXVsdENvbmZpZyxcbiAgICAgIGRpcjogdGhpcy5nZXRDbG9zZXN0RGlyQXR0cmlidXRlKCksXG4gICAgfTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmluaXRpYWxpemVUYWJJbmRleCgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICBvbkNsaWNrKGU6IEV2ZW50KSB7XG4gICAgdGhpcy5jbGlja0l0ZW0oZSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgb25LZXlEb3duKGU6IEtleWJvYXJkRXZlbnQpIHtcbiAgICB0aGlzLmZvY3VzSXRlbShlKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVRhYkluZGV4KCkge1xuICAgIGlmICh0aGlzLmNvbmZpZy5tYW5hZ2VGb2N1cyAmJiB0aGlzLmNvbmZpZy5tYW5hZ2VUYWJpbmRleCkge1xuICAgICAgaW5pdGlhbGl6ZUtleUxpc3RJdGVtcyh0aGlzLmdldExpc3RJdGVtcygpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsaWNrSXRlbShlOiBFdmVudCkge1xuICAgIGNvbnN0IGFjdGl2ZUl0ZW0gPSB0aGlzLmdldEFjdGl2ZUl0ZW0oZSk7XG4gICAgaWYgKGFjdGl2ZUl0ZW0pIHtcbiAgICAgIHRoaXMuc2V0QWN0aXZlSXRlbShlLCBhY3RpdmVJdGVtKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvY3VzSXRlbShlOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKHZhbGlkS2V5TmF2aWdhdGlvbkNvZGUoZSkpIHtcbiAgICAgIGNvbnN0IGFjdGl2ZUl0ZW0gPSB0aGlzLmdldEFjdGl2ZUl0ZW0oZSk7XG4gICAgICBpZiAoYWN0aXZlSXRlbSkge1xuICAgICAgICBjb25zdCBsaXN0SXRlbXMgPSB0aGlzLmdldExpc3RJdGVtcygpO1xuICAgICAgICBjb25zdCB7IG5leHQsIHByZXZpb3VzIH0gPSBnZXROZXh0S2V5TGlzdEl0ZW0oYWN0aXZlSXRlbSwgQXJyYXkuZnJvbShsaXN0SXRlbXMpLCB7XG4gICAgICAgICAgLi4udGhpcy5jb25maWcsXG4gICAgICAgICAgZGlyOiB0aGlzLmdldENsb3Nlc3REaXJBdHRyaWJ1dGUoKSxcbiAgICAgICAgICBjb2RlOiBlLmNvZGUgYXMgS2V5TmF2aWdhdGlvbkNvZGUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChuZXh0ICE9PSBwcmV2aW91cykge1xuICAgICAgICAgIHRoaXMuc2V0QWN0aXZlSXRlbShlLCBsaXN0SXRlbXNbbmV4dF0sIGxpc3RJdGVtc1twcmV2aW91c10pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRBY3RpdmVJdGVtKGU6IEV2ZW50KSB7XG4gICAgY29uc3QgbGlzdEl0ZW1zID0gdGhpcy5nZXRMaXN0SXRlbXMoKTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShsaXN0SXRlbXMpLmZpbmQoXG4gICAgICBjID0+IGMgPT09IChlLnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xvc2VzdChsaXN0SXRlbXNbMF0udGFnTmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpKSA/PyBjID09PSBlLnRhcmdldFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNldEFjdGl2ZUl0ZW0oZTogYW55LCBhY3RpdmVJdGVtOiBIVE1MRWxlbWVudCwgcHJldmlvdXNJdGVtPzogSFRNTEVsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5jb25maWcubWFuYWdlRm9jdXMpIHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5tYW5hZ2VUYWJpbmRleCkge1xuICAgICAgICBzZXRBY3RpdmVLZXlMaXN0SXRlbSh0aGlzLmdldExpc3RJdGVtcygpLCBhY3RpdmVJdGVtKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXRlbXMgPSBnZXRGbGF0dGVuZWRGb2N1c2FibGVJdGVtcyhhY3RpdmVJdGVtKTtcbiAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1swXSA/PyBhY3RpdmVJdGVtO1xuICAgICAgZm9jdXNFbGVtZW50KGl0ZW0pO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIGFjdGl2ZUl0ZW0uZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudCgnY2RzS2V5Q2hhbmdlJywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBhY3RpdmVJdGVtLFxuICAgICAgICAgIHByZXZpb3VzSXRlbSxcbiAgICAgICAgICBjb2RlOiBlLmNvZGUsXG4gICAgICAgICAgbWV0YUtleTogZS5jdHJsS2V5IHx8IGUubWV0YUtleSxcbiAgICAgICAgICBrZXlMaXN0SXRlbXM6IHRoaXMuY29uZmlnLmtleUxpc3RJdGVtcyxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TGlzdEl0ZW1zKCk6IE5vZGVMaXN0T2Y8SFRNTEVsZW1lbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCh0aGlzLmZvY3VzYWJsZUVsZW1lbnRTZWxlY3RvcnMuam9pbignLCcpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2xvc2VzdERpckF0dHJpYnV0ZSgpIHtcbiAgICBjb25zdCBlbCA9IHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoJ1tkaXJdJyk7XG4gICAgcmV0dXJuIGVsID8gZWwuZ2V0QXR0cmlidXRlKCdkaXInKSA6IG51bGw7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,24 @@
1
+ /*
2
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
3
+ * This software is released under MIT license.
4
+ * The full license information can be found in LICENSE in the root directory of this project.
5
+ */
6
+ import { NgModule } from '@angular/core';
7
+ import { ClrKeyNavigationList } from './key-navigation-list';
8
+ import { FOCUSABLE_ELEMENT_SELECTORS_PROVIDER } from './providers/focusable-items';
9
+ import { CLR_LIST_KEY_NAVIGATION_COFNIG_PROVIDER } from './providers/key-navigation-list.config';
10
+ import * as i0 from "@angular/core";
11
+ export class ClrKeyNavigationListModule {
12
+ }
13
+ ClrKeyNavigationListModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrKeyNavigationListModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
14
+ ClrKeyNavigationListModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrKeyNavigationListModule, declarations: [ClrKeyNavigationList], exports: [ClrKeyNavigationList] });
15
+ ClrKeyNavigationListModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrKeyNavigationListModule, providers: [CLR_LIST_KEY_NAVIGATION_COFNIG_PROVIDER, FOCUSABLE_ELEMENT_SELECTORS_PROVIDER] });
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrKeyNavigationListModule, decorators: [{
17
+ type: NgModule,
18
+ args: [{
19
+ declarations: [ClrKeyNavigationList],
20
+ exports: [ClrKeyNavigationList],
21
+ providers: [CLR_LIST_KEY_NAVIGATION_COFNIG_PROVIDER, FOCUSABLE_ELEMENT_SELECTORS_PROVIDER],
22
+ }]
23
+ }] });
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5LW5hdmlnYXRpb24tbGlzdC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyL3NyYy91dGlscy9saXN0LWtleS1uYXZpZ2F0aW9uL2tleS1uYXZpZ2F0aW9uLWxpc3QubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ25GLE9BQU8sRUFBRSx1Q0FBdUMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOztBQU9qRyxNQUFNLE9BQU8sMEJBQTBCOzt1SEFBMUIsMEJBQTBCO3dIQUExQiwwQkFBMEIsaUJBSnRCLG9CQUFvQixhQUN6QixvQkFBb0I7d0hBR25CLDBCQUEwQixhQUYxQixDQUFDLHVDQUF1QyxFQUFFLG9DQUFvQyxDQUFDOzJGQUUvRSwwQkFBMEI7a0JBTHRDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsb0JBQW9CLENBQUM7b0JBQ3BDLE9BQU8sRUFBRSxDQUFDLG9CQUFvQixDQUFDO29CQUMvQixTQUFTLEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSxvQ0FBb0MsQ0FBQztpQkFDM0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjIgVk13YXJlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLlxuICogVGhlIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gTElDRU5TRSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENscktleU5hdmlnYXRpb25MaXN0IH0gZnJvbSAnLi9rZXktbmF2aWdhdGlvbi1saXN0JztcbmltcG9ydCB7IEZPQ1VTQUJMRV9FTEVNRU5UX1NFTEVDVE9SU19QUk9WSURFUiB9IGZyb20gJy4vcHJvdmlkZXJzL2ZvY3VzYWJsZS1pdGVtcyc7XG5pbXBvcnQgeyBDTFJfTElTVF9LRVlfTkFWSUdBVElPTl9DT0ZOSUdfUFJPVklERVIgfSBmcm9tICcuL3Byb3ZpZGVycy9rZXktbmF2aWdhdGlvbi1saXN0LmNvbmZpZyc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW0NscktleU5hdmlnYXRpb25MaXN0XSxcbiAgZXhwb3J0czogW0NscktleU5hdmlnYXRpb25MaXN0XSxcbiAgcHJvdmlkZXJzOiBbQ0xSX0xJU1RfS0VZX05BVklHQVRJT05fQ09GTklHX1BST1ZJREVSLCBGT0NVU0FCTEVfRUxFTUVOVF9TRUxFQ1RPUlNfUFJPVklERVJdLFxufSlcbmV4cG9ydCBjbGFzcyBDbHJLZXlOYXZpZ2F0aW9uTGlzdE1vZHVsZSB7fVxuIl19
@@ -0,0 +1,25 @@
1
+ /*
2
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
3
+ * This software is released under MIT license.
4
+ * The full license information can be found in LICENSE in the root directory of this project.
5
+ */
6
+ import { InjectionToken } from '@angular/core';
7
+ export const FOCUSABLE_ELEMENT_SELECTORS = new InjectionToken('FocusableElements');
8
+ export const FOCUSABLE_ELEMENT_SELECTORS_PROVIDER = {
9
+ provide: FOCUSABLE_ELEMENT_SELECTORS,
10
+ useValue: [
11
+ 'a[href]',
12
+ 'area[href]',
13
+ 'input:not([disabled])',
14
+ 'button:not([disabled])',
15
+ 'select:not([disabled])',
16
+ 'textarea:not([disabled])',
17
+ 'iframe',
18
+ 'object',
19
+ 'embed',
20
+ '*[tabindex]',
21
+ '*[contenteditable=true]',
22
+ '[role=button]:not([disabled])',
23
+ ],
24
+ };
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9jdXNhYmxlLWl0ZW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvdXRpbHMvbGlzdC1rZXktbmF2aWdhdGlvbi9wcm92aWRlcnMvZm9jdXNhYmxlLWl0ZW1zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUUsY0FBYyxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUU5RCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxJQUFJLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBRW5GLE1BQU0sQ0FBQyxNQUFNLG9DQUFvQyxHQUFrQjtJQUNqRSxPQUFPLEVBQUUsMkJBQTJCO0lBQ3BDLFFBQVEsRUFBRTtRQUNSLFNBQVM7UUFDVCxZQUFZO1FBQ1osdUJBQXVCO1FBQ3ZCLHdCQUF3QjtRQUN4Qix3QkFBd0I7UUFDeEIsMEJBQTBCO1FBQzFCLFFBQVE7UUFDUixRQUFRO1FBQ1IsT0FBTztRQUNQLGFBQWE7UUFDYix5QkFBeUI7UUFDekIsK0JBQStCO0tBQ2hDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMiBWTXdhcmUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UuXG4gKiBUaGUgZnVsbCBsaWNlbnNlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiBMSUNFTlNFIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHByb2plY3QuXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIFZhbHVlUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGNvbnN0IEZPQ1VTQUJMRV9FTEVNRU5UX1NFTEVDVE9SUyA9IG5ldyBJbmplY3Rpb25Ub2tlbignRm9jdXNhYmxlRWxlbWVudHMnKTtcblxuZXhwb3J0IGNvbnN0IEZPQ1VTQUJMRV9FTEVNRU5UX1NFTEVDVE9SU19QUk9WSURFUjogVmFsdWVQcm92aWRlciA9IHtcbiAgcHJvdmlkZTogRk9DVVNBQkxFX0VMRU1FTlRfU0VMRUNUT1JTLFxuICB1c2VWYWx1ZTogW1xuICAgICdhW2hyZWZdJyxcbiAgICAnYXJlYVtocmVmXScsXG4gICAgJ2lucHV0Om5vdChbZGlzYWJsZWRdKScsXG4gICAgJ2J1dHRvbjpub3QoW2Rpc2FibGVkXSknLFxuICAgICdzZWxlY3Q6bm90KFtkaXNhYmxlZF0pJyxcbiAgICAndGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pJyxcbiAgICAnaWZyYW1lJyxcbiAgICAnb2JqZWN0JyxcbiAgICAnZW1iZWQnLFxuICAgICcqW3RhYmluZGV4XScsIC8vIC0xIHRhYmluZGV4IGlzIGEgZm9jdXNhYmxlIGVsZW1lbnQgYW5kIG5lZWRlZCBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvblxuICAgICcqW2NvbnRlbnRlZGl0YWJsZT10cnVlXScsXG4gICAgJ1tyb2xlPWJ1dHRvbl06bm90KFtkaXNhYmxlZF0pJyxcbiAgXSxcbn07XG4iXX0=
@@ -0,0 +1,19 @@
1
+ /*
2
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
3
+ * This software is released under MIT license.
4
+ * The full license information can be found in LICENSE in the root directory of this project.
5
+ */
6
+ import { InjectionToken } from '@angular/core';
7
+ export const CLR_LIST_KEY_NAVIGATION_CONFIG = new InjectionToken('ClrListKeyNavigationConfig');
8
+ export const CLR_LIST_KEY_NAVIGATION_COFNIG_PROVIDER = {
9
+ provide: CLR_LIST_KEY_NAVIGATION_CONFIG,
10
+ useValue: {
11
+ keyListItems: 'keyListItems',
12
+ layout: 'vertical',
13
+ manageFocus: true,
14
+ manageTabindex: true,
15
+ loop: false,
16
+ dir: null,
17
+ },
18
+ };
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5LW5hdmlnYXRpb24tbGlzdC5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyL3NyYy91dGlscy9saXN0LWtleS1uYXZpZ2F0aW9uL3Byb3ZpZGVycy9rZXktbmF2aWdhdGlvbi1saXN0LmNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFFLGNBQWMsRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFOUQsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsSUFBSSxjQUFjLENBQUMsNEJBQTRCLENBQUMsQ0FBQztBQUUvRixNQUFNLENBQUMsTUFBTSx1Q0FBdUMsR0FBa0I7SUFDcEUsT0FBTyxFQUFFLDhCQUE4QjtJQUN2QyxRQUFRLEVBQUU7UUFDUixZQUFZLEVBQUUsY0FBYztRQUM1QixNQUFNLEVBQUUsVUFBVTtRQUNsQixXQUFXLEVBQUUsSUFBSTtRQUNqQixjQUFjLEVBQUUsSUFBSTtRQUNwQixJQUFJLEVBQUUsS0FBSztRQUNYLEdBQUcsRUFBRSxJQUFJO0tBQ1Y7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxNi0yMDIyIFZNd2FyZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZS5cbiAqIFRoZSBmdWxsIGxpY2Vuc2UgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIExJQ0VOU0UgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgcHJvamVjdC5cbiAqL1xuXG5pbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgVmFsdWVQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgQ0xSX0xJU1RfS0VZX05BVklHQVRJT05fQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuKCdDbHJMaXN0S2V5TmF2aWdhdGlvbkNvbmZpZycpO1xuXG5leHBvcnQgY29uc3QgQ0xSX0xJU1RfS0VZX05BVklHQVRJT05fQ09GTklHX1BST1ZJREVSOiBWYWx1ZVByb3ZpZGVyID0ge1xuICBwcm92aWRlOiBDTFJfTElTVF9LRVlfTkFWSUdBVElPTl9DT05GSUcsXG4gIHVzZVZhbHVlOiB7XG4gICAga2V5TGlzdEl0ZW1zOiAna2V5TGlzdEl0ZW1zJyxcbiAgICBsYXlvdXQ6ICd2ZXJ0aWNhbCcsXG4gICAgbWFuYWdlRm9jdXM6IHRydWUsXG4gICAgbWFuYWdlVGFiaW5kZXg6IHRydWUsXG4gICAgbG9vcDogZmFsc2UsXG4gICAgZGlyOiBudWxsLFxuICB9LFxufTtcbiJdfQ==
@@ -0,0 +1,46 @@
1
+ /*
2
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
3
+ * This software is released under MIT license.
4
+ * The full license information can be found in LICENSE in the root directory of this project.
5
+ */
6
+ import { KeyNavigationCode } from '@cds/core/internal';
7
+ export function getNextKeyListItem(item, items, config) {
8
+ const { code, layout, loop, dir } = config;
9
+ let i = items.indexOf(item);
10
+ const previous = i;
11
+ const inlineStart = dir === 'rtl' ? KeyNavigationCode.ArrowRight : KeyNavigationCode.ArrowLeft;
12
+ const inlineEnd = dir === 'rtl' ? KeyNavigationCode.ArrowLeft : KeyNavigationCode.ArrowRight;
13
+ const numOfItems = items.length - 1;
14
+ if (layout !== 'horizontal' && code === KeyNavigationCode.ArrowUp && i !== 0) {
15
+ i = i - 1;
16
+ }
17
+ else if (layout !== 'horizontal' && code === KeyNavigationCode.ArrowUp && i === 0 && loop) {
18
+ i = numOfItems;
19
+ }
20
+ else if (layout !== 'horizontal' && code === KeyNavigationCode.ArrowDown && i < numOfItems) {
21
+ i = i + 1;
22
+ }
23
+ else if (layout !== 'horizontal' && code === KeyNavigationCode.ArrowDown && i === numOfItems && loop) {
24
+ i = 0;
25
+ }
26
+ else if (layout !== 'vertical' && code === inlineStart && i !== 0) {
27
+ i = i - 1;
28
+ }
29
+ else if (layout !== 'vertical' && code === inlineEnd && i < numOfItems) {
30
+ i = i + 1;
31
+ }
32
+ else if (code === KeyNavigationCode.End) {
33
+ i = numOfItems;
34
+ }
35
+ else if (code === KeyNavigationCode.Home) {
36
+ i = 0;
37
+ }
38
+ else if (code === KeyNavigationCode.PageUp) {
39
+ i = i - 4 > 0 ? i - 4 : 0;
40
+ }
41
+ else if (code === KeyNavigationCode.PageDown) {
42
+ i = i + 4 < numOfItems ? i + 4 : numOfItems;
43
+ }
44
+ return { next: i, previous };
45
+ }
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyL3NyYy91dGlscy9saXN0LWtleS1uYXZpZ2F0aW9uL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQVN2RCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsSUFBaUIsRUFBRSxLQUFvQixFQUFFLE1BQXFCO0lBQy9GLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFDM0MsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDbkIsTUFBTSxXQUFXLEdBQUcsR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUM7SUFDL0YsTUFBTSxTQUFTLEdBQUcsR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUM7SUFDN0YsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFcEMsSUFBSSxNQUFNLEtBQUssWUFBWSxJQUFJLElBQUksS0FBSyxpQkFBaUIsQ0FBQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUM1RSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNYO1NBQU0sSUFBSSxNQUFNLEtBQUssWUFBWSxJQUFJLElBQUksS0FBSyxpQkFBaUIsQ0FBQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUU7UUFDM0YsQ0FBQyxHQUFHLFVBQVUsQ0FBQztLQUNoQjtTQUFNLElBQUksTUFBTSxLQUFLLFlBQVksSUFBSSxJQUFJLEtBQUssaUJBQWlCLENBQUMsU0FBUyxJQUFJLENBQUMsR0FBRyxVQUFVLEVBQUU7UUFDNUYsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDWDtTQUFNLElBQUksTUFBTSxLQUFLLFlBQVksSUFBSSxJQUFJLEtBQUssaUJBQWlCLENBQUMsU0FBUyxJQUFJLENBQUMsS0FBSyxVQUFVLElBQUksSUFBSSxFQUFFO1FBQ3RHLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDUDtTQUFNLElBQUksTUFBTSxLQUFLLFVBQVUsSUFBSSxJQUFJLEtBQUssV0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDbkUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDWDtTQUFNLElBQUksTUFBTSxLQUFLLFVBQVUsSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLENBQUMsR0FBRyxVQUFVLEVBQUU7UUFDeEUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDWDtTQUFNLElBQUksSUFBSSxLQUFLLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtRQUN6QyxDQUFDLEdBQUcsVUFBVSxDQUFDO0tBQ2hCO1NBQU0sSUFBSSxJQUFJLEtBQUssaUJBQWlCLENBQUMsSUFBSSxFQUFFO1FBQzFDLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDUDtTQUFNLElBQUksSUFBSSxLQUFLLGlCQUFpQixDQUFDLE1BQU0sRUFBRTtRQUM1QyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUMzQjtTQUFNLElBQUksSUFBSSxLQUFLLGlCQUFpQixDQUFDLFFBQVEsRUFBRTtRQUM5QyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztLQUM3QztJQUVELE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDO0FBQy9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjIgVk13YXJlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLlxuICogVGhlIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gTElDRU5TRSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7IEtleU5hdmlnYXRpb25Db2RlIH0gZnJvbSAnQGNkcy9jb3JlL2ludGVybmFsJztcblxuZXhwb3J0IGludGVyZmFjZSBLZXlMaXN0Q29uZmlnIHtcbiAgY29kZTogS2V5TmF2aWdhdGlvbkNvZGU7XG4gIGxvb3A/OiBib29sZWFuO1xuICBsYXlvdXQ/OiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnIHwgJ2JvdGgnO1xuICBkaXI6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXh0S2V5TGlzdEl0ZW0oaXRlbTogSFRNTEVsZW1lbnQsIGl0ZW1zOiBIVE1MRWxlbWVudFtdLCBjb25maWc6IEtleUxpc3RDb25maWcpIHtcbiAgY29uc3QgeyBjb2RlLCBsYXlvdXQsIGxvb3AsIGRpciB9ID0gY29uZmlnO1xuICBsZXQgaSA9IGl0ZW1zLmluZGV4T2YoaXRlbSk7XG4gIGNvbnN0IHByZXZpb3VzID0gaTtcbiAgY29uc3QgaW5saW5lU3RhcnQgPSBkaXIgPT09ICdydGwnID8gS2V5TmF2aWdhdGlvbkNvZGUuQXJyb3dSaWdodCA6IEtleU5hdmlnYXRpb25Db2RlLkFycm93TGVmdDtcbiAgY29uc3QgaW5saW5lRW5kID0gZGlyID09PSAncnRsJyA/IEtleU5hdmlnYXRpb25Db2RlLkFycm93TGVmdCA6IEtleU5hdmlnYXRpb25Db2RlLkFycm93UmlnaHQ7XG4gIGNvbnN0IG51bU9mSXRlbXMgPSBpdGVtcy5sZW5ndGggLSAxO1xuXG4gIGlmIChsYXlvdXQgIT09ICdob3Jpem9udGFsJyAmJiBjb2RlID09PSBLZXlOYXZpZ2F0aW9uQ29kZS5BcnJvd1VwICYmIGkgIT09IDApIHtcbiAgICBpID0gaSAtIDE7XG4gIH0gZWxzZSBpZiAobGF5b3V0ICE9PSAnaG9yaXpvbnRhbCcgJiYgY29kZSA9PT0gS2V5TmF2aWdhdGlvbkNvZGUuQXJyb3dVcCAmJiBpID09PSAwICYmIGxvb3ApIHtcbiAgICBpID0gbnVtT2ZJdGVtcztcbiAgfSBlbHNlIGlmIChsYXlvdXQgIT09ICdob3Jpem9udGFsJyAmJiBjb2RlID09PSBLZXlOYXZpZ2F0aW9uQ29kZS5BcnJvd0Rvd24gJiYgaSA8IG51bU9mSXRlbXMpIHtcbiAgICBpID0gaSArIDE7XG4gIH0gZWxzZSBpZiAobGF5b3V0ICE9PSAnaG9yaXpvbnRhbCcgJiYgY29kZSA9PT0gS2V5TmF2aWdhdGlvbkNvZGUuQXJyb3dEb3duICYmIGkgPT09IG51bU9mSXRlbXMgJiYgbG9vcCkge1xuICAgIGkgPSAwO1xuICB9IGVsc2UgaWYgKGxheW91dCAhPT0gJ3ZlcnRpY2FsJyAmJiBjb2RlID09PSBpbmxpbmVTdGFydCAmJiBpICE9PSAwKSB7XG4gICAgaSA9IGkgLSAxO1xuICB9IGVsc2UgaWYgKGxheW91dCAhPT0gJ3ZlcnRpY2FsJyAmJiBjb2RlID09PSBpbmxpbmVFbmQgJiYgaSA8IG51bU9mSXRlbXMpIHtcbiAgICBpID0gaSArIDE7XG4gIH0gZWxzZSBpZiAoY29kZSA9PT0gS2V5TmF2aWdhdGlvbkNvZGUuRW5kKSB7XG4gICAgaSA9IG51bU9mSXRlbXM7XG4gIH0gZWxzZSBpZiAoY29kZSA9PT0gS2V5TmF2aWdhdGlvbkNvZGUuSG9tZSkge1xuICAgIGkgPSAwO1xuICB9IGVsc2UgaWYgKGNvZGUgPT09IEtleU5hdmlnYXRpb25Db2RlLlBhZ2VVcCkge1xuICAgIGkgPSBpIC0gNCA+IDAgPyBpIC0gNCA6IDA7XG4gIH0gZWxzZSBpZiAoY29kZSA9PT0gS2V5TmF2aWdhdGlvbkNvZGUuUGFnZURvd24pIHtcbiAgICBpID0gaSArIDQgPCBudW1PZkl0ZW1zID8gaSArIDQgOiBudW1PZkl0ZW1zO1xuICB9XG5cbiAgcmV0dXJuIHsgbmV4dDogaSwgcHJldmlvdXMgfTtcbn1cbiJdfQ==