ng-virtual-list 16.10.8 → 16.11.1
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 +24 -79
- package/esm2022/lib/components/ng-list-item/base/base-virtual-list-item-component.mjs +207 -0
- package/esm2022/lib/components/ng-list-item/base/index.mjs +3 -0
- package/esm2022/lib/components/ng-list-item/const/index.mjs +30 -0
- package/esm2022/lib/components/ng-list-item/interfaces/index.mjs +2 -0
- package/esm2022/lib/components/ng-list-item/interfaces/template-context.mjs +2 -0
- package/esm2022/lib/components/ng-list-item/ng-virtual-list-item.component.mjs +212 -0
- package/esm2022/lib/components/{list-item → ng-list-item}/ng-virtual-list-item.module.mjs +1 -1
- package/esm2022/lib/components/ng-list-item/utils/create-display-id.mjs +4 -0
- package/esm2022/lib/components/ng-list-item/utils/get-element-by-index.mjs +6 -0
- package/esm2022/lib/components/ng-list-item/utils/index.mjs +4 -0
- package/esm2022/lib/components/ng-prerender-container/components/ng-prerender-list/ng-prerender-list.component.mjs +269 -0
- package/esm2022/lib/components/ng-prerender-container/components/ng-prerender-list/ng-prerender-list.module.mjs +21 -0
- package/esm2022/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.component.mjs +78 -0
- package/esm2022/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.module.mjs +20 -0
- package/esm2022/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.component.mjs +140 -0
- package/esm2022/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.module.mjs +20 -0
- package/esm2022/lib/components/ng-prerender-container/core/index.mjs +3 -0
- package/esm2022/lib/components/ng-prerender-container/core/prerender-track-box.mjs +168 -0
- package/esm2022/lib/components/ng-prerender-container/events/index.mjs +6 -0
- package/esm2022/lib/components/ng-prerender-container/interfaces/index.mjs +2 -0
- package/esm2022/lib/components/ng-prerender-container/interfaces/refresh-params.mjs +2 -0
- package/esm2022/lib/components/ng-prerender-container/ng-prerender-container.component.mjs +92 -0
- package/esm2022/lib/components/ng-prerender-container/ng-prerender-container.module.mjs +20 -0
- package/esm2022/lib/components/ng-prerender-container/types/cache.mjs +2 -0
- package/esm2022/lib/components/ng-prerender-container/types/index.mjs +2 -0
- package/esm2022/lib/components/ng-scroll-bar/const/index.mjs +9 -2
- package/esm2022/lib/components/ng-scroll-bar/enums/index.mjs +3 -0
- package/esm2022/lib/components/ng-scroll-bar/enums/scrollbar-states.mjs +7 -0
- package/esm2022/lib/components/ng-scroll-bar/interfaces/index.mjs +1 -1
- package/esm2022/lib/components/ng-scroll-bar/interfaces/scroll-bar-template-context.mjs +2 -0
- package/esm2022/lib/components/ng-scroll-bar/ng-scroll-bar-public.service.mjs +25 -0
- package/esm2022/lib/components/ng-scroll-bar/ng-scroll-bar.component.mjs +97 -84
- package/esm2022/lib/components/ng-scroll-bar/ng-scroll-bar.module.mjs +4 -5
- package/esm2022/lib/components/ng-scroll-bar/ng-scroll-bar.service.mjs +36 -0
- package/esm2022/lib/components/ng-scroll-bar/types/index.mjs +2 -0
- package/esm2022/lib/components/ng-scroll-bar/types/scrollbar-state.mjs +2 -0
- package/esm2022/lib/components/ng-scroll-view/base/base-scroll-view.component.mjs +44 -56
- package/esm2022/lib/components/ng-scroll-view/ng-scroll-view.component.mjs +26 -30
- package/esm2022/lib/components/ng-scroller/const/index.mjs +2 -0
- package/esm2022/lib/components/ng-scroller/enums/index.mjs +3 -0
- package/esm2022/lib/components/ng-scroller/enums/scroller-direction.mjs +6 -0
- package/esm2022/lib/components/ng-scroller/enums/scroller-directions.mjs +2 -0
- package/esm2022/lib/components/ng-scroller/ng-scroller.component.mjs +449 -0
- package/esm2022/lib/components/ng-scroller/ng-scroller.module.mjs +22 -0
- package/esm2022/lib/components/ng-scroller/utils/index.mjs +3 -0
- package/esm2022/lib/components/ng-scroller/utils/scroll-box.mjs +52 -0
- package/esm2022/lib/const/index.mjs +3 -14
- package/esm2022/lib/core/track-box.mjs +46 -16
- package/esm2022/lib/core/tracker.mjs +1 -1
- package/esm2022/lib/directives/locale-sensitive/locale-sensitive.directive.mjs +2 -2
- package/esm2022/lib/interfaces/scroll-params.mjs +1 -1
- package/esm2022/lib/interfaces/scroll-to-params.mjs +2 -0
- package/esm2022/lib/models/display-object-config.model.mjs +1 -1
- package/esm2022/lib/models/display-object-measures.model.mjs +1 -1
- package/esm2022/lib/models/render-item-measures.model.mjs +1 -1
- package/esm2022/lib/ng-virtual-list-public.service.mjs +121 -0
- package/esm2022/lib/ng-virtual-list.component.mjs +367 -333
- package/esm2022/lib/ng-virtual-list.module.mjs +7 -7
- package/esm2022/lib/ng-virtual-list.service.mjs +116 -33
- package/esm2022/lib/types/index.mjs +1 -1
- package/esm2022/lib/utils/debounce.mjs +28 -6
- package/esm2022/lib/utils/disposable-component.mjs +27 -0
- package/esm2022/lib/utils/list-validators.mjs +1 -1
- package/esm2022/public-api.mjs +8 -3
- package/fesm2022/ng-virtual-list.mjs +2268 -2358
- package/fesm2022/ng-virtual-list.mjs.map +1 -1
- package/lib/components/{list-item → ng-list-item}/base/base-virtual-list-item-component.d.ts +7 -6
- package/lib/components/ng-list-item/interfaces/template-context.d.ts +42 -0
- package/lib/components/{list-item → ng-list-item}/ng-virtual-list-item.component.d.ts +1 -4
- package/lib/components/{prerender-container/components/prerender-list/prerender-list.component.d.ts → ng-prerender-container/components/ng-prerender-list/ng-prerender-list.component.d.ts} +9 -14
- package/lib/components/ng-prerender-container/components/ng-prerender-list/ng-prerender-list.module.d.ts +10 -0
- package/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.component.d.ts +17 -0
- package/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.module.d.ts +9 -0
- package/lib/components/{prerender-container/components/prerender-scroller/prerender-scroller.component.d.ts → ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.component.d.ts} +9 -14
- package/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.module.d.ts +9 -0
- package/lib/components/{prerender-container → ng-prerender-container}/core/prerender-track-box.d.ts +2 -2
- package/lib/components/{prerender-container → ng-prerender-container}/interfaces/refresh-params.d.ts +1 -1
- package/lib/components/ng-prerender-container/ng-prerender-container.component.d.ts +39 -0
- package/lib/components/ng-prerender-container/ng-prerender-container.module.d.ts +9 -0
- package/lib/components/{prerender-container → ng-prerender-container}/types/cache.d.ts +1 -1
- package/lib/components/ng-scroll-bar/const/index.d.ts +3 -2
- package/lib/components/ng-scroll-bar/enums/index.d.ts +2 -0
- package/lib/components/ng-scroll-bar/enums/scrollbar-states.d.ts +5 -0
- package/lib/components/ng-scroll-bar/interfaces/index.d.ts +2 -1
- package/lib/components/ng-scroll-bar/interfaces/scroll-bar-template-context.d.ts +26 -0
- package/lib/components/ng-scroll-bar/ng-scroll-bar-public.service.d.ts +16 -0
- package/lib/components/ng-scroll-bar/ng-scroll-bar.component.d.ts +31 -36
- package/lib/components/ng-scroll-bar/ng-scroll-bar.module.d.ts +1 -2
- package/lib/components/ng-scroll-bar/ng-scroll-bar.service.d.ts +22 -0
- package/lib/components/ng-scroll-bar/types/index.d.ts +2 -0
- package/lib/components/ng-scroll-bar/types/scrollbar-state.d.ts +2 -0
- package/lib/components/ng-scroll-view/base/base-scroll-view.component.d.ts +9 -10
- package/lib/components/{scroller → ng-scroller}/ng-scroller.component.d.ts +31 -10
- package/lib/components/{scroller → ng-scroller}/utils/scroll-box.d.ts +1 -1
- package/lib/const/index.d.ts +2 -2
- package/lib/core/track-box.d.ts +17 -11
- package/lib/core/tracker.d.ts +1 -1
- package/lib/directives/locale-sensitive/locale-sensitive.directive.d.ts +1 -1
- package/lib/interfaces/scroll-params.d.ts +1 -1
- package/lib/interfaces/scroll-to-params.d.ts +7 -0
- package/lib/models/display-object-config.model.d.ts +1 -15
- package/lib/models/display-object-measures.model.d.ts +0 -4
- package/lib/models/render-item-measures.model.d.ts +0 -4
- package/lib/ng-virtual-list-public.service.d.ts +93 -0
- package/lib/ng-virtual-list.component.d.ts +41 -23
- package/lib/ng-virtual-list.module.d.ts +4 -4
- package/lib/ng-virtual-list.service.d.ts +42 -7
- package/lib/types/index.d.ts +3 -4
- package/lib/utils/debounce.d.ts +5 -1
- package/lib/utils/disposable-component.d.ts +15 -0
- package/lib/utils/list-validators.d.ts +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +7 -2
- package/esm2022/lib/components/list-item/base/base-virtual-list-item-component.mjs +0 -207
- package/esm2022/lib/components/list-item/base/index.mjs +0 -3
- package/esm2022/lib/components/list-item/const/index.mjs +0 -32
- package/esm2022/lib/components/list-item/interfaces/index.mjs +0 -2
- package/esm2022/lib/components/list-item/interfaces/template-context.mjs +0 -2
- package/esm2022/lib/components/list-item/ng-virtual-list-item.component.mjs +0 -246
- package/esm2022/lib/components/list-item/utils/create-display-id.mjs +0 -4
- package/esm2022/lib/components/list-item/utils/get-element-by-index.mjs +0 -6
- package/esm2022/lib/components/list-item/utils/index.mjs +0 -4
- package/esm2022/lib/components/prerender-container/components/prerender-list/prerender-list.component.mjs +0 -280
- package/esm2022/lib/components/prerender-container/components/prerender-list/prerender-list.module.mjs +0 -21
- package/esm2022/lib/components/prerender-container/components/prerender-list-item/prerender-list-item.component.mjs +0 -78
- package/esm2022/lib/components/prerender-container/components/prerender-list-item/prerender-list-item.module.mjs +0 -20
- package/esm2022/lib/components/prerender-container/components/prerender-scroller/prerender-scroller.component.mjs +0 -151
- package/esm2022/lib/components/prerender-container/components/prerender-scroller/prerender-scroller.module.mjs +0 -20
- package/esm2022/lib/components/prerender-container/core/index.mjs +0 -3
- package/esm2022/lib/components/prerender-container/core/prerender-track-box.mjs +0 -169
- package/esm2022/lib/components/prerender-container/events/index.mjs +0 -6
- package/esm2022/lib/components/prerender-container/interfaces/index.mjs +0 -2
- package/esm2022/lib/components/prerender-container/interfaces/refresh-params.mjs +0 -2
- package/esm2022/lib/components/prerender-container/prerender-container.component.mjs +0 -97
- package/esm2022/lib/components/prerender-container/prerender-container.module.mjs +0 -20
- package/esm2022/lib/components/prerender-container/types/cache.mjs +0 -2
- package/esm2022/lib/components/prerender-container/types/index.mjs +0 -2
- package/esm2022/lib/components/scroller/const/index.mjs +0 -2
- package/esm2022/lib/components/scroller/enums/index.mjs +0 -3
- package/esm2022/lib/components/scroller/enums/scroller-direction.mjs +0 -6
- package/esm2022/lib/components/scroller/enums/scroller-directions.mjs +0 -2
- package/esm2022/lib/components/scroller/ng-scroller.component.mjs +0 -410
- package/esm2022/lib/components/scroller/ng-scroller.module.mjs +0 -22
- package/esm2022/lib/components/scroller/utils/index.mjs +0 -3
- package/esm2022/lib/components/scroller/utils/scroll-box.mjs +0 -52
- package/esm2022/lib/components/substrate/const/index.mjs +0 -2
- package/esm2022/lib/components/substrate/enums/index.mjs +0 -4
- package/esm2022/lib/components/substrate/enums/substrate-modes.mjs +0 -16
- package/esm2022/lib/components/substrate/enums/substrate-styles.mjs +0 -15
- package/esm2022/lib/components/substrate/index.mjs +0 -5
- package/esm2022/lib/components/substrate/substrate.component.mjs +0 -354
- package/esm2022/lib/components/substrate/substrate.module.mjs +0 -19
- package/esm2022/lib/components/substrate/types/index.mjs +0 -2
- package/esm2022/lib/components/substrate/types/substrate-mode.mjs +0 -2
- package/esm2022/lib/components/substrate/types/substrate-style.mjs +0 -2
- package/esm2022/lib/components/substrate/utils/circle-path.mjs +0 -4
- package/esm2022/lib/components/substrate/utils/index.mjs +0 -4
- package/esm2022/lib/components/substrate/utils/rounded-rect-path.mjs +0 -20
- package/esm2022/lib/types/color.mjs +0 -2
- package/esm2022/lib/types/gradient-color.mjs +0 -2
- package/esm2022/lib/types/rounded-corner.mjs +0 -2
- package/esm2022/lib/types/scrollbar-theme.mjs +0 -2
- package/esm2022/lib/utils/get-shape-min-size.mjs +0 -13
- package/lib/components/list-item/interfaces/template-context.d.ts +0 -10
- package/lib/components/prerender-container/components/prerender-list/prerender-list.module.d.ts +0 -10
- package/lib/components/prerender-container/components/prerender-list-item/prerender-list-item.component.d.ts +0 -17
- package/lib/components/prerender-container/components/prerender-list-item/prerender-list-item.module.d.ts +0 -9
- package/lib/components/prerender-container/components/prerender-scroller/prerender-scroller.module.d.ts +0 -9
- package/lib/components/prerender-container/prerender-container.component.d.ts +0 -42
- package/lib/components/prerender-container/prerender-container.module.d.ts +0 -9
- package/lib/components/substrate/const/index.d.ts +0 -2
- package/lib/components/substrate/enums/index.d.ts +0 -3
- package/lib/components/substrate/enums/substrate-modes.d.ts +0 -13
- package/lib/components/substrate/enums/substrate-styles.d.ts +0 -12
- package/lib/components/substrate/index.d.ts +0 -7
- package/lib/components/substrate/substrate.component.d.ts +0 -91
- package/lib/components/substrate/substrate.module.d.ts +0 -8
- package/lib/components/substrate/types/index.d.ts +0 -3
- package/lib/components/substrate/types/substrate-mode.d.ts +0 -10
- package/lib/components/substrate/types/substrate-style.d.ts +0 -10
- package/lib/components/substrate/utils/circle-path.d.ts +0 -1
- package/lib/components/substrate/utils/index.d.ts +0 -3
- package/lib/components/substrate/utils/rounded-rect-path.d.ts +0 -1
- package/lib/types/color.d.ts +0 -7
- package/lib/types/gradient-color.d.ts +0 -8
- package/lib/types/rounded-corner.d.ts +0 -7
- package/lib/types/scrollbar-theme.d.ts +0 -47
- package/lib/utils/get-shape-min-size.d.ts +0 -8
- /package/lib/components/{list-item → ng-list-item}/base/index.d.ts +0 -0
- /package/lib/components/{list-item → ng-list-item}/const/index.d.ts +0 -0
- /package/lib/components/{list-item → ng-list-item}/interfaces/index.d.ts +0 -0
- /package/lib/components/{list-item → ng-list-item}/ng-virtual-list-item.module.d.ts +0 -0
- /package/lib/components/{list-item → ng-list-item}/utils/create-display-id.d.ts +0 -0
- /package/lib/components/{list-item → ng-list-item}/utils/get-element-by-index.d.ts +0 -0
- /package/lib/components/{list-item → ng-list-item}/utils/index.d.ts +0 -0
- /package/lib/components/{prerender-container → ng-prerender-container}/core/index.d.ts +0 -0
- /package/lib/components/{prerender-container → ng-prerender-container}/events/index.d.ts +0 -0
- /package/lib/components/{prerender-container → ng-prerender-container}/interfaces/index.d.ts +0 -0
- /package/lib/components/{prerender-container → ng-prerender-container}/types/index.d.ts +0 -0
- /package/lib/components/{scroller → ng-scroller}/const/index.d.ts +0 -0
- /package/lib/components/{scroller → ng-scroller}/enums/index.d.ts +0 -0
- /package/lib/components/{scroller → ng-scroller}/enums/scroller-direction.d.ts +0 -0
- /package/lib/components/{scroller → ng-scroller}/enums/scroller-directions.d.ts +0 -0
- /package/lib/components/{scroller → ng-scroller}/ng-scroller.module.d.ts +0 -0
- /package/lib/components/{scroller → ng-scroller}/utils/index.d.ts +0 -0
package/README.md
CHANGED
|
@@ -16,9 +16,12 @@ Works correctly in all browsers and platforms.
|
|
|
16
16
|

