ng-virtual-list 17.10.6 → 17.10.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +53 -38
- package/esm2022/lib/components/list-item/base/base-virtual-list-item-component.mjs +200 -0
- package/esm2022/lib/components/list-item/base/index.mjs +3 -0
- package/esm2022/lib/components/list-item/const/index.mjs +2 -0
- package/esm2022/lib/components/list-item/interfaces/index.mjs +2 -0
- package/esm2022/lib/components/list-item/interfaces/template-context.mjs +2 -0
- package/esm2022/lib/components/list-item/ng-virtual-list-item.component.mjs +84 -234
- package/esm2022/lib/components/list-item/utils/create-display-id.mjs +4 -0
- package/esm2022/lib/components/list-item/utils/index.mjs +3 -2
- package/esm2022/lib/components/ng-scroll-bar/const/index.mjs +2 -0
- package/esm2022/lib/components/ng-scroll-bar/ng-scroll-bar.component.mjs +51 -42
- package/esm2022/lib/components/ng-scroll-view/base/base-scroll-view.component.mjs +158 -0
- package/esm2022/lib/components/ng-scroll-view/const/index.mjs +5 -1
- package/esm2022/lib/components/ng-scroll-view/ng-scroll-view.component.mjs +22 -139
- package/esm2022/lib/components/ng-scroll-view/utils/calculate-direction.mjs +11 -0
- package/esm2022/lib/components/ng-scroll-view/utils/index.mjs +4 -0
- package/esm2022/lib/components/ng-scroll-view/utils/scroll-box.mjs +45 -0
- package/esm2022/lib/components/prerender-container/components/prerender-list/prerender-list.component.mjs +154 -0
- package/esm2022/lib/components/prerender-container/components/prerender-list/prerender-list.module.mjs +21 -0
- package/esm2022/lib/components/prerender-container/components/prerender-list-item/prerender-list-item.component.mjs +78 -0
- package/esm2022/lib/components/prerender-container/components/prerender-list-item/prerender-list-item.module.mjs +20 -0
- package/esm2022/lib/components/prerender-container/components/prerender-scroller/prerender-scroller.component.mjs +119 -0
- package/esm2022/lib/components/prerender-container/components/prerender-scroller/prerender-scroller.module.mjs +20 -0
- package/esm2022/lib/components/prerender-container/core/index.mjs +3 -0
- package/esm2022/lib/components/prerender-container/core/prerender-track-box.mjs +169 -0
- package/esm2022/lib/components/prerender-container/events/index.mjs +6 -0
- package/esm2022/lib/components/prerender-container/interfaces/index.mjs +2 -0
- package/esm2022/lib/components/prerender-container/interfaces/refresh-params.mjs +2 -0
- package/esm2022/lib/components/prerender-container/prerender-container.component.mjs +65 -0
- package/esm2022/lib/components/prerender-container/prerender-container.module.mjs +20 -0
- package/esm2022/lib/components/prerender-container/types/cache.mjs +2 -0
- package/esm2022/lib/components/prerender-container/types/index.mjs +2 -0
- package/esm2022/lib/components/scroller/const/index.mjs +2 -0
- package/esm2022/lib/components/scroller/ng-scroller.component.mjs +143 -51
- package/esm2022/lib/components/substrate/const/index.mjs +2 -0
- package/esm2022/lib/components/substrate/substrate.component.mjs +16 -42
- package/esm2022/lib/components/substrate/utils/circle-path.mjs +4 -0
- package/esm2022/lib/components/substrate/utils/index.mjs +4 -0
- package/esm2022/lib/components/substrate/utils/rounded-rect-path.mjs +20 -0
- package/esm2022/lib/const/index.mjs +24 -5
- package/esm2022/lib/core/cache-map.mjs +154 -0
- package/esm2022/lib/core/track-box.mjs +913 -0
- package/esm2022/lib/core/tracker.mjs +201 -0
- package/esm2022/lib/directives/item-click/item-click.directive.mjs +3 -2
- package/esm2022/lib/directives/locale-sensitive/locale-sensitive.directive.mjs +3 -2
- package/esm2022/lib/enums/snapping-method.mjs +1 -1
- package/esm2022/lib/enums/snapping-methods.mjs +4 -8
- package/esm2022/lib/interfaces/animation-params.mjs +2 -0
- package/esm2022/lib/interfaces/base-virtual-list-item-component.mjs +9 -0
- package/esm2022/lib/interfaces/index.mjs +2 -0
- package/esm2022/lib/interfaces/rect.mjs +2 -0
- package/esm2022/lib/interfaces/render-stabilizer-options.mjs +2 -0
- package/esm2022/lib/interfaces/scroll-event.mjs +2 -0
- package/esm2022/lib/interfaces/scroll-options.mjs +2 -0
- package/esm2022/lib/interfaces/scroll-params.mjs +2 -0
- package/esm2022/lib/interfaces/size.mjs +2 -0
- package/esm2022/lib/models/display-object-measures.model.mjs +1 -1
- package/esm2022/lib/models/index.mjs +1 -1
- package/esm2022/lib/models/render-item-config.model.mjs +1 -1
- package/esm2022/lib/models/render-item-measures.model.mjs +1 -1
- package/esm2022/lib/ng-virtual-list.component.mjs +762 -593
- package/esm2022/lib/ng-virtual-list.module.mjs +5 -4
- package/esm2022/lib/ng-virtual-list.service.mjs +35 -17
- package/esm2022/lib/types/focus-item-params.mjs +2 -0
- package/esm2022/lib/types/index.mjs +1 -1
- package/esm2022/lib/types/scroll-direction.mjs +2 -0
- package/esm2022/lib/types/scrollbar-theme.mjs +1 -1
- package/esm2022/lib/utils/animator/animator.mjs +1 -7
- package/esm2022/lib/utils/debounce.mjs +11 -3
- package/esm2022/lib/utils/get-selector-by-item-id.mjs +5 -0
- package/esm2022/lib/utils/get-shape-min-size.mjs +1 -1
- package/esm2022/lib/utils/index.mjs +1 -1
- package/esm2022/lib/utils/list-validators.mjs +27 -0
- package/esm2022/lib/utils/screen-reader-formatter.mjs +43 -0
- package/esm2022/lib/utils/scroll-event.mjs +8 -5
- package/esm2022/lib/utils/snapping-method.mjs +2 -2
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/ng-virtual-list.mjs +2279 -1151
- package/fesm2022/ng-virtual-list.mjs.map +1 -1
- package/lib/components/list-item/base/base-virtual-list-item-component.d.ts +56 -0
- package/lib/components/list-item/base/index.d.ts +2 -0
- package/lib/components/list-item/const/index.d.ts +1 -0
- package/lib/components/list-item/interfaces/index.d.ts +2 -0
- package/lib/components/list-item/interfaces/template-context.d.ts +10 -0
- package/lib/components/list-item/ng-virtual-list-item.component.d.ts +9 -51
- package/lib/components/list-item/utils/create-display-id.d.ts +1 -0
- package/lib/components/list-item/utils/index.d.ts +2 -1
- package/lib/components/ng-scroll-bar/const/index.d.ts +2 -0
- package/lib/components/ng-scroll-bar/ng-scroll-bar.component.d.ts +29 -30
- package/lib/components/ng-scroll-view/base/base-scroll-view.component.d.ts +60 -0
- package/lib/components/ng-scroll-view/const/index.d.ts +3 -0
- package/lib/components/ng-scroll-view/ng-scroll-view.component.d.ts +10 -48
- package/lib/components/ng-scroll-view/utils/calculate-direction.d.ts +4 -0
- package/lib/components/ng-scroll-view/utils/index.d.ts +3 -0
- package/lib/components/ng-scroll-view/utils/scroll-box.d.ts +39 -0
- package/lib/components/prerender-container/components/prerender-list/prerender-list.component.d.ts +63 -0
- package/lib/components/prerender-container/components/prerender-list/prerender-list.module.d.ts +10 -0
- package/lib/components/prerender-container/components/prerender-list-item/prerender-list-item.component.d.ts +17 -0
- package/lib/components/prerender-container/components/prerender-list-item/prerender-list-item.module.d.ts +9 -0
- package/lib/components/prerender-container/components/prerender-scroller/prerender-scroller.component.d.ts +43 -0
- package/lib/components/prerender-container/components/prerender-scroller/prerender-scroller.module.d.ts +9 -0
- package/lib/components/prerender-container/core/index.d.ts +2 -0
- package/lib/components/prerender-container/core/prerender-track-box.d.ts +35 -0
- package/lib/components/prerender-container/events/index.d.ts +6 -0
- package/lib/components/prerender-container/interfaces/index.d.ts +2 -0
- package/lib/components/prerender-container/interfaces/refresh-params.d.ts +16 -0
- package/lib/components/prerender-container/prerender-container.component.d.ts +40 -0
- package/lib/components/prerender-container/prerender-container.module.d.ts +9 -0
- package/lib/components/prerender-container/types/cache.d.ts +13 -0
- package/lib/components/prerender-container/types/index.d.ts +2 -0
- package/lib/components/scroller/const/index.d.ts +1 -0
- package/lib/components/scroller/ng-scroller.component.d.ts +43 -22
- package/lib/components/substrate/const/index.d.ts +2 -0
- package/lib/components/substrate/substrate.component.d.ts +27 -27
- package/lib/components/substrate/utils/circle-path.d.ts +1 -0
- package/lib/components/substrate/utils/index.d.ts +3 -0
- package/lib/components/substrate/utils/rounded-rect-path.d.ts +1 -0
- package/lib/const/index.d.ts +24 -5
- package/lib/{utils → core}/cache-map.d.ts +4 -4
- package/lib/{utils → core}/track-box.d.ts +17 -15
- package/lib/{utils → core}/tracker.d.ts +8 -6
- package/lib/directives/item-click/item-click.directive.d.ts +1 -1
- package/lib/directives/locale-sensitive/locale-sensitive.directive.d.ts +1 -1
- package/lib/enums/snapping-method.d.ts +3 -3
- package/lib/enums/snapping-methods.d.ts +4 -8
- package/lib/{types → interfaces}/animation-params.d.ts +4 -1
- package/lib/{models → interfaces}/base-virtual-list-item-component.d.ts +4 -3
- package/lib/interfaces/index.d.ts +9 -0
- package/lib/{types → interfaces}/rect.d.ts +1 -1
- package/lib/interfaces/render-stabilizer-options.d.ts +12 -0
- package/lib/{models/scroll-event.model.d.ts → interfaces/scroll-event.d.ts} +8 -4
- package/lib/{models/scroll-options.model.d.ts → interfaces/scroll-options.d.ts} +5 -1
- package/lib/interfaces/scroll-params.d.ts +16 -0
- package/lib/{types → interfaces}/size.d.ts +1 -1
- package/lib/models/display-object-measures.model.d.ts +1 -1
- package/lib/models/index.d.ts +1 -4
- package/lib/models/render-item-config.model.d.ts +4 -0
- package/lib/models/render-item-measures.model.d.ts +1 -1
- package/lib/ng-virtual-list.component.d.ts +76 -49
- package/lib/ng-virtual-list.module.d.ts +3 -2
- package/lib/ng-virtual-list.service.d.ts +24 -13
- package/lib/types/focus-item-params.d.ts +7 -0
- package/lib/types/index.d.ts +2 -4
- package/lib/{models/scroll-direction.model.d.ts → types/scroll-direction.d.ts} +1 -0
- package/lib/types/scrollbar-theme.d.ts +31 -4
- package/lib/utils/animator/animator.d.ts +0 -6
- package/lib/utils/debounce.d.ts +13 -8
- package/lib/utils/get-selector-by-item-id.d.ts +2 -0
- package/lib/utils/get-shape-min-size.d.ts +1 -1
- package/lib/utils/index.d.ts +2 -2
- package/lib/utils/list-validators.d.ts +2 -0
- package/lib/utils/screen-reader-formatter.d.ts +7 -0
- package/lib/utils/scroll-event.d.ts +8 -4
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
- package/esm2022/lib/models/base-virtual-list-item-component.mjs +0 -9
- package/esm2022/lib/models/scroll-direction.model.mjs +0 -2
- package/esm2022/lib/models/scroll-event.model.mjs +0 -2
- package/esm2022/lib/models/scroll-options.model.mjs +0 -2
- package/esm2022/lib/types/animation-params.mjs +0 -2
- package/esm2022/lib/types/rect.mjs +0 -2
- package/esm2022/lib/types/size.mjs +0 -2
- package/esm2022/lib/utils/cache-map.mjs +0 -154
- package/esm2022/lib/utils/track-box.mjs +0 -924
- package/esm2022/lib/utils/tracker.mjs +0 -178
package/README.md
CHANGED
|
@@ -155,13 +155,13 @@ const HORIZONTAL_ITEMS: IVirtualListCollection<ICollectionItem> = Array.from({ l
|
|
|
155
155
|
export class AppComponent {
|
|
156
156
|
horizontalItems = HORIZONTAL_ITEMS;
|
|
157
157
|
|
|
158
|
-
onItemClick(item: IRenderVirtualListItem<ICollectionItem> |
|
|
158
|
+
onItemClick(item: IRenderVirtualListItem<ICollectionItem> | null) {
|
|
159
159
|
if (item) {
|
|
160
160
|
console.info(`Click: (ID: ${item.id}) Item ${item.data.name}`);
|
|
161
161
|
}
|
|
162
162
|
}
|
|
163
163
|
|
|
164
|
-
onSelect(data: Array<Id> | Id |
|
|
164
|
+
onSelect(data: Array<Id> | Id | null) {
|
|
165
165
|
console.info(`Select: ${JSON.stringify(data)}`);
|
|
166
166
|
}
|
|
167
167
|
}
|
|
@@ -229,13 +229,13 @@ export class AppComponent {
|
|
|
229
229
|
horizontalGroupItems = HORIZONTAL_GROUP_ITEMS;
|
|
230
230
|
horizontalGroupItemConfigMap = HORIZONTAL_GROUP_ITEM_CONFIG_MAP;
|
|
231
231
|
|
|
232
|
-
onItemClick(item: IRenderVirtualListItem<ICollectionItem> |
|
|
232
|
+
onItemClick(item: IRenderVirtualListItem<ICollectionItem> | null) {
|
|
233
233
|
if (item) {
|
|
234
234
|
console.info(`Click: (ID: ${item.id}) Item ${item.data.name}`);
|
|
235
235
|
}
|
|
236
236
|
}
|
|
237
237
|
|
|
238
|
-
onSelect(data: Array<Id> | Id |
|
|
238
|
+
onSelect(data: Array<Id> | Id | null) {
|
|
239
239
|
console.info(`Select: ${JSON.stringify(data)}`);
|
|
240
240
|
}
|
|
241
241
|
}
|
|
@@ -518,9 +518,9 @@ import { NgVirtualListComponent, GradientColor, RoundedCorner, ScrollBarTheme }
|
|
|
518
518
|
const X_LITE_BLUE_PLASMA_GRADIENT: GradientColor = ["rgba(133, 142, 255, 0)", "rgb(0, 133, 160)"],
|
|
519
519
|
ROUND_CORNER: RoundedCorner = [3, 3, 3, 3],
|
|
520
520
|
SCROLLBAR_GRADIENT: ScrollBarTheme = {
|
|
521
|
-
fill:
|
|
522
|
-
hoverFill:
|
|
523
|
-
pressedFill:
|
|
521
|
+
fill: "rgba(51, 0, 97, 1)",
|
|
522
|
+
hoverFill: "rgba(73, 6, 133, 1)",
|
|
523
|
+
pressedFill: "rgba(73, 6, 150, 1)",
|
|
524
524
|
strokeGradientColor: X_LITE_BLUE_PLASMA_GRADIENT,
|
|
525
525
|
strokeAnimationDuration: 1000,
|
|
526
526
|
thickness: 6,
|
|
@@ -543,8 +543,23 @@ export class AppComponent {
|
|
|
543
543
|
|
|
544
544
|
```
|
|
545
545
|
|
|
546
|
+
```scss
|
|
547
|
+
|
|
548
|
+
.list {
|
|
549
|
+
&::part(scrollbar-track) {
|
|
550
|
+
margin-right: 2px;
|
|
551
|
+
overflow: initial;
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
&::part(scrollbar-thumb) {
|
|
555
|
+
border: 1px solid #8738c3;
|
|
556
|
+
border-radius: 4px;
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
```
|
|
560
|
+
|
|
546
561
|
```html
|
|
547
|
-
<ng-virtual-list [scrollbarTheme]="scrollbarTheme" [items]="items" [itemRenderer]="itemRenderer"></ng-virtual-list>
|
|
562
|
+
<ng-virtual-list class="list" [scrollbarTheme]="scrollbarTheme" [items]="items" [itemRenderer]="itemRenderer"></ng-virtual-list>
|
|
548
563
|
|
|
549
564
|
<ng-template #horizontalItemRenderer let-data="data" let-config="config">
|
|
550
565
|
@if (data) {
|
|
@@ -647,41 +662,42 @@ Inputs
|
|
|
647
662
|
|
|
648
663
|
| Property | Type | Description |
|
|
649
664
|
|---|---|---|
|
|
650
|
-
|
|
|
651
|
-
| items | [IVirtualListCollection](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/models/collection.model.ts) | Collection of list items. The collection of elements must be immutable. |
|
|
652
|
-
| itemSize | number? = 24 | If direction = 'vertical', then the height of a typical element. If direction = 'horizontal', then the width of a typical element. If the dynamicSize property is true, the items in the list can have different sizes, and you must specify the itemSize property to adjust the sizes of the items in the unallocated area. |
|
|
665
|
+
| animationParams | [IAnimationParams](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/interfaces/animation-params.ts)? = { scrollToItem: 50, navigateToItem: 150, navigateByKeyboard: 50 } | Animation parameters. The default value is "{ scrollToItem: 50, navigateToItem: 150, , navigateByKeyboard: 50 }". |
|
|
653
666
|
| bufferSize | number? = 2 | Number of elements outside the scope of visibility. Default value is 2. |
|
|
654
667
|
| maxBufferSize | number? = 10 | Maximum number of elements outside the scope of visibility. Default value is 10. If maxBufferSize is set to be greater than bufferSize, then adaptive buffer mode is enabled. The greater the scroll size, the more elements are allocated for rendering. |
|
|
655
|
-
|
|
|
656
|
-
| methodForSelecting | [MethodForSelecting](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/enums/method-for-selecting.ts) | Method for selecting list items. Default value is 'none'. 'select' - List items are selected one by one. 'multi-select' - Multiple selection of list items. 'none' - List items are not selectable. |
|
|
657
|
-
| itemConfigMap | [IVirtualListItemConfigMap?](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/models/item-config-map.model.ts) | Sets `sticky` position and `selectable` for the list item element. If `sticky` position is greater than `0`, then `sticky` position is applied. If the `sticky` value is greater than `0`, then the `sticky` position mode is enabled for the element. `1` - position start, `2` - position end. Default value is `0`. `selectable` determines whether an element can be selected or not. Default value is `true`. |
|
|
668
|
+
| collapsedIds | Array<[Id](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/types/id.ts)> | Sets the collapsed items. |
|
|
658
669
|
| collapseByClick | boolean? = true | If `false`, the element is collapsed using the config.collapse method passed to the template; if `true`, the element is collapsed by clicking on it. The default value is `true`. |
|
|
659
670
|
| collectionMode | [CollectionMode? = 'normal'](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/enums/collection-mode.ts) | Determines the action modes for collection elements. Default value is `normal`. |
|
|
660
|
-
| selectByClick | boolean? = true | If `false`, the element is selected using the config.select method passed to the template; if `true`, the element is selected by clicking on it. The default value is `true`. |
|
|
661
|
-
| snap | boolean? = false | Determines whether elements will snap. Default value is "false". |
|
|
662
|
-
| snappingMethod | [SnappingMethod? = 'normal'](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/enums/snapping-method.ts) | Snapping method. 'normal' - Normal group rendering. 'advanced' - The group is rendered on a transparent background. 'chat' - The group is rendered on a background. List items below the group are not rendered. |
|
|
663
671
|
| direction | [Direction? = 'vertical'](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/enums/direction.ts) | Determines the direction in which elements are placed. Default value is "vertical". |
|
|
664
672
|
| dynamicSize | boolean? = true | If true, items in the list may have different sizes, and the itemSize property must be specified to adjust the sizes of items in the unallocated area. If false then the items in the list have a fixed size specified by the itemSize property. The default value is true. |
|
|
665
673
|
| enabledBufferOptimization | boolean? = true | Experimental! Enables buffer optimization. Can only be used if items in the collection are not added or updated. |
|
|
666
|
-
|
|
|
667
|
-
|
|
|
668
|
-
|
|
|
669
|
-
|
|
|
674
|
+
| id | number | Readonly. Returns the unique identifier of the component. |
|
|
675
|
+
| items | [IVirtualListCollection](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/models/collection.model.ts) | Collection of list items. The collection of elements must be immutable. |
|
|
676
|
+
| itemSize | number? = 24 | If direction = 'vertical', then the height of a typical element. If direction = 'horizontal', then the width of a typical element. If the dynamicSize property is true, the items in the list can have different sizes, and you must specify the itemSize property to adjust the sizes of the items in the unallocated area. |
|
|
677
|
+
| itemRenderer | TemplateRef | Rendering element template. |
|
|
678
|
+
| itemConfigMap | [IVirtualListItemConfigMap?](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/models/item-config-map.model.ts) | Sets `sticky` position and `selectable` for the list item element. If `sticky` position is greater than `0`, then `sticky` position is applied. If the `sticky` value is greater than `0`, then the `sticky` position mode is enabled for the element. `1` - position start, `2` - position end. Default value is `0`. `selectable` determines whether an element can be selected or not. Default value is `true`. |
|
|
679
|
+
| methodForSelecting | [MethodForSelecting](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/enums/method-for-selecting.ts) | Method for selecting list items. Default value is 'none'. 'select' - List items are selected one by one. 'multi-select' - Multiple selection of list items. 'none' - List items are not selectable. |
|
|
670
680
|
| langTextDir | [TextDirection? = 'ltr'](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/enums/text-direction.ts) | A string indicating the direction of text for the locale. Can be either "ltr" (left-to-right) or "rtl" (right-to-left). |
|
|
671
681
|
| loading | boolean? = false | If `true`, the scrollBar goes into loading state. The default value is `false`. |
|
|
672
|
-
|
|
|
682
|
+
| overscrollEnabled | boolean? = true | Determines whether the overscroll (re-scroll) feature will work. The default value is "true". |
|
|
683
|
+
| selectByClick | boolean? = true | If `false`, the element is selected using the config.select method passed to the template; if `true`, the element is selected by clicking on it. The default value is `true`. |
|
|
684
|
+
| snap | boolean? = false | Determines whether elements will snap. Default value is "false". |
|
|
685
|
+
| selectedIds | Array<[Id](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/types/id.ts)> \| [Id](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/types/id.ts) \| null | Sets the selected items. |
|
|
686
|
+
| screenReaderMessage | string? = "Showing items $1 to $2" | Message for screen reader. The message format is: "some text `$1` some text `$2`", where `$1` is the number of the first element of the screen collection, `$2` is the number of the last element of the screen collection. |
|
|
687
|
+
| scrollbarTheme | [ScrollBarTheme?](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/types/scrollbar-theme.ts) | Scrollbar theme. |
|
|
673
688
|
| clickDistance | number? = 40 | The maximum scroll distance at which a click event is triggered. |
|
|
674
689
|
| waitForPreparation | boolean? = true | If true, it will wait until the list items are fully prepared before displaying them.. The default value is `true`. |
|
|
675
690
|
| scrollStartOffset | number? = 0 | Sets the scroll start offset value; Default value is "0". |
|
|
676
691
|
| scrollEndOffset | number? = 0 | Sets the scroll end offset value; Default value is "0". |
|
|
677
|
-
|
|
|
692
|
+
| snappingMethod | [SnappingMethod](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/enums/snapping-method.ts) | Snapping method. Default value is [SnappingMethods.STANDART](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/enums/snapping-method.ts). [SnappingMethods.STANDART](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/enums/snapping-method.ts) - Classic group visualization. [SnappingMethods.ADVANCED](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/enums/snapping-method.ts) - A mask is applied to the viewport area so that the background is displayed underneath the attached group. |
|
|
693
|
+
| snapScrollToStart | boolean? = true | Determines whether the scroll will be anchored to the start of the list. Default value is "true". This property takes precedence over the snapScrollToEnd property. That is, if snapScrollToStart and snapScrollToEnd are enabled, the list will initially snap to the beginning; if you move the scroll bar to the end, the list will snap to the end. If snapScrollToStart is disabled and snapScrollToEnd is enabled, the list will snap to the end; if you move the scroll bar to the beginning, the list will snap to the beginning. If both snapScrollToStart and snapScrollToEnd are disabled, the list will never snap to the beginning or end. |
|
|
694
|
+
| snapScrollToEnd | boolean? = true | Determines whether the scroll will be anchored to the утв of the list. Default value is "true". That is, if snapScrollToStart and snapScrollToEnd are enabled, the list will initially snap to the beginning; if you move the scroll bar to the end, the list will snap to the end. If snapScrollToStart is disabled and snapScrollToEnd is enabled, the list will snap to the end; if you move the scroll bar to the beginning, the list will snap to the beginning. If both snapScrollToStart and snapScrollToEnd are disabled, the list will never snap to the beginning or end. |
|
|
678
695
|
| snapToEndTransitionInstantOffset | number? = 0 | Sets the offset value; if the scroll area value is exceeded, the scroll animation will be disabled. Default value is "0". |
|
|
679
696
|
| scrollbarMinSize | number? = 80 | Minimum scrollbar size. |
|
|
680
697
|
| scrollbarEnabled | boolean? = true | Determines whether the scrollbar is shown or not. The default value is "true". |
|
|
681
698
|
| scrollbarInteractive | boolean? = true | Determines whether scrolling using the scrollbar will be possible. The default value is "true". |
|
|
682
|
-
| overscrollEnabled | boolean? = true | Determines whether the overscroll (re-scroll) feature will work. The default value is "true". |
|
|
683
|
-
| animationParams | [IAnimationParams](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/types/animation-params.ts)? = { scrollToItem: 50, navigateToItem: 150 } | Animation parameters. The default value is "{ scrollToItem: 50, navigateToItem: 150 }". |
|
|
684
699
|
| scrollBehavior | ScrollBehavior? = 'smooth' | Defines the scrolling behavior for any element on the page. The default value is "smooth". |
|
|
700
|
+
| trackBy | string? = 'id' | The name of the property by which tracking is performed. |
|
|
685
701
|
|
|
686
702
|
<br/>
|
|
687
703
|
|
|
@@ -689,12 +705,12 @@ Outputs
|
|
|
689
705
|
|
|
690
706
|
| Event | Type | Description |
|
|
691
707
|
|---|---|---|
|
|
692
|
-
| onItemClick | [IRenderVirtualListItem](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/models/render-item.model.ts) \|
|
|
693
|
-
| onScroll | ([IScrollEvent](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/
|
|
694
|
-
| onScrollEnd | ([IScrollEvent](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/
|
|
695
|
-
| onSelect | Array<[Id](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/types/id.ts)> \| [Id](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/types/id.ts) \|
|
|
696
|
-
| onCollapse | Array<[Id](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/types/id.ts)> \| [Id](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/types/id.ts) \|
|
|
697
|
-
| onViewportChange | [ISize](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/
|
|
708
|
+
| onItemClick | [IRenderVirtualListItem](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/models/render-item.model.ts) \| null | Fires when an element is clicked. |
|
|
709
|
+
| onScroll | ([IScrollEvent](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/interfaces/scroll-event.ts)) => void | Fires when the list has been scrolled. |
|
|
710
|
+
| onScrollEnd | ([IScrollEvent](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/interfaces/scroll-event.ts)) => void | Fires when the list has completed scrolling. |
|
|
711
|
+
| onSelect | Array<[Id](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/types/id.ts)> \| [Id](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/types/id.ts) \| null | Fires when an elements are selected. |
|
|
712
|
+
| onCollapse | Array<[Id](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/types/id.ts)> \| [Id](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/types/id.ts) \| null | Fires when elements are collapsed. |
|
|
713
|
+
| onViewportChange | [ISize](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/interfaces/size.ts) | Fires when the viewport size is changed. |
|
|
698
714
|
| onScrollReachStart | void | Fires when the scroll reaches the start. |
|
|
699
715
|
| onScrollReachEnd | void | Fires when the scroll reaches the end. |
|
|
700
716
|
|
|
@@ -704,13 +720,12 @@ Methods
|
|
|
704
720
|
|
|
705
721
|
| Method | Type | Description |
|
|
706
722
|
|--|--|--|
|
|
707
|
-
| scrollTo | (id: [Id](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/types/id.ts), cb
|
|
708
|
-
| scrollToStart | (cb
|
|
709
|
-
|
|
|
710
|
-
|
|
|
711
|
-
| getItemBounds | (id: [Id](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/types/id.ts), behavior?: ScrollBehavior) => void | Returns the bounds of an element with a given id |
|
|
723
|
+
| scrollTo | (id: [Id](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/types/id.ts), (cb: () => void) \| null = null, options: [IScrollOptions](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/interfaces/scroll-options.ts) \| null = null) | The method scrolls the list to the element with the given `id` and returns the value of the scrolled area. |
|
|
724
|
+
| scrollToStart | (cb: (() => void) \| null = null, options: [IScrollOptions](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/interfaces/scroll-options.ts) \| null = null) | Scrolls the scroll area to the first item in the collection. |
|
|
725
|
+
| scrollToEnd | (cb: (() => void) \| null = null, options: [IScrollOptions](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/interfaces/scroll-options.ts) \| null = null) | Scrolls the list to the end of the content height. |
|
|
726
|
+
| getItemBounds | (id: [Id](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/types/id.ts)) => [ISize \| null](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/interfaces/size.ts) | Returns the bounds of an element with a given id |
|
|
712
727
|
| focus | [Id](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/types/id.ts), align: [FocusAlignment](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/types/focus-alignment.ts) = [FocusAlignments.NONE](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/enums/focus-alignments.ts) | Focus an list item by a given id. |
|
|
713
|
-
|
|
|
728
|
+
| preventSnapping | | Prevents the list from snapping to its start or end edge. |
|
|
714
729
|
|
|
715
730
|
<br/>
|
|
716
731
|
|
|
@@ -728,7 +743,7 @@ Properties
|
|
|
728
743
|
|--|--|--|
|
|
729
744
|
| data | {\[id: [Id](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/types/id.ts) \], [otherProps: string]: any;} | Collection item data. |
|
|
730
745
|
| config | [IDisplayObjectConfig](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/models/display-object-config.model.ts) | Display object configuration. A set of `select`, `collapse`, and `focus` methods are also provided. |
|
|
731
|
-
| measures | [IDisplayObjectMeasures](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/models/display-object-measures.model.ts) \|
|
|
746
|
+
| measures | [IDisplayObjectMeasures](https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/models/display-object-measures.model.ts) \| null | Display object metrics. |
|
|
732
747
|
|
|
733
748
|
<br/>
|
|
734
749
|
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { ChangeDetectorRef, computed, DestroyRef, ElementRef, inject, signal } from '@angular/core';
|
|
2
|
+
import { DEFAULT_ZINDEX, DISPLAY_BLOCK, DISPLAY_NONE, HIDDEN_ZINDEX, PART_DEFAULT_ITEM, PART_ITEM_COLLAPSED, PART_ITEM_EVEN, PART_ITEM_FOCUSED, PART_ITEM_NEW, PART_ITEM_ODD, PART_ITEM_SELECTED, PART_ITEM_SNAPPED, POSITION_ABSOLUTE, PX, SIZE_100_PERSENT, SIZE_AUTO, TRANSLATE_3D, VISIBILITY_HIDDEN, VISIBILITY_VISIBLE, } from '../../../const';
|
|
3
|
+
import { CLASS_NAME_FOCUS, CLASS_NAME_SNAPPED, CLASS_NAME_SNAPPED_OUT, ID, ITEM_ID, POSITION, POSITION_ZERO, TRANSLATE_3D_HIDDEN, } from '../const';
|
|
4
|
+
import { TextDirections } from '../../../enums';
|
|
5
|
+
const EMPTY_HANDLER = () => { };
|
|
6
|
+
/**
|
|
7
|
+
* BaseVirtualListItemComponent
|
|
8
|
+
* @link https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/components/list-item/base//base-virtual-list-item-component.ts
|
|
9
|
+
* @author Evgenii Alexandrovich Grebennikov
|
|
10
|
+
* @email djonnyx@gmail.com
|
|
11
|
+
*/
|
|
12
|
+
export class BaseVirtualListItemComponent {
|
|
13
|
+
_cdr = inject(ChangeDetectorRef);
|
|
14
|
+
_id;
|
|
15
|
+
get id() {
|
|
16
|
+
return this._id;
|
|
17
|
+
}
|
|
18
|
+
_listId;
|
|
19
|
+
get listId() {
|
|
20
|
+
return this._listId;
|
|
21
|
+
}
|
|
22
|
+
_displayId;
|
|
23
|
+
get displayId() {
|
|
24
|
+
return this._displayId;
|
|
25
|
+
}
|
|
26
|
+
_isSelected = false;
|
|
27
|
+
_isCollapsed = false;
|
|
28
|
+
config = signal({});
|
|
29
|
+
measures = signal(null);
|
|
30
|
+
focused = signal(false);
|
|
31
|
+
part = signal(PART_DEFAULT_ITEM);
|
|
32
|
+
data = signal(null);
|
|
33
|
+
_data = null;
|
|
34
|
+
set item(v) {
|
|
35
|
+
if (this._data === v || this._data?.id === -1 || !v) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
this._data = v;
|
|
39
|
+
this.updatePartStr(v, this._isSelected, this._isCollapsed);
|
|
40
|
+
this.updateConfig(v);
|
|
41
|
+
this.updateMeasures(v);
|
|
42
|
+
this.update();
|
|
43
|
+
this.data.set(v);
|
|
44
|
+
this._cdr.markForCheck();
|
|
45
|
+
}
|
|
46
|
+
classes;
|
|
47
|
+
index;
|
|
48
|
+
templateContext;
|
|
49
|
+
regular = false;
|
|
50
|
+
_scrollBarSize = 0;
|
|
51
|
+
_langTextDir = TextDirections.LTR;
|
|
52
|
+
_regularLength = SIZE_100_PERSENT;
|
|
53
|
+
set regularLength(v) {
|
|
54
|
+
if (this._regularLength === v) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
this._regularLength = v;
|
|
58
|
+
this.update();
|
|
59
|
+
this._cdr.markForCheck();
|
|
60
|
+
}
|
|
61
|
+
get item() {
|
|
62
|
+
return this._data;
|
|
63
|
+
}
|
|
64
|
+
get itemId() {
|
|
65
|
+
return this._data?.id;
|
|
66
|
+
}
|
|
67
|
+
itemRenderer = signal(undefined);
|
|
68
|
+
_renderer;
|
|
69
|
+
set renderer(v) {
|
|
70
|
+
if (this._renderer !== v) {
|
|
71
|
+
this._renderer = v;
|
|
72
|
+
this.itemRenderer.set(v);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
_elementRef = inject(ElementRef);
|
|
76
|
+
get element() {
|
|
77
|
+
return this._elementRef.nativeElement;
|
|
78
|
+
}
|
|
79
|
+
_destroyRef = inject(DestroyRef);
|
|
80
|
+
constructor() {
|
|
81
|
+
this.classes = computed(() => {
|
|
82
|
+
const data = this.data(), focused = this.focused();
|
|
83
|
+
return {
|
|
84
|
+
[CLASS_NAME_SNAPPED]: data?.config?.snapped ?? false, [CLASS_NAME_SNAPPED_OUT]: data?.config?.snappedOut ?? false,
|
|
85
|
+
[CLASS_NAME_FOCUS]: focused,
|
|
86
|
+
};
|
|
87
|
+
});
|
|
88
|
+
this.index = computed(() => {
|
|
89
|
+
return this.config()?.tabIndex ?? -1;
|
|
90
|
+
});
|
|
91
|
+
this.templateContext = computed(() => {
|
|
92
|
+
const data = this.data(), measures = this.measures(), config = this.config();
|
|
93
|
+
return {
|
|
94
|
+
data: data?.data, prevData: data?.previouseData, nextData: data?.nextData, measures,
|
|
95
|
+
config, reseted: false, index: data?.index ?? -1,
|
|
96
|
+
};
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
updateMeasures(v) {
|
|
100
|
+
this.measures.set(v?.measures ? { ...v.measures } : null);
|
|
101
|
+
}
|
|
102
|
+
updateConfig(v) {
|
|
103
|
+
this.config.set({
|
|
104
|
+
...v?.config || {}, selected: this._isSelected, collapsed: this._isCollapsed, focused: this.focused(),
|
|
105
|
+
collapse: EMPTY_HANDLER, select: EMPTY_HANDLER, focus: EMPTY_HANDLER,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
update() {
|
|
109
|
+
const data = this._data, regular = this.regular, length = this._regularLength, el = this._elementRef.nativeElement;
|
|
110
|
+
if (data) {
|
|
111
|
+
el.setAttribute(ITEM_ID, `${data.id}`);
|
|
112
|
+
const styles = el.style;
|
|
113
|
+
styles.zIndex = data.config.zIndex;
|
|
114
|
+
styles.position = POSITION_ABSOLUTE;
|
|
115
|
+
if (data.config.isStub === true) {
|
|
116
|
+
el.style.visibility = VISIBILITY_HIDDEN;
|
|
117
|
+
}
|
|
118
|
+
if (regular) {
|
|
119
|
+
el.setAttribute(POSITION, POSITION_ZERO);
|
|
120
|
+
styles.transform = `${TRANSLATE_3D}(${data.config.isVertical ? (this._langTextDir === TextDirections.RTL ? this._scrollBarSize : 0) : data.measures.delta}${PX}, ${data.config.isVertical ? data.measures.delta : 0}${PX}, ${POSITION_ZERO})`;
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
el.setAttribute(POSITION, `${data.config.isVertical ? data.measures.y : data.measures.x}`);
|
|
124
|
+
styles.transform = `${TRANSLATE_3D}(${data.config.isVertical ? 0 : data.measures.x}${PX}, ${data.config.isVertical ? data.measures.y : 0}${PX}, ${POSITION_ZERO})`;
|
|
125
|
+
}
|
|
126
|
+
styles.height = data.config.isVertical ? data.config.dynamic ? SIZE_AUTO : `${data.measures.height}${PX}` : regular ? length : SIZE_100_PERSENT;
|
|
127
|
+
styles.width = data.config.isVertical ? regular ? length : SIZE_100_PERSENT : data.config.dynamic ? SIZE_AUTO : `${data.measures.width}${PX}`;
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
el.removeAttribute(ID);
|
|
131
|
+
}
|
|
132
|
+
this._cdr.markForCheck();
|
|
133
|
+
}
|
|
134
|
+
updatePartStr(v, isSelected, isCollapsed) {
|
|
135
|
+
let odd = false;
|
|
136
|
+
if (v?.index !== undefined) {
|
|
137
|
+
odd = v.index % 2 === 0;
|
|
138
|
+
}
|
|
139
|
+
let part = PART_DEFAULT_ITEM;
|
|
140
|
+
part += odd ? PART_ITEM_ODD : PART_ITEM_EVEN;
|
|
141
|
+
if (v ? v.config.snapped : false) {
|
|
142
|
+
part += PART_ITEM_SNAPPED;
|
|
143
|
+
}
|
|
144
|
+
if (isSelected) {
|
|
145
|
+
part += PART_ITEM_SELECTED;
|
|
146
|
+
}
|
|
147
|
+
if (isCollapsed) {
|
|
148
|
+
part += PART_ITEM_COLLAPSED;
|
|
149
|
+
}
|
|
150
|
+
if (v ? v.config.new : false) {
|
|
151
|
+
part += PART_ITEM_NEW;
|
|
152
|
+
}
|
|
153
|
+
if (this.focused()) {
|
|
154
|
+
part += PART_ITEM_FOCUSED;
|
|
155
|
+
}
|
|
156
|
+
this.part.set(part);
|
|
157
|
+
}
|
|
158
|
+
getBounds() {
|
|
159
|
+
const el = this._elementRef.nativeElement, { width, height } = el.getBoundingClientRect();
|
|
160
|
+
return { width: width > 0 ? width : 1, height: height > 0 ? height : 1, };
|
|
161
|
+
}
|
|
162
|
+
show() {
|
|
163
|
+
const el = this._elementRef.nativeElement, styles = el.style;
|
|
164
|
+
styles.zIndex = this._data?.config?.zIndex ?? DEFAULT_ZINDEX;
|
|
165
|
+
if (this.regular) {
|
|
166
|
+
if (styles.display === DISPLAY_BLOCK) {
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
styles.display = DISPLAY_BLOCK;
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
const isStub = this._data?.config?.isStub ?? false;
|
|
173
|
+
if (!isStub) {
|
|
174
|
+
if (styles.visibility === VISIBILITY_VISIBLE) {
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
styles.visibility = VISIBILITY_VISIBLE;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
hide() {
|
|
182
|
+
const el = this._elementRef.nativeElement, styles = el.style;
|
|
183
|
+
styles.position = POSITION_ABSOLUTE;
|
|
184
|
+
styles.transform = TRANSLATE_3D_HIDDEN;
|
|
185
|
+
styles.zIndex = HIDDEN_ZINDEX;
|
|
186
|
+
if (this.regular) {
|
|
187
|
+
if (styles.display === DISPLAY_NONE) {
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
styles.display = DISPLAY_NONE;
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
if (styles.visibility === VISIBILITY_HIDDEN) {
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
styles.visibility = VISIBILITY_HIDDEN;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS12aXJ0dWFsLWxpc3QtaXRlbS1jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL2xpc3QtaXRlbS9iYXNlL2Jhc2UtdmlydHVhbC1saXN0LWl0ZW0tY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQVUsTUFBTSxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBSXpILE9BQU8sRUFDTCxjQUFjLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUNsSCxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLEVBQUUsRUFBRSxnQkFBZ0IsRUFDL0gsU0FBUyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsR0FDL0QsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQ0wsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixHQUN4SCxNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQWlCLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRS9ELE1BQU0sYUFBYSxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUVoQzs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyw0QkFBNEI7SUFDL0IsSUFBSSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBRS9CLEdBQUcsQ0FBVTtJQUN2QixJQUFJLEVBQUU7UUFDSixPQUFPLElBQUks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aUJBQWlCLENBQUM7UUFDeEMsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBjb21wdXRlZCwgRGVzdHJveVJlZiwgRWxlbWVudFJlZiwgaW5qZWN0LCBTaWduYWwsIHNpZ25hbCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSVNpemUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgSVJlbmRlclZpcnR1YWxMaXN0SXRlbSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9yZW5kZXItaXRlbS5tb2RlbCc7XHJcbmltcG9ydCB7IElEaXNwbGF5T2JqZWN0Q29uZmlnLCBJRGlzcGxheU9iamVjdE1lYXN1cmVzIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHtcclxuICBERUZBVUxUX1pJTkRFWCwgRElTUExBWV9CTE9DSywgRElTUExBWV9OT05FLCBISURERU5fWklOREVYLCBQQVJUX0RFRkFVTFRfSVRFTSwgUEFSVF9JVEVNX0NPTExBUFNFRCwgUEFSVF9JVEVNX0VWRU4sXHJcbiAgUEFSVF9JVEVNX0ZPQ1VTRUQsIFBBUlRfSVRFTV9ORVcsIFBBUlRfSVRFTV9PREQsIFBBUlRfSVRFTV9TRUxFQ1RFRCwgUEFSVF9JVEVNX1NOQVBQRUQsIFBPU0lUSU9OX0FCU09MVVRFLCBQWCwgU0laRV8xMDBfUEVSU0VOVCxcclxuICBTSVpFX0FVVE8sIFRSQU5TTEFURV8zRCwgVklTSUJJTElUWV9ISURERU4sIFZJU0lCSUxJVFlfVklTSUJMRSxcclxufSBmcm9tICcuLi8uLi8uLi9jb25zdCc7XHJcbmltcG9ydCB7IElUZW1wbGF0ZUNvbnRleHQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHtcclxuICBDTEFTU19OQU1FX0ZPQ1VTLCBDTEFTU19OQU1FX1NOQVBQRUQsIENMQVNTX05BTUVfU05BUFBFRF9PVVQsIElELCBJVEVNX0lELCBQT1NJVElPTiwgUE9TSVRJT05fWkVSTywgVFJBTlNMQVRFXzNEX0hJRERFTixcclxufSBmcm9tICcuLi9jb25zdCc7XHJcbmltcG9ydCB7IFRleHREaXJlY3Rpb24sIFRleHREaXJlY3Rpb25zIH0gZnJvbSAnLi4vLi4vLi4vZW51bXMnO1xyXG5cclxuY29uc3QgRU1QVFlfSEFORExFUiA9ICgpID0+IHsgfTtcclxuXHJcbi8qKlxyXG4gKiBCYXNlVmlydHVhbExpc3RJdGVtQ29tcG9uZW50XHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iLzE3LngvcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29tcG9uZW50cy9saXN0LWl0ZW0vYmFzZS8vYmFzZS12aXJ0dWFsLWxpc3QtaXRlbS1jb21wb25lbnQudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEFsZXhhbmRyb3ZpY2ggR3JlYmVubmlrb3ZcclxuICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQmFzZVZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudCB7XHJcbiAgcHJpdmF0ZSBfY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcclxuXHJcbiAgcHJvdGVjdGVkIF9pZCE6IG51bWJlcjtcclxuICBnZXQgaWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faWQ7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgX2xpc3RJZCE6IG51bWJlcjtcclxuICBnZXQgbGlzdElkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xpc3RJZDtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBfZGlzcGxheUlkITogc3RyaW5nO1xyXG4gIGdldCBkaXNwbGF5SWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGlzcGxheUlkO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF9pc1NlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByb3RlY3RlZCBfaXNDb2xsYXBzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbmZpZyA9IHNpZ25hbDxJRGlzcGxheU9iamVjdENvbmZpZz4oe30gYXMgSURpc3BsYXlPYmplY3RDb25maWcpO1xyXG5cclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbWVhc3VyZXMgPSBzaWduYWw8SURpc3BsYXlPYmplY3RNZWFzdXJlcyB8IG51bGw+KG51bGwpO1xyXG5cclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZm9jdXNlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHByb3RlY3RlZCByZWFkb25seSBwYXJ0ID0gc2lnbmFsPHN0cmluZz4oUEFSVF9ERUZBVUxUX0lURU0pO1xyXG5cclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGF0YSA9IHNpZ25hbDxJUmVuZGVyVmlydHVhbExpc3RJdGVtIHwgbnVsbD4obnVsbCk7XHJcbiAgcHJvdGVjdGVkIF9kYXRhOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtIHwgbnVsbCA9IG51bGw7XHJcbiAgc2V0IGl0ZW0odjogSVJlbmRlclZpcnR1YWxMaXN0SXRlbSB8IG51bGwpIHtcclxuICAgIGlmICh0aGlzLl9kYXRhID09PSB2IHx8IHRoaXMuX2RhdGE/LmlkID09PSAtMSB8fCAhdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fZGF0YSA9IHY7XHJcblxyXG4gICAgdGhpcy51cGRhdGVQYXJ0U3RyKHYsIHRoaXMuX2lzU2VsZWN0ZWQsIHRoaXMuX2lzQ29sbGFwc2VkKTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZUNvbmZpZyh2KTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZU1lYXN1cmVzKHYpO1xyXG5cclxuICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgdGhpcy5kYXRhLnNldCh2KTtcclxuXHJcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2xhc3NlcyE6IFNpZ25hbDx7IFtjTmFtZTogc3RyaW5nXTogYm9vbGVhbjsgfT47XHJcblxyXG4gIHByb3RlY3RlZCByZWFkb25seSBpbmRleCE6IFNpZ25hbDxudW1iZXI+O1xyXG5cclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdGVtcGxhdGVDb250ZXh0ITogU2lnbmFsPElUZW1wbGF0ZUNvbnRleHQ+O1xyXG5cclxuICBwdWJsaWMgcmVndWxhcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcm90ZWN0ZWQgX3Njcm9sbEJhclNpemU6IG51bWJlciA9IDA7XHJcblxyXG4gIHByb3RlY3RlZCBfbGFuZ1RleHREaXI6IFRleHREaXJlY3Rpb24gPSBUZXh0RGlyZWN0aW9ucy5MVFI7XHJcblxyXG4gIHByb3RlY3RlZCBfcmVndWxhckxlbmd0aDogc3RyaW5nID0gU0laRV8xMDBfUEVSU0VOVDtcclxuICBzZXQgcmVndWxhckxlbmd0aCh2OiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLl9yZWd1bGFyTGVuZ3RoID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9yZWd1bGFyTGVuZ3RoID0gdjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIGdldCBpdGVtKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XHJcbiAgfVxyXG5cclxuICBnZXQgaXRlbUlkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGE/LmlkO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGl0ZW1SZW5kZXJlciA9IHNpZ25hbDxUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG5cclxuICBwcm90ZWN0ZWQgX3JlbmRlcmVyOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xyXG4gIHNldCByZW5kZXJlcih2OiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodGhpcy5fcmVuZGVyZXIgIT09IHYpIHtcclxuICAgICAgdGhpcy5fcmVuZGVyZXIgPSB2O1xyXG4gICAgICB0aGlzLml0ZW1SZW5kZXJlci5zZXQodik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgX2VsZW1lbnRSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xyXG4gIGdldCBlbGVtZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBfZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLmNsYXNzZXMgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGEoKSwgZm9jdXNlZCA9IHRoaXMuZm9jdXNlZCgpO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIFtDTEFTU19OQU1FX1NOQVBQRURdOiBkYXRhPy5jb25maWc/LnNuYXBwZWQgPz8gZmFsc2UsIFtDTEFTU19OQU1FX1NOQVBQRURfT1VUXTogZGF0YT8uY29uZmlnPy5zbmFwcGVkT3V0ID8/IGZhbHNlLFxyXG4gICAgICAgIFtDTEFTU19OQU1FX0ZPQ1VTXTogZm9jdXNlZCxcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuaW5kZXggPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZygpPy50YWJJbmRleCA/PyAtMTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMudGVtcGxhdGVDb250ZXh0ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhKCksIG1lYXN1cmVzID0gdGhpcy5tZWFzdXJlcygpLCBjb25maWcgPSB0aGlzLmNvbmZpZygpO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGRhdGE6IGRhdGE/LmRhdGEsIHByZXZEYXRhOiBkYXRhPy5wcmV2aW91c2VEYXRhLCBuZXh0RGF0YTogZGF0YT8ubmV4dERhdGEsIG1lYXN1cmVzLFxyXG4gICAgICAgIGNvbmZpZywgcmVzZXRlZDogZmFsc2UsIGluZGV4OiBkYXRhPy5pbmRleCA/PyAtIDEsXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCB1cGRhdGVNZWFzdXJlcyh2OiBJUmVuZGVyVmlydHVhbExpc3RJdGVtPGFueT4gfCBudWxsKSB7XHJcbiAgICB0aGlzLm1lYXN1cmVzLnNldCh2Py5tZWFzdXJlcyA/IHsgLi4udi5tZWFzdXJlcyB9IDogbnVsbClcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCB1cGRhdGVDb25maWcodjogSVJlbmRlclZpcnR1YWxMaXN0SXRlbTxhbnk+IHwgbnVsbCkge1xyXG4gICAgdGhpcy5jb25maWcuc2V0KHtcclxuICAgICAgLi4udj8uY29uZmlnIHx8IHt9IGFzIElEaXNwbGF5T2JqZWN0Q29uZmlnLCBzZWxlY3RlZDogdGhpcy5faXNTZWxlY3RlZCwgY29sbGFwc2VkOiB0aGlzLl9pc0NvbGxhcHNlZCwgZm9jdXNlZDogdGhpcy5mb2N1c2VkKCksXHJcbiAgICAgIGNvbGxhcHNlOiBFTVBUWV9IQU5ETEVSLCBzZWxlY3Q6IEVNUFRZX0hBTkRMRVIsIGZvY3VzOiBFTVBUWV9IQU5ETEVSLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgdXBkYXRlKCkge1xyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuX2RhdGEsIHJlZ3VsYXIgPSB0aGlzLnJlZ3VsYXIsIGxlbmd0aCA9IHRoaXMuX3JlZ3VsYXJMZW5ndGgsIGVsID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgaWYgKGRhdGEpIHtcclxuICAgICAgZWwuc2V0QXR0cmlidXRlKElURU1fSUQsIGAke2RhdGEuaWR9YCk7XHJcbiAgICAgIGNvbnN0IHN0eWxlcyA9IGVsLnN0eWxlO1xyXG4gICAgICBzdHlsZXMuekluZGV4ID0gZGF0YS5jb25maWcuekluZGV4O1xyXG4gICAgICBzdHlsZXMucG9zaXRpb24gPSBQT1NJVElPTl9BQlNPTFVURTtcclxuICAgICAgaWYgKGRhdGEuY29uZmlnLmlzU3R1YiA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIGVsLnN0eWxlLnZpc2liaWxpdHkgPSBWSVNJQklMSVRZX0hJRERFTjtcclxuICAgICAgfVxyXG4gICAgICBpZiAocmVndWxhcikge1xyXG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZShQT1NJVElPTiwgUE9TSVRJT05fWkVSTyk7XHJcbiAgICAgICAgc3R5bGVzLnRyYW5zZm9ybSA9IGAke1RSQU5TTEFURV8zRH0oJHtkYXRhLmNvbmZpZy5pc1ZlcnRpY2FsID8gKHRoaXMuX2xhbmdUZXh0RGlyID09PSBUZXh0RGlyZWN0aW9ucy5SVEwgPyB0aGlzLl9zY3JvbGxCYXJTaXplIDogMCkgOiBkYXRhLm1lYXN1cmVzLmRlbHRhfSR7UFh9LCAke2RhdGEuY29uZmlnLmlzVmVydGljYWwgPyBkYXRhLm1lYXN1cmVzLmRlbHRhIDogMH0ke1BYfSwgJHtQT1NJVElPTl9aRVJPfSlgO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZShQT1NJVElPTiwgYCR7ZGF0YS5jb25maWcuaXNWZXJ0aWNhbCA/IGRhdGEubWVhc3VyZXMueSA6IGRhdGEubWVhc3VyZXMueH1gKTtcclxuICAgICAgICBzdHlsZXMudHJhbnNmb3JtID0gYCR7VFJBTlNMQVRFXzNEfSgke2RhdGEuY29uZmlnLmlzVmVydGljYWwgPyAwIDogZGF0YS5tZWFzdXJlcy54fSR7UFh9LCAke2RhdGEuY29uZmlnLmlzVmVydGljYWwgPyBkYXRhLm1lYXN1cmVzLnkgOiAwfSR7UFh9LCAke1BPU0lUSU9OX1pFUk99KWA7XHJcbiAgICAgIH1cclxuICAgICAgc3R5bGVzLmhlaWdodCA9IGRhdGEuY29uZmlnLmlzVmVydGljYWwgPyBkYXRhLmNvbmZpZy5keW5hbWljID8gU0laRV9BVVRPIDogYCR7ZGF0YS5tZWFzdXJlcy5oZWlnaHR9JHtQWH1gIDogcmVndWxhciA/IGxlbmd0aCA6IFNJWkVfMTAwX1BFUlNFTlQ7XHJcbiAgICAgIHN0eWxlcy53aWR0aCA9IGRhdGEuY29uZmlnLmlzVmVydGljYWwgPyByZWd1bGFyID8gbGVuZ3RoIDogU0laRV8xMDBfUEVSU0VOVCA6IGRhdGEuY29uZmlnLmR5bmFtaWMgPyBTSVpFX0FVVE8gOiBgJHtkYXRhLm1lYXN1cmVzLndpZHRofSR7UFh9YDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShJRCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHVwZGF0ZVBhcnRTdHIodjogSVJlbmRlclZpcnR1YWxMaXN0SXRlbSB8IG51bGwsIGlzU2VsZWN0ZWQ6IGJvb2xlYW4sIGlzQ29sbGFwc2VkOiBib29sZWFuKSB7XHJcbiAgICBsZXQgb2RkID0gZmFsc2U7XHJcbiAgICBpZiAodj8uaW5kZXggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBvZGQgPSB2LmluZGV4ICUgMiA9PT0gMDtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcGFydCA9IFBBUlRfREVGQVVMVF9JVEVNO1xyXG4gICAgcGFydCArPSBvZGQgPyBQQVJUX0lURU1fT0REIDogUEFSVF9JVEVNX0VWRU47XHJcbiAgICBpZiAodiA/IHYuY29uZmlnLnNuYXBwZWQgOiBmYWxzZSkge1xyXG4gICAgICBwYXJ0ICs9IFBBUlRfSVRFTV9TTkFQUEVEO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzU2VsZWN0ZWQpIHtcclxuICAgICAgcGFydCArPSBQQVJUX0lURU1fU0VMRUNURUQ7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNDb2xsYXBzZWQpIHtcclxuICAgICAgcGFydCArPSBQQVJUX0lURU1fQ09MTEFQU0VEO1xyXG4gICAgfVxyXG4gICAgaWYgKHYgPyB2LmNvbmZpZy5uZXcgOiBmYWxzZSkge1xyXG4gICAgICBwYXJ0ICs9IFBBUlRfSVRFTV9ORVc7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5mb2N1c2VkKCkpIHtcclxuICAgICAgcGFydCArPSBQQVJUX0lURU1fRk9DVVNFRDtcclxuICAgIH1cclxuICAgIHRoaXMucGFydC5zZXQocGFydCk7XHJcbiAgfVxyXG5cclxuICBnZXRCb3VuZHMoKTogSVNpemUge1xyXG4gICAgY29uc3QgZWw6IEhUTUxFbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxyXG4gICAgICB7IHdpZHRoLCBoZWlnaHQgfSA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgcmV0dXJuIHsgd2lkdGg6IHdpZHRoID4gMCA/IHdpZHRoIDogMSwgaGVpZ2h0OiBoZWlnaHQgPiAwID8gaGVpZ2h0IDogMSwgfTtcclxuICB9XHJcblxyXG4gIHNob3coKSB7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCxcclxuICAgICAgc3R5bGVzID0gZWwuc3R5bGU7XHJcbiAgICBzdHlsZXMuekluZGV4ID0gdGhpcy5fZGF0YT8uY29uZmlnPy56SW5kZXggPz8gREVGQVVMVF9aSU5ERVg7XHJcbiAgICBpZiAodGhpcy5yZWd1bGFyKSB7XHJcbiAgICAgIGlmIChzdHlsZXMuZGlzcGxheSA9PT0gRElTUExBWV9CTE9DSykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgc3R5bGVzLmRpc3BsYXkgPSBESVNQTEFZX0JMT0NLO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaXNTdHViID0gdGhpcy5fZGF0YT8uY29uZmlnPy5pc1N0dWIgPz8gZmFsc2U7XHJcbiAgICAgIGlmICghaXNTdHViKSB7XHJcbiAgICAgICAgaWYgKHN0eWxlcy52aXNpYmlsaXR5ID09PSBWSVNJQklMSVRZX1ZJU0lCTEUpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3R5bGVzLnZpc2liaWxpdHkgPSBWSVNJQklMSVRZX1ZJU0lCTEU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhpZGUoKSB7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcclxuICAgICAgc3R5bGVzID0gZWwuc3R5bGU7XHJcbiAgICBzdHlsZXMucG9zaXRpb24gPSBQT1NJVElPTl9BQlNPTFVURTtcclxuICAgIHN0eWxlcy50cmFuc2Zvcm0gPSBUUkFOU0xBVEVfM0RfSElEREVOO1xyXG4gICAgc3R5bGVzLnpJbmRleCA9IEhJRERFTl9aSU5ERVg7XHJcbiAgICBpZiAodGhpcy5yZWd1bGFyKSB7XHJcbiAgICAgIGlmIChzdHlsZXMuZGlzcGxheSA9PT0gRElTUExBWV9OT05FKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzdHlsZXMuZGlzcGxheSA9IERJU1BMQVlfTk9ORTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChzdHlsZXMudmlzaWJpbGl0eSA9PT0gVklTSUJJTElUWV9ISURERU4pIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN0eWxlcy52aXNpYmlsaXR5ID0gVklTSUJJTElUWV9ISURERU47XHJcbiAgICB9XHJcbiAgfVxyXG59Il19
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { BaseVirtualListItemComponent } from './base-virtual-list-item-component';
|
|
2
|
+
export { BaseVirtualListItemComponent, };
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL2xpc3QtaXRlbS9iYXNlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRWxGLE9BQU8sRUFDSCw0QkFBNEIsR0FDL0IsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2Jhc2UtdmlydHVhbC1saXN0LWl0ZW0tY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCB7XHJcbiAgICBCYXNlVmlydHVhbExpc3RJdGVtQ29tcG9uZW50LFxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export const ID = 'id', TRANSLATE_3D_HIDDEN = 'translate3d(-1000px,-1000px,0)', ATTR_AREA_SELECTED = 'area-selected', POSITION = 'position', POSITION_ZERO = '0', ITEM_ID = 'item-id', KEY_SPACE = ' ', KEY_ARR_LEFT = 'ArrowLeft', KEY_ARR_UP = 'ArrowUp', KEY_ARR_RIGHT = 'ArrowRight', KEY_ARR_DOWN = 'ArrowDown', EVENT_FOCUS_IN = 'focusin', EVENT_FOCUS_OUT = 'focusout', EVENT_KEY_DOWN = 'keydown', CLASS_NAME_SNAPPED = 'snapped', CLASS_NAME_SNAPPED_OUT = 'snapped-out', CLASS_NAME_FOCUS = 'focus';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL2xpc3QtaXRlbS9jb25zdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxFQUNsQixtQkFBbUIsR0FBRyxnQ0FBZ0MsRUFDdEQsa0JBQWtCLEdBQUcsZUFBZSxFQUNwQyxRQUFRLEdBQUcsVUFBVSxFQUNyQixhQUFhLEdBQUcsR0FBRyxFQUNuQixPQUFPLEdBQUcsU0FBUyxFQUNuQixTQUFTLEdBQUcsR0FBRyxFQUNmLFlBQVksR0FBRyxXQUFXLEVBQzFCLFVBQVUsR0FBRyxTQUFTLEVBQ3RCLGFBQWEsR0FBRyxZQUFZLEVBQzVCLFlBQVksR0FBRyxXQUFXLEVBQzFCLGNBQWMsR0FBRyxTQUFTLEVBQzFCLGVBQWUsR0FBRyxVQUFVLEVBQzVCLGNBQWMsR0FBRyxTQUFTLEVBQzFCLGtCQUFrQixHQUFHLFNBQVMsRUFDOUIsc0JBQXNCLEdBQUcsYUFBYSxFQUN0QyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgSUQgPSAnaWQnLFxyXG4gICAgVFJBTlNMQVRFXzNEX0hJRERFTiA9ICd0cmFuc2xhdGUzZCgtMTAwMHB4LC0xMDAwcHgsMCknLFxyXG4gICAgQVRUUl9BUkVBX1NFTEVDVEVEID0gJ2FyZWEtc2VsZWN0ZWQnLFxyXG4gICAgUE9TSVRJT04gPSAncG9zaXRpb24nLFxyXG4gICAgUE9TSVRJT05fWkVSTyA9ICcwJyxcclxuICAgIElURU1fSUQgPSAnaXRlbS1pZCcsXHJcbiAgICBLRVlfU1BBQ0UgPSAnICcsXHJcbiAgICBLRVlfQVJSX0xFRlQgPSAnQXJyb3dMZWZ0JyxcclxuICAgIEtFWV9BUlJfVVAgPSAnQXJyb3dVcCcsXHJcbiAgICBLRVlfQVJSX1JJR0hUID0gJ0Fycm93UmlnaHQnLFxyXG4gICAgS0VZX0FSUl9ET1dOID0gJ0Fycm93RG93bicsXHJcbiAgICBFVkVOVF9GT0NVU19JTiA9ICdmb2N1c2luJyxcclxuICAgIEVWRU5UX0ZPQ1VTX09VVCA9ICdmb2N1c291dCcsXHJcbiAgICBFVkVOVF9LRVlfRE9XTiA9ICdrZXlkb3duJyxcclxuICAgIENMQVNTX05BTUVfU05BUFBFRCA9ICdzbmFwcGVkJyxcclxuICAgIENMQVNTX05BTUVfU05BUFBFRF9PVVQgPSAnc25hcHBlZC1vdXQnLFxyXG4gICAgQ0xBU1NfTkFNRV9GT0NVUyA9ICdmb2N1cyc7XHJcblxyXG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL2xpc3QtaXRlbS9pbnRlcmZhY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJVGVtcGxhdGVDb250ZXh0IH0gZnJvbSAnLi90ZW1wbGF0ZS1jb250ZXh0JztcclxuXHJcbmV4cG9ydCB0eXBlIHtcclxuICAgIElUZW1wbGF0ZUNvbnRleHQsXHJcbn1cclxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL2NvbXBvbmVudHMvbGlzdC1pdGVtL2ludGVyZmFjZXMvdGVtcGxhdGUtY29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSURpc3BsYXlPYmplY3RDb25maWcsIElEaXNwbGF5T2JqZWN0TWVhc3VyZXMgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElUZW1wbGF0ZUNvbnRleHQ8RCA9IGFueT4ge1xyXG4gICAgZGF0YTogRDtcclxuICAgIHByZXZEYXRhOiBEO1xyXG4gICAgbmV4dERhdGE6IEQ7XHJcbiAgICBtZWFzdXJlczogSURpc3BsYXlPYmplY3RNZWFzdXJlcyB8IG51bGw7XHJcbiAgICBjb25maWc6IElEaXNwbGF5T2JqZWN0Q29uZmlnO1xyXG4gICAgcmVzZXRlZDogYm9vbGVhbjtcclxuICAgIGluZGV4OiBudW1iZXI7XHJcbn0iXX0=
|