@deephaven/grid 0.6.1-beta.0 → 0.6.3-alpha.5

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.
@@ -45,7 +45,15 @@ declare class GridUtils {
45
45
  * @param {GridMetrics} metrics The GridMetricCalculator metrics
46
46
  */
47
47
  static getNextShownRow(startIndex: any, metrics: any): number | null;
48
- static getColumnSeparatorIndex(x: any, y: any, metrics: any, theme: any): any;
48
+ /**
49
+ * Gets the column index if the x/y coordinated provided are close enough
50
+ * @param {Number} x Mouse x coordinate
51
+ * @param {Number} y Mouse y coordinate
52
+ * @param {GridMetrics} metrics The GridMetricCalculator metrics
53
+ * @param {GridTheme} theme The grid theme with potantial user overrides
54
+ * @returns {Number|null} Column index or null
55
+ */
56
+ static getColumnSeparatorIndex(x: number, y: number, metrics: any, theme: any): number | null;
49
57
  static isItemHidden(itemIndex: any, visibleSizes: any): boolean;
50
58
  static isColumnHidden(columnIndex: any, metrics: any): boolean;
51
59
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"GridUtils.d.ts","sourceRoot":"","sources":["../src/GridUtils.js"],"names":[],"mappings":";AAEA;IAGE,+BAAiC;IAEjC;;;;;MAKC;IAED,wEASC;IAED;;OAEG;IACH,oEASC;IAED;;;;;;OAMG;IACH,8BALW,MAAM,OACN,MAAM,SACN,MAAM,wBACK,MAAM,KAAK,GAAG,GAAG,SAAS,OAQ/C;IAED,gJA+BC;IAED,8EAIC;IAED,wIAgCC;IAED,+CAwBC;IAED,4CAwBC;IAED;;;;;;OAMG;IACH,uFAHW,QAAQ,2CAkBlB;IAED;;;;OAIG;IACH,wEAQC;IAED;;;;OAIG;IACH,qEAQC;IAGD,8EA+CC;IAED,gEAEC;IAED,+DAGC;IAED;;;;OAIG;IACH,0BAHW,MAAM,yBAYhB;IAED;;;;OAIG;IACH,gCAHW,MAAM,yBAiBhB;IAED,mFAmBC;IAED,+DAOC;IAGD,2EAgDC;IAED,yDAGC;IAED,yDAGC;IAED;;;;;;OAMG;IACH,yEAoBC;IAED;;;;;OAKG;IACH,uEAeC;IAED;;;;;;;;OAQG;IACH,mCALW,MAAM,OACN,MAAM,cACN,KAAW,GACT,KAAW,CA4EvB;IAED;;;;;;;;OAQG;IACH,8BALW,SAAS,4CAGP,SAAS,EAAE,CAsBvB;IAED;;;;;;;;OAQG;IACH,gCALW,SAAS,EAAE,4CAGT,SAAS,EAAE,CAUvB;IAED;;;;;OAKG;IACH,uEAqBC;IAED,gCAGC;IAED,+CAMC;IAED,0CAGC;IAED,0EAEC;IAED,uEAKC;IAED;;;;;;;OAOG;IACH,8CAJW,MAAM,UACN,MAAM;;;;;MA0ChB;IAED;;;;;;;;;OASG;IACH,kCAPW,UAAU,cACV,MAAM,sBACN,MAAM,qBACN,MAAM,sBACN,MAAM;gBACI,MAAM;gBAAU,MAAM;MAoD1C;CACF"}
1
+ {"version":3,"file":"GridUtils.d.ts","sourceRoot":"","sources":["../src/GridUtils.js"],"names":[],"mappings":";AAEA;IAGE,+BAAiC;IAEjC;;;;;MAKC;IAED,wEASC;IAED;;OAEG;IACH,oEASC;IAED;;;;;;OAMG;IACH,8BALW,MAAM,OACN,MAAM,SACN,MAAM,wBACK,MAAM,KAAK,GAAG,GAAG,SAAS,OAQ/C;IAED,gJA+BC;IAED,8EAIC;IAED,wIAgCC;IAED,+CAwBC;IAED,4CAwBC;IAED;;;;;;OAMG;IACH,uFAHW,QAAQ,2CAkBlB;IAED;;;;OAIG;IACH,wEAQC;IAED;;;;OAIG;IACH,qEAQC;IAED;;;;;;;OAOG;IACH,gFAFa,SAAO,IAAI,CAqFvB;IAED,gEAEC;IAED,+DAGC;IAED;;;;OAIG;IACH,0BAHW,MAAM,yBAYhB;IAED;;;;OAIG;IACH,gCAHW,MAAM,yBAiBhB;IAED,mFAmBC;IAED,+DAOC;IAGD,2EAgDC;IAED,yDAGC;IAED,yDAGC;IAED;;;;;;OAMG;IACH,yEAoBC;IAED;;;;;OAKG;IACH,uEAeC;IAED;;;;;;;;OAQG;IACH,mCALW,MAAM,OACN,MAAM,cACN,KAAW,GACT,KAAW,CA4EvB;IAED;;;;;;;;OAQG;IACH,8BALW,SAAS,4CAGP,SAAS,EAAE,CAsBvB;IAED;;;;;;;;OAQG;IACH,gCALW,SAAS,EAAE,4CAGT,SAAS,EAAE,CAUvB;IAED;;;;;OAKG;IACH,uEAqBC;IAED,gCAGC;IAED,+CAMC;IAED,0CAGC;IAED,0EAEC;IAED,uEAKC;IAED;;;;;;;OAOG;IACH,8CAJW,MAAM,UACN,MAAM;;;;;MA0ChB;IAED;;;;;;;;;OASG;IACH,kCAPW,UAAU,cACV,MAAM,sBACN,MAAM,qBACN,MAAM,sBACN,MAAM;gBACI,MAAM;gBAAU,MAAM;MAoD1C;CACF"}
package/dist/GridUtils.js CHANGED
@@ -1,4 +1,4 @@
1
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
1
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
2
2
 
3
3
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
4
4
 
@@ -206,33 +206,44 @@ class GridUtils {
206
206
  userRowHeights
207
207
  } = metrics;
208
208
  return GridUtils.getNextShownItem(startIndex, modelRows, visibleRows, userRowHeights);
209
- } // Returns the column index if the x/y coordinates provided are close enough to the separator, otherwise false
209
+ }
210
+ /**
211
+ * Gets the column index if the x/y coordinated provided are close enough
212
+ * @param {Number} x Mouse x coordinate
213
+ * @param {Number} y Mouse y coordinate
214
+ * @param {GridMetrics} metrics The GridMetricCalculator metrics
215
+ * @param {GridTheme} theme The grid theme with potantial user overrides
216
+ * @returns {Number|null} Column index or null
217
+ */
210
218
 
211
219
 
