@annalib/anna-core 7.2.3 → 7.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/.browserslistrc +16 -0
  2. package/karma.conf.js +44 -0
  3. package/ng-package.json +14 -0
  4. package/package.json +19 -39
  5. package/src/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.html +22 -0
  6. package/src/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.scss +0 -0
  7. package/src/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.spec.ts +25 -0
  8. package/src/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.ts +16 -0
  9. package/src/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.html +33 -0
  10. package/src/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.scss +0 -0
  11. package/src/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.spec.ts +25 -0
  12. package/src/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.ts +28 -0
  13. package/src/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.html +20 -0
  14. package/src/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.scss +0 -0
  15. package/src/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.spec.ts +25 -0
  16. package/src/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.ts +16 -0
  17. package/src/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.html +3 -0
  18. package/src/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.scss +17 -0
  19. package/src/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.spec.ts +24 -0
  20. package/src/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.ts +20 -0
  21. package/src/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.html +23 -0
  22. package/src/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.scss +0 -0
  23. package/src/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.spec.ts +25 -0
  24. package/src/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.ts +16 -0
  25. package/src/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.html +15 -0
  26. package/src/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.scss +0 -0
  27. package/src/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.spec.ts +25 -0
  28. package/src/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.ts +19 -0
  29. package/src/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.html +14 -0
  30. package/src/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.scss +0 -0
  31. package/src/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.spec.ts +25 -0
  32. package/src/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.ts +16 -0
  33. package/src/lib/anna-core-shared-lib/constants/shared.constant.ts +35 -0
  34. package/src/lib/anna-core-shared-lib/directives/digits-only/digits-only.directive.ts +307 -0
  35. package/src/lib/anna-core-shared-lib/directives/show-ellipsis-text/show-ellipsis-text.directive.ts +19 -0
  36. package/src/lib/anna-core-shared-lib/models/anna-generic-data-type.model.ts +19 -0
  37. package/{lib/anna-core-shared-lib/models/anna-global-dropdown-config.model.d.ts → src/lib/anna-core-shared-lib/models/anna-global-dropdown-config.model.ts} +21 -9
  38. package/src/lib/anna-core-shared-lib/models/anna-manage-users.model.ts +6 -0
  39. package/{lib/anna-core-shared-lib/models/anna-non-editable-gt-models.d.ts → src/lib/anna-core-shared-lib/models/anna-non-editable-gt-models.ts} +28 -17
  40. package/src/lib/anna-core-shared-lib/models/anna-sort.model.ts +13 -0
  41. package/src/lib/anna-core-shared-lib/models/anna-tooltip.model.ts +44 -0
  42. package/src/lib/anna-core-shared-lib/pipes/annaConvertZeroOrNullOrUndefined.pipe.ts +20 -0
  43. package/src/lib/anna-core-shared-lib/pipes/annaFilterSearchedText.pipe.ts +43 -0
  44. package/src/lib/anna-core-shared-lib/pipes/annaReplaceChar.pipe.ts +19 -0
  45. package/src/lib/anna-core-shared-lib/pipes/annaTypeOfData.pipe.ts +12 -0
  46. package/src/lib/anna-core-shared-lib/services/anna-date-time-format.service.ts +219 -0
  47. package/src/lib/anna-core-shared-lib/services/anna-filter.service.ts +563 -0
  48. package/src/lib/anna-core-shared-lib/services/anna-generic-table.service.ts +136 -0
  49. package/src/lib/anna-core-shared-lib/services/anna-global-config.service.ts +170 -0
  50. package/src/lib/anna-core-shared-lib/services/anna-number-format.service.ts +43 -0
  51. package/src/lib/anna-core-shared-lib/services/anna-sort.service.ts +179 -0
  52. package/src/lib/anna-core.module.ts +112 -0
  53. package/src/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.html +46 -0
  54. package/src/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.scss +153 -0
  55. package/src/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.spec.ts +24 -0
  56. package/src/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.ts +106 -0
  57. package/src/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.html +129 -0
  58. package/src/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.scss +275 -0
  59. package/src/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.spec.ts +24 -0
  60. package/src/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.ts +414 -0
  61. package/src/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.html +1080 -0
  62. package/src/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.scss +668 -0
  63. package/src/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.spec.ts +25 -0
  64. package/src/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.ts +2186 -0
  65. package/src/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.html +10 -0
  66. package/src/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.scss +1 -0
  67. package/src/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.spec.ts +24 -0
  68. package/src/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.ts +69 -0
  69. package/src/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.html +13 -0
  70. package/src/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.scss +88 -0
  71. package/src/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.spec.ts +25 -0
  72. package/src/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.ts +460 -0
  73. package/src/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/anna-fixed-row-size-table-virtual-scroll-strategy.directive.ts +237 -0
  74. package/{lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/index.d.ts → src/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/index.ts} +0 -0
  75. package/src/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.ts +204 -0
  76. package/{lib/anna-generic-table-lib/directives/anna-virtual-table/index.d.ts → src/lib/anna-generic-table-lib/directives/anna-virtual-table/index.ts} +0 -0
  77. package/{public-api.d.ts → src/public-api.ts} +28 -0
  78. package/src/test.ts +27 -0
  79. package/tsconfig.lib.json +19 -0
  80. package/tsconfig.lib.prod.json +10 -0
  81. package/tsconfig.spec.json +17 -0
  82. package/annalib-anna-core.d.ts +0 -5
  83. package/esm2020/annalib-anna-core.mjs +0 -5
  84. package/esm2020/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.mjs +0 -15
  85. package/esm2020/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.mjs +0 -35
  86. package/esm2020/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.mjs +0 -15
  87. package/esm2020/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.mjs +0 -22
  88. package/esm2020/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.mjs +0 -15
  89. package/esm2020/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.mjs +0 -21
  90. package/esm2020/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.mjs +0 -15
  91. package/esm2020/lib/anna-core-shared-lib/constants/shared.constant.mjs +0 -35
  92. package/esm2020/lib/anna-core-shared-lib/directives/digits-only/digits-only.directive.mjs +0 -282
  93. package/esm2020/lib/anna-core-shared-lib/directives/show-ellipsis-text/show-ellipsis-text.directive.mjs +0 -27
  94. package/esm2020/lib/anna-core-shared-lib/models/anna-generic-data-type.model.mjs +0 -2
  95. package/esm2020/lib/anna-core-shared-lib/models/anna-global-dropdown-config.model.mjs +0 -2
  96. package/esm2020/lib/anna-core-shared-lib/models/anna-manage-users.model.mjs +0 -8
  97. package/esm2020/lib/anna-core-shared-lib/models/anna-non-editable-gt-models.mjs +0 -2
  98. package/esm2020/lib/anna-core-shared-lib/models/anna-sort.model.mjs +0 -7
  99. package/esm2020/lib/anna-core-shared-lib/models/anna-tooltip.model.mjs +0 -30
  100. package/esm2020/lib/anna-core-shared-lib/pipes/annaConvertZeroOrNullOrUndefined.pipe.mjs +0 -26
  101. package/esm2020/lib/anna-core-shared-lib/pipes/annaFilterSearchedText.pipe.mjs +0 -46
  102. package/esm2020/lib/anna-core-shared-lib/pipes/annaReplaceChar.pipe.mjs +0 -25
  103. package/esm2020/lib/anna-core-shared-lib/pipes/annaTypeOfData.pipe.mjs +0 -16
  104. package/esm2020/lib/anna-core-shared-lib/services/anna-date-time-format.service.mjs +0 -199
  105. package/esm2020/lib/anna-core-shared-lib/services/anna-filter.service.mjs +0 -469
  106. package/esm2020/lib/anna-core-shared-lib/services/anna-generic-table.service.mjs +0 -124
  107. package/esm2020/lib/anna-core-shared-lib/services/anna-global-config.service.mjs +0 -133
  108. package/esm2020/lib/anna-core-shared-lib/services/anna-number-format.service.mjs +0 -41
  109. package/esm2020/lib/anna-core-shared-lib/services/anna-sort.service.mjs +0 -147
  110. package/esm2020/lib/anna-core.module.mjs +0 -180
  111. package/esm2020/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.mjs +0 -101
  112. package/esm2020/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.mjs +0 -364
  113. package/esm2020/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.mjs +0 -1834
  114. package/esm2020/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.mjs +0 -69
  115. package/esm2020/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.mjs +0 -357
  116. package/esm2020/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/anna-fixed-row-size-table-virtual-scroll-strategy.directive.mjs +0 -189
  117. package/esm2020/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/index.mjs +0 -2
  118. package/esm2020/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.mjs +0 -178
  119. package/esm2020/lib/anna-generic-table-lib/directives/anna-virtual-table/index.mjs +0 -2
  120. package/esm2020/public-api.mjs +0 -50
  121. package/fesm2015/annalib-anna-core.mjs +0 -4875
  122. package/fesm2015/annalib-anna-core.mjs.map +0 -1
  123. package/fesm2020/annalib-anna-core.mjs +0 -4868
  124. package/fesm2020/annalib-anna-core.mjs.map +0 -1
  125. package/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.d.ts +0 -8
  126. package/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.d.ts +0 -16
  127. package/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.d.ts +0 -8
  128. package/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.d.ts +0 -11
  129. package/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.d.ts +0 -8
  130. package/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.d.ts +0 -11
  131. package/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.d.ts +0 -8
  132. package/lib/anna-core-shared-lib/constants/shared.constant.d.ts +0 -33
  133. package/lib/anna-core-shared-lib/directives/digits-only/digits-only.directive.d.ts +0 -34
  134. package/lib/anna-core-shared-lib/directives/show-ellipsis-text/show-ellipsis-text.directive.d.ts +0 -9
  135. package/lib/anna-core-shared-lib/models/anna-generic-data-type.model.d.ts +0 -16
  136. package/lib/anna-core-shared-lib/models/anna-manage-users.model.d.ts +0 -6
  137. package/lib/anna-core-shared-lib/models/anna-sort.model.d.ts +0 -11
  138. package/lib/anna-core-shared-lib/models/anna-tooltip.model.d.ts +0 -25
  139. package/lib/anna-core-shared-lib/pipes/annaConvertZeroOrNullOrUndefined.pipe.d.ts +0 -9
  140. package/lib/anna-core-shared-lib/pipes/annaFilterSearchedText.pipe.d.ts +0 -9
  141. package/lib/anna-core-shared-lib/pipes/annaReplaceChar.pipe.d.ts +0 -9
  142. package/lib/anna-core-shared-lib/pipes/annaTypeOfData.pipe.d.ts +0 -7
  143. package/lib/anna-core-shared-lib/services/anna-date-time-format.service.d.ts +0 -27
  144. package/lib/anna-core-shared-lib/services/anna-filter.service.d.ts +0 -74
  145. package/lib/anna-core-shared-lib/services/anna-generic-table.service.d.ts +0 -28
  146. package/lib/anna-core-shared-lib/services/anna-global-config.service.d.ts +0 -21
  147. package/lib/anna-core-shared-lib/services/anna-number-format.service.d.ts +0 -7
  148. package/lib/anna-core-shared-lib/services/anna-sort.service.d.ts +0 -16
  149. package/lib/anna-core.module.d.ts +0 -36
  150. package/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.d.ts +0 -34
  151. package/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.d.ts +0 -70
  152. package/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.d.ts +0 -283
  153. package/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.d.ts +0 -17
  154. package/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.d.ts +0 -141
  155. package/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/anna-fixed-row-size-table-virtual-scroll-strategy.directive.d.ts +0 -89
  156. package/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.d.ts +0 -45
