@swimlane/ngx-datatable 19.0.0 → 20.0.0-alpha-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.
Files changed (159) hide show
  1. package/README.md +0 -1
  2. package/esm2020/lib/components/body/body-cell.component.mjs +432 -0
  3. package/esm2020/lib/components/body/body-group-header-template.directive.mjs +16 -0
  4. package/esm2020/lib/components/body/body-group-header.directive.mjs +62 -0
  5. package/esm2020/lib/components/body/body-row-wrapper.component.mjs +140 -0
  6. package/esm2020/lib/components/body/body-row.component.mjs +262 -0
  7. package/esm2020/lib/components/body/body.component.mjs +863 -0
  8. package/esm2020/lib/components/body/progress-bar.component.mjs +27 -0
  9. package/esm2020/lib/components/body/scroller.component.mjs +91 -0
  10. package/esm2020/lib/components/body/selection.component.mjs +150 -0
  11. package/esm2020/lib/components/body/summary/summary-row.component.mjs +105 -0
  12. package/esm2020/lib/components/columns/column-cell.directive.mjs +14 -0
  13. package/esm2020/lib/components/columns/column-header.directive.mjs +14 -0
  14. package/esm2020/lib/components/columns/column.directive.mjs +98 -0
  15. package/esm2020/lib/components/columns/tree.directive.mjs +14 -0
  16. package/esm2020/lib/components/datatable.component.mjs +1008 -0
  17. package/esm2020/lib/components/footer/footer-template.directive.mjs +14 -0
  18. package/esm2020/lib/components/footer/footer.component.mjs +128 -0
  19. package/esm2020/lib/components/footer/footer.directive.mjs +35 -0
  20. package/esm2020/lib/components/footer/pager.component.mjs +181 -0
  21. package/esm2020/lib/components/header/header-cell.component.mjs +243 -0
  22. package/esm2020/lib/components/header/header.component.mjs +376 -0
  23. package/esm2020/lib/components/row-detail/row-detail-template.directive.mjs +16 -0
  24. package/esm2020/lib/components/row-detail/row-detail.directive.mjs +63 -0
  25. package/esm2020/lib/directives/draggable.directive.mjs +108 -0
  26. package/esm2020/lib/directives/long-press.directive.mjs +117 -0
  27. package/esm2020/lib/directives/orderable.directive.mjs +136 -0
  28. package/esm2020/lib/directives/resizeable.directive.mjs +93 -0
  29. package/esm2020/lib/directives/visibility.directive.mjs +63 -0
  30. package/esm2020/lib/events.mjs +7 -0
  31. package/esm2020/lib/ngx-datatable.module.mjs +139 -0
  32. package/esm2020/lib/services/column-changes.service.mjs +24 -0
  33. package/esm2020/lib/services/dimensions-helper.service.mjs +17 -0
  34. package/esm2020/lib/services/scrollbar-helper.service.mjs +37 -0
  35. package/esm2020/lib/types/click.type.mjs +6 -0
  36. package/esm2020/lib/types/column-mode.type.mjs +7 -0
  37. package/esm2020/lib/types/contextmenu.type.mjs +6 -0
  38. package/esm2020/lib/types/selection.type.mjs +9 -0
  39. package/esm2020/lib/types/sort-direction.type.mjs +6 -0
  40. package/esm2020/lib/types/sort-prop-dir.type.mjs +2 -0
  41. package/esm2020/lib/types/sort.type.mjs +6 -0
  42. package/esm2020/lib/types/table-column.type.mjs +2 -0
  43. package/esm2020/lib/utils/camel-case.mjs +28 -0
  44. package/esm2020/lib/utils/column-helper.mjs +95 -0
  45. package/esm2020/lib/utils/column-prop-getters.mjs +96 -0
  46. package/esm2020/lib/utils/column.mjs +69 -0
  47. package/esm2020/lib/utils/elm-from-point.mjs +38 -0
  48. package/esm2020/lib/utils/id.mjs +8 -0
  49. package/esm2020/lib/utils/keys.mjs +10 -0
  50. package/esm2020/lib/utils/math.mjs +146 -0
  51. package/esm2020/lib/utils/prefixes.mjs +38 -0
  52. package/esm2020/lib/utils/row-height-cache.mjs +138 -0
  53. package/esm2020/lib/utils/selection.mjs +40 -0
  54. package/esm2020/lib/utils/sort.mjs +127 -0
  55. package/esm2020/lib/utils/throttle.mjs +60 -0
  56. package/esm2020/lib/utils/translate.mjs +25 -0
  57. package/esm2020/lib/utils/tree.mjs +103 -0
  58. package/{esm2015/public-api.js → esm2020/public-api.mjs} +1 -1
  59. package/{esm2015/swimlane-ngx-datatable.js → esm2020/swimlane-ngx-datatable.mjs} +1 -1
  60. package/fesm2015/{swimlane-ngx-datatable.js → swimlane-ngx-datatable.mjs} +4104 -3337
  61. package/fesm2015/swimlane-ngx-datatable.mjs.map +1 -0
  62. package/fesm2020/swimlane-ngx-datatable.mjs +5974 -0
  63. package/fesm2020/swimlane-ngx-datatable.mjs.map +1 -0
  64. package/lib/components/body/body-cell.component.d.ts +3 -0
  65. package/lib/components/body/body-group-header-template.directive.d.ts +3 -0
  66. package/lib/components/body/body-group-header.directive.d.ts +3 -0
  67. package/lib/components/body/body-row-wrapper.component.d.ts +3 -0
  68. package/lib/components/body/body-row.component.d.ts +3 -0
  69. package/lib/components/body/body.component.d.ts +3 -0
  70. package/lib/components/body/progress-bar.component.d.ts +3 -0
  71. package/lib/components/body/scroller.component.d.ts +3 -0
  72. package/lib/components/body/selection.component.d.ts +3 -0
  73. package/lib/components/body/summary/summary-row.component.d.ts +3 -0
  74. package/lib/components/columns/column-cell.directive.d.ts +3 -0
  75. package/lib/components/columns/column-header.directive.d.ts +3 -0
  76. package/lib/components/columns/column.directive.d.ts +3 -0
  77. package/lib/components/columns/tree.directive.d.ts +3 -0
  78. package/lib/components/datatable.component.d.ts +3 -0
  79. package/lib/components/footer/footer-template.directive.d.ts +3 -0
  80. package/lib/components/footer/footer.component.d.ts +3 -0
  81. package/lib/components/footer/footer.directive.d.ts +3 -0
  82. package/lib/components/footer/pager.component.d.ts +3 -0
  83. package/lib/components/header/header-cell.component.d.ts +3 -0
  84. package/lib/components/header/header.component.d.ts +3 -0
  85. package/lib/components/row-detail/row-detail-template.directive.d.ts +3 -0
  86. package/lib/components/row-detail/row-detail.directive.d.ts +3 -0
  87. package/lib/directives/draggable.directive.d.ts +3 -0
  88. package/lib/directives/long-press.directive.d.ts +3 -0
  89. package/lib/directives/orderable.directive.d.ts +3 -0
  90. package/lib/directives/resizeable.directive.d.ts +3 -0
  91. package/lib/directives/visibility.directive.d.ts +3 -0
  92. package/lib/ngx-datatable.module.d.ts +33 -0
  93. package/lib/services/column-changes.service.d.ts +3 -0
  94. package/lib/services/dimensions-helper.service.d.ts +3 -0
  95. package/lib/services/scrollbar-helper.service.d.ts +3 -0
  96. package/package.json +24 -12
  97. package/swimlane-ngx-datatable.d.ts +1 -0
  98. package/bundles/swimlane-ngx-datatable.umd.js +0 -5876
  99. package/bundles/swimlane-ngx-datatable.umd.js.map +0 -1
  100. package/bundles/swimlane-ngx-datatable.umd.min.js +0 -2
  101. package/bundles/swimlane-ngx-datatable.umd.min.js.map +0 -1
  102. package/esm2015/lib/components/body/body-cell.component.js +0 -361
  103. package/esm2015/lib/components/body/body-group-header-template.directive.js +0 -15
  104. package/esm2015/lib/components/body/body-group-header.directive.js +0 -54
  105. package/esm2015/lib/components/body/body-row-wrapper.component.js +0 -106
  106. package/esm2015/lib/components/body/body-row.component.js +0 -212
  107. package/esm2015/lib/components/body/body.component.js +0 -713
  108. package/esm2015/lib/components/body/progress-bar.component.js +0 -17
  109. package/esm2015/lib/components/body/scroller.component.js +0 -83
  110. package/esm2015/lib/components/body/selection.component.js +0 -140
  111. package/esm2015/lib/components/body/summary/summary-row.component.js +0 -81
  112. package/esm2015/lib/components/columns/column-cell.directive.js +0 -13
  113. package/esm2015/lib/components/columns/column-header.directive.js +0 -13
  114. package/esm2015/lib/components/columns/column.directive.js +0 -65
  115. package/esm2015/lib/components/columns/tree.directive.js +0 -13
  116. package/esm2015/lib/components/datatable.component.js +0 -925
  117. package/esm2015/lib/components/footer/footer-template.directive.js +0 -13
  118. package/esm2015/lib/components/footer/footer.component.js +0 -75
  119. package/esm2015/lib/components/footer/footer.directive.js +0 -22
  120. package/esm2015/lib/components/footer/pager.component.js +0 -136
  121. package/esm2015/lib/components/header/header-cell.component.js +0 -191
  122. package/esm2015/lib/components/header/header.component.js +0 -295
  123. package/esm2015/lib/components/row-detail/row-detail-template.directive.js +0 -15
  124. package/esm2015/lib/components/row-detail/row-detail.directive.js +0 -55
  125. package/esm2015/lib/directives/draggable.directive.js +0 -102
  126. package/esm2015/lib/directives/long-press.directive.js +0 -103
  127. package/esm2015/lib/directives/orderable.directive.js +0 -131
  128. package/esm2015/lib/directives/resizeable.directive.js +0 -89
  129. package/esm2015/lib/directives/visibility.directive.js +0 -62
  130. package/esm2015/lib/events.js +0 -7
  131. package/esm2015/lib/ngx-datatable.module.js +0 -96
  132. package/esm2015/lib/services/column-changes.service.js +0 -21
  133. package/esm2015/lib/services/dimensions-helper.service.js +0 -14
  134. package/esm2015/lib/services/scrollbar-helper.service.js +0 -34
  135. package/esm2015/lib/types/click.type.js +0 -6
  136. package/esm2015/lib/types/column-mode.type.js +0 -7
  137. package/esm2015/lib/types/contextmenu.type.js +0 -6
  138. package/esm2015/lib/types/selection.type.js +0 -9
  139. package/esm2015/lib/types/sort-direction.type.js +0 -6
  140. package/esm2015/lib/types/sort-prop-dir.type.js +0 -2
  141. package/esm2015/lib/types/sort.type.js +0 -6
  142. package/esm2015/lib/types/table-column.type.js +0 -2
  143. package/esm2015/lib/utils/camel-case.js +0 -28
  144. package/esm2015/lib/utils/column-helper.js +0 -95
  145. package/esm2015/lib/utils/column-prop-getters.js +0 -96
  146. package/esm2015/lib/utils/column.js +0 -69
  147. package/esm2015/lib/utils/elm-from-point.js +0 -38
  148. package/esm2015/lib/utils/id.js +0 -8
  149. package/esm2015/lib/utils/keys.js +0 -10
  150. package/esm2015/lib/utils/math.js +0 -146
  151. package/esm2015/lib/utils/prefixes.js +0 -40
  152. package/esm2015/lib/utils/row-height-cache.js +0 -138
  153. package/esm2015/lib/utils/selection.js +0 -40
  154. package/esm2015/lib/utils/sort.js +0 -127
  155. package/esm2015/lib/utils/throttle.js +0 -60
  156. package/esm2015/lib/utils/translate.js +0 -25
  157. package/esm2015/lib/utils/tree.js +0 -103
  158. package/fesm2015/swimlane-ngx-datatable.js.map +0 -1
  159. package/swimlane-ngx-datatable.metadata.json +0 -1
