@swimlane/ngx-datatable 16.1.1 → 19.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/assets/icons-reference.html +2 -2
- package/assets/icons.css +39 -19
- package/bundles/swimlane-ngx-datatable.umd.js +1663 -5743
- package/bundles/swimlane-ngx-datatable.umd.js.map +1 -1
- package/bundles/swimlane-ngx-datatable.umd.min.js +1 -1
- package/bundles/swimlane-ngx-datatable.umd.min.js.map +1 -1
- package/esm2015/lib/components/body/body-cell.component.js +5 -235
- package/esm2015/lib/components/body/body-group-header-template.directive.js +1 -13
- package/esm2015/lib/components/body/body-group-header.directive.js +1 -28
- package/esm2015/lib/components/body/body-row-wrapper.component.js +4 -86
- package/esm2015/lib/components/body/body-row.component.js +2 -153
- package/esm2015/lib/components/body/body.component.js +71 -303
- package/esm2015/lib/components/body/progress-bar.component.js +2 -6
- package/esm2015/lib/components/body/scroller.component.js +6 -82
- package/esm2015/lib/components/body/selection.component.js +7 -112
- package/esm2015/lib/components/body/summary/summary-row.component.js +10 -100
- package/esm2015/lib/components/columns/column-cell.directive.js +1 -13
- package/esm2015/lib/components/columns/column-header.directive.js +1 -13
- package/esm2015/lib/components/columns/column.directive.js +1 -89
- package/esm2015/lib/components/columns/tree.directive.js +1 -13
- package/esm2015/lib/components/datatable.component.js +49 -570
- package/esm2015/lib/components/footer/footer-template.directive.js +1 -13
- package/esm2015/lib/components/footer/footer.component.js +2 -41
- package/esm2015/lib/components/footer/footer.directive.js +2 -29
- package/esm2015/lib/components/footer/pager.component.js +3 -77
- package/esm2015/lib/components/header/header-cell.component.js +11 -130
- package/esm2015/lib/components/header/header.component.js +20 -193
- package/esm2015/lib/components/row-detail/row-detail-template.directive.js +1 -13
- package/esm2015/lib/components/row-detail/row-detail.directive.js +1 -29
- package/esm2015/lib/directives/draggable.directive.js +4 -72
- package/esm2015/lib/directives/long-press.directive.js +8 -88
- package/esm2015/lib/directives/orderable.directive.js +11 -104
- package/esm2015/lib/directives/resizeable.directive.js +14 -81
- package/esm2015/lib/directives/visibility.directive.js +9 -64
- package/esm2015/lib/events.js +6 -13
- package/esm2015/lib/ngx-datatable.module.js +2 -16
- package/esm2015/lib/services/column-changes.service.js +1 -18
- package/esm2015/lib/services/dimensions-helper.service.js +1 -9
- package/esm2015/lib/services/scrollbar-helper.service.js +1 -25
- package/esm2015/lib/types/click.type.js +6 -11
- package/esm2015/lib/types/column-mode.type.js +7 -12
- package/esm2015/lib/types/contextmenu.type.js +6 -11
- package/esm2015/lib/types/selection.type.js +9 -14
- package/esm2015/lib/types/sort-direction.type.js +6 -11
- package/esm2015/lib/types/sort-prop-dir.type.js +2 -15
- package/esm2015/lib/types/sort.type.js +6 -11
- package/esm2015/lib/types/table-column.type.js +2 -217
- package/esm2015/lib/utils/camel-case.js +4 -26
- package/esm2015/lib/utils/column-helper.js +1 -18
- package/esm2015/lib/utils/column-prop-getters.js +6 -21
- package/esm2015/lib/utils/column.js +1 -28
- package/esm2015/lib/utils/elm-from-point.js +3 -15
- package/esm2015/lib/utils/id.js +1 -6
- package/esm2015/lib/utils/keys.js +10 -21
- package/esm2015/lib/utils/math.js +4 -51
- package/esm2015/lib/utils/prefixes.js +5 -24
- package/esm2015/lib/utils/row-height-cache.js +6 -46
- package/esm2015/lib/utils/selection.js +1 -25
- package/esm2015/lib/utils/sort.js +9 -50
- package/esm2015/lib/utils/throttle.js +7 -41
- package/esm2015/lib/utils/translate.js +1 -17
- package/esm2015/lib/utils/tree.js +7 -56
- package/esm2015/public-api.js +56 -60
- package/esm2015/swimlane-ngx-datatable.js +2 -6
- package/fesm2015/swimlane-ngx-datatable.js +308 -3513
- package/fesm2015/swimlane-ngx-datatable.js.map +1 -1
- package/index.css +1 -1
- package/index.scss +1 -1
- package/lib/components/body/body-cell.component.d.ts +23 -14
- package/lib/components/body/body-group-header.directive.d.ts +1 -1
- package/lib/components/body/body-row-wrapper.component.d.ts +4 -2
- package/lib/components/body/body-row.component.d.ts +8 -5
- package/lib/components/body/body.component.d.ts +17 -10
- package/lib/components/columns/column.directive.d.ts +3 -3
- package/lib/components/datatable.component.d.ts +45 -38
- package/lib/components/footer/footer.component.d.ts +2 -2
- package/lib/components/footer/footer.directive.d.ts +1 -1
- package/lib/components/footer/pager.component.d.ts +7 -4
- package/lib/components/header/header-cell.component.d.ts +14 -9
- package/lib/components/header/header.component.d.ts +14 -7
- package/lib/components/row-detail/row-detail.directive.d.ts +1 -1
- package/lib/directives/long-press.directive.d.ts +2 -2
- package/lib/directives/resizeable.directive.d.ts +1 -0
- package/lib/ngx-datatable.module.d.ts +1 -1
- package/lib/services/column-changes.service.d.ts +1 -1
- package/lib/utils/throttle.d.ts +1 -1
- package/package.json +10 -13
- package/swimlane-ngx-datatable.metadata.json +1 -1
- package/themes/material.css +53 -51
- package/themes/material.scss +4 -2
- package/esm5/lib/components/body/body-cell.component.js +0 -667
- package/esm5/lib/components/body/body-group-header-template.directive.js +0 -26
- package/esm5/lib/components/body/body-group-header.directive.js +0 -109
- package/esm5/lib/components/body/body-row-wrapper.component.js +0 -181
- package/esm5/lib/components/body/body-row.component.js +0 -409
- package/esm5/lib/components/body/body.component.js +0 -1148
- package/esm5/lib/components/body/progress-bar.component.js +0 -19
- package/esm5/lib/components/body/scroller.component.js +0 -172
- package/esm5/lib/components/body/selection.component.js +0 -289
- package/esm5/lib/components/body/summary/summary-row.component.js +0 -179
- package/esm5/lib/components/columns/column-cell.directive.js +0 -24
- package/esm5/lib/components/columns/column-header.directive.js +0 -24
- package/esm5/lib/components/columns/column.directive.js +0 -167
- package/esm5/lib/components/columns/tree.directive.js +0 -24
- package/esm5/lib/components/datatable.component.js +0 -1848
- package/esm5/lib/components/footer/footer-template.directive.js +0 -24
- package/esm5/lib/components/footer/footer.component.js +0 -88
- package/esm5/lib/components/footer/footer.directive.js +0 -57
- package/esm5/lib/components/footer/pager.component.js +0 -214
- package/esm5/lib/components/header/header-cell.component.js +0 -351
- package/esm5/lib/components/header/header.component.js +0 -502
- package/esm5/lib/components/row-detail/row-detail-template.directive.js +0 -26
- package/esm5/lib/components/row-detail/row-detail.directive.js +0 -111
- package/esm5/lib/directives/draggable.directive.js +0 -194
- package/esm5/lib/directives/long-press.directive.js +0 -220
- package/esm5/lib/directives/orderable.directive.js +0 -274
- package/esm5/lib/directives/resizeable.directive.js +0 -178
- package/esm5/lib/directives/visibility.directive.js +0 -129
- package/esm5/lib/events.js +0 -14
- package/esm5/lib/ngx-datatable.module.js +0 -123
- package/esm5/lib/services/column-changes.service.js +0 -47
- package/esm5/lib/services/dimensions-helper.service.js +0 -30
- package/esm5/lib/services/scrollbar-helper.service.js +0 -60
- package/esm5/lib/types/click.type.js +0 -11
- package/esm5/lib/types/column-mode.type.js +0 -12
- package/esm5/lib/types/contextmenu.type.js +0 -11
- package/esm5/lib/types/selection.type.js +0 -14
- package/esm5/lib/types/sort-direction.type.js +0 -11
- package/esm5/lib/types/sort-prop-dir.type.js +0 -15
- package/esm5/lib/types/sort.type.js +0 -11
- package/esm5/lib/types/table-column.type.js +0 -217
- package/esm5/lib/utils/camel-case.js +0 -50
- package/esm5/lib/utils/column-helper.js +0 -145
- package/esm5/lib/utils/column-prop-getters.js +0 -111
- package/esm5/lib/utils/column.js +0 -130
- package/esm5/lib/utils/elm-from-point.js +0 -50
- package/esm5/lib/utils/id.js +0 -13
- package/esm5/lib/utils/keys.js +0 -21
- package/esm5/lib/utils/math.js +0 -271
- package/esm5/lib/utils/prefixes.js +0 -59
- package/esm5/lib/utils/row-height-cache.js +0 -264
- package/esm5/lib/utils/selection.js +0 -64
- package/esm5/lib/utils/sort.js +0 -180
- package/esm5/lib/utils/throttle.js +0 -94
- package/esm5/lib/utils/translate.js +0 -41
- package/esm5/lib/utils/tree.js +0 -157
- package/esm5/public-api.js +0 -68
- package/esm5/swimlane-ngx-datatable.js +0 -9
- package/fesm5/swimlane-ngx-datatable.js +0 -9695
- package/fesm5/swimlane-ngx-datatable.js.map +0 -1
- package/lib/test/jasmine-matchers.d.ts +0 -12
package/esm5/lib/utils/math.js
DELETED
|
@@ -1,271 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview added by tsickle
|
|
3
|
-
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
4
|
-
*/
|
|
5
|
-
import * as tslib_1 from "tslib";
|
|
6
|
-
import { columnsByPin, columnsTotalWidth } from './column';
|
|
7
|
-
/**
|
|
8
|
-
* Calculates the Total Flex Grow
|
|
9
|
-
* @param {?} columns
|
|
10
|
-
* @return {?}
|
|
11
|
-
*/
|
|
12
|
-
export function getTotalFlexGrow(columns) {
|
|
13
|
-
var e_1, _a;
|
|
14
|
-
/** @type {?} */
|
|
15
|
-
var totalFlexGrow = 0;
|
|
16
|
-
try {
|
|
17
|
-
for (var columns_1 = tslib_1.__values(columns), columns_1_1 = columns_1.next(); !columns_1_1.done; columns_1_1 = columns_1.next()) {
|
|
18
|
-
var c = columns_1_1.value;
|
|
19
|
-
totalFlexGrow += c.flexGrow || 0;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
23
|
-
finally {
|
|
24
|
-
try {
|
|
25
|
-
if (columns_1_1 && !columns_1_1.done && (_a = columns_1.return)) _a.call(columns_1);
|
|
26
|
-
}
|
|
27
|
-
finally { if (e_1) throw e_1.error; }
|
|
28
|
-
}
|
|
29
|
-
return totalFlexGrow;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Adjusts the column widths.
|
|
33
|
-
* Inspired by: https://github.com/facebook/fixed-data-table/blob/master/src/FixedDataTableWidthHelper.js
|
|
34
|
-
* @param {?} allColumns
|
|
35
|
-
* @param {?} expectedWidth
|
|
36
|
-
* @return {?}
|
|
37
|
-
*/
|
|
38
|
-
export function adjustColumnWidths(allColumns, expectedWidth) {
|
|
39
|
-
/** @type {?} */
|
|
40
|
-
var columnsWidth = columnsTotalWidth(allColumns);
|
|
41
|
-
/** @type {?} */
|
|
42
|
-
var totalFlexGrow = getTotalFlexGrow(allColumns);
|
|
43
|
-
/** @type {?} */
|
|
44
|
-
var colsByGroup = columnsByPin(allColumns);
|
|
45
|
-
if (columnsWidth !== expectedWidth) {
|
|
46
|
-
scaleColumns(colsByGroup, expectedWidth, totalFlexGrow);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Resizes columns based on the flexGrow property, while respecting manually set widths
|
|
51
|
-
* @param {?} colsByGroup
|
|
52
|
-
* @param {?} maxWidth
|
|
53
|
-
* @param {?} totalFlexGrow
|
|
54
|
-
* @return {?}
|
|
55
|
-
*/
|
|
56
|
-
function scaleColumns(colsByGroup, maxWidth, totalFlexGrow) {
|
|
57
|
-
var e_2, _a, e_3, _b;
|
|
58
|
-
// calculate total width and flexgrow points for coulumns that can be resized
|
|
59
|
-
for (var attr in colsByGroup) {
|
|
60
|
-
try {
|
|
61
|
-
for (var _c = (e_2 = void 0, tslib_1.__values(colsByGroup[attr])), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
62
|
-
var column = _d.value;
|
|
63
|
-
if (!column.canAutoResize) {
|
|
64
|
-
maxWidth -= column.width;
|
|
65
|
-
totalFlexGrow -= column.flexGrow ? column.flexGrow : 0;
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
column.width = 0;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
73
|
-
finally {
|
|
74
|
-
try {
|
|
75
|
-
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
76
|
-
}
|
|
77
|
-
finally { if (e_2) throw e_2.error; }
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
/** @type {?} */
|
|
81
|
-
var hasMinWidth = {};
|
|
82
|
-
/** @type {?} */
|
|
83
|
-
var remainingWidth = maxWidth;
|
|
84
|
-
// resize columns until no width is left to be distributed
|
|
85
|
-
do {
|
|
86
|
-
/** @type {?} */
|
|
87
|
-
var widthPerFlexPoint = remainingWidth / totalFlexGrow;
|
|
88
|
-
remainingWidth = 0;
|
|
89
|
-
for (var attr in colsByGroup) {
|
|
90
|
-
try {
|
|
91
|
-
for (var _e = (e_3 = void 0, tslib_1.__values(colsByGroup[attr])), _f = _e.next(); !_f.done; _f = _e.next()) {
|
|
92
|
-
var column = _f.value;
|
|
93
|
-
// if the column can be resize and it hasn't reached its minimum width yet
|
|
94
|
-
if (column.canAutoResize && !hasMinWidth[column.prop]) {
|
|
95
|
-
/** @type {?} */
|
|
96
|
-
var newWidth = column.width + column.flexGrow * widthPerFlexPoint;
|
|
97
|
-
if (column.minWidth !== undefined && newWidth < column.minWidth) {
|
|
98
|
-
remainingWidth += newWidth - column.minWidth;
|
|
99
|
-
column.width = column.minWidth;
|
|
100
|
-
hasMinWidth[column.prop] = true;
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
column.width = newWidth;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
109
|
-
finally {
|
|
110
|
-
try {
|
|
111
|
-
if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
|
|
112
|
-
}
|
|
113
|
-
finally { if (e_3) throw e_3.error; }
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
} while (remainingWidth !== 0);
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Forces the width of the columns to
|
|
120
|
-
* distribute equally but overflowing when necessary
|
|
121
|
-
*
|
|
122
|
-
* Rules:
|
|
123
|
-
*
|
|
124
|
-
* - If combined withs are less than the total width of the grid,
|
|
125
|
-
* proportion the widths given the min / max / normal widths to fill the width.
|
|
126
|
-
*
|
|
127
|
-
* - If the combined widths, exceed the total width of the grid,
|
|
128
|
-
* use the standard widths.
|
|
129
|
-
*
|
|
130
|
-
* - If a column is resized, it should always use that width
|
|
131
|
-
*
|
|
132
|
-
* - The proportional widths should never fall below min size if specified.
|
|
133
|
-
*
|
|
134
|
-
* - If the grid starts off small but then becomes greater than the size ( + / - )
|
|
135
|
-
* the width should use the original width; not the newly proportioned widths.
|
|
136
|
-
* @param {?} allColumns
|
|
137
|
-
* @param {?} expectedWidth
|
|
138
|
-
* @param {?} startIdx
|
|
139
|
-
* @param {?} allowBleed
|
|
140
|
-
* @param {?=} defaultColWidth
|
|
141
|
-
* @return {?}
|
|
142
|
-
*/
|
|
143
|
-
export function forceFillColumnWidths(allColumns, expectedWidth, startIdx, allowBleed, defaultColWidth) {
|
|
144
|
-
var e_4, _a, e_5, _b;
|
|
145
|
-
if (defaultColWidth === void 0) { defaultColWidth = 300; }
|
|
146
|
-
/** @type {?} */
|
|
147
|
-
var columnsToResize = allColumns.slice(startIdx + 1, allColumns.length).filter((/**
|
|
148
|
-
* @param {?} c
|
|
149
|
-
* @return {?}
|
|
150
|
-
*/
|
|
151
|
-
function (c) {
|
|
152
|
-
return c.canAutoResize !== false;
|
|
153
|
-
}));
|
|
154
|
-
try {
|
|
155
|
-
for (var columnsToResize_1 = tslib_1.__values(columnsToResize), columnsToResize_1_1 = columnsToResize_1.next(); !columnsToResize_1_1.done; columnsToResize_1_1 = columnsToResize_1.next()) {
|
|
156
|
-
var column = columnsToResize_1_1.value;
|
|
157
|
-
if (!column.$$oldWidth) {
|
|
158
|
-
column.$$oldWidth = column.width;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
163
|
-
finally {
|
|
164
|
-
try {
|
|
165
|
-
if (columnsToResize_1_1 && !columnsToResize_1_1.done && (_a = columnsToResize_1.return)) _a.call(columnsToResize_1);
|
|
166
|
-
}
|
|
167
|
-
finally { if (e_4) throw e_4.error; }
|
|
168
|
-
}
|
|
169
|
-
/** @type {?} */
|
|
170
|
-
var additionWidthPerColumn = 0;
|
|
171
|
-
/** @type {?} */
|
|
172
|
-
var exceedsWindow = false;
|
|
173
|
-
/** @type {?} */
|
|
174
|
-
var contentWidth = getContentWidth(allColumns, defaultColWidth);
|
|
175
|
-
/** @type {?} */
|
|
176
|
-
var remainingWidth = expectedWidth - contentWidth;
|
|
177
|
-
/** @type {?} */
|
|
178
|
-
var columnsProcessed = [];
|
|
179
|
-
/** @type {?} */
|
|
180
|
-
var remainingWidthLimit = 1;
|
|
181
|
-
// This loop takes care of the
|
|
182
|
-
do {
|
|
183
|
-
additionWidthPerColumn = remainingWidth / columnsToResize.length;
|
|
184
|
-
exceedsWindow = contentWidth >= expectedWidth;
|
|
185
|
-
try {
|
|
186
|
-
for (var columnsToResize_2 = (e_5 = void 0, tslib_1.__values(columnsToResize)), columnsToResize_2_1 = columnsToResize_2.next(); !columnsToResize_2_1.done; columnsToResize_2_1 = columnsToResize_2.next()) {
|
|
187
|
-
var column = columnsToResize_2_1.value;
|
|
188
|
-
if (exceedsWindow && allowBleed) {
|
|
189
|
-
column.width = column.$$oldWidth || column.width || defaultColWidth;
|
|
190
|
-
}
|
|
191
|
-
else {
|
|
192
|
-
/** @type {?} */
|
|
193
|
-
var newSize = (column.width || defaultColWidth) + additionWidthPerColumn;
|
|
194
|
-
if (column.minWidth && newSize < column.minWidth) {
|
|
195
|
-
column.width = column.minWidth;
|
|
196
|
-
columnsProcessed.push(column);
|
|
197
|
-
}
|
|
198
|
-
else if (column.maxWidth && newSize > column.maxWidth) {
|
|
199
|
-
column.width = column.maxWidth;
|
|
200
|
-
columnsProcessed.push(column);
|
|
201
|
-
}
|
|
202
|
-
else {
|
|
203
|
-
column.width = newSize;
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
column.width = Math.max(0, column.width);
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
210
|
-
finally {
|
|
211
|
-
try {
|
|
212
|
-
if (columnsToResize_2_1 && !columnsToResize_2_1.done && (_b = columnsToResize_2.return)) _b.call(columnsToResize_2);
|
|
213
|
-
}
|
|
214
|
-
finally { if (e_5) throw e_5.error; }
|
|
215
|
-
}
|
|
216
|
-
contentWidth = getContentWidth(allColumns);
|
|
217
|
-
remainingWidth = expectedWidth - contentWidth;
|
|
218
|
-
removeProcessedColumns(columnsToResize, columnsProcessed);
|
|
219
|
-
} while (remainingWidth > remainingWidthLimit && columnsToResize.length !== 0);
|
|
220
|
-
}
|
|
221
|
-
/**
|
|
222
|
-
* Remove the processed columns from the current active columns.
|
|
223
|
-
* @param {?} columnsToResize
|
|
224
|
-
* @param {?} columnsProcessed
|
|
225
|
-
* @return {?}
|
|
226
|
-
*/
|
|
227
|
-
function removeProcessedColumns(columnsToResize, columnsProcessed) {
|
|
228
|
-
var e_6, _a;
|
|
229
|
-
try {
|
|
230
|
-
for (var columnsProcessed_1 = tslib_1.__values(columnsProcessed), columnsProcessed_1_1 = columnsProcessed_1.next(); !columnsProcessed_1_1.done; columnsProcessed_1_1 = columnsProcessed_1.next()) {
|
|
231
|
-
var column = columnsProcessed_1_1.value;
|
|
232
|
-
/** @type {?} */
|
|
233
|
-
var index = columnsToResize.indexOf(column);
|
|
234
|
-
columnsToResize.splice(index, 1);
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
238
|
-
finally {
|
|
239
|
-
try {
|
|
240
|
-
if (columnsProcessed_1_1 && !columnsProcessed_1_1.done && (_a = columnsProcessed_1.return)) _a.call(columnsProcessed_1);
|
|
241
|
-
}
|
|
242
|
-
finally { if (e_6) throw e_6.error; }
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
/**
|
|
246
|
-
* Gets the width of the columns
|
|
247
|
-
* @param {?} allColumns
|
|
248
|
-
* @param {?=} defaultColWidth
|
|
249
|
-
* @return {?}
|
|
250
|
-
*/
|
|
251
|
-
function getContentWidth(allColumns, defaultColWidth) {
|
|
252
|
-
var e_7, _a;
|
|
253
|
-
if (defaultColWidth === void 0) { defaultColWidth = 300; }
|
|
254
|
-
/** @type {?} */
|
|
255
|
-
var contentWidth = 0;
|
|
256
|
-
try {
|
|
257
|
-
for (var allColumns_1 = tslib_1.__values(allColumns), allColumns_1_1 = allColumns_1.next(); !allColumns_1_1.done; allColumns_1_1 = allColumns_1.next()) {
|
|
258
|
-
var column = allColumns_1_1.value;
|
|
259
|
-
contentWidth += column.width || defaultColWidth;
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
catch (e_7_1) { e_7 = { error: e_7_1 }; }
|
|
263
|
-
finally {
|
|
264
|
-
try {
|
|
265
|
-
if (allColumns_1_1 && !allColumns_1_1.done && (_a = allColumns_1.return)) _a.call(allColumns_1);
|
|
266
|
-
}
|
|
267
|
-
finally { if (e_7) throw e_7.error; }
|
|
268
|
-
}
|
|
269
|
-
return contentWidth;
|
|
270
|
-
}
|
|
271
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bzd2ltbGFuZS9uZ3gtZGF0YXRhYmxlLyIsInNvdXJjZXMiOlsibGliL3V0aWxzL21hdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sVUFBVSxDQUFDOzs7Ozs7QUFLM0QsTUFBTSxVQUFVLGdCQUFnQixDQUFDLE9BQWM7OztRQUN6QyxhQUFhLEdBQUcsQ0FBQzs7UUFFckIsS0FBZ0IsSUFBQSxZQUFBLGlCQUFBLE9BQU8sQ0FBQSxnQ0FBQSxxREFBRTtZQUFwQixJQUFNLENBQUMsb0JBQUE7WUFDVixhQUFhLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUM7U0FDbEM7Ozs7Ozs7OztJQUVELE9BQU8sYUFBYSxDQUFDO0FBQ3ZCLENBQUM7Ozs7Ozs7O0FBTUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLFVBQWUsRUFBRSxhQUFrQjs7UUFDOUQsWUFBWSxHQUFHLGlCQUFpQixDQUFDLFVBQVUsQ0FBQzs7UUFDNUMsYUFBYSxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQzs7UUFDNUMsV0FBVyxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUM7SUFFNUMsSUFBSSxZQUFZLEtBQUssYUFBYSxFQUFFO1FBQ2xDLFlBQVksQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0tBQ3pEO0FBQ0gsQ0FBQzs7Ozs7Ozs7QUFLRCxTQUFTLFlBQVksQ0FBQyxXQUFnQixFQUFFLFFBQWEsRUFBRSxhQUFrQjs7SUFDdkUsNkVBQTZFO0lBQzdFLEtBQUssSUFBTSxJQUFJLElBQUksV0FBVyxFQUFFOztZQUM5QixLQUFxQixJQUFBLG9CQUFBLGlCQUFBLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQSxDQUFBLGdCQUFBLDRCQUFFO2dCQUFuQyxJQUFNLE1BQU0sV0FBQTtnQkFDZixJQUFJLENBQUMsTUFBTSxDQUFDLGFB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LGlCQUFBLGdCQUFnQixDQUFBLGtEQUFBLGdGQUFFO1lBQWxDLElBQU0sTUFBTSw2QkFBQTs7Z0JBQ1QsS0FBSyxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQzdDLGVBQWUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2xDOzs7Ozs7Ozs7QUFDSCxDQUFDOzs7Ozs7O0FBS0QsU0FBUyxlQUFlLENBQUMsVUFBZSxFQUFFLGVBQTZCOztJQUE3QixnQ0FBQSxFQUFBLHFCQUE2Qjs7UUFDakUsWUFBWSxHQUFHLENBQUM7O1FBRXBCLEtBQXFCLElBQUEsZUFBQSxpQkFBQSxVQUFVLENBQUEsc0NBQUEsOERBQUU7WUFBNUIsSUFBTSxNQUFNLHVCQUFBO1lBQ2YsWUFBWSxJQUFJLE1BQU0sQ0FBQyxLQUFLLElBQUksZUFBZSxDQUFDO1NBQ2pEOzs7Ozs7Ozs7SUFFRCxPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29sdW1uc0J5UGluLCBjb2x1bW5zVG90YWxXaWR0aCB9IGZyb20gJy4vY29sdW1uJztcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBUb3RhbCBGbGV4IEdyb3dcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRvdGFsRmxleEdyb3coY29sdW1uczogYW55W10pIHtcbiAgbGV0IHRvdGFsRmxleEdyb3cgPSAwO1xuXG4gIGZvciAoY29uc3QgYyBvZiBjb2x1bW5zKSB7XG4gICAgdG90YWxGbGV4R3JvdyArPSBjLmZsZXhHcm93IHx8IDA7XG4gIH1cblxuICByZXR1cm4gdG90YWxGbGV4R3Jvdztcbn1cblxuLyoqXG4gKiBBZGp1c3RzIHRoZSBjb2x1bW4gd2lkdGhzLlxuICogSW5zcGlyZWQgYnk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9maXhlZC1kYXRhLXRhYmxlL2Jsb2IvbWFzdGVyL3NyYy9GaXhlZERhdGFUYWJsZVdpZHRoSGVscGVyLmpzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGp1c3RDb2x1bW5XaWR0aHMoYWxsQ29sdW1uczogYW55LCBleHBlY3RlZFdpZHRoOiBhbnkpIHtcbiAgY29uc3QgY29sdW1uc1dpZHRoID0gY29sdW1uc1RvdGFsV2lkdGgoYWxsQ29sdW1ucyk7XG4gIGNvbnN0IHRvdGFsRmxleEdyb3cgPSBnZXRUb3RhbEZsZXhHcm93KGFsbENvbHVtbnMpO1xuICBjb25zdCBjb2xzQnlHcm91cCA9IGNvbHVtbnNCeVBpbihhbGxDb2x1bW5zKTtcblxuICBpZiAoY29sdW1uc1dpZHRoICE9PSBleHBlY3RlZFdpZHRoKSB7XG4gICAgc2NhbGVDb2x1bW5zKGNvbHNCeUdyb3VwLCBleHBlY3RlZFdpZHRoLCB0b3RhbEZsZXhHcm93KTtcbiAgfVxufVxuXG4vKipcbiAqIFJlc2l6ZXMgY29sdW1ucyBiYXNlZCBvbiB0aGUgZmxleEdyb3cgcHJvcGVydHksIHdoaWxlIHJlc3BlY3RpbmcgbWFudWFsbHkgc2V0IHdpZHRoc1xuICovXG5mdW5jdGlvbiBzY2FsZUNvbHVtbnMoY29sc0J5R3JvdXA6IGFueSwgbWF4V2lkdGg6IGFueSwgdG90YWxGbGV4R3JvdzogYW55KSB7XG4gIC8vIGNhbGN1bGF0ZSB0b3RhbCB3aWR0aCBhbmQgZmxleGdyb3cgcG9pbnRzIGZvciBjb3VsdW1ucyB0aGF0IGNhbiBiZSByZXNpemVkXG4gIGZvciAoY29uc3QgYXR0ciBpbiBjb2xzQnlHcm91cCkge1xuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHNCeUdyb3VwW2F0dHJdKSB7XG4gICAgICBpZiAoIWNvbHVtbi5jYW5BdXRvUmVzaXplKSB7XG4gICAgICAgIG1heFdpZHRoIC09IGNvbHVtbi53aWR0aDtcbiAgICAgICAgdG90YWxGbGV4R3JvdyAtPSBjb2x1bW4uZmxleEdyb3cgPyBjb2x1bW4uZmxleEdyb3cgOiAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29sdW1uLndpZHRoID0gMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBoYXNNaW5XaWR0aCA9IHt9O1xuICBsZXQgcmVtYWluaW5nV2lkdGggPSBtYXhXaWR0aDtcblxuICAvLyByZXNpemUgY29sdW1ucyB1bnRpbCBubyB3aWR0aCBpcyBsZWZ0IHRvIGJlIGRpc3RyaWJ1dGVkXG4gIGRvIHtcbiAgICBjb25zdCB3aWR0aFBlckZsZXhQb2ludCA9IHJlbWFpbmluZ1dpZHRoIC8gdG90YWxGbGV4R3JvdztcbiAgICByZW1haW5pbmdXaWR0aCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IGF0dHIgaW4gY29sc0J5R3JvdXApIHtcbiAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHNCeUdyb3VwW2F0dHJdKSB7XG4gICAgICAgIC8vIGlmIHRoZSBjb2x1bW4gY2FuIGJlIHJlc2l6ZSBhbmQgaXQgaGFzbid0IHJlYWNoZWQgaXRzIG1pbmltdW0gd2lkdGggeWV0XG4gICAgICAgIGlmIChjb2x1bW4uY2FuQXV0b1Jlc2l6ZSAmJiAhaGFzTWluV2lkdGhbY29sdW1uLnByb3BdKSB7XG4gICAgICAgICAgY29uc3QgbmV3V2lkdGggPSBjb2x1bW4ud2lkdGggKyBjb2x1bW4uZmxleEdyb3cgKiB3aWR0aFBlckZsZXhQb2ludDtcbiAgICAgICAgICBpZiAoY29sdW1uLm1pbldpZHRoICE9PSB1bmRlZmluZWQgJiYgbmV3V2lkdGggPCBjb2x1bW4ubWluV2lkdGgpIHtcbiAgICAgICAgICAgIHJlbWFpbmluZ1dpZHRoICs9IG5ld1dpZHRoIC0gY29sdW1uLm1pbldpZHRoO1xuICAgICAgICAgICAgY29sdW1uLndpZHRoID0gY29sdW1uLm1pbldpZHRoO1xuICAgICAgICAgICAgaGFzTWluV2lkdGhbY29sdW1uLnByb3BdID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29sdW1uLndpZHRoID0gbmV3V2lkdGg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IHdoaWxlIChyZW1haW5pbmdXaWR0aCAhPT0gMCk7XG59XG5cbi8qKlxuICogRm9yY2VzIHRoZSB3aWR0aCBvZiB0aGUgY29sdW1ucyB0b1xuICogZGlzdHJpYnV0ZSBlcXVhbGx5IGJ1dCBvdmVyZmxvd2luZyB3aGVuIG5lY2Vzc2FyeVxuICpcbiAqIFJ1bGVzOlxuICpcbiAqICAtIElmIGNvbWJpbmVkIHdpdGhzIGFyZSBsZXNzIHRoYW4gdGhlIHRvdGFsIHdpZHRoIG9mIHRoZSBncmlkLFxuICogICAgcHJvcG9ydGlvbiB0aGUgd2lkdGhzIGdpdmVuIHRoZSBtaW4gLyBtYXggLyBub3JtYWwgd2lkdGhzIHRvIGZpbGwgdGhlIHdpZHRoLlxuICpcbiAqICAtIElmIHRoZSBjb21iaW5lZCB3aWR0aHMsIGV4Y2VlZCB0aGUgdG90YWwgd2lkdGggb2YgdGhlIGdyaWQsXG4gKiAgICB1c2UgdGhlIHN0YW5kYXJkIHdpZHRocy5cbiAqXG4gKiAgLSBJZiBhIGNvbHVtbiBpcyByZXNpemVkLCBpdCBzaG91bGQgYWx3YXlzIHVzZSB0aGF0IHdpZHRoXG4gKlxuICogIC0gVGhlIHByb3BvcnRpb25hbCB3aWR0aHMgc2hvdWxkIG5ldmVyIGZhbGwgYmVsb3cgbWluIHNpemUgaWYgc3BlY2lmaWVkLlxuICpcbiAqICAtIElmIHRoZSBncmlkIHN0YXJ0cyBvZmYgc21hbGwgYnV0IHRoZW4gYmVjb21lcyBncmVhdGVyIHRoYW4gdGhlIHNpemUgKCArIC8gLSApXG4gKiAgICB0aGUgd2lkdGggc2hvdWxkIHVzZSB0aGUgb3JpZ2luYWwgd2lkdGg7IG5vdCB0aGUgbmV3bHkgcHJvcG9ydGlvbmVkIHdpZHRocy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcmNlRmlsbENvbHVtbldpZHRocyhcbiAgYWxsQ29sdW1uczogYW55W10sXG4gIGV4cGVjdGVkV2lkdGg6IG51bWJlcixcbiAgc3RhcnRJZHg6IG51bWJlcixcbiAgYWxsb3dCbGVlZDogYm9vbGVhbixcbiAgZGVmYXVsdENvbFdpZHRoOiBudW1iZXIgPSAzMDBcbikge1xuICBjb25zdCBjb2x1bW5zVG9SZXNpemUgPSBhbGxDb2x1bW5zLnNsaWNlKHN0YXJ0SWR4ICsgMSwgYWxsQ29sdW1ucy5sZW5ndGgpLmZpbHRlcihjID0+IHtcbiAgICByZXR1cm4gYy5jYW5BdXRvUmVzaXplICE9PSBmYWxzZTtcbiAgfSk7XG5cbiAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1uc1RvUmVzaXplKSB7XG4gICAgaWYgKCFjb2x1bW4uJCRvbGRXaWR0aCkge1xuICAgICAgY29sdW1uLiQkb2xkV2lkdGggPSBjb2x1bW4ud2lkdGg7XG4gICAgfVxuICB9XG5cbiAgbGV0IGFkZGl0aW9uV2lkdGhQZXJDb2x1bW4gPSAwO1xuICBsZXQgZXhjZWVkc1dpbmRvdyA9IGZhbHNlO1xuICBsZXQgY29udGVudFdpZHRoID0gZ2V0Q29udGVudFdpZHRoKGFsbENvbHVtbnMsIGRlZmF1bHRDb2xXaWR0aCk7XG4gIGxldCByZW1haW5pbmdXaWR0aCA9IGV4cGVjdGVkV2lkdGggLSBjb250ZW50V2lkdGg7XG4gIGNvbnN0IGNvbHVtbnNQcm9jZXNzZWQ6IGFueVtdID0gW107XG4gIGNvbnN0IHJlbWFpbmluZ1dpZHRoTGltaXQgPSAxOyAvLyB3aGVuIHRvIHN0b3BcblxuICAvLyBUaGlzIGxvb3AgdGFrZXMgY2FyZSBvZiB0aGVcbiAgZG8ge1xuICAgIGFkZGl0aW9uV2lkdGhQZXJDb2x1bW4gPSByZW1haW5pbmdXaWR0aCAvIGNvbHVtbnNUb1Jlc2l6ZS5sZW5ndGg7XG4gICAgZXhjZWVkc1dpbmRvdyA9IGNvbnRlbnRXaWR0aCA+PSBleHBlY3RlZFdpZHRoO1xuXG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1uc1RvUmVzaXplKSB7XG4gICAgICBpZiAoZXhjZWVkc1dpbmRvdyAmJiBhbGxvd0JsZWVkKSB7XG4gICAgICAgIGNvbHVtbi53aWR0aCA9IGNvbHVtbi4kJG9sZFdpZHRoIHx8IGNvbHVtbi53aWR0aCB8fCBkZWZhdWx0Q29sV2lkdGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBuZXdTaXplID0gKGNvbHVtbi53aWR0aCB8fCBkZWZhdWx0Q29sV2lkdGgpICsgYWRkaXRpb25XaWR0aFBlckNvbHVtbjtcblxuICAgICAgICBpZiAoY29sdW1uLm1pbldpZHRoICYmIG5ld1NpemUgPCBjb2x1bW4ubWluV2lkdGgpIHtcbiAgICAgICAgICBjb2x1bW4ud2lkdGggPSBjb2x1bW4ubWluV2lkdGg7XG4gICAgICAgICAgY29sdW1uc1Byb2Nlc3NlZC5wdXNoKGNvbHVtbik7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLm1heFdpZHRoICYmIG5ld1NpemUgPiBjb2x1bW4ubWF4V2lkdGgpIHtcbiAgICAgICAgICBjb2x1bW4ud2lkdGggPSBjb2x1bW4ubWF4V2lkdGg7XG4gICAgICAgICAgY29sdW1uc1Byb2Nlc3NlZC5wdXNoKGNvbHVtbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sdW1uLndpZHRoID0gbmV3U2l6ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb2x1bW4ud2lkdGggPSBNYXRoLm1heCgwLCBjb2x1bW4ud2lkdGgpO1xuICAgIH1cblxuICAgIGNvbnRlbnRXaWR0aCA9IGdldENvbnRlbnRXaWR0aChhbGxDb2x1bW5zKTtcbiAgICByZW1haW5pbmdXaWR0aCA9IGV4cGVjdGVkV2lkdGggLSBjb250ZW50V2lkdGg7XG4gICAgcmVtb3ZlUHJvY2Vzc2VkQ29sdW1ucyhjb2x1bW5zVG9SZXNpemUsIGNvbHVtbnNQcm9jZXNzZWQpO1xuICB9IHdoaWxlIChyZW1haW5pbmdXaWR0aCA+IHJlbWFpbmluZ1dpZHRoTGltaXQgJiYgY29sdW1uc1RvUmVzaXplLmxlbmd0aCAhPT0gMCk7XG59XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBwcm9jZXNzZWQgY29sdW1ucyBmcm9tIHRoZSBjdXJyZW50IGFjdGl2ZSBjb2x1bW5zLlxuICovXG5mdW5jdGlvbiByZW1vdmVQcm9jZXNzZWRDb2x1bW5zKGNvbHVtbnNUb1Jlc2l6ZTogYW55W10sIGNvbHVtbnNQcm9jZXNzZWQ6IGFueVtdKSB7XG4gIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnNQcm9jZXNzZWQpIHtcbiAgICBjb25zdCBpbmRleCA9IGNvbHVtbnNUb1Jlc2l6ZS5pbmRleE9mKGNvbHVtbik7XG4gICAgY29sdW1uc1RvUmVzaXplLnNwbGljZShpbmRleCwgMSk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXRzIHRoZSB3aWR0aCBvZiB0aGUgY29sdW1uc1xuICovXG5mdW5jdGlvbiBnZXRDb250ZW50V2lkdGgoYWxsQ29sdW1uczogYW55LCBkZWZhdWx0Q29sV2lkdGg6IG51bWJlciA9IDMwMCk6IG51bWJlciB7XG4gIGxldCBjb250ZW50V2lkdGggPSAwO1xuXG4gIGZvciAoY29uc3QgY29sdW1uIG9mIGFsbENvbHVtbnMpIHtcbiAgICBjb250ZW50V2lkdGggKz0gY29sdW1uLndpZHRoIHx8IGRlZmF1bHRDb2xXaWR0aDtcbiAgfVxuXG4gIHJldHVybiBjb250ZW50V2lkdGg7XG59XG4iXX0=
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview added by tsickle
|
|
3
|
-
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
4
|
-
*/
|
|
5
|
-
import { camelCase } from './camel-case';
|
|
6
|
-
/** @type {?} */
|
|
7
|
-
var cache = {};
|
|
8
|
-
/** @type {?} */
|
|
9
|
-
var testStyle = typeof document !== 'undefined' ? document.createElement('div').style : undefined;
|
|
10
|
-
// Get Prefix
|
|
11
|
-
// http://davidwalsh.name/vendor-prefix
|
|
12
|
-
var ɵ0 = /**
|
|
13
|
-
* @return {?}
|
|
14
|
-
*/
|
|
15
|
-
function () {
|
|
16
|
-
/** @type {?} */
|
|
17
|
-
var styles = typeof window !== 'undefined' ? window.getComputedStyle(document.documentElement, '') : undefined;
|
|
18
|
-
/** @type {?} */
|
|
19
|
-
var match = typeof styles !== 'undefined'
|
|
20
|
-
? Array.prototype.slice
|
|
21
|
-
.call(styles)
|
|
22
|
-
.join('')
|
|
23
|
-
.match(/-(moz|webkit|ms)-/)
|
|
24
|
-
: null;
|
|
25
|
-
/** @type {?} */
|
|
26
|
-
var pre = match !== null ? match[1] : undefined;
|
|
27
|
-
// tslint:disable-next-line: tsr-detect-non-literal-regexp
|
|
28
|
-
/** @type {?} */
|
|
29
|
-
var dom = typeof pre !== 'undefined' ? 'WebKit|Moz|MS|O'.match(new RegExp('(' + pre + ')', 'i'))[1] : undefined;
|
|
30
|
-
return dom
|
|
31
|
-
? {
|
|
32
|
-
dom: dom,
|
|
33
|
-
lowercase: pre,
|
|
34
|
-
css: "-" + pre + "-",
|
|
35
|
-
js: pre[0].toUpperCase() + pre.substr(1)
|
|
36
|
-
}
|
|
37
|
-
: undefined;
|
|
38
|
-
};
|
|
39
|
-
/** @type {?} */
|
|
40
|
-
var prefix = ((ɵ0))();
|
|
41
|
-
/**
|
|
42
|
-
* @param {?} property
|
|
43
|
-
* @return {?}
|
|
44
|
-
*/
|
|
45
|
-
export function getVendorPrefixedName(property) {
|
|
46
|
-
/** @type {?} */
|
|
47
|
-
var name = camelCase(property);
|
|
48
|
-
if (!cache[name]) {
|
|
49
|
-
if (prefix !== undefined && testStyle[prefix.css + property] !== undefined) {
|
|
50
|
-
cache[name] = prefix.css + property;
|
|
51
|
-
}
|
|
52
|
-
else if (testStyle[property] !== undefined) {
|
|
53
|
-
cache[name] = property;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return cache[name];
|
|
57
|
-
}
|
|
58
|
-
export { ɵ0 };
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlZml4ZXMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3dpbWxhbmUvbmd4LWRhdGF0YWJsZS8iLCJzb3VyY2VzIjpbImxpYi91dGlscy9wcmVmaXhlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7SUFFbkMsS0FBSyxHQUFHLEVBQUU7O0lBQ1YsU0FBUyxHQUFHLE9BQU8sUUFBUSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVM7Ozs7OztBQUluRjs7UUFDUixNQUFNLEdBQUcsT0FBTyxNQUFNLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUzs7UUFDMUcsS0FBSyxHQUNULE9BQU8sTUFBTSxLQUFLLFdBQVc7UUFDM0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSzthQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDO2FBQ1osSUFBSSxDQUFDLEVBQUUsQ0FBQzthQUNSLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQztRQUMvQixDQUFDLENBQUMsSUFBSTs7UUFDSixHQUFHLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTOzs7UUFFM0MsR0FBRyxHQUFHLE9BQU8sR0FBRyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7SUFFakgsT0FBTyxHQUFHO1FBQ1IsQ0FBQyxDQUFDO1lBQ0UsR0FBRyxLQUFBO1lBQ0gsU0FBUyxFQUFFLEdBQUc7WUFDZCxHQUFHLEVBQUUsTUFBSSxHQUFHLE1BQUc7WUFDZixFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3pDO1FBQ0gsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNoQixDQUFDOztJQXJCSyxNQUFNLEdBQUcsTUFxQmIsRUFBRTs7Ozs7QUFFSixNQUFNLFVBQVUscUJBQXFCLENBQUMsUUFBZ0I7O1FBQzlDLElBQUksR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDO0lBRWhDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDaEIsSUFBSSxNQUFNLEtBQUssU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLFNBQVMsRUFBRTtZQUMxRSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUM7U0FDckM7YUFBTSxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxTQUFTLEVBQUU7WUFDNUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQztTQUN4QjtLQUNGO0lBRUQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNhbWVsQ2FzZSB9IGZyb20gJy4vY2FtZWwtY2FzZSc7XG5cbmNvbnN0IGNhY2hlID0ge307XG5jb25zdCB0ZXN0U3R5bGUgPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGUgOiB1bmRlZmluZWQ7XG5cbi8vIEdldCBQcmVmaXhcbi8vIGh0dHA6Ly9kYXZpZHdhbHNoLm5hbWUvdmVuZG9yLXByZWZpeFxuY29uc3QgcHJlZml4ID0gKGZ1bmN0aW9uKCkge1xuICBjb25zdCBzdHlsZXMgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgJycpIDogdW5kZWZpbmVkO1xuICBjb25zdCBtYXRjaCA9XG4gICAgdHlwZW9mIHN0eWxlcyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgID8gQXJyYXkucHJvdG90eXBlLnNsaWNlXG4gICAgICAgICAgLmNhbGwoc3R5bGVzKVxuICAgICAgICAgIC5qb2luKCcnKVxuICAgICAgICAgIC5tYXRjaCgvLShtb3p8d2Via2l0fG1zKS0vKVxuICAgICAgOiBudWxsO1xuICBjb25zdCBwcmUgPSBtYXRjaCAhPT0gbnVsbCA/IG1hdGNoWzFdIDogdW5kZWZpbmVkO1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IHRzci1kZXRlY3Qtbm9uLWxpdGVyYWwtcmVnZXhwXG4gIGNvbnN0IGRvbSA9IHR5cGVvZiBwcmUgIT09ICd1bmRlZmluZWQnID8gJ1dlYktpdHxNb3p8TVN8TycubWF0Y2gobmV3IFJlZ0V4cCgnKCcgKyBwcmUgKyAnKScsICdpJykpWzFdIDogdW5kZWZpbmVkO1xuXG4gIHJldHVybiBkb21cbiAgICA/IHtcbiAgICAgICAgZG9tLFxuICAgICAgICBsb3dlcmNhc2U6IHByZSxcbiAgICAgICAgY3NzOiBgLSR7cHJlfS1gLFxuICAgICAgICBqczogcHJlWzBdLnRvVXBwZXJDYXNlKCkgKyBwcmUuc3Vic3RyKDEpXG4gICAgICB9XG4gICAgOiB1bmRlZmluZWQ7XG59KSgpO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmVuZG9yUHJlZml4ZWROYW1lKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgY29uc3QgbmFtZSA9IGNhbWVsQ2FzZShwcm9wZXJ0eSk7XG5cbiAgaWYgKCFjYWNoZVtuYW1lXSkge1xuICAgIGlmIChwcmVmaXggIT09IHVuZGVmaW5lZCAmJiB0ZXN0U3R5bGVbcHJlZml4LmNzcyArIHByb3BlcnR5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjYWNoZVtuYW1lXSA9IHByZWZpeC5jc3MgKyBwcm9wZXJ0eTtcbiAgICB9IGVsc2UgaWYgKHRlc3RTdHlsZVtwcm9wZXJ0eV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2FjaGVbbmFtZV0gPSBwcm9wZXJ0eTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2FjaGVbbmFtZV07XG59XG4iXX0=
|
|
@@ -1,264 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview added by tsickle
|
|
3
|
-
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* This object contains the cache of the various row heights that are present inside
|
|
7
|
-
* the data table. Its based on Fenwick tree data structure that helps with
|
|
8
|
-
* querying sums that have time complexity of log n.
|
|
9
|
-
*
|
|
10
|
-
* Fenwick Tree Credits: http://petr-mitrichev.blogspot.com/2013/05/fenwick-tree-range-updates.html
|
|
11
|
-
* https://github.com/mikolalysenko/fenwick-tree
|
|
12
|
-
*
|
|
13
|
-
*/
|
|
14
|
-
var /**
|
|
15
|
-
* This object contains the cache of the various row heights that are present inside
|
|
16
|
-
* the data table. Its based on Fenwick tree data structure that helps with
|
|
17
|
-
* querying sums that have time complexity of log n.
|
|
18
|
-
*
|
|
19
|
-
* Fenwick Tree Credits: http://petr-mitrichev.blogspot.com/2013/05/fenwick-tree-range-updates.html
|
|
20
|
-
* https://github.com/mikolalysenko/fenwick-tree
|
|
21
|
-
*
|
|
22
|
-
*/
|
|
23
|
-
RowHeightCache = /** @class */ (function () {
|
|
24
|
-
function RowHeightCache() {
|
|
25
|
-
/**
|
|
26
|
-
* Tree Array stores the cumulative information of the row heights to perform efficient
|
|
27
|
-
* range queries and updates. Currently the tree is initialized to the base row
|
|
28
|
-
* height instead of the detail row height.
|
|
29
|
-
*/
|
|
30
|
-
this.treeArray = [];
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Clear the Tree array.
|
|
34
|
-
*/
|
|
35
|
-
/**
|
|
36
|
-
* Clear the Tree array.
|
|
37
|
-
* @return {?}
|
|
38
|
-
*/
|
|
39
|
-
RowHeightCache.prototype.clearCache = /**
|
|
40
|
-
* Clear the Tree array.
|
|
41
|
-
* @return {?}
|
|
42
|
-
*/
|
|
43
|
-
function () {
|
|
44
|
-
this.treeArray = [];
|
|
45
|
-
};
|
|
46
|
-
/**
|
|
47
|
-
* Initialize the Fenwick tree with row Heights.
|
|
48
|
-
*
|
|
49
|
-
* @param rows The array of rows which contain the expanded status.
|
|
50
|
-
* @param rowHeight The row height.
|
|
51
|
-
* @param detailRowHeight The detail row height.
|
|
52
|
-
*/
|
|
53
|
-
/**
|
|
54
|
-
* Initialize the Fenwick tree with row Heights.
|
|
55
|
-
*
|
|
56
|
-
* @param {?} details
|
|
57
|
-
* @return {?}
|
|
58
|
-
*/
|
|
59
|
-
RowHeightCache.prototype.initCache = /**
|
|
60
|
-
* Initialize the Fenwick tree with row Heights.
|
|
61
|
-
*
|
|
62
|
-
* @param {?} details
|
|
63
|
-
* @return {?}
|
|
64
|
-
*/
|
|
65
|
-
function (details) {
|
|
66
|
-
var rows = details.rows, rowHeight = details.rowHeight, detailRowHeight = details.detailRowHeight, externalVirtual = details.externalVirtual, rowCount = details.rowCount, rowIndexes = details.rowIndexes, rowExpansions = details.rowExpansions;
|
|
67
|
-
/** @type {?} */
|
|
68
|
-
var isFn = typeof rowHeight === 'function';
|
|
69
|
-
/** @type {?} */
|
|
70
|
-
var isDetailFn = typeof detailRowHeight === 'function';
|
|
71
|
-
if (!isFn && isNaN(rowHeight)) {
|
|
72
|
-
throw new Error("Row Height cache initialization failed. Please ensure that 'rowHeight' is a\n valid number or function value: (" + rowHeight + ") when 'scrollbarV' is enabled.");
|
|
73
|
-
}
|
|
74
|
-
// Add this additional guard in case detailRowHeight is set to 'auto' as it wont work.
|
|
75
|
-
if (!isDetailFn && isNaN(detailRowHeight)) {
|
|
76
|
-
throw new Error("Row Height cache initialization failed. Please ensure that 'detailRowHeight' is a\n valid number or function value: (" + detailRowHeight + ") when 'scrollbarV' is enabled.");
|
|
77
|
-
}
|
|
78
|
-
/** @type {?} */
|
|
79
|
-
var n = externalVirtual ? rowCount : rows.length;
|
|
80
|
-
this.treeArray = new Array(n);
|
|
81
|
-
for (var i = 0; i < n; ++i) {
|
|
82
|
-
this.treeArray[i] = 0;
|
|
83
|
-
}
|
|
84
|
-
for (var i = 0; i < n; ++i) {
|
|
85
|
-
/** @type {?} */
|
|
86
|
-
var row = rows[i];
|
|
87
|
-
/** @type {?} */
|
|
88
|
-
var currentRowHeight = rowHeight;
|
|
89
|
-
if (isFn) {
|
|
90
|
-
currentRowHeight = rowHeight(row);
|
|
91
|
-
}
|
|
92
|
-
// Add the detail row height to the already expanded rows.
|
|
93
|
-
// This is useful for the table that goes through a filter or sort.
|
|
94
|
-
/** @type {?} */
|
|
95
|
-
var expanded = rowExpansions.get(row);
|
|
96
|
-
if (row && expanded === 1) {
|
|
97
|
-
if (isDetailFn) {
|
|
98
|
-
/** @type {?} */
|
|
99
|
-
var index = rowIndexes.get(row);
|
|
100
|
-
currentRowHeight += detailRowHeight(row, index);
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
currentRowHeight += detailRowHeight;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
this.update(i, currentRowHeight);
|
|
107
|
-
}
|
|
108
|
-
};
|
|
109
|
-
/**
|
|
110
|
-
* Given the ScrollY position i.e. sum, provide the rowIndex
|
|
111
|
-
* that is present in the current view port. Below handles edge cases.
|
|
112
|
-
*/
|
|
113
|
-
/**
|
|
114
|
-
* Given the ScrollY position i.e. sum, provide the rowIndex
|
|
115
|
-
* that is present in the current view port. Below handles edge cases.
|
|
116
|
-
* @param {?} scrollY
|
|
117
|
-
* @return {?}
|
|
118
|
-
*/
|
|
119
|
-
RowHeightCache.prototype.getRowIndex = /**
|
|
120
|
-
* Given the ScrollY position i.e. sum, provide the rowIndex
|
|
121
|
-
* that is present in the current view port. Below handles edge cases.
|
|
122
|
-
* @param {?} scrollY
|
|
123
|
-
* @return {?}
|
|
124
|
-
*/
|
|
125
|
-
function (scrollY) {
|
|
126
|
-
if (scrollY === 0)
|
|
127
|
-
return 0;
|
|
128
|
-
return this.calcRowIndex(scrollY);
|
|
129
|
-
};
|
|
130
|
-
/**
|
|
131
|
-
* When a row is expanded or rowHeight is changed, update the height. This can
|
|
132
|
-
* be utilized in future when Angular Data table supports dynamic row heights.
|
|
133
|
-
*/
|
|
134
|
-
/**
|
|
135
|
-
* When a row is expanded or rowHeight is changed, update the height. This can
|
|
136
|
-
* be utilized in future when Angular Data table supports dynamic row heights.
|
|
137
|
-
* @param {?} atRowIndex
|
|
138
|
-
* @param {?} byRowHeight
|
|
139
|
-
* @return {?}
|
|
140
|
-
*/
|
|
141
|
-
RowHeightCache.prototype.update = /**
|
|
142
|
-
* When a row is expanded or rowHeight is changed, update the height. This can
|
|
143
|
-
* be utilized in future when Angular Data table supports dynamic row heights.
|
|
144
|
-
* @param {?} atRowIndex
|
|
145
|
-
* @param {?} byRowHeight
|
|
146
|
-
* @return {?}
|
|
147
|
-
*/
|
|
148
|
-
function (atRowIndex, byRowHeight) {
|
|
149
|
-
if (!this.treeArray.length) {
|
|
150
|
-
throw new Error("Update at index " + atRowIndex + " with value " + byRowHeight + " failed:\n Row Height cache not initialized.");
|
|
151
|
-
}
|
|
152
|
-
/** @type {?} */
|
|
153
|
-
var n = this.treeArray.length;
|
|
154
|
-
atRowIndex |= 0;
|
|
155
|
-
while (atRowIndex < n) {
|
|
156
|
-
this.treeArray[atRowIndex] += byRowHeight;
|
|
157
|
-
atRowIndex |= atRowIndex + 1;
|
|
158
|
-
}
|
|
159
|
-
};
|
|
160
|
-
/**
|
|
161
|
-
* Range Sum query from 1 to the rowIndex
|
|
162
|
-
*/
|
|
163
|
-
/**
|
|
164
|
-
* Range Sum query from 1 to the rowIndex
|
|
165
|
-
* @param {?} atIndex
|
|
166
|
-
* @return {?}
|
|
167
|
-
*/
|
|
168
|
-
RowHeightCache.prototype.query = /**
|
|
169
|
-
* Range Sum query from 1 to the rowIndex
|
|
170
|
-
* @param {?} atIndex
|
|
171
|
-
* @return {?}
|
|
172
|
-
*/
|
|
173
|
-
function (atIndex) {
|
|
174
|
-
if (!this.treeArray.length) {
|
|
175
|
-
throw new Error("query at index " + atIndex + " failed: Fenwick tree array not initialized.");
|
|
176
|
-
}
|
|
177
|
-
/** @type {?} */
|
|
178
|
-
var sum = 0;
|
|
179
|
-
atIndex |= 0;
|
|
180
|
-
while (atIndex >= 0) {
|
|
181
|
-
sum += this.treeArray[atIndex];
|
|
182
|
-
atIndex = (atIndex & (atIndex + 1)) - 1;
|
|
183
|
-
}
|
|
184
|
-
return sum;
|
|
185
|
-
};
|
|
186
|
-
/**
|
|
187
|
-
* Find the total height between 2 row indexes
|
|
188
|
-
*/
|
|
189
|
-
/**
|
|
190
|
-
* Find the total height between 2 row indexes
|
|
191
|
-
* @param {?} atIndexA
|
|
192
|
-
* @param {?} atIndexB
|
|
193
|
-
* @return {?}
|
|
194
|
-
*/
|
|
195
|
-
RowHeightCache.prototype.queryBetween = /**
|
|
196
|
-
* Find the total height between 2 row indexes
|
|
197
|
-
* @param {?} atIndexA
|
|
198
|
-
* @param {?} atIndexB
|
|
199
|
-
* @return {?}
|
|
200
|
-
*/
|
|
201
|
-
function (atIndexA, atIndexB) {
|
|
202
|
-
return this.query(atIndexB) - this.query(atIndexA - 1);
|
|
203
|
-
};
|
|
204
|
-
/**
|
|
205
|
-
* Given the ScrollY position i.e. sum, provide the rowIndex
|
|
206
|
-
* that is present in the current view port.
|
|
207
|
-
*/
|
|
208
|
-
/**
|
|
209
|
-
* Given the ScrollY position i.e. sum, provide the rowIndex
|
|
210
|
-
* that is present in the current view port.
|
|
211
|
-
* @private
|
|
212
|
-
* @param {?} sum
|
|
213
|
-
* @return {?}
|
|
214
|
-
*/
|
|
215
|
-
RowHeightCache.prototype.calcRowIndex = /**
|
|
216
|
-
* Given the ScrollY position i.e. sum, provide the rowIndex
|
|
217
|
-
* that is present in the current view port.
|
|
218
|
-
* @private
|
|
219
|
-
* @param {?} sum
|
|
220
|
-
* @return {?}
|
|
221
|
-
*/
|
|
222
|
-
function (sum) {
|
|
223
|
-
if (!this.treeArray.length)
|
|
224
|
-
return 0;
|
|
225
|
-
/** @type {?} */
|
|
226
|
-
var pos = -1;
|
|
227
|
-
/** @type {?} */
|
|
228
|
-
var dataLength = this.treeArray.length;
|
|
229
|
-
// Get the highest bit for the block size.
|
|
230
|
-
/** @type {?} */
|
|
231
|
-
var highestBit = Math.pow(2, dataLength.toString(2).length - 1);
|
|
232
|
-
for (var blockSize = highestBit; blockSize !== 0; blockSize >>= 1) {
|
|
233
|
-
/** @type {?} */
|
|
234
|
-
var nextPos = pos + blockSize;
|
|
235
|
-
if (nextPos < dataLength && sum >= this.treeArray[nextPos]) {
|
|
236
|
-
sum -= this.treeArray[nextPos];
|
|
237
|
-
pos = nextPos;
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
return pos + 1;
|
|
241
|
-
};
|
|
242
|
-
return RowHeightCache;
|
|
243
|
-
}());
|
|
244
|
-
/**
|
|
245
|
-
* This object contains the cache of the various row heights that are present inside
|
|
246
|
-
* the data table. Its based on Fenwick tree data structure that helps with
|
|
247
|
-
* querying sums that have time complexity of log n.
|
|
248
|
-
*
|
|
249
|
-
* Fenwick Tree Credits: http://petr-mitrichev.blogspot.com/2013/05/fenwick-tree-range-updates.html
|
|
250
|
-
* https://github.com/mikolalysenko/fenwick-tree
|
|
251
|
-
*
|
|
252
|
-
*/
|
|
253
|
-
export { RowHeightCache };
|
|
254
|
-
if (false) {
|
|
255
|
-
/**
|
|
256
|
-
* Tree Array stores the cumulative information of the row heights to perform efficient
|
|
257
|
-
* range queries and updates. Currently the tree is initialized to the base row
|
|
258
|
-
* height instead of the detail row height.
|
|
259
|
-
* @type {?}
|
|
260
|
-
* @private
|
|
261
|
-
*/
|
|
262
|
-
RowHeightCache.prototype.treeArray;
|
|
263
|
-
}
|
|
264
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LWhlaWdodC1jYWNoZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bzd2ltbGFuZS9uZ3gtZGF0YXRhYmxlLyIsInNvdXJjZXMiOlsibGliL3V0aWxzL3Jvdy1oZWlnaHQtY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQVNBOzs7Ozs7Ozs7O0lBQUE7Ozs7OztRQU1VLGNBQVMsR0FBYSxFQUFFLENBQUM7SUEySW5DLENBQUM7SUF6SUM7O09BRUc7Ozs7O0lBQ0gsbUNBQVU7Ozs7SUFBVjtRQUNFLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7Ozs7O09BTUc7Ozs7Ozs7SUFDSCxrQ0FBUzs7Ozs7O0lBQVQsVUFBVSxPQUFZO1FBQ1osSUFBQSxtQkFBSSxFQUFFLDZCQUFTLEVBQUUseUNBQWUsRUFBRSx5Q0FBZSxFQUFFLDJCQUFRLEVBQUUsK0JBQVUsRUFBRSxxQ0FBYTs7WUFDeEYsSUFBSSxHQUFHLE9BQU8sU0FBUyxLQUFLLFVBQVU7O1lBQ3RDLFVBQVUsR0FBRyxPQUFPLGVBQWUsS0FBSyxVQUFVO1FBRXhELElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkhBQ3FCLFNBQVMsb0NBQWlDLENBQUMsQ0FBQztTQUNsRjtRQUVELHNGQUFzRjtRQUN0RixJQUFJLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUN6QyxNQUFNLElBQUksS0FBSyxDQUFDLGlJQUNxQixlQUFlLG9DQUFpQyxDQUFDLENBQUM7U0FDeEY7O1lBRUssQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTTtRQUNsRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTlCLEtBQUssSUFBSSxDQUFD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LElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTTtZQUFFLE9BQU8sQ0FBQyxDQUFDOztZQUVqQyxHQUFHLEdBQUcsQ0FBQyxDQUFDOztZQUNOLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU07OztZQUdsQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRWpFLEtBQUssSUFBSSxTQUFTLEdBQUcsVUFBVSxFQUFFLFNBQVMsS0FBSyxDQUFDLEVBQUUsU0FBUyxLQUFLLENBQUMsRUFBRTs7Z0JBQzNELE9BQU8sR0FBRyxHQUFHLEdBQUcsU0FBUztZQUMvQixJQUFJLE9BQU8sR0FBRyxVQUFVLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzFELEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMvQixHQUFHLEdBQUcsT0FBTyxDQUFDO2FBQ2Y7U0FDRjtRQUVELE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQixDQUFDO0lBQ0gscUJBQUM7QUFBRCxDQUFDLEFBakpELElBaUpDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBM0lDLG1DQUFpQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBvYmplY3QgY29udGFpbnMgdGhlIGNhY2hlIG9mIHRoZSB2YXJpb3VzIHJvdyBoZWlnaHRzIHRoYXQgYXJlIHByZXNlbnQgaW5zaWRlXG4gKiB0aGUgZGF0YSB0YWJsZS4gICBJdHMgYmFzZWQgb24gRmVud2ljayB0cmVlIGRhdGEgc3RydWN0dXJlIHRoYXQgaGVscHMgd2l0aFxuICogcXVlcnlpbmcgc3VtcyB0aGF0IGhhdmUgdGltZSBjb21wbGV4aXR5IG9mIGxvZyBuLlxuICpcbiAqIEZlbndpY2sgVHJlZSBDcmVkaXRzOiBodHRwOi8vcGV0ci1taXRyaWNoZXYuYmxvZ3Nwb3QuY29tLzIwMTMvMDUvZmVud2ljay10cmVlLXJhbmdlLXVwZGF0ZXMuaHRtbFxuICogaHR0cHM6Ly9naXRodWIuY29tL21pa29sYWx5c2Vua28vZmVud2ljay10cmVlXG4gKlxuICovXG5leHBvcnQgY2xhc3MgUm93SGVpZ2h0Q2FjaGUge1xuICAvKipcbiAgICogVHJlZSBBcnJheSBzdG9yZXMgdGhlIGN1bXVsYXRpdmUgaW5mb3JtYXRpb24gb2YgdGhlIHJvdyBoZWlnaHRzIHRvIHBlcmZvcm0gZWZmaWNpZW50XG4gICAqIHJhbmdlIHF1ZXJpZXMgYW5kIHVwZGF0ZXMuICBDdXJyZW50bHkgdGhlIHRyZWUgaXMgaW5pdGlhbGl6ZWQgdG8gdGhlIGJhc2Ugcm93XG4gICAqIGhlaWdodCBpbnN0ZWFkIG9mIHRoZSBkZXRhaWwgcm93IGhlaWdodC5cbiAgICovXG4gIHByaXZhdGUgdHJlZUFycmF5OiBudW1iZXJbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBDbGVhciB0aGUgVHJlZSBhcnJheS5cbiAgICovXG4gIGNsZWFyQ2FjaGUoKTogdm9pZCB7XG4gICAgdGhpcy50cmVlQXJyYXkgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBGZW53aWNrIHRyZWUgd2l0aCByb3cgSGVpZ2h0cy5cbiAgICpcbiAgICogQHBhcmFtIHJvd3MgVGhlIGFycmF5IG9mIHJvd3Mgd2hpY2ggY29udGFpbiB0aGUgZXhwYW5kZWQgc3RhdHVzLlxuICAgKiBAcGFyYW0gcm93SGVpZ2h0IFRoZSByb3cgaGVpZ2h0LlxuICAgKiBAcGFyYW0gZGV0YWlsUm93SGVpZ2h0IFRoZSBkZXRhaWwgcm93IGhlaWdodC5cbiAgICovXG4gIGluaXRDYWNoZShkZXRhaWxzOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCB7IHJvd3MsIHJvd0hlaWdodCwgZGV0YWlsUm93SGVpZ2h0LCBleHRlcm5hbFZpcnR1YWwsIHJvd0NvdW50LCByb3dJbmRleGVzLCByb3dFeHBhbnNpb25zIH0gPSBkZXRhaWxzO1xuICAgIGNvbnN0IGlzRm4gPSB0eXBlb2Ygcm93SGVpZ2h0ID09PSAnZnVuY3Rpb24nO1xuICAgIGNvbnN0IGlzRGV0YWlsRm4gPSB0eXBlb2YgZGV0YWlsUm93SGVpZ2h0ID09PSAnZnVuY3Rpb24nO1xuXG4gICAgaWYgKCFpc0ZuICYmIGlzTmFOKHJvd0hlaWdodCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUm93IEhlaWdodCBjYWNoZSBpbml0aWFsaXphdGlvbiBmYWlsZWQuIFBsZWFzZSBlbnN1cmUgdGhhdCAncm93SGVpZ2h0JyBpcyBhXG4gICAgICAgIHZhbGlkIG51bWJlciBvciBmdW5jdGlvbiB2YWx1ZTogKCR7cm93SGVpZ2h0fSkgd2hlbiAnc2Nyb2xsYmFyVicgaXMgZW5hYmxlZC5gKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgdGhpcyBhZGRpdGlvbmFsIGd1YXJkIGluIGNhc2UgZGV0YWlsUm93SGVpZ2h0IGlzIHNldCB0byAnYXV0bycgYXMgaXQgd29udCB3b3JrLlxuICAgIGlmICghaXNEZXRhaWxGbiAmJiBpc05hTihkZXRhaWxSb3dIZWlnaHQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFJvdyBIZWlnaHQgY2FjaGUgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiBQbGVhc2UgZW5zdXJlIHRoYXQgJ2RldGFpbFJvd0hlaWdodCcgaXMgYVxuICAgICAgICB2YWxpZCBudW1iZXIgb3IgZnVuY3Rpb24gdmFsdWU6ICgke2RldGFpbFJvd0hlaWdodH0pIHdoZW4gJ3Njcm9sbGJhclYnIGlzIGVuYWJsZWQuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgbiA9IGV4dGVybmFsVmlydHVhbCA/IHJvd0NvdW50IDogcm93cy5sZW5ndGg7XG4gICAgdGhpcy50cmVlQXJyYXkgPSBuZXcgQXJyYXkobik7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgdGhpcy50cmVlQXJyYXlbaV0gPSAwO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBjb25zdCByb3cgPSByb3dzW2ldO1xuICAgICAgbGV0IGN1cnJlbnRSb3dIZWlnaHQgPSByb3dIZWlnaHQ7XG4gICAgICBpZiAoaXNGbikge1xuICAgICAgICBjdXJyZW50Um93SGVpZ2h0ID0gcm93SGVpZ2h0KHJvdyk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCB0aGUgZGV0YWlsIHJvdyBoZWlnaHQgdG8gdGhlIGFscmVhZHkgZXhwYW5kZWQgcm93cy5cbiAgICAgIC8vIFRoaXMgaXMgdXNlZnVsIGZvciB0aGUgdGFibGUgdGhhdCBnb2VzIHRocm91Z2ggYSBmaWx0ZXIgb3Igc29ydC5cbiAgICAgIGNvbnN0IGV4cGFuZGVkID0gcm93RXhwYW5zaW9ucy5nZXQocm93KTtcbiAgICAgIGlmIChyb3cgJiYgZXhwYW5kZWQgPT09IDEpIHtcbiAgICAgICAgaWYgKGlzRGV0YWlsRm4pIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHJvd0luZGV4ZXMuZ2V0KHJvdyk7XG4gICAgICAgICAgY3VycmVudFJvd0hlaWdodCArPSBkZXRhaWxSb3dIZWlnaHQocm93LCBpbmRleCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VycmVudFJvd0hlaWdodCArPSBkZXRhaWxSb3dIZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy51cGRhdGUoaSwgY3VycmVudFJvd0hlaWdodCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIHRoZSBTY3JvbGxZIHBvc2l0aW9uIGkuZS4gc3VtLCBwcm92aWRlIHRoZSByb3dJbmRleFxuICAgKiB0aGF0IGlzIHByZXNlbnQgaW4gdGhlIGN1cnJlbnQgdmlldyBwb3J0LiAgQmVsb3cgaGFuZGxlcyBlZGdlIGNhc2VzLlxuICAgKi9cbiAgZ2V0Um93SW5kZXgoc2Nyb2xsWTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAoc2Nyb2xsWSA9PT0gMCkgcmV0dXJuIDA7XG4gICAgcmV0dXJuIHRoaXMuY2FsY1Jvd0luZGV4KHNjcm9sbFkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gYSByb3cgaXMgZXhwYW5kZWQgb3Igcm93SGVpZ2h0IGlzIGNoYW5nZWQsIHVwZGF0ZSB0aGUgaGVpZ2h0LiAgVGhpcyBjYW5cbiAgICogYmUgdXRpbGl6ZWQgaW4gZnV0dXJlIHdoZW4gQW5ndWxhciBEYXRhIHRhYmxlIHN1cHBvcnRzIGR5bmFtaWMgcm93IGhlaWdodHMuXG4gICAqL1xuICB1cGRhdGUoYXRSb3dJbmRleDogbnVtYmVyLCBieVJvd0hlaWdodDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRyZWVBcnJheS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVXBkYXRlIGF0IGluZGV4ICR7YXRSb3dJbmRleH0gd2l0aCB2YWx1ZSAke2J5Um93SGVpZ2h0fSBmYWlsZWQ6XG4gICAgICAgIFJvdyBIZWlnaHQgY2FjaGUgbm90IGluaXRpYWxpemVkLmApO1xuICAgIH1cblxuICAgIGNvbnN0IG4gPSB0aGlzLnRyZWVBcnJheS5sZW5ndGg7XG4gICAgYXRSb3dJbmRleCB8PSAwO1xuXG4gICAgd2hpbGUgKGF0Um93SW5kZXggPCBuKSB7XG4gICAgICB0aGlzLnRyZWVBcnJheVthdFJvd0luZGV4XSArPSBieVJvd0hlaWdodDtcbiAgICAgIGF0Um93SW5kZXggfD0gYXRSb3dJbmRleCArIDE7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJhbmdlIFN1bSBxdWVyeSBmcm9tIDEgdG8gdGhlIHJvd0luZGV4XG4gICAqL1xuICBxdWVyeShhdEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy50cmVlQXJyYXkubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHF1ZXJ5IGF0IGluZGV4ICR7YXRJbmRleH0gZmFpbGVkOiBGZW53aWNrIHRyZWUgYXJyYXkgbm90IGluaXRpYWxpemVkLmApO1xuICAgIH1cblxuICAgIGxldCBzdW0gPSAwO1xuICAgIGF0SW5kZXggfD0gMDtcblxuICAgIHdoaWxlIChhdEluZGV4ID49IDApIHtcbiAgICAgIHN1bSArPSB0aGlzLnRyZWVBcnJheVthdEluZGV4XTtcbiAgICAgIGF0SW5kZXggPSAoYXRJbmRleCAmIChhdEluZGV4ICsgMSkpIC0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VtO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIHRvdGFsIGhlaWdodCBiZXR3ZWVuIDIgcm93IGluZGV4ZXNcbiAgICovXG4gIHF1ZXJ5QmV0d2VlbihhdEluZGV4QTogbnVtYmVyLCBhdEluZGV4QjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeShhdEluZGV4QikgLSB0aGlzLnF1ZXJ5KGF0SW5kZXhBIC0gMSk7XG4gIH1cblxuICAvKipcbiAgICogR2l2ZW4gdGhlIFNjcm9sbFkgcG9zaXRpb24gaS5lLiBzdW0sIHByb3ZpZGUgdGhlIHJvd0luZGV4XG4gICAqIHRoYXQgaXMgcHJlc2VudCBpbiB0aGUgY3VycmVudCB2aWV3IHBvcnQuXG4gICAqL1xuICBwcml2YXRlIGNhbGNSb3dJbmRleChzdW06IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLnRyZWVBcnJheS5sZW5ndGgpIHJldHVybiAwO1xuXG4gICAgbGV0IHBvcyA9IC0xO1xuICAgIGNvbnN0IGRhdGFMZW5ndGggPSB0aGlzLnRyZWVBcnJheS5sZW5ndGg7XG5cbiAgICAvLyBHZXQgdGhlIGhpZ2hlc3QgYml0IGZvciB0aGUgYmxvY2sgc2l6ZS5cbiAgICBjb25zdCBoaWdoZXN0Qml0ID0gTWF0aC5wb3coMiwgZGF0YUxlbmd0aC50b1N0cmluZygyKS5sZW5ndGggLSAxKTtcblxuICAgIGZvciAobGV0IGJsb2NrU2l6ZSA9IGhpZ2hlc3RCaXQ7IGJsb2NrU2l6ZSAhPT0gMDsgYmxvY2tTaXplID4+PSAxKSB7XG4gICAgICBjb25zdCBuZXh0UG9zID0gcG9zICsgYmxvY2tTaXplO1xuICAgICAgaWYgKG5leHRQb3MgPCBkYXRhTGVuZ3RoICYmIHN1bSA+PSB0aGlzLnRyZWVBcnJheVtuZXh0UG9zXSkge1xuICAgICAgICBzdW0gLT0gdGhpcy50cmVlQXJyYXlbbmV4dFBvc107XG4gICAgICAgIHBvcyA9IG5leHRQb3M7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvcyArIDE7XG4gIH1cbn1cbiJdfQ==
|