@@ -0,0 +1,237 @@
1
+ import { coerceNumberProperty, NumberInput } from "@angular/cdk/coercion";
2
+ import {
3
+ CdkVirtualScrollViewport,
4
+ VirtualScrollStrategy,
5
+ VIRTUAL_SCROLL_STRATEGY
6
+ } from "@angular/cdk/scrolling";
7
+ import { AfterContentInit, ContentChildren, Directive, forwardRef, Input, QueryList, SimpleChanges } from "@angular/core";
8
+ import { MatHeaderRowDef } from "@angular/material/table";
9
+ import { Subject } from "rxjs";
10
+ import { distinctUntilChanged } from "rxjs/operators";
11
+ import { AnnaFilterService } from '../../../anna-core-shared-lib/services/anna-filter.service';
12
+
13
+
14
+ /**
15
+ * A custom scroll strategy that accepts a static row height, static header height,
16
+ * and a buffer size. The strategy
17
+ */
18
+ export class AnnaFixedRowSizeTableVirtualScrollStrategy
19
+ implements VirtualScrollStrategy {
20
+
21
+ viewport: CdkVirtualScrollViewport | null;
22
+
23
+ private buffer: number;
24
+
25
+ private headerHeight: number;
26
+
27
+ private rowHeight: number;
28
+
29
+ constructor(rowHeight: number, buffer: number, headerHeight: number) {
30
+ this.updateRowHeightAndBuffer(rowHeight, buffer, headerHeight);
31
+ }
32
+
33
+ private _scrolledIndexChange = new Subject<number>();
34
+
35
+ scrolledIndexChange = this._scrolledIndexChange.pipe(distinctUntilChanged());
36
+
37
+ /**
38
+ * Attaches this scroll strategy to a viewport.
39
+ * @param viewport The viewport to attach this strategy to.
40
+ */
41
+ attach(viewport: CdkVirtualScrollViewport): void {
42
+ this.viewport = viewport;
43
+ this.updateTotalContentSize();
44
+ this.updateRenderedRange();
45
+ }
46
+
47
+ /**
48
+ * Detaches this scroll strategy from the currently attached viewport.
49
+ */
50
+ detach(): void {
51
+ this._scrolledIndexChange.complete();
52
+ this.viewport = null;
53
+ }
54
+
55
+ onContentScrolled(): void {
56
+ this.updateRenderedRange();
57
+ }
58
+
59
+ onDataLengthChanged(): void {
60
+ this.updateTotalContentSize();
61
+ this.updateRenderedRange();
62
+ }
63
+
64
+ onContentRendered(): void {
65
+ // This method is useful for virtual scroll strategies that measure the rendered
66
+ // content to determine its height. This scroll strategy assumes that rows have
67
+ // a static height, so there's no need to implement this method.
68
+ }
69
+
70
+ onRenderedOffsetChanged(): void {
71
+ // Similar to onContentRendered, this method is useful for virtual scroll strategies
72
+ // that need to track the offset as it changes. This scroll strategy is always able
73
+ // to calculate the correct offset from other values, so there's no need to implement
74
+ // this method.
75
+ }
76
+
77
+ scrollToIndex(index: number, behavior: ScrollBehavior): void {
78
+ this.viewport?.scrollToOffset(index * this.rowHeight, behavior);
79
+ }
80
+
81
+ /**
82
+ * Update the item size and buffer size.
83
+ * @param rowHeight The height of a row in the virtually scrolling table.
84
+ * @param buffer The number of rows to buffer outside the viewport.
85
+ * @param headerHeight The total height of the table header, including all header rows.
86
+ */
87
+ updateRowHeightAndBuffer(rowHeight: number, buffer: number, headerHeight: number) {
88
+ this.rowHeight = rowHeight;
89
+ this.buffer = buffer;
90
+ this.headerHeight = headerHeight;
91
+ this.updateTotalContentSize();
92
+ this.updateRenderedRange();
93
+ }
94
+
95
+ protected updateRenderedRange() {
96
+ if (!this.viewport) {
97
+ return;
98
+ }
99
+
100
+ const viewportSize = this.viewport.getViewportSize();
101
+ const dataLength = this.viewport.getDataLength();
102
+ const scrollOffset = this.viewport.measureScrollOffset();
103
+
104
+ // the index of the first item that would be at least partially visible in the viewport
105
+ let firstVisibleIndex = Math.floor((scrollOffset + this.headerHeight) / this.rowHeight);
106
+
107
+ // if the buffer size is 10 but the first visible item is at, say, index 7
108
+ // then the buffered items must be 7, because we don't have 10 items available to buffer.
109
+ const bufferedItems = Math.min(AnnaFilterService.bufferSize, firstVisibleIndex);
110
+
111
+ const itemsInViewport = Math.ceil(viewportSize / this.rowHeight);
112
+ const itemsToRender = itemsInViewport + this.buffer;
113
+
114
+ // Clamp the new range between 0 and dataLength
115
+ const newStart = Math.max(0, firstVisibleIndex - bufferedItems);
116
+ const newEnd = Math.min(dataLength, firstVisibleIndex + itemsToRender);
117
+
118
+ const newRange = {
119
+ start: newStart,
120
+ end: newEnd
121
+ };
122
+
123
+ const newOffset = this.rowHeight * (firstVisibleIndex - bufferedItems);
124
+ this.viewport.setRenderedContentOffset(newOffset);
125
+ this.viewport.setRenderedRange(newRange);
126
+ this._scrolledIndexChange.next(Math.floor(firstVisibleIndex));
127
+ }
128
+
129
+ protected updateTotalContentSize() {
130
+ this.viewport?.setTotalContentSize(this.viewport.getDataLength() * this.rowHeight);
131
+ }
132
+ }
133
+
134
+ /**
135
+ * Provider factory for `FixedSizeVirtualScrollStrategy` that simply extracts the already created
136
+ * `FixedSizeVirtualScrollStrategy` from the given directive.
137
+ * @param fixedSizeDir The instance of `CdkFixedSizeVirtualScroll` to extract the
138
+ * `FixedSizeVirtualScrollStrategy` from.
139
+ */
140
+ export function fixedSizeVirtualScrollStrategyFactory(
141
+ fixedSizeDir: AnnaFixedRowSizeTableVirtualScrollStrategyDirective
142
+ ) {
143
+ return fixedSizeDir.scrollStrategy;
144
+ }
145
+
146
+ @Directive({
147
+ selector: "cdk-virtual-scroll-viewport[rowHeight], anna-table-virtual-scroll-viewport[rowHeight]",
148
+ providers: [
149
+ {
150
+ provide: VIRTUAL_SCROLL_STRATEGY,
151
+ useFactory: fixedSizeVirtualScrollStrategyFactory,
152
+ deps: [forwardRef(() => AnnaFixedRowSizeTableVirtualScrollStrategyDirective)]
153
+ }
154
+ ]
155
+ })
156
+ export class AnnaFixedRowSizeTableVirtualScrollStrategyDirective implements AfterContentInit {
157
+ /** The height of rows in the table (in pixels). Defaults to 30. */
158
+ @Input()
159
+ set rowHeight(value: number) { this._rowHeight = coerceNumberProperty(value); }
160
+ get rowHeight(): number { return this._rowHeight; }
161
+ private _rowHeight = 30;
162
+
163
+ /**
164
+ * The height of header rows in the table (in pixels). Defaults to 30.
165
+ */
166
+ @Input()
167
+ set headerRowHeight(value: number) { this._headerRowHeight = coerceNumberProperty(value); }
168
+ get headerRowHeight(): number { return this._headerRowHeight; }
169
+ private _headerRowHeight: number = 30;
170
+
171
+ /**
172
+ * The number of buffered rows rendered beyond the viewport.
173
+ * If the number of buffered rows dips below this number, more rows will be rendered. Defaults to 20.
174
+ */
175
+ @Input()
176
+ set buffer(value: number) {
177
+ this._buffer = coerceNumberProperty(value);}
178
+ get buffer(): number { return this._buffer; }
179
+ private _buffer = 20;
180
+
181
+ @Input()
182
+ set headerRows(value: number | null | undefined) { this._headerRows = coerceNumberProperty(value, undefined); }
183
+ get headerRows(): number | null | undefined { return this._headerRows; }
184
+ private _headerRows: number | null | undefined = null;
185
+
186
+ /**
187
+ * Using ContentChildren here fails to pick up row defs that are added programmatically,
188
+ * but we don't really have a way of handling that without accessing private methods of
189
+ * the CdkTable. Adding header row defs programmatically is uncommon, so ContentChildren
190
+ * is usually sufficient. The explicit `headerRows` input above allows the number of rows
191
+ * to be set by the developer to override the QueryList-driven behavior.
192
+ */
193
+ @ContentChildren(MatHeaderRowDef) headerRowsQuery: QueryList<MatHeaderRowDef>;
194
+
195
+ private headerRowCount: number = 1;
196
+
197
+ /** The scroll strategy used by this directive. */
198
+ scrollStrategy = new AnnaFixedRowSizeTableVirtualScrollStrategy(
199
+ this.rowHeight,
200
+ this.buffer,
201
+ this.headerRowHeight * this.headerRowCount
202
+ );
203
+
204
+ ngOnChanges(change: SimpleChanges) {
205
+ if (this.headerRows != undefined || this.headerRowsQuery) {
206
+ this.handleChange();
207
+ }
208
+ if(change['buffer']?.previousValue != change['buffer']?.currentValue){
209
+ AnnaFilterService.bufferSize = this.buffer;
210
+ this.scrollStrategy = new AnnaFixedRowSizeTableVirtualScrollStrategy(
211
+ this.rowHeight,
212
+ this.buffer,
213
+ this.headerRowHeight * this.headerRowCount
214
+ );
215
+ }
216
+ }
217
+
218
+ ngAfterContentInit(): void {
219
+ this.headerRowsQuery.changes.subscribe(() => {
220
+ this.handleChange();
221
+ });
222
+ }
223
+
224
+ private handleChange(): void {
225
+ this.scrollStrategy.updateRowHeightAndBuffer(
226
+ this.rowHeight,
227
+ this.buffer,
228
+ // Use the explicit headerRows input value if set.
229
+ // Otherwise, fall back to the QueryList length.
230
+ this.headerRowHeight * (this._headerRows ?? this.headerRowsQuery.length)
231
+ );
232
+ }
233
+
234
+ static ngAcceptInputType_rowHeight: NumberInput;
235
+ static ngAcceptInputType_buffer: NumberInput;
236
+ static ngAcceptInputType_headerRowHeight: NumberInput;
237
+ }
@@ -0,0 +1,204 @@
1
+ import { ArrayDataSource, CollectionViewer, isDataSource, ListRange } from "@angular/cdk/collections";
2
+ import { CdkVirtualScrollRepeater, CdkVirtualScrollViewport } from "@angular/cdk/scrolling";
3
+ import { CdkHeaderRowDef, CdkTable, DataSource, STICKY_POSITIONING_LISTENER, _CoalescedStyleScheduler, _COALESCED_STYLE_SCHEDULER } from "@angular/cdk/table";
4
+ import { ContentChildren, Directive, ElementRef, Inject, Input, NgIterable, NgZone, QueryList } from "@angular/core";
5
+ import { isObservable, Observable, of, Subject } from "rxjs";
6
+ import { map, pairwise, shareReplay, startWith, switchMap, takeUntil } from "rxjs/operators";
7
+ import { AnnaTableVirtualScrollViewportComponent } from '../../components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component';
8
+
9
+ /**
10
+ * Directive that wraps a given data source in a "virtual" data source that emits
11
+ * the slice of the original data source that matches the range that should be rendered
12
+ * in the containing virtual scroll viewport.
13
+ */
14
+ @Directive({
15
+ selector: '[mat-table][appVirtualDataSource], mat-table[appVirtualDataSource]',
16
+ providers: [{ provide: STICKY_POSITIONING_LISTENER, useExisting: AnnaVirtualTableDirective }]
17
+ })
18
+ export class AnnaVirtualTableDirective<T> implements CdkVirtualScrollRepeater<T>, CollectionViewer {
19
+ @Input('appVirtualDataSource')
20
+ set dataSource(value: DataSource<T> | Observable<T[]> | NgIterable<T> | null | undefined) {
21
+ this._dataSource = value;
22
+ if (isDataSource(value)) {
23
+ this.dataSourceChanges.next(value);
24
+ } else {
25
+ this.dataSourceChanges.next(new ArrayDataSource<T>(isObservable(value) ? value : Array.from(value || [])));
26
+ }
27
+ }
28
+ get dataSource(): DataSource<T> | Observable<T[]> | NgIterable<T> | null | undefined {
29
+ return this._dataSource;
30
+ }
31
+ private _dataSource: DataSource<T> | Observable<T[]> | NgIterable<T> | null | undefined;
32
+
33
+ @ContentChildren(CdkHeaderRowDef) headerRowDefs: QueryList<CdkHeaderRowDef>;
34
+
35
+ private virtualizedDataStream = new Subject<T[] | ReadonlyArray<T>>();
36
+
37
+ private dataSourceChanges = new Subject<DataSource<T>>();
38
+
39
+ /** The raw, unvirtualized data stream. Emits whenever the data in the current DataSource changes. */
40
+ dataStream: Observable<T[] | ReadonlyArray<T>> = this.dataSourceChanges
41
+ .pipe(
42
+ // Start off with null data source.
43
+ startWith(null),
44
+ // Bundle up the previous and current data sources so we can work with both.
45
+ pairwise(),
46
+ // Use `changeDataSource` to disconnect from the previous data source and connect to the
47
+ // new one, passing back a stream of data changes which we run through `switchMap` to give
48
+ // us a data stream that emits the latest data from whatever the current data source is.
49
+ switchMap(([prev, cur]) => this.changeDataSource(prev, cur)),
50
+ // Replay the last emitted data when someone subscribes.
51
+ shareReplay(1));
52
+
53
+ viewChange = new Subject<ListRange>();
54
+
55
+ private data: T[] | readonly T[];
56
+
57
+ private destroyed$ = new Subject<void>();
58
+
59
+ private renderedItems: T[] | ReadonlyArray<T>;
60
+
61
+ private renderedRange: ListRange = { start: 0, end: 0 };
62
+
63
+ private isNativeHtmlTable: boolean = false;
64
+
65
+ constructor(
66
+ elementRef: ElementRef<HTMLElement>,
67
+ private viewport: CdkVirtualScrollViewport,
68
+ private table: CdkTable<T>,
69
+ ngZone: NgZone,
70
+ @Inject(_COALESCED_STYLE_SCHEDULER) private _coalescedStyleScheduler: _CoalescedStyleScheduler,
71
+ ) {
72
+ table.dataSource = this.virtualizedDataStream;
73
+ this.isNativeHtmlTable = elementRef.nativeElement.tagName === 'TABLE';
74
+ this.dataStream.subscribe(data => {
75
+ this.data = data;
76
+ this.onRenderedDataChange();
77
+ });
78
+ viewport.renderedRangeStream.pipe(takeUntil(this.destroyed$)).subscribe((range: ListRange) => {
79
+ this.renderedRange = range;
80
+ ngZone.run(() => this.viewChange.next(range));
81
+ this.onRenderedDataChange();
82
+ });
83
+ viewport.attach(this);
84
+ }
85
+
86
+ ngOnInit(): void {
87
+ // This is just a proof of concept, but the AnnaTableVirtualScrollViewportComponent uses `position: absolute` and `top: #px` instead of `transform: translateY(#px)` to position the viewport.
88
+ // This removes the need to account for the translation in the `top` of the sticky header rows.
89
+ if (this.viewport instanceof AnnaTableVirtualScrollViewportComponent) {
90
+ return;
91
+ }
92
+
93
+ this.viewport.scrolledIndexChange
94
+ .pipe(
95
+ map(() => this.viewport.getOffsetToRenderedContentStart()),
96
+ takeUntil(this.destroyed$)
97
+ )
98
+ .subscribe((offset) => {
99
+ // We need to set the `style.top` property of the sticky header rows
100
+ // to the negative value of the virtual scroll viewport's offset, so
101
+ // make the offset negative.
102
+ offset = -offset;
103
+
104
+ const stickyStates: boolean[] = this.headerRowDefs.map(rowDef => rowDef.sticky);
105
+
106
+ // This logic is exactly the same as what's in the StickyStyler (literally copy + paste).
107
+ // The only difference is that the `stickyOffset` variable starts at the virtual scroll
108
+ // viewport container's offset instead of starting at zero.
109
+ const rows = this.table._getRenderedRows(this.table._headerRowOutlet);
110
+ const stickyOffsets: number[] = [];
111
+ const stickyCellHeights: (number|undefined)[] = [];
112
+ const elementsToStick: HTMLElement[][] = [];
113
+ for (let rowIndex = 0, stickyOffset = offset; rowIndex < rows.length; rowIndex++) {
114
+ stickyOffsets[rowIndex] = stickyOffset;
115
+
116
+ if (!stickyStates[rowIndex]) {
117
+ continue;
118
+ }
119
+
120
+ const row = rows[rowIndex];
121
+ elementsToStick[rowIndex] = this.isNativeHtmlTable ? Array.from(row.children) as HTMLElement[] : [row];
122
+
123
+ const height = row.getBoundingClientRect().height;
124
+ stickyOffset += height;
125
+ stickyCellHeights[rowIndex] = height;
126
+ }
127
+
128
+ // Using the CoalescedStyleScheduler here is optional. It'll work without it,
129
+ // and CoalescedStyleScheduler is not public (yet?), so feel free to remove it.
130
+ this._coalescedStyleScheduler.schedule(() => {
131
+ for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {
132
+ if (!stickyStates[rowIndex]) {
133
+ continue;
134
+ }
135
+
136
+ for (const element of elementsToStick[rowIndex]) {
137
+ element.style.top = `${stickyOffsets[rowIndex]}px`;
138
+ }
139
+ }
140
+ });
141
+ });
142
+ }
143
+
144
+ ngOnDestroy(): void {
145
+ this.destroyed$.next();
146
+ this.dataSourceChanges.complete();
147
+ this.virtualizedDataStream.complete();
148
+ }
149
+
150
+ /** React to scroll state changes in the viewport. */
151
+ private onRenderedDataChange() {
152
+ if (!this.renderedRange) {
153
+ return;
154
+ }
155
+ this.renderedItems = this.data.slice(this.renderedRange.start, this.renderedRange.end + 1);
156
+ // delegate rendering to the table by emitting from the virtualizedDataStream
157
+ this.virtualizedDataStream.next(this.renderedItems);
158
+ }
159
+
160
+ /** Swap out one data source for another. */
161
+ private changeDataSource(oldDataSource: DataSource<T> | null, newDs: DataSource<T> | null):
162
+ Observable<T[] | ReadonlyArray<T>> {
163
+
164
+ oldDataSource?.disconnect(this);
165
+ return newDs ? newDs.connect(this) : of();
166
+ }
167
+
168
+ /**
169
+ * This method is only used by the experimental AutoSizeVirtualScrollStrategy.
170
+ * We're not using that strategy, but I've implemented it just to show how it oculd be done.
171
+ * I'm not actually sure if this works.
172
+ */
173
+ measureRangeSize(range: ListRange, orientation: 'horizontal' | 'vertical'): number {
174
+ if (orientation === 'horizontal' || range.end < range.start) {
175
+ // virtual scrolling columns are not supported by this directive
176
+ return 0;
177
+ }
178
+
179
+ const renderedBodyRows = this.table._getRenderedRows(this.table._rowOutlet);
180
+
181
+ const firstRow: HTMLElement | undefined = renderedBodyRows[range.start];
182
+ const lastRow: HTMLElement | undefined = renderedBodyRows[range.end];
183
+
184
+ if (!firstRow || !lastRow) {
185
+ return 0;
186
+ }
187
+
188
+ // We need to include all header and footer rows in the sum, since they're always rendered
189
+ const renderedHeaderRows = this.table._getRenderedRows(this.table._headerRowOutlet);
190
+ const renderedFooterRows = this.table._getRenderedRows(this.table._footerRowOutlet);
191
+
192
+ // TODO (performance): Can we just measure the offset of the first and last items and do some math to avoid having to measure each row individually?
193
+ const headerHeight = renderedHeaderRows.reduce((sum: number, row: HTMLElement) => {
194
+ return sum += row.getBoundingClientRect().height;
195
+ }, 0);
196
+ const footerHeight = renderedFooterRows.reduce((sum: number, row: HTMLElement) => {
197
+ return sum += row.getBoundingClientRect().height;
198
+ }, 0);
199
+
200
+ const bodyHeight = lastRow.getBoundingClientRect().bottom - firstRow.getBoundingClientRect().top;
201
+
202
+ return headerHeight + footerHeight + bodyHeight;
203
+ }
204
+ }
@@ -1,4 +1,11 @@
1
+ /*
2
+ * Public API Surface of anna-core
3
+ */
4
+
1
5
  export * from "./lib/anna-core.module";