@@ -0,0 +1,146 @@
1
+ import { columnsByPin, columnsTotalWidth } from './column';
2
+ /**
3
+ * Calculates the Total Flex Grow
4
+ */
5
+ export function getTotalFlexGrow(columns) {
6
+ let totalFlexGrow = 0;
7
+ for (const c of columns) {
8
+ totalFlexGrow += c.flexGrow || 0;
9
+ }
10
+ return totalFlexGrow;
11
+ }
12
+ /**
13
+ * Adjusts the column widths.
14
+ * Inspired by: https://github.com/facebook/fixed-data-table/blob/master/src/FixedDataTableWidthHelper.js
15
+ */
16
+ export function adjustColumnWidths(allColumns, expectedWidth) {
17
+ const columnsWidth = columnsTotalWidth(allColumns);
18
+ const totalFlexGrow = getTotalFlexGrow(allColumns);
19
+ const colsByGroup = columnsByPin(allColumns);
20
+ if (columnsWidth !== expectedWidth) {
21
+ scaleColumns(colsByGroup, expectedWidth, totalFlexGrow);
22
+ }
23
+ }
24
+ /**
25
+ * Resizes columns based on the flexGrow property, while respecting manually set widths
26
+ */
27
+ function scaleColumns(colsByGroup, maxWidth, totalFlexGrow) {
28
+ // calculate total width and flexgrow points for coulumns that can be resized
29
+ for (const attr in colsByGroup) {
30
+ for (const column of colsByGroup[attr]) {
31
+ if (!column.canAutoResize) {
32
+ maxWidth -= column.width;
33
+ totalFlexGrow -= column.flexGrow ? column.flexGrow : 0;
34
+ }
35
+ else {
36
+ column.width = 0;
37
+ }
38
+ }
39
+ }
40
+ const hasMinWidth = {};
41
+ let remainingWidth = maxWidth;
42
+ // resize columns until no width is left to be distributed
43
+ do {
44
+ const widthPerFlexPoint = remainingWidth / totalFlexGrow;
45
+ remainingWidth = 0;
46
+ for (const attr in colsByGroup) {
47
+ for (const column of colsByGroup[attr]) {
48
+ // if the column can be resize and it hasn't reached its minimum width yet
49
+ if (column.canAutoResize && !hasMinWidth[column.prop]) {
50
+ const newWidth = column.width + column.flexGrow * widthPerFlexPoint;
51
+ if (column.minWidth !== undefined && newWidth < column.minWidth) {
52
+ remainingWidth += newWidth - column.minWidth;
53
+ column.width = column.minWidth;
54
+ hasMinWidth[column.prop] = true;
55
+ }
56
+ else {
57
+ column.width = newWidth;
58
+ }
59
+ }
60
+ }
61
+ }
62
+ } while (remainingWidth !== 0);
63
+ }
64
+ /**
65
+ * Forces the width of the columns to
66
+ * distribute equally but overflowing when necessary
67
+ *
68
+ * Rules:
69
+ *
70
+ * - If combined withs are less than the total width of the grid,
71
+ * proportion the widths given the min / max / normal widths to fill the width.
72
+ *
73
+ * - If the combined widths, exceed the total width of the grid,
74
+ * use the standard widths.
75
+ *
76
+ * - If a column is resized, it should always use that width
77
+ *
78
+ * - The proportional widths should never fall below min size if specified.
79
+ *
80
+ * - If the grid starts off small but then becomes greater than the size ( + / - )
81
+ * the width should use the original width; not the newly proportioned widths.
82
+ */
83
+ export function forceFillColumnWidths(allColumns, expectedWidth, startIdx, allowBleed, defaultColWidth = 300) {
84
+ const columnsToResize = allColumns.slice(startIdx + 1, allColumns.length).filter(c => {
85
+ return c.canAutoResize !== false;
86
+ });
87
+ for (const column of columnsToResize) {
88
+ if (!column.$$oldWidth) {
89
+ column.$$oldWidth = column.width;
90
+ }
91
+ }
92
+ let additionWidthPerColumn = 0;
93
+ let exceedsWindow = false;
94
+ let contentWidth = getContentWidth(allColumns, defaultColWidth);
95
+ let remainingWidth = expectedWidth - contentWidth;
96
+ const columnsProcessed = [];
97
+ const remainingWidthLimit = 1; // when to stop
98
+ // This loop takes care of the
99
+ do {
100
+ additionWidthPerColumn = remainingWidth / columnsToResize.length;
101
+ exceedsWindow = contentWidth >= expectedWidth;
102
+ for (const column of columnsToResize) {
103
+ if (exceedsWindow && allowBleed) {
104
+ column.width = column.$$oldWidth || column.width || defaultColWidth;
105
+ }
106
+ else {
107
+ const newSize = (column.width || defaultColWidth) + additionWidthPerColumn;
108
+ if (column.minWidth && newSize < column.minWidth) {
109
+ column.width = column.minWidth;
110
+ columnsProcessed.push(column);
111
+ }
112
+ else if (column.maxWidth && newSize > column.maxWidth) {
113
+ column.width = column.maxWidth;
114
+ columnsProcessed.push(column);
115
+ }
116
+ else {
117
+ column.width = newSize;
118
+ }
119
+ }
120
+ column.width = Math.max(0, column.width);
121
+ }
122
+ contentWidth = getContentWidth(allColumns);
123
+ remainingWidth = expectedWidth - contentWidth;
124
+ removeProcessedColumns(columnsToResize, columnsProcessed);
125
+ } while (remainingWidth > remainingWidthLimit && columnsToResize.length !== 0);
126
+ }
127
+ /**
128
+ * Remove the processed columns from the current active columns.
129
+ */
130
+ function removeProcessedColumns(columnsToResize, columnsProcessed) {
131
+ for (const column of columnsProcessed) {
132
+ const index = columnsToResize.indexOf(column);
133
+ columnsToResize.splice(index, 1);
134
+ }
135
+ }
136
+ /**
137
+ * Gets the width of the columns
138
+ */
139
+ function getContentWidth(allColumns, defaultColWidth = 300) {
140
+ let contentWidth = 0;
141
+ for (const column of allColumns) {
142
+ contentWidth += column.width || defaultColWidth;
143
+ }
144
+ return contentWidth;
145
+ }
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N3aW1sYW5lL25neC1kYXRhdGFibGUvc3JjL2xpYi91dGlscy9tYXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFM0Q7O0dBRUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsT0FBYztJQUM3QyxJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7SUFFdEIsS0FBSyxNQUFNLENBQUMsSUFBSSxPQUFPLEVBQUU7UUFDdkIsYUFBYSxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDO0tBQ2xDO0lBRUQsT0FBTyxhQUFhLENBQUM7QUFDdkIsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxVQUFlLEVBQUUsYUFBa0I7SUFDcEUsTUFBTSxZQUFZLEdBQUcsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkQsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkQsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRTdDLElBQUksWUFBWSxLQUFLLGFBQWEsRUFBRTtRQUNsQyxZQUFZLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQztLQUN6RDtBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsWUFBWSxDQUFDLFdBQWdCLEVBQUUsUUFBYSxFQUFFLGFBQWtCO0lBQ3ZFLDZFQUE2RTtJQUM3RSxLQUFLLE1BQU0sSUFBSSxJQUFJLFdBQVcsRUFBRTtRQUM5QixLQUFLLE1BQU0sTUFBTSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN0QyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRTtnQkFDekIsUUFB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OUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDbEM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGVBQWUsQ0FBQyxVQUFlLEVBQUUsa0JBQTBCLEdBQUc7SUFDckUsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBRXJCLEtBQUssTUFBTSxNQUFNLElBQUksVUFBVSxFQUFFO1FBQy9CLFlBQVksSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLGVBQWUsQ0FBQztLQUNqRDtJQUVELE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2x1bW5zQnlQaW4sIGNvbHVtbnNUb3RhbFdpZHRoIH0gZnJvbSAnLi9jb2x1bW4nO1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIFRvdGFsIEZsZXggR3Jvd1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VG90YWxGbGV4R3Jvdyhjb2x1bW5zOiBhbnlbXSkge1xuICBsZXQgdG90YWxGbGV4R3JvdyA9IDA7XG5cbiAgZm9yIChjb25zdCBjIG9mIGNvbHVtbnMpIHtcbiAgICB0b3RhbEZsZXhHcm93ICs9IGMuZmxleEdyb3cgfHwgMDtcbiAgfVxuXG4gIHJldHVybiB0b3RhbEZsZXhHcm93O1xufVxuXG4vKipcbiAqIEFkanVzdHMgdGhlIGNvbHVtbiB3aWR0aHMuXG4gKiBJbnNwaXJlZCBieTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2ZpeGVkLWRhdGEtdGFibGUvYmxvYi9tYXN0ZXIvc3JjL0ZpeGVkRGF0YVRhYmxlV2lkdGhIZWxwZXIuanNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkanVzdENvbHVtbldpZHRocyhhbGxDb2x1bW5zOiBhbnksIGV4cGVjdGVkV2lkdGg6IGFueSkge1xuICBjb25zdCBjb2x1bW5zV2lkdGggPSBjb2x1bW5zVG90YWxXaWR0aChhbGxDb2x1bW5zKTtcbiAgY29uc3QgdG90YWxGbGV4R3JvdyA9IGdldFRvdGFsRmxleEdyb3coYWxsQ29sdW1ucyk7XG4gIGNvbnN0IGNvbHNCeUdyb3VwID0gY29sdW1uc0J5UGluKGFsbENvbHVtbnMpO1xuXG4gIGlmIChjb2x1bW5zV2lkdGggIT09IGV4cGVjdGVkV2lkdGgpIHtcbiAgICBzY2FsZUNvbHVtbnMoY29sc0J5R3JvdXAsIGV4cGVjdGVkV2lkdGgsIHRvdGFsRmxleEdyb3cpO1xuICB9XG59XG5cbi8qKlxuICogUmVzaXplcyBjb2x1bW5zIGJhc2VkIG9uIHRoZSBmbGV4R3JvdyBwcm9wZXJ0eSwgd2hpbGUgcmVzcGVjdGluZyBtYW51YWxseSBzZXQgd2lkdGhzXG4gKi9cbmZ1bmN0aW9uIHNjYWxlQ29sdW1ucyhjb2xzQnlHcm91cDogYW55LCBtYXhXaWR0aDogYW55LCB0b3RhbEZsZXhHcm93OiBhbnkpIHtcbiAgLy8gY2FsY3VsYXRlIHRvdGFsIHdpZHRoIGFuZCBmbGV4Z3JvdyBwb2ludHMgZm9yIGNvdWx1bW5zIHRoYXQgY2FuIGJlIHJlc2l6ZWRcbiAgZm9yIChjb25zdCBhdHRyIGluIGNvbHNCeUdyb3VwKSB7XG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sc0J5R3JvdXBbYXR0cl0pIHtcbiAgICAgIGlmICghY29sdW1uLmNhbkF1dG9SZXNpemUpIHtcbiAgICAgICAgbWF4V2lkdGggLT0gY29sdW1uLndpZHRoO1xuICAgICAgICB0b3RhbEZsZXhHcm93IC09IGNvbHVtbi5mbGV4R3JvdyA/IGNvbHVtbi5mbGV4R3JvdyA6IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2x1bW4ud2lkdGggPSAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhc01pbldpZHRoID0ge307XG4gIGxldCByZW1haW5pbmdXaWR0aCA9IG1heFdpZHRoO1xuXG4gIC8vIHJlc2l6ZSBjb2x1bW5zIHVudGlsIG5vIHdpZHRoIGlzIGxlZnQgdG8gYmUgZGlzdHJpYnV0ZWRcbiAgZG8ge1xuICAgIGNvbnN0IHdpZHRoUGVyRmxleFBvaW50ID0gcmVtYWluaW5nV2lkdGggLyB0b3RhbEZsZXhHcm93O1xuICAgIHJlbWFpbmluZ1dpZHRoID0gMDtcblxuICAgIGZvciAoY29uc3QgYXR0ciBpbiBjb2xzQnlHcm91cCkge1xuICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sc0J5R3JvdXBbYXR0cl0pIHtcbiAgICAgICAgLy8gaWYgdGhlIGNvbHVtbiBjYW4gYmUgcmVzaXplIGFuZCBpdCBoYXNuJ3QgcmVhY2hlZCBpdHMgbWluaW11bSB3aWR0aCB5ZXRcbiAgICAgICAgaWYgKGNvbHVtbi5jYW5BdXRvUmVzaXplICYmICFoYXNNaW5XaWR0aFtjb2x1bW4ucHJvcF0pIHtcbiAgICAgICAgICBjb25zdCBuZXdXaWR0aCA9IGNvbHVtbi53aWR0aCArIGNvbHVtbi5mbGV4R3JvdyAqIHdpZHRoUGVyRmxleFBvaW50O1xuICAgICAgICAgIGlmIChjb2x1bW4ubWluV2lkdGggIT09IHVuZGVmaW5lZCAmJiBuZXdXaWR0aCA8IGNvbHVtbi5taW5XaWR0aCkge1xuICAgICAgICAgICAgcmVtYWluaW5nV2lkdGggKz0gbmV3V2lkdGggLSBjb2x1bW4ubWluV2lkdGg7XG4gICAgICAgICAgICBjb2x1bW4ud2lkdGggPSBjb2x1bW4ubWluV2lkdGg7XG4gICAgICAgICAgICBoYXNNaW5XaWR0aFtjb2x1bW4ucHJvcF0gPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb2x1bW4ud2lkdGggPSBuZXdXaWR0aDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gd2hpbGUgKHJlbWFpbmluZ1dpZHRoICE9PSAwKTtcbn1cblxuLyoqXG4gKiBGb3JjZXMgdGhlIHdpZHRoIG9mIHRoZSBjb2x1bW5zIHRvXG4gKiBkaXN0cmlidXRlIGVxdWFsbHkgYnV0IG92ZXJmbG93aW5nIHdoZW4gbmVjZXNzYXJ5XG4gKlxuICogUnVsZXM6XG4gKlxuICogIC0gSWYgY29tYmluZWQgd2l0aHMgYXJlIGxlc3MgdGhhbiB0aGUgdG90YWwgd2lkdGggb2YgdGhlIGdyaWQsXG4gKiAgICBwcm9wb3J0aW9uIHRoZSB3aWR0aHMgZ2l2ZW4gdGhlIG1pbiAvIG1heCAvIG5vcm1hbCB3aWR0aHMgdG8gZmlsbCB0aGUgd2lkdGguXG4gKlxuICogIC0gSWYgdGhlIGNvbWJpbmVkIHdpZHRocywgZXhjZWVkIHRoZSB0b3RhbCB3aWR0aCBvZiB0aGUgZ3JpZCxcbiAqICAgIHVzZSB0aGUgc3RhbmRhcmQgd2lkdGhzLlxuICpcbiAqICAtIElmIGEgY29sdW1uIGlzIHJlc2l6ZWQsIGl0IHNob3VsZCBhbHdheXMgdXNlIHRoYXQgd2lkdGhcbiAqXG4gKiAgLSBUaGUgcHJvcG9ydGlvbmFsIHdpZHRocyBzaG91bGQgbmV2ZXIgZmFsbCBiZWxvdyBtaW4gc2l6ZSBpZiBzcGVjaWZpZWQuXG4gKlxuICogIC0gSWYgdGhlIGdyaWQgc3RhcnRzIG9mZiBzbWFsbCBidXQgdGhlbiBiZWNvbWVzIGdyZWF0ZXIgdGhhbiB0aGUgc2l6ZSAoICsgLyAtIClcbiAqICAgIHRoZSB3aWR0aCBzaG91bGQgdXNlIHRoZSBvcmlnaW5hbCB3aWR0aDsgbm90IHRoZSBuZXdseSBwcm9wb3J0aW9uZWQgd2lkdGhzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9yY2VGaWxsQ29sdW1uV2lkdGhzKFxuICBhbGxDb2x1bW5zOiBhbnlbXSxcbiAgZXhwZWN0ZWRXaWR0aDogbnVtYmVyLFxuICBzdGFydElkeDogbnVtYmVyLFxuICBhbGxvd0JsZWVkOiBib29sZWFuLFxuICBkZWZhdWx0Q29sV2lkdGg6IG51bWJlciA9IDMwMFxuKSB7XG4gIGNvbnN0IGNvbHVtbnNUb1Jlc2l6ZSA9IGFsbENvbHVtbnMuc2xpY2Uoc3RhcnRJZHggKyAxLCBhbGxDb2x1bW5zLmxlbmd0aCkuZmlsdGVyKGMgPT4ge1xuICAgIHJldHVybiBjLmNhbkF1dG9SZXNpemUgIT09IGZhbHNlO1xuICB9KTtcblxuICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zVG9SZXNpemUpIHtcbiAgICBpZiAoIWNvbHVtbi4kJG9sZFdpZHRoKSB7XG4gICAgICBjb2x1bW4uJCRvbGRXaWR0aCA9IGNvbHVtbi53aWR0aDtcbiAgICB9XG4gIH1cblxuICBsZXQgYWRkaXRpb25XaWR0aFBlckNvbHVtbiA9IDA7XG4gIGxldCBleGNlZWRzV2luZG93ID0gZmFsc2U7XG4gIGxldCBjb250ZW50V2lkdGggPSBnZXRDb250ZW50V2lkdGgoYWxsQ29sdW1ucywgZGVmYXVsdENvbFdpZHRoKTtcbiAgbGV0IHJlbWFpbmluZ1dpZHRoID0gZXhwZWN0ZWRXaWR0aCAtIGNvbnRlbnRXaWR0aDtcbiAgY29uc3QgY29sdW1uc1Byb2Nlc3NlZDogYW55W10gPSBbXTtcbiAgY29uc3QgcmVtYWluaW5nV2lkdGhMaW1pdCA9IDE7IC8vIHdoZW4gdG8gc3RvcFxuXG4gIC8vIFRoaXMgbG9vcCB0YWtlcyBjYXJlIG9mIHRoZVxuICBkbyB7XG4gICAgYWRkaXRpb25XaWR0aFBlckNvbHVtbiA9IHJlbWFpbmluZ1dpZHRoIC8gY29sdW1uc1RvUmVzaXplLmxlbmd0aDtcbiAgICBleGNlZWRzV2luZG93ID0gY29udGVudFdpZHRoID49IGV4cGVjdGVkV2lkdGg7XG5cbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zVG9SZXNpemUpIHtcbiAgICAgIGlmIChleGNlZWRzV2luZG93ICYmIGFsbG93QmxlZWQpIHtcbiAgICAgICAgY29sdW1uLndpZHRoID0gY29sdW1uLiQkb2xkV2lkdGggfHwgY29sdW1uLndpZHRoIHx8IGRlZmF1bHRDb2xXaWR0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG5ld1NpemUgPSAoY29sdW1uLndpZHRoIHx8IGRlZmF1bHRDb2xXaWR0aCkgKyBhZGRpdGlvbldpZHRoUGVyQ29sdW1uO1xuXG4gICAgICAgIGlmIChjb2x1bW4ubWluV2lkdGggJiYgbmV3U2l6ZSA8IGNvbHVtbi5taW5XaWR0aCkge1xuICAgICAgICAgIGNvbHVtbi53aWR0aCA9IGNvbHVtbi5taW5XaWR0aDtcbiAgICAgICAgICBjb2x1bW5zUHJvY2Vzc2VkLnB1c2goY29sdW1uKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4ubWF4V2lkdGggJiYgbmV3U2l6ZSA+IGNvbHVtbi5tYXhXaWR0aCkge1xuICAgICAgICAgIGNvbHVtbi53aWR0aCA9IGNvbHVtbi5tYXhXaWR0aDtcbiAgICAgICAgICBjb2x1bW5zUHJvY2Vzc2VkLnB1c2goY29sdW1uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2x1bW4ud2lkdGggPSBuZXdTaXplO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbHVtbi53aWR0aCA9IE1hdGgubWF4KDAsIGNvbHVtbi53aWR0aCk7XG4gICAgfVxuXG4gICAgY29udGVudFdpZHRoID0gZ2V0Q29udGVudFdpZHRoKGFsbENvbHVtbnMpO1xuICAgIHJlbWFpbmluZ1dpZHRoID0gZXhwZWN0ZWRXaWR0aCAtIGNvbnRlbnRXaWR0aDtcbiAgICByZW1vdmVQcm9jZXNzZWRDb2x1bW5zKGNvbHVtbnNUb1Jlc2l6ZSwgY29sdW1uc1Byb2Nlc3NlZCk7XG4gIH0gd2hpbGUgKHJlbWFpbmluZ1dpZHRoID4gcmVtYWluaW5nV2lkdGhMaW1pdCAmJiBjb2x1bW5zVG9SZXNpemUubGVuZ3RoICE9PSAwKTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgdGhlIHByb2Nlc3NlZCBjb2x1bW5zIGZyb20gdGhlIGN1cnJlbnQgYWN0aXZlIGNvbHVtbnMuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZVByb2Nlc3NlZENvbHVtbnMoY29sdW1uc1RvUmVzaXplOiBhbnlbXSwgY29sdW1uc1Byb2Nlc3NlZDogYW55W10pIHtcbiAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1uc1Byb2Nlc3NlZCkge1xuICAgIGNvbnN0IGluZGV4ID0gY29sdW1uc1RvUmVzaXplLmluZGV4T2YoY29sdW1uKTtcbiAgICBjb2x1bW5zVG9SZXNpemUuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxufVxuXG4vKipcbiAqIEdldHMgdGhlIHdpZHRoIG9mIHRoZSBjb2x1bW5zXG4gKi9cbmZ1bmN0aW9uIGdldENvbnRlbnRXaWR0aChhbGxDb2x1bW5zOiBhbnksIGRlZmF1bHRDb2xXaWR0aDogbnVtYmVyID0gMzAwKTogbnVtYmVyIHtcbiAgbGV0IGNvbnRlbnRXaWR0aCA9IDA7XG5cbiAgZm9yIChjb25zdCBjb2x1bW4gb2YgYWxsQ29sdW1ucykge1xuICAgIGNvbnRlbnRXaWR0aCArPSBjb2x1bW4ud2lkdGggfHwgZGVmYXVsdENvbFdpZHRoO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnRXaWR0aDtcbn1cbiJdfQ==
@@ -0,0 +1,38 @@
1
+ import { camelCase } from './camel-case';
2
+ const cache = {};
3
+ const testStyle = typeof document !== 'undefined' ? document.createElement('div').style : undefined;
4
+ // Get Prefix
5
+ // http://davidwalsh.name/vendor-prefix
6
+ const prefix = (function () {
7
+ const styles = typeof window !== 'undefined' ? window.getComputedStyle(document.documentElement, '') : undefined;
8
+ const match = typeof styles !== 'undefined'
9
+ ? Array.prototype.slice
10
+ .call(styles)
11
+ .join('')
12
+ .match(/-(moz|webkit|ms)-/)
13
+ : null;
14
+ const pre = match !== null ? match[1] : undefined;
15
+ // tslint:disable-next-line: tsr-detect-non-literal-regexp
16
+ const dom = typeof pre !== 'undefined' ? 'WebKit|Moz|MS|O'.match(new RegExp('(' + pre + ')', 'i'))[1] : undefined;
17
+ return dom
18
+ ? {
19
+ dom,
20
+ lowercase: pre,
21
+ css: `-${pre}-`,
22
+ js: pre[0].toUpperCase() + pre.substr(1)
23
+ }
24
+ : undefined;
25
+ })();
26
+ export function getVendorPrefixedName(property) {
27
+ const name = camelCase(property);
28
+ if (!cache[name]) {
29
+ if (prefix !== undefined && testStyle[prefix.css + property] !== undefined) {
30
+ cache[name] = prefix.css + property;
31
+ }
32
+ else if (testStyle[property] !== undefined) {
33
+ cache[name] = property;
34
+ }
35
+ }
36
+ return cache[name];
37
+ }
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlZml4ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zd2ltbGFuZS9uZ3gtZGF0YXRhYmxlL3NyYy9saWIvdXRpbHMvcHJlZml4ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV6QyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDakIsTUFBTSxTQUFTLEdBQUcsT0FBTyxRQUFRLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBRXBHLGFBQWE7QUFDYix1Q0FBdUM7QUFDdkMsTUFBTSxNQUFNLEdBQUcsQ0FBQztJQUNkLE1BQU0sTUFBTSxHQUFHLE9BQU8sTUFBTSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNqSCxNQUFNLEtBQUssR0FDVCxPQUFPLE1BQU0sS0FBSyxXQUFXO1FBQzNCLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUs7YUFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQzthQUNaLElBQUksQ0FBQyxFQUFFLENBQUM7YUFDUixLQUFLLENBQUMsbUJBQW1CLENBQUM7UUFDL0IsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNYLE1BQU0sR0FBRyxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2xELDBEQUEwRDtJQUMxRCxNQUFNLEdBQUcsR0FBRyxPQUFPLEdBQUcsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFFbEgsT0FBTyxHQUFHO1FBQ1IsQ0FBQyxDQUFDO1lBQ0UsR0FBRztZQUNILFNBQVMsRUFBRSxHQUFHO1lBQ2QsR0FBRyxFQUFFLElBQUksR0FBRyxHQUFHO1lBQ2YsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUN6QztRQUNILENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDaEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUVMLE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxRQUFnQjtJQUNwRCxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNoQixJQUFJLE1BQU0sS0FBSyxTQUFTLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssU0FBUyxFQUFFO1lBQzFFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQztTQUNyQzthQUFNLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLFNBQVMsRUFBRTtZQUM1QyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDO1NBQ3hCO0tBQ0Y7SUFFRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2FtZWxDYXNlIH0gZnJvbSAnLi9jYW1lbC1jYXNlJztcblxuY29uc3QgY2FjaGUgPSB7fTtcbmNvbnN0IHRlc3RTdHlsZSA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5zdHlsZSA6IHVuZGVmaW5lZDtcblxuLy8gR2V0IFByZWZpeFxuLy8gaHR0cDovL2Rhdmlkd2Fsc2gubmFtZS92ZW5kb3ItcHJlZml4XG5jb25zdCBwcmVmaXggPSAoZnVuY3Rpb24gKCkge1xuICBjb25zdCBzdHlsZXMgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgJycpIDogdW5kZWZpbmVkO1xuICBjb25zdCBtYXRjaCA9XG4gICAgdHlwZW9mIHN0eWxlcyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgID8gQXJyYXkucHJvdG90eXBlLnNsaWNlXG4gICAgICAgICAgLmNhbGwoc3R5bGVzKVxuICAgICAgICAgIC5qb2luKCcnKVxuICAgICAgICAgIC5tYXRjaCgvLShtb3p8d2Via2l0fG1zKS0vKVxuICAgICAgOiBudWxsO1xuICBjb25zdCBwcmUgPSBtYXRjaCAhPT0gbnVsbCA/IG1hdGNoWzFdIDogdW5kZWZpbmVkO1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IHRzci1kZXRlY3Qtbm9uLWxpdGVyYWwtcmVnZXhwXG4gIGNvbnN0IGRvbSA9IHR5cGVvZiBwcmUgIT09ICd1bmRlZmluZWQnID8gJ1dlYktpdHxNb3p8TVN8TycubWF0Y2gobmV3IFJlZ0V4cCgnKCcgKyBwcmUgKyAnKScsICdpJykpWzFdIDogdW5kZWZpbmVkO1xuXG4gIHJldHVybiBkb21cbiAgICA/IHtcbiAgICAgICAgZG9tLFxuICAgICAgICBsb3dlcmNhc2U6IHByZSxcbiAgICAgICAgY3NzOiBgLSR7cHJlfS1gLFxuICAgICAgICBqczogcHJlWzBdLnRvVXBwZXJDYXNlKCkgKyBwcmUuc3Vic3RyKDEpXG4gICAgICB9XG4gICAgOiB1bmRlZmluZWQ7XG59KSgpO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmVuZG9yUHJlZml4ZWROYW1lKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgY29uc3QgbmFtZSA9IGNhbWVsQ2FzZShwcm9wZXJ0eSk7XG5cbiAgaWYgKCFjYWNoZVtuYW1lXSkge1xuICAgIGlmIChwcmVmaXggIT09IHVuZGVmaW5lZCAmJiB0ZXN0U3R5bGVbcHJlZml4LmNzcyArIHByb3BlcnR5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjYWNoZVtuYW1lXSA9IHByZWZpeC5jc3MgKyBwcm9wZXJ0eTtcbiAgICB9IGVsc2UgaWYgKHRlc3RTdHlsZVtwcm9wZXJ0eV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2FjaGVbbmFtZV0gPSBwcm9wZXJ0eTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2FjaGVbbmFtZV07XG59XG4iXX0=
@@ -0,0 +1,138 @@
1
+ /**
2
+ * This object contains the cache of the various row heights that are present inside
3
+ * the data table. Its based on Fenwick tree data structure that helps with
4
+ * querying sums that have time complexity of log n.
5
+ *
6
+ * Fenwick Tree Credits: http://petr-mitrichev.blogspot.com/2013/05/fenwick-tree-range-updates.html
7
+ * https://github.com/mikolalysenko/fenwick-tree
8
+ *
9
+ */
10
+ export class RowHeightCache {
11
+ constructor() {
12
+ /**
13
+ * Tree Array stores the cumulative information of the row heights to perform efficient
14
+ * range queries and updates. Currently the tree is initialized to the base row
15
+ * height instead of the detail row height.
16
+ */
17
+ this.treeArray = [];
18
+ }
19
+ /**
20
+ * Clear the Tree array.
21
+ */
22
+ clearCache() {
23
+ this.treeArray = [];
24
+ }
25
+ /**
26
+ * Initialize the Fenwick tree with row Heights.
27
+ *
28
+ * @param rows The array of rows which contain the expanded status.
29
+ * @param rowHeight The row height.
30
+ * @param detailRowHeight The detail row height.
31
+ */
32
+ initCache(details) {
33
+ const { rows, rowHeight, detailRowHeight, externalVirtual, rowCount, rowIndexes, rowExpansions } = details;
34
+ const isFn = typeof rowHeight === 'function';
35
+ const isDetailFn = typeof detailRowHeight === 'function';
36
+ if (!isFn && isNaN(rowHeight)) {
37
+ throw new Error(`Row Height cache initialization failed. Please ensure that 'rowHeight' is a
38
+ valid number or function value: (${rowHeight}) when 'scrollbarV' is enabled.`);
39
+ }
40
+ // Add this additional guard in case detailRowHeight is set to 'auto' as it wont work.
41
+ if (!isDetailFn && isNaN(detailRowHeight)) {
42
+ throw new Error(`Row Height cache initialization failed. Please ensure that 'detailRowHeight' is a
43
+ valid number or function value: (${detailRowHeight}) when 'scrollbarV' is enabled.`);
44
+ }
45
+ const n = externalVirtual ? rowCount : rows.length;
46
+ this.treeArray = new Array(n);
47
+ for (let i = 0; i < n; ++i) {
48
+ this.treeArray[i] = 0;
49
+ }
50
+ for (let i = 0; i < n; ++i) {
51
+ const row = rows[i];
52
+ let currentRowHeight = rowHeight;
53
+ if (isFn) {
54
+ currentRowHeight = rowHeight(row);
55
+ }
56
+ // Add the detail row height to the already expanded rows.
57
+ // This is useful for the table that goes through a filter or sort.
58
+ const expanded = rowExpansions.has(row);
59
+ if (row && expanded) {
60
+ if (isDetailFn) {
61
+ const index = rowIndexes.get(row);
62
+ currentRowHeight += detailRowHeight(row, index);
63
+ }
64
+ else {
65
+ currentRowHeight += detailRowHeight;
66
+ }
67
+ }
68
+ this.update(i, currentRowHeight);
69
+ }
70
+ }
71
+ /**
72
+ * Given the ScrollY position i.e. sum, provide the rowIndex
73
+ * that is present in the current view port. Below handles edge cases.
74
+ */
75
+ getRowIndex(scrollY) {
76
+ if (scrollY === 0)
77
+ return 0;
78
+ return this.calcRowIndex(scrollY);
79
+ }
80
+ /**
81
+ * When a row is expanded or rowHeight is changed, update the height. This can
82
+ * be utilized in future when Angular Data table supports dynamic row heights.
83
+ */
84
+ update(atRowIndex, byRowHeight) {
85
+ if (!this.treeArray.length) {
86
+ throw new Error(`Update at index ${atRowIndex} with value ${byRowHeight} failed:
87
+ Row Height cache not initialized.`);
88
+ }
89
+ const n = this.treeArray.length;
90
+ atRowIndex |= 0;
91
+ while (atRowIndex < n) {
92
+ this.treeArray[atRowIndex] += byRowHeight;
93
+ atRowIndex |= atRowIndex + 1;
94
+ }
95
+ }
96
+ /**
97
+ * Range Sum query from 1 to the rowIndex
98
+ */
99
+ query(atIndex) {
100
+ if (!this.treeArray.length) {
101
+ throw new Error(`query at index ${atIndex} failed: Fenwick tree array not initialized.`);
102
+ }
103
+ let sum = 0;
104
+ atIndex |= 0;
105
+ while (atIndex >= 0) {
106
+ sum += this.treeArray[atIndex];
107
+ atIndex = (atIndex & (atIndex + 1)) - 1;
108
+ }
109
+ return sum;
110
+ }
111
+ /**
112
+ * Find the total height between 2 row indexes
113
+ */
114
+ queryBetween(atIndexA, atIndexB) {
115
+ return this.query(atIndexB) - this.query(atIndexA - 1);
116
+ }
117
+ /**
118
+ * Given the ScrollY position i.e. sum, provide the rowIndex
119
+ * that is present in the current view port.
120
+ */
121
+ calcRowIndex(sum) {
122
+ if (!this.treeArray.length)
123
+ return 0;
124
+ let pos = -1;
125
+ const dataLength = this.treeArray.length;
126
+ // Get the highest bit for the block size.
127
+ const highestBit = Math.pow(2, dataLength.toString(2).length - 1);
128
+ for (let blockSize = highestBit; blockSize !== 0; blockSize >>= 1) {
129
+ const nextPos = pos + blockSize;
130
+ if (nextPos < dataLength && sum >= this.treeArray[nextPos]) {
131
+ sum -= this.treeArray[nextPos];
132
+ pos = nextPos;
133
+ }
134
+ }
135
+ return pos + 1;
136
+ }
137
+ }
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LWhlaWdodC1jYWNoZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N3aW1sYW5lL25neC1kYXRhdGFibGUvc3JjL2xpYi91dGlscy9yb3ctaGVpZ2h0LWNhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFBM0I7UUFDRTs7OztXQUlHO1FBQ0ssY0FBUyxHQUFhLEVBQUUsQ0FBQztJQTJJbkMsQ0FBQztJQXpJQzs7T0FFRztJQUNILFVBQVU7UUFDUixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsU0FBUyxDQUFDLE9BQVk7UUFDcEIsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUMzRyxNQUFNLElBQUksR0FBRyxPQUFPLFNBQVMsS0FBSyxVQUFVLENBQUM7UUFDN0MsTUFBTSxVQUFVLEdBQUcsT0FBTyxlQUFlLEtBQUssVUFBVSxDQUFDO1FBRXpELElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUM7MkNBQ3FCLFNBQVMsaUNBQWlDLENBQUMsQ0FBQztTQUNsRjtRQUVELHNGQUFzRjtRQUN0RixJQUFJLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUN6QyxNQUFNLElBQUksS0FBSyxDQUFDOzJDQUNxQixlQUFlLGlDQUFpQyxDQUFDLENBQUM7U0FDeEY7UUFFRCxNQUFNLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNuRCxJQUFJLENBQUMs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O0lBQ0ssWUFBWSxDQUFDLEdBQVc7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTTtZQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRXJDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFFekMsMENBQTBDO1FBQzFDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRWxFLEtBQUssSUFBSSxTQUFTLEdBQUcsVUFBVSxFQUFFLFNBQVMsS0FBSyxDQUFDLEVBQUUsU0FBUyxLQUFLLENBQUMsRUFBRTtZQUNqRSxNQUFNLE9BQU8sR0FBRyxHQUFHLEdBQUcsU0FBUyxDQUFDO1lBQ2hDLElBQUksT0FBTyxHQUFHLFVBQVUsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDMUQsR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQy9CLEdBQUcsR0FBRyxPQUFPLENBQUM7YUFDZjtTQUNGO1FBRUQsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBvYmplY3QgY29udGFpbnMgdGhlIGNhY2hlIG9mIHRoZSB2YXJpb3VzIHJvdyBoZWlnaHRzIHRoYXQgYXJlIHByZXNlbnQgaW5zaWRlXG4gKiB0aGUgZGF0YSB0YWJsZS4gICBJdHMgYmFzZWQgb24gRmVud2ljayB0cmVlIGRhdGEgc3RydWN0dXJlIHRoYXQgaGVscHMgd2l0aFxuICogcXVlcnlpbmcgc3VtcyB0aGF0IGhhdmUgdGltZSBjb21wbGV4aXR5IG9mIGxvZyBuLlxuICpcbiAqIEZlbndpY2sgVHJlZSBDcmVkaXRzOiBodHRwOi8vcGV0ci1taXRyaWNoZXYuYmxvZ3Nwb3QuY29tLzIwMTMvMDUvZmVud2ljay10cmVlLXJhbmdlLXVwZGF0ZXMuaHRtbFxuICogaHR0cHM6Ly9naXRodWIuY29tL21pa29sYWx5c2Vua28vZmVud2ljay10cmVlXG4gKlxuICovXG5leHBvcnQgY2xhc3MgUm93SGVpZ2h0Q2FjaGUge1xuICAvKipcbiAgICogVHJlZSBBcnJheSBzdG9yZXMgdGhlIGN1bXVsYXRpdmUgaW5mb3JtYXRpb24gb2YgdGhlIHJvdyBoZWlnaHRzIHRvIHBlcmZvcm0gZWZmaWNpZW50XG4gICAqIHJhbmdlIHF1ZXJpZXMgYW5kIHVwZGF0ZXMuICBDdXJyZW50bHkgdGhlIHRyZWUgaXMgaW5pdGlhbGl6ZWQgdG8gdGhlIGJhc2Ugcm93XG4gICAqIGhlaWdodCBpbnN0ZWFkIG9mIHRoZSBkZXRhaWwgcm93IGhlaWdodC5cbiAgICovXG4gIHByaXZhdGUgdHJlZUFycmF5OiBudW1iZXJbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBDbGVhciB0aGUgVHJlZSBhcnJheS5cbiAgICovXG4gIGNsZWFyQ2FjaGUoKTogdm9pZCB7XG4gICAgdGhpcy50cmVlQXJyYXkgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBGZW53aWNrIHRyZWUgd2l0aCByb3cgSGVpZ2h0cy5cbiAgICpcbiAgICogQHBhcmFtIHJvd3MgVGhlIGFycmF5IG9mIHJvd3Mgd2hpY2ggY29udGFpbiB0aGUgZXhwYW5kZWQgc3RhdHVzLlxuICAgKiBAcGFyYW0gcm93SGVpZ2h0IFRoZSByb3cgaGVpZ2h0LlxuICAgKiBAcGFyYW0gZGV0YWlsUm93SGVpZ2h0IFRoZSBkZXRhaWwgcm93IGhlaWdodC5cbiAgICovXG4gIGluaXRDYWNoZShkZXRhaWxzOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCB7IHJvd3MsIHJvd0hlaWdodCwgZGV0YWlsUm93SGVpZ2h0LCBleHRlcm5hbFZpcnR1YWwsIHJvd0NvdW50LCByb3dJbmRleGVzLCByb3dFeHBhbnNpb25zIH0gPSBkZXRhaWxzO1xuICAgIGNvbnN0IGlzRm4gPSB0eXBlb2Ygcm93SGVpZ2h0ID09PSAnZnVuY3Rpb24nO1xuICAgIGNvbnN0IGlzRGV0YWlsRm4gPSB0eXBlb2YgZGV0YWlsUm93SGVpZ2h0ID09PSAnZnVuY3Rpb24nO1xuXG4gICAgaWYgKCFpc0ZuICYmIGlzTmFOKHJvd0hlaWdodCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUm93IEhlaWdodCBjYWNoZSBpbml0aWFsaXphdGlvbiBmYWlsZWQuIFBsZWFzZSBlbnN1cmUgdGhhdCAncm93SGVpZ2h0JyBpcyBhXG4gICAgICAgIHZhbGlkIG51bWJlciBvciBmdW5jdGlvbiB2YWx1ZTogKCR7cm93SGVpZ2h0fSkgd2hlbiAnc2Nyb2xsYmFyVicgaXMgZW5hYmxlZC5gKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgdGhpcyBhZGRpdGlvbmFsIGd1YXJkIGluIGNhc2UgZGV0YWlsUm93SGVpZ2h0IGlzIHNldCB0byAnYXV0bycgYXMgaXQgd29udCB3b3JrLlxuICAgIGlmICghaXNEZXRhaWxGbiAmJiBpc05hTihkZXRhaWxSb3dIZWlnaHQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFJvdyBIZWlnaHQgY2FjaGUgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiBQbGVhc2UgZW5zdXJlIHRoYXQgJ2RldGFpbFJvd0hlaWdodCcgaXMgYVxuICAgICAgICB2YWxpZCBudW1iZXIgb3IgZnVuY3Rpb24gdmFsdWU6ICgke2RldGFpbFJvd0hlaWdodH0pIHdoZW4gJ3Njcm9sbGJhclYnIGlzIGVuYWJsZWQuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgbiA9IGV4dGVybmFsVmlydHVhbCA/IHJvd0NvdW50IDogcm93cy5sZW5ndGg7XG4gICAgdGhpcy50cmVlQXJyYXkgPSBuZXcgQXJyYXkobik7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgdGhpcy50cmVlQXJyYXlbaV0gPSAwO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBjb25zdCByb3cgPSByb3dzW2ldO1xuICAgICAgbGV0IGN1cnJlbnRSb3dIZWlnaHQgPSByb3dIZWlnaHQ7XG4gICAgICBpZiAoaXNGbikge1xuICAgICAgICBjdXJyZW50Um93SGVpZ2h0ID0gcm93SGVpZ2h0KHJvdyk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCB0aGUgZGV0YWlsIHJvdyBoZWlnaHQgdG8gdGhlIGFscmVhZHkgZXhwYW5kZWQgcm93cy5cbiAgICAgIC8vIFRoaXMgaXMgdXNlZnVsIGZvciB0aGUgdGFibGUgdGhhdCBnb2VzIHRocm91Z2ggYSBmaWx0ZXIgb3Igc29ydC5cbiAgICAgIGNvbnN0IGV4cGFuZGVkID0gcm93RXhwYW5zaW9ucy5oYXMocm93KTtcbiAgICAgIGlmIChyb3cgJiYgZXhwYW5kZWQpIHtcbiAgICAgICAgaWYgKGlzRGV0YWlsRm4pIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHJvd0luZGV4ZXMuZ2V0KHJvdyk7XG4gICAgICAgICAgY3VycmVudFJvd0hlaWdodCArPSBkZXRhaWxSb3dIZWlnaHQocm93LCBpbmRleCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VycmVudFJvd0hlaWdodCArPSBkZXRhaWxSb3dIZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy51cGRhdGUoaSwgY3VycmVudFJvd0hlaWdodCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIHRoZSBTY3JvbGxZIHBvc2l0aW9uIGkuZS4gc3VtLCBwcm92aWRlIHRoZSByb3dJbmRleFxuICAgKiB0aGF0IGlzIHByZXNlbnQgaW4gdGhlIGN1cnJlbnQgdmlldyBwb3J0LiAgQmVsb3cgaGFuZGxlcyBlZGdlIGNhc2VzLlxuICAgKi9cbiAgZ2V0Um93SW5kZXgoc2Nyb2xsWTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAoc2Nyb2xsWSA9PT0gMCkgcmV0dXJuIDA7XG4gICAgcmV0dXJuIHRoaXMuY2FsY1Jvd0luZGV4KHNjcm9sbFkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gYSByb3cgaXMgZXhwYW5kZWQgb3Igcm93SGVpZ2h0IGlzIGNoYW5nZWQsIHVwZGF0ZSB0aGUgaGVpZ2h0LiAgVGhpcyBjYW5cbiAgICogYmUgdXRpbGl6ZWQgaW4gZnV0dXJlIHdoZW4gQW5ndWxhciBEYXRhIHRhYmxlIHN1cHBvcnRzIGR5bmFtaWMgcm93IGhlaWdodHMuXG4gICAqL1xuICB1cGRhdGUoYXRSb3dJbmRleDogbnVtYmVyLCBieVJvd0hlaWdodDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRyZWVBcnJheS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVXBkYXRlIGF0IGluZGV4ICR7YXRSb3dJbmRleH0gd2l0aCB2YWx1ZSAke2J5Um93SGVpZ2h0fSBmYWlsZWQ6XG4gICAgICAgIFJvdyBIZWlnaHQgY2FjaGUgbm90IGluaXRpYWxpemVkLmApO1xuICAgIH1cblxuICAgIGNvbnN0IG4gPSB0aGlzLnRyZWVBcnJheS5sZW5ndGg7XG4gICAgYXRSb3dJbmRleCB8PSAwO1xuXG4gICAgd2hpbGUgKGF0Um93SW5kZXggPCBuKSB7XG4gICAgICB0aGlzLnRyZWVBcnJheVthdFJvd0luZGV4XSArPSBieVJvd0hlaWdodDtcbiAgICAgIGF0Um93SW5kZXggfD0gYXRSb3dJbmRleCArIDE7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJhbmdlIFN1bSBxdWVyeSBmcm9tIDEgdG8gdGhlIHJvd0luZGV4XG4gICAqL1xuICBxdWVyeShhdEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy50cmVlQXJyYXkubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHF1ZXJ5IGF0IGluZGV4ICR7YXRJbmRleH0gZmFpbGVkOiBGZW53aWNrIHRyZWUgYXJyYXkgbm90IGluaXRpYWxpemVkLmApO1xuICAgIH1cblxuICAgIGxldCBzdW0gPSAwO1xuICAgIGF0SW5kZXggfD0gMDtcblxuICAgIHdoaWxlIChhdEluZGV4ID49IDApIHtcbiAgICAgIHN1bSArPSB0aGlzLnRyZWVBcnJheVthdEluZGV4XTtcbiAgICAgIGF0SW5kZXggPSAoYXRJbmRleCAmIChhdEluZGV4ICsgMSkpIC0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VtO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIHRvdGFsIGhlaWdodCBiZXR3ZWVuIDIgcm93IGluZGV4ZXNcbiAgICovXG4gIHF1ZXJ5QmV0d2VlbihhdEluZGV4QTogbnVtYmVyLCBhdEluZGV4QjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeShhdEluZGV4QikgLSB0aGlzLnF1ZXJ5KGF0SW5kZXhBIC0gMSk7XG4gIH1cblxuICAvKipcbiAgICogR2l2ZW4gdGhlIFNjcm9sbFkgcG9zaXRpb24gaS5lLiBzdW0sIHByb3ZpZGUgdGhlIHJvd0luZGV4XG4gICAqIHRoYXQgaXMgcHJlc2VudCBpbiB0aGUgY3VycmVudCB2aWV3IHBvcnQuXG4gICAqL1xuICBwcml2YXRlIGNhbGNSb3dJbmRleChzdW06IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLnRyZWVBcnJheS5sZW5ndGgpIHJldHVybiAwO1xuXG4gICAgbGV0IHBvcyA9IC0xO1xuICAgIGNvbnN0IGRhdGFMZW5ndGggPSB0aGlzLnRyZWVBcnJheS5sZW5ndGg7XG5cbiAgICAvLyBHZXQgdGhlIGhpZ2hlc3QgYml0IGZvciB0aGUgYmxvY2sgc2l6ZS5cbiAgICBjb25zdCBoaWdoZXN0Qml0ID0gTWF0aC5wb3coMiwgZGF0YUxlbmd0aC50b1N0cmluZygyKS5sZW5ndGggLSAxKTtcblxuICAgIGZvciAobGV0IGJsb2NrU2l6ZSA9IGhpZ2hlc3RCaXQ7IGJsb2NrU2l6ZSAhPT0gMDsgYmxvY2tTaXplID4+PSAxKSB7XG4gICAgICBjb25zdCBuZXh0UG9zID0gcG9zICsgYmxvY2tTaXplO1xuICAgICAgaWYgKG5leHRQb3MgPCBkYXRhTGVuZ3RoICYmIHN1bSA+PSB0aGlzLnRyZWVBcnJheVtuZXh0UG9zXSkge1xuICAgICAgICBzdW0gLT0gdGhpcy50cmVlQXJyYXlbbmV4dFBvc107XG4gICAgICAgIHBvcyA9IG5leHRQb3M7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvcyArIDE7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,40 @@
1
+ export function selectRows(selected, row, comparefn) {
2
+ const selectedIndex = comparefn(row, selected);
3
+ if (selectedIndex > -1) {
4
+ selected.splice(selectedIndex, 1);
5
+ }
6
+ else {
7
+ selected.push(row);
8
+ }
9
+ return selected;
10
+ }
11
+ export function selectRowsBetween(selected, rows, index, prevIndex, comparefn) {
12
+ const reverse = index < prevIndex;
13
+ for (let i = 0; i < rows.length; i++) {
14
+ const row = rows[i];
15
+ const greater = i >= prevIndex && i <= index;
16
+ const lesser = i <= prevIndex && i >= index;
17
+ let range = { start: 0, end: 0 };
18
+ if (reverse) {
19
+ range = {
20
+ start: index,
21
+ end: prevIndex
22
+ };
23
+ }
24
+ else {
25
+ range = {
26
+ start: prevIndex,
27
+ end: index + 1
28
+ };
29
+ }
30
+ if ((reverse && lesser) || (!reverse && greater)) {
31
+ // if in the positive range to be added to `selected`, and
32
+ // not already in the selected array, add it
33
+ if (i >= range.start && i <= range.end) {
34
+ selected.push(row);
35
+ }
36
+ }
37
+ }
38
+ return selected;
39
+ }
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3dpbWxhbmUvbmd4LWRhdGF0YWJsZS9zcmMvbGliL3V0aWxzL3NlbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsVUFBVSxDQUFDLFFBQWUsRUFBRSxHQUFRLEVBQUUsU0FBYztJQUNsRSxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRS9DLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQyxFQUFFO1FBQ3RCLFFBQVEsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ25DO1NBQU07UUFDTCxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3BCO0lBRUQsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsUUFBZSxFQUNmLElBQVcsRUFDWCxLQUFhLEVBQ2IsU0FBaUIsRUFDakIsU0FBYztJQUVkLE1BQU0sT0FBTyxHQUFHLEtBQUssR0FBRyxTQUFTLENBQUM7SUFFbEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDcEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLE1BQU0sT0FBTyxHQUFHLENBQUMsSUFBSSxTQUFTLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQztRQUM3QyxNQUFNLE1BQU0sR0FBRyxDQUFDLElBQUksU0FBUyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUM7UUFFNUMsSUFBSSxLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNqQyxJQUFJLE9BQU8sRUFBRTtZQUNYLEtBQUssR0FBRztnQkFDTixLQUFLLEVBQUUsS0FBSztnQkFDWixHQUFHLEVBQUUsU0FBUzthQUNmLENBQUM7U0FDSDthQUFNO1lBQ0wsS0FBSyxHQUFHO2dCQUNOLEtBQUssRUFBRSxTQUFTO2dCQUNoQixHQUFHLEVBQUUsS0FBSyxHQUFHLENBQUM7YUFDZixDQUFDO1NBQ0g7UUFFRCxJQUFJLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLEVBQUU7WUFDaEQsMERBQTBEO1lBQzFELDRDQUE0QztZQUM1QyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFO2dCQUN0QyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3BCO1NBQ0Y7S0FDRjtJQUVELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gc2VsZWN0Um93cyhzZWxlY3RlZDogYW55W10sIHJvdzogYW55LCBjb21wYXJlZm46IGFueSkge1xuICBjb25zdCBzZWxlY3RlZEluZGV4ID0gY29tcGFyZWZuKHJvdywgc2VsZWN0ZWQpO1xuXG4gIGlmIChzZWxlY3RlZEluZGV4ID4gLTEpIHtcbiAgICBzZWxlY3RlZC5zcGxpY2Uoc2VsZWN0ZWRJbmRleCwgMSk7XG4gIH0gZWxzZSB7XG4gICAgc2VsZWN0ZWQucHVzaChyb3cpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGVjdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0Um93c0JldHdlZW4oXG4gIHNlbGVjdGVkOiBhbnlbXSxcbiAgcm93czogYW55W10sXG4gIGluZGV4OiBudW1iZXIsXG4gIHByZXZJbmRleDogbnVtYmVyLFxuICBjb21wYXJlZm46IGFueVxuKTogYW55W10ge1xuICBjb25zdCByZXZlcnNlID0gaW5kZXggPCBwcmV2SW5kZXg7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgcm93ID0gcm93c1tpXTtcbiAgICBjb25zdCBncmVhdGVyID0gaSA+PSBwcmV2SW5kZXggJiYgaSA8PSBpbmRleDtcbiAgICBjb25zdCBsZXNzZXIgPSBpIDw9IHByZXZJbmRleCAmJiBpID49IGluZGV4O1xuXG4gICAgbGV0IHJhbmdlID0geyBzdGFydDogMCwgZW5kOiAwIH07XG4gICAgaWYgKHJldmVyc2UpIHtcbiAgICAgIHJhbmdlID0ge1xuICAgICAgICBzdGFydDogaW5kZXgsXG4gICAgICAgIGVuZDogcHJldkluZGV4XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByYW5nZSA9IHtcbiAgICAgICAgc3RhcnQ6IHByZXZJbmRleCxcbiAgICAgICAgZW5kOiBpbmRleCArIDFcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKChyZXZlcnNlICYmIGxlc3NlcikgfHwgKCFyZXZlcnNlICYmIGdyZWF0ZXIpKSB7XG4gICAgICAvLyBpZiBpbiB0aGUgcG9zaXRpdmUgcmFuZ2UgdG8gYmUgYWRkZWQgdG8gYHNlbGVjdGVkYCwgYW5kXG4gICAgICAvLyBub3QgYWxyZWFkeSBpbiB0aGUgc2VsZWN0ZWQgYXJyYXksIGFkZCBpdFxuICAgICAgaWYgKGkgPj0gcmFuZ2Uuc3RhcnQgJiYgaSA8PSByYW5nZS5lbmQpIHtcbiAgICAgICAgc2VsZWN0ZWQucHVzaChyb3cpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzZWxlY3RlZDtcbn1cbiJdfQ==
@@ -0,0 +1,127 @@
1
+ import { getterForProp } from './column-prop-getters';
2
+ import { SortType } from '../types/sort.type';
3
+ import { SortDirection } from '../types/sort-direction.type';
4
+ /**
5
+ * Gets the next sort direction
6
+ */
7
+ export function nextSortDir(sortType, current) {
8
+ if (sortType === SortType.single) {
9
+ if (current === SortDirection.asc) {
10
+ return SortDirection.desc;
11
+ }
12
+ else {
13
+ return SortDirection.asc;
14
+ }
15
+ }
16
+ else {
17
+ if (!current) {
18
+ return SortDirection.asc;
19
+ }
20
+ else if (current === SortDirection.asc) {
21
+ return SortDirection.desc;
22
+ }
23
+ else if (current === SortDirection.desc) {
24
+ return undefined;
25
+ }
26
+ // avoid TS7030: Not all code paths return a value.
27
+ return undefined;
28
+ }
29
+ }
30
+ /**
31
+ * Adapted from fueld-ui on 6/216
32
+ * https://github.com/FuelInteractive/fuel-ui/tree/master/src/pipes/OrderBy
33
+ */
34
+ export function orderByComparator(a, b) {
35
+ if (a === null || typeof a === 'undefined')
36
+ a = 0;
37
+ if (b === null || typeof b === 'undefined')
38
+ b = 0;
39
+ if (a instanceof Date && b instanceof Date) {
40
+ if (a < b)
41
+ return -1;
42
+ if (a > b)
43
+ return 1;
44
+ }
45
+ else if (isNaN(parseFloat(a)) || !isFinite(a) || isNaN(parseFloat(b)) || !isFinite(b)) {
46
+ // Convert to string in case of a=0 or b=0
47
+ a = String(a);
48
+ b = String(b);
49
+ // Isn't a number so lowercase the string to properly compare
50
+ if (a.toLowerCase() < b.toLowerCase())
51
+ return -1;
52
+ if (a.toLowerCase() > b.toLowerCase())
53
+ return 1;
54
+ }
55
+ else {
56
+ // Parse strings as numbers to compare properly
57
+ if (parseFloat(a) < parseFloat(b))
58
+ return -1;
59
+ if (parseFloat(a) > parseFloat(b))
60
+ return 1;
61
+ }
62
+ // equal each other
63
+ return 0;
64
+ }
65
+ /**
66
+ * creates a shallow copy of the `rows` input and returns the sorted copy. this function
67
+ * does not sort the `rows` argument in place
68
+ */
69
+ export function sortRows(rows, columns, dirs) {
70
+ if (!rows)
71
+ return [];
72
+ if (!dirs || !dirs.length || !columns)
73
+ return [...rows];
74
+ /**
75
+ * record the row ordering of results from prior sort operations (if applicable)
76
+ * this is necessary to guarantee stable sorting behavior
77
+ */
78
+ const rowToIndexMap = new Map();
79
+ rows.forEach((row, index) => rowToIndexMap.set(row, index));
80
+ const temp = [...rows];
81
+ const cols = columns.reduce((obj, col) => {
82
+ if (col.comparator && typeof col.comparator === 'function') {
83
+ obj[col.prop] = col.comparator;
84
+ }
85
+ return obj;
86
+ }, {});
87
+ // cache valueGetter and compareFn so that they
88
+ // do not need to be looked-up in the sort function body
89
+ const cachedDirs = dirs.map(dir => {
90
+ const prop = dir.prop;
91
+ return {
92
+ prop,
93
+ dir: dir.dir,
94
+ valueGetter: getterForProp(prop),
95
+ compareFn: cols[prop] || orderByComparator
96
+ };
97
+ });
98
+ return temp.sort(function (rowA, rowB) {
99
+ for (const cachedDir of cachedDirs) {
100
+ // Get property and valuegetters for column to be sorted
101
+ const { prop, valueGetter } = cachedDir;
102
+ // Get A and B cell values from rows based on properties of the columns
103
+ const propA = valueGetter(rowA, prop);
104
+ const propB = valueGetter(rowB, prop);
105
+ // Compare function gets five parameters:
106
+ // Two cell values to be compared as propA and propB
107
+ // Two rows corresponding to the cells as rowA and rowB
108
+ // Direction of the sort for this column as SortDirection
109
+ // Compare can be a standard JS comparison function (a,b) => -1|0|1
110
+ // as additional parameters are silently ignored. The whole row and sort
111
+ // direction enable more complex sort logic.
112
+ const comparison = cachedDir.dir !== SortDirection.desc
113
+ ? cachedDir.compareFn(propA, propB, rowA, rowB, cachedDir.dir)
114
+ : -cachedDir.compareFn(propA, propB, rowA, rowB, cachedDir.dir);
115
+ // Don't return 0 yet in case of needing to sort by next property
116
+ if (comparison !== 0)
117
+ return comparison;
118
+ }
119
+ if (!(rowToIndexMap.has(rowA) && rowToIndexMap.has(rowB)))
120
+ return 0;
121
+ /**
122
+ * all else being equal, preserve original order of the rows (stable sort)
123
+ */
124
+ return rowToIndexMap.get(rowA) < rowToIndexMap.get(rowB) ? -1 : 1;
125
+ });
126
+ }
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N3aW1sYW5lL25neC1kYXRhdGFibGUvc3JjL2xpYi91dGlscy9zb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTdEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxRQUFrQixFQUFFLE9BQXNCO0lBQ3BFLElBQUksUUFBUSxLQUFLLFFBQVEsQ0FBQyxNQUFNLEVBQUU7UUFDaEMsSUFBSSxPQUFPLEtBQUssYUFBYSxDQUFDLEdBQUcsRUFBRTtZQUNqQyxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUM7U0FDM0I7YUFBTTtZQUNMLE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQztTQUMxQjtLQUNGO1NBQU07UUFDTCxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1osT0FBTyxhQUFhLENBQUMsR0FBRyxDQUFDO1NBQzFCO2FBQU0sSUFBSSxPQUFPLEtBQUssYUFBYSxDQUFDLEdBQUcsRUFBRTtZQUN4QyxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUM7U0FDM0I7YUFBTSxJQUFJLE9BQU8sS0FBSyxhQUFhLENBQUMsSUFBSSxFQUFFO1lBQ3pDLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO1FBQ0QsbURBQW1EO1FBQ25ELE9BQU8sU0FBUyxDQUFDO0tBQ2xCO0FBQ0gsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxDQUFNLEVBQUUsQ0FBTTtJQUM5QyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssV0FBVztRQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEQsSUFB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QUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXR0ZXJGb3JQcm9wIH0gZnJvbSAnLi9jb2x1bW4tcHJvcC1nZXR0ZXJzJztcbmltcG9ydCB7IFNvcnRUeXBlIH0gZnJvbSAnLi4vdHlwZXMvc29ydC50eXBlJztcbmltcG9ydCB7IFNvcnREaXJlY3Rpb24gfSBmcm9tICcuLi90eXBlcy9zb3J0LWRpcmVjdGlvbi50eXBlJztcbmltcG9ydCB7IFNvcnRQcm9wRGlyIH0gZnJvbSAnLi4vdHlwZXMvc29ydC1wcm9wLWRpci50eXBlJztcbi8qKlxuICogR2V0cyB0aGUgbmV4dCBzb3J0IGRpcmVjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV4dFNvcnREaXIoc29ydFR5cGU6IFNvcnRUeXBlLCBjdXJyZW50OiBTb3J0RGlyZWN0aW9uKTogU29ydERpcmVjdGlvbiB8IHVuZGVmaW5lZCB7XG4gIGlmIChzb3J0VHlwZSA9PT0gU29ydFR5cGUuc2luZ2xlKSB7XG4gICAgaWYgKGN1cnJlbnQgPT09IFNvcnREaXJlY3Rpb24uYXNjKSB7XG4gICAgICByZXR1cm4gU29ydERpcmVjdGlvbi5kZXNjO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gU29ydERpcmVjdGlvbi5hc2M7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICghY3VycmVudCkge1xuICAgICAgcmV0dXJuIFNvcnREaXJlY3Rpb24uYXNjO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudCA9PT0gU29ydERpcmVjdGlvbi5hc2MpIHtcbiAgICAgIHJldHVybiBTb3J0RGlyZWN0aW9uLmRlc2M7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50ID09PSBTb3J0RGlyZWN0aW9uLmRlc2MpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIGF2b2lkIFRTNzAzMDogTm90IGFsbCBjb2RlIHBhdGhzIHJldHVybiBhIHZhbHVlLlxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBBZGFwdGVkIGZyb20gZnVlbGQtdWkgb24gNi8yMTZcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9GdWVsSW50ZXJhY3RpdmUvZnVlbC11aS90cmVlL21hc3Rlci9zcmMvcGlwZXMvT3JkZXJCeVxuICovXG5leHBvcnQgZnVuY3Rpb24gb3JkZXJCeUNvbXBhcmF0b3IoYTogYW55LCBiOiBhbnkpOiBudW1iZXIge1xuICBpZiAoYSA9PT0gbnVsbCB8fCB0eXBlb2YgYSA9PT0gJ3VuZGVmaW5lZCcpIGEgPSAwO1xuICBpZiAoYiA9PT0gbnVsbCB8fCB0eXBlb2YgYiA9PT0gJ3VuZGVmaW5lZCcpIGIgPSAwO1xuICBpZiAoYSBpbnN0YW5jZW9mIERhdGUgJiYgYiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICB9IGVsc2UgaWYgKGlzTmFOKHBhcnNlRmxvYXQoYSkpIHx8ICFpc0Zpbml0ZShhKSB8fCBpc05hTihwYXJzZUZsb2F0KGIpKSB8fCAhaXNGaW5pdGUoYikpIHtcbiAgICAvLyBDb252ZXJ0IHRvIHN0cmluZyBpbiBjYXNlIG9mIGE9MCBvciBiPTBcbiAgICBhID0gU3RyaW5nKGEpO1xuICAgIGIgPSBTdHJpbmcoYik7XG4gICAgLy8gSXNuJ3QgYSBudW1iZXIgc28gbG93ZXJjYXNlIHRoZSBzdHJpbmcgdG8gcHJvcGVybHkgY29tcGFyZVxuICAgIGlmIChhLnRvTG93ZXJDYXNlKCkgPCBiLnRvTG93ZXJDYXNlKCkpIHJldHVybiAtMTtcbiAgICBpZiAoYS50b0xvd2VyQ2FzZSgpID4gYi50b0xvd2VyQ2FzZSgpKSByZXR1cm4gMTtcbiAgfSBlbHNlIHtcbiAgICAvLyBQYXJzZSBzdHJpbmdzIGFzIG51bWJlcnMgdG8gY29tcGFyZSBwcm9wZXJseVxuICAgIGlmIChwYXJzZUZsb2F0KGEpIDwgcGFyc2VGbG9hdChiKSkgcmV0dXJuIC0xO1xuICAgIGlmIChwYXJzZUZsb2F0KGEpID4gcGFyc2VGbG9hdChiKSkgcmV0dXJuIDE7XG4gIH1cblxuICAvLyBlcXVhbCBlYWNoIG90aGVyXG4gIHJldHVybiAwO1xufVxuXG4vKipcbiAqIGNyZWF0ZXMgYSBzaGFsbG93IGNvcHkgb2YgdGhlIGByb3dzYCBpbnB1dCBhbmQgcmV0dXJucyB0aGUgc29ydGVkIGNvcHkuIHRoaXMgZnVuY3Rpb25cbiAqIGRvZXMgbm90IHNvcnQgdGhlIGByb3dzYCBhcmd1bWVudCBpbiBwbGFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc29ydFJvd3Mocm93czogYW55W10sIGNvbHVtbnM6IGFueVtdLCBkaXJzOiBTb3J0UHJvcERpcltdKTogYW55W10ge1xuICBpZiAoIXJvd3MpIHJldHVybiBbXTtcbiAgaWYgKCFkaXJzIHx8ICFkaXJzLmxlbmd0aCB8fCAhY29sdW1ucykgcmV0dXJuIFsuLi5yb3dzXTtcblxuICAvKipcbiAgICogcmVjb3JkIHRoZSByb3cgb3JkZXJpbmcgb2YgcmVzdWx0cyBmcm9tIHByaW9yIHNvcnQgb3BlcmF0aW9ucyAoaWYgYXBwbGljYWJsZSlcbiAgICogdGhpcyBpcyBuZWNlc3NhcnkgdG8gZ3VhcmFudGVlIHN0YWJsZSBzb3J0aW5nIGJlaGF2aW9yXG4gICAqL1xuICBjb25zdCByb3dUb0luZGV4TWFwID0gbmV3IE1hcDxhbnksIG51bWJlcj4oKTtcbiAgcm93cy5mb3JFYWNoKChyb3csIGluZGV4KSA9PiByb3dUb0luZGV4TWFwLnNldChyb3csIGluZGV4KSk7XG5cbiAgY29uc3QgdGVtcCA9IFsuLi5yb3dzXTtcbiAgY29uc3QgY29scyA9IGNvbHVtbnMucmVkdWNlKChvYmosIGNvbCkgPT4ge1xuICAgIGlmIChjb2wuY29tcGFyYXRvciAmJiB0eXBlb2YgY29sLmNvbXBhcmF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG9ialtjb2wucHJvcF0gPSBjb2wuY29tcGFyYXRvcjtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSwge30pO1xuXG4gIC8vIGNhY2hlIHZhbHVlR2V0dGVyIGFuZCBjb21wYXJlRm4gc28gdGhhdCB0aGV5XG4gIC8vIGRvIG5vdCBuZWVkIHRvIGJlIGxvb2tlZC11cCBpbiB0aGUgc29ydCBmdW5jdGlvbiBib2R5XG4gIGNvbnN0IGNhY2hlZERpcnMgPSBkaXJzLm1hcChkaXIgPT4ge1xuICAgIGNvbnN0IHByb3AgPSBkaXIucHJvcDtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvcCxcbiAgICAgIGRpcjogZGlyLmRpcixcbiAgICAgIHZhbHVlR2V0dGVyOiBnZXR0ZXJGb3JQcm9wKHByb3ApLFxuICAgICAgY29tcGFyZUZuOiBjb2xzW3Byb3BdIHx8IG9yZGVyQnlDb21wYXJhdG9yXG4gICAgfTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlbXAuc29ydChmdW5jdGlvbiAocm93QTogYW55LCByb3dCOiBhbnkpIHtcbiAgICBmb3IgKGNvbnN0IGNhY2hlZERpciBvZiBjYWNoZWREaXJzKSB7XG4gICAgICAvLyBHZXQgcHJvcGVydHkgYW5kIHZhbHVlZ2V0dGVycyBmb3IgY29sdW1uIHRvIGJlIHNvcnRlZFxuICAgICAgY29uc3QgeyBwcm9wLCB2YWx1ZUdldHRlciB9ID0gY2FjaGVkRGlyO1xuICAgICAgLy8gR2V0IEEgYW5kIEIgY2VsbCB2YWx1ZXMgZnJvbSByb3dzIGJhc2VkIG9uIHByb3BlcnRpZXMgb2YgdGhlIGNvbHVtbnNcbiAgICAgIGNvbnN0IHByb3BBID0gdmFsdWVHZXR0ZXIocm93QSwgcHJvcCk7XG4gICAgICBjb25zdCBwcm9wQiA9IHZhbHVlR2V0dGVyKHJvd0IsIHByb3ApO1xuXG4gICAgICAvLyBDb21wYXJlIGZ1bmN0aW9uIGdldHMgZml2ZSBwYXJhbWV0ZXJzOlxuICAgICAgLy8gVHdvIGNlbGwgdmFsdWVzIHRvIGJlIGNvbXBhcmVkIGFzIHByb3BBIGFuZCBwcm9wQlxuICAgICAgLy8gVHdvIHJvd3MgY29ycmVzcG9uZGluZyB0byB0aGUgY2VsbHMgYXMgcm93QSBhbmQgcm93QlxuICAgICAgLy8gRGlyZWN0aW9uIG9mIHRoZSBzb3J0IGZvciB0aGlzIGNvbHVtbiBhcyBTb3J0RGlyZWN0aW9uXG4gICAgICAvLyBDb21wYXJlIGNhbiBiZSBhIHN0YW5kYXJkIEpTIGNvbXBhcmlzb24gZnVuY3Rpb24gKGEsYikgPT4gLTF8MHwxXG4gICAgICAvLyBhcyBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgYXJlIHNpbGVudGx5IGlnbm9yZWQuIFRoZSB3aG9sZSByb3cgYW5kIHNvcnRcbiAgICAgIC8vIGRpcmVjdGlvbiBlbmFibGUgbW9yZSBjb21wbGV4IHNvcnQgbG9naWMuXG4gICAgICBjb25zdCBjb21wYXJpc29uID1cbiAgICAgICAgY2FjaGVkRGlyLmRpciAhPT0gU29ydERpcmVjdGlvbi5kZXNjXG4gICAgICAgICAgPyBjYWNoZWREaXIuY29tcGFyZUZuKHByb3BBLCBwcm9wQiwgcm93QSwgcm93QiwgY2FjaGVkRGlyLmRpcilcbiAgICAgICAgICA6IC1jYWNoZWREaXIuY29tcGFyZUZuKHByb3BBLCBwcm9wQiwgcm93QSwgcm93QiwgY2FjaGVkRGlyLmRpcik7XG5cbiAgICAgIC8vIERvbid0IHJldHVybiAwIHlldCBpbiBjYXNlIG9mIG5lZWRpbmcgdG8gc29ydCBieSBuZXh0IHByb3BlcnR5XG4gICAgICBpZiAoY29tcGFyaXNvbiAhPT0gMCkgcmV0dXJuIGNvbXBhcmlzb247XG4gICAgfVxuXG4gICAgaWYgKCEocm93VG9JbmRleE1hcC5oYXMocm93QSkgJiYgcm93VG9JbmRleE1hcC5oYXMocm93QikpKSByZXR1cm4gMDtcblxuICAgIC8qKlxuICAgICAqIGFsbCBlbHNlIGJlaW5nIGVxdWFsLCBwcmVzZXJ2ZSBvcmlnaW5hbCBvcmRlciBvZiB0aGUgcm93cyAoc3RhYmxlIHNvcnQpXG4gICAgICovXG4gICAgcmV0dXJuIHJvd1RvSW5kZXhNYXAuZ2V0KHJvd0EpIDwgcm93VG9JbmRleE1hcC5nZXQocm93QikgPyAtMSA6IDE7XG4gIH0pO1xufVxuIl19
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Throttle a function
3
+ */
4
+ export function throttle(func, wait, options) {
5
+ options = options || {};
6
+ let context;
7
+ let args;
8
+ let result;
9
+ let timeout = null;
10
+ let previous = 0;
11
+ function later() {
12
+ previous = options.leading === false ? 0 : +new Date();
13
+ timeout = null;
14
+ result = func.apply(context, args);
15
+ }
16
+ return function () {
17
+ const now = +new Date();
18
+ if (!previous && options.leading === false) {
19
+ previous = now;
20
+ }
21
+ const remaining = wait - (now - previous);
22
+ context = this;
23
+ args = arguments;
24
+ if (remaining <= 0) {
25
+ clearTimeout(timeout);
26
+ timeout = null;
27
+ previous = now;
28
+ result = func.apply(context, args);
29
+ }
30
+ else if (!timeout && options.trailing !== false) {
31
+ timeout = setTimeout(later, remaining);
32
+ }
33
+ return result;
34
+ };
35
+ }
36
+ /**
37
+ * Throttle decorator
38
+ *
39
+ * class MyClass {
40
+ * throttleable(10)
41
+ * myFn() { ... }
42
+ * }
43
+ */
44
+ export function throttleable(duration, options) {
45
+ return function innerDecorator(target, key, descriptor) {
46
+ return {
47
+ configurable: true,
48
+ enumerable: descriptor.enumerable,
49
+ get: function getter() {
50
+ Object.defineProperty(this, key, {
51
+ configurable: true,
52
+ enumerable: descriptor.enumerable,
53
+ value: throttle(descriptor.value, duration, options)
54
+ });
55
+ return this[key];
56
+ }
57
+ };
58
+ };
59
+ }
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhyb3R0bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zd2ltbGFuZS9uZ3gtZGF0YXRhYmxlL3NyYy9saWIvdXRpbHMvdGhyb3R0bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLElBQVMsRUFBRSxJQUFZLEVBQUUsT0FBYTtJQUM3RCxPQUFPLEdBQUcsT0FBTyxJQUFJLEVBQUUsQ0FBQztJQUN4QixJQUFJLE9BQVksQ0FBQztJQUNqQixJQUFJLElBQVMsQ0FBQztJQUNkLElBQUksTUFBVyxDQUFDO0lBQ2hCLElBQUksT0FBTyxHQUFRLElBQUksQ0FBQztJQUN4QixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFFakIsU0FBUyxLQUFLO1FBQ1osUUFBUSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2RCxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxPQUFPO1FBQ0wsTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1FBRXhCLElBQUksQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLE9BQU8sS0FBSyxLQUFLLEVBQUU7WUFDMUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztTQUNoQjtRQUVELE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUMxQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsSUFBSSxHQUFHLFNBQVMsQ0FBQztRQUVqQixJQUFJLFNBQVMsSUFBSSxDQUFDLEVBQUU7WUFDbEIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RCLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDZixRQUFRLEdBQUcsR0FBRyxDQUFDO1lBQ2YsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3BDO2FBQU0sSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLEtBQUssRUFBRTtZQUNqRCxPQUFPLEdBQUcsVUFBVSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztTQUN4QztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxRQUFnQixFQUFFLE9BQWE7SUFDMUQsT0FBTyxTQUFTLGNBQWMsQ0FBQyxNQUFXLEVBQUUsR0FBZ0IsRUFBRSxVQUE4QjtRQUMxRixPQUFPO1lBQ0wsWUFBWSxFQUFFLElBQUk7WUFDbEIsVUFBVSxFQUFFLFVBQVUsQ0FBQyxVQUFVO1lBQ2pDLEdBQUcsRUFBRSxTQUFTLE1BQU07Z0JBQ2xCLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRTtvQkFDL0IsWUFBWSxFQUFFLElBQUk7b0JBQ2xCLFVBQVUsRUFBRSxVQUFVLENBQUMsVUFBVTtvQkFDakMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUM7aUJBQ3JELENBQUMsQ0FBQztnQkFFSCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuQixDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRocm90dGxlIGEgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRocm90dGxlKGZ1bmM6IGFueSwgd2FpdDogbnVtYmVyLCBvcHRpb25zPzogYW55KSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBsZXQgY29udGV4dDogYW55O1xuICBsZXQgYXJnczogYW55O1xuICBsZXQgcmVzdWx0OiBhbnk7XG4gIGxldCB0aW1lb3V0OiBhbnkgPSBudWxsO1xuICBsZXQgcHJldmlvdXMgPSAwO1xuXG4gIGZ1bmN0aW9uIGxhdGVyKCkge1xuICAgIHByZXZpb3VzID0gb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSA/IDAgOiArbmV3IERhdGUoKTtcbiAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGlzOiBhbnkpIHtcbiAgICBjb25zdCBub3cgPSArbmV3IERhdGUoKTtcblxuICAgIGlmICghcHJldmlvdXMgJiYgb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSkge1xuICAgICAgcHJldmlvdXMgPSBub3c7XG4gICAgfVxuXG4gICAgY29uc3QgcmVtYWluaW5nID0gd2FpdCAtIChub3cgLSBwcmV2aW91cyk7XG4gICAgY29udGV4dCA9IHRoaXM7XG4gICAgYXJncyA9IGFyZ3VtZW50cztcblxuICAgIGlmIChyZW1haW5pbmcgPD0gMCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICBwcmV2aW91cyA9IG5vdztcbiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfSBlbHNlIGlmICghdGltZW91dCAmJiBvcHRpb25zLnRyYWlsaW5nICE9PSBmYWxzZSkge1xuICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHJlbWFpbmluZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuLyoqXG4gKiBUaHJvdHRsZSBkZWNvcmF0b3JcbiAqXG4gKiAgY2xhc3MgTXlDbGFzcyB7XG4gKiAgICB0aHJvdHRsZWFibGUoMTApXG4gKiAgICBteUZuKCkgeyAuLi4gfVxuICogIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRocm90dGxlYWJsZShkdXJhdGlvbjogbnVtYmVyLCBvcHRpb25zPzogYW55KSB7XG4gIHJldHVybiBmdW5jdGlvbiBpbm5lckRlY29yYXRvcih0YXJnZXQ6IGFueSwga2V5OiBQcm9wZXJ0eUtleSwgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IGRlc2NyaXB0b3IuZW51bWVyYWJsZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0dGVyKCkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCB7XG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgIGVudW1lcmFibGU6IGRlc2NyaXB0b3IuZW51bWVyYWJsZSxcbiAgICAgICAgICB2YWx1ZTogdGhyb3R0bGUoZGVzY3JpcHRvci52YWx1ZSwgZHVyYXRpb24sIG9wdGlvbnMpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzW2tleV07XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbn1cbiJdfQ==