|
|
17
17
|

|
|
18
18
|
|
|
19
|
-
[
|
|
19
|
+
[Chat Demo](https://chat-demo.eugene-grebennikov.pro/)
|
|
20
20
|
[(Code)](https://github.com/DjonnyX/ng-virtual-list-chat-demo)
|
|
21
21
|
|
|
22
|
+
[News Feed Demo](https://news-feed-demo.eugene-grebennikov.pro/)
|
|
23
|
+
[(Code)](https://github.com/DjonnyX/ng-virtual-list-news-feed-demo)
|
|
24
|
+
|
|
22
25
|
[Live Examples (Storybook)](https://ng-virtual-list-examples.eugene-grebennikov.pro/)
|
|
23
26
|
|
|
24
27
|
[Examples](https://ng-virtual-list.eugene-grebennikov.pro/)
|
|
@@ -288,6 +291,7 @@ Template:
|
|
|
288
291
|
<span>{{data.name}}</span>
|
|
289
292
|
</div>
|
|
290
293
|
</ng-container>
|
|
294
|
+
</ng-template>
|
|
291
295
|
```
|
|
292
296
|
|
|
293
297
|
#### With snapping
|
|
@@ -478,94 +482,32 @@ export class AppComponent {
|
|
|
478
482
|
|
|
479
483
|
## 🖼️ Stylization
|
|
480
484
|
|
|
481
|
-
|
|
482
|
-
```ts
|
|
483
|
-
import { NgVirtualListComponent, GradientColor, RoundedCorner, ScrollBarTheme } from 'ng-virtual-list';
|
|
484
|
-
|
|
485
|
-
const X_LITE_BLUE_PLASMA_GRADIENT: GradientColor = ["rgba(133, 142, 255, 0)", "rgb(0, 133, 160)"],
|
|
486
|
-
ROUND_CORNER: RoundedCorner = [3, 3, 3, 3],
|
|
487
|
-
SCROLLBAR_GRADIENT: ScrollBarTheme = {
|
|
488
|
-
fill: "rgba(51, 0, 97, 1)",
|
|
489
|
-
hoverFill: "rgba(73, 6, 133, 1)",
|
|
490
|
-
pressedFill: "rgba(73, 6, 150, 1)",
|
|
491
|
-
strokeGradientColor: X_LITE_BLUE_PLASMA_GRADIENT,
|
|
492
|
-
strokeAnimationDuration: 1000,
|
|
493
|
-
thickness: 6,
|
|
494
|
-
roundCorner: ROUND_CORNER,
|
|
495
|
-
rippleColor: 'rgba(255,255,255,0.5)',
|
|
496
|
-
rippleEnabled: true,
|
|
497
|
-
};
|
|
498
|
-
|
|
499
|
-
@Component({
|
|
500
|
-
selector: 'app-root',
|
|
501
|
-
imports: [FormsModule, NgVirtualListComponent],
|
|
502
|
-
templateUrl: './app.component.html',
|
|
503
|
-
styleUrl: './app.component.scss'
|
|
504
|
-
})
|
|
505
|
-
export class AppComponent {
|
|
506
|
-
scrollbarTheme = SCROLLBAR_GRADIENT;
|
|
507
|
-
|
|
508
|
-
items = Array.from({ length: 100000 }, (_, i) => ({ id: i, name: `Item #${i}` }));
|
|
509
|
-
}
|
|
510
|
-
|
|
511
|
-
```
|
|
485
|
+
### Scrollbar stylization
|
|
512
486
|
|
|
513
487
|
```scss
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
margin-right: 2px;
|
|
518
|
-
overflow: initial;
|
|
519
|
-
}
|
|
520
|
-
|
|
521
|
-
&::part(scrollbar-thumb) {
|
|
522
|
-
border: 1px solid #8738c3;
|
|
523
|
-
border-radius: 4px;
|
|
524
|
-
}
|
|
488
|
+
.list::part(scrollbar-thumb__shape) {
|
|
489
|
+
background-color: rgba(51, 0, 97, 1);
|
|
490
|
+
border-radius: 3px;
|
|
525
491
|
}
|
|
526
492
|
```
|
|
527
493
|
|
|
528
494
|
```html
|
|
529
|
-
<ng-virtual-list class="list" [
|
|
495
|
+
<ng-virtual-list class="list" [scrollbarThickness]="12" [items]="items" [itemRenderer]="itemRenderer"></ng-virtual-list>
|
|
530
496
|
|
|
531
|
-
<ng-template #
|
|
532
|
-
<
|
|
533
|
-
<span>{{data.name}}</span>
|
|
534
|
-
</div>
|
|
497
|
+
<ng-template #itemRenderer let-data="data" let-config="config">
|
|
498
|
+
<span>{{data.name}}</span>
|
|
535
499
|
</ng-template>
|
|
536
500
|
```
|
|
537
501
|
|
|
502
|
+
### Scrollbar castomization
|
|
503
|
+
|
|
504
|
+
[Examples](https://github.com/DjonnyX/ng-virtual-list/blob/16.x/src/app/app.component.html)
|
|
505
|
+
[CustomScrollbarComponent](https://github.com/DjonnyX/ng-virtual-list/blob/16.x/src/app/components/custom-scrollbar/custom-scrollbar.component.ts)
|
|
506
|
+
|
|
538
507
|
List items are encapsulated in shadowDOM, so to override default styles you need to use ::part access
|
|
539
508
|
|
|
540
509
|
- Customize a scroll area of list
|
|
541
510
|
```css
|
|
542
|
-
.list::part(scroller) {
|
|
543
|
-
scroll-behavior: auto;
|
|
544
|
-
|
|
545
|
-
/* custom scrollbar */
|
|
546
|
-
&::-webkit-scrollbar {
|
|
547
|
-
width: 16px;
|
|
548
|
-
height: 16px;
|
|
549
|
-
}
|
|
550
|
-
|
|
551
|
-
&::-webkit-scrollbar-track {
|
|
552
|
-
background-color: #ffffff;
|
|
553
|
-
}
|
|
554
|
-
|
|
555
|
-
&::-webkit-scrollbar-thumb {
|
|
556
|
-
background-color: #d6dee1;
|
|
557
|
-
border-radius: 20px;
|
|
558
|
-
border: 6px solid transparent;
|
|
559
|
-
background-clip: content-box;
|
|
560
|
-
min-width: 60px;
|
|
561
|
-
min-height: 60px;
|
|
562
|
-
}
|
|
563
|
-
|
|
564
|
-
&::-webkit-scrollbar-thumb:hover {
|
|
565
|
-
background-color: #a8bbbf;
|
|
566
|
-
}
|
|
567
|
-
}
|
|
568
|
-
|
|
569
511
|
.list {
|
|
570
512
|
border-radius: 3px;
|
|
571
513
|
box-shadow: 1px 2px 8px 4px rgba(0, 0, 0, 0.075);
|
|
@@ -597,7 +539,7 @@ List items are encapsulated in shadowDOM, so to override default styles you need
|
|
|
597
539
|
Selecting even elements:
|
|
598
540
|
|
|
599
541
|
```html
|
|
600
|
-
<ng-virtual-list class="list" direction="horizontal" [items]="horizontalItems" [bufferSize]="1"
|
|
542
|
+
<ng-virtual-list class="list" direction="horizontal" [items]="horizontalItems" [bufferSize]="1" [maxBufferSize]="5"
|
|
601
543
|
[itemRenderer]="horizontalItemRenderer" [itemSize]="54"></ng-virtual-list>
|
|
602
544
|
|
|
603
545
|
<ng-template #horizontalItemRenderer let-data="data" let-config="config">
|
|
@@ -647,7 +589,6 @@ Inputs
|
|
|
647
589
|
| snap | boolean? = false | Determines whether elements will snap. Default value is "false". |
|
|
648
590
|
| selectedIds | Array<[Id](https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/types/id.ts)> \| [Id](https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/types/id.ts) \| null | Sets the selected items. |
|
|
649
591
|
| 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. |
|
|
650
|
-
| scrollbarTheme | [ScrollBarTheme?](https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/types/scrollbar-theme.ts) | Scrollbar theme. |
|
|
651
592
|
| clickDistance | number? = 40 | The maximum scroll distance at which a click event is triggered. |
|
|
652
593
|
| waitForPreparation | boolean? = true | If true, it will wait until the list items are fully prepared before displaying them.. The default value is `true`. |
|
|
653
594
|
| scrollStartOffset | number? = 0 | Sets the scroll start offset value; Default value is "0". |
|
|
@@ -656,9 +597,12 @@ Inputs
|
|
|
656
597
|
| 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. |
|
|
657
598
|
| 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. |
|
|
658
599
|
| snapToEndTransitionInstantOffset | number? = 0 | Sets the offset value; if the scroll area value is exceeded, the scroll animation will be disabled. Default value is "0". |
|
|
659
|
-
| scrollbarMinSize | number? = 80 | Minimum scrollbar size. |
|
|
660
600
|
| scrollbarEnabled | boolean? = true | Determines whether the scrollbar is shown or not. The default value is "true". |
|
|
661
601
|
| scrollbarInteractive | boolean? = true | Determines whether scrolling using the scrollbar will be possible. The default value is "true". |
|
|
602
|
+
| scrollbarMinSize | number? = 80 | Minimum scrollbar size. |
|
|
603
|
+
| scrollbarThickness | number? = 6 | Scrollbar thickness. |
|
|
604
|
+
| scrollbarThumbRenderer | TemplateRef<any> \| null = null | Scrollbar customization template. |
|
|
605
|
+
| scrollbarThumbParams | {[propName: string]: any;} \| null | Additional options for the scrollbar. |
|
|
662
606
|
| scrollBehavior | ScrollBehavior? = 'smooth' | Defines the scrolling behavior for any element on the page. The default value is "smooth". |
|
|
663
607
|
| trackBy | string? = 'id' | The name of the property by which tracking is performed. |
|
|
664
608
|
|
|
@@ -695,7 +639,7 @@ Methods
|
|
|
695
639
|
### Template API
|
|
696
640
|
|
|
697
641
|
```html
|
|
698
|
-
<ng-template #itemRenderer let-data="data" let-config="config" let-measures="measures">
|
|
642
|
+
<ng-template #itemRenderer let-data="data" let-config="config" let-measures="measures" let-api="api">
|
|
699
643
|
<!-- content -->
|
|
700
644
|
</ng-template>
|
|
701
645
|
```
|
|
@@ -704,6 +648,7 @@ Properties
|
|
|
704
648
|
|
|
705
649
|
| Property | Type | Description |
|
|
706
650
|
|--|--|--|
|
|
651
|
+
| api | [NgVirtualListPublicService](https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/ng-virtual-list-public.service.ts) | List API Provider. |
|
|
707
652
|
| data | {\[id: [Id](https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/types/id.ts) \], [otherProps: string]: any;} | Collection item data. |
|
|
708
653
|
| config | [IDisplayObjectConfig](https://github.com/DjonnyX/ng-virtual-list/blob/16.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. |
|
|
709
654
|
| measures | [IDisplayObjectMeasures](https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/models/display-object-measures.model.ts) \| null | Display object metrics. |
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { ChangeDetectorRef, ElementRef, inject } 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, DEFAULT_TEMPLATE_CONTEXT, ID, ITEM_ID, POSITION, POSITION_ZERO, TRANSLATE_3D_HIDDEN, } from '../const';
|
|
4
|
+
import { TextDirections } from '../../../enums';
|
|
5
|
+
import { NgVirtualListPublicService } from '../../../ng-virtual-list-public.service';
|
|
6
|
+
import { BehaviorSubject, combineLatest, takeUntil, tap } from 'rxjs';
|
|
7
|
+
import { DisposableComponent } from '../../../utils/disposable-component';
|
|
8
|
+
/**
|
|
9
|
+
* BaseVirtualListItemComponent
|
|
10
|
+
* @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/components/list-item/base/base-virtual-list-item-component.ts
|
|
11
|
+
* @author Evgenii Alexandrovich Grebennikov
|
|
12
|
+
* @email djonnyx@gmail.com
|
|
13
|
+
*/
|
|
14
|
+
export class BaseVirtualListItemComponent extends DisposableComponent {
|
|
15
|
+
_apiService = inject(NgVirtualListPublicService);
|
|
16
|
+
_cdr = inject(ChangeDetectorRef);
|
|
17
|
+
_id;
|
|
18
|
+
get id() {
|
|
19
|
+
return this._id;
|
|
20
|
+
}
|
|
21
|
+
_listId;
|
|
22
|
+
get listId() {
|
|
23
|
+
return this._listId;
|
|
24
|
+
}
|
|
25
|
+
_displayId;
|
|
26
|
+
get displayId() {
|
|
27
|
+
return this._displayId;
|
|
28
|
+
}
|
|
29
|
+
_isSelected = false;
|
|
30
|
+
_isCollapsed = false;
|
|
31
|
+
_$config = new BehaviorSubject({});
|
|
32
|
+
$config = this._$config.asObservable();
|
|
33
|
+
_$measures = new BehaviorSubject(null);
|
|
34
|
+
$measures = this._$measures.asObservable();
|
|
35
|
+
_$focused = new BehaviorSubject(false);
|
|
36
|
+
$focused = this._$focused.asObservable();
|
|
37
|
+
_$part = new BehaviorSubject(PART_DEFAULT_ITEM);
|
|
38
|
+
$part = this._$part.asObservable();
|
|
39
|
+
_data = null;
|
|
40
|
+
get data() { return this._data; }
|
|
41
|
+
_$data = new BehaviorSubject(this._data);
|
|
42
|
+
$data = this._$data.asObservable();
|
|
43
|
+
set item(v) {
|
|
44
|
+
if (this._data === v || this._data?.id === -1 || !v) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
this._data = v;
|
|
48
|
+
this.updatePartStr(v, this._isSelected, this._isCollapsed);
|
|
49
|
+
this.updateConfig(v);
|
|
50
|
+
this.updateMeasures(v);
|
|
51
|
+
this.update();
|
|
52
|
+
this._$data.next(v);
|
|
53
|
+
}
|
|
54
|
+
_$classes = new BehaviorSubject({});
|
|
55
|
+
$classes = this._$classes.asObservable();
|
|
56
|
+
_$index = new BehaviorSubject(-1);
|
|
57
|
+
$index = this._$index.asObservable();
|
|
58
|
+
_$templateContext = new BehaviorSubject(DEFAULT_TEMPLATE_CONTEXT);
|
|
59
|
+
$templateContext = this._$templateContext.asObservable();
|
|
60
|
+
regular = false;
|
|
61
|
+
_scrollBarSize = 0;
|
|
62
|
+
_langTextDir = TextDirections.LTR;
|
|
63
|
+
_regularLength = SIZE_100_PERSENT;
|
|
64
|
+
set regularLength(v) {
|
|
65
|
+
if (this._regularLength === v) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
this._regularLength = v;
|
|
69
|
+
this.update();
|
|
70
|
+
}
|
|
71
|
+
get item() {
|
|
72
|
+
return this._data;
|
|
73
|
+
}
|
|
74
|
+
get itemId() {
|
|
75
|
+
return this._data?.id;
|
|
76
|
+
}
|
|
77
|
+
itemRenderer;
|
|
78
|
+
set renderer(v) {
|
|
79
|
+
if (this.itemRenderer === v) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
this.itemRenderer = v;
|
|
83
|
+
this._cdr.markForCheck();
|
|
84
|
+
}
|
|
85
|
+
_elementRef = inject(ElementRef);
|
|
86
|
+
get element() {
|
|
87
|
+
return this._elementRef.nativeElement;
|
|
88
|
+
}
|
|
89
|
+
constructor() {
|
|
90
|
+
super();
|
|
91
|
+
const $data = this.$data, $config = this.$config, $measures = this.$measures, $focused = this.$focused;
|
|
92
|
+
combineLatest([$data, $focused]).pipe(takeUntil(this._$unsubscribe), tap(([data, focused]) => {
|
|
93
|
+
this._$classes.next({
|
|
94
|
+
[CLASS_NAME_SNAPPED]: data?.config?.snapped ?? false, [CLASS_NAME_SNAPPED_OUT]: data?.config?.snappedOut ?? false,
|
|
95
|
+
[CLASS_NAME_FOCUS]: focused,
|
|
96
|
+
});
|
|
97
|
+
})).subscribe();
|
|
98
|
+
$config.pipe(takeUntil(this._$unsubscribe), tap(config => {
|
|
99
|
+
this._$index.next(config?.tabIndex ?? -1);
|
|
100
|
+
})).subscribe();
|
|
101
|
+
combineLatest([$data, $config, $measures]).pipe(takeUntil(this._$unsubscribe), tap(([data, config, measures]) => {
|
|
102
|
+
this._$templateContext.next({
|
|
103
|
+
data: data?.data, prevData: data?.previouseData, nextData: data?.nextData, measures,
|
|
104
|
+
config, reseted: false, index: data?.index ?? -1, api: this._apiService,
|
|
105
|
+
});
|
|
106
|
+
})).subscribe();
|
|
107
|
+
}
|
|
108
|
+
updateMeasures(v) {
|
|
109
|
+
this._$measures.next(v?.measures ? { ...v.measures } : null);
|
|
110
|
+
}
|
|
111
|
+
updateConfig(v) {
|
|
112
|
+
this._$config.next({
|
|
113
|
+
...v?.config || {}, selected: this._isSelected, collapsed: this._isCollapsed, focused: this._$focused.getValue(),
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
update() {
|
|
117
|
+
const data = this._data, regular = this.regular, length = this._regularLength, el = this._elementRef.nativeElement;
|
|
118
|
+
if (data) {
|
|
119
|
+
el.setAttribute(ITEM_ID, `${data.id}`);
|
|
120
|
+
const styles = el.style;
|
|
121
|
+
styles.zIndex = data.config.zIndex;
|
|
122
|
+
styles.position = POSITION_ABSOLUTE;
|
|
123
|
+
if (data.config.isStub === true) {
|
|
124
|
+
el.style.visibility = VISIBILITY_HIDDEN;
|
|
125
|
+
}
|
|
126
|
+
if (regular) {
|
|
127
|
+
el.setAttribute(POSITION, POSITION_ZERO);
|
|
128
|
+
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})`;
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
el.setAttribute(POSITION, `${data.config.isVertical ? data.measures.y : data.measures.x}`);
|
|
132
|
+
styles.transform = `${TRANSLATE_3D}(${data.config.isVertical ? 0 : data.measures.x}${PX}, ${data.config.isVertical ? data.measures.y : 0}${PX}, ${POSITION_ZERO})`;
|
|
133
|
+
}
|
|
134
|
+
styles.height = data.config.isVertical ? data.config.dynamic ? SIZE_AUTO : `${data.measures.height}${PX}` : regular ? length : SIZE_100_PERSENT;
|
|
135
|
+
styles.width = data.config.isVertical ? regular ? length : SIZE_100_PERSENT : data.config.dynamic ? SIZE_AUTO : `${data.measures.width}${PX}`;
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
el.removeAttribute(ID);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
updatePartStr(v, isSelected, isCollapsed) {
|
|
142
|
+
let odd = false;
|
|
143
|
+
if (v?.index !== undefined) {
|
|
144
|
+
odd = v.index % 2 === 0;
|
|
145
|
+
}
|
|
146
|
+
let part = PART_DEFAULT_ITEM;
|
|
147
|
+
part += odd ? PART_ITEM_ODD : PART_ITEM_EVEN;
|
|
148
|
+
if (v ? v.config.snapped : false) {
|
|
149
|
+
part += PART_ITEM_SNAPPED;
|
|
150
|
+
}
|
|
151
|
+
if (isSelected) {
|
|
152
|
+
part += PART_ITEM_SELECTED;
|
|
153
|
+
}
|
|
154
|
+
if (isCollapsed) {
|
|
155
|
+
part += PART_ITEM_COLLAPSED;
|
|
156
|
+
}
|
|
157
|
+
if (v ? v.config.new : false) {
|
|
158
|
+
part += PART_ITEM_NEW;
|
|
159
|
+
}
|
|
160
|
+
if (this._$focused.getValue()) {
|
|
161
|
+
part += PART_ITEM_FOCUSED;
|
|
162
|
+
}
|
|
163
|
+
this._$part.next(part);
|
|
164
|
+
}
|
|
165
|
+
getBounds() {
|
|
166
|
+
const el = this._elementRef.nativeElement, { width, height } = el.getBoundingClientRect();
|
|
167
|
+
return { width: width > 0 ? width : 1, height: height > 0 ? height : 1, };
|
|
168
|
+
}
|
|
169
|
+
show() {
|
|
170
|
+
const el = this._elementRef.nativeElement, styles = el.style;
|
|
171
|
+
styles.zIndex = this._data?.config?.zIndex ?? DEFAULT_ZINDEX;
|
|
172
|
+
if (this.regular) {
|
|
173
|
+
if (styles.display === DISPLAY_BLOCK) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
styles.display = DISPLAY_BLOCK;
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
const isStub = this._data?.config?.isStub ?? false;
|
|
180
|
+
if (!isStub) {
|
|
181
|
+
if (styles.visibility === VISIBILITY_VISIBLE) {
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
styles.visibility = VISIBILITY_VISIBLE;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
hide() {
|
|
189
|
+
const el = this._elementRef.nativeElement, styles = el.style;
|
|
190
|
+
styles.position = POSITION_ABSOLUTE;
|
|
191
|
+
styles.transform = TRANSLATE_3D_HIDDEN;
|
|
192
|
+
styles.zIndex = HIDDEN_ZINDEX;
|
|
193
|
+
if (this.regular) {
|
|
194
|
+
if (styles.display === DISPLAY_NONE) {
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
styles.display = DISPLAY_NONE;
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
if (styles.visibility === VISIBILITY_HIDDEN) {
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
styles.visibility = VISIBILITY_HIDDEN;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS12aXJ0dWFsLWxpc3QtaXRlbS1jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL25nLWxpc3QtaXRlbS9iYXNlL2Jhc2UtdmlydHVhbC1saXN0LWl0ZW0tY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBSW5GLE9BQU8sRUFDTCxjQUFjLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUNsSCxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLEVBQUUsRUFBRSxnQkFBZ0IsRUFDL0gsU0FBUyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsR0FDL0QsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQ0wsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsd0JBQXdCLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixHQUNsSixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQWlCLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9ELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFMUU7Ozs7O0dBS0c7QUFDSCxNQUFNLE9B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QUFDLE9BQU8sR0FBRyxhQUFhLENBQUM7U0FDaEM7YUFBTTtZQUNMLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxLQUFLLENBQUM7WUFDbkQsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDWCxJQUFJLE1BQU0sQ0FBQyxVQUFVLEtBQUssa0JBQWtCLEVBQUU7b0JBQzVDLE9BQU87aUJBQ1I7Z0JBQ0QsTUFBTSxDQUFDLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQzthQUN4QztTQUNGO0lBQ0gsQ0FBQztJQUVELElBQUk7UUFDRixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFDdkMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFDcEIsTUFBTSxDQUFDLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQztRQUNwQyxNQUFNLENBQUMsU0FBUyxHQUFHLG1CQUFtQixDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDO1FBQzlCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssWUFBWSxFQUFFO2dCQUNuQyxPQUFPO2FBQ1I7WUFFRCxNQUFNLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztTQUMvQjthQUFNO1lBQ0wsSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLGlCQUFpQixFQUFFO2dCQUMzQyxPQUFPO2FBQ1I7WUFFRCxNQUFNLENBQUMsVUFBVSxHQUFHLGlCQUFpQixDQUFDO1NBQ3ZDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIEVsZW1lbnRSZWYsIGluamVjdCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSVNpemUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgSVJlbmRlclZpcnR1YWxMaXN0SXRlbSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9yZW5kZXItaXRlbS5tb2RlbCc7XHJcbmltcG9ydCB7IElEaXNwbGF5T2JqZWN0Q29uZmlnLCBJRGlzcGxheU9iamVjdE1lYXN1cmVzIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHtcclxuICBERUZBVUxUX1pJTkRFWCwgRElTUExBWV9CTE9DSywgRElTUExBWV9OT05FLCBISURERU5fWklOREVYLCBQQVJUX0RFRkFVTFRfSVRFTSwgUEFSVF9JVEVNX0NPTExBUFNFRCwgUEFSVF9JVEVNX0VWRU4sXHJcbiAgUEFSVF9JVEVNX0ZPQ1VTRUQsIFBBUlRfSVRFTV9ORVcsIFBBUlRfSVRFTV9PREQsIFBBUlRfSVRFTV9TRUxFQ1RFRCwgUEFSVF9JVEVNX1NOQVBQRUQsIFBPU0lUSU9OX0FCU09MVVRFLCBQWCwgU0laRV8xMDBfUEVSU0VOVCxcclxuICBTSVpFX0FVVE8sIFRSQU5TTEFURV8zRCwgVklTSUJJTElUWV9ISURERU4sIFZJU0lCSUxJVFlfVklTSUJMRSxcclxufSBmcm9tICcuLi8uLi8uLi9jb25zdCc7XHJcbmltcG9ydCB7IElUZW1wbGF0ZUNvbnRleHQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHtcclxuICBDTEFTU19OQU1FX0ZPQ1VTLCBDTEFTU19OQU1FX1NOQVBQRUQsIENMQVNTX05BTUVfU05BUFBFRF9PVVQsIERFRkFVTFRfVEVNUExBVEVfQ09OVEVYVCwgSUQsIElURU1fSUQsIFBPU0lUSU9OLCBQT1NJVElPTl9aRVJPLCBUUkFOU0xBVEVfM0RfSElEREVOLFxyXG59IGZyb20gJy4uL2NvbnN0JztcclxuaW1wb3J0IHsgVGV4dERpcmVjdGlvbiwgVGV4dERpcmVjdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IE5nVmlydHVhbExpc3RQdWJsaWNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vbmctdmlydHVhbC1saXN0LXB1YmxpYy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBEaXNwb3NhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZGlzcG9zYWJsZS1jb21wb25lbnQnO1xyXG5cclxuLyoqXHJcbiAqIEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnRcclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTYueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL2xpc3QtaXRlbS9iYXNlL2Jhc2UtdmlydHVhbC1saXN0LWl0ZW0tY29tcG9uZW50LnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBBbGV4YW5kcm92aWNoIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQgZXh0ZW5kcyBEaXNwb3NhYmxlQ29tcG9uZW50IHtcclxuICBwcml2YXRlIF9hcGlTZXJ2aWNlID0gaW5qZWN0KE5nVmlydHVhbExpc3RQdWJsaWNTZXJ2aWNlKTtcclxuXHJcbiAgcHJvdGVjdGVkIF9jZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG5cclxuICBwcm90ZWN0ZWQgX2lkITogbnVtYmVyO1xyXG4gIGdldCBpZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9pZDtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBfbGlzdElkITogbnVtYmVyO1xyXG4gIGdldCBsaXN0SWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGlzdElkO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF9kaXNwbGF5SWQhOiBzdHJpbmc7XHJcbiAgZ2V0IGRpc3BsYXlJZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9kaXNwbGF5SWQ7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgX2lzU2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJvdGVjdGVkIF9pc0NvbGxhcHNlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcm90ZWN0ZWQgXyRjb25maWcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElEaXNwbGF5T2JqZWN0Q29uZmlnPih7fSBhcyBJRGlzcGxheU9iamVjdENvbmZpZyk7XHJcbiAgJGNvbmZpZyA9IHRoaXMuXyRjb25maWcuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByb3RlY3RlZCBfJG1lYXN1cmVzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJRGlzcGxheU9iamVjdE1lYXN1cmVzIHwgbnVsbD4obnVsbCk7XHJcbiAgJG1lYXN1cmVzID0gdGhpcy5fJG1lYXN1cmVzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcm90ZWN0ZWQgXyRmb2N1c2VkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgJGZvY3VzZWQgPSB0aGlzLl8kZm9jdXNlZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJvdGVjdGVkIF8kcGFydCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihQQVJUX0RFRkFVTFRfSVRFTSk7XHJcbiAgJHBhcnQgPSB0aGlzLl8kcGFydC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJvdGVjdGVkIF9kYXRhOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtIHwgbnVsbCA9IG51bGw7XHJcbiAgZ2V0IGRhdGEoKSB7IHJldHVybiB0aGlzLl9kYXRhOyB9XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF8kZGF0YSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVJlbmRlclZpcnR1YWxMaXN0SXRlbSB8IG51bGw+KHRoaXMuX2RhdGEpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkZGF0YSA9IHRoaXMuXyRkYXRhLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBzZXQgaXRlbSh2OiBJUmVuZGVyVmlydHVhbExpc3RJdGVtIHwgbnVsbCkge1xyXG4gICAgaWYgKHRoaXMuX2RhdGEgPT09IHYgfHwgdGhpcy5fZGF0YT8uaWQgPT09IC0xIHx8ICF2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9kYXRhID0gdjtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVBhcnRTdHIodiwgdGhpcy5faXNTZWxlY3RlZCwgdGhpcy5faXNDb2xsYXBzZWQpO1xyXG5cclxuICAgIHRoaXMudXBkYXRlQ29uZmlnKHYpO1xyXG5cclxuICAgIHRoaXMudXBkYXRlTWVhc3VyZXModik7XHJcblxyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB0aGlzLl8kZGF0YS5uZXh0KHYpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfJGNsYXNzZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgW2NOYW1lOiBzdHJpbmddOiBib29sZWFuOyB9Pih7fSk7XHJcbiAgJGNsYXNzZXMgPSB0aGlzLl8kY2xhc3Nlcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGluZGV4ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KC0xKTtcclxuICAkaW5kZXggPSB0aGlzLl8kaW5kZXguYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyR0ZW1wbGF0ZUNvbnRleHQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElUZW1wbGF0ZUNvbnRleHQ+KERFRkFVTFRfVEVNUExBVEVfQ09OVEVYVCk7XHJcbiAgJHRlbXBsYXRlQ29udGV4dCA9IHRoaXMuXyR0ZW1wbGF0ZUNvbnRleHQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHB1YmxpYyByZWd1bGFyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByb3RlY3RlZCBfc2Nyb2xsQmFyU2l6ZTogbnVtYmVyID0gMDtcclxuXHJcbiAgcHJvdGVjdGVkIF9sYW5nVGV4dERpcjogVGV4dERpcmVjdGlvbiA9IFRleHREaXJlY3Rpb25zLkxUUjtcclxuXHJcbiAgcHJvdGVjdGVkIF9yZWd1bGFyTGVuZ3RoOiBzdHJpbmcgPSBTSVpFXzEwMF9QRVJTRU5UO1xyXG4gIHNldCByZWd1bGFyTGVuZ3RoKHY6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuX3JlZ3VsYXJMZW5ndGggPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3JlZ3VsYXJMZW5ndGggPSB2O1xyXG5cclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXRlbSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRhO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGl0ZW1JZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRhPy5pZDtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBpdGVtUmVuZGVyZXI6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIHNldCByZW5kZXJlcih2OiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodGhpcy5pdGVtUmVuZGVyZXIgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXRlbVJlbmRlcmVyID0gdjtcclxuXHJcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgX2VsZW1lbnRSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xyXG4gIGdldCBlbGVtZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuXHJcbiAgICBjb25zdCAkZGF0YSA9IHRoaXMuJGRhdGEsXHJcbiAgICAgICRjb25maWcgPSB0aGlzLiRjb25maWcsXHJcbiAgICAgICRtZWFzdXJlcyA9IHRoaXMuJG1lYXN1cmVzLFxyXG4gICAgICAkZm9jdXNlZCA9IHRoaXMuJGZvY3VzZWQ7XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbJGRhdGEsICRmb2N1c2VkXSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCgoW2RhdGEsIGZvY3VzZWRdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGNsYXNzZXMubmV4dCh7XHJcbiAgICAgICAgICBbQ0xBU1NfTkFNRV9TTkFQUEVEXTogZGF0YT8uY29uZmlnPy5zbmFwcGVkID8/IGZhbHNlLCBbQ0xBU1NfTkFNRV9TTkFQUEVEX09VVF06IGRhdGE/LmNvbmZpZz8uc25hcHBlZE91dCA/PyBmYWxzZSxcclxuICAgICAgICAgIFtDTEFTU19OQU1FX0ZPQ1VTXTogZm9jdXNlZCxcclxuICAgICAgICB9KTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRjb25maWcucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcChjb25maWcgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRpbmRleC5uZXh0KGNvbmZpZz8udGFiSW5kZXggPz8gLTEpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbJGRhdGEsICRjb25maWcsICRtZWFzdXJlc10pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAoKFtkYXRhLCBjb25maWcsIG1lYXN1cmVzXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuXyR0ZW1wbGF0ZUNvbnRleHQubmV4dCh7XHJcbiAgICAgICAgICBkYXRhOiBkYXRhPy5kYXRhLCBwcmV2RGF0YTogZGF0YT8ucHJldmlvdXNlRGF0YSwgbmV4dERhdGE6IGRhdGE/Lm5leHREYXRhLCBtZWFzdXJlcyxcclxuICAgICAgICAgIGNvbmZpZywgcmVzZXRlZDogZmFsc2UsIGluZGV4OiBkYXRhPy5pbmRleCA/PyAtIDEsIGFwaTogdGhpcy5fYXBpU2VydmljZSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHVwZGF0ZU1lYXN1cmVzKHY6IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW08YW55PiB8IG51bGwpIHtcclxuICAgIHRoaXMuXyRtZWFzdXJlcy5uZXh0KHY/Lm1lYXN1cmVzID8geyAuLi52Lm1lYXN1cmVzIH0gOiBudWxsKVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHVwZGF0ZUNvbmZpZyh2OiBJUmVuZGVyVmlydHVhbExpc3RJdGVtPGFueT4gfCBudWxsKSB7XHJcbiAgICB0aGlzLl8kY29uZmlnLm5leHQoe1xyXG4gICAgICAuLi52Py5jb25maWcgfHwge30gYXMgSURpc3BsYXlPYmplY3RDb25maWcsIHNlbGVjdGVkOiB0aGlzLl9pc1NlbGVjdGVkLCBjb2xsYXBzZWQ6IHRoaXMuX2lzQ29sbGFwc2VkLCBmb2N1c2VkOiB0aGlzLl8kZm9jdXNlZC5nZXRWYWx1ZSgpLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgdXBkYXRlKCkge1xyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuX2RhdGEsIHJlZ3VsYXIgPSB0aGlzLnJlZ3VsYXIsIGxlbmd0aCA9IHRoaXMuX3JlZ3VsYXJMZW5ndGgsIGVsID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgaWYgKGRhdGEpIHtcclxuICAgICAgZWwuc2V0QXR0cmlidXRlKElURU1fSUQsIGAke2RhdGEuaWR9YCk7XHJcbiAgICAgIGNvbnN0IHN0eWxlcyA9IGVsLnN0eWxlO1xyXG4gICAgICBzdHlsZXMuekluZGV4ID0gZGF0YS5jb25maWcuekluZGV4O1xyXG4gICAgICBzdHlsZXMucG9zaXRpb24gPSBQT1NJVElPTl9BQlNPTFVURTtcclxuICAgICAgaWYgKGRhdGEuY29uZmlnLmlzU3R1YiA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIGVsLnN0eWxlLnZpc2liaWxpdHkgPSBWSVNJQklMSVRZX0hJRERFTjtcclxuICAgICAgfVxyXG4gICAgICBpZiAocmVndWxhcikge1xyXG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZShQT1NJVElPTiwgUE9TSVRJT05fWkVSTyk7XHJcbiAgICAgICAgc3R5bGVzLnRyYW5zZm9ybSA9IGAke1RSQU5TTEFURV8zRH0oJHtkYXRhLmNvbmZpZy5pc1ZlcnRpY2FsID8gKHRoaXMuX2xhbmdUZXh0RGlyID09PSBUZXh0RGlyZWN0aW9ucy5SVEwgPyB0aGlzLl9zY3JvbGxCYXJTaXplIDogMCkgOiBkYXRhLm1lYXN1cmVzLmRlbHRhfSR7UFh9LCAke2RhdGEuY29uZmlnLmlzVmVydGljYWwgPyBkYXRhLm1lYXN1cmVzLmRlbHRhIDogMH0ke1BYfSwgJHtQT1NJVElPTl9aRVJPfSlgO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZShQT1NJVElPTiwgYCR7ZGF0YS5jb25maWcuaXNWZXJ0aWNhbCA/IGRhdGEubWVhc3VyZXMueSA6IGRhdGEubWVhc3VyZXMueH1gKTtcclxuICAgICAgICBzdHlsZXMudHJhbnNmb3JtID0gYCR7VFJBTlNMQVRFXzNEfSgke2RhdGEuY29uZmlnLmlzVmVydGljYWwgPyAwIDogZGF0YS5tZWFzdXJlcy54fSR7UFh9LCAke2RhdGEuY29uZmlnLmlzVmVydGljYWwgPyBkYXRhLm1lYXN1cmVzLnkgOiAwfSR7UFh9LCAke1BPU0lUSU9OX1pFUk99KWA7XHJcbiAgICAgIH1cclxuICAgICAgc3R5bGVzLmhlaWdodCA9IGRhdGEuY29uZmlnLmlzVmVydGljYWwgPyBkYXRhLmNvbmZpZy5keW5hbWljID8gU0laRV9BVVRPIDogYCR7ZGF0YS5tZWFzdXJlcy5oZWlnaHR9JHtQWH1gIDogcmVndWxhciA/IGxlbmd0aCA6IFNJWkVfMTAwX1BFUlNFTlQ7XHJcbiAgICAgIHN0eWxlcy53aWR0aCA9IGRhdGEuY29uZmlnLmlzVmVydGljYWwgPyByZWd1bGFyID8gbGVuZ3RoIDogU0laRV8xMDBfUEVSU0VOVCA6IGRhdGEuY29uZmlnLmR5bmFtaWMgPyBTSVpFX0FVVE8gOiBgJHtkYXRhLm1lYXN1cmVzLndpZHRofSR7UFh9YDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShJRCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgdXBkYXRlUGFydFN0cih2OiBJUmVuZGVyVmlydHVhbExpc3RJdGVtIHwgbnVsbCwgaXNTZWxlY3RlZDogYm9vbGVhbiwgaXNDb2xsYXBzZWQ6IGJvb2xlYW4pIHtcclxuICAgIGxldCBvZGQgPSBmYWxzZTtcclxuICAgIGlmICh2Py5pbmRleCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIG9kZCA9IHYuaW5kZXggJSAyID09PSAwO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBwYXJ0ID0gUEFSVF9ERUZBVUxUX0lURU07XHJcbiAgICBwYXJ0ICs9IG9kZCA/IFBBUlRfSVRFTV9PREQgOiBQQVJUX0lURU1fRVZFTjtcclxuICAgIGlmICh2ID8gdi5jb25maWcuc25hcHBlZCA6IGZhbHNlKSB7XHJcbiAgICAgIHBhcnQgKz0gUEFSVF9JVEVNX1NOQVBQRUQ7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNTZWxlY3RlZCkge1xyXG4gICAgICBwYXJ0ICs9IFBBUlRfSVRFTV9TRUxFQ1RFRDtcclxuICAgIH1cclxuICAgIGlmIChpc0NvbGxhcHNlZCkge1xyXG4gICAgICBwYXJ0ICs9IFBBUlRfSVRFTV9DT0xMQVBTRUQ7XHJcbiAgICB9XHJcbiAgICBpZiAodiA/IHYuY29uZmlnLm5ldyA6IGZhbHNlKSB7XHJcbiAgICAgIHBhcnQgKz0gUEFSVF9JVEVNX05FVztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl8kZm9jdXNlZC5nZXRWYWx1ZSgpKSB7XHJcbiAgICAgIHBhcnQgKz0gUEFSVF9JVEVNX0ZPQ1VTRUQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLl8kcGFydC5uZXh0KHBhcnQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Qm91bmRzKCk6IElTaXplIHtcclxuICAgIGNvbnN0IGVsOiBIVE1MRWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcclxuICAgICAgeyB3aWR0aCwgaGVpZ2h0IH0gPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIHJldHVybiB7IHdpZHRoOiB3aWR0aCA+IDAgPyB3aWR0aCA6IDEsIGhlaWdodDogaGVpZ2h0ID4gMCA/IGhlaWdodCA6IDEsIH07XHJcbiAgfVxyXG5cclxuICBzaG93KCkge1xyXG4gICAgY29uc3QgZWwgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQsXHJcbiAgICAgIHN0eWxlcyA9IGVsLnN0eWxlO1xyXG4gICAgc3R5bGVzLnpJbmRleCA9IHRoaXMuX2RhdGE/LmNvbmZpZz8uekluZGV4ID8/IERFRkFVTFRfWklOREVYO1xyXG4gICAgaWYgKHRoaXMucmVndWxhcikge1xyXG4gICAgICBpZiAoc3R5bGVzLmRpc3BsYXkgPT09IERJU1BMQVlfQkxPQ0spIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN0eWxlcy5kaXNwbGF5ID0gRElTUExBWV9CTE9DSztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGlzU3R1YiA9IHRoaXMuX2RhdGE/LmNvbmZpZz8uaXNTdHViID8/IGZhbHNlO1xyXG4gICAgICBpZiAoIWlzU3R1Yikge1xyXG4gICAgICAgIGlmIChzdHlsZXMudmlzaWJpbGl0eSA9PT0gVklTSUJJTElUWV9WSVNJQkxFKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN0eWxlcy52aXNpYmlsaXR5ID0gVklTSUJJTElUWV9WSVNJQkxFO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoaWRlKCkge1xyXG4gICAgY29uc3QgZWwgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgIHN0eWxlcyA9IGVsLnN0eWxlO1xyXG4gICAgc3R5bGVzLnBvc2l0aW9uID0gUE9TSVRJT05fQUJTT0xVVEU7XHJcbiAgICBzdHlsZXMudHJhbnNmb3JtID0gVFJBTlNMQVRFXzNEX0hJRERFTjtcclxuICAgIHN0eWxlcy56SW5kZXggPSBISURERU5fWklOREVYO1xyXG4gICAgaWYgKHRoaXMucmVndWxhcikge1xyXG4gICAgICBpZiAoc3R5bGVzLmRpc3BsYXkgPT09IERJU1BMQVlfTk9ORSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgc3R5bGVzLmRpc3BsYXkgPSBESVNQTEFZX05PTkU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoc3R5bGVzLnZpc2liaWxpdHkgPT09IFZJU0lCSUxJVFlfSElEREVOKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzdHlsZXMudmlzaWJpbGl0eSA9IFZJU0lCSUxJVFlfSElEREVOO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { BaseVirtualListItemComponent } from './base-virtual-list-item-component';
|
|
2
|
+
export { BaseVirtualListItemComponent, };
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL25nLWxpc3QtaXRlbS9iYXNlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRWxGLE9BQU8sRUFDSCw0QkFBNEIsR0FDL0IsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2Jhc2UtdmlydHVhbC1saXN0LWl0ZW0tY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCB7XHJcbiAgICBCYXNlVmlydHVhbExpc3RJdGVtQ29tcG9uZW50LFxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,30 @@
|
|
|
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
|
+
export const DEFAULT_TEMPLATE_CONTEXT = {
|
|
3
|
+
data: undefined,
|
|
4
|
+
prevData: undefined,
|
|
5
|
+
nextData: undefined,
|
|
6
|
+
measures: null,
|
|
7
|
+
config: {
|
|
8
|
+
focused: false,
|
|
9
|
+
selected: false,
|
|
10
|
+
collapsed: false,
|
|
11
|
+
new: false,
|
|
12
|
+
odd: false,
|
|
13
|
+
even: false,
|
|
14
|
+
collapsable: false,
|
|
15
|
+
sticky: 0,
|
|
16
|
+
selectable: false,
|
|
17
|
+
snap: false,
|
|
18
|
+
snapped: false,
|
|
19
|
+
snappedOut: false,
|
|
20
|
+
isVertical: false,
|
|
21
|
+
dynamic: false,
|
|
22
|
+
isSnappingMethodAdvanced: false,
|
|
23
|
+
tabIndex: 0,
|
|
24
|
+
zIndex: '0',
|
|
25
|
+
},
|
|
26
|
+
reseted: false,
|
|
27
|
+
index: -1,
|
|
28
|
+
api: null,
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL25nLWxpc3QtaXRlbS9jb25zdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxFQUNsQixtQkFBbUIsR0FBRyxnQ0FBZ0MsRUFDdEQsa0JBQWtCLEdBQUcsZUFBZSxFQUNwQyxRQUFRLEdBQUcsVUFBVSxFQUNyQixhQUFhLEdBQUcsR0FBRyxFQUNuQixPQUFPLEdBQUcsU0FBUyxFQUNuQixTQUFTLEdBQUcsR0FBRyxFQUNmLFlBQVksR0FBRyxXQUFXLEVBQzFCLFVBQVUsR0FBRyxTQUFTLEVBQ3RCLGFBQWEsR0FBRyxZQUFZLEVBQzVCLFlBQVksR0FBRyxXQUFXLEVBQzFCLGNBQWMsR0FBRyxTQUFTLEVBQzFCLGVBQWUsR0FBRyxVQUFVLEVBQzVCLGNBQWMsR0FBRyxTQUFTLEVBQzFCLGtCQUFrQixHQUFHLFNBQVMsRUFDOUIsc0JBQXNCLEdBQUcsYUFBYSxFQUN0QyxnQkFBZ0IsR0FBRyxPQUFPLENBQUM7QUFHM0IsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQXFCO0lBQ3RELElBQUksRUFBRSxTQUFTO0lBQ2YsUUFBUSxFQUFFLFNBQVM7SUFDbkIsUUFBUSxFQUFFLFNBQVM7SUFDbkIsUUFBUSxFQUFFLElBQUk7SUFDZCxNQUFNLEVBQUU7UUFDSixPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRSxLQUFLO1FBQ2YsU0FBUyxFQUFFLEtBQUs7UUFDaEIsR0FBRyxFQUFFLEtBQUs7UUFDVixHQUFHLEVBQUUsS0FBSztRQUNWLElBQUksRUFBRSxLQUFLO1FBQ1gsV0FBVyxFQUFFLEtBQUs7UUFDbEIsTUFBTSxFQUFFLENBQUM7UUFDVCxVQUFVLEVBQUUsS0FBSztRQUNqQixJQUFJLEVBQUUsS0FBSztRQUNYLE9BQU8sRUFBRSxLQUFLO1FBQ2QsVUFBVSxFQUFFLEtBQUs7UUFDakIsVUFBVSxFQUFFLEtBQUs7UUFDakIsT0FBTyxFQUFFLEtBQUs7UUFDZCx3QkFBd0IsRUFBRSxLQUFLO1FBQy9CLFFBQVEsRUFBRSxDQUFDO1FBQ1gsTUFBTSxFQUFFLEdBQUc7S0FDZDtJQUNELE9BQU8sRUFBRSxLQUFLO0lBQ2QsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNULEdBQUcsRUFBRSxJQUFJO0NBQ1osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElUZW1wbGF0ZUNvbnRleHQgfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xyXG5cclxuZXhwb3J0IGNvbnN0IElEID0gJ2lkJyxcclxuICAgIFRSQU5TTEFURV8zRF9ISURERU4gPSAndHJhbnNsYXRlM2QoLTEwMDBweCwtMTAwMHB4LDApJyxcclxuICAgIEFUVFJfQVJFQV9TRUxFQ1RFRCA9ICdhcmVhLXNlbGVjdGVkJyxcclxuICAgIFBPU0lUSU9OID0gJ3Bvc2l0aW9uJyxcclxuICAgIFBPU0lUSU9OX1pFUk8gPSAnMCcsXHJcbiAgICBJVEVNX0lEID0gJ2l0ZW0taWQnLFxyXG4gICAgS0VZX1NQQUNFID0gJyAnLFxyXG4gICAgS0VZX0FSUl9MRUZUID0gJ0Fycm93TGVmdCcsXHJcbiAgICBLRVlfQVJSX1VQID0gJ0Fycm93VXAnLFxyXG4gICAgS0VZX0FSUl9SSUdIVCA9ICdBcnJvd1JpZ2h0JyxcclxuICAgIEtFWV9BUlJfRE9XTiA9ICdBcnJvd0Rvd24nLFxyXG4gICAgRVZFTlRfRk9DVVNfSU4gPSAnZm9jdXNpbicsXHJcbiAgICBFVkVOVF9GT0NVU19PVVQgPSAnZm9jdXNvdXQnLFxyXG4gICAgRVZFTlRfS0VZX0RPV04gPSAna2V5ZG93bicsXHJcbiAgICBDTEFTU19OQU1FX1NOQVBQRUQgPSAnc25hcHBlZCcsXHJcbiAgICBDTEFTU19OQU1FX1NOQVBQRURfT1VUID0gJ3NuYXBwZWQtb3V0JyxcclxuICAgIENMQVNTX05BTUVfRk9DVVMgPSAnZm9jdXMnO1xyXG5cclxuXHJcbiAgICBleHBvcnQgY29uc3QgREVGQVVMVF9URU1QTEFURV9DT05URVhUOiBJVGVtcGxhdGVDb250ZXh0ID0ge1xyXG4gICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcclxuICAgICAgICBwcmV2RGF0YTogdW5kZWZpbmVkLFxyXG4gICAgICAgIG5leHREYXRhOiB1bmRlZmluZWQsXHJcbiAgICAgICAgbWVhc3VyZXM6IG51bGwsXHJcbiAgICAgICAgY29uZmlnOiB7XHJcbiAgICAgICAgICAgIGZvY3VzZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIGNvbGxhcHNlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIG5ldzogZmFsc2UsXHJcbiAgICAgICAgICAgIG9kZDogZmFsc2UsXHJcbiAgICAgICAgICAgIGV2ZW46IGZhbHNlLFxyXG4gICAgICAgICAgICBjb2xsYXBzYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIHN0aWNreTogMCxcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIHNuYXA6IGZhbHNlLFxyXG4gICAgICAgICAgICBzbmFwcGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgc25hcHBlZE91dDogZmFsc2UsXHJcbiAgICAgICAgICAgIGlzVmVydGljYWw6IGZhbHNlLFxyXG4gICAgICAgICAgICBkeW5hbWljOiBmYWxzZSxcclxuICAgICAgICAgICAgaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkOiBmYWxzZSxcclxuICAgICAgICAgICAgdGFiSW5kZXg6IDAsXHJcbiAgICAgICAgICAgIHpJbmRleDogJzAnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVzZXRlZDogZmFsc2UsXHJcbiAgICAgICAgaW5kZXg6IC0xLFxyXG4gICAgICAgIGFwaTogbnVsbCxcclxuICAgIH07XHJcbiAgICAiXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL25nLWxpc3QtaXRlbS9pbnRlcmZhY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJVGVtcGxhdGVDb250ZXh0IH0gZnJvbSAnLi90ZW1wbGF0ZS1jb250ZXh0JztcclxuXHJcbmV4cG9ydCB0eXBlIHtcclxuICAgIElUZW1wbGF0ZUNvbnRleHQsXHJcbn1cclxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL2NvbXBvbmVudHMvbmctbGlzdC1pdGVtL2ludGVyZmFjZXMvdGVtcGxhdGUtY29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSURpc3BsYXlPYmplY3RDb25maWcsIElEaXNwbGF5T2JqZWN0TWVhc3VyZXMgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzXCI7XHJcbmltcG9ydCB7IE5nVmlydHVhbExpc3RQdWJsaWNTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL25nLXZpcnR1YWwtbGlzdC1wdWJsaWMuc2VydmljZVwiO1xyXG5cclxuLyoqXHJcbiAqIEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnRcclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTYueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL2xpc3QtaXRlbS9pbnRlcmZhY2VzL3RlbXBsYXRlLWNvbnRleHQudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEFsZXhhbmRyb3ZpY2ggR3JlYmVubmlrb3ZcclxuICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElUZW1wbGF0ZUNvbnRleHQ8RCA9IGFueT4ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBBUEkgcHJvdmlkZXIuXHJcbiAgICAgKi9cclxuICAgIGFwaTogTmdWaXJ0dWFsTGlzdFB1YmxpY1NlcnZpY2UgfCBudWxsO1xyXG4gICAgLyoqXHJcbiAgICAgKiBMaXN0IGl0ZW0gZGF0YS5cclxuICAgICAqL1xyXG4gICAgZGF0YTogRDtcclxuICAgIC8qKlxyXG4gICAgICogRGF0YSBvZiB0aGUgcHJldmlvdXMgbGlzdCBpdGVtLlxyXG4gICAgICovXHJcbiAgICBwcmV2RGF0YTogRDtcclxuICAgIC8qKlxyXG4gICAgICogRGF0YSBvZiB0aGUgbmV4dCBsaXN0IGl0ZW0uXHJcbiAgICAgKi9cclxuICAgIG5leHREYXRhOiBEO1xyXG4gICAgLyoqXHJcbiAgICAgKiBMaXN0IGl0ZW0gbWVhc3VyZW1lbnQgZGF0YS5cclxuICAgICAqL1xyXG4gICAgbWVhc3VyZXM6IElEaXNwbGF5T2JqZWN0TWVhc3VyZXMgfCBudWxsO1xyXG4gICAgLyoqXHJcbiAgICAgKiBMaXN0IGl0ZW0gY29uZmlndXJhdGlvbi5cclxuICAgICAqL1xyXG4gICAgY29uZmlnOiBJRGlzcGxheU9iamVjdENvbmZpZztcclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIGEgcmVzZXQgc3RhdGUuXHJcbiAgICAgKi9cclxuICAgIHJlc2V0ZWQ6IGJvb2xlYW47XHJcbiAgICAvKipcclxuICAgICAqIExpc3QgaXRlbSBpbmRleC5cclxuICAgICAqL1xyXG4gICAgaW5kZXg6IG51bWJlcjtcclxufSJdfQ==
|