6
+
7
+ //ANNA-CORE
8
+ //components
2
9
  export * from "./lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component";
3
10
  export * from "./lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component";
4
11
  export * from "./lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component";
@@ -6,29 +13,50 @@ export * from "./lib/anna-core-shared-lib/components/anna-notify-icon-template/a
6
13
  export * from "./lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component";
7
14
  export * from "./lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component";
8
15
  export * from "./lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component";
16
+
17
+ //services
9
18
  export * from "./lib/anna-core-shared-lib/services/anna-date-time-format.service";
10
19
  export * from "./lib/anna-core-shared-lib/services/anna-global-config.service";
11
20
  export * from "./lib/anna-core-shared-lib/services/anna-filter.service";
12
21
  export * from "./lib/anna-core-shared-lib/services/anna-sort.service";
13
22
  export * from "./lib/anna-core-shared-lib/services/anna-generic-table.service";
14
23
  export * from "./lib/anna-core-shared-lib/services/anna-number-format.service";
24
+
25
+ //models
15
26
  export * from "./lib/anna-core-shared-lib/models/anna-generic-data-type.model";
16
27
  export * from "./lib/anna-core-shared-lib/models/anna-global-dropdown-config.model";
17
28
  export * from "./lib/anna-core-shared-lib/models/anna-non-editable-gt-models";
