@skyux/lists 8.7.0 → 9.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/modules/filter/filter-button.component.mjs +73 -0
- package/{esm2020 → esm2022}/lib/modules/filter/filter-inline-item.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/filter/filter-inline.component.mjs +4 -4
- package/esm2022/lib/modules/filter/filter-summary-item.component.mjs +52 -0
- package/{esm2020 → esm2022}/lib/modules/filter/filter-summary.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/filter/filter.module.mjs +21 -21
- package/esm2022/lib/modules/infinite-scroll/infinite-scroll-dom-adapter.service.mjs +82 -0
- package/esm2022/lib/modules/infinite-scroll/infinite-scroll.component.mjs +116 -0
- package/{esm2020 → esm2022}/lib/modules/infinite-scroll/infinite-scroll.module.mjs +5 -5
- package/esm2022/lib/modules/paging/paging.component.mjs +122 -0
- package/{esm2020 → esm2022}/lib/modules/paging/paging.module.mjs +11 -11
- package/esm2022/lib/modules/repeater/repeater-adapter.service.mjs +75 -0
- package/{esm2020 → esm2022}/lib/modules/repeater/repeater-auto-scroll.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/repeater/repeater-item-content.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/repeater/repeater-item-context-menu.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/repeater/repeater-item-title.component.mjs +4 -4
- package/esm2022/lib/modules/repeater/repeater-item.component.mjs +504 -0
- package/esm2022/lib/modules/repeater/repeater.component.mjs +373 -0
- package/{esm2020 → esm2022}/lib/modules/repeater/repeater.module.mjs +27 -27
- package/esm2022/lib/modules/repeater/repeater.service.mjs +86 -0
- package/{esm2020 → esm2022}/lib/modules/shared/sky-lists-resources.module.mjs +11 -11
- package/esm2022/lib/modules/sort/sort-item.component.mjs +66 -0
- package/{esm2020 → esm2022}/lib/modules/sort/sort-menu-heading.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/sort/sort.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/sort/sort.module.mjs +17 -17
- package/{esm2020 → esm2022}/lib/modules/sort/sort.service.mjs +4 -4
- package/esm2022/testing/filter/filter-fixture-button.mjs +53 -0
- package/esm2022/testing/filter/filter-fixture-summary.mjs +31 -0
- package/{esm2020 → esm2022}/testing/filter/filter-testing.module.mjs +5 -5
- package/esm2022/testing/infinite-scroll/infinite-scroll-fixture.mjs +31 -0
- package/esm2022/testing/infinite-scroll/infinite-scroll-harness.mjs +49 -0
- package/{esm2020 → esm2022}/testing/infinite-scroll/infinite-scroll-testing.module.mjs +5 -5
- package/esm2022/testing/paging/paging-fixture.mjs +95 -0
- package/{esm2020 → esm2022}/testing/paging/paging-testing.module.mjs +5 -5
- package/esm2022/testing/repeater/repeater-harness.mjs +25 -0
- package/esm2022/testing/repeater/repeater-item-harness.mjs +167 -0
- package/esm2022/testing/sort/sort-fixture.mjs +149 -0
- package/{esm2020 → esm2022}/testing/sort/sort-testing.module.mjs +5 -5
- package/fesm2022/skyux-lists-testing.mjs +664 -0
- package/{fesm2020 → fesm2022}/skyux-lists-testing.mjs.map +1 -1
- package/fesm2022/skyux-lists.mjs +1913 -0
- package/{fesm2020 → fesm2022}/skyux-lists.mjs.map +1 -1
- package/lib/modules/filter/filter-button.component.d.ts +1 -1
- package/lib/modules/filter/filter-summary-item.component.d.ts +1 -1
- package/lib/modules/infinite-scroll/infinite-scroll.component.d.ts +1 -1
- package/lib/modules/paging/paging.component.d.ts +1 -1
- package/lib/modules/repeater/repeater-item.component.d.ts +1 -1
- package/lib/modules/repeater/repeater.component.d.ts +1 -1
- package/lib/modules/sort/sort-item.component.d.ts +1 -1
- package/lib/modules/sort/sort.component.d.ts +1 -1
- package/package.json +22 -30
- package/esm2020/lib/modules/filter/filter-button.component.mjs +0 -75
- package/esm2020/lib/modules/filter/filter-summary-item.component.mjs +0 -54
- package/esm2020/lib/modules/infinite-scroll/infinite-scroll-dom-adapter.service.mjs +0 -84
- package/esm2020/lib/modules/infinite-scroll/infinite-scroll.component.mjs +0 -116
- package/esm2020/lib/modules/paging/paging.component.mjs +0 -123
- package/esm2020/lib/modules/repeater/repeater-adapter.service.mjs +0 -73
- package/esm2020/lib/modules/repeater/repeater-item.component.mjs +0 -492
- package/esm2020/lib/modules/repeater/repeater.component.mjs +0 -357
- package/esm2020/lib/modules/repeater/repeater.service.mjs +0 -88
- package/esm2020/lib/modules/sort/sort-item.component.mjs +0 -69
- package/esm2020/testing/filter/filter-fixture-button.mjs +0 -55
- package/esm2020/testing/filter/filter-fixture-summary.mjs +0 -34
- package/esm2020/testing/infinite-scroll/infinite-scroll-fixture.mjs +0 -34
- package/esm2020/testing/infinite-scroll/infinite-scroll-harness.mjs +0 -55
- package/esm2020/testing/paging/paging-fixture.mjs +0 -91
- package/esm2020/testing/repeater/repeater-harness.mjs +0 -25
- package/esm2020/testing/repeater/repeater-item-harness.mjs +0 -173
- package/esm2020/testing/sort/sort-fixture.mjs +0 -148
- package/fesm2015/skyux-lists-testing.mjs +0 -747
- package/fesm2015/skyux-lists-testing.mjs.map +0 -1
- package/fesm2015/skyux-lists.mjs +0 -1894
- package/fesm2015/skyux-lists.mjs.map +0 -1
- package/fesm2020/skyux-lists-testing.mjs +0 -673
- package/fesm2020/skyux-lists.mjs +0 -1886
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/repeater/repeater-auto-scroll-options.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/repeater/repeater-auto-scroller.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/repeater/repeater-expand-mode-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/repeater/repeater-item-roles.type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/repeater/repeater-role.type.mjs +0 -0
- /package/{esm2020 → esm2022}/skyux-lists.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/filter/lists-filter-fixture-button.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/infinite-scroll/infinite-scroll-harness-filters.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/paging/paging-fixture-button.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/repeater/repeater-harness-filters.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/repeater/repeater-item-harness-filters.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/skyux-lists-testing.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/sort/sort-fixture-menu-item.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/sort/sort-fixture-menu.mjs +0 -0
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, Input, Output, Renderer2, inject, } from '@angular/core';
|
|
2
|
+
import { SkyLogService } from '@skyux/core';
|
|
3
|
+
import { SkyScrollableHostService } from '@skyux/core';
|
|
4
|
+
import { DragulaService } from 'ng2-dragula';
|
|
5
|
+
import { Subject } from 'rxjs';
|
|
6
|
+
import { takeUntil } from 'rxjs/operators';
|
|
7
|
+
import { SkyRepeaterAdapterService } from './repeater-adapter.service';
|
|
8
|
+
import { SkyRepeaterAutoScrollService } from './repeater-auto-scroll.service';
|
|
9
|
+
import { SkyRepeaterItemComponent } from './repeater-item.component';
|
|
10
|
+
import { SkyRepeaterService } from './repeater.service';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "ng2-dragula";
|
|
13
|
+
import * as i2 from "@angular/cdk/observers";
|
|
14
|
+
import * as i3 from "@skyux/i18n";
|
|
15
|
+
/**
|
|
16
|
+
* Creates a container to display repeater items.
|
|
17
|
+
*/
|
|
18
|
+
export class SkyRepeaterComponent {
|
|
19
|
+
/**
|
|
20
|
+
* The layout that determines which repeater items are expanded by default and whether
|
|
21
|
+
* repeater items are expandable and collapsible. Collapsed items display titles only.
|
|
22
|
+
* The valid options are `multiple`, `none`, and `single`.
|
|
23
|
+
* - `multiple` loads repeater items in an expanded state unless `isExpanded` is set to
|
|
24
|
+
* `false` for a repeater item. This layout allows users to expand and collapse
|
|
25
|
+
* as many repeater items as necessary. It is best-suited to repeater items where body
|
|
26
|
+
* content is important but users don't always need to see it.
|
|
27
|
+
* - `none` loads all repeater items in an expanded state and does not allow users to
|
|
28
|
+
* collapse them. This default layout provides the quickest access to the details in the
|
|
29
|
+
* repeater items. It is best-suited to repeater items with concise content
|
|
30
|
+
* that users need to view frequently.
|
|
31
|
+
* - `single` loads one repeater item in an expanded state and collapses all others.
|
|
32
|
+
* The expanded repeater item is the first one where `isExpanded` is set to `true`. This layout
|
|
33
|
+
* allows users to expand one item at a time. It provides the most compact view and is
|
|
34
|
+
* best-suited to repeater items where the most important information is in the titles
|
|
35
|
+
* and users only occasionally need to view the body content.
|
|
36
|
+
* @default "none"
|
|
37
|
+
*/
|
|
38
|
+
set expandMode(value) {
|
|
39
|
+
this.#repeaterService.expandMode = value;
|
|
40
|
+
this.#updateForExpandMode();
|
|
41
|
+
}
|
|
42
|
+
get expandMode() {
|
|
43
|
+
return this.#repeaterService.expandMode;
|
|
44
|
+
}
|
|
45
|
+
#autoScroller;
|
|
46
|
+
#ngUnsubscribe;
|
|
47
|
+
#itemNameWarned;
|
|
48
|
+
#adapterService;
|
|
49
|
+
#changeDetector;
|
|
50
|
+
#dragulaService;
|
|
51
|
+
#elementRef;
|
|
52
|
+
#renderer;
|
|
53
|
+
#repeaterService;
|
|
54
|
+
#autoScrollSvc;
|
|
55
|
+
#scrollableHostSvc;
|
|
56
|
+
#logSvc;
|
|
57
|
+
constructor() {
|
|
58
|
+
/**
|
|
59
|
+
* Whether users can change the order of items in the repeater list.
|
|
60
|
+
* Each repeater item also has `reorderable` property to indicate whether
|
|
61
|
+
* users can change its order.
|
|
62
|
+
*/
|
|
63
|
+
this.reorderable = false;
|
|
64
|
+
/**
|
|
65
|
+
* Fires when the active repeater item changes.
|
|
66
|
+
*/
|
|
67
|
+
this.activeIndexChange = new EventEmitter();
|
|
68
|
+
/**
|
|
69
|
+
* Fires when users change the order of repeater items.
|
|
70
|
+
* This event emits an ordered array of the `tag` properties that the consumer provides for each repeater item.
|
|
71
|
+
*/
|
|
72
|
+
this.orderChange = new EventEmitter();
|
|
73
|
+
this.#ngUnsubscribe = new Subject();
|
|
74
|
+
this.#itemNameWarned = false;
|
|
75
|
+
this.#adapterService = inject(SkyRepeaterAdapterService);
|
|
76
|
+
this.#changeDetector = inject(ChangeDetectorRef);
|
|
77
|
+
this.#dragulaService = inject(DragulaService);
|
|
78
|
+
this.#elementRef = inject(ElementRef);
|
|
79
|
+
this.#renderer = inject(Renderer2);
|
|
80
|
+
this.#repeaterService = inject(SkyRepeaterService);
|
|
81
|
+
this.#autoScrollSvc = inject(SkyRepeaterAutoScrollService);
|
|
82
|
+
this.#scrollableHostSvc = inject(SkyScrollableHostService);
|
|
83
|
+
this.#logSvc = inject(SkyLogService);
|
|
84
|
+
this.dragulaGroupName = `sky-repeater-dragula-${this.#repeaterService.repeaterGroupId}`;
|
|
85
|
+
this.#repeaterService.itemCollapseStateChange
|
|
86
|
+
.pipe(takeUntil(this.#ngUnsubscribe))
|
|
87
|
+
.subscribe((item) => {
|
|
88
|
+
if (this.expandMode === 'single' && item.isExpanded) {
|
|
89
|
+
this.items?.forEach((otherItem) => {
|
|
90
|
+
if (otherItem !== item &&
|
|
91
|
+
otherItem.isExpanded &&
|
|
92
|
+
otherItem.isCollapsible) {
|
|
93
|
+
otherItem.isExpanded = false;
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
this.#repeaterService.activeItemIndexChange
|
|
99
|
+
.pipe(takeUntil(this.#ngUnsubscribe))
|
|
100
|
+
.subscribe((index) => {
|
|
101
|
+
if (index !== this.activeIndex) {
|
|
102
|
+
this.activeIndex = index;
|
|
103
|
+
this.activeIndexChange.emit(index);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
this.#repeaterService.orderChange
|
|
107
|
+
.pipe(takeUntil(this.#ngUnsubscribe))
|
|
108
|
+
.subscribe(() => {
|
|
109
|
+
this.#emitTags();
|
|
110
|
+
});
|
|
111
|
+
this.#updateForExpandMode();
|
|
112
|
+
this.#adapterService.setRepeaterHost(this.#elementRef);
|
|
113
|
+
this.#initializeDragAndDrop();
|
|
114
|
+
}
|
|
115
|
+
ngAfterContentInit() {
|
|
116
|
+
// If activeIndex has been set on init, call service to activate the appropriate item.
|
|
117
|
+
setTimeout(() => {
|
|
118
|
+
if (this.activeIndex || this.activeIndex === 0) {
|
|
119
|
+
this.#repeaterService.activateItemByIndex(this.activeIndex);
|
|
120
|
+
}
|
|
121
|
+
this.#validateTags();
|
|
122
|
+
});
|
|
123
|
+
// HACK: Not updating for expand mode in a timeout causes an error.
|
|
124
|
+
// https://github.com/angular/angular/issues/6005
|
|
125
|
+
this.items?.changes.pipe(takeUntil(this.#ngUnsubscribe)).subscribe(() => {
|
|
126
|
+
setTimeout(() => {
|
|
127
|
+
if (this.items?.length) {
|
|
128
|
+
this.#updateForExpandMode(this.items.last);
|
|
129
|
+
this.#updateReorderability();
|
|
130
|
+
this.#repeaterService.items = this.items.toArray();
|
|
131
|
+
}
|
|
132
|
+
if (this.activeIndex !== undefined) {
|
|
133
|
+
this.#repeaterService.activateItemByIndex(this.activeIndex);
|
|
134
|
+
}
|
|
135
|
+
this.#updateRole();
|
|
136
|
+
this.#validateTags();
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
setTimeout(() => {
|
|
140
|
+
this.#updateForExpandMode();
|
|
141
|
+
this.items?.forEach((item) => {
|
|
142
|
+
item.reorderable = this.reorderable;
|
|
143
|
+
});
|
|
144
|
+
this.#updateRole();
|
|
145
|
+
}, 0);
|
|
146
|
+
}
|
|
147
|
+
ngAfterViewChecked() {
|
|
148
|
+
if (!this.#itemNameWarned && this.items?.some((item) => !item.itemName)) {
|
|
149
|
+
this.#logSvc?.deprecated('SkyRepeaterItemComponent without `itemName`', {
|
|
150
|
+
deprecationMajorVersion: 8,
|
|
151
|
+
replacementRecommendation: 'Always specify an `itemName` property.',
|
|
152
|
+
});
|
|
153
|
+
this.#itemNameWarned = true;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
ngOnChanges(changes) {
|
|
157
|
+
if (changes['activeIndex']) {
|
|
158
|
+
this.#repeaterService.enableActiveState = true;
|
|
159
|
+
if (changes['activeIndex'].currentValue !==
|
|
160
|
+
changes['activeIndex'].previousValue) {
|
|
161
|
+
this.#repeaterService.activateItemByIndex(this.activeIndex);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
if (changes['reorderable']) {
|
|
165
|
+
if (this.items) {
|
|
166
|
+
this.#updateReorderability();
|
|
167
|
+
}
|
|
168
|
+
this.#updateRole();
|
|
169
|
+
this.#changeDetector.markForCheck();
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
ngOnDestroy() {
|
|
173
|
+
this.#ngUnsubscribe.next();
|
|
174
|
+
this.#ngUnsubscribe.complete();
|
|
175
|
+
this.#destroyDragAndDrop();
|
|
176
|
+
}
|
|
177
|
+
ngOnInit() {
|
|
178
|
+
this.#updateRole();
|
|
179
|
+
}
|
|
180
|
+
onCdkObserveContent() {
|
|
181
|
+
this.#updateRole();
|
|
182
|
+
}
|
|
183
|
+
#updateForExpandMode(itemAdded) {
|
|
184
|
+
if (this.items) {
|
|
185
|
+
let foundExpanded = false;
|
|
186
|
+
const isCollapsible = this.expandMode !== 'none';
|
|
187
|
+
const isSingle = this.expandMode === 'single';
|
|
188
|
+
// Keep any newly-added expanded item expanded and collapse the rest.
|
|
189
|
+
if (itemAdded && itemAdded.isExpanded) {
|
|
190
|
+
foundExpanded = true;
|
|
191
|
+
}
|
|
192
|
+
for (const item of this.items) {
|
|
193
|
+
item.isCollapsible = isCollapsible && !!item.hasItemContent;
|
|
194
|
+
// Collapse any items that aren't the item that was just added.
|
|
195
|
+
if (item !== itemAdded && isSingle && item.isExpanded) {
|
|
196
|
+
if (foundExpanded) {
|
|
197
|
+
// If this item is being collapsed because a new item was
|
|
198
|
+
// added, animate it.
|
|
199
|
+
item.updateForExpanded(false, !!itemAdded);
|
|
200
|
+
}
|
|
201
|
+
foundExpanded = true;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
this.#updateRole();
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
#initializeDragAndDrop() {
|
|
208
|
+
/* Sanity check that we haven't already set up dragging abilities */
|
|
209
|
+
/* istanbul ignore else */
|
|
210
|
+
if (!this.#dragulaService.find(this.dragulaGroupName)) {
|
|
211
|
+
this.#dragulaService.createGroup(this.dragulaGroupName, {
|
|
212
|
+
moves: (el, _container, handle) => {
|
|
213
|
+
const target = el?.querySelector('.sky-repeater-item-grab-handle');
|
|
214
|
+
return !!(this.reorderable && target?.contains(handle));
|
|
215
|
+
},
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
let draggedItemIndex = -1;
|
|
219
|
+
this.#dragulaService
|
|
220
|
+
.drag(this.dragulaGroupName)
|
|
221
|
+
.pipe(takeUntil(this.#ngUnsubscribe))
|
|
222
|
+
.subscribe((args) => {
|
|
223
|
+
/* istanbul ignore else */
|
|
224
|
+
if (args.name === this.dragulaGroupName) {
|
|
225
|
+
this.#destroyAutoScroll();
|
|
226
|
+
this.#autoScroller = this.#autoScrollSvc.autoScroll([this.#scrollableHostSvc.getScrollableHost(this.#elementRef)], {
|
|
227
|
+
margin: 20,
|
|
228
|
+
maxSpeed: 10,
|
|
229
|
+
scrollWhenOutside: true,
|
|
230
|
+
autoScroll: () => true,
|
|
231
|
+
});
|
|
232
|
+
this.#renderer.addClass(args.el, 'sky-repeater-item-dragging');
|
|
233
|
+
draggedItemIndex = this.#adapterService.getRepeaterItemIndex(args.el);
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
this.#dragulaService
|
|
237
|
+
.dragend(this.dragulaGroupName)
|
|
238
|
+
.pipe(takeUntil(this.#ngUnsubscribe))
|
|
239
|
+
.subscribe((args) => {
|
|
240
|
+
/* istanbul ignore else */
|
|
241
|
+
if (args.name === this.dragulaGroupName) {
|
|
242
|
+
this.#destroyAutoScroll();
|
|
243
|
+
this.#renderer.removeClass(args.el, 'sky-repeater-item-dragging');
|
|
244
|
+
const newItemIndex = this.#adapterService.getRepeaterItemIndex(args.el);
|
|
245
|
+
/* sanity check */
|
|
246
|
+
/* istanbul ignore else */
|
|
247
|
+
if (draggedItemIndex >= 0) {
|
|
248
|
+
this.#repeaterService.reorderItem(draggedItemIndex, newItemIndex);
|
|
249
|
+
draggedItemIndex = -1;
|
|
250
|
+
}
|
|
251
|
+
this.#emitTags();
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
#destroyDragAndDrop() {
|
|
256
|
+
/* Sanity check that we have set up dragging abilities */
|
|
257
|
+
/* istanbul ignore else */
|
|
258
|
+
if (this.#dragulaService.find(this.dragulaGroupName)) {
|
|
259
|
+
this.#dragulaService.destroy(this.dragulaGroupName);
|
|
260
|
+
}
|
|
261
|
+
this.#destroyAutoScroll();
|
|
262
|
+
}
|
|
263
|
+
#destroyAutoScroll() {
|
|
264
|
+
if (this.#autoScroller) {
|
|
265
|
+
this.#autoScroller.destroy();
|
|
266
|
+
this.#autoScroller = undefined;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
#emitTags() {
|
|
270
|
+
const tags = this.#repeaterService.items.map((item) => item.tag);
|
|
271
|
+
this.orderChange.emit(tags);
|
|
272
|
+
}
|
|
273
|
+
#everyItemHasTag() {
|
|
274
|
+
/* sanity check */
|
|
275
|
+
/* istanbul ignore if */
|
|
276
|
+
if (!this.items || this.items.length === 0) {
|
|
277
|
+
return false;
|
|
278
|
+
}
|
|
279
|
+
return this.items.toArray().every((item) => {
|
|
280
|
+
return item.tag !== undefined;
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
#updateRole() {
|
|
284
|
+
// Determine a role using a hierarchy based on https://www.w3.org/TR/wai-aria-practices-1.1/
|
|
285
|
+
// 1. If there are one or more interactions in the repeater item projected content, use grid.
|
|
286
|
+
// 2. If there are selectable repeater items and no other interactions, use listbox.
|
|
287
|
+
// 3. If there are no interactions, use list.
|
|
288
|
+
// Default to list role.
|
|
289
|
+
let autoRole = 'list';
|
|
290
|
+
const roleMap = {
|
|
291
|
+
list: { item: 'listitem', title: undefined, content: undefined },
|
|
292
|
+
listbox: { item: 'option', title: undefined, content: undefined },
|
|
293
|
+
grid: { item: 'row', title: 'rowheader', content: 'gridcell' },
|
|
294
|
+
};
|
|
295
|
+
// Based on https://html.spec.whatwg.org/multipage/dom.html#interactive-content
|
|
296
|
+
const interactionSelector = [
|
|
297
|
+
'a[href]',
|
|
298
|
+
'audio[controls]',
|
|
299
|
+
'button',
|
|
300
|
+
'details',
|
|
301
|
+
'embed',
|
|
302
|
+
'iframe',
|
|
303
|
+
'img[usemap]',
|
|
304
|
+
'input:not([type="hidden"])',
|
|
305
|
+
'label',
|
|
306
|
+
'select',
|
|
307
|
+
'textarea',
|
|
308
|
+
'video[controls]',
|
|
309
|
+
'[contenteditable]',
|
|
310
|
+
'.sky-repeater[role="grid"]',
|
|
311
|
+
]
|
|
312
|
+
.map((selector) => `sky-repeater-item-title ${selector}:not([hidden]), sky-repeater-item-content ${selector}:not([hidden])`)
|
|
313
|
+
.concat([`skyux-dropdown`])
|
|
314
|
+
.join(', ');
|
|
315
|
+
const hasInteraction = this.reorderable ||
|
|
316
|
+
this.items?.some((item) => item.isCollapsible) ||
|
|
317
|
+
this.items?.some((item) => !!item.selectable) ||
|
|
318
|
+
!!this.#elementRef.nativeElement.querySelector(interactionSelector);
|
|
319
|
+
if (hasInteraction) {
|
|
320
|
+
// If the repeater matches interaction selector https://www.w3.org/TR/wai-aria-practices-1.1/#grid
|
|
321
|
+
autoRole = 'grid';
|
|
322
|
+
}
|
|
323
|
+
if (this.role !== autoRole) {
|
|
324
|
+
this.#repeaterService.itemRole.next({
|
|
325
|
+
...roleMap[autoRole],
|
|
326
|
+
});
|
|
327
|
+
this.role = `${autoRole}`;
|
|
328
|
+
this.#changeDetector.markForCheck();
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
#updateReorderability() {
|
|
332
|
+
if (this.items) {
|
|
333
|
+
for (const item of this.items) {
|
|
334
|
+
item.reorderable = this.reorderable;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
#validateTags() {
|
|
339
|
+
if (this.reorderable && !this.#everyItemHasTag()) {
|
|
340
|
+
console.warn('Please supply tag properties for each repeater item when reordering functionality is enabled.');
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyRepeaterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
344
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: SkyRepeaterComponent, selector: "sky-repeater", inputs: { activeIndex: "activeIndex", ariaLabel: "ariaLabel", reorderable: "reorderable", expandMode: "expandMode" }, outputs: { activeIndexChange: "activeIndexChange", orderChange: "orderChange" }, providers: [
|
|
345
|
+
SkyRepeaterService,
|
|
346
|
+
SkyRepeaterAdapterService,
|
|
347
|
+
SkyRepeaterAutoScrollService,
|
|
348
|
+
], queries: [{ propertyName: "items", predicate: SkyRepeaterItemComponent }], usesOnChanges: true, ngImport: i0, template: "<ng-container #repeaterHost>\n <div\n class=\"sky-repeater\"\n [attr.role]=\"role\"\n [attr.aria-label]=\"ariaLabel || ('skyux_repeater_label' | skyLibResources)\"\n [dragula]=\"dragulaGroupName\"\n (cdkObserveContent)=\"onCdkObserveContent()\"\n >\n <ng-content></ng-content>\n </div>\n</ng-container>\n", styles: [".sky-repeater{padding:0}\n"], dependencies: [{ kind: "directive", type: i1.DragulaDirective, selector: "[dragula]", inputs: ["dragula", "dragulaModel"], outputs: ["dragulaModelChange"] }, { kind: "directive", type: i2.CdkObserveContent, selector: "[cdkObserveContent]", inputs: ["cdkObserveContentDisabled", "debounce"], outputs: ["cdkObserveContent"], exportAs: ["cdkObserveContent"] }, { kind: "pipe", type: i3.SkyLibResourcesPipe, name: "skyLibResources" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
349
|
+
}
|
|
350
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyRepeaterComponent, decorators: [{
|
|
351
|
+
type: Component,
|
|
352
|
+
args: [{ selector: 'sky-repeater', providers: [
|
|
353
|
+
SkyRepeaterService,
|
|
354
|
+
SkyRepeaterAdapterService,
|
|
355
|
+
SkyRepeaterAutoScrollService,
|
|
356
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container #repeaterHost>\n <div\n class=\"sky-repeater\"\n [attr.role]=\"role\"\n [attr.aria-label]=\"ariaLabel || ('skyux_repeater_label' | skyLibResources)\"\n [dragula]=\"dragulaGroupName\"\n (cdkObserveContent)=\"onCdkObserveContent()\"\n >\n <ng-content></ng-content>\n </div>\n</ng-container>\n", styles: [".sky-repeater{padding:0}\n"] }]
|
|
357
|
+
}], ctorParameters: function () { return []; }, propDecorators: { activeIndex: [{
|
|
358
|
+
type: Input
|
|
359
|
+
}], ariaLabel: [{
|
|
360
|
+
type: Input
|
|
361
|
+
}], reorderable: [{
|
|
362
|
+
type: Input
|
|
363
|
+
}], expandMode: [{
|
|
364
|
+
type: Input
|
|
365
|
+
}], activeIndexChange: [{
|
|
366
|
+
type: Output
|
|
367
|
+
}], orderChange: [{
|
|
368
|
+
type: Output
|
|
369
|
+
}], items: [{
|
|
370
|
+
type: ContentChildren,
|
|
371
|
+
args: [SkyRepeaterItemComponent]
|
|
372
|
+
}] } });
|
|
373
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xpc3RzL3NyYy9saWIvbW9kdWxlcy9yZXBlYXRlci9yZXBlYXRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbGlzdHMvc3JjL2xpYi9tb2R1bGVzL3JlcGVhdGVyL3JlcGVhdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUVOLFNBQVMsRUFFVCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUk5RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVyRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7QUFFeEQ7O0dBRUc7QUFZSCxNQUFNLE9BQU8sb0JBQW9CO0lBOEIvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Ba0JHO0lBQ0gsSUFDVyxVQUFVLENBQUMs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O1lBQ3pCLDRCQUE0QjtTQUM3QixnREE0RWdCLHdCQUF3QixrREMxSDNDLHVVQVdBOzsyRkRzQ2Esb0JBQW9CO2tCQVhoQyxTQUFTOytCQUNFLGNBQWMsYUFHYjt3QkFDVCxrQkFBa0I7d0JBQ2xCLHlCQUF5Qjt3QkFDekIsNEJBQTRCO3FCQUM3QixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTTswRUFZeEMsV0FBVztzQkFEakIsS0FBSztnQkFXQyxTQUFTO3NCQURmLEtBQUs7Z0JBU0MsV0FBVztzQkFEakIsS0FBSztnQkF1QkssVUFBVTtzQkFEcEIsS0FBSztnQkFjQyxpQkFBaUI7c0JBRHZCLE1BQU07Z0JBU0EsV0FBVztzQkFGakIsTUFBTTtnQkFLQSxLQUFLO3NCQURYLGVBQWU7dUJBQUMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFJlbmRlcmVyMixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNreUxvZ1NlcnZpY2UgfSBmcm9tICdAc2t5dXgvY29yZSc7XG5pbXBvcnQgeyBTa3lTY3JvbGxhYmxlSG9zdFNlcnZpY2UgfSBmcm9tICdAc2t5dXgvY29yZSc7XG5cbmltcG9ydCB7IERyYWd1bGFTZXJ2aWNlIH0gZnJvbSAnbmcyLWRyYWd1bGEnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTa3lSZXBlYXRlckFkYXB0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9yZXBlYXRlci1hZGFwdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5UmVwZWF0ZXJBdXRvU2Nyb2xsU2VydmljZSB9IGZyb20gJy4vcmVwZWF0ZXItYXV0by1zY3JvbGwuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lSZXBlYXRlckF1dG9TY3JvbGxlciB9IGZyb20gJy4vcmVwZWF0ZXItYXV0by1zY3JvbGxlcic7XG5pbXBvcnQgeyBTa3lSZXBlYXRlckV4cGFuZE1vZGVUeXBlIH0gZnJvbSAnLi9yZXBlYXRlci1leHBhbmQtbW9kZS10eXBlJztcbmltcG9ydCB7IFNreVJlcGVhdGVySXRlbVJvbGVzVHlwZSB9IGZyb20gJy4vcmVwZWF0ZXItaXRlbS1yb2xlcy50eXBlJztcbmltcG9ydCB7IFNreVJlcGVhdGVySXRlbUNvbXBvbmVudCB9IGZyb20gJy4vcmVwZWF0ZXItaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5UmVwZWF0ZXJSb2xlVHlwZSB9IGZyb20gJy4vcmVwZWF0ZXItcm9sZS50eXBlJztcbmltcG9ydCB7IFNreVJlcGVhdGVyU2VydmljZSB9IGZyb20gJy4vcmVwZWF0ZXIuc2VydmljZSc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNvbnRhaW5lciB0byBkaXNwbGF5IHJlcGVhdGVyIGl0ZW1zLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktcmVwZWF0ZXInLFxuICBzdHlsZVVybHM6IFsnLi9yZXBlYXRlci5jb21wb25lbnQuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vcmVwZWF0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICBTa3lSZXBlYXRlclNlcnZpY2UsXG4gICAgU2t5UmVwZWF0ZXJBZGFwdGVyU2VydmljZSxcbiAgICBTa3lSZXBlYXRlckF1dG9TY3JvbGxTZXJ2aWNlLFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2t5UmVwZWF0ZXJDb21wb25lbnRcbiAgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdDaGVja2VkLCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0XG57XG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIHJlcGVhdGVyIGl0ZW0gdG8gdmlzdWFsbHkgaGlnaGxpZ2h0IGFzIGFjdGl2ZS5cbiAgICogRm9yIGV4YW1wbGUsIHVzZSB0aGlzIHByb3BlcnR5IGluIGNvbmp1bmN0aW9uIHdpdGggdGhlXG4gICAqIFtzcGxpdCB2aWV3IGNvbXBvbmVudF0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9jb21wb25lbnRzL3NwbGl0LXZpZXcpXG4gICAqIHRvIGhpZ2hsaWdodCBhIHJlcGVhdGVyIGl0ZW0gd2hpbGUgdXNlcnMgZWRpdCBpdC4gT25seSBvbmUgaXRlbSBjYW4gYmUgYWN0aXZlIGF0IGEgdGltZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhY3RpdmVJbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJJQSBsYWJlbCBmb3IgdGhlIHJlcGVhdGVyIGxpc3QuXG4gICAqIFRoaXMgc2V0cyB0aGUgcmVwZWF0ZXIgbGlzdCdzIGBhcmlhLWxhYmVsYCBhdHRyaWJ1dGUgdG8gcHJvdmlkZSBhIHRleHQgZXF1aXZhbGVudCBmb3Igc2NyZWVuIHJlYWRlcnNcbiAgICogW3RvIHN1cHBvcnQgYWNjZXNzaWJpbGl0eV0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9sZWFybi9hY2Nlc3NpYmlsaXR5KS5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGBhcmlhLWxhYmVsYCBhdHRyaWJ1dGUsIHNlZSB0aGUgW1dBSS1BUklBIGRlZmluaXRpb25dKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS8jYXJpYS1sYWJlbCkuXG4gICAqIEBkZWZhdWx0IFwiTGlzdCBvZiBpdGVtc1wiXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgYXJpYUxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdXNlcnMgY2FuIGNoYW5nZSB0aGUgb3JkZXIgb2YgaXRlbXMgaW4gdGhlIHJlcGVhdGVyIGxpc3QuXG4gICAqIEVhY2ggcmVwZWF0ZXIgaXRlbSBhbHNvIGhhcyBgcmVvcmRlcmFibGVgIHByb3BlcnR5IHRvIGluZGljYXRlIHdoZXRoZXJcbiAgICogdXNlcnMgY2FuIGNoYW5nZSBpdHMgb3JkZXIuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgcmVvcmRlcmFibGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIGxheW91dCB0aGF0IGRldGVybWluZXMgd2hpY2ggcmVwZWF0ZXIgaXRlbXMgYXJlIGV4cGFuZGVkIGJ5IGRlZmF1bHQgYW5kIHdoZXRoZXJcbiAgICogcmVwZWF0ZXIgaXRlbXMgYXJlIGV4cGFuZGFibGUgYW5kIGNvbGxhcHNpYmxlLiBDb2xsYXBzZWQgaXRlbXMgZGlzcGxheSB0aXRsZXMgb25seS5cbiAgICogVGhlIHZhbGlkIG9wdGlvbnMgYXJlIGBtdWx0aXBsZWAsIGBub25lYCwgYW5kIGBzaW5nbGVgLlxuICAgKiAtIGBtdWx0aXBsZWAgbG9hZHMgcmVwZWF0ZXIgaXRlbXMgaW4gYW4gZXhwYW5kZWQgc3RhdGUgdW5sZXNzIGBpc0V4cGFuZGVkYCBpcyBzZXQgdG9cbiAgICogYGZhbHNlYCBmb3IgYSByZXBlYXRlciBpdGVtLiBUaGlzIGxheW91dCBhbGxvd3MgdXNlcnMgdG8gZXhwYW5kIGFuZCBjb2xsYXBzZVxuICAgKiBhcyBtYW55IHJlcGVhdGVyIGl0ZW1zIGFzIG5lY2Vzc2FyeS4gSXQgaXMgYmVzdC1zdWl0ZWQgdG8gcmVwZWF0ZXIgaXRlbXMgd2hlcmUgYm9keVxuICAgKiBjb250ZW50IGlzIGltcG9ydGFudCBidXQgdXNlcnMgZG9uJ3QgYWx3YXlzIG5lZWQgdG8gc2VlIGl0LlxuICAgKiAtIGBub25lYCBsb2FkcyBhbGwgcmVwZWF0ZXIgaXRlbXMgaW4gYW4gZXhwYW5kZWQgc3RhdGUgYW5kIGRvZXMgbm90IGFsbG93IHVzZXJzIHRvXG4gICAqIGNvbGxhcHNlIHRoZW0uIFRoaXMgZGVmYXVsdCBsYXlvdXQgcHJvdmlkZXMgdGhlIHF1aWNrZXN0IGFjY2VzcyB0byB0aGUgZGV0YWlscyBpbiB0aGVcbiAgICogcmVwZWF0ZXIgaXRlbXMuIEl0IGlzIGJlc3Qtc3VpdGVkIHRvIHJlcGVhdGVyIGl0ZW1zIHdpdGggY29uY2lzZSBjb250ZW50XG4gICAqIHRoYXQgdXNlcnMgbmVlZCB0byB2aWV3IGZyZXF1ZW50bHkuXG4gICAqIC0gYHNpbmdsZWAgbG9hZHMgb25lIHJlcGVhdGVyIGl0ZW0gaW4gYW4gZXhwYW5kZWQgc3RhdGUgYW5kIGNvbGxhcHNlcyBhbGwgb3RoZXJzLlxuICAgKiBUaGUgZXhwYW5kZWQgcmVwZWF0ZXIgaXRlbSBpcyB0aGUgZmlyc3Qgb25lIHdoZXJlIGBpc0V4cGFuZGVkYCBpcyBzZXQgdG8gYHRydWVgLiBUaGlzIGxheW91dFxuICAgKiBhbGxvd3MgdXNlcnMgdG8gZXhwYW5kIG9uZSBpdGVtIGF0IGEgdGltZS4gSXQgcHJvdmlkZXMgdGhlIG1vc3QgY29tcGFjdCB2aWV3IGFuZCBpc1xuICAgKiBiZXN0LXN1aXRlZCB0byByZXBlYXRlciBpdGVtcyB3aGVyZSB0aGUgbW9zdCBpbXBvcnRhbnQgaW5mb3JtYXRpb24gaXMgaW4gdGhlIHRpdGxlc1xuICAgKiBhbmQgdXNlcnMgb25seSBvY2Nhc2lvbmFsbHkgbmVlZCB0byB2aWV3IHRoZSBib2R5IGNvbnRlbnQuXG4gICAqIEBkZWZhdWx0IFwibm9uZVwiXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGV4cGFuZE1vZGUodmFsdWU6IFNreVJlcGVhdGVyRXhwYW5kTW9kZVR5cGUgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNyZXBlYXRlclNlcnZpY2UuZXhwYW5kTW9kZSA9IHZhbHVlO1xuICAgIHRoaXMuI3VwZGF0ZUZvckV4cGFuZE1vZGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZXhwYW5kTW9kZSgpOiBTa3lSZXBlYXRlckV4cGFuZE1vZGVUeXBlIHtcbiAgICByZXR1cm4gdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLmV4cGFuZE1vZGU7XG4gIH1cblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB0aGUgYWN0aXZlIHJlcGVhdGVyIGl0ZW0gY2hhbmdlcy5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgYWN0aXZlSW5kZXhDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB1c2VycyBjaGFuZ2UgdGhlIG9yZGVyIG9mIHJlcGVhdGVyIGl0ZW1zLlxuICAgKiBUaGlzIGV2ZW50IGVtaXRzIGFuIG9yZGVyZWQgYXJyYXkgb2YgdGhlIGB0YWdgIHByb3BlcnRpZXMgdGhhdCB0aGUgY29uc3VtZXIgcHJvdmlkZXMgZm9yIGVhY2ggcmVwZWF0ZXIgaXRlbS5cbiAgICovXG4gIEBPdXRwdXQoKVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwdWJsaWMgb3JkZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oU2t5UmVwZWF0ZXJJdGVtQ29tcG9uZW50KVxuICBwdWJsaWMgaXRlbXM6IFF1ZXJ5TGlzdDxTa3lSZXBlYXRlckl0ZW1Db21wb25lbnQ+IHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBkcmFndWxhR3JvdXBOYW1lOiBzdHJpbmc7XG5cbiAgcHVibGljIHJvbGU6IFNreVJlcGVhdGVyUm9sZVR5cGUgfCB1bmRlZmluZWQ7XG5cbiAgI2F1dG9TY3JvbGxlcjogU2t5UmVwZWF0ZXJBdXRvU2Nyb2xsZXIgfCB1bmRlZmluZWQ7XG4gICNuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgI2l0ZW1OYW1lV2FybmVkID0gZmFsc2U7XG5cbiAgI2FkYXB0ZXJTZXJ2aWNlID0gaW5qZWN0KFNreVJlcGVhdGVyQWRhcHRlclNlcnZpY2UpO1xuICAjY2hhbmdlRGV0ZWN0b3IgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAjZHJhZ3VsYVNlcnZpY2UgPSBpbmplY3QoRHJhZ3VsYVNlcnZpY2UpO1xuICAjZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgI3JlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG4gICNyZXBlYXRlclNlcnZpY2UgPSBpbmplY3QoU2t5UmVwZWF0ZXJTZXJ2aWNlKTtcbiAgI2F1dG9TY3JvbGxTdmMgPSBpbmplY3QoU2t5UmVwZWF0ZXJBdXRvU2Nyb2xsU2VydmljZSk7XG4gICNzY3JvbGxhYmxlSG9zdFN2YyA9IGluamVjdChTa3lTY3JvbGxhYmxlSG9zdFNlcnZpY2UpO1xuICAjbG9nU3ZjID0gaW5qZWN0KFNreUxvZ1NlcnZpY2UpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZHJhZ3VsYUdyb3VwTmFtZSA9IGBza3ktcmVwZWF0ZXItZHJhZ3VsYS0ke1xuICAgICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLnJlcGVhdGVyR3JvdXBJZFxuICAgIH1gO1xuXG4gICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLml0ZW1Db2xsYXBzZVN0YXRlQ2hhbmdlXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChpdGVtOiBTa3lSZXBlYXRlckl0ZW1Db21wb25lbnQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZXhwYW5kTW9kZSA9PT0gJ3NpbmdsZScgJiYgaXRlbS5pc0V4cGFuZGVkKSB7XG4gICAgICAgICAgdGhpcy5pdGVtcz8uZm9yRWFjaCgob3RoZXJJdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG90aGVySXRlbSAhPT0gaXRlbSAmJlxuICAgICAgICAgICAgICBvdGhlckl0ZW0uaXNFeHBhbmRlZCAmJlxuICAgICAgICAgICAgICBvdGhlckl0ZW0uaXNDb2xsYXBzaWJsZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIG90aGVySXRlbS5pc0V4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLmFjdGl2ZUl0ZW1JbmRleENoYW5nZVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGluZGV4ICE9PSB0aGlzLmFjdGl2ZUluZGV4KSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IGluZGV4O1xuICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXhDaGFuZ2UuZW1pdChpbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLm9yZGVyQ2hhbmdlXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy4jZW1pdFRhZ3MoKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy4jdXBkYXRlRm9yRXhwYW5kTW9kZSgpO1xuXG4gICAgdGhpcy4jYWRhcHRlclNlcnZpY2Uuc2V0UmVwZWF0ZXJIb3N0KHRoaXMuI2VsZW1lbnRSZWYpO1xuXG4gICAgdGhpcy4jaW5pdGlhbGl6ZURyYWdBbmREcm9wKCk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIC8vIElmIGFjdGl2ZUluZGV4IGhhcyBiZWVuIHNldCBvbiBpbml0LCBjYWxsIHNlcnZpY2UgdG8gYWN0aXZhdGUgdGhlIGFwcHJvcHJpYXRlIGl0ZW0uXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5hY3RpdmVJbmRleCB8fCB0aGlzLmFjdGl2ZUluZGV4ID09PSAwKSB7XG4gICAgICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5hY3RpdmF0ZUl0ZW1CeUluZGV4KHRoaXMuYWN0aXZlSW5kZXgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLiN2YWxpZGF0ZVRhZ3MoKTtcbiAgICB9KTtcblxuICAgIC8vIEhBQ0s6IE5vdCB1cGRhdGluZyBmb3IgZXhwYW5kIG1vZGUgaW4gYSB0aW1lb3V0IGNhdXNlcyBhbiBlcnJvci5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy82MDA1XG4gICAgdGhpcy5pdGVtcz8uY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5pdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy4jdXBkYXRlRm9yRXhwYW5kTW9kZSh0aGlzLml0ZW1zLmxhc3QpO1xuXG4gICAgICAgICAgdGhpcy4jdXBkYXRlUmVvcmRlcmFiaWxpdHkoKTtcblxuICAgICAgICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5pdGVtcyA9IHRoaXMuaXRlbXMudG9BcnJheSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5hY3RpdmF0ZUl0ZW1CeUluZGV4KHRoaXMuYWN0aXZlSW5kZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4jdXBkYXRlUm9sZSgpO1xuXG4gICAgICAgIHRoaXMuI3ZhbGlkYXRlVGFncygpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuI3VwZGF0ZUZvckV4cGFuZE1vZGUoKTtcblxuICAgICAgdGhpcy5pdGVtcz8uZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBpdGVtLnJlb3JkZXJhYmxlID0gdGhpcy5yZW9yZGVyYWJsZTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLiN1cGRhdGVSb2xlKCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy4jaXRlbU5hbWVXYXJuZWQgJiYgdGhpcy5pdGVtcz8uc29tZSgoaXRlbSkgPT4gIWl0ZW0uaXRlbU5hbWUpKSB7XG4gICAgICB0aGlzLiNsb2dTdmM/LmRlcHJlY2F0ZWQoJ1NreVJlcGVhdGVySXRlbUNvbXBvbmVudCB3aXRob3V0IGBpdGVtTmFtZWAnLCB7XG4gICAgICAgIGRlcHJlY2F0aW9uTWFqb3JWZXJzaW9uOiA4LFxuICAgICAgICByZXBsYWNlbWVudFJlY29tbWVuZGF0aW9uOiAnQWx3YXlzIHNwZWNpZnkgYW4gYGl0ZW1OYW1lYCBwcm9wZXJ0eS4nLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuI2l0ZW1OYW1lV2FybmVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydhY3RpdmVJbmRleCddKSB7XG4gICAgICB0aGlzLiNyZXBlYXRlclNlcnZpY2UuZW5hYmxlQWN0aXZlU3RhdGUgPSB0cnVlO1xuICAgICAgaWYgKFxuICAgICAgICBjaGFuZ2VzWydhY3RpdmVJbmRleCddLmN1cnJlbnRWYWx1ZSAhPT1cbiAgICAgICAgY2hhbmdlc1snYWN0aXZlSW5kZXgnXS5wcmV2aW91c1ZhbHVlXG4gICAgICApIHtcbiAgICAgICAgdGhpcy4jcmVwZWF0ZXJTZXJ2aWNlLmFjdGl2YXRlSXRlbUJ5SW5kZXgodGhpcy5hY3RpdmVJbmRleCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ3Jlb3JkZXJhYmxlJ10pIHtcbiAgICAgIGlmICh0aGlzLml0ZW1zKSB7XG4gICAgICAgIHRoaXMuI3VwZGF0ZVJlb3JkZXJhYmlsaXR5KCk7XG4gICAgICB9XG4gICAgICB0aGlzLiN1cGRhdGVSb2xlKCk7XG5cbiAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy4jZGVzdHJveURyYWdBbmREcm9wKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy4jdXBkYXRlUm9sZSgpO1xuICB9XG5cbiAgcHVibGljIG9uQ2RrT2JzZXJ2ZUNvbnRlbnQoKTogdm9pZCB7XG4gICAgdGhpcy4jdXBkYXRlUm9sZSgpO1xuICB9XG5cbiAgI3VwZGF0ZUZvckV4cGFuZE1vZGUoaXRlbUFkZGVkPzogU2t5UmVwZWF0ZXJJdGVtQ29tcG9uZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXRlbXMpIHtcbiAgICAgIGxldCBmb3VuZEV4cGFuZGVkID0gZmFsc2U7XG4gICAgICBjb25zdCBpc0NvbGxhcHNpYmxlID0gdGhpcy5leHBhbmRNb2RlICE9PSAnbm9uZSc7XG4gICAgICBjb25zdCBpc1NpbmdsZSA9IHRoaXMuZXhwYW5kTW9kZSA9PT0gJ3NpbmdsZSc7XG5cbiAgICAgIC8vIEtlZXAgYW55IG5ld2x5LWFkZGVkIGV4cGFuZGVkIGl0ZW0gZXhwYW5kZWQgYW5kIGNvbGxhcHNlIHRoZSByZXN0LlxuICAgICAgaWYgKGl0ZW1BZGRlZCAmJiBpdGVtQWRkZWQuaXNFeHBhbmRlZCkge1xuICAgICAgICBmb3VuZEV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuaXRlbXMpIHtcbiAgICAgICAgaXRlbS5pc0NvbGxhcHNpYmxlID0gaXNDb2xsYXBzaWJsZSAmJiAhIWl0ZW0uaGFzSXRlbUNvbnRlbnQ7XG5cbiAgICAgICAgLy8gQ29sbGFwc2UgYW55IGl0ZW1zIHRoYXQgYXJlbid0IHRoZSBpdGVtIHRoYXQgd2FzIGp1c3QgYWRkZWQuXG4gICAgICAgIGlmIChpdGVtICE9PSBpdGVtQWRkZWQgJiYgaXNTaW5nbGUgJiYgaXRlbS5pc0V4cGFuZGVkKSB7XG4gICAgICAgICAgaWYgKGZvdW5kRXhwYW5kZWQpIHtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgaXRlbSBpcyBiZWluZyBjb2xsYXBzZWQgYmVjYXVzZSBhIG5ldyBpdGVtIHdhc1xuICAgICAgICAgICAgLy8gYWRkZWQsIGFuaW1hdGUgaXQuXG4gICAgICAgICAgICBpdGVtLnVwZGF0ZUZvckV4cGFuZGVkKGZhbHNlLCAhIWl0ZW1BZGRlZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm91bmRFeHBhbmRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy4jdXBkYXRlUm9sZSgpO1xuICAgIH1cbiAgfVxuXG4gICNpbml0aWFsaXplRHJhZ0FuZERyb3AoKTogdm9pZCB7XG4gICAgLyogU2FuaXR5IGNoZWNrIHRoYXQgd2UgaGF2ZW4ndCBhbHJlYWR5IHNldCB1cCBkcmFnZ2luZyBhYmlsaXRpZXMgKi9cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICghdGhpcy4jZHJhZ3VsYVNlcnZpY2UuZmluZCh0aGlzLmRyYWd1bGFHcm91cE5hbWUpKSB7XG4gICAgICB0aGlzLiNkcmFndWxhU2VydmljZS5jcmVhdGVHcm91cCh0aGlzLmRyYWd1bGFHcm91cE5hbWUsIHtcbiAgICAgICAgbW92ZXM6IChlbCwgX2NvbnRhaW5lciwgaGFuZGxlKSA9PiB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZWw/LnF1ZXJ5U2VsZWN0b3IoJy5za3ktcmVwZWF0ZXItaXRlbS1ncmFiLWhhbmRsZScpO1xuICAgICAgICAgIHJldHVybiAhIShcbiAgICAgICAgICAgIHRoaXMucmVvcmRlcmFibGUgJiYgdGFyZ2V0Py5jb250YWlucyhoYW5kbGUgYXMgRWxlbWVudCB8IG51bGwpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCBkcmFnZ2VkSXRlbUluZGV4ID0gLTE7XG5cbiAgICB0aGlzLiNkcmFndWxhU2VydmljZVxuICAgICAgLmRyYWcodGhpcy5kcmFndWxhR3JvdXBOYW1lKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoYXJncykgPT4ge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoYXJncy5uYW1lID09PSB0aGlzLmRyYWd1bGFHcm91cE5hbWUpIHtcbiAgICAgICAgICB0aGlzLiNkZXN0cm95QXV0b1Njcm9sbCgpO1xuXG4gICAgICAgICAgdGhpcy4jYXV0b1Njcm9sbGVyID0gdGhpcy4jYXV0b1Njcm9sbFN2Yy5hdXRvU2Nyb2xsKFxuICAgICAgICAgICAgW3RoaXMuI3Njcm9sbGFibGVIb3N0U3ZjLmdldFNjcm9sbGFibGVIb3N0KHRoaXMuI2VsZW1lbnRSZWYpXSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbWFyZ2luOiAyMCxcbiAgICAgICAgICAgICAgbWF4U3BlZWQ6IDEwLFxuICAgICAgICAgICAgICBzY3JvbGxXaGVuT3V0c2lkZTogdHJ1ZSxcbiAgICAgICAgICAgICAgYXV0b1Njcm9sbDogKCkgPT4gdHJ1ZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy4jcmVuZGVyZXIuYWRkQ2xhc3MoYXJncy5lbCwgJ3NreS1yZXBlYXRlci1pdGVtLWRyYWdnaW5nJyk7XG4gICAgICAgICAgZHJhZ2dlZEl0ZW1JbmRleCA9IHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmdldFJlcGVhdGVySXRlbUluZGV4KFxuICAgICAgICAgICAgYXJncy5lbCBhcyBIVE1MRWxlbWVudFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgdGhpcy4jZHJhZ3VsYVNlcnZpY2VcbiAgICAgIC5kcmFnZW5kKHRoaXMuZHJhZ3VsYUdyb3VwTmFtZSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGFyZ3MpID0+IHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKGFyZ3MubmFtZSA9PT0gdGhpcy5kcmFndWxhR3JvdXBOYW1lKSB7XG4gICAgICAgICAgdGhpcy4jZGVzdHJveUF1dG9TY3JvbGwoKTtcblxuICAgICAgICAgIHRoaXMuI3JlbmRlcmVyLnJlbW92ZUNsYXNzKGFyZ3MuZWwsICdza3ktcmVwZWF0ZXItaXRlbS1kcmFnZ2luZycpO1xuICAgICAgICAgIGNvbnN0IG5ld0l0ZW1JbmRleCA9IHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmdldFJlcGVhdGVySXRlbUluZGV4KFxuICAgICAgICAgICAgYXJncy5lbCBhcyBIVE1MRWxlbWVudFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgIGlmIChkcmFnZ2VkSXRlbUluZGV4ID49IDApIHtcbiAgICAgICAgICAgIHRoaXMuI3JlcGVhdGVyU2VydmljZS5yZW9yZGVySXRlbShkcmFnZ2VkSXRlbUluZGV4LCBuZXdJdGVtSW5kZXgpO1xuICAgICAgICAgICAgZHJhZ2dlZEl0ZW1JbmRleCA9IC0xO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuI2VtaXRUYWdzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgI2Rlc3Ryb3lEcmFnQW5kRHJvcCgpOiB2b2lkIHtcbiAgICAvKiBTYW5pdHkgY2hlY2sgdGhhdCB3ZSBoYXZlIHNldCB1cCBkcmFnZ2luZyBhYmlsaXRpZXMgKi9cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLiNkcmFndWxhU2VydmljZS5maW5kKHRoaXMuZHJhZ3VsYUdyb3VwTmFtZSkpIHtcbiAgICAgIHRoaXMuI2RyYWd1bGFTZXJ2aWNlLmRlc3Ryb3kodGhpcy5kcmFndWxhR3JvdXBOYW1lKTtcbiAgICB9XG5cbiAgICB0aGlzLiNkZXN0cm95QXV0b1Njcm9sbCgpO1xuICB9XG5cbiAgI2Rlc3Ryb3lBdXRvU2Nyb2xsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNhdXRvU2Nyb2xsZXIpIHtcbiAgICAgIHRoaXMuI2F1dG9TY3JvbGxlci5kZXN0cm95KCk7XG4gICAgICB0aGlzLiNhdXRvU2Nyb2xsZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgI2VtaXRUYWdzKCk6IHZvaWQge1xuICAgIGNvbnN0IHRhZ3MgPSB0aGlzLiNyZXBlYXRlclNlcnZpY2UuaXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLnRhZyk7XG4gICAgdGhpcy5vcmRlckNoYW5nZS5lbWl0KHRhZ3MpO1xuICB9XG5cbiAgI2V2ZXJ5SXRlbUhhc1RhZygpOiBib29sZWFuIHtcbiAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIXRoaXMuaXRlbXMgfHwgdGhpcy5pdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaXRlbXMudG9BcnJheSgpLmV2ZXJ5KChpdGVtKSA9PiB7XG4gICAgICByZXR1cm4gaXRlbS50YWcgIT09IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgfVxuXG4gICN1cGRhdGVSb2xlKCk6IHZvaWQge1xuICAgIC8vIERldGVybWluZSBhIHJvbGUgdXNpbmcgYSBoaWVyYXJjaHkgYmFzZWQgb24gaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLXByYWN0aWNlcy0xLjEvXG4gICAgLy8gICAxLiBJZiB0aGVyZSBhcmUgb25lIG9yIG1vcmUgaW50ZXJhY3Rpb25zIGluIHRoZSByZXBlYXRlciBpdGVtIHByb2plY3RlZCBjb250ZW50LCB1c2UgZ3JpZC5cbiAgICAvLyAgIDIuIElmIHRoZXJlIGFyZSBzZWxlY3RhYmxlIHJlcGVhdGVyIGl0ZW1zIGFuZCBubyBvdGhlciBpbnRlcmFjdGlvbnMsIHVzZSBsaXN0Ym94LlxuICAgIC8vICAgMy4gSWYgdGhlcmUgYXJlIG5vIGludGVyYWN0aW9ucywgdXNlIGxpc3QuXG5cbiAgICAvLyBEZWZhdWx0IHRvIGxpc3Qgcm9sZS5cbiAgICBsZXQgYXV0b1JvbGU6IFNreVJlcGVhdGVyUm9sZVR5cGUgPSAnbGlzdCc7XG5cbiAgICBjb25zdCByb2xlTWFwOiBSZWNvcmQ8U2t5UmVwZWF0ZXJSb2xlVHlwZSwgU2t5UmVwZWF0ZXJJdGVtUm9sZXNUeXBlPiA9IHtcbiAgICAgIGxpc3Q6IHsgaXRlbTogJ2xpc3RpdGVtJywgdGl0bGU6IHVuZGVmaW5lZCwgY29udGVudDogdW5kZWZpbmVkIH0sXG4gICAgICBsaXN0Ym94OiB7IGl0ZW06ICdvcHRpb24nLCB0aXRsZTogdW5kZWZpbmVkLCBjb250ZW50OiB1bmRlZmluZWQgfSxcbiAgICAgIGdyaWQ6IHsgaXRlbTogJ3JvdycsIHRpdGxlOiAncm93aGVhZGVyJywgY29udGVudDogJ2dyaWRjZWxsJyB9LFxuICAgIH07XG5cbiAgICAvLyBCYXNlZCBvbiBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9kb20uaHRtbCNpbnRlcmFjdGl2ZS1jb250ZW50XG4gICAgY29uc3QgaW50ZXJhY3Rpb25TZWxlY3RvciA9IFtcbiAgICAgICdhW2hyZWZdJyxcbiAgICAgICdhdWRpb1tjb250cm9sc10nLFxuICAgICAgJ2J1dHRvbicsXG4gICAgICAnZGV0YWlscycsXG4gICAgICAnZW1iZWQnLFxuICAgICAgJ2lmcmFtZScsXG4gICAgICAnaW1nW3VzZW1hcF0nLFxuICAgICAgJ2lucHV0Om5vdChbdHlwZT1cImhpZGRlblwiXSknLFxuICAgICAgJ2xhYmVsJyxcbiAgICAgICdzZWxlY3QnLFxuICAgICAgJ3RleHRhcmVhJyxcbiAgICAgICd2aWRlb1tjb250cm9sc10nLFxuICAgICAgJ1tjb250ZW50ZWRpdGFibGVdJyxcbiAgICAgICcuc2t5LXJlcGVhdGVyW3JvbGU9XCJncmlkXCJdJyxcbiAgICBdXG4gICAgICAubWFwKFxuICAgICAgICAoc2VsZWN0b3IpID0+XG4gICAgICAgICAgYHNreS1yZXBlYXRlci1pdGVtLXRpdGxlICR7c2VsZWN0b3J9Om5vdChbaGlkZGVuXSksIHNreS1yZXBlYXRlci1pdGVtLWNvbnRlbnQgJHtzZWxlY3Rvcn06bm90KFtoaWRkZW5dKWBcbiAgICAgIClcbiAgICAgIC5jb25jYXQoW2Bza3l1eC1kcm9wZG93bmBdKVxuICAgICAgLmpvaW4oJywgJyk7XG5cbiAgICBjb25zdCBoYXNJbnRlcmFjdGlvbiA9XG4gICAgICB0aGlzLnJlb3JkZXJhYmxlIHx8XG4gICAgICB0aGlzLml0ZW1zPy5zb21lKChpdGVtKSA9PiBpdGVtLmlzQ29sbGFwc2libGUpIHx8XG4gICAgICB0aGlzLml0ZW1zPy5zb21lKChpdGVtKSA9PiAhIWl0ZW0uc2VsZWN0YWJsZSkgfHxcbiAgICAgICEhKHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkucXVlcnlTZWxlY3RvcihcbiAgICAgICAgaW50ZXJhY3Rpb25TZWxlY3RvclxuICAgICAgKTtcblxuICAgIGlmIChoYXNJbnRlcmFjdGlvbikge1xuICAgICAgLy8gSWYgdGhlIHJlcGVhdGVyIG1hdGNoZXMgaW50ZXJhY3Rpb24gc2VsZWN0b3IgaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLXByYWN0aWNlcy0xLjEvI2dyaWRcbiAgICAgIGF1dG9Sb2xlID0gJ2dyaWQnO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJvbGUgIT09IGF1dG9Sb2xlKSB7XG4gICAgICB0aGlzLiNyZXBlYXRlclNlcnZpY2UuaXRlbVJvbGUubmV4dCh7XG4gICAgICAgIC4uLnJvbGVNYXBbYXV0b1JvbGVdLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnJvbGUgPSBgJHthdXRvUm9sZX1gO1xuICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgI3VwZGF0ZVJlb3JkZXJhYmlsaXR5KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLml0ZW1zKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5pdGVtcykge1xuICAgICAgICBpdGVtLnJlb3JkZXJhYmxlID0gdGhpcy5yZW9yZGVyYWJsZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAjdmFsaWRhdGVUYWdzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlb3JkZXJhYmxlICYmICF0aGlzLiNldmVyeUl0ZW1IYXNUYWcoKSkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnUGxlYXNlIHN1cHBseSB0YWcgcHJvcGVydGllcyBmb3IgZWFjaCByZXBlYXRlciBpdGVtIHdoZW4gcmVvcmRlcmluZyBmdW5jdGlvbmFsaXR5IGlzIGVuYWJsZWQuJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgI3JlcGVhdGVySG9zdD5cbiAgPGRpdlxuICAgIGNsYXNzPVwic2t5LXJlcGVhdGVyXCJcbiAgICBbYXR0ci5yb2xlXT1cInJvbGVcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsIHx8ICgnc2t5dXhfcmVwZWF0ZXJfbGFiZWwnIHwgc2t5TGliUmVzb3VyY2VzKVwiXG4gICAgW2RyYWd1bGFdPVwiZHJhZ3VsYUdyb3VwTmFtZVwiXG4gICAgKGNka09ic2VydmVDb250ZW50KT1cIm9uQ2RrT2JzZXJ2ZUNvbnRlbnQoKVwiXG4gID5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG4iXX0=
|
|
@@ -13,33 +13,33 @@ import { SkyRepeaterItemComponent } from './repeater-item.component';
|
|
|
13
13
|
import { SkyRepeaterComponent } from './repeater.component';
|
|
14
14
|
import * as i0 from "@angular/core";
|
|
15
15
|
export class SkyRepeaterModule {
|
|
16
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyRepeaterModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
17
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: SkyRepeaterModule, declarations: [SkyRepeaterComponent,
|
|
18
|
+
SkyRepeaterItemComponent,
|
|
19
|
+
SkyRepeaterItemContentComponent,
|
|
20
|
+
SkyRepeaterItemContextMenuComponent,
|
|
21
|
+
SkyRepeaterItemTitleComponent], imports: [CommonModule,
|
|
22
|
+
DragulaModule,
|
|
23
|
+
ObserversModule,
|
|
24
|
+
SkyChevronModule,
|
|
25
|
+
SkyCheckboxModule,
|
|
26
|
+
SkyIconModule,
|
|
27
|
+
SkyInlineFormModule,
|
|
28
|
+
SkyListsResourcesModule], exports: [SkyRepeaterComponent,
|
|
29
|
+
SkyRepeaterItemComponent,
|
|
30
|
+
SkyRepeaterItemContentComponent,
|
|
31
|
+
SkyRepeaterItemContextMenuComponent,
|
|
32
|
+
SkyRepeaterItemTitleComponent] }); }
|
|
33
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyRepeaterModule, providers: [DragulaService], imports: [CommonModule,
|
|
34
|
+
DragulaModule,
|
|
35
|
+
ObserversModule,
|
|
36
|
+
SkyChevronModule,
|
|
37
|
+
SkyCheckboxModule,
|
|
38
|
+
SkyIconModule,
|
|
39
|
+
SkyInlineFormModule,
|
|
40
|
+
SkyListsResourcesModule] }); }
|
|
16
41
|
}
|
|
17
|
-
|
|
18
|
-
SkyRepeaterModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: SkyRepeaterModule, declarations: [SkyRepeaterComponent,
|
|
19
|
-
SkyRepeaterItemComponent,
|
|
20
|
-
SkyRepeaterItemContentComponent,
|
|
21
|
-
SkyRepeaterItemContextMenuComponent,
|
|
22
|
-
SkyRepeaterItemTitleComponent], imports: [CommonModule,
|
|
23
|
-
DragulaModule,
|
|
24
|
-
ObserversModule,
|
|
25
|
-
SkyChevronModule,
|
|
26
|
-
SkyCheckboxModule,
|
|
27
|
-
SkyIconModule,
|
|
28
|
-
SkyInlineFormModule,
|
|
29
|
-
SkyListsResourcesModule], exports: [SkyRepeaterComponent,
|
|
30
|
-
SkyRepeaterItemComponent,
|
|
31
|
-
SkyRepeaterItemContentComponent,
|
|
32
|
-
SkyRepeaterItemContextMenuComponent,
|
|
33
|
-
SkyRepeaterItemTitleComponent] });
|
|
34
|
-
SkyRepeaterModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyRepeaterModule, providers: [DragulaService], imports: [CommonModule,
|
|
35
|
-
DragulaModule,
|
|
36
|
-
ObserversModule,
|
|
37
|
-
SkyChevronModule,
|
|
38
|
-
SkyCheckboxModule,
|
|
39
|
-
SkyIconModule,
|
|
40
|
-
SkyInlineFormModule,
|
|
41
|
-
SkyListsResourcesModule] });
|
|
42
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyRepeaterModule, decorators: [{
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyRepeaterModule, decorators: [{
|
|
43
43
|
type: NgModule,
|
|
44
44
|
args: [{
|
|
45
45
|
declarations: [
|
|
@@ -69,4 +69,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
69
69
|
providers: [DragulaService],
|
|
70
70
|
}]
|
|
71
71
|
}] });
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0ZXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xpc3RzL3NyYy9saWIvbW9kdWxlcy9yZXBlYXRlci9yZXBlYXRlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFNUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFL0UsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEYsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDN0YsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBNkI1RCxNQUFNLE9BQU8saUJBQWlCOzhHQUFqQixpQkFBaUI7K0dBQWpCLGlCQUFpQixpQkF6QjFCLG9CQUFvQjtZQUNwQix3QkFBd0I7WUFDeEIsK0JBQStCO1lBQy9CLG1DQUFtQztZQUNuQyw2QkFBNkIsYUFHN0IsWUFBWTtZQUNaLGFBQWE7WUFDYixlQUFlO1lBQ2YsZ0JBQWdCO1lBQ2hCLGlCQUFpQjtZQUNqQixhQUFhO1lBQ2IsbUJBQW1CO1lBQ25CLHVCQUF1QixhQUd2QixvQkFBb0I7WUFDcEIsd0JBQXdCO1lBQ3hCLCtCQUErQjtZQUMvQixtQ0FBbUM7WUFDbkMsNkJBQTZCOytHQUlwQixpQkFBaUIsYUFGakIsQ0FBQyxjQUFjLENBQUMsWUFoQnpCLFlBQVk7WUFDWixhQUFhO1lBQ2IsZUFBZTtZQUNmLGdCQUFnQjtZQUNoQixpQkFBaUI7WUFDakIsYUFBYTtZQUNiLG1CQUFtQjtZQUNuQix1QkFBdUI7OzJGQVdkLGlCQUFpQjtrQkEzQjdCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFO3dCQUNaLG9CQUFvQjt3QkFDcEIsd0JBQXdCO3dCQUN4QiwrQkFBK0I7d0JBQy9CLG1DQUFtQzt3QkFDbkMsNkJBQTZCO3FCQUM5QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixpQkFBaUI7d0JBQ2pCLGFBQWE7d0JBQ2IsbUJBQW1CO3dCQUNuQix1QkFBdUI7cUJBQ3hCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxvQkFBb0I7d0JBQ3BCLHdCQUF3Qjt3QkFDeEIsK0JBQStCO3dCQUMvQixtQ0FBbUM7d0JBQ25DLDZCQUE2QjtxQkFDOUI7b0JBQ0QsU0FBUyxFQUFFLENBQUMsY0FBYyxDQUFDO2lCQUM1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmVyc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vYnNlcnZlcnMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTa3lDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bza3l1eC9mb3Jtcyc7XG5pbXBvcnQgeyBTa3lDaGV2cm9uTW9kdWxlLCBTa3lJY29uTW9kdWxlIH0gZnJvbSAnQHNreXV4L2luZGljYXRvcnMnO1xuaW1wb3J0IHsgU2t5SW5saW5lRm9ybU1vZHVsZSB9IGZyb20gJ0Bza3l1eC9pbmxpbmUtZm9ybSc7XG5cbmltcG9ydCB7IERyYWd1bGFNb2R1bGUsIERyYWd1bGFTZXJ2aWNlIH0gZnJvbSAnbmcyLWRyYWd1bGEnO1xuXG5pbXBvcnQgeyBTa3lMaXN0c1Jlc291cmNlc01vZHVsZSB9IGZyb20gJy4uL3NoYXJlZC9za3ktbGlzdHMtcmVzb3VyY2VzLm1vZHVsZSc7XG5cbmltcG9ydCB7IFNreVJlcGVhdGVySXRlbUNvbnRlbnRDb21wb25lbnQgfSBmcm9tICcuL3JlcGVhdGVyLWl0ZW0tY29udGVudC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5UmVwZWF0ZXJJdGVtQ29udGV4dE1lbnVDb21wb25lbnQgfSBmcm9tICcuL3JlcGVhdGVyLWl0ZW0tY29udGV4dC1tZW51LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa3lSZXBlYXRlckl0ZW1UaXRsZUNvbXBvbmVudCB9IGZyb20gJy4vcmVwZWF0ZXItaXRlbS10aXRsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5UmVwZWF0ZXJJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9yZXBlYXRlci1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa3lSZXBlYXRlckNvbXBvbmVudCB9IGZyb20gJy4vcmVwZWF0ZXIuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgU2t5UmVwZWF0ZXJDb21wb25lbnQsXG4gICAgU2t5UmVwZWF0ZXJJdGVtQ29tcG9uZW50LFxuICAgIFNreVJlcGVhdGVySXRlbUNvbnRlbnRDb21wb25lbnQsXG4gICAgU2t5UmVwZWF0ZXJJdGVtQ29udGV4dE1lbnVDb21wb25lbnQsXG4gICAgU2t5UmVwZWF0ZXJJdGVtVGl0bGVDb21wb25lbnQsXG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRHJhZ3VsYU1vZHVsZSxcbiAgICBPYnNlcnZlcnNNb2R1bGUsXG4gICAgU2t5Q2hldnJvbk1vZHVsZSxcbiAgICBTa3lDaGVja2JveE1vZHVsZSxcbiAgICBTa3lJY29uTW9kdWxlLFxuICAgIFNreUlubGluZUZvcm1Nb2R1bGUsXG4gICAgU2t5TGlzdHNSZXNvdXJjZXNNb2R1bGUsXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBTa3lSZXBlYXRlckNvbXBvbmVudCxcbiAgICBTa3lSZXBlYXRlckl0ZW1Db21wb25lbnQsXG4gICAgU2t5UmVwZWF0ZXJJdGVtQ29udGVudENvbXBvbmVudCxcbiAgICBTa3lSZXBlYXRlckl0ZW1Db250ZXh0TWVudUNvbXBvbmVudCxcbiAgICBTa3lSZXBlYXRlckl0ZW1UaXRsZUNvbXBvbmVudCxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbRHJhZ3VsYVNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lSZXBlYXRlck1vZHVsZSB7fVxuIl19
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { EventEmitter, Injectable } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
let uniqueId = 0;
|
|
5
|
+
const DEFAULT_EXPAND_MODE = 'none';
|
|
6
|
+
/**
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
export class SkyRepeaterService {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.activeItemChange = new BehaviorSubject(undefined);
|
|
12
|
+
this.activeItemIndexChange = new BehaviorSubject(undefined);
|
|
13
|
+
this.enableActiveState = false;
|
|
14
|
+
this.itemCollapseStateChange = new EventEmitter();
|
|
15
|
+
this.items = [];
|
|
16
|
+
this.itemRole = new BehaviorSubject({
|
|
17
|
+
content: undefined,
|
|
18
|
+
item: undefined,
|
|
19
|
+
title: undefined,
|
|
20
|
+
});
|
|
21
|
+
this.orderChange = new BehaviorSubject(undefined);
|
|
22
|
+
this.repeaterGroupId = ++uniqueId;
|
|
23
|
+
this.#_expandMode = DEFAULT_EXPAND_MODE;
|
|
24
|
+
}
|
|
25
|
+
// TODO: Remove 'string' as a valid type in a breaking change.
|
|
26
|
+
get expandMode() {
|
|
27
|
+
return this.#_expandMode;
|
|
28
|
+
}
|
|
29
|
+
set expandMode(value) {
|
|
30
|
+
this.#_expandMode = value ?? DEFAULT_EXPAND_MODE;
|
|
31
|
+
}
|
|
32
|
+
#_expandMode;
|
|
33
|
+
ngOnDestroy() {
|
|
34
|
+
this.activeItemChange.complete();
|
|
35
|
+
this.itemCollapseStateChange.complete();
|
|
36
|
+
this.orderChange.complete();
|
|
37
|
+
}
|
|
38
|
+
activateItem(item) {
|
|
39
|
+
if (this.enableActiveState) {
|
|
40
|
+
/* istanbul ignore else */
|
|
41
|
+
if (item && !item.disabled) {
|
|
42
|
+
const index = this.items.findIndex((i) => i === item);
|
|
43
|
+
this.activeItemIndexChange.next(index);
|
|
44
|
+
this.activeItemChange.next(item);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
activateItemByIndex(index) {
|
|
49
|
+
/* istanbul ignore else */
|
|
50
|
+
if (this.enableActiveState) {
|
|
51
|
+
if (index === undefined) {
|
|
52
|
+
this.activeItemChange.next(undefined);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
const activeItem = this.items[index];
|
|
56
|
+
if (activeItem && !activeItem.disabled) {
|
|
57
|
+
this.activeItemChange.next(activeItem);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
registerItem(item) {
|
|
63
|
+
this.items.push(item);
|
|
64
|
+
}
|
|
65
|
+
unregisterItem(item) {
|
|
66
|
+
const indexOfDestroyedItem = this.items.indexOf(item);
|
|
67
|
+
if (indexOfDestroyedItem > -1) {
|
|
68
|
+
this.items.splice(indexOfDestroyedItem, 1);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
onItemCollapseStateChange(item) {
|
|
72
|
+
this.itemCollapseStateChange.emit(item);
|
|
73
|
+
}
|
|
74
|
+
registerOrderChange() {
|
|
75
|
+
this.orderChange.next();
|
|
76
|
+
}
|
|
77
|
+
reorderItem(oldIndex, newIndex) {
|
|
78
|
+
this.items.splice(newIndex, 0, this.items.splice(oldIndex, 1)[0]);
|
|
79
|
+
}
|
|
80
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyRepeaterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
81
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyRepeaterService }); }
|
|
82
|
+
}
|
|
83
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyRepeaterService, decorators: [{
|
|
84
|
+
type: Injectable
|
|
85
|
+
}] });
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9saXN0cy9zcmMvbGliL21vZHVsZXMvcmVwZWF0ZXIvcmVwZWF0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUVwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQU12QyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDakIsTUFBTSxtQkFBbUIsR0FBOEIsTUFBTSxDQUFDO0FBRTlEOztHQUVHO0FBRUgsTUFBTSxPQUFPLGtCQUFrQjtJQUQvQjtRQUVTLHFCQUFnQixHQUFHLElBQUksZUFBZSxDQUUzQyxTQUFTLENBQUMsQ0FBQztRQUVOLDBCQUFxQixHQUFHLElBQUksZUFBZSxDQUNoRCxTQUFTLENBQ1YsQ0FBQztRQUVLLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQVUxQiw0QkFBdUIsR0FBRyxJQUFJLFlBQVksRUFBNEIsQ0FBQztRQUV2RSxVQUFLLEdBQStCLEVBQUUsQ0FBQztRQUU5QixhQUFRLEdBQUcsSUFBSSxlQUFlLENBQTJCO1lBQ3ZFLE9BQU8sRUFBRSxTQUFTO1lBQ2xCLElBQUksRUFBRSxTQUFTO1lBQ2YsS0FBSyxFQUFFLFNBQVM7U0FDakIsQ0FBQyxDQUFDO1FBRUksZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBTyxTQUFTLENBQUMsQ0FBQztRQUVuRCxvQkFBZSxHQUFHLEVBQUUsUUFBUSxDQUFDO1FBRXBDLGlCQUFZLEdBQUcsbUJBQW1CLENBQUM7S0F1RHBDO0lBN0VDLDhEQUE4RDtJQUM5RCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFDRCxJQUFXLFVBQVUsQ0FBQyxLQUE0QztRQUNoRSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssSUFBSSxtQkFBbUIsQ0FBQztJQUNuRCxDQUFDO0lBZ0JELFlBQVksQ0FBdUI7SUFFNUIsV0FBVztRQUNoQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVNLFlBQVksQ0FBQyxJQUE4QjtRQUNoRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMxQiwwQkFBMEI7WUFDMUIsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUMxQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO2dCQUN0RCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2xDO1NBQ0Y7SUFDSCxDQUFDO0lBRU0sbUJBQW1CLENBQUMsS0FBeUI7UUFDbEQsMEJBQTBCO1FBQzFCLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQzFCLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUN2QztpQkFBTTtnQkFDTCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNyQyxJQUFJLFVBQVUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7b0JBQ3RDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQ3hDO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFFTSxZQUFZLENBQUMsSUFBOEI7UUFDaEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVNLGNBQWMsQ0FBQyxJQUE4QjtRQUNsRCxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RELElBQUksb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDNUM7SUFDSCxDQUFDO0lBRU0seUJBQXlCLENBQUMsSUFBOEI7UUFDN0QsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU0sbUJBQW1CO1FBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVNLFdBQVcsQ0FBQyxRQUFnQixFQUFFLFFBQWdCO1FBQ25ELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQzs4R0F2RlUsa0JBQWtCO2tIQUFsQixrQkFBa0I7OzJGQUFsQixrQkFBa0I7a0JBRDlCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2t5UmVwZWF0ZXJFeHBhbmRNb2RlVHlwZSB9IGZyb20gJy4vcmVwZWF0ZXItZXhwYW5kLW1vZGUtdHlwZSc7XG5pbXBvcnQgeyBTa3lSZXBlYXRlckl0ZW1Sb2xlc1R5cGUgfSBmcm9tICcuL3JlcGVhdGVyLWl0ZW0tcm9sZXMudHlwZSc7XG5pbXBvcnQgeyBTa3lSZXBlYXRlckl0ZW1Db21wb25lbnQgfSBmcm9tICcuL3JlcGVhdGVyLWl0ZW0uY29tcG9uZW50JztcblxubGV0IHVuaXF1ZUlkID0gMDtcbmNvbnN0IERFRkFVTFRfRVhQQU5EX01PREU6IFNreVJlcGVhdGVyRXhwYW5kTW9kZVR5cGUgPSAnbm9uZSc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTa3lSZXBlYXRlclNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwdWJsaWMgYWN0aXZlSXRlbUNoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgU2t5UmVwZWF0ZXJJdGVtQ29tcG9uZW50IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcblxuICBwdWJsaWMgYWN0aXZlSXRlbUluZGV4Q2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXIgfCB1bmRlZmluZWQ+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuXG4gIHB1YmxpYyBlbmFibGVBY3RpdmVTdGF0ZSA9IGZhbHNlO1xuXG4gIC8vIFRPRE86IFJlbW92ZSAnc3RyaW5nJyBhcyBhIHZhbGlkIHR5cGUgaW4gYSBicmVha2luZyBjaGFuZ2UuXG4gIHB1YmxpYyBnZXQgZXhwYW5kTW9kZSgpOiBTa3lSZXBlYXRlckV4cGFuZE1vZGVUeXBlIHtcbiAgICByZXR1cm4gdGhpcy4jX2V4cGFuZE1vZGU7XG4gIH1cbiAgcHVibGljIHNldCBleHBhbmRNb2RlKHZhbHVlOiBTa3lSZXBlYXRlckV4cGFuZE1vZGVUeXBlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX2V4cGFuZE1vZGUgPSB2YWx1ZSA/PyBERUZBVUxUX0VYUEFORF9NT0RFO1xuICB9XG5cbiAgcHVibGljIGl0ZW1Db2xsYXBzZVN0YXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lSZXBlYXRlckl0ZW1Db21wb25lbnQ+KCk7XG5cbiAgcHVibGljIGl0ZW1zOiBTa3lSZXBlYXRlckl0ZW1Db21wb25lbnRbXSA9IFtdO1xuXG4gIHB1YmxpYyByZWFkb25seSBpdGVtUm9sZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2t5UmVwZWF0ZXJJdGVtUm9sZXNUeXBlPih7XG4gICAgY29udGVudDogdW5kZWZpbmVkLFxuICAgIGl0ZW06IHVuZGVmaW5lZCxcbiAgICB0aXRsZTogdW5kZWZpbmVkLFxuICB9KTtcblxuICBwdWJsaWMgb3JkZXJDaGFuZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHZvaWQ+KHVuZGVmaW5lZCk7XG5cbiAgcHVibGljIHJlcGVhdGVyR3JvdXBJZCA9ICsrdW5pcXVlSWQ7XG5cbiAgI19leHBhbmRNb2RlID0gREVGQVVMVF9FWFBBTkRfTU9ERTtcblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVJdGVtQ2hhbmdlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5pdGVtQ29sbGFwc2VTdGF0ZUNoYW5nZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMub3JkZXJDaGFuZ2UuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBhY3RpdmF0ZUl0ZW0oaXRlbTogU2t5UmVwZWF0ZXJJdGVtQ29tcG9uZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZW5hYmxlQWN0aXZlU3RhdGUpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoaXRlbSAmJiAhaXRlbS5kaXNhYmxlZCkge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuaXRlbXMuZmluZEluZGV4KChpKSA9PiBpID09PSBpdGVtKTtcbiAgICAgICAgdGhpcy5hY3RpdmVJdGVtSW5kZXhDaGFuZ2UubmV4dChpbmRleCk7XG4gICAgICAgIHRoaXMuYWN0aXZlSXRlbUNoYW5nZS5uZXh0KGl0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhY3RpdmF0ZUl0ZW1CeUluZGV4KGluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLmVuYWJsZUFjdGl2ZVN0YXRlKSB7XG4gICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmFjdGl2ZUl0ZW1DaGFuZ2UubmV4dCh1bmRlZmluZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYWN0aXZlSXRlbSA9IHRoaXMuaXRlbXNbaW5kZXhdO1xuICAgICAgICBpZiAoYWN0aXZlSXRlbSAmJiAhYWN0aXZlSXRlbS5kaXNhYmxlZCkge1xuICAgICAgICAgIHRoaXMuYWN0aXZlSXRlbUNoYW5nZS5uZXh0KGFjdGl2ZUl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVySXRlbShpdGVtOiBTa3lSZXBlYXRlckl0ZW1Db21wb25lbnQpOiB2b2lkIHtcbiAgICB0aGlzLml0ZW1zLnB1c2goaXRlbSk7XG4gIH1cblxuICBwdWJsaWMgdW5yZWdpc3Rlckl0ZW0oaXRlbTogU2t5UmVwZWF0ZXJJdGVtQ29tcG9uZW50KTogdm9pZCB7XG4gICAgY29uc3QgaW5kZXhPZkRlc3Ryb3llZEl0ZW0gPSB0aGlzLml0ZW1zLmluZGV4T2YoaXRlbSk7XG4gICAgaWYgKGluZGV4T2ZEZXN0cm95ZWRJdGVtID4gLTEpIHtcbiAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKGluZGV4T2ZEZXN0cm95ZWRJdGVtLCAxKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25JdGVtQ29sbGFwc2VTdGF0ZUNoYW5nZShpdGVtOiBTa3lSZXBlYXRlckl0ZW1Db21wb25lbnQpOiB2b2lkIHtcbiAgICB0aGlzLml0ZW1Db2xsYXBzZVN0YXRlQ2hhbmdlLmVtaXQoaXRlbSk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPcmRlckNoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLm9yZGVyQ2hhbmdlLm5leHQoKTtcbiAgfVxuXG4gIHB1YmxpYyByZW9yZGVySXRlbShvbGRJbmRleDogbnVtYmVyLCBuZXdJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5pdGVtcy5zcGxpY2UobmV3SW5kZXgsIDAsIHRoaXMuaXRlbXMuc3BsaWNlKG9sZEluZGV4LCAxKVswXSk7XG4gIH1cbn1cbiJdfQ==
|