212
220
  static getColumnSeparatorIndex(x, y, metrics, theme) {
213
221
  var {
214
222
  rowHeaderWidth,
215
223
  columnHeaderHeight,
224
+ floatingColumns,
216
225
  visibleColumns,
217
226
  visibleColumnXs,
218
- visibleColumnWidths
227
+ visibleColumnWidths,
228
+ floatingLeftColumnCount
219
229
  } = metrics;
220
230
  var {
221
231
  allowColumnResize,
222
232
  headerSeparatorHandleSize
223
233
  } = theme;
234
+ var floatingLeftColumnsWidth = visibleColumnXs.get(floatingLeftColumnCount - 1) + visibleColumnWidths.get(floatingLeftColumnCount - 1);
224
235
 
225
236
  if (columnHeaderHeight < y || !allowColumnResize || headerSeparatorHandleSize <= 0) {
226
237
  return null;
227
238
  }
228
239
 
229
240
  var gridX = x - rowHeaderWidth;
230
- var halfSeparatorSize = headerSeparatorHandleSize * 0.5; // Iterate backward so that you can reveal hidden columns properly
241
+ var halfSeparatorSize = headerSeparatorHandleSize * 0.5; // Iterate through the floating columns first since they're on top
231
242
 
232
243
  var isPreviousColumnHidden = false;
233
244
 
234
- for (var i = visibleColumns.length - 1; i >= 0; i -= 1) {
235
- var column = visibleColumns[i];
245
+ for (var i = floatingColumns.length - 1; i >= 0; i -= 1) {
246
+ var column = floatingColumns[i];
236
247
  var columnX = visibleColumnXs.get(column);
237
248
  var columnWidth = visibleColumnWidths.get(column);
238
249
  var isColumnHidden = columnWidth === 0;
@@ -255,6 +266,44 @@ class GridUtils {
255
266
 
256
267
  isPreviousColumnHidden = isColumnHidden;
257
268
  }
269
+ } // Iterate backward so that you can reveal hidden columns properly
270
+
271
+
272
+ isPreviousColumnHidden = false;
273
+
274
+ for (var _i = visibleColumns.length - 1; _i >= 0; _i -= 1) {
275
+ var _column = visibleColumns[_i];
276
+
277
+ var _columnX = visibleColumnXs.get(_column);
278
+
279
+ var _columnWidth = visibleColumnWidths.get(_column);
280
+
281
+ var _isColumnHidden = _columnWidth === 0; // If this column is under the floating columns "layer". Terminate early.
282
+
283
+
284
+ if (_columnX < floatingLeftColumnsWidth - _columnWidth) {
285
+ return null;
286
+ }
287
+
288
+ if (!isPreviousColumnHidden || !_isColumnHidden) {
289
+ var _midX = _columnX + _columnWidth;
290
+
291
+ if (_isColumnHidden) {
292
+ _midX += halfSeparatorSize;
293
+ } else if (isPreviousColumnHidden) {
294
+ _midX -= halfSeparatorSize;
295
+ }
296
+
297
+ var _minX = _midX - halfSeparatorSize;
298
+
299
+ var _maxX = _midX + halfSeparatorSize;
300
+
301
+ if (_minX <= gridX && gridX <= _maxX) {
302
+ return _column;
303
+ }
304
+
305
+ isPreviousColumnHidden = _isColumnHidden;
306
+ }
258
307
  }
259
308
 
260
309
  return null;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/GridUtils.js"],"names":["GridRange","GridUtils","getGridPointFromXY","x","y","metrics","column","getColumnAtX","row","getRowAtY","iterateFloatingStart","start","total","callback","i","result","undefined","iterateFloatingEnd","end","iterateFloating","iterateAllItems","visibleStart","visibleEnd","floatingStartCount","floatingEndCount","totalCount","visibleStartIndex","Math","max","visibleEndIndex","min","isInItem","itemIndex","itemXs","itemSizes","itemX","get","itemSize","getItemAtOffset","offset","itemCount","floatingStart","floatingEnd","items","floatingItem","item","length","columnCount","floatingLeftColumnCount","floatingRightColumnCount","visibleColumns","visibleColumnXs","visibleColumnWidths","gridX","floatingTopRowCount","floatingBottomRowCount","rowCount","visibleRows","visibleRowYs","visibleRowHeights","gridY","getNextShownItem","startIndex","modelIndexes","visibleItems","userSizes","visibleItemIndex","findIndex","value","modelIndex","getNextShownColumn","modelColumns","userColumnWidths","getNextShownRow","modelRows","userRowHeights","getColumnSeparatorIndex","theme","rowHeaderWidth","columnHeaderHeight","allowColumnResize","headerSeparatorHandleSize","halfSeparatorSize","isPreviousColumnHidden","columnX","columnWidth","isColumnHidden","midX","minX","maxX","isItemHidden","visibleSizes","columnIndex","isFloatingRow","isFloatingColumn","getHiddenItems","hiddenItems","push","getHiddenColumns","getRowSeparatorIndex","allowRowResize","isPreviousRowHidden","rowY","rowHeight","isRowHidden","midY","minY","maxY","rowIndex","getHiddenRows","moveItem","from","to","oldMovedItems","movedItems","concat","getModelIndex","visibleIndex","movedItem","getModelRangeIndexes","nextResult","j","currentStart","currentEnd","startLength","getModelRange","uiRange","movedColumns","movedRows","columnRanges","startColumn","endColumn","rowRanges","startRow","endRow","ranges","c","r","getModelRanges","uiRanges","modelRanges","getVisibleIndex","isMacPlatform","platform","window","navigator","startsWith","getModifierKey","isModifierKeyDown","event","modifierKey","checkColumnHidden","checkAllColumnsHidden","columns","size","every","getScrollDragBounds","width","height","floatingLeftWidth","floatingRightWidth","floatingTopHeight","floatingBottomHeight","x2","y2","getScrollDelta","wheelEvent","pageWidth","pageHeight","lineWidth","lineHeight","deltaX","deltaY","shiftKey","deltaMode","WheelEvent","DOM_DELTA_PAGE","DOM_DELTA_LINE","round","PIXELS_PER_LINE"],"mappings":";;;;;;OAAOA,S;;AAEP,MAAMC,SAAN,CAAgB;AACd;AACA;AAGyB,SAAlBC,kBAAkB,CAACC,CAAD,EAAIC,CAAJ,EAAOC,OAAP,EAAgB;AACvC,QAAMC,MAAM,GAAGL,SAAS,CAACM,YAAV,CAAuBJ,CAAvB,EAA0BE,OAA1B,CAAf;AACA,QAAMG,GAAG,GAAGP,SAAS,CAACQ,SAAV,CAAoBL,CAApB,EAAuBC,OAAvB,CAAZ;AAEA,WAAO;AAAEF,MAAAA,CAAF;AAAKC,MAAAA,CAAL;AAAQI,MAAAA,GAAR;AAAaF,MAAAA;AAAb,KAAP;AACD;;AAE0B,SAApBI,oBAAoB,CAACC,KAAD,EAAQC,KAAR,EAAeC,QAAf,EAAyB;AAClD,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGH,KAAJ,IAAaG,CAAC,GAAGF,KAAjC,EAAwCE,CAAC,IAAI,CAA7C,EAAgD;AAC9C,UAAMC,MAAM,GAAGF,QAAQ,CAACC,CAAD,CAAvB;;AACA,UAAIC,MAAM,KAAKC,SAAf,EAA0B;AACxB,eAAOD,MAAP;AACD;AACF;;AAED,WAAOC,SAAP;AACD;AAED;AACF;AACA;;;AAC2B,SAAlBC,kBAAkB,CAACC,GAAD,EAAMN,KAAN,EAAaC,QAAb,EAAuB;AAC9C,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGI,GAAJ,IAAWN,KAAK,IAAIM,GAAG,GAAGJ,CAAV,CAAL,IAAqB,CAAhD,EAAmDA,CAAC,IAAI,CAAxD,EAA2D;AACzD,UAAMC,MAAM,GAAGF,QAAQ,CAACD,KAAK,IAAIM,GAAG,GAAGJ,CAAV,CAAN,CAAvB;;AACA,UAAIC,MAAM,KAAKC,SAAf,EAA0B;AACxB,eAAOD,MAAP;AACD;AACF;;AAED,WAAOC,SAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;;;AACwB,SAAfG,eAAe,CAACR,KAAD,EAAQO,GAAR,EAAaN,KAAb,EAAoBC,QAApB,EAA8B;AAClD,QAAME,MAAM,GAAGd,SAAS,CAACS,oBAAV,CAA+BC,KAA/B,EAAsCC,KAAtC,EAA6CC,QAA7C,CAAf;;AACA,QAAIE,MAAM,KAAKC,SAAf,EAA0B;AACxB,aAAOD,MAAP;AACD;;AACD,WAAOd,SAAS,CAACgB,kBAAV,CAA6BC,GAA7B,EAAkCN,KAAlC,EAAyCC,QAAzC,CAAP;AACD;;AAEqB,SAAfO,eAAe,CACpBC,YADoB,EAEpBC,UAFoB,EAGpBC,kBAHoB,EAIpBC,gBAJoB,EAKpBC,UALoB,EAMpBZ,QANoB,EAOpB;AACA,QAAMa,iBAAiB,GAAGC,IAAI,CAACC,GAAL,CAASP,YAAT,EAAuBE,kBAAvB,CAA1B;AACA,QAAMM,eAAe,GAAGF,IAAI,CAACG,GAAL,CACtBR,UADsB,EAEtBG,UAAU,GAAGD,gBAAb,GAAgC,CAFV,CAAxB;AAIA,QAAIT,MAAM,GAAGd,SAAS,CAACkB,eAAV,CACXI,kBADW,EAEXC,gBAFW,EAGXC,UAHW,EAIXZ,QAJW,CAAb;;AAMA,QAAIE,MAAM,KAAKC,SAAf,EAA0B;AACxB,aAAOD,MAAP;AACD;;AAED,SAAK,IAAID,CAAC,GAAGY,iBAAb,EAAgCZ,CAAC,IAAIe,eAArC,EAAsDf,CAAC,IAAI,CAA3D,EAA8D;AAC5DC,MAAAA,MAAM,GAAGF,QAAQ,CAACC,CAAD,CAAjB;;AACA,UAAIC,MAAM,KAAKC,SAAf,EAA0B;AACxB,eAAOD,MAAP;AACD;AACF;;AAED,WAAOC,SAAP;AACD;;AAEc,SAARe,QAAQ,CAACC,SAAD,EAAYC,MAAZ,EAAoBC,SAApB,EAA+B/B,CAA/B,EAAkC;AAC/C,QAAMgC,KAAK,GAAGF,MAAM,CAACG,GAAP,CAAWJ,SAAX,CAAd;AACA,QAAMK,QAAQ,GAAGH,SAAS,CAACE,GAAV,CAAcJ,SAAd,CAAjB;AACA,WAAOG,KAAK,IAAIhC,CAAT,IAAcA,CAAC,IAAIgC,KAAK,GAAGE,QAAlC;AACD;;AAEqB,SAAfC,eAAe,CACpBC,MADoB,EAEpBC,SAFoB,EAGpBC,aAHoB,EAIpBC,WAJoB,EAKpBC,KALoB,EAMpBV,MANoB,EAOpBC,SAPoB,EAQpB;AACA,QAAMU,YAAY,GAAG3C,SAAS,CAACkB,eAAV,CACnBsB,aADmB,EAEnBC,WAFmB,EAGnBF,SAHmB,EAInBK,IAAI,IAAI;AACN,UAAI5C,SAAS,CAAC8B,QAAV,CAAmBc,IAAnB,EAAyBZ,MAAzB,EAAiCC,SAAjC,EAA4CK,MAA5C,CAAJ,EAAyD;AACvD,eAAOM,IAAP;AACD;;AACD,aAAO7B,SAAP;AACD,KATkB,CAArB;;AAWA,QAAI4B,YAAY,KAAK5B,SAArB,EAAgC;AAC9B,aAAO4B,YAAP;AACD;;AAED,SAAK,IAAI9B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6B,KAAK,CAACG,MAA1B,EAAkChC,CAAC,IAAI,CAAvC,EAA0C;AACxC,UAAM+B,IAAI,GAAGF,KAAK,CAAC7B,CAAD,CAAlB;;AACA,UAAIb,SAAS,CAAC8B,QAAV,CAAmBc,IAAnB,EAAyBZ,MAAzB,EAAiCC,SAAjC,EAA4CK,MAA5C,CAAJ,EAAyD;AACvD,eAAOM,IAAP;AACD;AACF;;AAED,WAAO,IAAP;AACD;;AAEkB,SAAZtC,YAAY,CAACJ,CAAD,EAAIE,OAAJ,EAAa;AAC9B,QAAM;AACJ0C,MAAAA,WADI;AAEJC,MAAAA,uBAFI;AAGJC,MAAAA,wBAHI;AAIJC,MAAAA,cAJI;AAKJC,MAAAA,eALI;AAMJC,MAAAA,mBANI;AAOJC,MAAAA;AAPI,QAQFhD,OARJ;;AAUA,QAAIF,CAAC,GAAGkD,KAAR,EAAe;AACb,aAAO,IAAP;AACD;;AAED,WAAO,KAAKf,eAAL,CACLnC,CAAC,GAAGkD,KADC,EAELN,WAFK,EAGLC,uBAHK,EAILC,wBAJK,EAKLC,cALK,EAMLC,eANK,EAOLC,mBAPK,CAAP;AASD;;AAEe,SAAT3C,SAAS,CAACL,CAAD,EAAIC,OAAJ,EAAa;AAC3B,QAAM;AACJiD,MAAAA,mBADI;AAEJC,MAAAA,sBAFI;AAGJC,MAAAA,QAHI;AAIJC,MAAAA,WAJI;AAKJC,MAAAA,YALI;AAMJC,MAAAA,iBANI;AAOJC,MAAAA;AAPI,QAQFvD,OARJ;;AAUA,QAAID,CAAC,GAAGwD,KAAR,EAAe;AACb,aAAO,IAAP;AACD;;AAED,WAAO,KAAKtB,eAAL,CACLlC,CAAC,GAAGwD,KADC,EAELJ,QAFK,EAGLF,mBAHK,EAILC,sBAJK,EAKLE,WALK,EAMLC,YANK,EAOLC,iBAPK,CAAP;AASD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;;;AACyB,SAAhBE,gBAAgB,CAACC,UAAD,EAAaC,YAAb,EAA2BC,YAA3B,EAAyCC,SAAzC,EAAoD;AACzE,QAAIC,gBAAgB,GAClBF,YAAY,CAACG,SAAb,CAAuBC,KAAK,IAAIA,KAAK,KAAKN,UAA1C,KAAyD,CAD3D;AAEAI,IAAAA,gBAAgB,IAAI,CAApB;;AACA,WAAOA,gBAAgB,IAAI,IAApB,IAA4BA,gBAAgB,IAAI,CAAvD,EAA0D;AACxD,UAAMrB,IAAI,GAAGmB,YAAY,CAACE,gBAAD,CAAzB;AACA,UAAMG,UAAU,GAAGN,YAAY,CAAC3B,GAAb,CAAiBS,IAAjB,CAAnB;;AACA,UAAIoB,SAAS,CAAC7B,GAAV,CAAciC,UAAd,MAA8B,CAAlC,EAAqC;AACnC,eAAOxB,IAAP;AACD;;AAEDqB,MAAAA,gBAAgB,IAAI,CAApB;AACD;;AAED,WAAO,IAAP;AACD;AAED;AACF;AACA;AACA;AACA;;;AAC2B,SAAlBI,kBAAkB,CAACR,UAAD,EAAazD,OAAb,EAAsB;AAC7C,QAAM;AAAEkE,MAAAA,YAAF;AAAgBrB,MAAAA,cAAhB;AAAgCsB,MAAAA;AAAhC,QAAqDnE,OAA3D;AACA,WAAOJ,SAAS,CAAC4D,gBAAV,CACLC,UADK,EAELS,YAFK,EAGLrB,cAHK,EAILsB,gBAJK,CAAP;AAMD;AAED;AACF;AACA;AACA;AACA;;;AACwB,SAAfC,eAAe,CAACX,UAAD,EAAazD,OAAb,EAAsB;AAC1C,QAAM;AAAEqE,MAAAA,SAAF;AAAajB,MAAAA,WAAb;AAA0BkB,MAAAA;AAA1B,QAA6CtE,OAAnD;AACA,WAAOJ,SAAS,CAAC4D,gBAAV,CACLC,UADK,EAELY,SAFK,EAGLjB,WAHK,EAILkB,cAJK,CAAP;AAMD,GArOa,CAuOd;;;AAC8B,SAAvBC,uBAAuB,CAACzE,CAAD,EAAIC,CAAJ,EAAOC,OAAP,EAAgBwE,KAAhB,EAAuB;AACnD,QAAM;AACJC,MAAAA,cADI;AAEJC,MAAAA,kBAFI;AAGJ7B,MAAAA,cAHI;AAIJC,MAAAA,eAJI;AAKJC,MAAAA;AALI,QAMF/C,OANJ;AAOA,QAAM;AAAE2E,MAAAA,iBAAF;AAAqBC,MAAAA;AAArB,QAAmDJ,KAAzD;;AAEA,QACEE,kBAAkB,GAAG3E,CAArB,IACA,CAAC4E,iBADD,IAEAC,yBAAyB,IAAI,CAH/B,EAIE;AACA,aAAO,IAAP;AACD;;AAED,QAAM5B,KAAK,GAAGlD,CAAC,GAAG2E,cAAlB;AACA,QAAMI,iBAAiB,GAAGD,yBAAyB,GAAG,GAAtD,CAnBmD,CAqBnD;;AACA,QAAIE,sBAAsB,GAAG,KAA7B;;AACA,SAAK,IAAIrE,CAAC,GAAGoC,cAAc,CAACJ,MAAf,GAAwB,CAArC,EAAwChC,CAAC,IAAI,CAA7C,EAAgDA,CAAC,IAAI,CAArD,EAAwD;AACtD,UAAMR,MAAM,GAAG4C,cAAc,CAACpC,CAAD,CAA7B;AACA,UAAMsE,OAAO,GAAGjC,eAAe,CAACf,GAAhB,CAAoB9B,MAApB,CAAhB;AACA,UAAM+E,WAAW,GAAGjC,mBAAmB,CAAChB,GAApB,CAAwB9B,MAAxB,CAApB;AACA,UAAMgF,cAAc,GAAGD,WAAW,KAAK,CAAvC;;AACA,UAAI,CAACF,sBAAD,IAA2B,CAACG,cAAhC,EAAgD;AAC9C,YAAIC,IAAI,GAAGH,OAAO,GAAGC,WAArB;;AACA,YAAIC,cAAJ,EAAoB;AAClBC,UAAAA,IAAI,IAAIL,iBAAR;AACD,SAFD,MAEO,IAAIC,sBAAJ,EAA4B;AACjCI,UAAAA,IAAI,IAAIL,iBAAR;AACD;;AAED,YAAMM,IAAI,GAAGD,IAAI,GAAGL,iBAApB;AACA,YAAMO,IAAI,GAAGF,IAAI,GAAGL,iBAApB;;AACA,YAAIM,IAAI,IAAInC,KAAR,IAAiBA,KAAK,IAAIoC,IAA9B,EAAoC;AAClC,iBAAOnF,MAAP;AACD;;AAED6E,QAAAA,sBAAsB,GAAGG,cAAzB;AACD;AACF;;AAED,WAAO,IAAP;AACD;;AAEkB,SAAZI,YAAY,CAAC1D,SAAD,EAAY2D,YAAZ,EAA0B;AAC3C,WAAOA,YAAY,CAACvD,GAAb,CAAiBJ,SAAjB,MAAgC,CAAvC;AACD;;AAEoB,SAAdsD,cAAc,CAACM,WAAD,EAAcvF,OAAd,EAAuB;AAC1C,QAAM;AAAE+C,MAAAA;AAAF,QAA0B/C,OAAhC;AACA,WAAOJ,SAAS,CAACyF,YAAV,CAAuBE,WAAvB,EAAoCxC,mBAApC,CAAP;AACD;AAED;AACF;AACA;AACA;AACA;;;AACsB,SAAbyC,aAAa,CAACrF,GAAD,EAAMH,OAAN,EAAe;AACjC,QAAIG,GAAG,IAAI,IAAX,EAAiB;AACf,aAAO,KAAP;AACD;;AAED,QAAM;AAAE8C,MAAAA,mBAAF;AAAuBC,MAAAA,sBAAvB;AAA+CC,MAAAA;AAA/C,QAA4DnD,OAAlE;AACA,WACEG,GAAG,GAAG8C,mBAAN,IAA6B9C,GAAG,IAAIgD,QAAQ,GAAGD,sBADjD;AAGD;AAED;AACF;AACA;AACA;AACA;;;AACyB,SAAhBuC,gBAAgB,CAACxF,MAAD,EAASD,OAAT,EAAkB;AACvC,QAAIC,MAAM,IAAI,IAAd,EAAoB;AAClB,aAAO,KAAP;AACD;;AAED,QAAM;AACJ0C,MAAAA,uBADI;AAEJC,MAAAA,wBAFI;AAGJF,MAAAA;AAHI,QAIF1C,OAJJ;AAKA,WACEC,MAAM,GAAG0C,uBAAT,IACA1C,MAAM,IAAIyC,WAAW,GAAGE,wBAF1B;AAID;;AAEoB,SAAd8C,cAAc,CAAC/D,SAAD,EAAY2D,YAAZ,EAA0B3B,YAA1B,EAAwC;AAC3D,QAAI,CAAC/D,SAAS,CAACyF,YAAV,CAAuB1D,SAAvB,EAAkC2D,YAAlC,CAAL,EAAsD;AACpD,aAAO,EAAP;AACD;;AAED,QAAMK,WAAW,GAAG,CAAChE,SAAD,CAApB;AACA,QAAMkC,gBAAgB,GAAGF,YAAY,CAACG,SAAb,CACvBC,KAAK,IAAIA,KAAK,KAAKpC,SADI,CAAzB;;AAGA,SAAK,IAAIlB,CAAC,GAAGoD,gBAAgB,GAAG,CAAhC,EAAmCpD,CAAC,IAAI,CAAxC,EAA2CA,CAAC,IAAI,CAAhD,EAAmD;AACjD,UAAM+B,IAAI,GAAGmB,YAAY,CAAClD,CAAD,CAAzB;;AACA,UAAI,CAACb,SAAS,CAACyF,YAAV,CAAuB7C,IAAvB,EAA6B8C,YAA7B,CAAL,EAAiD;AAC/C;AACD;;AAEDK,MAAAA,WAAW,CAACC,IAAZ,CAAiBpD,IAAjB;AACD;;AAED,WAAOmD,WAAP;AACD;;AAEsB,SAAhBE,gBAAgB,CAACN,WAAD,EAAcvF,OAAd,EAAuB;AAC5C,QAAM;AAAE6C,MAAAA,cAAF;AAAkBE,MAAAA;AAAlB,QAA0C/C,OAAhD;AACA,WAAOJ,SAAS,CAAC8F,cAAV,CACLH,WADK,EAELxC,mBAFK,EAGLF,cAHK,CAAP;AAKD,GAnWa,CAqWd;;;AAC2B,SAApBiD,oBAAoB,CAAChG,CAAD,EAAIC,CAAJ,EAAOC,OAAP,EAAgBwE,KAAhB,EAAuB;AAChD,QAAM;AACJC,MAAAA,cADI;AAEJC,MAAAA,kBAFI;AAGJtB,MAAAA,WAHI;AAIJC,MAAAA,YAJI;AAKJC,MAAAA;AALI,QAMFtD,OANJ;AAOA,QAAM;AAAE+F,MAAAA,cAAF;AAAkBnB,MAAAA;AAAlB,QAAgDJ,KAAtD;;AAEA,QACEC,cAAc,GAAG3E,CAAjB,IACA,CAACiG,cADD,IAEAnB,yBAAyB,IAAI,CAH/B,EAIE;AACA,aAAO,IAAP;AACD;;AAED,QAAMrB,KAAK,GAAGxD,CAAC,GAAG2E,kBAAlB;AACA,QAAMG,iBAAiB,GAAGD,yBAAyB,GAAG,GAAtD,CAnBgD,CAqBhD;;AACA,QAAIoB,mBAAmB,GAAG,KAA1B;;AACA,SAAK,IAAIvF,CAAC,GAAG2C,WAAW,CAACX,MAAZ,GAAqB,CAAlC,EAAqChC,CAAC,IAAI,CAA1C,EAA6CA,CAAC,IAAI,CAAlD,EAAqD;AACnD,UAAMN,GAAG,GAAGiD,WAAW,CAAC3C,CAAD,CAAvB;AACA,UAAMwF,IAAI,GAAG5C,YAAY,CAACtB,GAAb,CAAiB5B,GAAjB,CAAb;AACA,UAAM+F,SAAS,GAAG5C,iBAAiB,CAACvB,GAAlB,CAAsB5B,GAAtB,CAAlB;AACA,UAAMgG,WAAW,GAAGD,SAAS,KAAK,CAAlC;;AACA,UAAI,CAACF,mBAAD,IAAwB,CAACG,WAA7B,EAA0C;AACxC,YAAIC,IAAI,GAAGH,IAAI,GAAGC,SAAlB;;AACA,YAAIC,WAAJ,EAAiB;AACfC,UAAAA,IAAI,IAAIvB,iBAAR;AACD,SAFD,MAEO,IAAImB,mBAAJ,EAAyB;AAC9BI,UAAAA,IAAI,IAAIvB,iBAAR;AACD;;AAED,YAAMwB,IAAI,GAAGD,IAAI,GAAGvB,iBAApB;AACA,YAAMyB,IAAI,GAAGF,IAAI,GAAGvB,iBAApB;;AAEA,YAAIwB,IAAI,IAAI9C,KAAR,IAAiBA,KAAK,IAAI+C,IAA9B,EAAoC;AAClC,iBAAOnG,GAAP;AACD;;AAED6F,QAAAA,mBAAmB,GAAGG,WAAtB;AACD;AACF;;AAED,WAAO,IAAP;AACD;;AAEiB,SAAXA,WAAW,CAACI,QAAD,EAAWvG,OAAX,EAAoB;AACpC,QAAM;AAAEsD,MAAAA;AAAF,QAAwBtD,OAA9B;AACA,WAAOJ,SAAS,CAACyF,YAAV,CAAuBkB,QAAvB,EAAiCjD,iBAAjC,CAAP;AACD;;AAEmB,SAAbkD,aAAa,CAACD,QAAD,EAAWvG,OAAX,EAAoB;AACtC,QAAM;AAAEoD,MAAAA,WAAF;AAAeE,MAAAA;AAAf,QAAqCtD,OAA3C;AACA,WAAOJ,SAAS,CAAC8F,cAAV,CAAyBa,QAAzB,EAAmCjD,iBAAnC,EAAsDF,WAAtD,CAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;;;AACiB,SAARqD,QAAQ,CAACC,IAAD,EAAOC,EAAP,EAA+B;AAAA,QAApBC,aAAoB,uEAAJ,EAAI;;AAC5C,QAAIF,IAAI,KAAKC,EAAb,EAAiB;AACf,aAAOC,aAAP;AACD;;AAED,QAAMC,UAAU,GAAG,GAAGC,MAAH,CAAUF,aAAV,CAAnB;;AAEA,QACEC,UAAU,CAACpE,MAAX,GAAoB,CAApB,IACAoE,UAAU,CAACA,UAAU,CAACpE,MAAX,GAAoB,CAArB,CAAV,CAAkCkE,EAAlC,KAAyCD,IAF3C,EAGE;AACAG,MAAAA,UAAU,CAACA,UAAU,CAACpE,MAAX,GAAoB,CAArB,CAAV,mCACKoE,UAAU,CAACA,UAAU,CAACpE,MAAX,GAAoB,CAArB,CADf;AAEEkE,QAAAA;AAFF;AAID,KARD,MAQO;AACLE,MAAAA,UAAU,CAACjB,IAAX,CAAgB;AAAEc,QAAAA,IAAF;AAAQC,QAAAA;AAAR,OAAhB;AACD;;AAED,WAAOE,UAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;;;AACsB,SAAbE,aAAa,CAACC,YAAD,EAAgC;AAAA,QAAjBH,UAAiB,uEAAJ,EAAI;AAClD,QAAI7C,UAAU,GAAGgD,YAAjB;;AAEA,SAAK,IAAIvG,CAAC,GAAGoG,UAAU,CAACpE,MAAX,GAAoB,CAAjC,EAAoChC,CAAC,IAAI,CAAzC,EAA4CA,CAAC,IAAI,CAAjD,EAAoD;AAClD,UAAMwG,SAAS,GAAGJ,UAAU,CAACpG,CAAD,CAA5B;;AACA,UAAIuD,UAAU,KAAKiD,SAAS,CAACN,EAA7B,EAAiC;AAC/B,SAAC;AAAED,UAAAA,IAAI,EAAE1C;AAAR,YAAuBiD,SAAxB;AACD,OAFD,MAEO,IAAIA,SAAS,CAACP,IAAV,IAAkB1C,UAAlB,IAAgCA,UAAU,GAAGiD,SAAS,CAACN,EAA3D,EAA+D;AACpE3C,QAAAA,UAAU,IAAI,CAAd;AACD,OAFM,MAEA,IAAIiD,SAAS,CAACN,EAAV,GAAe3C,UAAf,IAA6BA,UAAU,IAAIiD,SAAS,CAACP,IAAzD,EAA+D;AACpE1C,QAAAA,UAAU,IAAI,CAAd;AACD;AACF;;AAED,WAAOA,UAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAC6B,SAApBkD,oBAAoB,CAAC5G,KAAD,EAAQO,GAAR,EAAagG,UAAb,EAAyB;AAClD,QAAInG,MAAM,GAAG,CAAC,CAACJ,KAAD,EAAQO,GAAR,CAAD,CAAb;;AACA,QAAIP,KAAK,IAAI,IAAb,EAAmB;AACjB,aAAOI,MAAP;AACD,KAJiD,CAMlD;AACA;AACA;AACA;;;AACA,SAAK,IAAID,CAAC,GAAGoG,UAAU,CAACpE,MAAX,GAAoB,CAAjC,EAAoChC,CAAC,IAAI,CAAzC,EAA4CA,CAAC,IAAI,CAAjD,EAAoD;AAClD,UAAM;AAAEiG,QAAAA,IAAF;AAAQC,QAAAA;AAAR,UAAeE,UAAU,CAACpG,CAAD,CAA/B;AACA,UAAM0G,UAAU,GAAG,EAAnB;;AACA,WAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG1G,MAAM,CAAC+B,MAA3B,EAAmC2E,CAAC,IAAI,CAAxC,EAA2C;AACzC,YAAM,CAACC,YAAD,EAAeC,UAAf,IAA6B5G,MAAM,CAAC0G,CAAD,CAAzC;AACA,YAAMG,WAAW,GAAGJ,UAAU,CAAC1E,MAA/B;;AACA,YAAIiE,IAAI,IAAIW,YAAZ,EAA0B;AACxB;AACA,cAAIV,EAAE,GAAGW,UAAT,EAAqB;AACnB;AACAH,YAAAA,UAAU,CAACvB,IAAX,CAAgB,CAACyB,YAAY,GAAG,CAAhB,EAAmBC,UAAU,GAAG,CAAhC,CAAhB;AACD,WAHD,MAGO,IAAIX,EAAE,IAAIU,YAAV,EAAwB;AAC7B;AACAF,YAAAA,UAAU,CAACvB,IAAX,CAAgB,CAACc,IAAD,EAAOA,IAAP,CAAhB;AACAS,YAAAA,UAAU,CAACvB,IAAX,CAAgB,CAACyB,YAAY,GAAG,CAAhB,EAAmBC,UAAnB,CAAhB;AACD;AACF,SAVD,MAUO,IAAIZ,IAAI,GAAGY,UAAX,EAAuB;AAC5B;AACA,cAAIX,EAAE,GAAGU,YAAT,EAAuB;AACrB;AACAF,YAAAA,UAAU,CAACvB,IAAX,CAAgB,CAACyB,YAAY,GAAG,CAAhB,EAAmBC,UAAU,GAAG,CAAhC,CAAhB;AACD,WAHD,MAGO,IAAIX,EAAE,IAAIW,UAAV,EAAsB;AAC3B;AACAH,YAAAA,UAAU,CAACvB,IAAX,CAAgB,CAACc,IAAD,EAAOA,IAAP,CAAhB;AACAS,YAAAA,UAAU,CAACvB,IAAX,CAAgB,CAACyB,YAAD,EAAeC,UAAU,GAAG,CAA5B,CAAhB;AACD;AACF,SAVM,MAUA,IAAIX,EAAE,GAAGU,YAAT,EAAuB;AAC5B;AACAF,UAAAA,UAAU,CAACvB,IAAX,CAAgB,CAACyB,YAAY,GAAG,CAAhB,EAAmBX,IAAI,GAAG,CAA1B,CAAhB;AACAS,UAAAA,UAAU,CAACvB,IAAX,CAAgB,CAACc,IAAI,GAAG,CAAR,EAAWY,UAAX,CAAhB;AACD,SAJM,MAIA,IAAIX,EAAE,GAAGW,UAAT,EAAqB;AAC1B;AACAH,UAAAA,UAAU,CAACvB,IAAX,CAAgB,CAACyB,YAAD,EAAeX,IAAI,GAAG,CAAtB,CAAhB;AACAS,UAAAA,UAAU,CAACvB,IAAX,CAAgB,CAACc,IAAI,GAAG,CAAR,EAAWY,UAAU,GAAG,CAAxB,CAAhB;AACD,SAJM,MAIA,IAAIZ,IAAI,GAAGC,EAAX,EAAe;AACpB;AACA,cAAIA,EAAE,GAAGU,YAAT,EAAuB;AACrBF,YAAAA,UAAU,CAACvB,IAAX,CAAgB,CAACyB,YAAD,EAAeV,EAAE,GAAG,CAApB,CAAhB;AACD;;AACDQ,UAAAA,UAAU,CAACvB,IAAX,CAAgB,CAACc,IAAD,EAAOA,IAAP,CAAhB;AACAS,UAAAA,UAAU,CAACvB,IAAX,CAAgB,CAACe,EAAD,EAAKD,IAAI,GAAG,CAAZ,CAAhB;;AACA,cAAIA,IAAI,GAAGY,UAAX,EAAuB;AACrBH,YAAAA,UAAU,CAACvB,IAAX,CAAgB,CAACc,IAAI,GAAG,CAAR,EAAWY,UAAX,CAAhB;AACD;AACF,SAVM,MAUA,IAAIZ,IAAI,GAAGC,EAAX,EAAe;AACpB;AACA,cAAID,IAAI,GAAGW,YAAX,EAAyB;AACvBF,YAAAA,UAAU,CAACvB,IAAX,CAAgB,CAACyB,YAAD,EAAeX,IAAI,GAAG,CAAtB,CAAhB;AACD;;AACDS,UAAAA,UAAU,CAACvB,IAAX,CAAgB,CAACc,IAAI,GAAG,CAAR,EAAWC,EAAX,CAAhB;AACAQ,UAAAA,UAAU,CAACvB,IAAX,CAAgB,CAACc,IAAD,EAAOA,IAAP,CAAhB;;AACA,cAAIA,IAAI,GAAGY,UAAX,EAAuB;AACrBH,YAAAA,UAAU,CAACvB,IAAX,CAAgB,CAACe,EAAE,GAAG,CAAN,EAASW,UAAT,CAAhB;AACD;AACF;;AAED,YAAIC,WAAW,KAAKJ,UAAU,CAAC1E,MAA/B,EAAuC;AACrC;AACA0E,UAAAA,UAAU,CAACvB,IAAX,CAAgB,CAACyB,YAAD,EAAeC,UAAf,CAAhB;AACD;AACF;;AACD5G,MAAAA,MAAM,GAAGyG,UAAT;AACD;;AACD,WAAOzG,MAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACsB,SAAb8G,aAAa,CAACC,OAAD,EAA6C;AAAA,QAAnCC,YAAmC,uEAApB,EAAoB;AAAA,QAAhBC,SAAgB,uEAAJ,EAAI;AAC/D,QAAMC,YAAY,GAAGhI,SAAS,CAACsH,oBAAV,CACnBO,OAAO,CAACI,WADW,EAEnBJ,OAAO,CAACK,SAFW,EAGnBJ,YAHmB,CAArB;AAKA,QAAMK,SAAS,GAAGnI,SAAS,CAACsH,oBAAV,CAChBO,OAAO,CAACO,QADQ,EAEhBP,OAAO,CAACQ,MAFQ,EAGhBN,SAHgB,CAAlB;AAKA,QAAMO,MAAM,GAAG,EAAf;;AACA,SAAK,IAAIzH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGmH,YAAY,CAACnF,MAAjC,EAAyChC,CAAC,IAAI,CAA9C,EAAiD;AAC/C,UAAM0H,CAAC,GAAGP,YAAY,CAACnH,CAAD,CAAtB;;AACA,WAAK,IAAI2G,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGW,SAAS,CAACtF,MAA9B,EAAsC2E,CAAC,IAAI,CAA3C,EAA8C;AAC5C,YAAMgB,CAAC,GAAGL,SAAS,CAACX,CAAD,CAAnB;AACAc,QAAAA,MAAM,CAACtC,IAAP,CAAY,IAAIjG,SAAJ,CAAcwI,CAAC,CAAC,CAAD,CAAf,EAAoBC,CAAC,CAAC,CAAD,CAArB,EAA0BD,CAAC,CAAC,CAAD,CAA3B,EAAgCC,CAAC,CAAC,CAAD,CAAjC,CAAZ;AACD;AACF;;AACD,WAAOF,MAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACuB,SAAdG,cAAc,CAACC,QAAD,EAA8C;AAAA,QAAnCZ,YAAmC,uEAApB,EAAoB;AAAA,QAAhBC,SAAgB,uEAAJ,EAAI;AACjE,QAAMY,WAAW,GAAG,EAApB;;AACA,SAAK,IAAI9H,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6H,QAAQ,CAAC7F,MAA7B,EAAqChC,CAAC,IAAI,CAA1C,EAA6C;AAC3C8H,MAAAA,WAAW,CAAC3C,IAAZ,CACE,GAAGhG,SAAS,CAAC4H,aAAV,CAAwBc,QAAQ,CAAC7H,CAAD,CAAhC,EAAqCiH,YAArC,EAAmDC,SAAnD,CADL;AAGD;;AACD,WAAOY,WAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;;;AACwB,SAAfC,eAAe,CAACxE,UAAD,EAA8B;AAAA,QAAjB6C,UAAiB,uEAAJ,EAAI;AAClD,QAAIG,YAAY,GAAGhD,UAAnB;;AAEA,SAAK,IAAIvD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoG,UAAU,CAACpE,MAA/B,EAAuChC,CAAC,IAAI,CAA5C,EAA+C;AAC7C,UAAMwG,SAAS,GAAGJ,UAAU,CAACpG,CAAD,CAA5B;;AACA,UAAIuG,YAAY,KAAKC,SAAS,CAACP,IAA/B,EAAqC;AACnC,SAAC;AAAEC,UAAAA,EAAE,EAAEK;AAAN,YAAuBC,SAAxB;AACD,OAFD,MAEO,IACLA,SAAS,CAACP,IAAV,GAAiBM,YAAjB,IACAA,YAAY,IAAIC,SAAS,CAACN,EAFrB,EAGL;AACAK,QAAAA,YAAY,IAAI,CAAhB;AACD,OALM,MAKA,IACLC,SAAS,CAACN,EAAV,IAAgBK,YAAhB,IACAA,YAAY,GAAGC,SAAS,CAACP,IAFpB,EAGL;AACAM,QAAAA,YAAY,IAAI,CAAhB;AACD;AACF;;AAED,WAAOA,YAAP;AACD;;AAEmB,SAAbyB,aAAa,GAAG;AACrB,QAAM;AAAEC,MAAAA;AAAF,QAAeC,MAAM,CAACC,SAA5B;AACA,WAAOF,QAAQ,CAACG,UAAT,CAAoB,KAApB,CAAP;AACD;;AAEoB,SAAdC,cAAc,GAAG;AACtB,QAAIlJ,SAAS,CAAC6I,aAAV,EAAJ,EAA+B;AAC7B,aAAO,SAAP;AACD;;AAED,WAAO,SAAP;AACD;;AAEuB,SAAjBM,iBAAiB,CAACC,KAAD,EAAQ;AAC9B,QAAMC,WAAW,GAAGrJ,SAAS,CAACkJ,cAAV,EAApB;AACA,WAAOE,KAAK,CAACC,WAAD,CAAZ;AACD;;AAEuB,SAAjBC,iBAAiB,CAAClF,UAAD,EAAaG,gBAAb,EAA+B;AACrD,WAAOA,gBAAgB,CAACpC,GAAjB,CAAqBiC,UAArB,MAAqC,CAA5C;AACD;;AAE2B,SAArBmF,qBAAqB,CAACC,OAAD,EAAUjF,gBAAV,EAA4B;AACtD,QAAIA,gBAAgB,CAACkF,IAAjB,KAA0B,CAA9B,EAAiC;AAC/B,aAAO,KAAP;AACD;;AACD,WAAOD,OAAO,CAACE,KAAR,CAAcrJ,MAAM,IAAIkE,gBAAgB,CAACpC,GAAjB,CAAqB9B,MAArB,MAAiC,CAAzD,CAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AAC4B,SAAnBsJ,mBAAmB,CAACvJ,OAAD,EAAUG,GAAV,EAAeF,MAAf,EAAuB;AAC/C,QAAM;AACJ+C,MAAAA,KADI;AAEJO,MAAAA,KAFI;AAGJiG,MAAAA,KAHI;AAIJC,MAAAA,MAJI;AAKJxG,MAAAA,mBALI;AAMJC,MAAAA,sBANI;AAOJP,MAAAA,uBAPI;AAQJC,MAAAA,wBARI;AASJ8G,MAAAA,iBATI;AAUJC,MAAAA,kBAVI;AAWJC,MAAAA,iBAXI;AAYJC,MAAAA,oBAZI;AAaJnH,MAAAA,WAbI;AAcJS,MAAAA;AAdI,QAeFnD,OAfJ;AAgBA,QAAIF,CAAC,GAAGkD,KAAR;AACA,QAAIjD,CAAC,GAAGwD,KAAR;AACA,QAAIuG,EAAE,GAAGN,KAAT;AACA,QAAIO,EAAE,GAAGN,MAAT;;AACA,QAAIxJ,MAAM,IAAI,IAAd,EAAoB;AAClB,UAAIA,MAAM,GAAG0C,uBAAb,EAAsC;AACpC7C,QAAAA,CAAC,IAAI4J,iBAAL;AACD;;AACD,UAAIzJ,MAAM,GAAGyC,WAAW,GAAGE,wBAA3B,EAAqD;AACnDkH,QAAAA,EAAE,IAAIH,kBAAN;AACD;AACF;;AAED,QAAIxJ,GAAG,IAAI,IAAX,EAAiB;AACf,UAAIA,GAAG,GAAG8C,mBAAV,EAA+B;AAC7BlD,QAAAA,CAAC,IAAI6J,iBAAL;AACD;;AACD,UAAIzJ,GAAG,GAAGgD,QAAQ,GAAGD,sBAArB,EAA6C;AAC3C6G,QAAAA,EAAE,IAAIF,oBAAN;AACD;AACF;;AACD,WAAO;AAAE/J,MAAAA,CAAF;AAAKC,MAAAA,CAAL;AAAQ+J,MAAAA,EAAR;AAAYC,MAAAA;AAAZ,KAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACuB,SAAdC,cAAc,CACnBC,UADmB,EAMnB;AAAA,QAJAC,SAIA,uEAJY,IAIZ;AAAA,QAHAC,UAGA,uEAHa,GAGb;AAAA,QAFAC,SAEA,uEAFY,EAEZ;AAAA,QADAC,UACA,uEADa,EACb;AACA,QAAI;AAAEC,MAAAA,MAAF;AAAUC,MAAAA;AAAV,QAAqBN,UAAzB,CADA,CAGA;AACA;AACA;AACA;AACA;;AACA,QACE,CAACrK,SAAS,CAAC6I,aAAV,EAAD,IACAwB,UAAU,CAACO,QADX,IAEAP,UAAU,CAACK,MAAX,KAAsB,CAFtB,IAGAL,UAAU,CAACM,MAAX,KAAsB,CAJxB,EAKE;AACAD,MAAAA,MAAM,GAAGL,UAAU,CAACM,MAApB;AACAA,MAAAA,MAAM,GAAGN,UAAU,CAACK,MAApB;AACD,KAhBD,CAkBA;AACA;;;AACA,QAAI,CAAAL,UAAU,SAAV,IAAAA,UAAU,WAAV,YAAAA,UAAU,CAAEQ,SAAZ,MAA0BC,UAAU,CAACC,cAAzC,EAAyD;AACvD;AACA;AACAL,MAAAA,MAAM,IAAIJ,SAAV;AACAK,MAAAA,MAAM,IAAIJ,UAAV;AACD,KALD,MAKO,IAAI,CAAAF,UAAU,SAAV,IAAAA,UAAU,WAAV,YAAAA,UAAU,CAAEQ,SAAZ,MAA0BC,UAAU,CAACE,cAAzC,EAAyD;AAC9D;AACA;AACA;AACA,UAAIhL,SAAS,CAAC6I,aAAV,EAAJ,EAA+B;AAC7B;AACA;AACA6B,QAAAA,MAAM,GAAGhJ,IAAI,CAACuJ,KAAL,CAAWP,MAAM,GAAGF,SAApB,CAAT;AACAG,QAAAA,MAAM,GAAGjJ,IAAI,CAACuJ,KAAL,CAAWN,MAAM,GAAGF,UAApB,CAAT;AACD,OALD,MAKO;AACL;AACA;AACA;AACAC,QAAAA,MAAM,GAAGhJ,IAAI,CAACuJ,KAAL,CAAWP,MAAM,GAAG,KAAKQ,eAAzB,CAAT;AACAP,QAAAA,MAAM,GAAGjJ,IAAI,CAACuJ,KAAL,CAAWN,MAAM,GAAG,KAAKO,eAAzB,CAAT;AACD;AACF;;AAED,WAAO;AAAER,MAAAA,MAAF;AAAUC,MAAAA;AAAV,KAAP;AACD;;AApwBa;;gBAAV3K,S,qBAGqB,MAAM,C;;AAowBjC,eAAeA,SAAf","sourcesContent":["import GridRange from './GridRange';\n\nclass GridUtils {\n // use same constant as chrome source for windows\n // https://github.com/chromium/chromium/blob/973af9d461b6b5dc60208c8d3d66adc27e53da78/ui/events/blink/web_input_event_builders_win.cc#L285\n static PIXELS_PER_LINE = 100 / 3;\n\n static getGridPointFromXY(x, y, metrics) {\n const column = GridUtils.getColumnAtX(x, metrics);\n const row = GridUtils.getRowAtY(y, metrics);\n\n return { x, y, row, column };\n }\n\n static iterateFloatingStart(start, total, callback) {\n for (let i = 0; i < start && i < total; i += 1) {\n const result = callback(i);\n if (result !== undefined) {\n return result;\n }\n }\n\n return undefined;\n }\n\n /**\n * Iterate through floating items at the end. Iterates in increasing order.\n */\n static iterateFloatingEnd(end, total, callback) {\n for (let i = 0; i < end && total - (end - i) >= 0; i += 1) {\n const result = callback(total - (end - i));\n if (result !== undefined) {\n return result;\n }\n }\n\n return undefined;\n }\n\n /**\n * Iterate through all floating items in increasing order, starting with the top items.\n * @param {number} start Count of start floating rows, eg. floatingTopRowCount\n * @param {number} end Count of end floating rows, eg. floatingBottomRowCount\n * @param {number} total Total number of items\n * @param {(itemIndex:number) => any | undefined} callback Callback called for each value, stopping the iterating and returning the value if one is returned\n */\n static iterateFloating(start, end, total, callback) {\n const result = GridUtils.iterateFloatingStart(start, total, callback);\n if (result !== undefined) {\n return result;\n }\n return GridUtils.iterateFloatingEnd(end, total, callback);\n }\n\n static iterateAllItems(\n visibleStart,\n visibleEnd,\n floatingStartCount,\n floatingEndCount,\n totalCount,\n callback\n ) {\n const visibleStartIndex = Math.max(visibleStart, floatingStartCount);\n const visibleEndIndex = Math.min(\n visibleEnd,\n totalCount - floatingEndCount - 1\n );\n let result = GridUtils.iterateFloating(\n floatingStartCount,\n floatingEndCount,\n totalCount,\n callback\n );\n if (result !== undefined) {\n return result;\n }\n\n for (let i = visibleStartIndex; i <= visibleEndIndex; i += 1) {\n result = callback(i);\n if (result !== undefined) {\n return result;\n }\n }\n\n return undefined;\n }\n\n static isInItem(itemIndex, itemXs, itemSizes, x) {\n const itemX = itemXs.get(itemIndex);\n const itemSize = itemSizes.get(itemIndex);\n return itemX <= x && x <= itemX + itemSize;\n }\n\n static getItemAtOffset(\n offset,\n itemCount,\n floatingStart,\n floatingEnd,\n items,\n itemXs,\n itemSizes\n ) {\n const floatingItem = GridUtils.iterateFloating(\n floatingStart,\n floatingEnd,\n itemCount,\n item => {\n if (GridUtils.isInItem(item, itemXs, itemSizes, offset)) {\n return item;\n }\n return undefined;\n }\n );\n if (floatingItem !== undefined) {\n return floatingItem;\n }\n\n for (let i = 0; i < items.length; i += 1) {\n const item = items[i];\n if (GridUtils.isInItem(item, itemXs, itemSizes, offset)) {\n return item;\n }\n }\n\n return null;\n }\n\n static getColumnAtX(x, metrics) {\n const {\n columnCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths,\n gridX,\n } = metrics;\n\n if (x < gridX) {\n return null;\n }\n\n return this.getItemAtOffset(\n x - gridX,\n columnCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths\n );\n }\n\n static getRowAtY(y, metrics) {\n const {\n floatingTopRowCount,\n floatingBottomRowCount,\n rowCount,\n visibleRows,\n visibleRowYs,\n visibleRowHeights,\n gridY,\n } = metrics;\n\n if (y < gridY) {\n return null;\n }\n\n return this.getItemAtOffset(\n y - gridY,\n rowCount,\n floatingTopRowCount,\n floatingBottomRowCount,\n visibleRows,\n visibleRowYs,\n visibleRowHeights\n );\n }\n\n /**\n * Iterate backward through the visible items until a shown item is hit\n * @param {Number} startIndex The index to start from\n * @param {Map} modelIndexes The mapping of model indexes\n * @param {Number[]} visibleItems The visible items\n * @param {Map} userSizes The user set sizes\n */\n static getNextShownItem(startIndex, modelIndexes, visibleItems, userSizes) {\n let visibleItemIndex =\n visibleItems.findIndex(value => value === startIndex) || 0;\n visibleItemIndex -= 1;\n while (visibleItemIndex != null && visibleItemIndex >= 0) {\n const item = visibleItems[visibleItemIndex];\n const modelIndex = modelIndexes.get(item);\n if (userSizes.get(modelIndex) !== 0) {\n return item;\n }\n\n visibleItemIndex -= 1;\n }\n\n return null;\n }\n\n /**\n * Iterate backward through the visible columns until a shown column is hit\n * @param {Number} columnIndex The column index to start iterating backward from\n * @param {GridMetrics} metrics The GridMetricCalculator metrics\n */\n static getNextShownColumn(startIndex, metrics) {\n const { modelColumns, visibleColumns, userColumnWidths } = metrics;\n return GridUtils.getNextShownItem(\n startIndex,\n modelColumns,\n visibleColumns,\n userColumnWidths\n );\n }\n\n /**\n * Iterate backward through the visible rows until a shown row is hit\n * @param {Number} rowIndex The row index to start iterating backward from\n * @param {GridMetrics} metrics The GridMetricCalculator metrics\n */\n static getNextShownRow(startIndex, metrics) {\n const { modelRows, visibleRows, userRowHeights } = metrics;\n return GridUtils.getNextShownItem(\n startIndex,\n modelRows,\n visibleRows,\n userRowHeights\n );\n }\n\n // Returns the column index if the x/y coordinates provided are close enough to the separator, otherwise false\n static getColumnSeparatorIndex(x, y, metrics, theme) {\n const {\n rowHeaderWidth,\n columnHeaderHeight,\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths,\n } = metrics;\n const { allowColumnResize, headerSeparatorHandleSize } = theme;\n\n if (\n columnHeaderHeight < y ||\n !allowColumnResize ||\n headerSeparatorHandleSize <= 0\n ) {\n return null;\n }\n\n const gridX = x - rowHeaderWidth;\n const halfSeparatorSize = headerSeparatorHandleSize * 0.5;\n\n // Iterate backward so that you can reveal hidden columns properly\n let isPreviousColumnHidden = false;\n for (let i = visibleColumns.length - 1; i >= 0; i -= 1) {\n const column = visibleColumns[i];\n const columnX = visibleColumnXs.get(column);\n const columnWidth = visibleColumnWidths.get(column);\n const isColumnHidden = columnWidth === 0;\n if (!isPreviousColumnHidden || !isColumnHidden) {\n let midX = columnX + columnWidth;\n if (isColumnHidden) {\n midX += halfSeparatorSize;\n } else if (isPreviousColumnHidden) {\n midX -= halfSeparatorSize;\n }\n\n const minX = midX - halfSeparatorSize;\n const maxX = midX + halfSeparatorSize;\n if (minX <= gridX && gridX <= maxX) {\n return column;\n }\n\n isPreviousColumnHidden = isColumnHidden;\n }\n }\n\n return null;\n }\n\n static isItemHidden(itemIndex, visibleSizes) {\n return visibleSizes.get(itemIndex) === 0;\n }\n\n static isColumnHidden(columnIndex, metrics) {\n const { visibleColumnWidths } = metrics;\n return GridUtils.isItemHidden(columnIndex, visibleColumnWidths);\n }\n\n /**\n * Check if the provided row is a floating row\n * @param {number} row The row index to check\n * @param {GridMetrics} metrics The grid metrics to check against\n */\n static isFloatingRow(row, metrics) {\n if (row == null) {\n return false;\n }\n\n const { floatingTopRowCount, floatingBottomRowCount, rowCount } = metrics;\n return (\n row < floatingTopRowCount || row >= rowCount - floatingBottomRowCount\n );\n }\n\n /**\n * Check if the provided column is a floating column\n * @param {number} column The column index to check\n * @param {GridMetrics} metrics The grid metrics to check against\n */\n static isFloatingColumn(column, metrics) {\n if (column == null) {\n return false;\n }\n\n const {\n floatingLeftColumnCount,\n floatingRightColumnCount,\n columnCount,\n } = metrics;\n return (\n column < floatingLeftColumnCount ||\n column >= columnCount - floatingRightColumnCount\n );\n }\n\n static getHiddenItems(itemIndex, visibleSizes, visibleItems) {\n if (!GridUtils.isItemHidden(itemIndex, visibleSizes)) {\n return [];\n }\n\n const hiddenItems = [itemIndex];\n const visibleItemIndex = visibleItems.findIndex(\n value => value === itemIndex\n );\n for (let i = visibleItemIndex - 1; i >= 0; i -= 1) {\n const item = visibleItems[i];\n if (!GridUtils.isItemHidden(item, visibleSizes)) {\n break;\n }\n\n hiddenItems.push(item);\n }\n\n return hiddenItems;\n }\n\n static getHiddenColumns(columnIndex, metrics) {\n const { visibleColumns, visibleColumnWidths } = metrics;\n return GridUtils.getHiddenItems(\n columnIndex,\n visibleColumnWidths,\n visibleColumns\n );\n }\n\n // Returns the row index if the x/y coordinates provided are close enough to the separator, otherwise false\n static getRowSeparatorIndex(x, y, metrics, theme) {\n const {\n rowHeaderWidth,\n columnHeaderHeight,\n visibleRows,\n visibleRowYs,\n visibleRowHeights,\n } = metrics;\n const { allowRowResize, headerSeparatorHandleSize } = theme;\n\n if (\n rowHeaderWidth < x ||\n !allowRowResize ||\n headerSeparatorHandleSize <= 0\n ) {\n return null;\n }\n\n const gridY = y - columnHeaderHeight;\n const halfSeparatorSize = headerSeparatorHandleSize * 0.5;\n\n // Iterate backward so you can reveal hidden rows properly\n let isPreviousRowHidden = false;\n for (let i = visibleRows.length - 1; i >= 0; i -= 1) {\n const row = visibleRows[i];\n const rowY = visibleRowYs.get(row);\n const rowHeight = visibleRowHeights.get(row);\n const isRowHidden = rowHeight === 0;\n if (!isPreviousRowHidden || !isRowHidden) {\n let midY = rowY + rowHeight;\n if (isRowHidden) {\n midY += halfSeparatorSize;\n } else if (isPreviousRowHidden) {\n midY -= halfSeparatorSize;\n }\n\n const minY = midY - halfSeparatorSize;\n const maxY = midY + halfSeparatorSize;\n\n if (minY <= gridY && gridY <= maxY) {\n return row;\n }\n\n isPreviousRowHidden = isRowHidden;\n }\n }\n\n return null;\n }\n\n static isRowHidden(rowIndex, metrics) {\n const { visibleRowHeights } = metrics;\n return GridUtils.isItemHidden(rowIndex, visibleRowHeights);\n }\n\n static getHiddenRows(rowIndex, metrics) {\n const { visibleRows, visibleRowHeights } = metrics;\n return GridUtils.getHiddenItems(rowIndex, visibleRowHeights, visibleRows);\n }\n\n /**\n * Set a new order for items in the grid\n * @param {Number} from The visible index to move from\n * @param {Number} to The visible index to move the itme to\n * @param {Array} oldMovedItems The old reordered items\n * @returns {Number} The new reordered items\n */\n static moveItem(from, to, oldMovedItems = []) {\n if (from === to) {\n return oldMovedItems;\n }\n\n const movedItems = [].concat(oldMovedItems);\n\n if (\n movedItems.length > 0 &&\n movedItems[movedItems.length - 1].to === from\n ) {\n movedItems[movedItems.length - 1] = {\n ...movedItems[movedItems.length - 1],\n to,\n };\n } else {\n movedItems.push({ from, to });\n }\n\n return movedItems;\n }\n\n /**\n * Retrieve the model index given the currently moved items\n * @param {Number} visibleIndex The visible index of the item to get the model index for\n * @param {Array} movedItems The moved items\n * @returns {Number} The model index of the item\n */\n static getModelIndex(visibleIndex, movedItems = []) {\n let modelIndex = visibleIndex;\n\n for (let i = movedItems.length - 1; i >= 0; i -= 1) {\n const movedItem = movedItems[i];\n if (modelIndex === movedItem.to) {\n ({ from: modelIndex } = movedItem);\n } else if (movedItem.from <= modelIndex && modelIndex < movedItem.to) {\n modelIndex += 1;\n } else if (movedItem.to < modelIndex && modelIndex <= movedItem.from) {\n modelIndex -= 1;\n }\n }\n\n return modelIndex;\n }\n\n /**\n * Translate the provided UI start/end indexes to the model start/end indexes by applying the `movedItems` transformations.\n * Since moved items can split apart a range, multiple pairs of indexes are returned\n *\n * @param {number} start Start item in one dimension\n * @param {number} end End item in one dimension\n * @param {MovedItem[]} movedItems Moved item pairs in this dimension\n * @returns {AxisRange[]} Array of start/end pairs of the indexes after transformations applied.\n */\n static getModelRangeIndexes(start, end, movedItems) {\n let result = [[start, end]];\n if (start == null) {\n return result;\n }\n\n // movedItems is built by adding a new item whenever an item in the UI is dragged/moved, transforming a model\n // index to the new UI index. We want to find the model index from the UI index here, so we unwind the\n // transformations applied - the start/end axis range passed in is the current UI range, so we need to apply\n // the transformations starting at the end of the chain backward to find the appropriate model indexes\n for (let i = movedItems.length - 1; i >= 0; i -= 1) {\n const { from, to } = movedItems[i];\n const nextResult = [];\n for (let j = 0; j < result.length; j += 1) {\n const [currentStart, currentEnd] = result[j];\n const startLength = nextResult.length;\n if (from <= currentStart) {\n // From before\n if (to > currentEnd) {\n // To after\n nextResult.push([currentStart + 1, currentEnd + 1]);\n } else if (to >= currentStart) {\n // To within\n nextResult.push([from, from]);\n nextResult.push([currentStart + 1, currentEnd]);\n }\n } else if (from > currentEnd) {\n // From after\n if (to < currentStart) {\n // To before\n nextResult.push([currentStart - 1, currentEnd - 1]);\n } else if (to <= currentEnd) {\n // To within\n nextResult.push([from, from]);\n nextResult.push([currentStart, currentEnd - 1]);\n }\n } else if (to < currentStart) {\n // From within to before\n nextResult.push([currentStart - 1, from - 1]);\n nextResult.push([from + 1, currentEnd]);\n } else if (to > currentEnd) {\n // From within to after\n nextResult.push([currentStart, from - 1]);\n nextResult.push([from + 1, currentEnd + 1]);\n } else if (from > to) {\n // From within after to within before\n if (to > currentStart) {\n nextResult.push([currentStart, to - 1]);\n }\n nextResult.push([from, from]);\n nextResult.push([to, from - 1]);\n if (from < currentEnd) {\n nextResult.push([from + 1, currentEnd]);\n }\n } else if (from < to) {\n // From within before to within after\n if (from > currentStart) {\n nextResult.push([currentStart, from - 1]);\n }\n nextResult.push([from + 1, to]);\n nextResult.push([from, from]);\n if (from < currentEnd) {\n nextResult.push([to + 1, currentEnd]);\n }\n }\n\n if (startLength === nextResult.length) {\n // No modifications were made, add the original range indexes\n nextResult.push([currentStart, currentEnd]);\n }\n }\n result = nextResult;\n }\n return result;\n }\n\n /**\n * Translate the provided UI range into model range, using the `movedColumns` and `movedRows` to apply the necessary transforms.\n * `movedColumns` and `movedRows` are array of operations done to the UI indexes to re-order items\n *\n * @param {GridRange} uiRange The currently selected UI ranges\n * @param {Array} movedColumns The moved column pairs\n * @param {Array} movedRows The moved row pairs\n * @returns {GridRange[]} The model ranges after translation.\n */\n static getModelRange(uiRange, movedColumns = [], movedRows = []) {\n const columnRanges = GridUtils.getModelRangeIndexes(\n uiRange.startColumn,\n uiRange.endColumn,\n movedColumns\n );\n const rowRanges = GridUtils.getModelRangeIndexes(\n uiRange.startRow,\n uiRange.endRow,\n movedRows\n );\n const ranges = [];\n for (let i = 0; i < columnRanges.length; i += 1) {\n const c = columnRanges[i];\n for (let j = 0; j < rowRanges.length; j += 1) {\n const r = rowRanges[j];\n ranges.push(new GridRange(c[0], r[0], c[1], r[1]));\n }\n }\n return ranges;\n }\n\n /**\n * Translate the provided UI range into model ranges, using the `movedColumns` and `movedRows` to apply the necessary transforms.\n * `movedColumns` and `movedRows` are array of operations done to the UI indexes to re-order items\n *\n * @param {GridRange[]} uiRanges The currently selected UI ranges\n * @param {Array} movedColumns The moved column pairs\n * @param {Array} movedRows The moved row pairs\n * @returns {GridRange[]} The model ranges after translation.\n */\n static getModelRanges(uiRanges, movedColumns = [], movedRows = []) {\n const modelRanges = [];\n for (let i = 0; i < uiRanges.length; i += 1) {\n modelRanges.push(\n ...GridUtils.getModelRange(uiRanges[i], movedColumns, movedRows)\n );\n }\n return modelRanges;\n }\n\n /**\n * Retrieve the visible index given the currently moved items\n * @param {Number} modelIndex The model index to get the visible index for\n * @param {Array} movedItems Moved items\n * @returns {Number} The visible index of the item\n */\n static getVisibleIndex(modelIndex, movedItems = []) {\n let visibleIndex = modelIndex;\n\n for (let i = 0; i < movedItems.length; i += 1) {\n const movedItem = movedItems[i];\n if (visibleIndex === movedItem.from) {\n ({ to: visibleIndex } = movedItem);\n } else if (\n movedItem.from < visibleIndex &&\n visibleIndex <= movedItem.to\n ) {\n visibleIndex -= 1;\n } else if (\n movedItem.to <= visibleIndex &&\n visibleIndex < movedItem.from\n ) {\n visibleIndex += 1;\n }\n }\n\n return visibleIndex;\n }\n\n static isMacPlatform() {\n const { platform } = window.navigator;\n return platform.startsWith('Mac');\n }\n\n static getModifierKey() {\n if (GridUtils.isMacPlatform()) {\n return 'metaKey';\n }\n\n return 'ctrlKey';\n }\n\n static isModifierKeyDown(event) {\n const modifierKey = GridUtils.getModifierKey();\n return event[modifierKey];\n }\n\n static checkColumnHidden(modelIndex, userColumnWidths) {\n return userColumnWidths.get(modelIndex) === 0;\n }\n\n static checkAllColumnsHidden(columns, userColumnWidths) {\n if (userColumnWidths.size === 0) {\n return false;\n }\n return columns.every(column => userColumnWidths.get(column) === 0);\n }\n\n /**\n * Get the bounds the mouse needs to be dragged outside of from an initial selection before scrolling occurs.\n * Taking into account any floating rows that may be covering the viewport.\n * @param {GridMetrics} metrics Grid metrics\n * @param {number} row The row they started dragging in\n * @param {number} column The column they started the drag from\n * @returns Dimensions of the drag area in relation to the canvas they need to drag outside of to start scrolling\n */\n static getScrollDragBounds(metrics, row, column) {\n const {\n gridX,\n gridY,\n width,\n height,\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n floatingLeftWidth,\n floatingRightWidth,\n floatingTopHeight,\n floatingBottomHeight,\n columnCount,\n rowCount,\n } = metrics;\n let x = gridX;\n let y = gridY;\n let x2 = width;\n let y2 = height;\n if (column != null) {\n if (column > floatingLeftColumnCount) {\n x += floatingLeftWidth;\n }\n if (column < columnCount - floatingRightColumnCount) {\n x2 -= floatingRightWidth;\n }\n }\n\n if (row != null) {\n if (row > floatingTopRowCount) {\n y += floatingTopHeight;\n }\n if (row < rowCount - floatingBottomRowCount) {\n y2 -= floatingBottomHeight;\n }\n }\n return { x, y, x2, y2 };\n }\n\n /**\n * Converts the delta coordinates from the provided wheel event to pixels\n * Different platforms have different ways of providing the delta so this normalizes it\n * @param {WheelEvent} wheelEvent The mouse wheel event to get the scrolling delta for\n * @param {number?} pageWidth The width of the page that is scrolling\n * @param {number?} pageHeight The height of the page that is scrolling\n * @param {number?} lineWidth The width of the line scrolling in line mode\n * @param {number?} lineHeight The height of the line scrolling in line mode\n * @returns {{deltaX:number, deltaY: number}} The delta coordinates normalized to pixels\n */\n static getScrollDelta(\n wheelEvent,\n pageWidth = 1024,\n pageHeight = 768,\n lineWidth = 20,\n lineHeight = 20\n ) {\n let { deltaX, deltaY } = wheelEvent;\n\n // Flip scroll direction if shiftKey is held on windows/linux.\n // On mac, deltaX/Y values are switched at the event level when shiftKey=true.\n // Guard on strictly Y only changing, to ignore trackpad diagonal motion,\n // through that guard may not be necessary, but it is difficult to determine for\n // all platforms/browser/scroll method combos.\n if (\n !GridUtils.isMacPlatform() &&\n wheelEvent.shiftKey &&\n wheelEvent.deltaX === 0 &&\n wheelEvent.deltaY !== 0\n ) {\n deltaX = wheelEvent.deltaY;\n deltaY = wheelEvent.deltaX;\n }\n\n // Normalize other deltaMode values to pixel units\n // deltaMode 0, is already in pixel units\n if (wheelEvent?.deltaMode === WheelEvent.DOM_DELTA_PAGE) {\n // Users can set OS to be in deltaMode page\n // scrolly by page units as pixels\n deltaX *= pageWidth;\n deltaY *= pageHeight;\n } else if (wheelEvent?.deltaMode === WheelEvent.DOM_DELTA_LINE) {\n // Firefox reports deltaMode line\n // Normalize distance travelled between browsers\n // but remain ~platform/browser combo consistent\n if (GridUtils.isMacPlatform()) {\n // for mac treat lines as a standard row height\n // on mac, firefox travels less distance then chrome per tick\n deltaX = Math.round(deltaX * lineWidth);\n deltaY = Math.round(deltaY * lineHeight);\n } else {\n // for windows convert to pixels using the same method as chrome\n // chrome goes 100 per 3 lines, and firefox would go 102 per 3 (17 lineheight * 3 lines * 2)\n // make the behaviour the same between as it's close enough\n deltaX = Math.round(deltaX * this.PIXELS_PER_LINE);\n deltaY = Math.round(deltaY * this.PIXELS_PER_LINE);\n }\n }\n\n return { deltaX, deltaY };\n }\n}\n\nexport default GridUtils;\n"],"file":"GridUtils.js"}
1
+ {"version":3,"sources":["../src/GridUtils.js"],"names":["GridRange","GridUtils","getGridPointFromXY","x","y","metrics","column","getColumnAtX","row","getRowAtY","iterateFloatingStart","start","total","callback","i","result","undefined","iterateFloatingEnd","end","iterateFloating","iterateAllItems","visibleStart","visibleEnd","floatingStartCount","floatingEndCount","totalCount","visibleStartIndex","Math","max","visibleEndIndex","min","isInItem","itemIndex","itemXs","itemSizes","itemX","get","itemSize","getItemAtOffset","offset","itemCount","floatingStart","floatingEnd","items","floatingItem","item","length","columnCount","floatingLeftColumnCount","floatingRightColumnCount","visibleColumns","visibleColumnXs","visibleColumnWidths","gridX","floatingTopRowCount","floatingBottomRowCount","rowCount","visibleRows","visibleRowYs","visibleRowHeights","gridY","getNextShownItem","startIndex","modelIndexes","visibleItems","userSizes","visibleItemIndex","findIndex","value","modelIndex","getNextShownColumn","modelColumns","userColumnWidths","getNextShownRow","modelRows","userRowHeights","getColumnSeparatorIndex","theme","rowHeaderWidth","columnHeaderHeight","floatingColumns","allowColumnResize","headerSeparatorHandleSize","floatingLeftColumnsWidth","halfSeparatorSize","isPreviousColumnHidden","columnX","columnWidth","isColumnHidden","midX","minX","maxX","isItemHidden","visibleSizes","columnIndex","isFloatingRow","isFloatingColumn","getHiddenItems","hiddenItems","push","getHiddenColumns","getRowSeparatorIndex","allowRowResize","isPreviousRowHidden","rowY","rowHeight","isRowHidden","midY","minY","maxY","rowIndex","getHiddenRows","moveItem","from","to","oldMovedItems","movedItems","concat","getModelIndex","visibleIndex","movedItem","getModelRangeIndexes","nextResult","j","currentStart","currentEnd","startLength","getModelRange","uiRange","movedColumns","movedRows","columnRanges","startColumn","endColumn","rowRanges","startRow","endRow","ranges","c","r","getModelRanges","uiRanges","modelRanges","getVisibleIndex","isMacPlatform","platform","window","navigator","startsWith","getModifierKey","isModifierKeyDown","event","modifierKey","checkColumnHidden","checkAllColumnsHidden","columns","size","every","getScrollDragBounds","width","height","floatingLeftWidth","floatingRightWidth","floatingTopHeight","floatingBottomHeight","x2","y2","getScrollDelta","wheelEvent","pageWidth","pageHeight","lineWidth","lineHeight","deltaX","deltaY","shiftKey","deltaMode","WheelEvent","DOM_DELTA_PAGE","DOM_DELTA_LINE","round","PIXELS_PER_LINE"],"mappings":"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","sourcesContent":["import GridRange from './GridRange';\n\nclass GridUtils {\n // use same constant as chrome source for windows\n // https://github.com/chromium/chromium/blob/973af9d461b6b5dc60208c8d3d66adc27e53da78/ui/events/blink/web_input_event_builders_win.cc#L285\n static PIXELS_PER_LINE = 100 / 3;\n\n static getGridPointFromXY(x, y, metrics) {\n const column = GridUtils.getColumnAtX(x, metrics);\n const row = GridUtils.getRowAtY(y, metrics);\n\n return { x, y, row, column };\n }\n\n static iterateFloatingStart(start, total, callback) {\n for (let i = 0; i < start && i < total; i += 1) {\n const result = callback(i);\n if (result !== undefined) {\n return result;\n }\n }\n\n return undefined;\n }\n\n /**\n * Iterate through floating items at the end. Iterates in increasing order.\n */\n static iterateFloatingEnd(end, total, callback) {\n for (let i = 0; i < end && total - (end - i) >= 0; i += 1) {\n const result = callback(total - (end - i));\n if (result !== undefined) {\n return result;\n }\n }\n\n return undefined;\n }\n\n /**\n * Iterate through all floating items in increasing order, starting with the top items.\n * @param {number} start Count of start floating rows, eg. floatingTopRowCount\n * @param {number} end Count of end floating rows, eg. floatingBottomRowCount\n * @param {number} total Total number of items\n * @param {(itemIndex:number) => any | undefined} callback Callback called for each value, stopping the iterating and returning the value if one is returned\n */\n static iterateFloating(start, end, total, callback) {\n const result = GridUtils.iterateFloatingStart(start, total, callback);\n if (result !== undefined) {\n return result;\n }\n return GridUtils.iterateFloatingEnd(end, total, callback);\n }\n\n static iterateAllItems(\n visibleStart,\n visibleEnd,\n floatingStartCount,\n floatingEndCount,\n totalCount,\n callback\n ) {\n const visibleStartIndex = Math.max(visibleStart, floatingStartCount);\n const visibleEndIndex = Math.min(\n visibleEnd,\n totalCount - floatingEndCount - 1\n );\n let result = GridUtils.iterateFloating(\n floatingStartCount,\n floatingEndCount,\n totalCount,\n callback\n );\n if (result !== undefined) {\n return result;\n }\n\n for (let i = visibleStartIndex; i <= visibleEndIndex; i += 1) {\n result = callback(i);\n if (result !== undefined) {\n return result;\n }\n }\n\n return undefined;\n }\n\n static isInItem(itemIndex, itemXs, itemSizes, x) {\n const itemX = itemXs.get(itemIndex);\n const itemSize = itemSizes.get(itemIndex);\n return itemX <= x && x <= itemX + itemSize;\n }\n\n static getItemAtOffset(\n offset,\n itemCount,\n floatingStart,\n floatingEnd,\n items,\n itemXs,\n itemSizes\n ) {\n const floatingItem = GridUtils.iterateFloating(\n floatingStart,\n floatingEnd,\n itemCount,\n item => {\n if (GridUtils.isInItem(item, itemXs, itemSizes, offset)) {\n return item;\n }\n return undefined;\n }\n );\n if (floatingItem !== undefined) {\n return floatingItem;\n }\n\n for (let i = 0; i < items.length; i += 1) {\n const item = items[i];\n if (GridUtils.isInItem(item, itemXs, itemSizes, offset)) {\n return item;\n }\n }\n\n return null;\n }\n\n static getColumnAtX(x, metrics) {\n const {\n columnCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths,\n gridX,\n } = metrics;\n\n if (x < gridX) {\n return null;\n }\n\n return this.getItemAtOffset(\n x - gridX,\n columnCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths\n );\n }\n\n static getRowAtY(y, metrics) {\n const {\n floatingTopRowCount,\n floatingBottomRowCount,\n rowCount,\n visibleRows,\n visibleRowYs,\n visibleRowHeights,\n gridY,\n } = metrics;\n\n if (y < gridY) {\n return null;\n }\n\n return this.getItemAtOffset(\n y - gridY,\n rowCount,\n floatingTopRowCount,\n floatingBottomRowCount,\n visibleRows,\n visibleRowYs,\n visibleRowHeights\n );\n }\n\n /**\n * Iterate backward through the visible items until a shown item is hit\n * @param {Number} startIndex The index to start from\n * @param {Map} modelIndexes The mapping of model indexes\n * @param {Number[]} visibleItems The visible items\n * @param {Map} userSizes The user set sizes\n */\n static getNextShownItem(startIndex, modelIndexes, visibleItems, userSizes) {\n let visibleItemIndex =\n visibleItems.findIndex(value => value === startIndex) || 0;\n visibleItemIndex -= 1;\n while (visibleItemIndex != null && visibleItemIndex >= 0) {\n const item = visibleItems[visibleItemIndex];\n const modelIndex = modelIndexes.get(item);\n if (userSizes.get(modelIndex) !== 0) {\n return item;\n }\n\n visibleItemIndex -= 1;\n }\n\n return null;\n }\n\n /**\n * Iterate backward through the visible columns until a shown column is hit\n * @param {Number} columnIndex The column index to start iterating backward from\n * @param {GridMetrics} metrics The GridMetricCalculator metrics\n */\n static getNextShownColumn(startIndex, metrics) {\n const { modelColumns, visibleColumns, userColumnWidths } = metrics;\n return GridUtils.getNextShownItem(\n startIndex,\n modelColumns,\n visibleColumns,\n userColumnWidths\n );\n }\n\n /**\n * Iterate backward through the visible rows until a shown row is hit\n * @param {Number} rowIndex The row index to start iterating backward from\n * @param {GridMetrics} metrics The GridMetricCalculator metrics\n */\n static getNextShownRow(startIndex, metrics) {\n const { modelRows, visibleRows, userRowHeights } = metrics;\n return GridUtils.getNextShownItem(\n startIndex,\n modelRows,\n visibleRows,\n userRowHeights\n );\n }\n\n /**\n * Gets the column index if the x/y coordinated provided are close enough\n * @param {Number} x Mouse x coordinate\n * @param {Number} y Mouse y coordinate\n * @param {GridMetrics} metrics The GridMetricCalculator metrics\n * @param {GridTheme} theme The grid theme with potantial user overrides\n * @returns {Number|null} Column index or null\n */\n static getColumnSeparatorIndex(x, y, metrics, theme) {\n const {\n rowHeaderWidth,\n columnHeaderHeight,\n floatingColumns,\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths,\n floatingLeftColumnCount,\n } = metrics;\n const { allowColumnResize, headerSeparatorHandleSize } = theme;\n const floatingLeftColumnsWidth =\n visibleColumnXs.get(floatingLeftColumnCount - 1) +\n visibleColumnWidths.get(floatingLeftColumnCount - 1);\n\n if (\n columnHeaderHeight < y ||\n !allowColumnResize ||\n headerSeparatorHandleSize <= 0\n ) {\n return null;\n }\n\n const gridX = x - rowHeaderWidth;\n const halfSeparatorSize = headerSeparatorHandleSize * 0.5;\n\n // Iterate through the floating columns first since they're on top\n let isPreviousColumnHidden = false;\n for (let i = floatingColumns.length - 1; i >= 0; i -= 1) {\n const column = floatingColumns[i];\n const columnX = visibleColumnXs.get(column);\n const columnWidth = visibleColumnWidths.get(column);\n const isColumnHidden = columnWidth === 0;\n if (!isPreviousColumnHidden || !isColumnHidden) {\n let midX = columnX + columnWidth;\n if (isColumnHidden) {\n midX += halfSeparatorSize;\n } else if (isPreviousColumnHidden) {\n midX -= halfSeparatorSize;\n }\n\n const minX = midX - halfSeparatorSize;\n const maxX = midX + halfSeparatorSize;\n if (minX <= gridX && gridX <= maxX) {\n return column;\n }\n\n isPreviousColumnHidden = isColumnHidden;\n }\n }\n\n // Iterate backward so that you can reveal hidden columns properly\n isPreviousColumnHidden = false;\n for (let i = visibleColumns.length - 1; i >= 0; i -= 1) {\n const column = visibleColumns[i];\n const columnX = visibleColumnXs.get(column);\n const columnWidth = visibleColumnWidths.get(column);\n const isColumnHidden = columnWidth === 0;\n\n // If this column is under the floating columns \"layer\". Terminate early.\n if (columnX < floatingLeftColumnsWidth - columnWidth) {\n return null;\n }\n\n if (!isPreviousColumnHidden || !isColumnHidden) {\n let midX = columnX + columnWidth;\n if (isColumnHidden) {\n midX += halfSeparatorSize;\n } else if (isPreviousColumnHidden) {\n midX -= halfSeparatorSize;\n }\n\n const minX = midX - halfSeparatorSize;\n const maxX = midX + halfSeparatorSize;\n if (minX <= gridX && gridX <= maxX) {\n return column;\n }\n\n isPreviousColumnHidden = isColumnHidden;\n }\n }\n\n return null;\n }\n\n static isItemHidden(itemIndex, visibleSizes) {\n return visibleSizes.get(itemIndex) === 0;\n }\n\n static isColumnHidden(columnIndex, metrics) {\n const { visibleColumnWidths } = metrics;\n return GridUtils.isItemHidden(columnIndex, visibleColumnWidths);\n }\n\n /**\n * Check if the provided row is a floating row\n * @param {number} row The row index to check\n * @param {GridMetrics} metrics The grid metrics to check against\n */\n static isFloatingRow(row, metrics) {\n if (row == null) {\n return false;\n }\n\n const { floatingTopRowCount, floatingBottomRowCount, rowCount } = metrics;\n return (\n row < floatingTopRowCount || row >= rowCount - floatingBottomRowCount\n );\n }\n\n /**\n * Check if the provided column is a floating column\n * @param {number} column The column index to check\n * @param {GridMetrics} metrics The grid metrics to check against\n */\n static isFloatingColumn(column, metrics) {\n if (column == null) {\n return false;\n }\n\n const {\n floatingLeftColumnCount,\n floatingRightColumnCount,\n columnCount,\n } = metrics;\n return (\n column < floatingLeftColumnCount ||\n column >= columnCount - floatingRightColumnCount\n );\n }\n\n static getHiddenItems(itemIndex, visibleSizes, visibleItems) {\n if (!GridUtils.isItemHidden(itemIndex, visibleSizes)) {\n return [];\n }\n\n const hiddenItems = [itemIndex];\n const visibleItemIndex = visibleItems.findIndex(\n value => value === itemIndex\n );\n for (let i = visibleItemIndex - 1; i >= 0; i -= 1) {\n const item = visibleItems[i];\n if (!GridUtils.isItemHidden(item, visibleSizes)) {\n break;\n }\n\n hiddenItems.push(item);\n }\n\n return hiddenItems;\n }\n\n static getHiddenColumns(columnIndex, metrics) {\n const { visibleColumns, visibleColumnWidths } = metrics;\n return GridUtils.getHiddenItems(\n columnIndex,\n visibleColumnWidths,\n visibleColumns\n );\n }\n\n // Returns the row index if the x/y coordinates provided are close enough to the separator, otherwise false\n static getRowSeparatorIndex(x, y, metrics, theme) {\n const {\n rowHeaderWidth,\n columnHeaderHeight,\n visibleRows,\n visibleRowYs,\n visibleRowHeights,\n } = metrics;\n const { allowRowResize, headerSeparatorHandleSize } = theme;\n\n if (\n rowHeaderWidth < x ||\n !allowRowResize ||\n headerSeparatorHandleSize <= 0\n ) {\n return null;\n }\n\n const gridY = y - columnHeaderHeight;\n const halfSeparatorSize = headerSeparatorHandleSize * 0.5;\n\n // Iterate backward so you can reveal hidden rows properly\n let isPreviousRowHidden = false;\n for (let i = visibleRows.length - 1; i >= 0; i -= 1) {\n const row = visibleRows[i];\n const rowY = visibleRowYs.get(row);\n const rowHeight = visibleRowHeights.get(row);\n const isRowHidden = rowHeight === 0;\n if (!isPreviousRowHidden || !isRowHidden) {\n let midY = rowY + rowHeight;\n if (isRowHidden) {\n midY += halfSeparatorSize;\n } else if (isPreviousRowHidden) {\n midY -= halfSeparatorSize;\n }\n\n const minY = midY - halfSeparatorSize;\n const maxY = midY + halfSeparatorSize;\n\n if (minY <= gridY && gridY <= maxY) {\n return row;\n }\n\n isPreviousRowHidden = isRowHidden;\n }\n }\n\n return null;\n }\n\n static isRowHidden(rowIndex, metrics) {\n const { visibleRowHeights } = metrics;\n return GridUtils.isItemHidden(rowIndex, visibleRowHeights);\n }\n\n static getHiddenRows(rowIndex, metrics) {\n const { visibleRows, visibleRowHeights } = metrics;\n return GridUtils.getHiddenItems(rowIndex, visibleRowHeights, visibleRows);\n }\n\n /**\n * Set a new order for items in the grid\n * @param {Number} from The visible index to move from\n * @param {Number} to The visible index to move the itme to\n * @param {Array} oldMovedItems The old reordered items\n * @returns {Number} The new reordered items\n */\n static moveItem(from, to, oldMovedItems = []) {\n if (from === to) {\n return oldMovedItems;\n }\n\n const movedItems = [].concat(oldMovedItems);\n\n if (\n movedItems.length > 0 &&\n movedItems[movedItems.length - 1].to === from\n ) {\n movedItems[movedItems.length - 1] = {\n ...movedItems[movedItems.length - 1],\n to,\n };\n } else {\n movedItems.push({ from, to });\n }\n\n return movedItems;\n }\n\n /**\n * Retrieve the model index given the currently moved items\n * @param {Number} visibleIndex The visible index of the item to get the model index for\n * @param {Array} movedItems The moved items\n * @returns {Number} The model index of the item\n */\n static getModelIndex(visibleIndex, movedItems = []) {\n let modelIndex = visibleIndex;\n\n for (let i = movedItems.length - 1; i >= 0; i -= 1) {\n const movedItem = movedItems[i];\n if (modelIndex === movedItem.to) {\n ({ from: modelIndex } = movedItem);\n } else if (movedItem.from <= modelIndex && modelIndex < movedItem.to) {\n modelIndex += 1;\n } else if (movedItem.to < modelIndex && modelIndex <= movedItem.from) {\n modelIndex -= 1;\n }\n }\n\n return modelIndex;\n }\n\n /**\n * Translate the provided UI start/end indexes to the model start/end indexes by applying the `movedItems` transformations.\n * Since moved items can split apart a range, multiple pairs of indexes are returned\n *\n * @param {number} start Start item in one dimension\n * @param {number} end End item in one dimension\n * @param {MovedItem[]} movedItems Moved item pairs in this dimension\n * @returns {AxisRange[]} Array of start/end pairs of the indexes after transformations applied.\n */\n static getModelRangeIndexes(start, end, movedItems) {\n let result = [[start, end]];\n if (start == null) {\n return result;\n }\n\n // movedItems is built by adding a new item whenever an item in the UI is dragged/moved, transforming a model\n // index to the new UI index. We want to find the model index from the UI index here, so we unwind the\n // transformations applied - the start/end axis range passed in is the current UI range, so we need to apply\n // the transformations starting at the end of the chain backward to find the appropriate model indexes\n for (let i = movedItems.length - 1; i >= 0; i -= 1) {\n const { from, to } = movedItems[i];\n const nextResult = [];\n for (let j = 0; j < result.length; j += 1) {\n const [currentStart, currentEnd] = result[j];\n const startLength = nextResult.length;\n if (from <= currentStart) {\n // From before\n if (to > currentEnd) {\n // To after\n nextResult.push([currentStart + 1, currentEnd + 1]);\n } else if (to >= currentStart) {\n // To within\n nextResult.push([from, from]);\n nextResult.push([currentStart + 1, currentEnd]);\n }\n } else if (from > currentEnd) {\n // From after\n if (to < currentStart) {\n // To before\n nextResult.push([currentStart - 1, currentEnd - 1]);\n } else if (to <= currentEnd) {\n // To within\n nextResult.push([from, from]);\n nextResult.push([currentStart, currentEnd - 1]);\n }\n } else if (to < currentStart) {\n // From within to before\n nextResult.push([currentStart - 1, from - 1]);\n nextResult.push([from + 1, currentEnd]);\n } else if (to > currentEnd) {\n // From within to after\n nextResult.push([currentStart, from - 1]);\n nextResult.push([from + 1, currentEnd + 1]);\n } else if (from > to) {\n // From within after to within before\n if (to > currentStart) {\n nextResult.push([currentStart, to - 1]);\n }\n nextResult.push([from, from]);\n nextResult.push([to, from - 1]);\n if (from < currentEnd) {\n nextResult.push([from + 1, currentEnd]);\n }\n } else if (from < to) {\n // From within before to within after\n if (from > currentStart) {\n nextResult.push([currentStart, from - 1]);\n }\n nextResult.push([from + 1, to]);\n nextResult.push([from, from]);\n if (from < currentEnd) {\n nextResult.push([to + 1, currentEnd]);\n }\n }\n\n if (startLength === nextResult.length) {\n // No modifications were made, add the original range indexes\n nextResult.push([currentStart, currentEnd]);\n }\n }\n result = nextResult;\n }\n return result;\n }\n\n /**\n * Translate the provided UI range into model range, using the `movedColumns` and `movedRows` to apply the necessary transforms.\n * `movedColumns` and `movedRows` are array of operations done to the UI indexes to re-order items\n *\n * @param {GridRange} uiRange The currently selected UI ranges\n * @param {Array} movedColumns The moved column pairs\n * @param {Array} movedRows The moved row pairs\n * @returns {GridRange[]} The model ranges after translation.\n */\n static getModelRange(uiRange, movedColumns = [], movedRows = []) {\n const columnRanges = GridUtils.getModelRangeIndexes(\n uiRange.startColumn,\n uiRange.endColumn,\n movedColumns\n );\n const rowRanges = GridUtils.getModelRangeIndexes(\n uiRange.startRow,\n uiRange.endRow,\n movedRows\n );\n const ranges = [];\n for (let i = 0; i < columnRanges.length; i += 1) {\n const c = columnRanges[i];\n for (let j = 0; j < rowRanges.length; j += 1) {\n const r = rowRanges[j];\n ranges.push(new GridRange(c[0], r[0], c[1], r[1]));\n }\n }\n return ranges;\n }\n\n /**\n * Translate the provided UI range into model ranges, using the `movedColumns` and `movedRows` to apply the necessary transforms.\n * `movedColumns` and `movedRows` are array of operations done to the UI indexes to re-order items\n *\n * @param {GridRange[]} uiRanges The currently selected UI ranges\n * @param {Array} movedColumns The moved column pairs\n * @param {Array} movedRows The moved row pairs\n * @returns {GridRange[]} The model ranges after translation.\n */\n static getModelRanges(uiRanges, movedColumns = [], movedRows = []) {\n const modelRanges = [];\n for (let i = 0; i < uiRanges.length; i += 1) {\n modelRanges.push(\n ...GridUtils.getModelRange(uiRanges[i], movedColumns, movedRows)\n );\n }\n return modelRanges;\n }\n\n /**\n * Retrieve the visible index given the currently moved items\n * @param {Number} modelIndex The model index to get the visible index for\n * @param {Array} movedItems Moved items\n * @returns {Number} The visible index of the item\n */\n static getVisibleIndex(modelIndex, movedItems = []) {\n let visibleIndex = modelIndex;\n\n for (let i = 0; i < movedItems.length; i += 1) {\n const movedItem = movedItems[i];\n if (visibleIndex === movedItem.from) {\n ({ to: visibleIndex } = movedItem);\n } else if (\n movedItem.from < visibleIndex &&\n visibleIndex <= movedItem.to\n ) {\n visibleIndex -= 1;\n } else if (\n movedItem.to <= visibleIndex &&\n visibleIndex < movedItem.from\n ) {\n visibleIndex += 1;\n }\n }\n\n return visibleIndex;\n }\n\n static isMacPlatform() {\n const { platform } = window.navigator;\n return platform.startsWith('Mac');\n }\n\n static getModifierKey() {\n if (GridUtils.isMacPlatform()) {\n return 'metaKey';\n }\n\n return 'ctrlKey';\n }\n\n static isModifierKeyDown(event) {\n const modifierKey = GridUtils.getModifierKey();\n return event[modifierKey];\n }\n\n static checkColumnHidden(modelIndex, userColumnWidths) {\n return userColumnWidths.get(modelIndex) === 0;\n }\n\n static checkAllColumnsHidden(columns, userColumnWidths) {\n if (userColumnWidths.size === 0) {\n return false;\n }\n return columns.every(column => userColumnWidths.get(column) === 0);\n }\n\n /**\n * Get the bounds the mouse needs to be dragged outside of from an initial selection before scrolling occurs.\n * Taking into account any floating rows that may be covering the viewport.\n * @param {GridMetrics} metrics Grid metrics\n * @param {number} row The row they started dragging in\n * @param {number} column The column they started the drag from\n * @returns Dimensions of the drag area in relation to the canvas they need to drag outside of to start scrolling\n */\n static getScrollDragBounds(metrics, row, column) {\n const {\n gridX,\n gridY,\n width,\n height,\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n floatingLeftWidth,\n floatingRightWidth,\n floatingTopHeight,\n floatingBottomHeight,\n columnCount,\n rowCount,\n } = metrics;\n let x = gridX;\n let y = gridY;\n let x2 = width;\n let y2 = height;\n if (column != null) {\n if (column > floatingLeftColumnCount) {\n x += floatingLeftWidth;\n }\n if (column < columnCount - floatingRightColumnCount) {\n x2 -= floatingRightWidth;\n }\n }\n\n if (row != null) {\n if (row > floatingTopRowCount) {\n y += floatingTopHeight;\n }\n if (row < rowCount - floatingBottomRowCount) {\n y2 -= floatingBottomHeight;\n }\n }\n return { x, y, x2, y2 };\n }\n\n /**\n * Converts the delta coordinates from the provided wheel event to pixels\n * Different platforms have different ways of providing the delta so this normalizes it\n * @param {WheelEvent} wheelEvent The mouse wheel event to get the scrolling delta for\n * @param {number?} pageWidth The width of the page that is scrolling\n * @param {number?} pageHeight The height of the page that is scrolling\n * @param {number?} lineWidth The width of the line scrolling in line mode\n * @param {number?} lineHeight The height of the line scrolling in line mode\n * @returns {{deltaX:number, deltaY: number}} The delta coordinates normalized to pixels\n */\n static getScrollDelta(\n wheelEvent,\n pageWidth = 1024,\n pageHeight = 768,\n lineWidth = 20,\n lineHeight = 20\n ) {\n let { deltaX, deltaY } = wheelEvent;\n\n // Flip scroll direction if shiftKey is held on windows/linux.\n // On mac, deltaX/Y values are switched at the event level when shiftKey=true.\n // Guard on strictly Y only changing, to ignore trackpad diagonal motion,\n // through that guard may not be necessary, but it is difficult to determine for\n // all platforms/browser/scroll method combos.\n if (\n !GridUtils.isMacPlatform() &&\n wheelEvent.shiftKey &&\n wheelEvent.deltaX === 0 &&\n wheelEvent.deltaY !== 0\n ) {\n deltaX = wheelEvent.deltaY;\n deltaY = wheelEvent.deltaX;\n }\n\n // Normalize other deltaMode values to pixel units\n // deltaMode 0, is already in pixel units\n if (wheelEvent?.deltaMode === WheelEvent.DOM_DELTA_PAGE) {\n // Users can set OS to be in deltaMode page\n // scrolly by page units as pixels\n deltaX *= pageWidth;\n deltaY *= pageHeight;\n } else if (wheelEvent?.deltaMode === WheelEvent.DOM_DELTA_LINE) {\n // Firefox reports deltaMode line\n // Normalize distance travelled between browsers\n // but remain ~platform/browser combo consistent\n if (GridUtils.isMacPlatform()) {\n // for mac treat lines as a standard row height\n // on mac, firefox travels less distance then chrome per tick\n deltaX = Math.round(deltaX * lineWidth);\n deltaY = Math.round(deltaY * lineHeight);\n } else {\n // for windows convert to pixels using the same method as chrome\n // chrome goes 100 per 3 lines, and firefox would go 102 per 3 (17 lineheight * 3 lines * 2)\n // make the behaviour the same between as it's close enough\n deltaX = Math.round(deltaX * this.PIXELS_PER_LINE);\n deltaY = Math.round(deltaY * this.PIXELS_PER_LINE);\n }\n }\n\n return { deltaX, deltaY };\n }\n}\n\nexport default GridUtils;\n"],"file":"GridUtils.js"}
@@ -1,4 +1,4 @@
1
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
1
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
2
2
 
3
3
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
4
4
 
@@ -1,6 +1,6 @@
1
1
  export default GridColumnSeparatorMouseHandler;
2
2
  declare class GridColumnSeparatorMouseHandler extends GridSeparatorMouseHandler {
3
- static getColumnSeparatorIndex(gridPoint: any, grid: any, checkAllowResize?: boolean): any;
3
+ static getColumnSeparatorIndex(gridPoint: any, grid: any, checkAllowResize?: boolean): number | null;
4
4
  }
5
5
  import GridSeparatorMouseHandler from "./GridSeparatorMouseHandler";
6
6
  //# sourceMappingURL=GridColumnSeparatorMouseHandler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GridColumnSeparatorMouseHandler.d.ts","sourceRoot":"","sources":["../../src/mouse-handlers/GridColumnSeparatorMouseHandler.js"],"names":[],"mappings":";AAIA;IACE,2FAUC;CA4CF"}
1
+ {"version":3,"file":"GridColumnSeparatorMouseHandler.d.ts","sourceRoot":"","sources":["../../src/mouse-handlers/GridColumnSeparatorMouseHandler.js"],"names":[],"mappings":";AAIA;IACE,qGAUC;CA4CF"}