18
29
  export * from "./lib/anna-core-shared-lib/models/anna-tooltip.model";
19
30
  export * from "./lib/anna-core-shared-lib/models/anna-sort.model";
20
31
  export * from "./lib/anna-core-shared-lib/models/anna-manage-users.model";
32
+
33
+ //constants
21
34
  export * from "./lib/anna-core-shared-lib/constants/shared.constant";
35
+
36
+ //pipes
22
37
  export * from "./lib/anna-core-shared-lib/pipes/annaFilterSearchedText.pipe";
23
38
  export * from "./lib/anna-core-shared-lib/pipes/annaConvertZeroOrNullOrUndefined.pipe";
24
39
  export * from "./lib/anna-core-shared-lib/pipes/annaTypeOfData.pipe";
25
40
  export * from "./lib/anna-core-shared-lib/pipes/annaReplaceChar.pipe";
41
+
42
+ //directives
26
43
  export * from "./lib/anna-core-shared-lib/directives/show-ellipsis-text/show-ellipsis-text.directive";
27
44
  export * from './lib/anna-core-shared-lib/directives/digits-only/digits-only.directive';
45
+
46
+
47
+ //ANNA-DROPDOWN LIB
28
48
  export * from "./lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component";
29
49
  export * from "./lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component";
50
+
51
+
52
+ //ANNA-GENERIC-TABLE-LIB
53
+ //Modules
54
+
55
+ //Components
30
56
  export * from "./lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component";
31
57
  export * from "./lib/anna-generic-table-lib/components/anna-sort/anna-sort.component";
32
58
  export * from "./lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component";
59
+
60
+ //Directives
33
61
  export * from "./lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy";
34
62
  export * from "./lib/anna-generic-table-lib/directives/anna-virtual-table";
package/src/test.ts ADDED
@@ -0,0 +1,27 @@
1
+ // This file is required by karma.conf.js and loads recursively all the .spec and framework files
2
+
3
+ import 'zone.js';
4
+ import 'zone.js/testing';
5
+ import { getTestBed } from '@angular/core/testing';
6
+ import {
7
+ BrowserDynamicTestingModule,
8
+ platformBrowserDynamicTesting
9
+ } from '@angular/platform-browser-dynamic/testing';
10
+
11
+ declare const require: {
12
+ context(path: string, deep?: boolean, filter?: RegExp): {
13
+ <T>(id: string): T;
14
+ keys(): string[];
15
+ };
16
+ };
17
+
18
+ // First, initialize the Angular testing environment.
19
+ getTestBed().initTestEnvironment(
20
+ BrowserDynamicTestingModule,
21
+ platformBrowserDynamicTesting(),
22
+ );
23
+
24
+ // Then we find all the tests.
25
+ const context = require.context('./', true, /\.spec\.ts$/);
26
+ // And load the modules.
27
+ context.keys().map(context);
@@ -0,0 +1,19 @@
1
+ /* To learn more about this file see: https://angular.io/config/tsconfig. */
2
+ {
3
+ "extends": "../../tsconfig.json",
4
+ "compilerOptions": {
5
+ "outDir": "../../out-tsc/lib",
6
+ "declaration": true,
7
+ "declarationMap": true,
8
+ "inlineSources": true,
9
+ "baseUrl": "./",
10
+ "types": [],
11
+ "paths": {
12
+
13
+ }
14
+ },
15
+ "exclude": [
16
+ "src/test.ts",
17
+ "**/*.spec.ts"
18
+ ]
19
+ }
@@ -0,0 +1,10 @@
1
+ /* To learn more about this file see: https://angular.io/config/tsconfig. */
2
+ {
3
+ "extends": "./tsconfig.lib.json",
4
+ "compilerOptions": {
5
+ "declarationMap": false
6
+ },
7
+ "angularCompilerOptions": {
8
+ "compilationMode": "partial"
9
+ }
10
+ }
@@ -0,0 +1,17 @@
1
+ /* To learn more about this file see: https://angular.io/config/tsconfig. */
2
+ {
3
+ "extends": "../../tsconfig.json",
4
+ "compilerOptions": {
5
+ "outDir": "../../out-tsc/spec",
6
+ "types": [
7
+ "jasmine"
8
+ ]
9
+ },
10
+ "files": [
11
+ "src/test.ts"
12
+ ],
13
+ "include": [
14
+ "**/*.spec.ts",
15
+ "**/*.d.ts"
16
+ ]
17
+ }
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- /// <amd-module name="@annalib/anna-core" />
5
- export * from './public-api';
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public-api';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYWxpYi1hbm5hLWNvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9hbm5hLWNvcmUvc3JjL2FubmFsaWItYW5uYS1jb3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
@@ -1,15 +0,0 @@
1
- import { ChangeDetectionStrategy, Component } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/common";
4
- export class AnnaBuyerApprovalIconTemplateComponent {
5
- constructor() { }
6
- ngOnInit() {
7
- }
8
- }
9
- AnnaBuyerApprovalIconTemplateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: AnnaBuyerApprovalIconTemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10
- AnnaBuyerApprovalIconTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: AnnaBuyerApprovalIconTemplateComponent, selector: "anna-buyer-approval-icon-template", ngImport: i0, template: "<ng-container [ngTemplateOutlet]=\"buyerApprovalIcon\"></ng-container>\r\n\r\n<ng-template #buyerApprovalIcon>\r\n <svg width=\"15px\" height=\"15px\" viewBox=\"0 0 20 20\">\r\n <g id=\"Awaiting-Buyer-Approval-icon\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g id=\"time-left\" transform=\"translate(3.000000, 2.000000)\" fill=\"#4A4A4A\" fill-rule=\"nonzero\">\r\n <path\r\n d=\"M6.23157622,14.1696467 C5.70535057,14.0721422 5.2005579,13.9061054 4.72188769,13.6745242 C4.71622258,13.6714711 4.71115545,13.6679958 4.70520709,13.6652025 C4.59240848,13.6104091 4.47979871,13.551718 4.37065094,13.4903961 C4.37027327,13.4899414 4.36958087,13.4896491 4.36898288,13.4893893 C4.16872129,13.37558 3.97327504,13.2496557 3.78339947,13.1117139 C1.01467199,11.0989392 0.348958764,7.13679055 2.29945571,4.27950803 C2.72358352,3.65842885 3.23684237,3.14027823 3.80904983,2.72960334 C3.81609974,2.72453649 3.82314965,2.71950212 3.83013662,2.71440279 C5.84650619,1.28061347 8.58442178,1.183986 10.7254867,2.65733574 L10.2656372,3.34301728 C10.1377946,3.53386873 10.2164452,3.67294733 10.4402485,3.65216024 L12.4377343,3.46760989 C12.6618209,3.4468228 12.7958322,3.24677957 12.7355617,3.0234483 L12.1991703,1.02899228 C12.1391202,0.805401178 11.9853754,0.778637804 11.8574069,0.969456765 L11.3964873,1.6567623 C9.82523796,0.568265989 7.94067659,0.153206329 6.0701521,0.487943386 C5.88175576,0.521592483 5.69600314,0.562776899 5.51279981,0.610717118 C5.51138354,0.610976957 5.51025052,0.611139356 5.50911749,0.611399194 C5.50203611,0.613185585 5.4948603,0.615556612 5.48796775,0.617537881 C3.8749854,1.04500483 2.46767797,2.01585923 1.46347449,3.40105873 C1.4550083,3.41141979 1.44629033,3.4215535 1.43829623,3.432824 C1.40490356,3.47923766 1.37176268,3.52672316 1.33931419,3.57420867 C1.28625101,3.65203032 1.23394317,3.73180077 1.18390138,3.81157121 C1.17763828,3.82118524 1.17285441,3.83096167 1.16737814,3.84067314 C0.338698623,5.1658824 -0.0610062726,6.69795566 0.00754154337,8.25770173 C0.00769890751,8.26283354 0.00741565207,8.26799784 0.00754154337,8.27325957 C0.0141823097,8.42562242 0.0258902012,8.58009646 0.0417839785,8.73216699 C0.0426337448,8.7419759 0.0447424242,8.75126512 0.0463475384,8.76107403 C0.0627763537,8.91398904 0.0833910551,9.06726132 0.109230246,9.22050113 C0.371839509,10.7840149 1.08652445,12.1909434 2.15745032,13.2856758 C2.15993667,13.2882417 2.16251744,13.291035 2.16503527,13.2936983 C2.16591651,13.2947052 2.16689216,13.2952249 2.16774193,13.2961668 C2.45546651,13.5890373 2.7684323,13.8599191 3.10541185,14.1048494 C3.98728044,14.7461311 4.9692641,15.1700252 6.02385557,15.3653264 C6.3438398,15.424667 6.64950389,15.2048436 6.70691032,14.8747836 C6.76428528,14.5444963 6.55146603,14.2287924 6.23157622,14.1696467 Z\"\r\n id=\"Path\"\r\n ></path>\r\n <path\r\n d=\"M9.22237925,14.6588011 C9.29073073,14.9263505 9.1292489,15.198652 8.86169949,15.2670034 C8.51639563,15.355219 8.1641424,15.4188128 7.8069689,15.4570516 C7.53239558,15.4864472 7.28598003,15.2876915 7.25658436,15.0131182 C7.22718869,14.7385449 7.42594445,14.4921293 7.70051776,14.4627336 C8.01004537,14.4295958 8.31515603,14.3745129 8.61417689,14.2981213 C8.8817263,14.2297698 9.15402777,14.3912517 9.22237925,14.6588011 Z M12.5552524,12.2886551 C12.7611952,12.4726175 12.7790139,12.7886982 12.5950515,12.994641 C12.3569806,13.2611574 12.1001968,13.5104915 11.8267859,13.7406023 C11.6155121,13.9184167 11.3000937,13.8912925 11.1222793,13.6800187 C10.9444648,13.4687448 10.9715891,13.1533264 11.1828629,12.975512 C11.4200152,12.7759175 11.6427598,12.5596351 11.8492666,12.3284542 C12.033229,12.1225114 12.3493096,12.1046927 12.5552524,12.2886551 Z M13.9945063,8.57622811 C14.2674538,8.61811209 14.4547678,8.87333344 14.4128838,9.14628095 C14.3584322,9.50112883 14.2787427,9.85020038 14.1746496,10.1914009 C14.0940709,10.4555252 13.8146338,10.6043183 13.5505094,10.5237395 C13.2863851,10.4431608 13.137592,10.1637237 13.2181708,9.89959931 C13.3082912,9.6041989 13.3772907,9.30195366 13.4244534,8.99460564 C13.4663374,8.72165813 13.7215588,8.53434413 13.9945063,8.57622811 Z M13.8741743,4.99628976 C14.0173723,5.32357494 14.1370467,5.66111195 14.2320931,6.00667963 C14.305325,6.27293459 14.1488489,6.54814305 13.8825939,6.62137492 C13.6163389,6.6946068 13.3411305,6.53813067 13.2678986,6.27187571 C13.1856167,5.97271686 13.0820133,5.68050756 12.958028,5.39713383 C12.847338,5.14414702 12.9626923,4.84932868 13.2156791,4.73863865 C13.4686659,4.62794862 13.7634843,4.74330295 13.8741743,4.99628976 Z\"\r\n id=\"Combined-Shape\"\r\n ></path>\r\n <path\r\n d=\"M6.49684035,4 C6.22234237,4 6,4.21290493 6,4.47514225 L6,9.20888548 L10.5252942,11.4469308 C10.5981282,11.4830116 10.6761155,11.5 10.7528554,11.5 C10.9325937,11.5 11.106194,11.4063595 11.1944548,11.2429754 C11.3203307,11.0097848 11.2250786,10.7233052 10.9813357,10.6028789 L6.9931227,8.63027395 L6.9931227,4.47514225 C6.99308988,4.21290493 6.77101009,4 6.49684035,4 Z\"\r\n id=\"Path\"\r\n ></path>\r\n </g>\r\n </g>\r\n </svg>\r\n</ng-template>\r\n", styles: [""], directives: [{ type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
11
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: AnnaBuyerApprovalIconTemplateComponent, decorators: [{
12
- type: Component,
13
- args: [{ selector: 'anna-buyer-approval-icon-template', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container [ngTemplateOutlet]=\"buyerApprovalIcon\"></ng-container>\r\n\r\n<ng-template #buyerApprovalIcon>\r\n <svg width=\"15px\" height=\"15px\" viewBox=\"0 0 20 20\">\r\n <g id=\"Awaiting-Buyer-Approval-icon\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g id=\"time-left\" transform=\"translate(3.000000, 2.000000)\" fill=\"#4A4A4A\" fill-rule=\"nonzero\">\r\n <path\r\n d=\"M6.23157622,14.1696467 C5.70535057,14.0721422 5.2005579,13.9061054 4.72188769,13.6745242 C4.71622258,13.6714711 4.71115545,13.6679958 4.70520709,13.6652025 C4.59240848,13.6104091 4.47979871,13.551718 4.37065094,13.4903961 C4.37027327,13.4899414 4.36958087,13.4896491 4.36898288,13.4893893 C4.16872129,13.37558 3.97327504,13.2496557 3.78339947,13.1117139 C1.01467199,11.0989392 0.348958764,7.13679055 2.29945571,4.27950803 C2.72358352,3.65842885 3.23684237,3.14027823 3.80904983,2.72960334 C3.81609974,2.72453649 3.82314965,2.71950212 3.83013662,2.71440279 C5.84650619,1.28061347 8.58442178,1.183986 10.7254867,2.65733574 L10.2656372,3.34301728 C10.1377946,3.53386873 10.2164452,3.67294733 10.4402485,3.65216024 L12.4377343,3.46760989 C12.6618209,3.4468228 12.7958322,3.24677957 12.7355617,3.0234483 L12.1991703,1.02899228 C12.1391202,0.805401178 11.9853754,0.778637804 11.8574069,0.969456765 L11.3964873,1.6567623 C9.82523796,0.568265989 7.94067659,0.153206329 6.0701521,0.487943386 C5.88175576,0.521592483 5.69600314,0.562776899 5.51279981,0.610717118 C5.51138354,0.610976957 5.51025052,0.611139356 5.50911749,0.611399194 C5.50203611,0.613185585 5.4948603,0.615556612 5.48796775,0.617537881 C3.8749854,1.04500483 2.46767797,2.01585923 1.46347449,3.40105873 C1.4550083,3.41141979 1.44629033,3.4215535 1.43829623,3.432824 C1.40490356,3.47923766 1.37176268,3.52672316 1.33931419,3.57420867 C1.28625101,3.65203032 1.23394317,3.73180077 1.18390138,3.81157121 C1.17763828,3.82118524 1.17285441,3.83096167 1.16737814,3.84067314 C0.338698623,5.1658824 -0.0610062726,6.69795566 0.00754154337,8.25770173 C0.00769890751,8.26283354 0.00741565207,8.26799784 0.00754154337,8.27325957 C0.0141823097,8.42562242 0.0258902012,8.58009646 0.0417839785,8.73216699 C0.0426337448,8.7419759 0.0447424242,8.75126512 0.0463475384,8.76107403 C0.0627763537,8.91398904 0.0833910551,9.06726132 0.109230246,9.22050113 C0.371839509,10.7840149 1.08652445,12.1909434 2.15745032,13.2856758 C2.15993667,13.2882417 2.16251744,13.291035 2.16503527,13.2936983 C2.16591651,13.2947052 2.16689216,13.2952249 2.16774193,13.2961668 C2.45546651,13.5890373 2.7684323,13.8599191 3.10541185,14.1048494 C3.98728044,14.7461311 4.9692641,15.1700252 6.02385557,15.3653264 C6.3438398,15.424667 6.64950389,15.2048436 6.70691032,14.8747836 C6.76428528,14.5444963 6.55146603,14.2287924 6.23157622,14.1696467 Z\"\r\n id=\"Path\"\r\n ></path>\r\n <path\r\n d=\"M9.22237925,14.6588011 C9.29073073,14.9263505 9.1292489,15.198652 8.86169949,15.2670034 C8.51639563,15.355219 8.1641424,15.4188128 7.8069689,15.4570516 C7.53239558,15.4864472 7.28598003,15.2876915 7.25658436,15.0131182 C7.22718869,14.7385449 7.42594445,14.4921293 7.70051776,14.4627336 C8.01004537,14.4295958 8.31515603,14.3745129 8.61417689,14.2981213 C8.8817263,14.2297698 9.15402777,14.3912517 9.22237925,14.6588011 Z M12.5552524,12.2886551 C12.7611952,12.4726175 12.7790139,12.7886982 12.5950515,12.994641 C12.3569806,13.2611574 12.1001968,13.5104915 11.8267859,13.7406023 C11.6155121,13.9184167 11.3000937,13.8912925 11.1222793,13.6800187 C10.9444648,13.4687448 10.9715891,13.1533264 11.1828629,12.975512 C11.4200152,12.7759175 11.6427598,12.5596351 11.8492666,12.3284542 C12.033229,12.1225114 12.3493096,12.1046927 12.5552524,12.2886551 Z M13.9945063,8.57622811 C14.2674538,8.61811209 14.4547678,8.87333344 14.4128838,9.14628095 C14.3584322,9.50112883 14.2787427,9.85020038 14.1746496,10.1914009 C14.0940709,10.4555252 13.8146338,10.6043183 13.5505094,10.5237395 C13.2863851,10.4431608 13.137592,10.1637237 13.2181708,9.89959931 C13.3082912,9.6041989 13.3772907,9.30195366 13.4244534,8.99460564 C13.4663374,8.72165813 13.7215588,8.53434413 13.9945063,8.57622811 Z M13.8741743,4.99628976 C14.0173723,5.32357494 14.1370467,5.66111195 14.2320931,6.00667963 C14.305325,6.27293459 14.1488489,6.54814305 13.8825939,6.62137492 C13.6163389,6.6946068 13.3411305,6.53813067 13.2678986,6.27187571 C13.1856167,5.97271686 13.0820133,5.68050756 12.958028,5.39713383 C12.847338,5.14414702 12.9626923,4.84932868 13.2156791,4.73863865 C13.4686659,4.62794862 13.7634843,4.74330295 13.8741743,4.99628976 Z\"\r\n id=\"Combined-Shape\"\r\n ></path>\r\n <path\r\n d=\"M6.49684035,4 C6.22234237,4 6,4.21290493 6,4.47514225 L6,9.20888548 L10.5252942,11.4469308 C10.5981282,11.4830116 10.6761155,11.5 10.7528554,11.5 C10.9325937,11.5 11.106194,11.4063595 11.1944548,11.2429754 C11.3203307,11.0097848 11.2250786,10.7233052 10.9813357,10.6028789 L6.9931227,8.63027395 L6.9931227,4.47514225 C6.99308988,4.21290493 6.77101009,4 6.49684035,4 Z\"\r\n id=\"Path\"\r\n ></path>\r\n </g>\r\n </g>\r\n </svg>\r\n</ng-template>\r\n", styles: [""] }]
14
- }], ctorParameters: function () { return []; } });
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1idXllci1hcHByb3ZhbC1pY29uLXRlbXBsYXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FubmEtY29yZS9zcmMvbGliL2FubmEtY29yZS1zaGFyZWQtbGliL2NvbXBvbmVudHMvYW5uYS1idXllci1hcHByb3ZhbC1pY29uLXRlbXBsYXRlL2FubmEtYnV5ZXItYXBwcm92YWwtaWNvbi10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbm5hLWNvcmUvc3JjL2xpYi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9jb21wb25lbnRzL2FubmEtYnV5ZXItYXBwcm92YWwtaWNvbi10ZW1wbGF0ZS9hbm5hLWJ1eWVyLWFwcHJvdmFsLWljb24tdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQzs7O0FBUTNFLE1BQU0sT0FBTyxzQ0FBc0M7SUFFakQsZ0JBQWdCLENBQUM7SUFFakIsUUFBUTtJQUNSLENBQUM7O21JQUxVLHNDQUFzQzt1SEFBdEMsc0NBQXNDLHlFQ1JuRCxvcEtBc0JBOzJGRGRhLHNDQUFzQztrQkFObEQsU0FBUzsrQkFDRSxtQ0FBbUMsbUJBRzVCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYW5uYS1idXllci1hcHByb3ZhbC1pY29uLXRlbXBsYXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYW5uYS1idXllci1hcHByb3ZhbC1pY29uLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hbm5hLWJ1eWVyLWFwcHJvdmFsLWljb24tdGVtcGxhdGUuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQW5uYUJ1eWVyQXBwcm92YWxJY29uVGVtcGxhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiYnV5ZXJBcHByb3ZhbEljb25cIj48L25nLWNvbnRhaW5lcj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYnV5ZXJBcHByb3ZhbEljb24+XHJcbiAgICA8c3ZnIHdpZHRoPVwiMTVweFwiIGhlaWdodD1cIjE1cHhcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCI+XHJcbiAgICAgICAgPGcgaWQ9XCJBd2FpdGluZy1CdXllci1BcHByb3ZhbC1pY29uXCIgc3Ryb2tlPVwibm9uZVwiIHN0cm9rZS13aWR0aD1cIjFcIiBmaWxsPVwibm9uZVwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj5cclxuICAgICAgICAgICAgPGcgaWQ9XCJ0aW1lLWxlZnRcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMy4wMDAwMDAsIDIuMDAwMDAwKVwiIGZpbGw9XCIjNEE0QTRBXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTYuMjMxNTc2MjIsMTQuMTY5NjQ2NyBDNS43MDUzNTA1NywxNC4wNzIxNDIyIDUuMjAwNTU3OSwxMy45MDYxMDU0IDQuNzIxODg3NjksMTMuNjc0NTI0MiBDNC43MTYyMjI1OCwxMy42NzE0NzExIDQuNzExMTU1NDUsMTMuNjY3OTk1OCA0LjcwNTIwNzA5LDEzLjY2NTIwMjUgQzQuNTkyNDA4NDgsMTMuNjEwNDA5MSA0LjQ3OTc5ODcxLDEzLjU1MTcxOCA0LjM3MDY1MDk0LDEzLjQ5MDM5NjEgQzQuMzcwMjczMjcsMTMuNDg5OTQxNCA0LjM2OTU4MDg3LDEzLjQ4OTY0OTEgNC4zNjg5ODI4OCwxMy40ODkzODkzIEM0LjE2ODcyMTI5LDEzLjM3NTU4IDMuOTczMjc1MDQsMTMuMjQ5NjU1NyAzLjc4MzM5OTQ3LDEzLjExMTcxMzkgQzEuMDE0NjcxOTksMTEuMDk4OTM5MiAwLjM0ODk1ODc2NCw3LjEzNjc5MDU1IDIuMjk5NDU1NzEsNC4yNzk1MDgwMyBDMi43MjM1ODM1MiwzLjY1ODQyODg1IDMuMjM2ODQyMzcsMy4xNDAyNzgyMyAzLjgwOTA0OTgzLDIuNzI5NjAzMzQgQzMuODE2MDk5NzQsMi43MjQ1MzY0OSAzLjgyMzE0OTY1LDIuNzE5NTAyMTIgMy44MzAxMzY2MiwyLjcxNDQwMjc5IEM1Ljg0NjUwNjE5LDEuMjgwNjEzNDcgOC41ODQ0MjE3OCwxLjE4Mzk4NiAxMC43MjU0ODY3LDIuNjU3MzM1NzQgTDEwLjI2NTYzNzIsMy4zNDMwMTcyOCBDMTAuMTM3Nzk0NiwzLjUzMzg2ODczIDEwLjIxNjQ0NTIsMy42NzI5NDczMyAxMC40NDAyNDg1LDMuNjUyMTYwMjQgTDEyLjQzNzczNDMsMy40Njc2MDk4OSBDMTIuNjYxODIwOSwzLjQ0NjgyMjggMTIuNzk1ODMyMiwzLjI0Njc3OTU3IDEyLjczNTU2MTcsMy4wMjM0NDgzIEwxMi4xOTkxNzAzLDEuMDI4OTkyMjggQzEyLjEzOTEyMDIsMC44MDU0MDExNzggMTEuOTg1Mzc1NCwwLjc3ODYzNzgwNCAxMS44NTc0MDY5LDAuOTY5NDU2NzY1IEwxMS4zOTY0ODczLDEuNjU2NzYyMyBDOS44MjUyMzc5NiwwLjU2ODI2NTk4OSA3Ljk0MDY3NjU5LDAuMTUzMjA2MzI5IDYuMDcwMTUyMSwwLjQ4Nzk0MzM4NiBDNS44ODE3NTU3NiwwLjUyMTU5MjQ4MyA1LjY5NjAwMzE0LDAuNTYyNzc2ODk5IDUuNTEyNzk5ODEsMC42MTA3MTcxMTggQzUuNTExMzgzNTQsMC42MTA5NzY5NTcgNS41MTAyNTA1MiwwLjYxMTEzOTM1NiA1LjUwOTExNzQ5LDAuNjExMzk5MTk0IEM1LjUwMjAzNjExLDAuNjEzMTg1NTg1IDUuNDk0ODYwMywwLjYxNTU1NjYxMiA1LjQ4Nzk2Nzc1LDAuNjE3NTM3ODgxIEMzLjg3NDk4NTQsMS4wNDUwMDQ4MyAyLjQ2NzY3Nzk3LDIuMDE1ODU5MjMgMS40NjM0NzQ0OSwzLjQwMTA1ODczIEMxLjQ1NTAwODMsMy40MTE0MTk3OSAxLjQ0NjI5MDMzLDMuNDIxNTUzNSAxLjQzODI5NjIzLDMuNDMyODI0IEMxLjQwNDkwMzU2LDMuNDc5MjM3NjYgMS4zNzE3NjI2OCwzLjUyNjcyMzE2IDEuMzM5MzE0MTksMy41NzQyMDg2NyBDMS4yODYyNTEwMSwzLjY1MjAzMDMyIDEuMjMzOTQzMTcsMy43MzE4MDA3NyAxLjE4MzkwMTM4LDMuODExNTcxMjEgQzEuMTc3NjM4MjgsMy44MjExODUyNCAxLjE3Mjg1NDQxLDMuODMwOTYxNjcgMS4xNjczNzgxNCwzLjg0MDY3MzE0IEMwLjMzODY5ODYyMyw1LjE2NTg4MjQgLTAuMDYxMDA2MjcyNiw2LjY5Nzk1NTY2IDAuMDA3NTQxNTQzMzcsOC4yNTc3MDE3MyBDMC4wMDc2OTg5MDc1MSw4LjI2MjgzMzU0IDAuMDA3NDE1NjUyMDcsOC4yNjc5OTc4NCAwLjAwNzU0MTU0MzM3LDguMjczMjU5NTcgQzAuMDE0MTgyMzA5Nyw4LjQyNTYyMjQyIDAuMDI1ODkwMjAxMiw4LjU4MDA5NjQ2IDAuMDQxNzgzOTc4NSw4LjczMjE2Njk5IEMwLjA0MjYzMzc0NDgsOC43NDE5NzU5IDAuMDQ0NzQyNDI0Miw4Ljc1MTI2NTEyIDAuMDQ2MzQ3NTM4NCw4Ljc2MTA3NDAzIEMwLjA2Mjc3NjM1MzcsOC45MTM5ODkwNCAwLjA4MzM5MTA1NTEsOS4wNjcyNjEzMiAwLjEwOTIzMDI0Niw5LjIyMDUwMTEzIEMwLjM3MTgzOTUwOSwxMC43ODQwMTQ5IDEuMDg2NTI0NDUsMTIuMTkwOTQzNCAyLjE1NzQ1MDMyLDEzLjI4NTY3NTggQzIuMTU5OTM2NjcsMTMuMjg4MjQxNyAyLjE2MjUxNzQ0LDEzLjI5MTAzNSAyLjE2NTAzNTI3LDEzLjI5MzY5ODMgQzIuMTY1OTE2NTEsMTMuMjk0NzA1MiAyLjE2Njg5MjE2LDEzLjI5NTIyNDkgMi4xNjc3NDE5MywxMy4yOTYxNjY4IEMyLjQ1NTQ2NjUxLDEzLjU4OTAzNzMgMi43Njg0MzIzLDEzLjg1OTkxOTEgMy4xMDU0MTE4NSwxNC4xMDQ4NDk0IEMzLjk4NzI4MDQ0LDE0Ljc0NjEzMTEgNC45NjkyNjQxLDE1LjE3MDAyNTIgNi4wMjM4NTU1NywxNS4zNjUzMjY0IEM2LjM0MzgzOTgsMTUuNDI0NjY3IDYuNjQ5NTAzODksMTUuMjA0ODQzNiA2LjcwNjkxMDMyLDE0Ljg3NDc4MzYgQzYuNzY0Mjg1MjgsMTQuNTQ0NDk2MyA2LjU1MTQ2NjAzLDE0LjIyODc5MjQgNi4yMzE1NzYyMiwxNC4xNjk2NDY3IFpcIlxyXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiUGF0aFwiXHJcbiAgICAgICAgICAgICAgICA+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTkuMjIyMzc5MjUsMTQuNjU4ODAxMSBDOS4yOTA3MzA3MywxNC45MjYzNTA1IDkuMTI5MjQ4OSwxNS4xOTg2NTIgOC44NjE2OTk0OSwxNS4yNjcwMDM0IEM4LjUxNjM5NTYzLDE1LjM1NTIxOSA4LjE2NDE0MjQsMTUuNDE4ODEyOCA3LjgwNjk2ODksMTUuNDU3MDUxNiBDNy41MzIzOTU1OCwxNS40ODY0NDcyIDcuMjg1OTgwMDMsMTUuMjg3NjkxNSA3LjI1NjU4NDM2LDE1LjAxMzExODIgQzcuMjI3MTg4NjksMTQuNzM4NTQ0OSA3LjQyNTk0NDQ1LDE0LjQ5MjEyOTMgNy43MDA1MTc3NiwxNC40NjI3MzM2IEM4LjAxMDA0NTM3LDE0LjQyOTU5NTggOC4zMTUxNTYwMywxNC4zNzQ1MTI5IDguNjE0MTc2ODksMTQuMjk4MTIxMyBDOC44ODE3MjYzLDE0LjIyOTc2OTggOS4xNTQwMjc3NywxNC4zOTEyNTE3IDkuMjIyMzc5MjUsMTQuNjU4ODAxMSBaIE0xMi41NTUyNTI0LDEyLjI4ODY1NTEgQzEyLjc2MTE5NTIsMTIuNDcyNjE3NSAxMi43NzkwMTM5LDEyLjc4ODY5ODIgMTIuNTk1MDUxNSwxMi45OTQ2NDEgQzEyLjM1Njk4MDYsMTMuMjYxMTU3NCAxMi4xMDAxOTY4LDEzLjUxMDQ5MTUgMTEuODI2Nzg1OSwxMy43NDA2MDIzIEMxMS42MTU1MTIxLDEzLjkxODQxNjcgMTEuMzAwMDkzNywxMy44OTEyOTI1IDExLjEyMjI3OTMsMTMuNjgwMDE4NyBDMTAuOTQ0NDY0OCwxMy40Njg3NDQ4IDEwLjk3MTU4OTEsMTMuMTUzMzI2NCAxMS4xODI4NjI5LDEyLjk3NTUxMiBDMTEuNDIwMDE1MiwxMi43NzU5MTc1IDExLjY0Mjc1OTgsMTIuNTU5NjM1MSAxMS44NDkyNjY2LDEyLjMyODQ1NDIgQzEyLjAzMzIyOSwxMi4xMjI1MTE0IDEyLjM0OTMwOTYsMTIuMTA0NjkyNyAxMi41NTUyNTI0LDEyLjI4ODY1NTEgWiBNMTMuOTk0NTA2Myw4LjU3NjIyODExIEMxNC4yNjc0NTM4LDguNjE4MTEyMDkgMTQuNDU0NzY3OCw4Ljg3MzMzMzQ0IDE0LjQxMjg4MzgsOS4xNDYyODA5NSBDMTQuMzU4NDMyMiw5LjUwMTEyODgzIDE0LjI3ODc0MjcsOS44NTAyMDAzOCAxNC4xNzQ2NDk2LDEwLjE5MTQwMDkgQzE0LjA5NDA3MDksMTAuNDU1NTI1MiAxMy44MTQ2MzM4LDEwLjYwNDMxODMgMTMuNTUwNTA5NCwxMC41MjM3Mzk1IEMxMy4yODYzODUxLDEwLjQ0MzE2MDggMTMuMTM3NTkyLDEwLjE2MzcyMzcgMTMuMjE4MTcwOCw5Ljg5OTU5OTMxIEMxMy4zMDgyOTEyLDkuNjA0MTk4OSAxMy4zNzcyOTA3LDkuMzAxOTUzNjYgMTMuNDI0NDUzNCw4Ljk5NDYwNTY0IEMxMy40NjYzMzc0LDguNzIxNjU4MTMgMTMuNzIxNTU4OCw4LjUzNDM0NDEzIDEzLjk5NDUwNjMsOC41NzYyMjgxMSBaIE0xMy44NzQxNzQzLDQuOTk2Mjg5NzYgQzE0LjAxNzM3MjMsNS4zMjM1NzQ5NCAxNC4xMzcwNDY3LDUuNjYxMTExOTUgMTQuMjMyMDkzMSw2LjAwNjY3OTYzIEMxNC4zMDUzMjUsNi4yNzI5MzQ1OSAxNC4xNDg4NDg5LDYuNTQ4MTQzMDUgMTMuODgyNTkzOSw2LjYyMTM3NDkyIEMxMy42MTYzMzg5LDYuNjk0NjA2OCAxMy4zNDExMzA1LDYuNTM4MTMwNjcgMTMuMjY3ODk4Niw2LjI3MTg3NTcxIEMxMy4xODU2MTY3LDUuOTcyNzE2ODYgMTMuMDgyMDEzMyw1LjY4MDUwNzU2IDEyLjk1ODAyOCw1LjM5NzEzMzgzIEMxMi44NDczMzgsNS4xNDQxNDcwMiAxMi45NjI2OTIzLDQuODQ5MzI4NjggMTMuMjE1Njc5MSw0LjczODYzODY1IEMxMy40Njg2NjU5LDQuNjI3OTQ4NjIgMTMuNzYzNDg0Myw0Ljc0MzMwMjk1IDEzLjg3NDE3NDMsNC45OTYyODk3NiBaXCJcclxuICAgICAgICAgICAgICAgICAgICBpZD1cIkNvbWJpbmVkLVNoYXBlXCJcclxuICAgICAgICAgICAgICAgID48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNNi40OTY4NDAzNSw0IEM2LjIyMjM0MjM3LDQgNiw0LjIxMjkwNDkzIDYsNC40NzUxNDIyNSBMNiw5LjIwODg4NTQ4IEwxMC41MjUyOTQyLDExLjQ0NjkzMDggQzEwLjU5ODEyODIsMTEuNDgzMDExNiAxMC42NzYxMTU1LDExLjUgMTAuNzUyODU1NCwxMS41IEMxMC45MzI1OTM3LDExLjUgMTEuMTA2MTk0LDExLjQwNjM1OTUgMTEuMTk0NDU0OCwxMS4yNDI5NzU0IEMxMS4zMjAzMzA3LDExLjAwOTc4NDggMTEuMjI1MDc4NiwxMC43MjMzMDUyIDEwLjk4MTMzNTcsMTAuNjAyODc4OSBMNi45OTMxMjI3LDguNjMwMjczOTUgTDYuOTkzMTIyNyw0LjQ3NTE0MjI1IEM2Ljk5MzA4OTg4LDQuMjEyOTA0OTMgNi43NzEwMTAwOSw0IDYuNDk2ODQwMzUsNCBaXCJcclxuICAgICAgICAgICAgICAgICAgICBpZD1cIlBhdGhcIlxyXG4gICAgICAgICAgICAgICAgPjwvcGF0aD5cclxuICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgIDwvZz5cclxuICAgIDwvc3ZnPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=