@deephaven/grid 0.103.1-beta.2 → 0.104.1-beta.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.
@@ -1 +1 @@
1
- {"version":3,"file":"Grid.d.ts","sourceRoot":"","sources":["../src/Grid.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Grid.d.ts","sourceRoot":"","sources":["../src/Grid.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAEZ,aAAa,EACb,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAKf,OAAO,oBAAoB,EAAE,EAC3B,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,4BAA4B,EAClC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,gBAAgB,MAAM,oBAAoB,CAAC;AACvD,OAAkB,EAAE,KAAK,SAAS,IAAI,aAAa,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,SAAS,EAAE,EAChB,KAAK,cAAc,EACnB,mBAAmB,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAkB,EAChB,KAAK,SAAS,EAEd,KAAK,KAAK,EACX,MAAM,aAAa,CAAC;AACrB,OAAO,EAWL,KAAK,aAAa,EAEnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,iBAAiB,EACvB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAS3C,OAAO,EACL,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,WAAW,MAAM,eAAe,CAAC;AAU7C,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAClF,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,6BAA6B,EACnC,MAAM,qBAAqB,CAAC;AAU7B,MAAM,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,YAAY,GAAG;IAEjD,QAAQ,CAAC,EAAE,SAAS,CAAC;IAGrB,aAAa,CAAC,EAAE,gCAAgC,CAAC;IAIjD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IAGxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IAGzB,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;IAGxC,KAAK,EAAE,SAAS,CAAC;IAGjB,WAAW,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IACpC,aAAa,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAG5C,YAAY,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IACxC,SAAS,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAGrC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IAG7B,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,KAAK,IAAI,CAAC;IAG5D,qBAAqB,CAAC,EAAE,CAAC,YAAY,EAAE,SAAS,aAAa,EAAE,KAAK,IAAI,CAAC;IACzE,kBAAkB,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,aAAa,EAAE,KAAK,IAAI,CAAC;IAGnE,oBAAoB,CAAC,EAAE,CAAC,YAAY,EAAE,SAAS,aAAa,EAAE,KAAK,IAAI,CAAC;IACxE,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,aAAa,EAAE,KAAK,IAAI,CAAC;IAGlE,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAI/C,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAGxC,QAAQ,CAAC,EAAE,YAAY,CAAC;IAIxB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAExC,KAAK,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IAEtB,GAAG,EAAE,YAAY,CAAC;IAClB,IAAI,EAAE,YAAY,CAAC;IAGnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IAGnB,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,WAAW,EAAE,YAAY,GAAG,IAAI,CAAC;IAGjC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAIjC,uBAAuB,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9C,oBAAoB,EAAE,aAAa,GAAG,IAAI,CAAC;IAG3C,6BAA6B,EAAE,OAAO,CAAC;IACvC,2BAA2B,EAAE,OAAO,CAAC;IAGrC,UAAU,EAAE,OAAO,CAAC;IAGpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAGtB,YAAY,EAAE,SAAS,aAAa,EAAE,CAAC;IACvC,SAAS,EAAE,SAAS,aAAa,EAAE,CAAC;IAGpC,SAAS,EAAE,YAAY,GAAG,IAAI,CAAC;IAC/B,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,iBAAiB,EAAE,YAAY,GAAG,IAAI,CAAC;IACvC,oBAAoB,EAAE,YAAY,GAAG,IAAI,CAAC;IAC1C,eAAe,EAAE,YAAY,GAAG,IAAI,CAAC;IACrC,kBAAkB,EAAE,YAAY,GAAG,IAAI,CAAC;IAKxC,cAAc,EAAE,SAAS,SAAS,EAAE,CAAC;IACrC,kBAAkB,EAAE,SAAS,SAAS,EAAE,CAAC;IAGzC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAItB,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAGhC,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IAExB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,cAAM,IAAK,SAAQ,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC;IACpD,MAAM,CAAC,WAAW,wCAAgB;IAElC,MAAM,CAAC,YAAY;uBACkB,gCAAgC;;;;;qBAKvC,SAAS,UAAU,EAAE;uBACnB,SAAS,gBAAgB,EAAE;sBAC5B,SAAS,aAAa,EAAE;mBAC3B,SAAS,aAAa,EAAE;uBACrC,IAAI;kCACO,IAAI;gDACY,SAAS,aAAa,EAAE,KAAG,IAAI;oCAE7C,IAAI;kCACN,IAAI;iCACL,IAAI;iCACF,WAAW,KAAG,IAAI;gCACnB,KAAK,KAAG,IAAI;uBAKf,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;eAIvC,OAAO,CAAC,aAAa,CAAC;MAC3B;IAIF,MAAM,CAAC,aAAa,SAAW;IAE/B,MAAM,CAAC,WAAW,SAAQ;IAE1B,MAAM,CAAC,QAAQ,iBAEG,OAAO,CAAC,aAAa,CAAC,aACzB,OAAO,CAAC,aAAa,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAMnC;IAEF;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,wBAAwB,GAAG,MAAM;IAmB1D;;;;OAIG;IACH,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI;IAM/D,QAAQ,EAAE,YAAY,CAAC;IAEvB,gBAAgB,EAAE,oBAAoB,CAAC;IAEvC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAEjC,aAAa,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAG/C,aAAa,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;IAGzC,cAAc,EAAE,cAAc,CAAC;IAG/B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAG9B,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAEhC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAE5B,WAAW,EAAE,eAAe,CAAC;IAM7B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9B,SAAS,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,CAAC;IAEhD,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;IAEnC,aAAa,EAAE,SAAS,gBAAgB,EAAE,CAAC;gBAI/B,KAAK,EAAE,SAAS;IAsI5B,iBAAiB,IAAI,IAAI;IA0BzB,kBAAkB,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IA0FpE,oBAAoB,IAAI,IAAI;IAsB5B,QAAQ,IAAI,aAAa;IAKzB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS;IASvD,kBAAkB,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,SAAS;IAM3D,cAAc,CAAC,KAAK,sBAAa,GAAG,eAAe;IAwCnD,oBAAoB,gBAAyB,SAAS,UAAU,EAAE,kBAEhE;IAEF,cAAc,IAAI,SAAS,UAAU,EAAE;IAKvC,sBAAsB,kBACJ,SAAS,gBAAgB,EAAE,KAAG,SAAS,gBAAgB,EAAE,CAIzE;IAEF,gBAAgB,IAAI,SAAS,gBAAgB,EAAE;IAK/C;;;;OAIG;IACH,cAAc,CAAC,WAAW,EAAE,YAAY,GAAG,UAAU;IAQrD;;;;OAIG;IACH,WAAW,CAAC,QAAQ,EAAE,YAAY,GAAG,UAAU;IAQ/C;;;;OAIG;IACH,iBAAiB,CAAC,GAAG,EAAE,YAAY,EAAE,iBAAiB,UAAQ,GAAG,IAAI;IAoBrE;;OAEG;IACH,cAAc,IAAI,IAAI;IAQtB;;OAEG;IACH,aAAa,IAAI,IAAI;IAWrB;;;;OAIG;IACH,iBAAiB,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,GAAG,IAAI;IA+BzD,WAAW,IAAI,IAAI;IASnB,mBAAmB,IAAI,IAAI;IAiB3B,YAAY,IAAI,IAAI;IAoBpB,OAAO,CAAC,iBAAiB;IA8BzB,kBAAkB,IAAI,IAAI;IAY1B;;OAEG;IACH,iBAAiB,IAAI,IAAI;IA+BzB,aAAa,CAAC,KAAK,sBAAa,GAAG,WAAW;IAW9C;;;OAGG;IACH,oBAAoB,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAUhD;;;OAGG;IACH,iBAAiB,IAAI,OAAO;IAmB5B;;OAEG;IACH,mBAAmB,IAAI,IAAI;IAK3B,6CAA6C;IAC7C,kBAAkB,IAAI,IAAI;IAS1B,+BAA+B;IAC/B,iBAAiB,IAAI,SAAS,SAAS,EAAE;IAKzC;;;;OAIG;IACH,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI;IAWjE;;;;;;OAMG;IACH,aAAa,CACX,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,cAAc,EACnB,eAAe,UAAQ,EACvB,qBAAqB,UAAQ,GAC5B,IAAI;IAsFP;;;;;OAKG;IACH,eAAe,IAAI,IAAI;IA2EvB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IA4BrC;;OAEG;IACH,SAAS,IAAI,IAAI;IAiBjB;;;;;OAKG;IACH,UAAU,CACR,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,OAAO,GACvB,IAAI;IAkBP;;;OAGG;IACH,qBAAqB,CAAC,SAAS,sBAAqC,GAAG,IAAI;IA6C3E;;;;;;;OAOG;IACH,oBAAoB,CAClB,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,cAAc,EACnB,eAAe,UAAQ,EACvB,gBAAgB,UAAO,EACvB,qBAAqB,UAAQ,GAC5B,IAAI;IAYP;;;;;OAKG;IACH,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI;IAgCjE;;;;;OAKG;IACH,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,EAAE,WAAW,UAAQ,GAAG,IAAI;IAoBtE;;;;;;;;OAQG;IACH,YAAY,CACV,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,YAAY,EACjB,WAAW,UAAQ,EACnB,cAAc,CAAC,EAAE,6BAA6B,EAC9C,KAAK,CAAC,EAAE,MAAM,GACb,IAAI;IAqBP;;;;;;OAMG;IACH,cAAc,CACZ,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,MAAM,GACZ,OAAO;IAWV;;;;;OAKG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqF3D;;;;;;OAMG;IACH,eAAe,CACb,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,MAAM,GACZ,OAAO;IAaV;;;;OAIG;IACH,iBAAiB,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAcpE;;;;;OAKG;IACH,UAAU,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO;IAoB5D,iBAAiB,CAAC,MAAM,GAAE,MAAM,GAAG,IAAW,GAAG,IAAI;IAYrD,oBAAoB,IAAI,IAAI;IAQ5B,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,GAAG,IAAI;IAU7C,aAAa,IAAI,IAAI;IAOrB;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAalB;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;OAGG;IACH,SAAS,IAAI,OAAO;IAIpB;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,GAAG,IAAI;IAgB1C;;;OAGG;IACH,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,GAAG,IAAI;IAchD;;;;OAIG;IACH,sBAAsB,CACpB,YAAY,EAAE,0BAA0B,EACxC,KAAK,EAAE,iBAAiB,GACvB,IAAI;IAqBP,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAI7C,WAAW,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAI3C;;;;;;OAMG;IACH,mBAAmB,CACjB,YAAY,EAAE,4BAA4B,EAC1C,KAAK,EAAE,cAAc,EACrB,iBAAiB,UAAO,EACxB,mBAAmB,UAAQ,GAC1B,IAAI;IAiCP,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,GAAG,IAAI;IAa9C,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,GAAG,IAAI;IAIhD,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,GAAG,IAAI;IAI9C,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,GAAG,IAAI;IAK/C,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAOxC,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAetC,YAAY,IAAI,IAAI;IAepB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IA6LpC;;OAEG;IACH,oBAAoB,IAAI,IAAI;IAK5B;;;OAGG;IACH,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAiBzC;;;;OAIG;IACH,oBAAoB,CAClB,KAAK,EAAE,MAAM,EACb,EACE,SAAoC,EACpC,SAAiB,GAClB,GAAE;QAAE,SAAS,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAO,GACtE,IAAI;IA6BP,gBAAgB,IAAI,SAAS;IAgF7B;;;OAGG;IACH,iBAAiB,IAAI,eAAe;IAwDpC,MAAM,IAAI,SAAS;CA4BpB;AAED,eAAe,IAAI,CAAC"}
package/dist/Grid.js CHANGED
@@ -1269,11 +1269,15 @@ class Grid extends PureComponent {
1269
1269
  }
1270
1270
  var edits = [];
1271
1271
  _ranges.forEach(range => {
1272
+ var _range$startColumn3;
1273
+ if (((_range$startColumn3 = range.startColumn) !== null && _range$startColumn3 !== void 0 ? _range$startColumn3 : 0) + tableWidth > columnCount) {
1274
+ throw new PasteError('Pasted content would overflow columns.');
1275
+ }
1272
1276
  for (var x = 0; x < tableWidth; x += 1) {
1273
1277
  for (var y = 0; y < tableHeight; y += 1) {
1274
- var _range$startColumn3, _range$startRow3;
1278
+ var _range$startColumn4, _range$startRow3;
1275
1279
  edits.push({
1276
- column: ((_range$startColumn3 = range.startColumn) !== null && _range$startColumn3 !== void 0 ? _range$startColumn3 : 0) + x,
1280
+ column: ((_range$startColumn4 = range.startColumn) !== null && _range$startColumn4 !== void 0 ? _range$startColumn4 : 0) + x,
1277
1281
  row: ((_range$startRow3 = range.startRow) !== null && _range$startRow3 !== void 0 ? _range$startRow3 : 0) + y,
1278
1282
  text: value[y][x]
1279
1283
  });
package/dist/Grid.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Grid.js","names":["React","PureComponent","classNames","memoize","clamp","assertNotNull","EMPTY_ARRAY","getChangedKeys","GridMetricCalculator","GridTheme","GridRange","SELECTION_DIRECTION","GridRenderer","GridUtils","isLinkToken","GridSelectionMouseHandler","GridColumnMoveMouseHandler","GridColumnSeparatorMouseHandler","GridHorizontalScrollBarMouseHandler","GridRowMoveMouseHandler","GridRowSeparatorMouseHandler","GridRowTreeMouseHandler","GridScrollBarCornerMouseHandler","GridVerticalScrollBarMouseHandler","EditMouseHandler","GridTokenMouseHandler","EditKeyHandler","PasteKeyHandler","SelectionKeyHandler","TreeKeyHandler","CellInputField","PasteError","isExpandableGridModel","assertIsEditableGridModel","isEditableGridModel","assertIsDefined","ThemeContext","jsx","_jsx","jsxs","_jsxs","Grid","getScale","context","_ref","_ref2","_ref3","_ref4","_legacyContext$webkit","devicePixelRatio","window","legacyContext","backingStorePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","getCursorClassName","cursor","concat","constructor","props","_defineProperty","keyHandlers","sort","a","b","order","mouseHandlers","handleClick","bind","handleContextMenu","handleEditCellCancel","handleEditCellChange","handleEditCellCommit","handleDoubleClick","notifyKeyboardHandlers","handleKeyDown","handleKeyUp","handleMouseDown","handleMouseDrag","handleMouseMove","handleMouseLeave","handleMouseUp","handleResize","handleWheel","getSelectedRanges","isStuckToBottom","isStuckToRight","metricCalculator","movedColumns","movedRows","renderer","canvas","canvasContext","canvasWrapper","createRef","resizeObserver","ResizeObserver","animationFrame","prevMetrics","metrics","renderState","documentCursor","dragTimer","state","top","left","topOffset","leftOffset","draggingColumn","draggingRow","draggingRowOffset","draggingColumnSeparator","draggingRowSeparator","isDraggingHorizontalScrollBar","isDraggingVerticalScrollBar","isDragging","mouseX","mouseY","cursorRow","cursorColumn","selectionStartRow","selectionStartColumn","selectionEndRow","selectionEndColumn","selectedRanges","lastSelectedRanges","editingCell","componentDidMount","_this$canvas","initContext","addEventListener","passive","current","observe","updateCanvas","scrollToBottom","scrollToRight","componentDidUpdate","prevProps","prevState","renderError","changedProps","changedState","length","isStickyBottom","isStickyRight","onMovedColumnsChanged","onMoveColumnComplete","onMovedRowsChanged","onMoveRowComplete","prevIsStickyBottom","prevIsStickyRight","prevPropMovedColumns","prevPropMovedRows","prevStateMovedColumns","prevStateMovedRows","currentStateMovedColumns","currentStateMovedRows","setState","updateMetrics","requestUpdateCanvas","checkStickyScroll","validateSelection","checkSelectionChange","componentWillUnmount","_this$canvas2","cancelAnimationFrame","removeEventListener","disconnect","stopDragTimer","getTheme","theme","getGridPointFromEvent","event","rect","getBoundingClientRect","x","clientX","y","clientY","getGridPointFromXY","Error","getMetricState","arguments","undefined","model","stateOverride","width","clientWidth","height","clientHeight","_objectSpread","getKeyHandlers","getCachedKeyHandlers","getMouseHandlers","getCachedMouseHandlers","getModelColumn","columnIndex","_this$metrics","_this$metrics$modelCo","modelIndex","modelColumns","get","getModelRow","rowIndex","_this$metrics2","_this$metrics2$modelR","modelRows","toggleRowExpanded","row","expandDescendants","modelRow","isRowExpandable","setRowExpanded","isRowExpanded","clearSelectedRanges","commitSelection","moveCursorToPosition","bottomVisible","rowCount","lastTop","rightVisible","columnCount","lastLeft","setSelectedRanges","gridRanges","range","boundedRange","newCursorRow","newCursorColumn","containsCell","column","startCell","startColumn","startRow","endColumn","endRow","canvasOptions","getContext","requestAnimationFrame","e","updateCanvasScale","updateRenderState","configureContext","onViewChanged","drawCanvas","Math","floor","parseFloat","style","scale","updateScrollBounds","prevRowCount","prevColumnCount","prevHeight","prevWidth","metricState","getMetrics","oldSelectedRanges","onSelectionChanged","i","trimSelectedRanges","slice","beginSelection","moveSelection","extendSelection","maximizePreviousRange","autoSelectRow","autoSelectColumn","lastSelectedRange","right","bottom","_lastSelectedRange$st","_lastSelectedRange$st2","_lastSelectedRange$en","_lastSelectedRange$en2","min","max","selectedRange","makeNormalized","equals","newRanges","selectedColumn","selectedRow","push","cellCount","rangeArraysEqual","newSelectedRanges","lastRange","contains","remainder","subtract","pop","splice","consolidate","nextCursor","nextCell","boundedRanges","setFocusRow","focusedRow","_userRowHeights$get","gridY","userRowHeights","rowHeight","tableHeight","halfViewportHeight","round","newTop","getLastTop","selectAll","moveCursor","deltaColumn","deltaRow","moveCursorInDirection","direction","DOWN","ranges","makeCell","_gridRange$nextCell","gridRange","moveViewToCell","keepCursorInView","topVisible","leftVisible","isFloatingRow","getTopForTopVisible","getTopForBottomVisible","isFloatingColumn","getLeftForLeftVisible","getLeftForRightVisible","setViewState","viewState","forceUpdate","hasVerticalBar","hasHorizontalBar","startEditing","isQuickEdit","selectionRange","value","modelColumn","cell","editValueForCell","isValidForCell","pasteValue","_this","_asyncToGenerator","isEditable","every","isEditableRange","edits","modelRanges","getModelRanges","forEachCell","text","setValues","tableWidth","_range$startColumn","_range$startRow","map","_range$startColumn2","_range$startRow2","forEach","_range$startColumn3","_range$startRow3","onError","setValueForCell","setValueForRanges","isSelected","_selectedRange$endRow","_selectedRange$endCol","rowSelected","columnSelected","addDocumentCursor","document","documentElement","classList","remove","add","removeDocumentCursor","startDragTimer","mouseEvent","MouseEvent","nativeEvent","setTimeout","dragTimeout","clearTimeout","save","restore","focus","_this$canvas3","isFocused","activeElement","_this$canvas4","gridPoint","mouseHandler","onClick","stopPropagation","preventDefault","onContextMenu","functionName","keyHandler","result","_options$stopPropagat","_options$preventDefau","options","notifyMouseHandlers","updateCoordinates","addCursorToDocument","_options$stopPropagat2","_options$preventDefau2","button","defaultPrevented","scrollableContentWidth","scrollableViewportWidth","scrollableContentHeight","scrollableViewportHeight","deltaX","deltaY","getScrollDelta","barWidth","barHeight","maxLeftOffset","_metrics$allColumnWid","columnWidth","allColumnWidths","getVisibleColumnWidth","scrollSnapToColumn","_metrics$allColumnWid2","abs","maxTopOffset","_metrics$allRowHeight","allRowHeights","getVisibleRowHeight","scrollSnapToRow","_metrics$allRowHeight2","_ref5","fillRange","renderInputField","scrollX","gridX","allColumnXs","allRowYs","activeCellSelectionBorderWidth","w","h","leftBorderOffset","wrapperStyle","position","opacity","inputStyle","textAlign","textAlignForCell","isValid","children","className","error","onCancel","onChange","onDone","render","ref","onDoubleClick","onKeyDown","onKeyUp","onMouseDown","onMouseMove","onMouseLeave","tabIndex","alpha","moveOperations","onTokenClicked","token","open","href","contextTheme","userTheme"],"sources":["../src/Grid.tsx"],"sourcesContent":["/* eslint react/no-did-update-set-state: \"off\" */\nimport React, {\n type CSSProperties,\n PureComponent,\n type ReactNode,\n type RefObject,\n} from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport clamp from 'lodash.clamp';\nimport { assertNotNull, EMPTY_ARRAY, getChangedKeys } from '@deephaven/utils';\nimport GridMetricCalculator, {\n type GridMetricState,\n} from './GridMetricCalculator';\nimport type GridModel from './GridModel';\nimport {\n type GridMouseEvent,\n type GridMouseHandlerFunctionName,\n} from './GridMouseHandler';\nimport type GridMouseHandler from './GridMouseHandler';\nimport GridTheme, { type GridTheme as GridThemeType } from './GridTheme';\nimport GridRange, {\n type GridRangeIndex,\n SELECTION_DIRECTION,\n} from './GridRange';\nimport GridRenderer from './GridRenderer';\nimport GridUtils, {\n type GridPoint,\n isLinkToken,\n type Token,\n} from './GridUtils';\nimport {\n GridSelectionMouseHandler,\n GridColumnMoveMouseHandler,\n GridColumnSeparatorMouseHandler,\n GridHorizontalScrollBarMouseHandler,\n GridRowMoveMouseHandler,\n GridRowSeparatorMouseHandler,\n GridRowTreeMouseHandler,\n GridScrollBarCornerMouseHandler,\n GridVerticalScrollBarMouseHandler,\n EditMouseHandler,\n type GridSeparator,\n GridTokenMouseHandler,\n} from './mouse-handlers';\nimport './Grid.scss';\nimport {\n type GridKeyHandlerFunctionName,\n type GridKeyboardEvent,\n} from './KeyHandler';\nimport type KeyHandler from './KeyHandler';\nimport {\n EditKeyHandler,\n PasteKeyHandler,\n SelectionKeyHandler,\n TreeKeyHandler,\n} from './key-handlers';\nimport CellInputField from './CellInputField';\nimport PasteError from './errors/PasteError';\nimport {\n type Coordinate,\n type ModelIndex,\n type MoveOperation,\n type VisibleIndex,\n} from './GridMetrics';\nimport type GridMetrics from './GridMetrics';\nimport { isExpandableGridModel } from './ExpandableGridModel';\nimport {\n assertIsEditableGridModel,\n type EditOperation,\n isEditableGridModel,\n} from './EditableGridModel';\nimport { type EventHandlerResultOptions } from './EventHandlerResult';\nimport { assertIsDefined } from './errors';\nimport ThemeContext from './ThemeContext';\nimport { type DraggingColumn } from './mouse-handlers/GridColumnMoveMouseHandler';\nimport {\n type EditingCell,\n type GridRenderState,\n type EditingCellTextSelectionRange,\n} from './GridRendererTypes';\n\ntype LegacyCanvasRenderingContext2D = CanvasRenderingContext2D & {\n webkitBackingStorePixelRatio?: number;\n mozBackingStorePixelRatio?: number;\n msBackingStorePixelRatio?: number;\n oBackingStorePixelRatio?: number;\n backingStorePixelRatio?: number;\n};\n\nexport type GridProps = typeof Grid.defaultProps & {\n // Children to render in the grid\n children?: ReactNode;\n\n // Options to set on the canvas\n canvasOptions?: CanvasRenderingContext2DSettings;\n\n // Whether the grid should stick to the bottom or the right once scrolled to the end\n // Only matters with ticking grids\n isStickyBottom?: boolean;\n isStickyRight?: boolean;\n\n // Whether the grid is currently stuck to the bottom or the right\n isStuckToBottom?: boolean;\n isStuckToRight?: boolean;\n\n // Calculate all the metrics required for drawing the grid\n metricCalculator?: GridMetricCalculator;\n\n // The model to pull data from\n model: GridModel;\n\n // Optional key and mouse handlers\n keyHandlers?: readonly KeyHandler[];\n mouseHandlers?: readonly GridMouseHandler[];\n\n // Initial state of moved columns or rows\n movedColumns?: readonly MoveOperation[];\n movedRows?: readonly MoveOperation[];\n\n // Callback for if an error occurs\n onError?: (e: Error) => void;\n\n // Callback when the selection within the grid changes\n onSelectionChanged?: (ranges: readonly GridRange[]) => void;\n\n // Callback when the moved columns or rows have changed\n onMovedColumnsChanged?: (movedColumns: readonly MoveOperation[]) => void;\n onMovedRowsChanged?: (movedRows: readonly MoveOperation[]) => void;\n\n // Callback when a move operation is completed\n onMoveColumnComplete?: (movedColumns: readonly MoveOperation[]) => void;\n onMoveRowComplete?: (movedRows: readonly MoveOperation[]) => void;\n\n // Callback when the viewport has scrolled or changed\n onViewChanged?: (metrics: GridMetrics) => void;\n\n // Callback when a token is clicked\n // eslint-disable-next-line react/no-unused-prop-types\n onTokenClicked?: (token: Token) => void;\n\n // Renderer for the grid canvas\n renderer?: GridRenderer;\n\n // Optional state override to pass in to the metric and render state\n // Can be used to add custom properties as well\n stateOverride?: Record<string, unknown>;\n\n theme?: Partial<GridThemeType>;\n};\n\nexport type GridState = {\n // Top/left visible cell in the grid. Note that it's visible row/column index, not the model index (ie. if columns are re-ordered)\n top: VisibleIndex;\n left: VisibleIndex;\n\n // The scroll offset of the top/left cell. 0,0 means the cell is at the top left\n topOffset: number; // Should be less than the height of the row\n leftOffset: number; // Should be less than the width of the column\n\n // current column/row that user is dragging\n draggingColumn: DraggingColumn | null;\n draggingRow: VisibleIndex | null;\n\n // Offset when dragging a row\n draggingRowOffset: number | null;\n\n // When drawing header separators for resizing\n // Keeps hover style when mouse is in buffer before resize starts\n draggingColumnSeparator: GridSeparator | null;\n draggingRowSeparator: GridSeparator | null;\n\n // Dragging a scroll bar status\n isDraggingHorizontalScrollBar: boolean;\n isDraggingVerticalScrollBar: boolean;\n\n // Anything is performing a drag, for blocking hover rendering\n isDragging: boolean;\n\n // The coordinates of the mouse. May be outside of the canvas\n mouseX: number | null;\n mouseY: number | null;\n\n // Move operations the user has performed on this grids columns/rows\n movedColumns: readonly MoveOperation[];\n movedRows: readonly MoveOperation[];\n\n // Cursor (highlighted cell) location and active selected range\n cursorRow: VisibleIndex | null;\n cursorColumn: VisibleIndex | null;\n selectionStartRow: VisibleIndex | null;\n selectionStartColumn: VisibleIndex | null;\n selectionEndRow: VisibleIndex | null;\n selectionEndColumn: VisibleIndex | null;\n\n // Currently selected ranges and previously selected ranges\n // Store the previously selected ranges to determine if the new selection should\n // deselect again (if it's the same range)\n selectedRanges: readonly GridRange[];\n lastSelectedRanges: readonly GridRange[];\n\n // The mouse cursor style to use when hovering over the grid element\n cursor: string | null;\n\n // { column: number, row: number, selectionRange: [number, number], value: string | null, isQuickEdit?: boolean }\n // The cell that is currently being edited\n editingCell: EditingCell | null;\n\n // Whether we're stuck to the bottom or the right\n isStuckToBottom: boolean;\n isStuckToRight: boolean;\n\n /**\n * Errors thrown during a render animation frame.\n * These are not caught by the grid panel,\n * so we need to throw them in componentDidUpdate\n */\n renderError?: unknown;\n};\n\n/**\n * High performance, extendible, themeable grid component.\n * Architectured to be fast and handle billions of rows/columns by default.\n * The base model does not provide support for sorting, filtering, etc.\n * To get that functionality, extend GridModel/GridRenderer, and add onClick/onContextMenu handlers to implement your own sort.\n *\n * Extend GridModel with your own data model to provide the data for the grid.\n * Extend GridTheme to change the appearance if the grid. See GridTheme for all the settable values.\n * Extend GridMetricCalculator to provide different metrics for the grid, such as column sizing, header sizing, etc.\n * Extend GridRenderer to have complete control over the rendering process. Can override just one method such as drawColumnHeader, or override the whole drawCanvas process.\n *\n * Add an onViewChanged callback to page in/out data as user moves around the grid\n * Can also add onClick and onContextMenu handlers to add custom functionality and menus.\n */\nclass Grid extends PureComponent<GridProps, GridState> {\n static contextType = ThemeContext;\n\n static defaultProps = {\n canvasOptions: { alpha: false } as CanvasRenderingContext2DSettings,\n isStickyBottom: false,\n isStickyRight: false,\n isStuckToBottom: false,\n isStuckToRight: false,\n keyHandlers: EMPTY_ARRAY as readonly KeyHandler[],\n mouseHandlers: EMPTY_ARRAY as readonly GridMouseHandler[],\n movedColumns: EMPTY_ARRAY as readonly MoveOperation[],\n movedRows: EMPTY_ARRAY as readonly MoveOperation[],\n onError: (): void => undefined,\n onSelectionChanged: (): void => undefined,\n onMovedColumnsChanged: (moveOperations: readonly MoveOperation[]): void =>\n undefined,\n onMoveColumnComplete: (): void => undefined,\n onMovedRowsChanged: (): void => undefined,\n onMoveRowComplete: (): void => undefined,\n onViewChanged: (metrics: GridMetrics): void => undefined,\n onTokenClicked: (token: Token): void => {\n if (isLinkToken(token)) {\n window.open(token.href, '_blank', 'noopener,noreferrer');\n }\n },\n stateOverride: {} as Record<string, unknown>,\n theme: {\n autoSelectColumn: false,\n autoSelectRow: false,\n } as Partial<GridThemeType>,\n };\n\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 pixelsPerLine = 100 / 3;\n\n static dragTimeout = 1000;\n\n static getTheme = memoize(\n (\n contextTheme: Partial<GridThemeType>,\n userTheme: Partial<GridThemeType>\n ) => ({\n ...GridTheme,\n ...contextTheme,\n ...userTheme,\n })\n );\n\n /**\n * On some devices there may be different scaling required for high DPI. Get the scale required for the canvas.\n * @param context The canvas context\n * @returns The scale to use\n */\n static getScale(context: CanvasRenderingContext2D): number {\n const devicePixelRatio = window.devicePixelRatio || 1;\n\n // backingStorePixelRatio is deprecated, but check it just in case\n const legacyContext = context as LegacyCanvasRenderingContext2D;\n\n const backingStorePixelRatio =\n // Not worth converting to a massive if structure\n // Converting would reduce readability and maintainability\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n legacyContext.webkitBackingStorePixelRatio ??\n legacyContext.mozBackingStorePixelRatio ??\n legacyContext.msBackingStorePixelRatio ??\n legacyContext.oBackingStorePixelRatio ??\n legacyContext.backingStorePixelRatio ??\n 1;\n return devicePixelRatio / backingStorePixelRatio;\n }\n\n /**\n * Get the class name from the cursor provided\n * @param cursor The grid cursor to use\n * @returns Class name with the grid-cursor prefix or null if no cursor provided\n */\n static getCursorClassName(cursor: string | null): string | null {\n return cursor != null && cursor !== '' ? `grid-cursor-${cursor}` : null;\n }\n\n // Need to disable react/sort-comp so I can put the fields here\n /* eslint-disable react/sort-comp */\n renderer: GridRenderer;\n\n metricCalculator: GridMetricCalculator;\n\n canvas: HTMLCanvasElement | null;\n\n canvasContext: CanvasRenderingContext2D | null;\n\n // The wrapper element for the canvas, used for sizing\n canvasWrapper: RefObject<HTMLDivElement>;\n\n // Listen for resizing of the element and update the canvas appropriately\n resizeObserver: ResizeObserver;\n\n // We draw the canvas on the next animation frame, keep track of the next one\n animationFrame: number | null;\n\n // Keep track of previous metrics and new metrics for comparison\n prevMetrics: GridMetrics | null;\n\n metrics: GridMetrics | null;\n\n renderState: GridRenderState;\n\n // Track the cursor that is currently added to the document\n // Add to document so that when dragging the cursor stays, even if mouse leaves the canvas\n // Note: on document, not body so that cursor styling can be combined with\n // blocked pointer events that would otherwise prevent cursor styling from showing\n documentCursor: string | null;\n\n dragTimer: ReturnType<typeof setTimeout> | null;\n\n keyHandlers: readonly KeyHandler[];\n\n mouseHandlers: readonly GridMouseHandler[];\n\n /* eslint-enable react/sort-comp */\n\n constructor(props: GridProps) {\n super(props);\n\n this.handleClick = this.handleClick.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n this.handleEditCellCancel = this.handleEditCellCancel.bind(this);\n this.handleEditCellChange = this.handleEditCellChange.bind(this);\n this.handleEditCellCommit = this.handleEditCellCommit.bind(this);\n this.handleDoubleClick = this.handleDoubleClick.bind(this);\n this.notifyKeyboardHandlers = this.notifyKeyboardHandlers.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleKeyUp = this.handleKeyUp.bind(this);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseDrag = this.handleMouseDrag.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleMouseUp = this.handleMouseUp.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleWheel = this.handleWheel.bind(this);\n this.getSelectedRanges = this.getSelectedRanges.bind(this);\n\n const {\n isStuckToBottom,\n isStuckToRight,\n metricCalculator,\n movedColumns,\n movedRows,\n renderer,\n } = props;\n\n this.renderer = renderer || new GridRenderer();\n this.metricCalculator = metricCalculator || new GridMetricCalculator();\n\n this.canvas = null;\n this.canvasContext = null;\n this.canvasWrapper = React.createRef();\n this.resizeObserver = new window.ResizeObserver(this.handleResize);\n this.animationFrame = null;\n\n this.prevMetrics = null;\n this.metrics = null;\n\n this.renderState = {} as GridRenderState;\n\n // Track the cursor that is currently added to the document\n // Add to document so that when dragging the cursor stays, even if mouse leaves the canvas\n // Note: on document, not body so that cursor styling can be combined with\n // blocked pointer events that would otherwise prevent cursor styling from showing\n this.documentCursor = null;\n\n this.dragTimer = null;\n\n // specify handler ordering, such that any extensions can insert handlers in between\n this.keyHandlers = [\n new EditKeyHandler(400),\n new PasteKeyHandler(450),\n new SelectionKeyHandler(500),\n new TreeKeyHandler(900),\n ];\n this.mouseHandlers = [\n new GridRowSeparatorMouseHandler(100),\n new GridColumnSeparatorMouseHandler(200),\n new GridRowMoveMouseHandler(300),\n new GridColumnMoveMouseHandler(400),\n new EditMouseHandler(450),\n new GridVerticalScrollBarMouseHandler(500),\n new GridHorizontalScrollBarMouseHandler(600),\n new GridScrollBarCornerMouseHandler(700),\n new GridRowTreeMouseHandler(800),\n new GridTokenMouseHandler(875),\n new GridSelectionMouseHandler(900),\n ];\n\n this.state = {\n // Top/left visible cell in the grid. Note that it's visible row/column index, not the model index (ie. if columns are re-ordered)\n top: 0,\n left: 0,\n\n // The scroll offset of the top/left cell. 0,0 means the cell is at the top left\n // Should be less than the width of the column\n topOffset: 0,\n leftOffset: 0,\n\n // current column/row that user is dragging\n draggingColumn: null,\n draggingRow: null,\n\n // Offset when dragging a row\n draggingRowOffset: null,\n\n // When drawing header separators for resizing\n draggingColumnSeparator: null,\n draggingRowSeparator: null,\n\n isDraggingHorizontalScrollBar: false,\n isDraggingVerticalScrollBar: false,\n\n // Anything is performing a drag, for blocking hover rendering\n isDragging: false,\n\n // The coordinates of the mouse. May be outside of the canvas\n mouseX: null,\n mouseY: null,\n\n // Move operations the user has performed on this grids columns/rows\n movedColumns,\n movedRows,\n\n // Cursor (highlighted cell) location and active selected range\n cursorRow: null,\n cursorColumn: null,\n selectionStartRow: null,\n selectionStartColumn: null,\n selectionEndRow: null,\n selectionEndColumn: null,\n\n // Currently selected ranges and previously selected ranges\n // Store the previously selected ranges to determine if the new selection should\n // deselect again (if it's the same range)\n selectedRanges: EMPTY_ARRAY,\n lastSelectedRanges: EMPTY_ARRAY,\n\n // The mouse cursor style to use when hovering over the grid element\n cursor: null,\n\n // { column: number, row: number, selectionRange: [number, number], value: string | null, isQuickEdit?: boolean }\n // The cell that is currently being edited\n editingCell: null,\n\n isStuckToBottom,\n isStuckToRight,\n };\n }\n\n componentDidMount(): void {\n this.initContext();\n\n // Need to explicitly add wheel event to canvas so we can preventDefault/avoid passive listener issue\n // Otherwise React attaches listener at doc level and you can't prevent default\n // https://github.com/facebook/react/issues/14856\n this.canvas?.addEventListener('wheel', this.handleWheel, {\n passive: false,\n });\n if (this.canvasWrapper.current != null) {\n this.resizeObserver.observe(this.canvasWrapper.current);\n }\n\n this.updateCanvas();\n\n // apply on mount, so that it works with a static model\n // https://github.com/deephaven/web-client-ui/issues/581\n const { isStuckToBottom, isStuckToRight } = this.props;\n if (isStuckToBottom) {\n this.scrollToBottom();\n }\n if (isStuckToRight) {\n this.scrollToRight();\n }\n }\n\n componentDidUpdate(prevProps: GridProps, prevState: GridState): void {\n const { renderError } = this.state;\n\n // Render errors mean we can't recover\n if (renderError != null) {\n throw renderError;\n }\n\n const changedProps = getChangedKeys(prevProps, this.props);\n const changedState = getChangedKeys(prevState, this.state);\n // We don't need to bother re-checking any of the metrics if only the children have changed\n if (\n changedProps.length === 1 &&\n changedProps[0] === 'children' &&\n changedState.length === 0\n ) {\n return;\n }\n\n const {\n isStickyBottom,\n isStickyRight,\n movedColumns,\n movedRows,\n onMovedColumnsChanged,\n onMoveColumnComplete,\n onMovedRowsChanged,\n onMoveRowComplete,\n } = this.props;\n\n const {\n isStickyBottom: prevIsStickyBottom,\n isStickyRight: prevIsStickyRight,\n movedColumns: prevPropMovedColumns,\n movedRows: prevPropMovedRows,\n } = prevProps;\n const {\n movedColumns: prevStateMovedColumns,\n movedRows: prevStateMovedRows,\n } = prevState;\n const {\n draggingColumn,\n draggingRow,\n movedColumns: currentStateMovedColumns,\n movedRows: currentStateMovedRows,\n } = this.state;\n\n if (prevPropMovedColumns !== movedColumns) {\n this.setState({ movedColumns });\n }\n\n if (prevPropMovedRows !== movedRows) {\n this.setState({ movedRows });\n }\n\n if (prevStateMovedColumns !== currentStateMovedColumns) {\n onMovedColumnsChanged(currentStateMovedColumns);\n }\n\n if (prevState.draggingColumn != null && draggingColumn == null) {\n onMoveColumnComplete(currentStateMovedColumns);\n }\n\n if (prevStateMovedRows !== currentStateMovedRows) {\n onMovedRowsChanged(currentStateMovedRows);\n }\n\n if (prevState.draggingRow != null && draggingRow == null) {\n onMoveRowComplete(currentStateMovedRows);\n }\n\n if (isStickyBottom !== prevIsStickyBottom) {\n this.setState({ isStuckToBottom: false });\n }\n\n if (isStickyRight !== prevIsStickyRight) {\n this.setState({ isStuckToRight: false });\n }\n\n this.updateMetrics();\n\n this.requestUpdateCanvas();\n\n this.checkStickyScroll();\n\n if (this.validateSelection()) {\n this.checkSelectionChange(prevState);\n }\n }\n\n componentWillUnmount(): void {\n if (this.animationFrame != null) {\n cancelAnimationFrame(this.animationFrame);\n }\n\n this.canvas?.removeEventListener('wheel', this.handleWheel);\n\n window.removeEventListener(\n 'mousemove',\n this.handleMouseDrag as unknown as EventListenerOrEventListenerObject,\n true\n );\n window.removeEventListener(\n 'mouseup',\n this.handleMouseUp as unknown as EventListenerOrEventListenerObject,\n true\n );\n this.resizeObserver.disconnect();\n\n this.stopDragTimer();\n }\n\n getTheme(): GridThemeType {\n const { theme } = this.props;\n return Grid.getTheme(this.context, theme);\n }\n\n getGridPointFromEvent(event: GridMouseEvent): GridPoint {\n assertIsDefined(this.canvas);\n\n const rect = this.canvas.getBoundingClientRect();\n const x = event.clientX - rect.left;\n const y = event.clientY - rect.top;\n return this.getGridPointFromXY(x, y);\n }\n\n getGridPointFromXY(x: Coordinate, y: Coordinate): GridPoint {\n if (!this.metrics) throw new Error('metrics must be set');\n\n return GridUtils.getGridPointFromXY(x, y, this.metrics);\n }\n\n getMetricState(state = this.state): GridMetricState {\n const theme = this.getTheme();\n const { model, stateOverride } = this.props;\n if (!this.canvasContext || !this.canvas) {\n throw new Error('Canvas and context must be defined to get metrics');\n }\n const context = this.canvasContext;\n const width = this.canvas.clientWidth;\n const height = this.canvas.clientHeight;\n const {\n left,\n top,\n leftOffset,\n topOffset,\n movedColumns,\n movedRows,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n draggingColumn,\n } = state;\n\n return {\n left,\n top,\n leftOffset,\n topOffset,\n width,\n height,\n context,\n theme,\n model,\n movedColumns,\n movedRows,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n draggingColumn,\n ...stateOverride,\n };\n }\n\n getCachedKeyHandlers = memoize((keyHandlers: readonly KeyHandler[]) =>\n [...keyHandlers, ...this.keyHandlers].sort((a, b) => a.order - b.order)\n );\n\n getKeyHandlers(): readonly KeyHandler[] {\n const { keyHandlers } = this.props;\n return this.getCachedKeyHandlers(keyHandlers);\n }\n\n getCachedMouseHandlers = memoize(\n (mouseHandlers: readonly GridMouseHandler[]): readonly GridMouseHandler[] =>\n [...mouseHandlers, ...this.mouseHandlers].sort(\n (a, b) => a.order - b.order\n )\n );\n\n getMouseHandlers(): readonly GridMouseHandler[] {\n const { mouseHandlers } = this.props;\n return this.getCachedMouseHandlers(mouseHandlers);\n }\n\n /**\n * Translate from the provided visible index to the model index\n * @param columnIndex The column index to get the model for\n * @returns The model index\n */\n getModelColumn(columnIndex: VisibleIndex): ModelIndex {\n const modelIndex = this.metrics?.modelColumns?.get(columnIndex);\n if (modelIndex === undefined) {\n throw new Error(`Unable to get ModelIndex for column ${columnIndex}`);\n }\n return modelIndex;\n }\n\n /**\n * Translate from the provided visible index to the model index\n * @param rowIndex The row index to get the model for\n * @returns The model index\n */\n getModelRow(rowIndex: VisibleIndex): ModelIndex {\n const modelIndex = this.metrics?.modelRows?.get(rowIndex);\n if (modelIndex === undefined) {\n throw new Error(`Unable to get ModelIndex for row ${rowIndex}`);\n }\n return modelIndex;\n }\n\n /**\n * Toggle a row between expanded and collapsed states\n * @param row The row to toggle expansion for\n * @param expandDescendants True if nested rows should be expanded, false otherwise\n */\n toggleRowExpanded(row: VisibleIndex, expandDescendants = false): void {\n const modelRow = this.getModelRow(row);\n const { model } = this.props;\n // We only want to set expansion if the row is expandable\n // If it's not, still move the cursor to that position, as it may be outside of the current viewport and we don't know if it's expandable yet\n if (isExpandableGridModel(model) && model.isRowExpandable(modelRow)) {\n model.setRowExpanded(\n modelRow,\n !model.isRowExpanded(modelRow),\n expandDescendants\n );\n }\n this.clearSelectedRanges();\n this.commitSelection(); // Need to commit before moving in case we're selecting same row again\n this.moveCursorToPosition(0, row);\n this.commitSelection();\n\n this.setState({ isStuckToBottom: false });\n }\n\n /**\n * Scrolls to bottom, if not already at bottom\n */\n scrollToBottom(): void {\n if (!this.metrics) return;\n const { bottomVisible, rowCount, top, lastTop } = this.metrics;\n if ((bottomVisible < rowCount - 1 && bottomVisible > 0) || top > lastTop) {\n this.setState({ top: lastTop });\n }\n }\n\n /**\n * Scrolls to right, if not already at right\n */\n scrollToRight(): void {\n if (!this.metrics) return;\n const { rightVisible, columnCount, left, lastLeft } = this.metrics;\n if (\n (rightVisible < columnCount - 1 && rightVisible > 0) ||\n left > lastLeft\n ) {\n this.setState({ left: lastLeft });\n }\n }\n\n /**\n * Allows the selected ranges to be set programatically\n * Will update the cursor and selection start/end based on the new ranges\n * @param gridRanges The new selected ranges to set\n */\n setSelectedRanges(gridRanges: readonly GridRange[]): void {\n const { model } = this.props;\n const { columnCount, rowCount } = model;\n const { cursorRow, cursorColumn, selectedRanges } = this.state;\n this.setState({\n selectedRanges: gridRanges,\n lastSelectedRanges: selectedRanges,\n });\n if (gridRanges.length > 0) {\n const range = GridRange.boundedRange(\n gridRanges[0],\n columnCount,\n rowCount\n );\n let newCursorRow = cursorRow;\n let newCursorColumn = cursorColumn;\n if (!range.containsCell(cursorColumn, cursorRow)) {\n ({ row: newCursorRow, column: newCursorColumn } = range.startCell());\n }\n\n this.setState({\n selectionStartColumn: range.startColumn,\n selectionStartRow: range.startRow,\n selectionEndColumn: range.endColumn,\n selectionEndRow: range.endRow,\n cursorColumn: newCursorColumn,\n cursorRow: newCursorRow,\n });\n }\n }\n\n initContext(): void {\n const { canvas } = this;\n const { canvasOptions } = this.props;\n\n if (!canvas) throw new Error('Canvas not set');\n\n this.canvasContext = canvas.getContext('2d', canvasOptions);\n }\n\n requestUpdateCanvas(): void {\n if (this.animationFrame != null) {\n return;\n }\n\n this.animationFrame = requestAnimationFrame(() => {\n this.animationFrame = null;\n\n try {\n this.updateCanvas();\n } catch (e) {\n // Errors thrown from the animation frame are uncaught by the grid panel\n this.setState({ renderError: e });\n }\n });\n }\n\n updateCanvas(): void {\n this.updateCanvasScale();\n\n this.updateMetrics();\n\n this.updateRenderState();\n\n const { canvasContext, metrics, renderState } = this;\n assertNotNull(canvasContext);\n assertNotNull(metrics);\n assertNotNull(renderState);\n\n this.renderer.configureContext(canvasContext, renderState);\n\n const { onViewChanged } = this.props;\n onViewChanged(metrics);\n\n this.drawCanvas(metrics);\n }\n\n private updateCanvasScale(): void {\n const { canvas, canvasContext, canvasWrapper } = this;\n if (!canvas) throw new Error('canvas not set');\n if (!canvasContext) throw new Error('canvasContext not set');\n if (!canvasWrapper.current) throw new Error('canvasWrapper not set');\n\n // the parent wrapper has 100% width/height, and is used for determining size\n // we don't want to stretch the canvas to 100%, to avoid fractional pixels.\n // A wrapper element must be used for sizing, and canvas size must be\n // set manually to a floored value in css and a scaled value in width/height\n const rect = canvasWrapper.current.getBoundingClientRect();\n const width = Math.floor(rect.width);\n const height = Math.floor(rect.height);\n\n // avoid triggering a dom re-calc if size hasn't changed\n if (\n parseFloat(canvas.style.width) === width &&\n parseFloat(canvas.style.height) === height\n ) {\n return;\n }\n\n const scale = Grid.getScale(canvasContext);\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n canvas.width = width * scale;\n canvas.height = height * scale;\n canvasContext.scale(scale, scale);\n }\n\n updateScrollBounds(): void {\n if (!this.metrics) throw new Error('metrics not set');\n const { left, top } = this.state;\n const { lastLeft, lastTop } = this.metrics;\n if (left > lastLeft) {\n this.setState({ left: lastLeft, leftOffset: 0 });\n }\n if (top > lastTop) {\n this.setState({ top: lastTop, topOffset: 0 });\n }\n }\n\n /**\n * Compares the current metrics with the previous metrics to see if we need to scroll when it is stuck to the bottom or the right\n */\n checkStickyScroll(): void {\n if (!this.metrics) {\n return;\n }\n\n if (this.prevMetrics) {\n const { rowCount, columnCount, height, width } = this.metrics;\n const {\n rowCount: prevRowCount,\n columnCount: prevColumnCount,\n height: prevHeight,\n width: prevWidth,\n } = this.prevMetrics;\n\n if (prevRowCount !== rowCount || height !== prevHeight) {\n const { isStuckToBottom } = this.state;\n if (isStuckToBottom) {\n this.scrollToBottom();\n }\n }\n\n if (prevColumnCount !== columnCount || width !== prevWidth) {\n const { isStuckToRight } = this.state;\n if (isStuckToRight) {\n this.scrollToRight();\n }\n }\n }\n this.prevMetrics = this.metrics;\n }\n\n updateMetrics(state = this.state): GridMetrics {\n this.prevMetrics = this.metrics;\n\n const { metricCalculator } = this;\n const metricState = this.getMetricState(state);\n this.metrics = metricCalculator.getMetrics(metricState);\n this.updateScrollBounds();\n\n return this.metrics;\n }\n\n /**\n * Check if the selection state has changed, and call the onSelectionChanged callback if they have\n * @param prevState The previous grid state\n */\n checkSelectionChange(prevState: GridState): void {\n const { selectedRanges: oldSelectedRanges } = prevState;\n const { selectedRanges } = this.state;\n\n if (selectedRanges !== oldSelectedRanges) {\n const { onSelectionChanged } = this.props;\n onSelectionChanged(selectedRanges);\n }\n }\n\n /**\n * Validate the current selection, and reset if it is invalid\n * @returns True if the selection is valid, false if the selection was invalid and has been reset\n */\n validateSelection(): boolean {\n const { model } = this.props;\n const { selectedRanges } = this.state;\n const { columnCount, rowCount } = model;\n\n for (let i = 0; i < selectedRanges.length; i += 1) {\n const range = selectedRanges[i];\n if (\n (range.endColumn != null && range.endColumn >= columnCount) ||\n (range.endRow != null && range.endRow >= rowCount)\n ) {\n // Just clear the selection rather than trying to trim it.\n this.setState({ selectedRanges: [], lastSelectedRanges: [] });\n return false;\n }\n }\n return true;\n }\n\n /**\n * Clears all selected ranges\n */\n clearSelectedRanges(): void {\n const { selectedRanges } = this.state;\n this.setState({ selectedRanges: [], lastSelectedRanges: selectedRanges });\n }\n\n /** Clears all but the last selected range */\n trimSelectedRanges(): void {\n const { selectedRanges } = this.state;\n if (selectedRanges.length > 0) {\n this.setState({\n selectedRanges: selectedRanges.slice(selectedRanges.length - 1),\n });\n }\n }\n\n /** Gets the selected ranges */\n getSelectedRanges(): readonly GridRange[] {\n const { selectedRanges } = this.state;\n return selectedRanges;\n }\n\n /**\n * Begin a selection operation at the provided location\n * @param column Column where the selection is beginning\n * @param row Row where the selection is beginning\n */\n beginSelection(column: GridRangeIndex, row: GridRangeIndex): void {\n this.setState({\n selectionStartColumn: column,\n selectionStartRow: row,\n selectionEndColumn: column,\n selectionEndRow: row,\n cursorColumn: column,\n cursorRow: row,\n });\n }\n\n /**\n * Moves the selection to the cell specified\n * @param column The column index to move the cursor to\n * @param row The row index to move the cursor to\n * @param extendSelection Whether to extend the current selection (eg. holding Shift)\n * @param maximizePreviousRange When true, maximize/add to the previous range only, ignoring where the selection was started.\n */\n moveSelection(\n column: GridRangeIndex,\n row: GridRangeIndex,\n extendSelection = false,\n maximizePreviousRange = false\n ): void {\n this.setState(state => {\n const { selectedRanges, selectionStartRow, selectionStartColumn } = state;\n const { theme } = this.props;\n const { autoSelectRow, autoSelectColumn } = theme;\n\n if (extendSelection && selectedRanges.length > 0) {\n const lastSelectedRange = selectedRanges[selectedRanges.length - 1];\n let left = null;\n let top = null;\n let right = null;\n let bottom = null;\n if (maximizePreviousRange) {\n left =\n autoSelectRow !== undefined && autoSelectRow\n ? null\n : Math.min(column ?? 0, lastSelectedRange.startColumn ?? 0);\n top =\n autoSelectColumn !== undefined && autoSelectColumn\n ? null\n : Math.min(row ?? 0, lastSelectedRange.startRow ?? 0);\n right =\n autoSelectRow !== undefined && autoSelectRow\n ? null\n : Math.max(column ?? 0, lastSelectedRange.endColumn ?? 0);\n bottom =\n autoSelectColumn !== undefined && autoSelectColumn\n ? null\n : Math.max(row ?? 0, lastSelectedRange.endRow ?? 0);\n } else {\n left = lastSelectedRange.startColumn;\n top = lastSelectedRange.startRow;\n\n if (selectionStartColumn != null || selectionStartRow != null) {\n if (autoSelectRow === undefined || !autoSelectRow) {\n left = selectionStartColumn;\n }\n if (autoSelectColumn === undefined || !autoSelectColumn) {\n top = selectionStartRow;\n }\n }\n right = autoSelectRow !== undefined && autoSelectRow ? null : column;\n bottom =\n autoSelectColumn !== undefined && autoSelectColumn ? null : row;\n }\n const selectedRange = GridRange.makeNormalized(\n left,\n top,\n right,\n bottom\n );\n\n if (lastSelectedRange.equals(selectedRange)) {\n return null;\n }\n\n const newRanges = [...selectedRanges];\n newRanges[newRanges.length - 1] = selectedRange;\n return {\n selectedRanges: newRanges,\n selectionEndColumn: column,\n selectionEndRow: row,\n };\n }\n const newRanges = [...selectedRanges];\n const selectedColumn =\n autoSelectRow !== undefined && autoSelectRow ? null : column;\n const selectedRow =\n autoSelectColumn !== undefined && autoSelectColumn ? null : row;\n\n newRanges.push(\n GridRange.makeNormalized(\n selectedColumn,\n selectedRow,\n selectedColumn,\n selectedRow\n )\n );\n return {\n selectedRanges: newRanges,\n selectionEndColumn: column,\n selectionEndRow: row,\n };\n });\n }\n\n /**\n * Commits the last selected range to the selected ranges.\n * First checks if the last range is completely contained within another range, and if it\n * is then it blows those ranges apart.\n * Then it consolidates all the selected ranges, reducing them.\n */\n commitSelection(): void {\n this.setState((state: GridState) => {\n const { theme } = this.props;\n const { autoSelectRow } = theme;\n const { selectedRanges, lastSelectedRanges, cursorRow, cursorColumn } =\n state;\n\n if (\n selectedRanges.length === 1 &&\n (autoSelectRow !== undefined && autoSelectRow\n ? GridRange.rowCount(selectedRanges) === 1\n : GridRange.cellCount(selectedRanges) === 1) &&\n GridRange.rangeArraysEqual(selectedRanges, lastSelectedRanges)\n ) {\n // If it's the exact same single selection, then deselect.\n // For if we click on one cell multiple times.\n return {\n selectedRanges: [],\n lastSelectedRanges: [],\n cursorColumn: null,\n cursorRow: null,\n };\n }\n\n let newSelectedRanges = selectedRanges.slice();\n if (newSelectedRanges.length > 1) {\n // Check if the latest selection is entirely within a previously selected range\n // If that's the case, then deselect that section instead\n const lastRange = newSelectedRanges[newSelectedRanges.length - 1];\n for (let i = 0; i < newSelectedRanges.length - 1; i += 1) {\n const selectedRange = newSelectedRanges[i];\n if (selectedRange.contains(lastRange)) {\n // We found a match, now remove the two matching ranges, and add back\n // the remainder of the two\n const remainder = selectedRange.subtract(lastRange);\n newSelectedRanges.pop();\n newSelectedRanges.splice(i, 1);\n newSelectedRanges = newSelectedRanges.concat(remainder);\n break;\n }\n }\n\n newSelectedRanges = GridRange.consolidate(newSelectedRanges);\n }\n\n let newCursorColumn = cursorColumn;\n let newCursorRow = cursorRow;\n if (!GridRange.containsCell(newSelectedRanges, cursorColumn, cursorRow)) {\n const { model } = this.props;\n const { columnCount, rowCount } = model;\n const nextCursor = GridRange.nextCell(\n GridRange.boundedRanges(selectedRanges, columnCount, rowCount)\n );\n if (nextCursor != null) {\n ({ column: newCursorColumn, row: newCursorRow } = nextCursor);\n } else {\n newCursorColumn = null;\n newCursorRow = null;\n }\n }\n\n if (newSelectedRanges.length === 0) {\n newCursorColumn = null;\n newCursorRow = null;\n }\n\n return {\n cursorRow: newCursorRow,\n cursorColumn: newCursorColumn,\n selectedRanges: newSelectedRanges,\n lastSelectedRanges: selectedRanges,\n };\n });\n }\n\n setFocusRow(focusedRow: number): void {\n if (!this.metrics || !this.prevMetrics) {\n return;\n }\n\n const { gridY, height, lastTop, userRowHeights, rowHeight } = this.metrics;\n\n const tableHeight = height - gridY;\n\n const halfViewportHeight =\n Math.round(tableHeight / 2) +\n (userRowHeights.get(focusedRow) ?? rowHeight);\n\n const metricState = this.getMetricState();\n const newTop = this.metricCalculator.getLastTop(\n metricState,\n focusedRow + 1,\n halfViewportHeight\n );\n this.setState({\n top: Math.min(lastTop, newTop),\n selectedRanges: [new GridRange(null, focusedRow, null, focusedRow)],\n isStuckToBottom: false,\n });\n const { cursorColumn } = this.state;\n this.moveCursorToPosition(cursorColumn, focusedRow, false, false);\n }\n\n /**\n * Set the selection to the entire grid\n */\n selectAll(): void {\n const { model, theme } = this.props;\n const { autoSelectRow, autoSelectColumn } = theme;\n\n const top = autoSelectColumn !== undefined && autoSelectColumn ? null : 0;\n const bottom =\n autoSelectColumn !== undefined && autoSelectColumn\n ? null\n : model.rowCount - 1;\n const left = autoSelectRow !== undefined && autoSelectRow ? null : 0;\n const right =\n autoSelectRow !== undefined && autoSelectRow\n ? null\n : model.columnCount - 1;\n this.setSelectedRanges([new GridRange(left, top, right, bottom)]);\n }\n\n /**\n * Move the cursor in relation to the current cursor position\n * @param deltaColumn Number of columns to move the cursor\n * @param deltaRow Number of rows to move the cursor\n * @param extendSelection True if the current selection should be extended, false to start a new selection\n */\n moveCursor(\n deltaColumn: number,\n deltaRow: number,\n extendSelection: boolean\n ): void {\n const { cursorRow, cursorColumn, selectionEndColumn, selectionEndRow } =\n this.state;\n const column = extendSelection ? selectionEndColumn : cursorColumn;\n const row = extendSelection ? selectionEndRow : cursorRow;\n if (row === null || column === null) {\n const { left, top } = this.state;\n this.moveCursorToPosition(left, top, extendSelection);\n } else {\n const { model } = this.props;\n const { columnCount, rowCount } = model;\n\n const left = clamp(column + deltaColumn, 0, columnCount - 1);\n const top = clamp(row + deltaRow, 0, rowCount - 1);\n this.moveCursorToPosition(left, top, extendSelection);\n }\n }\n\n /**\n * Move the cursor in the provided selection direction\n * @param direction The direction to move the cursor in\n */\n moveCursorInDirection(direction = GridRange.SELECTION_DIRECTION.DOWN): void {\n const { model } = this.props;\n const { columnCount, rowCount } = model;\n const { cursorRow, cursorColumn, selectedRanges } = this.state;\n const ranges =\n selectedRanges.length > 0\n ? selectedRanges\n : [GridRange.makeCell(cursorColumn, cursorRow)];\n let nextCursor = null;\n if (ranges.length === 1 && GridRange.cellCount(ranges) === 1) {\n // If we only have one cell selected, we want to update the cursor and we want to update the selected cells\n const gridRange = new GridRange(0, 0, columnCount - 1, rowCount - 1);\n nextCursor =\n gridRange.nextCell(cursorColumn, cursorRow, direction) ??\n gridRange.startCell(direction);\n } else {\n nextCursor = GridRange.nextCell(\n GridRange.boundedRanges(ranges, columnCount, rowCount),\n cursorColumn,\n cursorRow,\n direction\n );\n }\n\n if (nextCursor != null) {\n const { column, row } = nextCursor;\n this.setState({\n cursorColumn: column,\n cursorRow: row,\n });\n\n if (!GridRange.containsCell(selectedRanges, column, row)) {\n this.setState({\n selectedRanges: [GridRange.makeCell(column, row)],\n selectionStartColumn: column,\n selectionStartRow: row,\n selectionEndColumn: column,\n selectionEndRow: row,\n });\n }\n\n this.moveViewToCell(nextCursor.column, nextCursor.row);\n }\n }\n\n /**\n * Move a cursor to the specified position in the grid.\n * @param column The column index to move the cursor to\n * @param row The row index to move the cursor to\n * @param extendSelection Whether to extend the current selection (eg. holding Shift)\n * @param keepCursorInView Whether to move the viewport so that the cursor is in view\n * @param maximizePreviousRange With this and `extendSelection` true, it will maximize/add to the previous range only, ignoring where the selection was started\n */\n moveCursorToPosition(\n column: GridRangeIndex,\n row: GridRangeIndex,\n extendSelection = false,\n keepCursorInView = true,\n maximizePreviousRange = false\n ): void {\n if (!extendSelection) {\n this.beginSelection(column, row);\n }\n\n this.moveSelection(column, row, extendSelection, maximizePreviousRange);\n\n if (keepCursorInView) {\n this.moveViewToCell(column, row);\n }\n }\n\n /**\n * Moves the view to make the specified cell visible\n *\n * @param column The column index to bring into view\n * @param row The row index to bring into view\n */\n moveViewToCell(column: GridRangeIndex, row: GridRangeIndex): void {\n if (!this.metrics) throw new Error('metrics not set');\n\n const { metricCalculator } = this;\n const { bottomVisible, rightVisible, topVisible, leftVisible } =\n this.metrics;\n const metricState = this.getMetricState(this.state);\n let { top, left, topOffset, leftOffset } = this.state;\n\n if (row != null && !GridUtils.isFloatingRow(row, this.metrics)) {\n if (row < topVisible) {\n top = metricCalculator.getTopForTopVisible(metricState, row);\n topOffset = 0;\n } else if (row > bottomVisible) {\n top = metricCalculator.getTopForBottomVisible(metricState, row);\n topOffset = 0;\n }\n }\n\n if (column != null && !GridUtils.isFloatingColumn(column, this.metrics)) {\n if (column < leftVisible) {\n left = metricCalculator.getLeftForLeftVisible(metricState, column);\n leftOffset = 0;\n } else if (column > rightVisible) {\n left = metricCalculator.getLeftForRightVisible(metricState, column);\n leftOffset = 0;\n }\n }\n\n this.setViewState({ top, left, topOffset, leftOffset });\n }\n\n /**\n * Checks the `top` and `left` properties that are set and updates the isStuckToBottom/Right properties\n * Should be called when user interaction occurs\n * @param viewState New state properties to set.\n * @param forceUpdate Whether to force an update.\n */\n setViewState(viewState: Partial<GridState>, forceUpdate = false): void {\n if (!this.metrics) throw new Error('metrics not set');\n\n const { isStickyBottom, isStickyRight } = this.props;\n const { top, left } = viewState;\n const { lastTop, lastLeft, hasVerticalBar, hasHorizontalBar } =\n this.metrics;\n if (top != null && hasVerticalBar) {\n this.setState({ isStuckToBottom: isStickyBottom && top >= lastTop });\n }\n if (left != null && hasHorizontalBar) {\n this.setState({ isStuckToRight: isStickyRight && left >= lastLeft });\n }\n\n this.setState(viewState as GridState);\n if (forceUpdate) {\n this.forceUpdate();\n }\n }\n\n /**\n * Start editing the data at the given index\n *\n * @param column The visible column index to start editing\n * @param row The visible row index to start editing\n * @param isQuickEdit If this is a quick edit (the arrow keys can commit)\n * @param selectionRange The tuple [start,end] text selection range of the value to select when editing\n * @param value The value to start with in the edit field. Leave undefined to use the current value.\n */\n startEditing(\n column: VisibleIndex,\n row: VisibleIndex,\n isQuickEdit = false,\n selectionRange?: EditingCellTextSelectionRange,\n value?: string\n ): void {\n const { model } = this.props;\n if (!isEditableGridModel(model)) throw new Error('model is not editable');\n\n const modelColumn = this.getModelColumn(column);\n const modelRow = this.getModelRow(row);\n const cell = {\n column,\n row,\n selectionRange,\n value:\n value !== undefined\n ? value\n : model.editValueForCell(modelColumn, modelRow),\n isQuickEdit,\n };\n\n this.setState({ editingCell: cell, cursorColumn: column, cursorRow: row });\n this.moveViewToCell(column, row);\n }\n\n /**\n * Check if a value is valid for a specific cell\n * @param column Column index of the cell to check\n * @param row Row index of the cell to check\n * @param value Value to check\n * @returns True if the value is valid for the provided cell, false otherwise\n */\n isValidForCell(\n column: VisibleIndex,\n row: VisibleIndex,\n value: string\n ): boolean {\n const { model } = this.props;\n\n const modelColumn = this.getModelColumn(column);\n const modelRow = this.getModelRow(row);\n return (\n isEditableGridModel(model) &&\n model.isValidForCell(modelColumn, modelRow, value)\n );\n }\n\n /**\n * Paste a value with the current selection\n * It first needs to validate that the pasted table is valid for the given selection.\n * Also may update selection if single cells are selected and a table is pasted.\n * @param value Table or a string that is being pasted\n */\n async pasteValue(value: string[][] | string): Promise<void> {\n const { model } = this.props;\n const { movedColumns, movedRows, selectedRanges } = this.state;\n\n try {\n assertIsEditableGridModel(model);\n\n if (\n !model.isEditable ||\n !selectedRanges.every(range => model.isEditableRange(range))\n ) {\n throw new PasteError(\"Can't paste in to read-only area.\");\n }\n\n if (selectedRanges.length <= 0) {\n throw new PasteError('Select an area to paste to.');\n }\n\n if (typeof value === 'string') {\n // Just paste the value into all the selected cells\n const edits: EditOperation[] = [];\n\n const modelRanges = GridUtils.getModelRanges(\n selectedRanges,\n movedColumns,\n movedRows\n );\n GridRange.forEachCell(modelRanges, (column, row) => {\n edits.push({ column, row, text: value });\n });\n await model.setValues(edits);\n return;\n }\n\n // Otherwise it's a table of data\n const tableHeight = value.length;\n const tableWidth = value[0].length;\n const { columnCount, rowCount } = model;\n let ranges = selectedRanges;\n // If each cell is a single selection, we need to update the selection to map to the newly pasted data\n // Check for\n if (\n ranges.every(\n range =>\n GridRange.cellCount([range]) === 1 &&\n (range.startColumn ?? 0) + tableWidth <= columnCount &&\n (range.startRow ?? 0) + tableHeight <= rowCount\n )\n ) {\n // Remap the selected ranges\n ranges = ranges.map(\n range =>\n new GridRange(\n range.startColumn,\n range.startRow,\n (range.startColumn ?? 0) + tableWidth - 1,\n (range.startRow ?? 0) + tableHeight - 1\n )\n );\n this.setSelectedRanges(ranges);\n }\n\n const edits: EditOperation[] = [];\n ranges.forEach(range => {\n for (let x = 0; x < tableWidth; x += 1) {\n for (let y = 0; y < tableHeight; y += 1) {\n edits.push({\n column: (range.startColumn ?? 0) + x,\n row: (range.startRow ?? 0) + y,\n text: value[y][x],\n });\n }\n }\n });\n await model.setValues(edits);\n } catch (e) {\n const { onError } = this.props;\n onError(e instanceof Error ? e : new Error(`${e}`));\n }\n }\n\n /**\n * Set a value to a specific cell. If the value is not valid for that cell, do not set it\n * @param column Column index to set the value for\n * @param row Row index to set the value for\n * @param value Value to set at that cell\n * @returns true If the value was valid and attempted to be set, false is it was not valid\n */\n setValueForCell(\n column: VisibleIndex,\n row: VisibleIndex,\n value: string\n ): boolean {\n const { model } = this.props;\n assertIsEditableGridModel(model);\n\n const modelColumn = this.getModelColumn(column);\n const modelRow = this.getModelRow(row);\n if (model.isValidForCell(modelColumn, modelRow, value)) {\n model.setValueForCell(modelColumn, modelRow, value);\n return true;\n }\n return false;\n }\n\n /**\n * Set a value on all the ranges provided\n * @param ranges Ranges to set\n * @param value The value to set on all the ranges\n */\n setValueForRanges(ranges: readonly GridRange[], value: string): void {\n const { model } = this.props;\n const { movedColumns, movedRows } = this.state;\n\n const modelRanges = GridUtils.getModelRanges(\n ranges,\n movedColumns,\n movedRows\n );\n if (isEditableGridModel(model)) {\n model.setValueForRanges(modelRanges, value);\n }\n }\n\n /**\n * Check if a given cell is within the current selection\n * @param row Row to check\n * @param column Column to check\n * @returns True if the cell is in the current selection, false otherwise\n */\n isSelected(row: VisibleIndex, column: VisibleIndex): boolean {\n const { selectedRanges } = this.state;\n\n for (let i = 0; i < selectedRanges.length; i += 1) {\n const selectedRange = selectedRanges[i];\n const rowSelected =\n selectedRange.startRow === null ||\n (selectedRange.startRow <= row && row <= (selectedRange.endRow ?? 0));\n const columnSelected =\n selectedRange.startColumn === null ||\n (selectedRange.startColumn <= column &&\n column <= (selectedRange.endColumn ?? 0));\n if (rowSelected && columnSelected) {\n return true;\n }\n }\n\n return false;\n }\n\n addDocumentCursor(cursor: string | null = null): void {\n if (this.documentCursor === Grid.getCursorClassName(cursor)) return;\n if (this.documentCursor != null) {\n document.documentElement.classList.remove(this.documentCursor);\n }\n this.documentCursor = Grid.getCursorClassName(cursor);\n if (this.documentCursor != null) {\n document.documentElement.classList.add(this.documentCursor);\n }\n document.documentElement.classList.add('grid-block-events');\n }\n\n removeDocumentCursor(): void {\n if (this.documentCursor != null) {\n document.documentElement.classList.remove(this.documentCursor);\n document.documentElement.classList.remove('grid-block-events');\n this.documentCursor = null;\n }\n }\n\n startDragTimer(event: React.MouseEvent): void {\n this.stopDragTimer();\n\n const mouseEvent = new MouseEvent('custom', event.nativeEvent);\n\n this.dragTimer = setTimeout(() => {\n this.handleMouseDrag(mouseEvent);\n }, Grid.dragTimeout);\n }\n\n stopDragTimer(): void {\n if (this.dragTimer) {\n clearTimeout(this.dragTimer);\n this.dragTimer = null;\n }\n }\n\n /**\n * Draw the grid with the metrics provided\n * When scrolling you've have to re-draw the whole canvas. As a consequence, all these drawing methods\n * must be very quick.\n * @param metrics Metrics to use for rendering the grid\n */\n private drawCanvas(metrics = this.updateMetrics()): void {\n if (!this.canvas) throw new Error('canvas is not set');\n if (!this.canvasContext) throw new Error('context not set');\n\n const { renderer, canvasContext: context, renderState } = this;\n\n context.save();\n\n renderer.drawCanvas(renderState);\n\n context.restore();\n }\n\n /**\n * Set focus to this grid element\n */\n focus(): void {\n this.canvas?.focus();\n }\n\n /**\n * Check if this grid is currently focused\n * @returns True if the active element is this grid\n */\n isFocused(): boolean {\n return document.activeElement === this.canvas;\n }\n\n /**\n * Handle a mouse click event. Pass the event to the registered mouse handlers until one handles it.\n * Focuses the grid after the click.\n * @param event The mouse event\n */\n handleClick(event: React.MouseEvent): void {\n const gridPoint = this.getGridPointFromEvent(event);\n\n const mouseHandlers = this.getMouseHandlers();\n for (let i = 0; i < mouseHandlers.length; i += 1) {\n const mouseHandler = mouseHandlers[i];\n if (mouseHandler.onClick(gridPoint, this, event) !== false) {\n event.stopPropagation();\n event.preventDefault();\n break;\n }\n }\n\n this.canvas?.focus();\n }\n\n /**\n * Handle a mouse context menu event. Pass the event to the registered mouse handlers until one handles it.\n * @param event The mouse event triggering the context menu\n */\n handleContextMenu(event: React.MouseEvent): void {\n const gridPoint = this.getGridPointFromEvent(event);\n\n const mouseHandlers = this.getMouseHandlers();\n for (let i = 0; i < mouseHandlers.length; i += 1) {\n const mouseHandler = mouseHandlers[i];\n if (mouseHandler.onContextMenu(gridPoint, this, event) !== false) {\n event.stopPropagation();\n event.preventDefault();\n break;\n }\n }\n }\n\n /**\n * Notify all of the keyboard handlers for this grid of a keyboard event.\n * @param functionName The name of the function in the keyboard handler to call\n * @param event The keyboard event to notify\n */\n notifyKeyboardHandlers(\n functionName: GridKeyHandlerFunctionName,\n event: GridKeyboardEvent\n ): void {\n const keyHandlers = this.getKeyHandlers();\n let cursor = null;\n for (let i = 0; i < keyHandlers.length; i += 1) {\n const keyHandler = keyHandlers[i];\n const result =\n keyHandler[functionName] != null &&\n keyHandler[functionName](event, this);\n if (result !== false) {\n if (keyHandler.cursor != null) {\n ({ cursor } = keyHandler);\n }\n const options = result as EventHandlerResultOptions;\n if (options?.stopPropagation ?? true) event.stopPropagation();\n if (options?.preventDefault ?? true) event.preventDefault();\n break;\n }\n }\n this.setState({ cursor });\n }\n\n handleKeyDown(event: GridKeyboardEvent): void {\n this.notifyKeyboardHandlers('onDown', event);\n }\n\n handleKeyUp(event: GridKeyboardEvent): void {\n this.notifyKeyboardHandlers('onUp', event);\n }\n\n /**\n * Notify all of the mouse handlers for this grid of a mouse event.\n * @param functionName The name of the function in the mouse handler to call\n * @param event The mouse event to notify\n * @param updateCoordinates Whether to update the mouse coordinates\n * @param addCursorToDocument Whether to add a cursor overlay or not (for dragging)\n */\n notifyMouseHandlers(\n functionName: GridMouseHandlerFunctionName,\n event: GridMouseEvent,\n updateCoordinates = true,\n addCursorToDocument = false\n ): void {\n const gridPoint = this.getGridPointFromEvent(event);\n const mouseHandlers = this.getMouseHandlers();\n let cursor = null;\n for (let i = 0; i < mouseHandlers.length; i += 1) {\n const mouseHandler = mouseHandlers[i];\n const result =\n mouseHandler[functionName] != null &&\n mouseHandler[functionName](gridPoint, this, event);\n if (result !== false) {\n if (mouseHandler.cursor != null) {\n ({ cursor } = mouseHandler);\n if (addCursorToDocument) {\n this.addDocumentCursor(cursor);\n }\n }\n\n // result is bool or object, events are stopped by default\n const options = result as EventHandlerResultOptions;\n if (options?.stopPropagation ?? true) event.stopPropagation();\n if (options?.preventDefault ?? true) event.preventDefault();\n break;\n }\n }\n\n this.setState({ cursor });\n\n if (updateCoordinates) {\n const { x, y } = gridPoint;\n this.setState({ mouseX: x, mouseY: y });\n }\n }\n\n handleMouseDown(event: React.MouseEvent): void {\n window.addEventListener('mousemove', this.handleMouseDrag, true);\n window.addEventListener('mouseup', this.handleMouseUp, true);\n\n if (event.button != null && event.button !== 0) {\n return;\n }\n\n this.notifyMouseHandlers('onDown', event);\n\n this.startDragTimer(event);\n }\n\n handleDoubleClick(event: React.MouseEvent): void {\n this.notifyMouseHandlers('onDoubleClick', event);\n }\n\n handleMouseMove(event: React.MouseEvent): void {\n this.notifyMouseHandlers('onMove', event);\n }\n\n handleMouseLeave(event: React.MouseEvent): void {\n this.notifyMouseHandlers('onLeave', event, false);\n this.setState({ mouseX: null, mouseY: null });\n }\n\n handleMouseDrag(event: MouseEvent): void {\n this.setState({ isDragging: true });\n this.notifyMouseHandlers('onDrag', event, true, true);\n\n this.stopDragTimer();\n }\n\n handleMouseUp(event: MouseEvent): void {\n window.removeEventListener('mousemove', this.handleMouseDrag, true);\n window.removeEventListener('mouseup', this.handleMouseUp, true);\n\n if (event.button != null && event.button !== 0) {\n return;\n }\n\n this.notifyMouseHandlers('onUp', event, false);\n\n this.stopDragTimer();\n\n this.removeDocumentCursor();\n }\n\n handleResize(): void {\n /**\n * We need to always redraw the canvas in the same frame as the updateCanvasScale\n * because it clears the canvas by nature of direct dom manipulation. However,\n * We also need to verify the state/metrics, which we currently have no way\n * of doing outside of a full componentDidUpdate() call, so we force the update.\n * Ideally, we could verify state/metrics without the forced update.\n */\n this.updateCanvas();\n\n if (!this.metrics) throw new Error('metrics not set');\n\n this.forceUpdate();\n }\n\n handleWheel(event: WheelEvent): void {\n this.notifyMouseHandlers('onWheel', event);\n\n if (event.defaultPrevented) {\n return;\n }\n\n const { metricCalculator, metrics } = this;\n const metricState = this.getMetricState();\n\n if (!metrics) throw new Error('metrics not set');\n\n const {\n lastTop,\n lastLeft,\n columnCount,\n rowCount,\n scrollableContentWidth,\n scrollableViewportWidth,\n scrollableContentHeight,\n scrollableViewportHeight,\n hasHorizontalBar,\n hasVerticalBar,\n } = metrics;\n let { top, left, topOffset, leftOffset } = metrics;\n\n const theme = this.getTheme();\n\n let { deltaX, deltaY } = GridUtils.getScrollDelta(\n event,\n metrics.barWidth,\n metrics.barHeight,\n metrics.rowHeight,\n metrics.rowHeight\n );\n\n // iterate through each column to determine column width and figure out how far to scroll\n // get column width of next column to scroll to, and subract it from the remaining distance to travel\n while (hasHorizontalBar && deltaX !== 0) {\n leftOffset += deltaX;\n deltaX = 0;\n\n if (columnCount > 1) {\n // no scrolling needed, at directional edge\n if (\n (leftOffset > 0 && left >= lastLeft) ||\n (leftOffset < 0 && left <= 0)\n ) {\n leftOffset = 0;\n break;\n }\n } else {\n // single column at edge\n if (leftOffset <= 0) {\n leftOffset = 0;\n break;\n }\n\n const maxLeftOffset = scrollableContentWidth - scrollableViewportWidth;\n if (leftOffset >= maxLeftOffset) {\n leftOffset = maxLeftOffset;\n break;\n }\n }\n\n if (leftOffset > 0) {\n // scroll right\n\n // get width of next column\n const columnWidth =\n metrics.allColumnWidths.get(left) ??\n metricCalculator.getVisibleColumnWidth(left, metricState);\n\n if (leftOffset >= columnWidth) {\n // remove width from balance and advance by 1 column\n deltaX = leftOffset - columnWidth;\n leftOffset = 0;\n left += 1;\n } else if (theme.scrollSnapToColumn && columnCount > 1) {\n // if there's still a balance to travel but its less then a column and snapping is on\n leftOffset = 0;\n left += 1;\n }\n } else if (leftOffset < 0) {\n // scroll left\n\n // get width of next column\n const columnWidth =\n metrics.allColumnWidths.get(left - 1) ??\n metricCalculator.getVisibleColumnWidth(left - 1, metricState);\n\n if (\n Math.abs(leftOffset) <= columnWidth &&\n theme.scrollSnapToColumn &&\n columnCount > 1\n ) {\n // if there's still a balance to travel but its less then a column and snapping is on\n leftOffset = 0;\n left -= 1;\n } else {\n // remove width from balance and advance by 1 column\n deltaX = leftOffset + columnWidth;\n leftOffset = 0;\n left -= 1;\n }\n }\n }\n\n // iterate through each row to determine row height and figure out how far to scroll\n // get row height of next row to scroll to, and subract it from the remaining distance to travel\n while (hasVerticalBar && deltaY !== 0) {\n topOffset += deltaY;\n deltaY = 0;\n\n if (rowCount > 1) {\n // no scrolling needed, at directional edge\n if ((topOffset > 0 && top >= lastTop) || (topOffset < 0 && top <= 0)) {\n topOffset = 0;\n break;\n }\n } else {\n // single row at edge\n if (topOffset <= 0) {\n topOffset = 0;\n break;\n }\n\n const maxTopOffset = scrollableContentHeight - scrollableViewportHeight;\n if (topOffset >= maxTopOffset) {\n topOffset = maxTopOffset;\n break;\n }\n }\n\n if (topOffset > 0) {\n // scroll direction down\n\n // get height of next row\n const rowHeight =\n metrics.allRowHeights.get(top) ??\n metricCalculator.getVisibleRowHeight(top, metricState);\n\n if (topOffset >= rowHeight) {\n // remove height from balance and advance by 1 row\n deltaY = topOffset - rowHeight;\n topOffset = 0;\n top += 1;\n } else if (theme.scrollSnapToRow && rowCount > 1) {\n // if there's still a balance to travel but its less then a row and snapping is on\n topOffset = 0;\n top += 1;\n }\n } else if (topOffset < 0) {\n // scroll direction up\n\n // get height of next row\n const rowHeight =\n metrics.allRowHeights.get(top - 1) ??\n metricCalculator.getVisibleRowHeight(top - 1, metricState);\n\n if (\n Math.abs(topOffset) <= rowHeight &&\n theme.scrollSnapToRow &&\n rowCount > 1\n ) {\n // if there's still a balance to travel but its less then a row and snapping is on\n topOffset = 0;\n top -= 1;\n } else {\n // remove height from balance and advance by 1 row\n deltaY = topOffset + rowHeight;\n topOffset = 0;\n top -= 1;\n }\n }\n }\n\n if (\n metrics.top !== top ||\n metrics.left !== left ||\n metrics.topOffset !== topOffset ||\n metrics.leftOffset !== leftOffset\n ) {\n this.setViewState({ top, left, topOffset, leftOffset });\n event.stopPropagation();\n event.preventDefault();\n }\n }\n\n /**\n * Handle cancelling the cell edit action\n */\n handleEditCellCancel(): void {\n this.setState({ editingCell: null });\n this.focus();\n }\n\n /**\n * Handle a change in the value in an editing cell\n * @param value New value set\n */\n handleEditCellChange(value: string): void {\n this.setState(({ editingCell }) => {\n try {\n assertIsDefined(editingCell);\n\n return {\n editingCell: { ...editingCell, value } as EditingCell,\n };\n } catch (e) {\n // This case should _never_ happen, since the editingCell shouldn't be null if this method is called\n const { onError } = this.props;\n onError(e instanceof Error ? e : new Error(`${e}`));\n return null;\n }\n });\n }\n\n /**\n * Commit an edit for the currently editing cell\n * @param value Value that was committed\n * @param options Options for committing\n */\n handleEditCellCommit(\n value: string,\n {\n direction = SELECTION_DIRECTION.DOWN,\n fillRange = false,\n }: { direction?: SELECTION_DIRECTION | null; fillRange?: boolean } = {}\n ): void {\n const { editingCell, selectedRanges } = this.state;\n if (!editingCell) throw new Error('editingCell not set');\n\n const { column, row } = editingCell;\n if (!this.isValidForCell(column, row, value)) {\n // Don't allow an invalid value to be commited, the editing cell should show an error\n if (direction === null) {\n // If they clicked off of the editing cell, just remove focus\n this.setState({ editingCell: null });\n }\n return;\n }\n\n if (fillRange) {\n this.setValueForRanges(selectedRanges, value);\n } else {\n this.setValueForCell(column, row, value);\n }\n\n if (direction !== null) {\n this.moveCursorInDirection(direction);\n }\n\n this.setState({ editingCell: null });\n\n this.focus();\n }\n\n renderInputField(): ReactNode {\n const { model } = this.props;\n const { editingCell } = this.state;\n const { metrics } = this;\n if (editingCell == null || metrics == null || !isEditableGridModel(model)) {\n return null;\n }\n const { selectionRange, value, isQuickEdit } = editingCell;\n const { column, row } = editingCell;\n const {\n scrollX,\n gridX,\n gridY,\n allColumnXs,\n allRowYs,\n allColumnWidths,\n allRowHeights,\n } = metrics;\n\n const { activeCellSelectionBorderWidth } = this.getTheme();\n\n const x = allColumnXs.get(column);\n const y = allRowYs.get(row);\n const w = allColumnWidths.get(column);\n const h = allRowHeights.get(row);\n\n // make sure cell doeesn't go off the left side of the grid\n const leftBorderOffset =\n gridX + (x ?? 0) <= 0 && scrollX <= 0\n ? activeCellSelectionBorderWidth\n : 0;\n\n // If the cell isn't visible, we still need to display an invisible cell for focus purposes\n const wrapperStyle: CSSProperties =\n x != null && y != null && w != null && h != null\n ? {\n position: 'absolute',\n left: gridX + x + leftBorderOffset,\n top: gridY + y,\n width: w - leftBorderOffset,\n height: h,\n }\n : { opacity: 0 };\n\n let modelColumn;\n let modelRow;\n try {\n modelColumn = this.getModelColumn(column);\n modelRow = this.getModelRow(row);\n } catch (e) {\n return null;\n }\n const inputStyle: CSSProperties | undefined =\n modelColumn != null && modelRow != null\n ? {\n textAlign: model.textAlignForCell(modelColumn, modelRow),\n }\n : undefined;\n const isValid =\n modelColumn != null && modelRow != null\n ? model.isValidForCell(modelColumn, modelRow, value)\n : false;\n\n return (\n <div style={wrapperStyle}>\n <CellInputField\n key={`${column},${row}`}\n selectionRange={selectionRange}\n className={classNames({ error: !isValid })}\n onCancel={this.handleEditCellCancel}\n onChange={this.handleEditCellChange}\n onDone={this.handleEditCellCommit}\n isQuickEdit={isQuickEdit}\n style={inputStyle}\n value={value}\n />\n </div>\n );\n }\n\n /**\n * Gets the render state\n * @returns The render state\n */\n updateRenderState(): GridRenderState {\n if (!this.canvas) throw new Error('canvas is not set');\n if (!this.canvasContext) throw new Error('context not set');\n\n const {\n cursorColumn,\n cursorRow,\n draggingColumn,\n draggingColumnSeparator,\n draggingRow,\n draggingRowOffset,\n draggingRowSeparator,\n editingCell,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n isDragging,\n mouseX,\n mouseY,\n selectedRanges,\n } = this.state;\n const { model, stateOverride } = this.props;\n const { metrics } = this;\n const context = this.canvasContext;\n const theme = this.getTheme();\n const width = this.canvas.clientWidth;\n const height = this.canvas.clientHeight;\n\n assertNotNull(metrics);\n\n this.renderState = {\n width,\n height,\n context,\n theme,\n model,\n metrics,\n mouseX,\n mouseY,\n selectedRanges,\n draggingColumn,\n draggingColumnSeparator,\n draggingRow,\n draggingRowOffset,\n draggingRowSeparator,\n editingCell,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n isDragging,\n cursorColumn,\n cursorRow,\n ...stateOverride,\n };\n\n return this.renderState;\n }\n\n render(): ReactNode {\n const { children } = this.props;\n const { cursor } = this.state;\n\n return (\n <div className=\"grid-wrapper\" ref={this.canvasWrapper}>\n <canvas\n className={classNames('grid-canvas', Grid.getCursorClassName(cursor))}\n ref={canvas => {\n this.canvas = canvas;\n }}\n onClick={this.handleClick}\n onContextMenu={this.handleContextMenu}\n onDoubleClick={this.handleDoubleClick}\n onKeyDown={this.handleKeyDown}\n onKeyUp={this.handleKeyUp}\n onMouseDown={this.handleMouseDown}\n onMouseMove={this.handleMouseMove}\n onMouseLeave={this.handleMouseLeave}\n tabIndex={0}\n >\n Your browser does not support HTML canvas. Update your browser?\n </canvas>\n {this.renderInputField()}\n {children}\n </div>\n );\n }\n}\n\nexport default Grid;\n"],"mappings":"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"}
1
+ {"version":3,"file":"Grid.js","names":["React","PureComponent","classNames","memoize","clamp","assertNotNull","EMPTY_ARRAY","getChangedKeys","GridMetricCalculator","GridTheme","GridRange","SELECTION_DIRECTION","GridRenderer","GridUtils","isLinkToken","GridSelectionMouseHandler","GridColumnMoveMouseHandler","GridColumnSeparatorMouseHandler","GridHorizontalScrollBarMouseHandler","GridRowMoveMouseHandler","GridRowSeparatorMouseHandler","GridRowTreeMouseHandler","GridScrollBarCornerMouseHandler","GridVerticalScrollBarMouseHandler","EditMouseHandler","GridTokenMouseHandler","EditKeyHandler","PasteKeyHandler","SelectionKeyHandler","TreeKeyHandler","CellInputField","PasteError","isExpandableGridModel","assertIsEditableGridModel","isEditableGridModel","assertIsDefined","ThemeContext","jsx","_jsx","jsxs","_jsxs","Grid","getScale","context","_ref","_ref2","_ref3","_ref4","_legacyContext$webkit","devicePixelRatio","window","legacyContext","backingStorePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","getCursorClassName","cursor","concat","constructor","props","_defineProperty","keyHandlers","sort","a","b","order","mouseHandlers","handleClick","bind","handleContextMenu","handleEditCellCancel","handleEditCellChange","handleEditCellCommit","handleDoubleClick","notifyKeyboardHandlers","handleKeyDown","handleKeyUp","handleMouseDown","handleMouseDrag","handleMouseMove","handleMouseLeave","handleMouseUp","handleResize","handleWheel","getSelectedRanges","isStuckToBottom","isStuckToRight","metricCalculator","movedColumns","movedRows","renderer","canvas","canvasContext","canvasWrapper","createRef","resizeObserver","ResizeObserver","animationFrame","prevMetrics","metrics","renderState","documentCursor","dragTimer","state","top","left","topOffset","leftOffset","draggingColumn","draggingRow","draggingRowOffset","draggingColumnSeparator","draggingRowSeparator","isDraggingHorizontalScrollBar","isDraggingVerticalScrollBar","isDragging","mouseX","mouseY","cursorRow","cursorColumn","selectionStartRow","selectionStartColumn","selectionEndRow","selectionEndColumn","selectedRanges","lastSelectedRanges","editingCell","componentDidMount","_this$canvas","initContext","addEventListener","passive","current","observe","updateCanvas","scrollToBottom","scrollToRight","componentDidUpdate","prevProps","prevState","renderError","changedProps","changedState","length","isStickyBottom","isStickyRight","onMovedColumnsChanged","onMoveColumnComplete","onMovedRowsChanged","onMoveRowComplete","prevIsStickyBottom","prevIsStickyRight","prevPropMovedColumns","prevPropMovedRows","prevStateMovedColumns","prevStateMovedRows","currentStateMovedColumns","currentStateMovedRows","setState","updateMetrics","requestUpdateCanvas","checkStickyScroll","validateSelection","checkSelectionChange","componentWillUnmount","_this$canvas2","cancelAnimationFrame","removeEventListener","disconnect","stopDragTimer","getTheme","theme","getGridPointFromEvent","event","rect","getBoundingClientRect","x","clientX","y","clientY","getGridPointFromXY","Error","getMetricState","arguments","undefined","model","stateOverride","width","clientWidth","height","clientHeight","_objectSpread","getKeyHandlers","getCachedKeyHandlers","getMouseHandlers","getCachedMouseHandlers","getModelColumn","columnIndex","_this$metrics","_this$metrics$modelCo","modelIndex","modelColumns","get","getModelRow","rowIndex","_this$metrics2","_this$metrics2$modelR","modelRows","toggleRowExpanded","row","expandDescendants","modelRow","isRowExpandable","setRowExpanded","isRowExpanded","clearSelectedRanges","commitSelection","moveCursorToPosition","bottomVisible","rowCount","lastTop","rightVisible","columnCount","lastLeft","setSelectedRanges","gridRanges","range","boundedRange","newCursorRow","newCursorColumn","containsCell","column","startCell","startColumn","startRow","endColumn","endRow","canvasOptions","getContext","requestAnimationFrame","e","updateCanvasScale","updateRenderState","configureContext","onViewChanged","drawCanvas","Math","floor","parseFloat","style","scale","updateScrollBounds","prevRowCount","prevColumnCount","prevHeight","prevWidth","metricState","getMetrics","oldSelectedRanges","onSelectionChanged","i","trimSelectedRanges","slice","beginSelection","moveSelection","extendSelection","maximizePreviousRange","autoSelectRow","autoSelectColumn","lastSelectedRange","right","bottom","_lastSelectedRange$st","_lastSelectedRange$st2","_lastSelectedRange$en","_lastSelectedRange$en2","min","max","selectedRange","makeNormalized","equals","newRanges","selectedColumn","selectedRow","push","cellCount","rangeArraysEqual","newSelectedRanges","lastRange","contains","remainder","subtract","pop","splice","consolidate","nextCursor","nextCell","boundedRanges","setFocusRow","focusedRow","_userRowHeights$get","gridY","userRowHeights","rowHeight","tableHeight","halfViewportHeight","round","newTop","getLastTop","selectAll","moveCursor","deltaColumn","deltaRow","moveCursorInDirection","direction","DOWN","ranges","makeCell","_gridRange$nextCell","gridRange","moveViewToCell","keepCursorInView","topVisible","leftVisible","isFloatingRow","getTopForTopVisible","getTopForBottomVisible","isFloatingColumn","getLeftForLeftVisible","getLeftForRightVisible","setViewState","viewState","forceUpdate","hasVerticalBar","hasHorizontalBar","startEditing","isQuickEdit","selectionRange","value","modelColumn","cell","editValueForCell","isValidForCell","pasteValue","_this","_asyncToGenerator","isEditable","every","isEditableRange","edits","modelRanges","getModelRanges","forEachCell","text","setValues","tableWidth","_range$startColumn","_range$startRow","map","_range$startColumn2","_range$startRow2","forEach","_range$startColumn3","_range$startColumn4","_range$startRow3","onError","setValueForCell","setValueForRanges","isSelected","_selectedRange$endRow","_selectedRange$endCol","rowSelected","columnSelected","addDocumentCursor","document","documentElement","classList","remove","add","removeDocumentCursor","startDragTimer","mouseEvent","MouseEvent","nativeEvent","setTimeout","dragTimeout","clearTimeout","save","restore","focus","_this$canvas3","isFocused","activeElement","_this$canvas4","gridPoint","mouseHandler","onClick","stopPropagation","preventDefault","onContextMenu","functionName","keyHandler","result","_options$stopPropagat","_options$preventDefau","options","notifyMouseHandlers","updateCoordinates","addCursorToDocument","_options$stopPropagat2","_options$preventDefau2","button","defaultPrevented","scrollableContentWidth","scrollableViewportWidth","scrollableContentHeight","scrollableViewportHeight","deltaX","deltaY","getScrollDelta","barWidth","barHeight","maxLeftOffset","_metrics$allColumnWid","columnWidth","allColumnWidths","getVisibleColumnWidth","scrollSnapToColumn","_metrics$allColumnWid2","abs","maxTopOffset","_metrics$allRowHeight","allRowHeights","getVisibleRowHeight","scrollSnapToRow","_metrics$allRowHeight2","_ref5","fillRange","renderInputField","scrollX","gridX","allColumnXs","allRowYs","activeCellSelectionBorderWidth","w","h","leftBorderOffset","wrapperStyle","position","opacity","inputStyle","textAlign","textAlignForCell","isValid","children","className","error","onCancel","onChange","onDone","render","ref","onDoubleClick","onKeyDown","onKeyUp","onMouseDown","onMouseMove","onMouseLeave","tabIndex","alpha","moveOperations","onTokenClicked","token","open","href","contextTheme","userTheme"],"sources":["../src/Grid.tsx"],"sourcesContent":["/* eslint react/no-did-update-set-state: \"off\" */\nimport React, {\n type CSSProperties,\n PureComponent,\n type ReactNode,\n type RefObject,\n} from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport clamp from 'lodash.clamp';\nimport { assertNotNull, EMPTY_ARRAY, getChangedKeys } from '@deephaven/utils';\nimport GridMetricCalculator, {\n type GridMetricState,\n} from './GridMetricCalculator';\nimport type GridModel from './GridModel';\nimport {\n type GridMouseEvent,\n type GridMouseHandlerFunctionName,\n} from './GridMouseHandler';\nimport type GridMouseHandler from './GridMouseHandler';\nimport GridTheme, { type GridTheme as GridThemeType } from './GridTheme';\nimport GridRange, {\n type GridRangeIndex,\n SELECTION_DIRECTION,\n} from './GridRange';\nimport GridRenderer from './GridRenderer';\nimport GridUtils, {\n type GridPoint,\n isLinkToken,\n type Token,\n} from './GridUtils';\nimport {\n GridSelectionMouseHandler,\n GridColumnMoveMouseHandler,\n GridColumnSeparatorMouseHandler,\n GridHorizontalScrollBarMouseHandler,\n GridRowMoveMouseHandler,\n GridRowSeparatorMouseHandler,\n GridRowTreeMouseHandler,\n GridScrollBarCornerMouseHandler,\n GridVerticalScrollBarMouseHandler,\n EditMouseHandler,\n type GridSeparator,\n GridTokenMouseHandler,\n} from './mouse-handlers';\nimport './Grid.scss';\nimport {\n type GridKeyHandlerFunctionName,\n type GridKeyboardEvent,\n} from './KeyHandler';\nimport type KeyHandler from './KeyHandler';\nimport {\n EditKeyHandler,\n PasteKeyHandler,\n SelectionKeyHandler,\n TreeKeyHandler,\n} from './key-handlers';\nimport CellInputField from './CellInputField';\nimport PasteError from './errors/PasteError';\nimport {\n type Coordinate,\n type ModelIndex,\n type MoveOperation,\n type VisibleIndex,\n} from './GridMetrics';\nimport type GridMetrics from './GridMetrics';\nimport { isExpandableGridModel } from './ExpandableGridModel';\nimport {\n assertIsEditableGridModel,\n type EditOperation,\n isEditableGridModel,\n} from './EditableGridModel';\nimport { type EventHandlerResultOptions } from './EventHandlerResult';\nimport { assertIsDefined } from './errors';\nimport ThemeContext from './ThemeContext';\nimport { type DraggingColumn } from './mouse-handlers/GridColumnMoveMouseHandler';\nimport {\n type EditingCell,\n type GridRenderState,\n type EditingCellTextSelectionRange,\n} from './GridRendererTypes';\n\ntype LegacyCanvasRenderingContext2D = CanvasRenderingContext2D & {\n webkitBackingStorePixelRatio?: number;\n mozBackingStorePixelRatio?: number;\n msBackingStorePixelRatio?: number;\n oBackingStorePixelRatio?: number;\n backingStorePixelRatio?: number;\n};\n\nexport type GridProps = typeof Grid.defaultProps & {\n // Children to render in the grid\n children?: ReactNode;\n\n // Options to set on the canvas\n canvasOptions?: CanvasRenderingContext2DSettings;\n\n // Whether the grid should stick to the bottom or the right once scrolled to the end\n // Only matters with ticking grids\n isStickyBottom?: boolean;\n isStickyRight?: boolean;\n\n // Whether the grid is currently stuck to the bottom or the right\n isStuckToBottom?: boolean;\n isStuckToRight?: boolean;\n\n // Calculate all the metrics required for drawing the grid\n metricCalculator?: GridMetricCalculator;\n\n // The model to pull data from\n model: GridModel;\n\n // Optional key and mouse handlers\n keyHandlers?: readonly KeyHandler[];\n mouseHandlers?: readonly GridMouseHandler[];\n\n // Initial state of moved columns or rows\n movedColumns?: readonly MoveOperation[];\n movedRows?: readonly MoveOperation[];\n\n // Callback for if an error occurs\n onError?: (e: Error) => void;\n\n // Callback when the selection within the grid changes\n onSelectionChanged?: (ranges: readonly GridRange[]) => void;\n\n // Callback when the moved columns or rows have changed\n onMovedColumnsChanged?: (movedColumns: readonly MoveOperation[]) => void;\n onMovedRowsChanged?: (movedRows: readonly MoveOperation[]) => void;\n\n // Callback when a move operation is completed\n onMoveColumnComplete?: (movedColumns: readonly MoveOperation[]) => void;\n onMoveRowComplete?: (movedRows: readonly MoveOperation[]) => void;\n\n // Callback when the viewport has scrolled or changed\n onViewChanged?: (metrics: GridMetrics) => void;\n\n // Callback when a token is clicked\n // eslint-disable-next-line react/no-unused-prop-types\n onTokenClicked?: (token: Token) => void;\n\n // Renderer for the grid canvas\n renderer?: GridRenderer;\n\n // Optional state override to pass in to the metric and render state\n // Can be used to add custom properties as well\n stateOverride?: Record<string, unknown>;\n\n theme?: Partial<GridThemeType>;\n};\n\nexport type GridState = {\n // Top/left visible cell in the grid. Note that it's visible row/column index, not the model index (ie. if columns are re-ordered)\n top: VisibleIndex;\n left: VisibleIndex;\n\n // The scroll offset of the top/left cell. 0,0 means the cell is at the top left\n topOffset: number; // Should be less than the height of the row\n leftOffset: number; // Should be less than the width of the column\n\n // current column/row that user is dragging\n draggingColumn: DraggingColumn | null;\n draggingRow: VisibleIndex | null;\n\n // Offset when dragging a row\n draggingRowOffset: number | null;\n\n // When drawing header separators for resizing\n // Keeps hover style when mouse is in buffer before resize starts\n draggingColumnSeparator: GridSeparator | null;\n draggingRowSeparator: GridSeparator | null;\n\n // Dragging a scroll bar status\n isDraggingHorizontalScrollBar: boolean;\n isDraggingVerticalScrollBar: boolean;\n\n // Anything is performing a drag, for blocking hover rendering\n isDragging: boolean;\n\n // The coordinates of the mouse. May be outside of the canvas\n mouseX: number | null;\n mouseY: number | null;\n\n // Move operations the user has performed on this grids columns/rows\n movedColumns: readonly MoveOperation[];\n movedRows: readonly MoveOperation[];\n\n // Cursor (highlighted cell) location and active selected range\n cursorRow: VisibleIndex | null;\n cursorColumn: VisibleIndex | null;\n selectionStartRow: VisibleIndex | null;\n selectionStartColumn: VisibleIndex | null;\n selectionEndRow: VisibleIndex | null;\n selectionEndColumn: VisibleIndex | null;\n\n // Currently selected ranges and previously selected ranges\n // Store the previously selected ranges to determine if the new selection should\n // deselect again (if it's the same range)\n selectedRanges: readonly GridRange[];\n lastSelectedRanges: readonly GridRange[];\n\n // The mouse cursor style to use when hovering over the grid element\n cursor: string | null;\n\n // { column: number, row: number, selectionRange: [number, number], value: string | null, isQuickEdit?: boolean }\n // The cell that is currently being edited\n editingCell: EditingCell | null;\n\n // Whether we're stuck to the bottom or the right\n isStuckToBottom: boolean;\n isStuckToRight: boolean;\n\n /**\n * Errors thrown during a render animation frame.\n * These are not caught by the grid panel,\n * so we need to throw them in componentDidUpdate\n */\n renderError?: unknown;\n};\n\n/**\n * High performance, extendible, themeable grid component.\n * Architectured to be fast and handle billions of rows/columns by default.\n * The base model does not provide support for sorting, filtering, etc.\n * To get that functionality, extend GridModel/GridRenderer, and add onClick/onContextMenu handlers to implement your own sort.\n *\n * Extend GridModel with your own data model to provide the data for the grid.\n * Extend GridTheme to change the appearance if the grid. See GridTheme for all the settable values.\n * Extend GridMetricCalculator to provide different metrics for the grid, such as column sizing, header sizing, etc.\n * Extend GridRenderer to have complete control over the rendering process. Can override just one method such as drawColumnHeader, or override the whole drawCanvas process.\n *\n * Add an onViewChanged callback to page in/out data as user moves around the grid\n * Can also add onClick and onContextMenu handlers to add custom functionality and menus.\n */\nclass Grid extends PureComponent<GridProps, GridState> {\n static contextType = ThemeContext;\n\n static defaultProps = {\n canvasOptions: { alpha: false } as CanvasRenderingContext2DSettings,\n isStickyBottom: false,\n isStickyRight: false,\n isStuckToBottom: false,\n isStuckToRight: false,\n keyHandlers: EMPTY_ARRAY as readonly KeyHandler[],\n mouseHandlers: EMPTY_ARRAY as readonly GridMouseHandler[],\n movedColumns: EMPTY_ARRAY as readonly MoveOperation[],\n movedRows: EMPTY_ARRAY as readonly MoveOperation[],\n onError: (): void => undefined,\n onSelectionChanged: (): void => undefined,\n onMovedColumnsChanged: (moveOperations: readonly MoveOperation[]): void =>\n undefined,\n onMoveColumnComplete: (): void => undefined,\n onMovedRowsChanged: (): void => undefined,\n onMoveRowComplete: (): void => undefined,\n onViewChanged: (metrics: GridMetrics): void => undefined,\n onTokenClicked: (token: Token): void => {\n if (isLinkToken(token)) {\n window.open(token.href, '_blank', 'noopener,noreferrer');\n }\n },\n stateOverride: {} as Record<string, unknown>,\n theme: {\n autoSelectColumn: false,\n autoSelectRow: false,\n } as Partial<GridThemeType>,\n };\n\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 pixelsPerLine = 100 / 3;\n\n static dragTimeout = 1000;\n\n static getTheme = memoize(\n (\n contextTheme: Partial<GridThemeType>,\n userTheme: Partial<GridThemeType>\n ) => ({\n ...GridTheme,\n ...contextTheme,\n ...userTheme,\n })\n );\n\n /**\n * On some devices there may be different scaling required for high DPI. Get the scale required for the canvas.\n * @param context The canvas context\n * @returns The scale to use\n */\n static getScale(context: CanvasRenderingContext2D): number {\n const devicePixelRatio = window.devicePixelRatio || 1;\n\n // backingStorePixelRatio is deprecated, but check it just in case\n const legacyContext = context as LegacyCanvasRenderingContext2D;\n\n const backingStorePixelRatio =\n // Not worth converting to a massive if structure\n // Converting would reduce readability and maintainability\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n legacyContext.webkitBackingStorePixelRatio ??\n legacyContext.mozBackingStorePixelRatio ??\n legacyContext.msBackingStorePixelRatio ??\n legacyContext.oBackingStorePixelRatio ??\n legacyContext.backingStorePixelRatio ??\n 1;\n return devicePixelRatio / backingStorePixelRatio;\n }\n\n /**\n * Get the class name from the cursor provided\n * @param cursor The grid cursor to use\n * @returns Class name with the grid-cursor prefix or null if no cursor provided\n */\n static getCursorClassName(cursor: string | null): string | null {\n return cursor != null && cursor !== '' ? `grid-cursor-${cursor}` : null;\n }\n\n // Need to disable react/sort-comp so I can put the fields here\n /* eslint-disable react/sort-comp */\n renderer: GridRenderer;\n\n metricCalculator: GridMetricCalculator;\n\n canvas: HTMLCanvasElement | null;\n\n canvasContext: CanvasRenderingContext2D | null;\n\n // The wrapper element for the canvas, used for sizing\n canvasWrapper: RefObject<HTMLDivElement>;\n\n // Listen for resizing of the element and update the canvas appropriately\n resizeObserver: ResizeObserver;\n\n // We draw the canvas on the next animation frame, keep track of the next one\n animationFrame: number | null;\n\n // Keep track of previous metrics and new metrics for comparison\n prevMetrics: GridMetrics | null;\n\n metrics: GridMetrics | null;\n\n renderState: GridRenderState;\n\n // Track the cursor that is currently added to the document\n // Add to document so that when dragging the cursor stays, even if mouse leaves the canvas\n // Note: on document, not body so that cursor styling can be combined with\n // blocked pointer events that would otherwise prevent cursor styling from showing\n documentCursor: string | null;\n\n dragTimer: ReturnType<typeof setTimeout> | null;\n\n keyHandlers: readonly KeyHandler[];\n\n mouseHandlers: readonly GridMouseHandler[];\n\n /* eslint-enable react/sort-comp */\n\n constructor(props: GridProps) {\n super(props);\n\n this.handleClick = this.handleClick.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n this.handleEditCellCancel = this.handleEditCellCancel.bind(this);\n this.handleEditCellChange = this.handleEditCellChange.bind(this);\n this.handleEditCellCommit = this.handleEditCellCommit.bind(this);\n this.handleDoubleClick = this.handleDoubleClick.bind(this);\n this.notifyKeyboardHandlers = this.notifyKeyboardHandlers.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleKeyUp = this.handleKeyUp.bind(this);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseDrag = this.handleMouseDrag.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleMouseUp = this.handleMouseUp.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleWheel = this.handleWheel.bind(this);\n this.getSelectedRanges = this.getSelectedRanges.bind(this);\n\n const {\n isStuckToBottom,\n isStuckToRight,\n metricCalculator,\n movedColumns,\n movedRows,\n renderer,\n } = props;\n\n this.renderer = renderer || new GridRenderer();\n this.metricCalculator = metricCalculator || new GridMetricCalculator();\n\n this.canvas = null;\n this.canvasContext = null;\n this.canvasWrapper = React.createRef();\n this.resizeObserver = new window.ResizeObserver(this.handleResize);\n this.animationFrame = null;\n\n this.prevMetrics = null;\n this.metrics = null;\n\n this.renderState = {} as GridRenderState;\n\n // Track the cursor that is currently added to the document\n // Add to document so that when dragging the cursor stays, even if mouse leaves the canvas\n // Note: on document, not body so that cursor styling can be combined with\n // blocked pointer events that would otherwise prevent cursor styling from showing\n this.documentCursor = null;\n\n this.dragTimer = null;\n\n // specify handler ordering, such that any extensions can insert handlers in between\n this.keyHandlers = [\n new EditKeyHandler(400),\n new PasteKeyHandler(450),\n new SelectionKeyHandler(500),\n new TreeKeyHandler(900),\n ];\n this.mouseHandlers = [\n new GridRowSeparatorMouseHandler(100),\n new GridColumnSeparatorMouseHandler(200),\n new GridRowMoveMouseHandler(300),\n new GridColumnMoveMouseHandler(400),\n new EditMouseHandler(450),\n new GridVerticalScrollBarMouseHandler(500),\n new GridHorizontalScrollBarMouseHandler(600),\n new GridScrollBarCornerMouseHandler(700),\n new GridRowTreeMouseHandler(800),\n new GridTokenMouseHandler(875),\n new GridSelectionMouseHandler(900),\n ];\n\n this.state = {\n // Top/left visible cell in the grid. Note that it's visible row/column index, not the model index (ie. if columns are re-ordered)\n top: 0,\n left: 0,\n\n // The scroll offset of the top/left cell. 0,0 means the cell is at the top left\n // Should be less than the width of the column\n topOffset: 0,\n leftOffset: 0,\n\n // current column/row that user is dragging\n draggingColumn: null,\n draggingRow: null,\n\n // Offset when dragging a row\n draggingRowOffset: null,\n\n // When drawing header separators for resizing\n draggingColumnSeparator: null,\n draggingRowSeparator: null,\n\n isDraggingHorizontalScrollBar: false,\n isDraggingVerticalScrollBar: false,\n\n // Anything is performing a drag, for blocking hover rendering\n isDragging: false,\n\n // The coordinates of the mouse. May be outside of the canvas\n mouseX: null,\n mouseY: null,\n\n // Move operations the user has performed on this grids columns/rows\n movedColumns,\n movedRows,\n\n // Cursor (highlighted cell) location and active selected range\n cursorRow: null,\n cursorColumn: null,\n selectionStartRow: null,\n selectionStartColumn: null,\n selectionEndRow: null,\n selectionEndColumn: null,\n\n // Currently selected ranges and previously selected ranges\n // Store the previously selected ranges to determine if the new selection should\n // deselect again (if it's the same range)\n selectedRanges: EMPTY_ARRAY,\n lastSelectedRanges: EMPTY_ARRAY,\n\n // The mouse cursor style to use when hovering over the grid element\n cursor: null,\n\n // { column: number, row: number, selectionRange: [number, number], value: string | null, isQuickEdit?: boolean }\n // The cell that is currently being edited\n editingCell: null,\n\n isStuckToBottom,\n isStuckToRight,\n };\n }\n\n componentDidMount(): void {\n this.initContext();\n\n // Need to explicitly add wheel event to canvas so we can preventDefault/avoid passive listener issue\n // Otherwise React attaches listener at doc level and you can't prevent default\n // https://github.com/facebook/react/issues/14856\n this.canvas?.addEventListener('wheel', this.handleWheel, {\n passive: false,\n });\n if (this.canvasWrapper.current != null) {\n this.resizeObserver.observe(this.canvasWrapper.current);\n }\n\n this.updateCanvas();\n\n // apply on mount, so that it works with a static model\n // https://github.com/deephaven/web-client-ui/issues/581\n const { isStuckToBottom, isStuckToRight } = this.props;\n if (isStuckToBottom) {\n this.scrollToBottom();\n }\n if (isStuckToRight) {\n this.scrollToRight();\n }\n }\n\n componentDidUpdate(prevProps: GridProps, prevState: GridState): void {\n const { renderError } = this.state;\n\n // Render errors mean we can't recover\n if (renderError != null) {\n throw renderError;\n }\n\n const changedProps = getChangedKeys(prevProps, this.props);\n const changedState = getChangedKeys(prevState, this.state);\n // We don't need to bother re-checking any of the metrics if only the children have changed\n if (\n changedProps.length === 1 &&\n changedProps[0] === 'children' &&\n changedState.length === 0\n ) {\n return;\n }\n\n const {\n isStickyBottom,\n isStickyRight,\n movedColumns,\n movedRows,\n onMovedColumnsChanged,\n onMoveColumnComplete,\n onMovedRowsChanged,\n onMoveRowComplete,\n } = this.props;\n\n const {\n isStickyBottom: prevIsStickyBottom,\n isStickyRight: prevIsStickyRight,\n movedColumns: prevPropMovedColumns,\n movedRows: prevPropMovedRows,\n } = prevProps;\n const {\n movedColumns: prevStateMovedColumns,\n movedRows: prevStateMovedRows,\n } = prevState;\n const {\n draggingColumn,\n draggingRow,\n movedColumns: currentStateMovedColumns,\n movedRows: currentStateMovedRows,\n } = this.state;\n\n if (prevPropMovedColumns !== movedColumns) {\n this.setState({ movedColumns });\n }\n\n if (prevPropMovedRows !== movedRows) {\n this.setState({ movedRows });\n }\n\n if (prevStateMovedColumns !== currentStateMovedColumns) {\n onMovedColumnsChanged(currentStateMovedColumns);\n }\n\n if (prevState.draggingColumn != null && draggingColumn == null) {\n onMoveColumnComplete(currentStateMovedColumns);\n }\n\n if (prevStateMovedRows !== currentStateMovedRows) {\n onMovedRowsChanged(currentStateMovedRows);\n }\n\n if (prevState.draggingRow != null && draggingRow == null) {\n onMoveRowComplete(currentStateMovedRows);\n }\n\n if (isStickyBottom !== prevIsStickyBottom) {\n this.setState({ isStuckToBottom: false });\n }\n\n if (isStickyRight !== prevIsStickyRight) {\n this.setState({ isStuckToRight: false });\n }\n\n this.updateMetrics();\n\n this.requestUpdateCanvas();\n\n this.checkStickyScroll();\n\n if (this.validateSelection()) {\n this.checkSelectionChange(prevState);\n }\n }\n\n componentWillUnmount(): void {\n if (this.animationFrame != null) {\n cancelAnimationFrame(this.animationFrame);\n }\n\n this.canvas?.removeEventListener('wheel', this.handleWheel);\n\n window.removeEventListener(\n 'mousemove',\n this.handleMouseDrag as unknown as EventListenerOrEventListenerObject,\n true\n );\n window.removeEventListener(\n 'mouseup',\n this.handleMouseUp as unknown as EventListenerOrEventListenerObject,\n true\n );\n this.resizeObserver.disconnect();\n\n this.stopDragTimer();\n }\n\n getTheme(): GridThemeType {\n const { theme } = this.props;\n return Grid.getTheme(this.context, theme);\n }\n\n getGridPointFromEvent(event: GridMouseEvent): GridPoint {\n assertIsDefined(this.canvas);\n\n const rect = this.canvas.getBoundingClientRect();\n const x = event.clientX - rect.left;\n const y = event.clientY - rect.top;\n return this.getGridPointFromXY(x, y);\n }\n\n getGridPointFromXY(x: Coordinate, y: Coordinate): GridPoint {\n if (!this.metrics) throw new Error('metrics must be set');\n\n return GridUtils.getGridPointFromXY(x, y, this.metrics);\n }\n\n getMetricState(state = this.state): GridMetricState {\n const theme = this.getTheme();\n const { model, stateOverride } = this.props;\n if (!this.canvasContext || !this.canvas) {\n throw new Error('Canvas and context must be defined to get metrics');\n }\n const context = this.canvasContext;\n const width = this.canvas.clientWidth;\n const height = this.canvas.clientHeight;\n const {\n left,\n top,\n leftOffset,\n topOffset,\n movedColumns,\n movedRows,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n draggingColumn,\n } = state;\n\n return {\n left,\n top,\n leftOffset,\n topOffset,\n width,\n height,\n context,\n theme,\n model,\n movedColumns,\n movedRows,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n draggingColumn,\n ...stateOverride,\n };\n }\n\n getCachedKeyHandlers = memoize((keyHandlers: readonly KeyHandler[]) =>\n [...keyHandlers, ...this.keyHandlers].sort((a, b) => a.order - b.order)\n );\n\n getKeyHandlers(): readonly KeyHandler[] {\n const { keyHandlers } = this.props;\n return this.getCachedKeyHandlers(keyHandlers);\n }\n\n getCachedMouseHandlers = memoize(\n (mouseHandlers: readonly GridMouseHandler[]): readonly GridMouseHandler[] =>\n [...mouseHandlers, ...this.mouseHandlers].sort(\n (a, b) => a.order - b.order\n )\n );\n\n getMouseHandlers(): readonly GridMouseHandler[] {\n const { mouseHandlers } = this.props;\n return this.getCachedMouseHandlers(mouseHandlers);\n }\n\n /**\n * Translate from the provided visible index to the model index\n * @param columnIndex The column index to get the model for\n * @returns The model index\n */\n getModelColumn(columnIndex: VisibleIndex): ModelIndex {\n const modelIndex = this.metrics?.modelColumns?.get(columnIndex);\n if (modelIndex === undefined) {\n throw new Error(`Unable to get ModelIndex for column ${columnIndex}`);\n }\n return modelIndex;\n }\n\n /**\n * Translate from the provided visible index to the model index\n * @param rowIndex The row index to get the model for\n * @returns The model index\n */\n getModelRow(rowIndex: VisibleIndex): ModelIndex {\n const modelIndex = this.metrics?.modelRows?.get(rowIndex);\n if (modelIndex === undefined) {\n throw new Error(`Unable to get ModelIndex for row ${rowIndex}`);\n }\n return modelIndex;\n }\n\n /**\n * Toggle a row between expanded and collapsed states\n * @param row The row to toggle expansion for\n * @param expandDescendants True if nested rows should be expanded, false otherwise\n */\n toggleRowExpanded(row: VisibleIndex, expandDescendants = false): void {\n const modelRow = this.getModelRow(row);\n const { model } = this.props;\n // We only want to set expansion if the row is expandable\n // If it's not, still move the cursor to that position, as it may be outside of the current viewport and we don't know if it's expandable yet\n if (isExpandableGridModel(model) && model.isRowExpandable(modelRow)) {\n model.setRowExpanded(\n modelRow,\n !model.isRowExpanded(modelRow),\n expandDescendants\n );\n }\n this.clearSelectedRanges();\n this.commitSelection(); // Need to commit before moving in case we're selecting same row again\n this.moveCursorToPosition(0, row);\n this.commitSelection();\n\n this.setState({ isStuckToBottom: false });\n }\n\n /**\n * Scrolls to bottom, if not already at bottom\n */\n scrollToBottom(): void {\n if (!this.metrics) return;\n const { bottomVisible, rowCount, top, lastTop } = this.metrics;\n if ((bottomVisible < rowCount - 1 && bottomVisible > 0) || top > lastTop) {\n this.setState({ top: lastTop });\n }\n }\n\n /**\n * Scrolls to right, if not already at right\n */\n scrollToRight(): void {\n if (!this.metrics) return;\n const { rightVisible, columnCount, left, lastLeft } = this.metrics;\n if (\n (rightVisible < columnCount - 1 && rightVisible > 0) ||\n left > lastLeft\n ) {\n this.setState({ left: lastLeft });\n }\n }\n\n /**\n * Allows the selected ranges to be set programatically\n * Will update the cursor and selection start/end based on the new ranges\n * @param gridRanges The new selected ranges to set\n */\n setSelectedRanges(gridRanges: readonly GridRange[]): void {\n const { model } = this.props;\n const { columnCount, rowCount } = model;\n const { cursorRow, cursorColumn, selectedRanges } = this.state;\n this.setState({\n selectedRanges: gridRanges,\n lastSelectedRanges: selectedRanges,\n });\n if (gridRanges.length > 0) {\n const range = GridRange.boundedRange(\n gridRanges[0],\n columnCount,\n rowCount\n );\n let newCursorRow = cursorRow;\n let newCursorColumn = cursorColumn;\n if (!range.containsCell(cursorColumn, cursorRow)) {\n ({ row: newCursorRow, column: newCursorColumn } = range.startCell());\n }\n\n this.setState({\n selectionStartColumn: range.startColumn,\n selectionStartRow: range.startRow,\n selectionEndColumn: range.endColumn,\n selectionEndRow: range.endRow,\n cursorColumn: newCursorColumn,\n cursorRow: newCursorRow,\n });\n }\n }\n\n initContext(): void {\n const { canvas } = this;\n const { canvasOptions } = this.props;\n\n if (!canvas) throw new Error('Canvas not set');\n\n this.canvasContext = canvas.getContext('2d', canvasOptions);\n }\n\n requestUpdateCanvas(): void {\n if (this.animationFrame != null) {\n return;\n }\n\n this.animationFrame = requestAnimationFrame(() => {\n this.animationFrame = null;\n\n try {\n this.updateCanvas();\n } catch (e) {\n // Errors thrown from the animation frame are uncaught by the grid panel\n this.setState({ renderError: e });\n }\n });\n }\n\n updateCanvas(): void {\n this.updateCanvasScale();\n\n this.updateMetrics();\n\n this.updateRenderState();\n\n const { canvasContext, metrics, renderState } = this;\n assertNotNull(canvasContext);\n assertNotNull(metrics);\n assertNotNull(renderState);\n\n this.renderer.configureContext(canvasContext, renderState);\n\n const { onViewChanged } = this.props;\n onViewChanged(metrics);\n\n this.drawCanvas(metrics);\n }\n\n private updateCanvasScale(): void {\n const { canvas, canvasContext, canvasWrapper } = this;\n if (!canvas) throw new Error('canvas not set');\n if (!canvasContext) throw new Error('canvasContext not set');\n if (!canvasWrapper.current) throw new Error('canvasWrapper not set');\n\n // the parent wrapper has 100% width/height, and is used for determining size\n // we don't want to stretch the canvas to 100%, to avoid fractional pixels.\n // A wrapper element must be used for sizing, and canvas size must be\n // set manually to a floored value in css and a scaled value in width/height\n const rect = canvasWrapper.current.getBoundingClientRect();\n const width = Math.floor(rect.width);\n const height = Math.floor(rect.height);\n\n // avoid triggering a dom re-calc if size hasn't changed\n if (\n parseFloat(canvas.style.width) === width &&\n parseFloat(canvas.style.height) === height\n ) {\n return;\n }\n\n const scale = Grid.getScale(canvasContext);\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n canvas.width = width * scale;\n canvas.height = height * scale;\n canvasContext.scale(scale, scale);\n }\n\n updateScrollBounds(): void {\n if (!this.metrics) throw new Error('metrics not set');\n const { left, top } = this.state;\n const { lastLeft, lastTop } = this.metrics;\n if (left > lastLeft) {\n this.setState({ left: lastLeft, leftOffset: 0 });\n }\n if (top > lastTop) {\n this.setState({ top: lastTop, topOffset: 0 });\n }\n }\n\n /**\n * Compares the current metrics with the previous metrics to see if we need to scroll when it is stuck to the bottom or the right\n */\n checkStickyScroll(): void {\n if (!this.metrics) {\n return;\n }\n\n if (this.prevMetrics) {\n const { rowCount, columnCount, height, width } = this.metrics;\n const {\n rowCount: prevRowCount,\n columnCount: prevColumnCount,\n height: prevHeight,\n width: prevWidth,\n } = this.prevMetrics;\n\n if (prevRowCount !== rowCount || height !== prevHeight) {\n const { isStuckToBottom } = this.state;\n if (isStuckToBottom) {\n this.scrollToBottom();\n }\n }\n\n if (prevColumnCount !== columnCount || width !== prevWidth) {\n const { isStuckToRight } = this.state;\n if (isStuckToRight) {\n this.scrollToRight();\n }\n }\n }\n this.prevMetrics = this.metrics;\n }\n\n updateMetrics(state = this.state): GridMetrics {\n this.prevMetrics = this.metrics;\n\n const { metricCalculator } = this;\n const metricState = this.getMetricState(state);\n this.metrics = metricCalculator.getMetrics(metricState);\n this.updateScrollBounds();\n\n return this.metrics;\n }\n\n /**\n * Check if the selection state has changed, and call the onSelectionChanged callback if they have\n * @param prevState The previous grid state\n */\n checkSelectionChange(prevState: GridState): void {\n const { selectedRanges: oldSelectedRanges } = prevState;\n const { selectedRanges } = this.state;\n\n if (selectedRanges !== oldSelectedRanges) {\n const { onSelectionChanged } = this.props;\n onSelectionChanged(selectedRanges);\n }\n }\n\n /**\n * Validate the current selection, and reset if it is invalid\n * @returns True if the selection is valid, false if the selection was invalid and has been reset\n */\n validateSelection(): boolean {\n const { model } = this.props;\n const { selectedRanges } = this.state;\n const { columnCount, rowCount } = model;\n\n for (let i = 0; i < selectedRanges.length; i += 1) {\n const range = selectedRanges[i];\n if (\n (range.endColumn != null && range.endColumn >= columnCount) ||\n (range.endRow != null && range.endRow >= rowCount)\n ) {\n // Just clear the selection rather than trying to trim it.\n this.setState({ selectedRanges: [], lastSelectedRanges: [] });\n return false;\n }\n }\n return true;\n }\n\n /**\n * Clears all selected ranges\n */\n clearSelectedRanges(): void {\n const { selectedRanges } = this.state;\n this.setState({ selectedRanges: [], lastSelectedRanges: selectedRanges });\n }\n\n /** Clears all but the last selected range */\n trimSelectedRanges(): void {\n const { selectedRanges } = this.state;\n if (selectedRanges.length > 0) {\n this.setState({\n selectedRanges: selectedRanges.slice(selectedRanges.length - 1),\n });\n }\n }\n\n /** Gets the selected ranges */\n getSelectedRanges(): readonly GridRange[] {\n const { selectedRanges } = this.state;\n return selectedRanges;\n }\n\n /**\n * Begin a selection operation at the provided location\n * @param column Column where the selection is beginning\n * @param row Row where the selection is beginning\n */\n beginSelection(column: GridRangeIndex, row: GridRangeIndex): void {\n this.setState({\n selectionStartColumn: column,\n selectionStartRow: row,\n selectionEndColumn: column,\n selectionEndRow: row,\n cursorColumn: column,\n cursorRow: row,\n });\n }\n\n /**\n * Moves the selection to the cell specified\n * @param column The column index to move the cursor to\n * @param row The row index to move the cursor to\n * @param extendSelection Whether to extend the current selection (eg. holding Shift)\n * @param maximizePreviousRange When true, maximize/add to the previous range only, ignoring where the selection was started.\n */\n moveSelection(\n column: GridRangeIndex,\n row: GridRangeIndex,\n extendSelection = false,\n maximizePreviousRange = false\n ): void {\n this.setState(state => {\n const { selectedRanges, selectionStartRow, selectionStartColumn } = state;\n const { theme } = this.props;\n const { autoSelectRow, autoSelectColumn } = theme;\n\n if (extendSelection && selectedRanges.length > 0) {\n const lastSelectedRange = selectedRanges[selectedRanges.length - 1];\n let left = null;\n let top = null;\n let right = null;\n let bottom = null;\n if (maximizePreviousRange) {\n left =\n autoSelectRow !== undefined && autoSelectRow\n ? null\n : Math.min(column ?? 0, lastSelectedRange.startColumn ?? 0);\n top =\n autoSelectColumn !== undefined && autoSelectColumn\n ? null\n : Math.min(row ?? 0, lastSelectedRange.startRow ?? 0);\n right =\n autoSelectRow !== undefined && autoSelectRow\n ? null\n : Math.max(column ?? 0, lastSelectedRange.endColumn ?? 0);\n bottom =\n autoSelectColumn !== undefined && autoSelectColumn\n ? null\n : Math.max(row ?? 0, lastSelectedRange.endRow ?? 0);\n } else {\n left = lastSelectedRange.startColumn;\n top = lastSelectedRange.startRow;\n\n if (selectionStartColumn != null || selectionStartRow != null) {\n if (autoSelectRow === undefined || !autoSelectRow) {\n left = selectionStartColumn;\n }\n if (autoSelectColumn === undefined || !autoSelectColumn) {\n top = selectionStartRow;\n }\n }\n right = autoSelectRow !== undefined && autoSelectRow ? null : column;\n bottom =\n autoSelectColumn !== undefined && autoSelectColumn ? null : row;\n }\n const selectedRange = GridRange.makeNormalized(\n left,\n top,\n right,\n bottom\n );\n\n if (lastSelectedRange.equals(selectedRange)) {\n return null;\n }\n\n const newRanges = [...selectedRanges];\n newRanges[newRanges.length - 1] = selectedRange;\n return {\n selectedRanges: newRanges,\n selectionEndColumn: column,\n selectionEndRow: row,\n };\n }\n const newRanges = [...selectedRanges];\n const selectedColumn =\n autoSelectRow !== undefined && autoSelectRow ? null : column;\n const selectedRow =\n autoSelectColumn !== undefined && autoSelectColumn ? null : row;\n\n newRanges.push(\n GridRange.makeNormalized(\n selectedColumn,\n selectedRow,\n selectedColumn,\n selectedRow\n )\n );\n return {\n selectedRanges: newRanges,\n selectionEndColumn: column,\n selectionEndRow: row,\n };\n });\n }\n\n /**\n * Commits the last selected range to the selected ranges.\n * First checks if the last range is completely contained within another range, and if it\n * is then it blows those ranges apart.\n * Then it consolidates all the selected ranges, reducing them.\n */\n commitSelection(): void {\n this.setState((state: GridState) => {\n const { theme } = this.props;\n const { autoSelectRow } = theme;\n const { selectedRanges, lastSelectedRanges, cursorRow, cursorColumn } =\n state;\n\n if (\n selectedRanges.length === 1 &&\n (autoSelectRow !== undefined && autoSelectRow\n ? GridRange.rowCount(selectedRanges) === 1\n : GridRange.cellCount(selectedRanges) === 1) &&\n GridRange.rangeArraysEqual(selectedRanges, lastSelectedRanges)\n ) {\n // If it's the exact same single selection, then deselect.\n // For if we click on one cell multiple times.\n return {\n selectedRanges: [],\n lastSelectedRanges: [],\n cursorColumn: null,\n cursorRow: null,\n };\n }\n\n let newSelectedRanges = selectedRanges.slice();\n if (newSelectedRanges.length > 1) {\n // Check if the latest selection is entirely within a previously selected range\n // If that's the case, then deselect that section instead\n const lastRange = newSelectedRanges[newSelectedRanges.length - 1];\n for (let i = 0; i < newSelectedRanges.length - 1; i += 1) {\n const selectedRange = newSelectedRanges[i];\n if (selectedRange.contains(lastRange)) {\n // We found a match, now remove the two matching ranges, and add back\n // the remainder of the two\n const remainder = selectedRange.subtract(lastRange);\n newSelectedRanges.pop();\n newSelectedRanges.splice(i, 1);\n newSelectedRanges = newSelectedRanges.concat(remainder);\n break;\n }\n }\n\n newSelectedRanges = GridRange.consolidate(newSelectedRanges);\n }\n\n let newCursorColumn = cursorColumn;\n let newCursorRow = cursorRow;\n if (!GridRange.containsCell(newSelectedRanges, cursorColumn, cursorRow)) {\n const { model } = this.props;\n const { columnCount, rowCount } = model;\n const nextCursor = GridRange.nextCell(\n GridRange.boundedRanges(selectedRanges, columnCount, rowCount)\n );\n if (nextCursor != null) {\n ({ column: newCursorColumn, row: newCursorRow } = nextCursor);\n } else {\n newCursorColumn = null;\n newCursorRow = null;\n }\n }\n\n if (newSelectedRanges.length === 0) {\n newCursorColumn = null;\n newCursorRow = null;\n }\n\n return {\n cursorRow: newCursorRow,\n cursorColumn: newCursorColumn,\n selectedRanges: newSelectedRanges,\n lastSelectedRanges: selectedRanges,\n };\n });\n }\n\n setFocusRow(focusedRow: number): void {\n if (!this.metrics || !this.prevMetrics) {\n return;\n }\n\n const { gridY, height, lastTop, userRowHeights, rowHeight } = this.metrics;\n\n const tableHeight = height - gridY;\n\n const halfViewportHeight =\n Math.round(tableHeight / 2) +\n (userRowHeights.get(focusedRow) ?? rowHeight);\n\n const metricState = this.getMetricState();\n const newTop = this.metricCalculator.getLastTop(\n metricState,\n focusedRow + 1,\n halfViewportHeight\n );\n this.setState({\n top: Math.min(lastTop, newTop),\n selectedRanges: [new GridRange(null, focusedRow, null, focusedRow)],\n isStuckToBottom: false,\n });\n const { cursorColumn } = this.state;\n this.moveCursorToPosition(cursorColumn, focusedRow, false, false);\n }\n\n /**\n * Set the selection to the entire grid\n */\n selectAll(): void {\n const { model, theme } = this.props;\n const { autoSelectRow, autoSelectColumn } = theme;\n\n const top = autoSelectColumn !== undefined && autoSelectColumn ? null : 0;\n const bottom =\n autoSelectColumn !== undefined && autoSelectColumn\n ? null\n : model.rowCount - 1;\n const left = autoSelectRow !== undefined && autoSelectRow ? null : 0;\n const right =\n autoSelectRow !== undefined && autoSelectRow\n ? null\n : model.columnCount - 1;\n this.setSelectedRanges([new GridRange(left, top, right, bottom)]);\n }\n\n /**\n * Move the cursor in relation to the current cursor position\n * @param deltaColumn Number of columns to move the cursor\n * @param deltaRow Number of rows to move the cursor\n * @param extendSelection True if the current selection should be extended, false to start a new selection\n */\n moveCursor(\n deltaColumn: number,\n deltaRow: number,\n extendSelection: boolean\n ): void {\n const { cursorRow, cursorColumn, selectionEndColumn, selectionEndRow } =\n this.state;\n const column = extendSelection ? selectionEndColumn : cursorColumn;\n const row = extendSelection ? selectionEndRow : cursorRow;\n if (row === null || column === null) {\n const { left, top } = this.state;\n this.moveCursorToPosition(left, top, extendSelection);\n } else {\n const { model } = this.props;\n const { columnCount, rowCount } = model;\n\n const left = clamp(column + deltaColumn, 0, columnCount - 1);\n const top = clamp(row + deltaRow, 0, rowCount - 1);\n this.moveCursorToPosition(left, top, extendSelection);\n }\n }\n\n /**\n * Move the cursor in the provided selection direction\n * @param direction The direction to move the cursor in\n */\n moveCursorInDirection(direction = GridRange.SELECTION_DIRECTION.DOWN): void {\n const { model } = this.props;\n const { columnCount, rowCount } = model;\n const { cursorRow, cursorColumn, selectedRanges } = this.state;\n const ranges =\n selectedRanges.length > 0\n ? selectedRanges\n : [GridRange.makeCell(cursorColumn, cursorRow)];\n let nextCursor = null;\n if (ranges.length === 1 && GridRange.cellCount(ranges) === 1) {\n // If we only have one cell selected, we want to update the cursor and we want to update the selected cells\n const gridRange = new GridRange(0, 0, columnCount - 1, rowCount - 1);\n nextCursor =\n gridRange.nextCell(cursorColumn, cursorRow, direction) ??\n gridRange.startCell(direction);\n } else {\n nextCursor = GridRange.nextCell(\n GridRange.boundedRanges(ranges, columnCount, rowCount),\n cursorColumn,\n cursorRow,\n direction\n );\n }\n\n if (nextCursor != null) {\n const { column, row } = nextCursor;\n this.setState({\n cursorColumn: column,\n cursorRow: row,\n });\n\n if (!GridRange.containsCell(selectedRanges, column, row)) {\n this.setState({\n selectedRanges: [GridRange.makeCell(column, row)],\n selectionStartColumn: column,\n selectionStartRow: row,\n selectionEndColumn: column,\n selectionEndRow: row,\n });\n }\n\n this.moveViewToCell(nextCursor.column, nextCursor.row);\n }\n }\n\n /**\n * Move a cursor to the specified position in the grid.\n * @param column The column index to move the cursor to\n * @param row The row index to move the cursor to\n * @param extendSelection Whether to extend the current selection (eg. holding Shift)\n * @param keepCursorInView Whether to move the viewport so that the cursor is in view\n * @param maximizePreviousRange With this and `extendSelection` true, it will maximize/add to the previous range only, ignoring where the selection was started\n */\n moveCursorToPosition(\n column: GridRangeIndex,\n row: GridRangeIndex,\n extendSelection = false,\n keepCursorInView = true,\n maximizePreviousRange = false\n ): void {\n if (!extendSelection) {\n this.beginSelection(column, row);\n }\n\n this.moveSelection(column, row, extendSelection, maximizePreviousRange);\n\n if (keepCursorInView) {\n this.moveViewToCell(column, row);\n }\n }\n\n /**\n * Moves the view to make the specified cell visible\n *\n * @param column The column index to bring into view\n * @param row The row index to bring into view\n */\n moveViewToCell(column: GridRangeIndex, row: GridRangeIndex): void {\n if (!this.metrics) throw new Error('metrics not set');\n\n const { metricCalculator } = this;\n const { bottomVisible, rightVisible, topVisible, leftVisible } =\n this.metrics;\n const metricState = this.getMetricState(this.state);\n let { top, left, topOffset, leftOffset } = this.state;\n\n if (row != null && !GridUtils.isFloatingRow(row, this.metrics)) {\n if (row < topVisible) {\n top = metricCalculator.getTopForTopVisible(metricState, row);\n topOffset = 0;\n } else if (row > bottomVisible) {\n top = metricCalculator.getTopForBottomVisible(metricState, row);\n topOffset = 0;\n }\n }\n\n if (column != null && !GridUtils.isFloatingColumn(column, this.metrics)) {\n if (column < leftVisible) {\n left = metricCalculator.getLeftForLeftVisible(metricState, column);\n leftOffset = 0;\n } else if (column > rightVisible) {\n left = metricCalculator.getLeftForRightVisible(metricState, column);\n leftOffset = 0;\n }\n }\n\n this.setViewState({ top, left, topOffset, leftOffset });\n }\n\n /**\n * Checks the `top` and `left` properties that are set and updates the isStuckToBottom/Right properties\n * Should be called when user interaction occurs\n * @param viewState New state properties to set.\n * @param forceUpdate Whether to force an update.\n */\n setViewState(viewState: Partial<GridState>, forceUpdate = false): void {\n if (!this.metrics) throw new Error('metrics not set');\n\n const { isStickyBottom, isStickyRight } = this.props;\n const { top, left } = viewState;\n const { lastTop, lastLeft, hasVerticalBar, hasHorizontalBar } =\n this.metrics;\n if (top != null && hasVerticalBar) {\n this.setState({ isStuckToBottom: isStickyBottom && top >= lastTop });\n }\n if (left != null && hasHorizontalBar) {\n this.setState({ isStuckToRight: isStickyRight && left >= lastLeft });\n }\n\n this.setState(viewState as GridState);\n if (forceUpdate) {\n this.forceUpdate();\n }\n }\n\n /**\n * Start editing the data at the given index\n *\n * @param column The visible column index to start editing\n * @param row The visible row index to start editing\n * @param isQuickEdit If this is a quick edit (the arrow keys can commit)\n * @param selectionRange The tuple [start,end] text selection range of the value to select when editing\n * @param value The value to start with in the edit field. Leave undefined to use the current value.\n */\n startEditing(\n column: VisibleIndex,\n row: VisibleIndex,\n isQuickEdit = false,\n selectionRange?: EditingCellTextSelectionRange,\n value?: string\n ): void {\n const { model } = this.props;\n if (!isEditableGridModel(model)) throw new Error('model is not editable');\n\n const modelColumn = this.getModelColumn(column);\n const modelRow = this.getModelRow(row);\n const cell = {\n column,\n row,\n selectionRange,\n value:\n value !== undefined\n ? value\n : model.editValueForCell(modelColumn, modelRow),\n isQuickEdit,\n };\n\n this.setState({ editingCell: cell, cursorColumn: column, cursorRow: row });\n this.moveViewToCell(column, row);\n }\n\n /**\n * Check if a value is valid for a specific cell\n * @param column Column index of the cell to check\n * @param row Row index of the cell to check\n * @param value Value to check\n * @returns True if the value is valid for the provided cell, false otherwise\n */\n isValidForCell(\n column: VisibleIndex,\n row: VisibleIndex,\n value: string\n ): boolean {\n const { model } = this.props;\n\n const modelColumn = this.getModelColumn(column);\n const modelRow = this.getModelRow(row);\n return (\n isEditableGridModel(model) &&\n model.isValidForCell(modelColumn, modelRow, value)\n );\n }\n\n /**\n * Paste a value with the current selection\n * It first needs to validate that the pasted table is valid for the given selection.\n * Also may update selection if single cells are selected and a table is pasted.\n * @param value Table or a string that is being pasted\n */\n async pasteValue(value: string[][] | string): Promise<void> {\n const { model } = this.props;\n const { movedColumns, movedRows, selectedRanges } = this.state;\n\n try {\n assertIsEditableGridModel(model);\n\n if (\n !model.isEditable ||\n !selectedRanges.every(range => model.isEditableRange(range))\n ) {\n throw new PasteError(\"Can't paste in to read-only area.\");\n }\n\n if (selectedRanges.length <= 0) {\n throw new PasteError('Select an area to paste to.');\n }\n\n if (typeof value === 'string') {\n // Just paste the value into all the selected cells\n const edits: EditOperation[] = [];\n\n const modelRanges = GridUtils.getModelRanges(\n selectedRanges,\n movedColumns,\n movedRows\n );\n GridRange.forEachCell(modelRanges, (column, row) => {\n edits.push({ column, row, text: value });\n });\n await model.setValues(edits);\n return;\n }\n\n // Otherwise it's a table of data\n const tableHeight = value.length;\n const tableWidth = value[0].length;\n const { columnCount, rowCount } = model;\n let ranges = selectedRanges;\n // If each cell is a single selection, we need to update the selection to map to the newly pasted data\n // Check for\n if (\n ranges.every(\n range =>\n GridRange.cellCount([range]) === 1 &&\n (range.startColumn ?? 0) + tableWidth <= columnCount &&\n (range.startRow ?? 0) + tableHeight <= rowCount\n )\n ) {\n // Remap the selected ranges\n ranges = ranges.map(\n range =>\n new GridRange(\n range.startColumn,\n range.startRow,\n (range.startColumn ?? 0) + tableWidth - 1,\n (range.startRow ?? 0) + tableHeight - 1\n )\n );\n this.setSelectedRanges(ranges);\n }\n\n const edits: EditOperation[] = [];\n ranges.forEach(range => {\n if ((range.startColumn ?? 0) + tableWidth > columnCount) {\n throw new PasteError('Pasted content would overflow columns.');\n }\n\n for (let x = 0; x < tableWidth; x += 1) {\n for (let y = 0; y < tableHeight; y += 1) {\n edits.push({\n column: (range.startColumn ?? 0) + x,\n row: (range.startRow ?? 0) + y,\n text: value[y][x],\n });\n }\n }\n });\n await model.setValues(edits);\n } catch (e) {\n const { onError } = this.props;\n onError(e instanceof Error ? e : new Error(`${e}`));\n }\n }\n\n /**\n * Set a value to a specific cell. If the value is not valid for that cell, do not set it\n * @param column Column index to set the value for\n * @param row Row index to set the value for\n * @param value Value to set at that cell\n * @returns true If the value was valid and attempted to be set, false is it was not valid\n */\n setValueForCell(\n column: VisibleIndex,\n row: VisibleIndex,\n value: string\n ): boolean {\n const { model } = this.props;\n assertIsEditableGridModel(model);\n\n const modelColumn = this.getModelColumn(column);\n const modelRow = this.getModelRow(row);\n if (model.isValidForCell(modelColumn, modelRow, value)) {\n model.setValueForCell(modelColumn, modelRow, value);\n return true;\n }\n return false;\n }\n\n /**\n * Set a value on all the ranges provided\n * @param ranges Ranges to set\n * @param value The value to set on all the ranges\n */\n setValueForRanges(ranges: readonly GridRange[], value: string): void {\n const { model } = this.props;\n const { movedColumns, movedRows } = this.state;\n\n const modelRanges = GridUtils.getModelRanges(\n ranges,\n movedColumns,\n movedRows\n );\n if (isEditableGridModel(model)) {\n model.setValueForRanges(modelRanges, value);\n }\n }\n\n /**\n * Check if a given cell is within the current selection\n * @param row Row to check\n * @param column Column to check\n * @returns True if the cell is in the current selection, false otherwise\n */\n isSelected(row: VisibleIndex, column: VisibleIndex): boolean {\n const { selectedRanges } = this.state;\n\n for (let i = 0; i < selectedRanges.length; i += 1) {\n const selectedRange = selectedRanges[i];\n const rowSelected =\n selectedRange.startRow === null ||\n (selectedRange.startRow <= row && row <= (selectedRange.endRow ?? 0));\n const columnSelected =\n selectedRange.startColumn === null ||\n (selectedRange.startColumn <= column &&\n column <= (selectedRange.endColumn ?? 0));\n if (rowSelected && columnSelected) {\n return true;\n }\n }\n\n return false;\n }\n\n addDocumentCursor(cursor: string | null = null): void {\n if (this.documentCursor === Grid.getCursorClassName(cursor)) return;\n if (this.documentCursor != null) {\n document.documentElement.classList.remove(this.documentCursor);\n }\n this.documentCursor = Grid.getCursorClassName(cursor);\n if (this.documentCursor != null) {\n document.documentElement.classList.add(this.documentCursor);\n }\n document.documentElement.classList.add('grid-block-events');\n }\n\n removeDocumentCursor(): void {\n if (this.documentCursor != null) {\n document.documentElement.classList.remove(this.documentCursor);\n document.documentElement.classList.remove('grid-block-events');\n this.documentCursor = null;\n }\n }\n\n startDragTimer(event: React.MouseEvent): void {\n this.stopDragTimer();\n\n const mouseEvent = new MouseEvent('custom', event.nativeEvent);\n\n this.dragTimer = setTimeout(() => {\n this.handleMouseDrag(mouseEvent);\n }, Grid.dragTimeout);\n }\n\n stopDragTimer(): void {\n if (this.dragTimer) {\n clearTimeout(this.dragTimer);\n this.dragTimer = null;\n }\n }\n\n /**\n * Draw the grid with the metrics provided\n * When scrolling you've have to re-draw the whole canvas. As a consequence, all these drawing methods\n * must be very quick.\n * @param metrics Metrics to use for rendering the grid\n */\n private drawCanvas(metrics = this.updateMetrics()): void {\n if (!this.canvas) throw new Error('canvas is not set');\n if (!this.canvasContext) throw new Error('context not set');\n\n const { renderer, canvasContext: context, renderState } = this;\n\n context.save();\n\n renderer.drawCanvas(renderState);\n\n context.restore();\n }\n\n /**\n * Set focus to this grid element\n */\n focus(): void {\n this.canvas?.focus();\n }\n\n /**\n * Check if this grid is currently focused\n * @returns True if the active element is this grid\n */\n isFocused(): boolean {\n return document.activeElement === this.canvas;\n }\n\n /**\n * Handle a mouse click event. Pass the event to the registered mouse handlers until one handles it.\n * Focuses the grid after the click.\n * @param event The mouse event\n */\n handleClick(event: React.MouseEvent): void {\n const gridPoint = this.getGridPointFromEvent(event);\n\n const mouseHandlers = this.getMouseHandlers();\n for (let i = 0; i < mouseHandlers.length; i += 1) {\n const mouseHandler = mouseHandlers[i];\n if (mouseHandler.onClick(gridPoint, this, event) !== false) {\n event.stopPropagation();\n event.preventDefault();\n break;\n }\n }\n\n this.canvas?.focus();\n }\n\n /**\n * Handle a mouse context menu event. Pass the event to the registered mouse handlers until one handles it.\n * @param event The mouse event triggering the context menu\n */\n handleContextMenu(event: React.MouseEvent): void {\n const gridPoint = this.getGridPointFromEvent(event);\n\n const mouseHandlers = this.getMouseHandlers();\n for (let i = 0; i < mouseHandlers.length; i += 1) {\n const mouseHandler = mouseHandlers[i];\n if (mouseHandler.onContextMenu(gridPoint, this, event) !== false) {\n event.stopPropagation();\n event.preventDefault();\n break;\n }\n }\n }\n\n /**\n * Notify all of the keyboard handlers for this grid of a keyboard event.\n * @param functionName The name of the function in the keyboard handler to call\n * @param event The keyboard event to notify\n */\n notifyKeyboardHandlers(\n functionName: GridKeyHandlerFunctionName,\n event: GridKeyboardEvent\n ): void {\n const keyHandlers = this.getKeyHandlers();\n let cursor = null;\n for (let i = 0; i < keyHandlers.length; i += 1) {\n const keyHandler = keyHandlers[i];\n const result =\n keyHandler[functionName] != null &&\n keyHandler[functionName](event, this);\n if (result !== false) {\n if (keyHandler.cursor != null) {\n ({ cursor } = keyHandler);\n }\n const options = result as EventHandlerResultOptions;\n if (options?.stopPropagation ?? true) event.stopPropagation();\n if (options?.preventDefault ?? true) event.preventDefault();\n break;\n }\n }\n this.setState({ cursor });\n }\n\n handleKeyDown(event: GridKeyboardEvent): void {\n this.notifyKeyboardHandlers('onDown', event);\n }\n\n handleKeyUp(event: GridKeyboardEvent): void {\n this.notifyKeyboardHandlers('onUp', event);\n }\n\n /**\n * Notify all of the mouse handlers for this grid of a mouse event.\n * @param functionName The name of the function in the mouse handler to call\n * @param event The mouse event to notify\n * @param updateCoordinates Whether to update the mouse coordinates\n * @param addCursorToDocument Whether to add a cursor overlay or not (for dragging)\n */\n notifyMouseHandlers(\n functionName: GridMouseHandlerFunctionName,\n event: GridMouseEvent,\n updateCoordinates = true,\n addCursorToDocument = false\n ): void {\n const gridPoint = this.getGridPointFromEvent(event);\n const mouseHandlers = this.getMouseHandlers();\n let cursor = null;\n for (let i = 0; i < mouseHandlers.length; i += 1) {\n const mouseHandler = mouseHandlers[i];\n const result =\n mouseHandler[functionName] != null &&\n mouseHandler[functionName](gridPoint, this, event);\n if (result !== false) {\n if (mouseHandler.cursor != null) {\n ({ cursor } = mouseHandler);\n if (addCursorToDocument) {\n this.addDocumentCursor(cursor);\n }\n }\n\n // result is bool or object, events are stopped by default\n const options = result as EventHandlerResultOptions;\n if (options?.stopPropagation ?? true) event.stopPropagation();\n if (options?.preventDefault ?? true) event.preventDefault();\n break;\n }\n }\n\n this.setState({ cursor });\n\n if (updateCoordinates) {\n const { x, y } = gridPoint;\n this.setState({ mouseX: x, mouseY: y });\n }\n }\n\n handleMouseDown(event: React.MouseEvent): void {\n window.addEventListener('mousemove', this.handleMouseDrag, true);\n window.addEventListener('mouseup', this.handleMouseUp, true);\n\n if (event.button != null && event.button !== 0) {\n return;\n }\n\n this.notifyMouseHandlers('onDown', event);\n\n this.startDragTimer(event);\n }\n\n handleDoubleClick(event: React.MouseEvent): void {\n this.notifyMouseHandlers('onDoubleClick', event);\n }\n\n handleMouseMove(event: React.MouseEvent): void {\n this.notifyMouseHandlers('onMove', event);\n }\n\n handleMouseLeave(event: React.MouseEvent): void {\n this.notifyMouseHandlers('onLeave', event, false);\n this.setState({ mouseX: null, mouseY: null });\n }\n\n handleMouseDrag(event: MouseEvent): void {\n this.setState({ isDragging: true });\n this.notifyMouseHandlers('onDrag', event, true, true);\n\n this.stopDragTimer();\n }\n\n handleMouseUp(event: MouseEvent): void {\n window.removeEventListener('mousemove', this.handleMouseDrag, true);\n window.removeEventListener('mouseup', this.handleMouseUp, true);\n\n if (event.button != null && event.button !== 0) {\n return;\n }\n\n this.notifyMouseHandlers('onUp', event, false);\n\n this.stopDragTimer();\n\n this.removeDocumentCursor();\n }\n\n handleResize(): void {\n /**\n * We need to always redraw the canvas in the same frame as the updateCanvasScale\n * because it clears the canvas by nature of direct dom manipulation. However,\n * We also need to verify the state/metrics, which we currently have no way\n * of doing outside of a full componentDidUpdate() call, so we force the update.\n * Ideally, we could verify state/metrics without the forced update.\n */\n this.updateCanvas();\n\n if (!this.metrics) throw new Error('metrics not set');\n\n this.forceUpdate();\n }\n\n handleWheel(event: WheelEvent): void {\n this.notifyMouseHandlers('onWheel', event);\n\n if (event.defaultPrevented) {\n return;\n }\n\n const { metricCalculator, metrics } = this;\n const metricState = this.getMetricState();\n\n if (!metrics) throw new Error('metrics not set');\n\n const {\n lastTop,\n lastLeft,\n columnCount,\n rowCount,\n scrollableContentWidth,\n scrollableViewportWidth,\n scrollableContentHeight,\n scrollableViewportHeight,\n hasHorizontalBar,\n hasVerticalBar,\n } = metrics;\n let { top, left, topOffset, leftOffset } = metrics;\n\n const theme = this.getTheme();\n\n let { deltaX, deltaY } = GridUtils.getScrollDelta(\n event,\n metrics.barWidth,\n metrics.barHeight,\n metrics.rowHeight,\n metrics.rowHeight\n );\n\n // iterate through each column to determine column width and figure out how far to scroll\n // get column width of next column to scroll to, and subract it from the remaining distance to travel\n while (hasHorizontalBar && deltaX !== 0) {\n leftOffset += deltaX;\n deltaX = 0;\n\n if (columnCount > 1) {\n // no scrolling needed, at directional edge\n if (\n (leftOffset > 0 && left >= lastLeft) ||\n (leftOffset < 0 && left <= 0)\n ) {\n leftOffset = 0;\n break;\n }\n } else {\n // single column at edge\n if (leftOffset <= 0) {\n leftOffset = 0;\n break;\n }\n\n const maxLeftOffset = scrollableContentWidth - scrollableViewportWidth;\n if (leftOffset >= maxLeftOffset) {\n leftOffset = maxLeftOffset;\n break;\n }\n }\n\n if (leftOffset > 0) {\n // scroll right\n\n // get width of next column\n const columnWidth =\n metrics.allColumnWidths.get(left) ??\n metricCalculator.getVisibleColumnWidth(left, metricState);\n\n if (leftOffset >= columnWidth) {\n // remove width from balance and advance by 1 column\n deltaX = leftOffset - columnWidth;\n leftOffset = 0;\n left += 1;\n } else if (theme.scrollSnapToColumn && columnCount > 1) {\n // if there's still a balance to travel but its less then a column and snapping is on\n leftOffset = 0;\n left += 1;\n }\n } else if (leftOffset < 0) {\n // scroll left\n\n // get width of next column\n const columnWidth =\n metrics.allColumnWidths.get(left - 1) ??\n metricCalculator.getVisibleColumnWidth(left - 1, metricState);\n\n if (\n Math.abs(leftOffset) <= columnWidth &&\n theme.scrollSnapToColumn &&\n columnCount > 1\n ) {\n // if there's still a balance to travel but its less then a column and snapping is on\n leftOffset = 0;\n left -= 1;\n } else {\n // remove width from balance and advance by 1 column\n deltaX = leftOffset + columnWidth;\n leftOffset = 0;\n left -= 1;\n }\n }\n }\n\n // iterate through each row to determine row height and figure out how far to scroll\n // get row height of next row to scroll to, and subract it from the remaining distance to travel\n while (hasVerticalBar && deltaY !== 0) {\n topOffset += deltaY;\n deltaY = 0;\n\n if (rowCount > 1) {\n // no scrolling needed, at directional edge\n if ((topOffset > 0 && top >= lastTop) || (topOffset < 0 && top <= 0)) {\n topOffset = 0;\n break;\n }\n } else {\n // single row at edge\n if (topOffset <= 0) {\n topOffset = 0;\n break;\n }\n\n const maxTopOffset = scrollableContentHeight - scrollableViewportHeight;\n if (topOffset >= maxTopOffset) {\n topOffset = maxTopOffset;\n break;\n }\n }\n\n if (topOffset > 0) {\n // scroll direction down\n\n // get height of next row\n const rowHeight =\n metrics.allRowHeights.get(top) ??\n metricCalculator.getVisibleRowHeight(top, metricState);\n\n if (topOffset >= rowHeight) {\n // remove height from balance and advance by 1 row\n deltaY = topOffset - rowHeight;\n topOffset = 0;\n top += 1;\n } else if (theme.scrollSnapToRow && rowCount > 1) {\n // if there's still a balance to travel but its less then a row and snapping is on\n topOffset = 0;\n top += 1;\n }\n } else if (topOffset < 0) {\n // scroll direction up\n\n // get height of next row\n const rowHeight =\n metrics.allRowHeights.get(top - 1) ??\n metricCalculator.getVisibleRowHeight(top - 1, metricState);\n\n if (\n Math.abs(topOffset) <= rowHeight &&\n theme.scrollSnapToRow &&\n rowCount > 1\n ) {\n // if there's still a balance to travel but its less then a row and snapping is on\n topOffset = 0;\n top -= 1;\n } else {\n // remove height from balance and advance by 1 row\n deltaY = topOffset + rowHeight;\n topOffset = 0;\n top -= 1;\n }\n }\n }\n\n if (\n metrics.top !== top ||\n metrics.left !== left ||\n metrics.topOffset !== topOffset ||\n metrics.leftOffset !== leftOffset\n ) {\n this.setViewState({ top, left, topOffset, leftOffset });\n event.stopPropagation();\n event.preventDefault();\n }\n }\n\n /**\n * Handle cancelling the cell edit action\n */\n handleEditCellCancel(): void {\n this.setState({ editingCell: null });\n this.focus();\n }\n\n /**\n * Handle a change in the value in an editing cell\n * @param value New value set\n */\n handleEditCellChange(value: string): void {\n this.setState(({ editingCell }) => {\n try {\n assertIsDefined(editingCell);\n\n return {\n editingCell: { ...editingCell, value } as EditingCell,\n };\n } catch (e) {\n // This case should _never_ happen, since the editingCell shouldn't be null if this method is called\n const { onError } = this.props;\n onError(e instanceof Error ? e : new Error(`${e}`));\n return null;\n }\n });\n }\n\n /**\n * Commit an edit for the currently editing cell\n * @param value Value that was committed\n * @param options Options for committing\n */\n handleEditCellCommit(\n value: string,\n {\n direction = SELECTION_DIRECTION.DOWN,\n fillRange = false,\n }: { direction?: SELECTION_DIRECTION | null; fillRange?: boolean } = {}\n ): void {\n const { editingCell, selectedRanges } = this.state;\n if (!editingCell) throw new Error('editingCell not set');\n\n const { column, row } = editingCell;\n if (!this.isValidForCell(column, row, value)) {\n // Don't allow an invalid value to be commited, the editing cell should show an error\n if (direction === null) {\n // If they clicked off of the editing cell, just remove focus\n this.setState({ editingCell: null });\n }\n return;\n }\n\n if (fillRange) {\n this.setValueForRanges(selectedRanges, value);\n } else {\n this.setValueForCell(column, row, value);\n }\n\n if (direction !== null) {\n this.moveCursorInDirection(direction);\n }\n\n this.setState({ editingCell: null });\n\n this.focus();\n }\n\n renderInputField(): ReactNode {\n const { model } = this.props;\n const { editingCell } = this.state;\n const { metrics } = this;\n if (editingCell == null || metrics == null || !isEditableGridModel(model)) {\n return null;\n }\n const { selectionRange, value, isQuickEdit } = editingCell;\n const { column, row } = editingCell;\n const {\n scrollX,\n gridX,\n gridY,\n allColumnXs,\n allRowYs,\n allColumnWidths,\n allRowHeights,\n } = metrics;\n\n const { activeCellSelectionBorderWidth } = this.getTheme();\n\n const x = allColumnXs.get(column);\n const y = allRowYs.get(row);\n const w = allColumnWidths.get(column);\n const h = allRowHeights.get(row);\n\n // make sure cell doeesn't go off the left side of the grid\n const leftBorderOffset =\n gridX + (x ?? 0) <= 0 && scrollX <= 0\n ? activeCellSelectionBorderWidth\n : 0;\n\n // If the cell isn't visible, we still need to display an invisible cell for focus purposes\n const wrapperStyle: CSSProperties =\n x != null && y != null && w != null && h != null\n ? {\n position: 'absolute',\n left: gridX + x + leftBorderOffset,\n top: gridY + y,\n width: w - leftBorderOffset,\n height: h,\n }\n : { opacity: 0 };\n\n let modelColumn;\n let modelRow;\n try {\n modelColumn = this.getModelColumn(column);\n modelRow = this.getModelRow(row);\n } catch (e) {\n return null;\n }\n const inputStyle: CSSProperties | undefined =\n modelColumn != null && modelRow != null\n ? {\n textAlign: model.textAlignForCell(modelColumn, modelRow),\n }\n : undefined;\n const isValid =\n modelColumn != null && modelRow != null\n ? model.isValidForCell(modelColumn, modelRow, value)\n : false;\n\n return (\n <div style={wrapperStyle}>\n <CellInputField\n key={`${column},${row}`}\n selectionRange={selectionRange}\n className={classNames({ error: !isValid })}\n onCancel={this.handleEditCellCancel}\n onChange={this.handleEditCellChange}\n onDone={this.handleEditCellCommit}\n isQuickEdit={isQuickEdit}\n style={inputStyle}\n value={value}\n />\n </div>\n );\n }\n\n /**\n * Gets the render state\n * @returns The render state\n */\n updateRenderState(): GridRenderState {\n if (!this.canvas) throw new Error('canvas is not set');\n if (!this.canvasContext) throw new Error('context not set');\n\n const {\n cursorColumn,\n cursorRow,\n draggingColumn,\n draggingColumnSeparator,\n draggingRow,\n draggingRowOffset,\n draggingRowSeparator,\n editingCell,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n isDragging,\n mouseX,\n mouseY,\n selectedRanges,\n } = this.state;\n const { model, stateOverride } = this.props;\n const { metrics } = this;\n const context = this.canvasContext;\n const theme = this.getTheme();\n const width = this.canvas.clientWidth;\n const height = this.canvas.clientHeight;\n\n assertNotNull(metrics);\n\n this.renderState = {\n width,\n height,\n context,\n theme,\n model,\n metrics,\n mouseX,\n mouseY,\n selectedRanges,\n draggingColumn,\n draggingColumnSeparator,\n draggingRow,\n draggingRowOffset,\n draggingRowSeparator,\n editingCell,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n isDragging,\n cursorColumn,\n cursorRow,\n ...stateOverride,\n };\n\n return this.renderState;\n }\n\n render(): ReactNode {\n const { children } = this.props;\n const { cursor } = this.state;\n\n return (\n <div className=\"grid-wrapper\" ref={this.canvasWrapper}>\n <canvas\n className={classNames('grid-canvas', Grid.getCursorClassName(cursor))}\n ref={canvas => {\n this.canvas = canvas;\n }}\n onClick={this.handleClick}\n onContextMenu={this.handleContextMenu}\n onDoubleClick={this.handleDoubleClick}\n onKeyDown={this.handleKeyDown}\n onKeyUp={this.handleKeyUp}\n onMouseDown={this.handleMouseDown}\n onMouseMove={this.handleMouseMove}\n onMouseLeave={this.handleMouseLeave}\n tabIndex={0}\n >\n Your browser does not support HTML canvas. Update your browser?\n </canvas>\n {this.renderInputField()}\n {children}\n </div>\n );\n }\n}\n\nexport default Grid;\n"],"mappings":";;;;;;;AAAA;AACA,OAAOA,KAAK,IAEVC,aAAa,QAGR,OAAO;AACd,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,OAAO,MAAM,aAAa;AACjC,OAAOC,KAAK,MAAM,cAAc;AAChC,SAASC,aAAa,EAAEC,WAAW,EAAEC,cAAc,QAAQ,kBAAkB;AAAC,OACvEC,oBAAoB;AAAA,OASpBC,SAAS;AAAA,OACTC,SAAS,IAEdC,mBAAmB;AAAA,OAEdC,YAAY;AAAA,OACZC,SAAS,IAEdC,WAAW;AAAA,SAIXC,yBAAyB,EACzBC,0BAA0B,EAC1BC,+BAA+B,EAC/BC,mCAAmC,EACnCC,uBAAuB,EACvBC,4BAA4B,EAC5BC,uBAAuB,EACvBC,+BAA+B,EAC/BC,iCAAiC,EACjCC,gBAAgB,EAEhBC,qBAAqB;AAAA;AAAA,SASrBC,cAAc,EACdC,eAAe,EACfC,mBAAmB,EACnBC,cAAc;AAAA,OAETC,cAAc;AAAA,OACdC,UAAU;AAAA,SAQRC,qBAAqB;AAAA,SAE5BC,yBAAyB,EAEzBC,mBAAmB;AAAA,SAGZC,eAAe;AAAA,OACjBC,YAAY;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAkJnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,IAAI,SAASxC,aAAa,CAAuB;EAiCrD;EACA;EAgBA;AACF;AACA;AACA;AACA;EACE,OAAOyC,QAAQA,CAACC,OAAiC,EAAU;IAAA,IAAAC,IAAA,EAAAC,KAAA,EAAAC,KAAA,EAAAC,KAAA,EAAAC,qBAAA;IACzD,IAAMC,gBAAgB,GAAGC,MAAM,CAACD,gBAAgB,IAAI,CAAC;;IAErD;IACA,IAAME,aAAa,GAAGR,OAAyC;IAE/D,IAAMS,sBAAsB,GAC1B;IACA;IACA;IAAA,CAAAR,IAAA,IAAAC,KAAA,IAAAC,KAAA,IAAAC,KAAA,IAAAC,qBAAA,GACAG,aAAa,CAACE,4BAA4B,cAAAL,qBAAA,cAAAA,qBAAA,GAC1CG,aAAa,CAACG,yBAAyB,cAAAP,KAAA,cAAAA,KAAA,GACvCI,aAAa,CAACI,wBAAwB,cAAAT,KAAA,cAAAA,KAAA,GACtCK,aAAa,CAACK,uBAAuB,cAAAX,KAAA,cAAAA,KAAA,GACrCM,aAAa,CAACC,sBAAsB,cAAAR,IAAA,cAAAA,IAAA,GACpC,CAAC;IACH,OAAOK,gBAAgB,GAAGG,sBAAsB;EAClD;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOK,kBAAkBA,CAACC,MAAqB,EAAiB;IAC9D,OAAOA,MAAM,IAAI,IAAI,IAAIA,MAAM,KAAK,EAAE,kBAAAC,MAAA,CAAkBD,MAAM,IAAK,IAAI;EACzE;;EAEA;EACA,qCASA;EAGA;EAGA;EAGA;EAOA;EACA;EACA;EACA;EASA;;EAEAE,WAAWA,CAACC,KAAgB,EAAE;IAC5B,KAAK,CAACA,KAAK,CAAC;IAACC,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA,+BA2UQ3D,OAAO,CAAE4D,WAAkC,IAChE,CAAC,GAAGA,WAAW,EAAE,GAAG,IAAI,CAACA,WAAW,CAAC,CAACC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACE,KAAK,GAAGD,CAAC,CAACC,KAAK,CACxE,CAAC;IAAAL,eAAA,iCAOwB3D,OAAO,CAC7BiE,aAA0C,IACzC,CAAC,GAAGA,aAAa,EAAE,GAAG,IAAI,CAACA,aAAa,CAAC,CAACJ,IAAI,CAC5C,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACE,KAAK,GAAGD,CAAC,CAACC,KACxB,CACJ,CAAC;IAvVC,IAAI,CAACE,WAAW,GAAG,IAAI,CAACA,WAAW,CAACC,IAAI,CAAC,IAAI,CAAC;IAC9C,IAAI,CAACC,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACD,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAACE,oBAAoB,GAAG,IAAI,CAACA,oBAAoB,CAACF,IAAI,CAAC,IAAI,CAAC;IAChE,IAAI,CAACG,oBAAoB,GAAG,IAAI,CAACA,oBAAoB,CAACH,IAAI,CAAC,IAAI,CAAC;IAChE,IAAI,CAACI,oBAAoB,GAAG,IAAI,CAACA,oBAAoB,CAACJ,IAAI,CAAC,IAAI,CAAC;IAChE,IAAI,CAACK,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACL,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAACM,sBAAsB,GAAG,IAAI,CAACA,sBAAsB,CAACN,IAAI,CAAC,IAAI,CAAC;IACpE,IAAI,CAACO,aAAa,GAAG,IAAI,CAACA,aAAa,CAACP,IAAI,CAAC,IAAI,CAAC;IAClD,IAAI,CAACQ,WAAW,GAAG,IAAI,CAACA,WAAW,CAACR,IAAI,CAAC,IAAI,CAAC;IAC9C,IAAI,CAACS,eAAe,GAAG,IAAI,CAACA,eAAe,CAACT,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAACU,eAAe,GAAG,IAAI,CAACA,eAAe,CAACV,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAACW,eAAe,GAAG,IAAI,CAACA,eAAe,CAACX,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAACY,gBAAgB,GAAG,IAAI,CAACA,gBAAgB,CAACZ,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAACa,aAAa,GAAG,IAAI,CAACA,aAAa,CAACb,IAAI,CAAC,IAAI,CAAC;IAClD,IAAI,CAACc,YAAY,GAAG,IAAI,CAACA,YAAY,CAACd,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACe,WAAW,GAAG,IAAI,CAACA,WAAW,CAACf,IAAI,CAAC,IAAI,CAAC;IAC9C,IAAI,CAACgB,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAAChB,IAAI,CAAC,IAAI,CAAC;IAE1D,IAAM;MACJiB,eAAe;MACfC,cAAc;MACdC,gBAAgB;MAChBC,YAAY;MACZC,SAAS;MACTC;IACF,CAAC,GAAG/B,KAAK;IAET,IAAI,CAAC+B,QAAQ,GAAGA,QAAQ,IAAI,IAAIhF,YAAY,CAAC,CAAC;IAC9C,IAAI,CAAC6E,gBAAgB,GAAGA,gBAAgB,IAAI,IAAIjF,oBAAoB,CAAC,CAAC;IAEtE,IAAI,CAACqF,MAAM,GAAG,IAAI;IAClB,IAAI,CAACC,aAAa,GAAG,IAAI;IACzB,IAAI,CAACC,aAAa,gBAAG/F,KAAK,CAACgG,SAAS,CAAC,CAAC;IACtC,IAAI,CAACC,cAAc,GAAG,IAAI/C,MAAM,CAACgD,cAAc,CAAC,IAAI,CAACd,YAAY,CAAC;IAClE,IAAI,CAACe,cAAc,GAAG,IAAI;IAE1B,IAAI,CAACC,WAAW,GAAG,IAAI;IACvB,IAAI,CAACC,OAAO,GAAG,IAAI;IAEnB,IAAI,CAACC,WAAW,GAAG,CAAC,CAAoB;;IAExC;IACA;IACA;IACA;IACA,IAAI,CAACC,cAAc,GAAG,IAAI;IAE1B,IAAI,CAACC,SAAS,GAAG,IAAI;;IAErB;IACA,IAAI,CAACzC,WAAW,GAAG,CACjB,IAAIrC,cAAc,CAAC,GAAG,CAAC,EACvB,IAAIC,eAAe,CAAC,GAAG,CAAC,EACxB,IAAIC,mBAAmB,CAAC,GAAG,CAAC,EAC5B,IAAIC,cAAc,CAAC,GAAG,CAAC,CACxB;IACD,IAAI,CAACuC,aAAa,GAAG,CACnB,IAAIhD,4BAA4B,CAAC,GAAG,CAAC,EACrC,IAAIH,+BAA+B,CAAC,GAAG,CAAC,EACxC,IAAIE,uBAAuB,CAAC,GAAG,CAAC,EAChC,IAAIH,0BAA0B,CAAC,GAAG,CAAC,EACnC,IAAIQ,gBAAgB,CAAC,GAAG,CAAC,EACzB,IAAID,iCAAiC,CAAC,GAAG,CAAC,EAC1C,IAAIL,mCAAmC,CAAC,GAAG,CAAC,EAC5C,IAAII,+BAA+B,CAAC,GAAG,CAAC,EACxC,IAAID,uBAAuB,CAAC,GAAG,CAAC,EAChC,IAAII,qBAAqB,CAAC,GAAG,CAAC,EAC9B,IAAIV,yBAAyB,CAAC,GAAG,CAAC,CACnC;IAED,IAAI,CAAC0F,KAAK,GAAG;MACX;MACAC,GAAG,EAAE,CAAC;MACNC,IAAI,EAAE,CAAC;MAEP;MACA;MACAC,SAAS,EAAE,CAAC;MACZC,UAAU,EAAE,CAAC;MAEb;MACAC,cAAc,EAAE,IAAI;MACpBC,WAAW,EAAE,IAAI;MAEjB;MACAC,iBAAiB,EAAE,IAAI;MAEvB;MACAC,uBAAuB,EAAE,IAAI;MAC7BC,oBAAoB,EAAE,IAAI;MAE1BC,6BAA6B,EAAE,KAAK;MACpCC,2BAA2B,EAAE,KAAK;MAElC;MACAC,UAAU,EAAE,KAAK;MAEjB;MACAC,MAAM,EAAE,IAAI;MACZC,MAAM,EAAE,IAAI;MAEZ;MACA7B,YAAY;MACZC,SAAS;MAET;MACA6B,SAAS,EAAE,IAAI;MACfC,YAAY,EAAE,IAAI;MAClBC,iBAAiB,EAAE,IAAI;MACvBC,oBAAoB,EAAE,IAAI;MAC1BC,eAAe,EAAE,IAAI;MACrBC,kBAAkB,EAAE,IAAI;MAExB;MACA;MACA;MACAC,cAAc,EAAExH,WAAW;MAC3ByH,kBAAkB,EAAEzH,WAAW;MAE/B;MACAoD,MAAM,EAAE,IAAI;MAEZ;MACA;MACAsE,WAAW,EAAE,IAAI;MAEjBzC,eAAe;MACfC;IACF,CAAC;EACH;EAEAyC,iBAAiBA,CAAA,EAAS;IAAA,IAAAC,YAAA;IACxB,IAAI,CAACC,WAAW,CAAC,CAAC;;IAElB;IACA;IACA;IACA,CAAAD,YAAA,OAAI,CAACrC,MAAM,cAAAqC,YAAA,uBAAXA,YAAA,CAAaE,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC/C,WAAW,EAAE;MACvDgD,OAAO,EAAE;IACX,CAAC,CAAC;IACF,IAAI,IAAI,CAACtC,aAAa,CAACuC,OAAO,IAAI,IAAI,EAAE;MACtC,IAAI,CAACrC,cAAc,CAACsC,OAAO,CAAC,IAAI,CAACxC,aAAa,CAACuC,OAAO,CAAC;IACzD;IAEA,IAAI,CAACE,YAAY,CAAC,CAAC;;IAEnB;IACA;IACA,IAAM;MAAEjD,eAAe;MAAEC;IAAe,CAAC,GAAG,IAAI,CAAC3B,KAAK;IACtD,IAAI0B,eAAe,EAAE;MACnB,IAAI,CAACkD,cAAc,CAAC,CAAC;IACvB;IACA,IAAIjD,cAAc,EAAE;MAClB,IAAI,CAACkD,aAAa,CAAC,CAAC;IACtB;EACF;EAEAC,kBAAkBA,CAACC,SAAoB,EAAEC,SAAoB,EAAQ;IACnE,IAAM;MAAEC;IAAY,CAAC,GAAG,IAAI,CAACrC,KAAK;;IAElC;IACA,IAAIqC,WAAW,IAAI,IAAI,EAAE;MACvB,MAAMA,WAAW;IACnB;IAEA,IAAMC,YAAY,GAAGxI,cAAc,CAACqI,SAAS,EAAE,IAAI,CAAC/E,KAAK,CAAC;IAC1D,IAAMmF,YAAY,GAAGzI,cAAc,CAACsI,SAAS,EAAE,IAAI,CAACpC,KAAK,CAAC;IAC1D;IACA,IACEsC,YAAY,CAACE,MAAM,KAAK,CAAC,IACzBF,YAAY,CAAC,CAAC,CAAC,KAAK,UAAU,IAC9BC,YAAY,CAACC,MAAM,KAAK,CAAC,EACzB;MACA;IACF;IAEA,IAAM;MACJC,cAAc;MACdC,aAAa;MACbzD,YAAY;MACZC,SAAS;MACTyD,qBAAqB;MACrBC,oBAAoB;MACpBC,kBAAkB;MAClBC;IACF,CAAC,GAAG,IAAI,CAAC1F,KAAK;IAEd,IAAM;MACJqF,cAAc,EAAEM,kBAAkB;MAClCL,aAAa,EAAEM,iBAAiB;MAChC/D,YAAY,EAAEgE,oBAAoB;MAClC/D,SAAS,EAAEgE;IACb,CAAC,GAAGf,SAAS;IACb,IAAM;MACJlD,YAAY,EAAEkE,qBAAqB;MACnCjE,SAAS,EAAEkE;IACb,CAAC,GAAGhB,SAAS;IACb,IAAM;MACJ/B,cAAc;MACdC,WAAW;MACXrB,YAAY,EAAEoE,wBAAwB;MACtCnE,SAAS,EAAEoE;IACb,CAAC,GAAG,IAAI,CAACtD,KAAK;IAEd,IAAIiD,oBAAoB,KAAKhE,YAAY,EAAE;MACzC,IAAI,CAACsE,QAAQ,CAAC;QAAEtE;MAAa,CAAC,CAAC;IACjC;IAEA,IAAIiE,iBAAiB,KAAKhE,SAAS,EAAE;MACnC,IAAI,CAACqE,QAAQ,CAAC;QAAErE;MAAU,CAAC,CAAC;IAC9B;IAEA,IAAIiE,qBAAqB,KAAKE,wBAAwB,EAAE;MACtDV,qBAAqB,CAACU,wBAAwB,CAAC;IACjD;IAEA,IAAIjB,SAAS,CAAC/B,cAAc,IAAI,IAAI,IAAIA,cAAc,IAAI,IAAI,EAAE;MAC9DuC,oBAAoB,CAACS,wBAAwB,CAAC;IAChD;IAEA,IAAID,kBAAkB,KAAKE,qBAAqB,EAAE;MAChDT,kBAAkB,CAACS,qBAAqB,CAAC;IAC3C;IAEA,IAAIlB,SAAS,CAAC9B,WAAW,IAAI,IAAI,IAAIA,WAAW,IAAI,IAAI,EAAE;MACxDwC,iBAAiB,CAACQ,qBAAqB,CAAC;IAC1C;IAEA,IAAIb,cAAc,KAAKM,kBAAkB,EAAE;MACzC,IAAI,CAACQ,QAAQ,CAAC;QAAEzE,eAAe,EAAE;MAAM,CAAC,CAAC;IAC3C;IAEA,IAAI4D,aAAa,KAAKM,iBAAiB,EAAE;MACvC,IAAI,CAACO,QAAQ,CAAC;QAAExE,cAAc,EAAE;MAAM,CAAC,CAAC;IAC1C;IAEA,IAAI,CAACyE,aAAa,CAAC,CAAC;IAEpB,IAAI,CAACC,mBAAmB,CAAC,CAAC;IAE1B,IAAI,CAACC,iBAAiB,CAAC,CAAC;IAExB,IAAI,IAAI,CAACC,iBAAiB,CAAC,CAAC,EAAE;MAC5B,IAAI,CAACC,oBAAoB,CAACxB,SAAS,CAAC;IACtC;EACF;EAEAyB,oBAAoBA,CAAA,EAAS;IAAA,IAAAC,aAAA;IAC3B,IAAI,IAAI,CAACpE,cAAc,IAAI,IAAI,EAAE;MAC/BqE,oBAAoB,CAAC,IAAI,CAACrE,cAAc,CAAC;IAC3C;IAEA,CAAAoE,aAAA,OAAI,CAAC1E,MAAM,cAAA0E,aAAA,uBAAXA,aAAA,CAAaE,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAACpF,WAAW,CAAC;IAE3DnC,MAAM,CAACuH,mBAAmB,CACxB,WAAW,EACX,IAAI,CAACzF,eAAe,EACpB,IACF,CAAC;IACD9B,MAAM,CAACuH,mBAAmB,CACxB,SAAS,EACT,IAAI,CAACtF,aAAa,EAClB,IACF,CAAC;IACD,IAAI,CAACc,cAAc,CAACyE,UAAU,CAAC,CAAC;IAEhC,IAAI,CAACC,aAAa,CAAC,CAAC;EACtB;EAEAC,QAAQA,CAAA,EAAkB;IACxB,IAAM;MAAEC;IAAM,CAAC,GAAG,IAAI,CAAChH,KAAK;IAC5B,OAAOpB,IAAI,CAACmI,QAAQ,CAAC,IAAI,CAACjI,OAAO,EAAEkI,KAAK,CAAC;EAC3C;EAEAC,qBAAqBA,CAACC,KAAqB,EAAa;IACtD5I,eAAe,CAAC,IAAI,CAAC0D,MAAM,CAAC;IAE5B,IAAMmF,IAAI,GAAG,IAAI,CAACnF,MAAM,CAACoF,qBAAqB,CAAC,CAAC;IAChD,IAAMC,CAAC,GAAGH,KAAK,CAACI,OAAO,GAAGH,IAAI,CAACrE,IAAI;IACnC,IAAMyE,CAAC,GAAGL,KAAK,CAACM,OAAO,GAAGL,IAAI,CAACtE,GAAG;IAClC,OAAO,IAAI,CAAC4E,kBAAkB,CAACJ,CAAC,EAAEE,CAAC,CAAC;EACtC;EAEAE,kBAAkBA,CAACJ,CAAa,EAAEE,CAAa,EAAa;IAC1D,IAAI,CAAC,IAAI,CAAC/E,OAAO,EAAE,MAAM,IAAIkF,KAAK,CAAC,qBAAqB,CAAC;IAEzD,OAAO1K,SAAS,CAACyK,kBAAkB,CAACJ,CAAC,EAAEE,CAAC,EAAE,IAAI,CAAC/E,OAAO,CAAC;EACzD;EAEAmF,cAAcA,CAAA,EAAsC;IAAA,IAArC/E,KAAK,GAAAgF,SAAA,CAAAxC,MAAA,QAAAwC,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,IAAI,CAAChF,KAAK;IAC/B,IAAMoE,KAAK,GAAG,IAAI,CAACD,QAAQ,CAAC,CAAC;IAC7B,IAAM;MAAEe,KAAK;MAAEC;IAAc,CAAC,GAAG,IAAI,CAAC/H,KAAK;IAC3C,IAAI,CAAC,IAAI,CAACiC,aAAa,IAAI,CAAC,IAAI,CAACD,MAAM,EAAE;MACvC,MAAM,IAAI0F,KAAK,CAAC,mDAAmD,CAAC;IACtE;IACA,IAAM5I,OAAO,GAAG,IAAI,CAACmD,aAAa;IAClC,IAAM+F,KAAK,GAAG,IAAI,CAAChG,MAAM,CAACiG,WAAW;IACrC,IAAMC,MAAM,GAAG,IAAI,CAAClG,MAAM,CAACmG,YAAY;IACvC,IAAM;MACJrF,IAAI;MACJD,GAAG;MACHG,UAAU;MACVD,SAAS;MACTlB,YAAY;MACZC,SAAS;MACTwB,6BAA6B;MAC7BC,2BAA2B;MAC3BN;IACF,CAAC,GAAGL,KAAK;IAET,OAAAwF,aAAA;MACEtF,IAAI;MACJD,GAAG;MACHG,UAAU;MACVD,SAAS;MACTiF,KAAK;MACLE,MAAM;MACNpJ,OAAO;MACPkI,KAAK;MACLc,KAAK;MACLjG,YAAY;MACZC,SAAS;MACTwB,6BAA6B;MAC7BC,2BAA2B;MAC3BN;IAAc,GACX8E,aAAa;EAEpB;EAMAM,cAAcA,CAAA,EAA0B;IACtC,IAAM;MAAEnI;IAAY,CAAC,GAAG,IAAI,CAACF,KAAK;IAClC,OAAO,IAAI,CAACsI,oBAAoB,CAACpI,WAAW,CAAC;EAC/C;EASAqI,gBAAgBA,CAAA,EAAgC;IAC9C,IAAM;MAAEhI;IAAc,CAAC,GAAG,IAAI,CAACP,KAAK;IACpC,OAAO,IAAI,CAACwI,sBAAsB,CAACjI,aAAa,CAAC;EACnD;;EAEA;AACF;AACA;AACA;AACA;EACEkI,cAAcA,CAACC,WAAyB,EAAc;IAAA,IAAAC,aAAA,EAAAC,qBAAA;IACpD,IAAMC,UAAU,IAAAF,aAAA,GAAG,IAAI,CAACnG,OAAO,cAAAmG,aAAA,wBAAAC,qBAAA,GAAZD,aAAA,CAAcG,YAAY,cAAAF,qBAAA,uBAA1BA,qBAAA,CAA4BG,GAAG,CAACL,WAAW,CAAC;IAC/D,IAAIG,UAAU,KAAKhB,SAAS,EAAE;MAC5B,MAAM,IAAIH,KAAK,wCAAA5H,MAAA,CAAwC4I,WAAW,CAAE,CAAC;IACvE;IACA,OAAOG,UAAU;EACnB;;EAEA;AACF;AACA;AACA;AACA;EACEG,WAAWA,CAACC,QAAsB,EAAc;IAAA,IAAAC,cAAA,EAAAC,qBAAA;IAC9C,IAAMN,UAAU,IAAAK,cAAA,GAAG,IAAI,CAAC1G,OAAO,cAAA0G,cAAA,wBAAAC,qBAAA,GAAZD,cAAA,CAAcE,SAAS,cAAAD,qBAAA,uBAAvBA,qBAAA,CAAyBJ,GAAG,CAACE,QAAQ,CAAC;IACzD,IAAIJ,UAAU,KAAKhB,SAAS,EAAE;MAC5B,MAAM,IAAIH,KAAK,qCAAA5H,MAAA,CAAqCmJ,QAAQ,CAAE,CAAC;IACjE;IACA,OAAOJ,UAAU;EACnB;;EAEA;AACF;AACA;AACA;AACA;EACEQ,iBAAiBA,CAACC,GAAiB,EAAmC;IAAA,IAAjCC,iBAAiB,GAAA3B,SAAA,CAAAxC,MAAA,QAAAwC,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,KAAK;IAC5D,IAAM4B,QAAQ,GAAG,IAAI,CAACR,WAAW,CAACM,GAAG,CAAC;IACtC,IAAM;MAAExB;IAAM,CAAC,GAAG,IAAI,CAAC9H,KAAK;IAC5B;IACA;IACA,IAAI7B,qBAAqB,CAAC2J,KAAK,CAAC,IAAIA,KAAK,CAAC2B,eAAe,CAACD,QAAQ,CAAC,EAAE;MACnE1B,KAAK,CAAC4B,cAAc,CAClBF,QAAQ,EACR,CAAC1B,KAAK,CAAC6B,aAAa,CAACH,QAAQ,CAAC,EAC9BD,iBACF,CAAC;IACH;IACA,IAAI,CAACK,mBAAmB,CAAC,CAAC;IAC1B,IAAI,CAACC,eAAe,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,CAACC,oBAAoB,CAAC,CAAC,EAAER,GAAG,CAAC;IACjC,IAAI,CAACO,eAAe,CAAC,CAAC;IAEtB,IAAI,CAAC1D,QAAQ,CAAC;MAAEzE,eAAe,EAAE;IAAM,CAAC,CAAC;EAC3C;;EAEA;AACF;AACA;EACEkD,cAAcA,CAAA,EAAS;IACrB,IAAI,CAAC,IAAI,CAACpC,OAAO,EAAE;IACnB,IAAM;MAAEuH,aAAa;MAAEC,QAAQ;MAAEnH,GAAG;MAAEoH;IAAQ,CAAC,GAAG,IAAI,CAACzH,OAAO;IAC9D,IAAKuH,aAAa,GAAGC,QAAQ,GAAG,CAAC,IAAID,aAAa,GAAG,CAAC,IAAKlH,GAAG,GAAGoH,OAAO,EAAE;MACxE,IAAI,CAAC9D,QAAQ,CAAC;QAAEtD,GAAG,EAAEoH;MAAQ,CAAC,CAAC;IACjC;EACF;;EAEA;AACF;AACA;EACEpF,aAAaA,CAAA,EAAS;IACpB,IAAI,CAAC,IAAI,CAACrC,OAAO,EAAE;IACnB,IAAM;MAAE0H,YAAY;MAAEC,WAAW;MAAErH,IAAI;MAAEsH;IAAS,CAAC,GAAG,IAAI,CAAC5H,OAAO;IAClE,IACG0H,YAAY,GAAGC,WAAW,GAAG,CAAC,IAAID,YAAY,GAAG,CAAC,IACnDpH,IAAI,GAAGsH,QAAQ,EACf;MACA,IAAI,CAACjE,QAAQ,CAAC;QAAErD,IAAI,EAAEsH;MAAS,CAAC,CAAC;IACnC;EACF;;EAEA;AACF;AACA;AACA;AACA;EACEC,iBAAiBA,CAACC,UAAgC,EAAQ;IACxD,IAAM;MAAExC;IAAM,CAAC,GAAG,IAAI,CAAC9H,KAAK;IAC5B,IAAM;MAAEmK,WAAW;MAAEH;IAAS,CAAC,GAAGlC,KAAK;IACvC,IAAM;MAAEnE,SAAS;MAAEC,YAAY;MAAEK;IAAe,CAAC,GAAG,IAAI,CAACrB,KAAK;IAC9D,IAAI,CAACuD,QAAQ,CAAC;MACZlC,cAAc,EAAEqG,UAAU;MAC1BpG,kBAAkB,EAAED;IACtB,CAAC,CAAC;IACF,IAAIqG,UAAU,CAAClF,MAAM,GAAG,CAAC,EAAE;MACzB,IAAMmF,KAAK,GAAG1N,SAAS,CAAC2N,YAAY,CAClCF,UAAU,CAAC,CAAC,CAAC,EACbH,WAAW,EACXH,QACF,CAAC;MACD,IAAIS,YAAY,GAAG9G,SAAS;MAC5B,IAAI+G,eAAe,GAAG9G,YAAY;MAClC,IAAI,CAAC2G,KAAK,CAACI,YAAY,CAAC/G,YAAY,EAAED,SAAS,CAAC,EAAE;QAChD,CAAC;UAAE2F,GAAG,EAAEmB,YAAY;UAAEG,MAAM,EAAEF;QAAgB,CAAC,GAAGH,KAAK,CAACM,SAAS,CAAC,CAAC;MACrE;MAEA,IAAI,CAAC1E,QAAQ,CAAC;QACZrC,oBAAoB,EAAEyG,KAAK,CAACO,WAAW;QACvCjH,iBAAiB,EAAE0G,KAAK,CAACQ,QAAQ;QACjC/G,kBAAkB,EAAEuG,KAAK,CAACS,SAAS;QACnCjH,eAAe,EAAEwG,KAAK,CAACU,MAAM;QAC7BrH,YAAY,EAAE8G,eAAe;QAC7B/G,SAAS,EAAE8G;MACb,CAAC,CAAC;IACJ;EACF;EAEAnG,WAAWA,CAAA,EAAS;IAClB,IAAM;MAAEtC;IAAO,CAAC,GAAG,IAAI;IACvB,IAAM;MAAEkJ;IAAc,CAAC,GAAG,IAAI,CAAClL,KAAK;IAEpC,IAAI,CAACgC,MAAM,EAAE,MAAM,IAAI0F,KAAK,CAAC,gBAAgB,CAAC;IAE9C,IAAI,CAACzF,aAAa,GAAGD,MAAM,CAACmJ,UAAU,CAAC,IAAI,EAAED,aAAa,CAAC;EAC7D;EAEA7E,mBAAmBA,CAAA,EAAS;IAC1B,IAAI,IAAI,CAAC/D,cAAc,IAAI,IAAI,EAAE;MAC/B;IACF;IAEA,IAAI,CAACA,cAAc,GAAG8I,qBAAqB,CAAC,MAAM;MAChD,IAAI,CAAC9I,cAAc,GAAG,IAAI;MAE1B,IAAI;QACF,IAAI,CAACqC,YAAY,CAAC,CAAC;MACrB,CAAC,CAAC,OAAO0G,CAAC,EAAE;QACV;QACA,IAAI,CAAClF,QAAQ,CAAC;UAAElB,WAAW,EAAEoG;QAAE,CAAC,CAAC;MACnC;IACF,CAAC,CAAC;EACJ;EAEA1G,YAAYA,CAAA,EAAS;IACnB,IAAI,CAAC2G,iBAAiB,CAAC,CAAC;IAExB,IAAI,CAAClF,aAAa,CAAC,CAAC;IAEpB,IAAI,CAACmF,iBAAiB,CAAC,CAAC;IAExB,IAAM;MAAEtJ,aAAa;MAAEO,OAAO;MAAEC;IAAY,CAAC,GAAG,IAAI;IACpDjG,aAAa,CAACyF,aAAa,CAAC;IAC5BzF,aAAa,CAACgG,OAAO,CAAC;IACtBhG,aAAa,CAACiG,WAAW,CAAC;IAE1B,IAAI,CAACV,QAAQ,CAACyJ,gBAAgB,CAACvJ,aAAa,EAAEQ,WAAW,CAAC;IAE1D,IAAM;MAAEgJ;IAAc,CAAC,GAAG,IAAI,CAACzL,KAAK;IACpCyL,aAAa,CAACjJ,OAAO,CAAC;IAEtB,IAAI,CAACkJ,UAAU,CAAClJ,OAAO,CAAC;EAC1B;EAEQ8I,iBAAiBA,CAAA,EAAS;IAChC,IAAM;MAAEtJ,MAAM;MAAEC,aAAa;MAAEC;IAAc,CAAC,GAAG,IAAI;IACrD,IAAI,CAACF,MAAM,EAAE,MAAM,IAAI0F,KAAK,CAAC,gBAAgB,CAAC;IAC9C,IAAI,CAACzF,aAAa,EAAE,MAAM,IAAIyF,KAAK,CAAC,uBAAuB,CAAC;IAC5D,IAAI,CAACxF,aAAa,CAACuC,OAAO,EAAE,MAAM,IAAIiD,KAAK,CAAC,uBAAuB,CAAC;;IAEpE;IACA;IACA;IACA;IACA,IAAMP,IAAI,GAAGjF,aAAa,CAACuC,OAAO,CAAC2C,qBAAqB,CAAC,CAAC;IAC1D,IAAMY,KAAK,GAAG2D,IAAI,CAACC,KAAK,CAACzE,IAAI,CAACa,KAAK,CAAC;IACpC,IAAME,MAAM,GAAGyD,IAAI,CAACC,KAAK,CAACzE,IAAI,CAACe,MAAM,CAAC;;IAEtC;IACA,IACE2D,UAAU,CAAC7J,MAAM,CAAC8J,KAAK,CAAC9D,KAAK,CAAC,KAAKA,KAAK,IACxC6D,UAAU,CAAC7J,MAAM,CAAC8J,KAAK,CAAC5D,MAAM,CAAC,KAAKA,MAAM,EAC1C;MACA;IACF;IAEA,IAAM6D,KAAK,GAAGnN,IAAI,CAACC,QAAQ,CAACoD,aAAa,CAAC;IAC1CD,MAAM,CAAC8J,KAAK,CAAC9D,KAAK,MAAAlI,MAAA,CAAMkI,KAAK,OAAI;IACjChG,MAAM,CAAC8J,KAAK,CAAC5D,MAAM,MAAApI,MAAA,CAAMoI,MAAM,OAAI;IACnClG,MAAM,CAACgG,KAAK,GAAGA,KAAK,GAAG+D,KAAK;IAC5B/J,MAAM,CAACkG,MAAM,GAAGA,MAAM,GAAG6D,KAAK;IAC9B9J,aAAa,CAAC8J,KAAK,CAACA,KAAK,EAAEA,KAAK,CAAC;EACnC;EAEAC,kBAAkBA,CAAA,EAAS;IACzB,IAAI,CAAC,IAAI,CAACxJ,OAAO,EAAE,MAAM,IAAIkF,KAAK,CAAC,iBAAiB,CAAC;IACrD,IAAM;MAAE5E,IAAI;MAAED;IAAI,CAAC,GAAG,IAAI,CAACD,KAAK;IAChC,IAAM;MAAEwH,QAAQ;MAAEH;IAAQ,CAAC,GAAG,IAAI,CAACzH,OAAO;IAC1C,IAAIM,IAAI,GAAGsH,QAAQ,EAAE;MACnB,IAAI,CAACjE,QAAQ,CAAC;QAAErD,IAAI,EAAEsH,QAAQ;QAAEpH,UAAU,EAAE;MAAE,CAAC,CAAC;IAClD;IACA,IAAIH,GAAG,GAAGoH,OAAO,EAAE;MACjB,IAAI,CAAC9D,QAAQ,CAAC;QAAEtD,GAAG,EAAEoH,OAAO;QAAElH,SAAS,EAAE;MAAE,CAAC,CAAC;IAC/C;EACF;;EAEA;AACF;AACA;EACEuD,iBAAiBA,CAAA,EAAS;IACxB,IAAI,CAAC,IAAI,CAAC9D,OAAO,EAAE;MACjB;IACF;IAEA,IAAI,IAAI,CAACD,WAAW,EAAE;MACpB,IAAM;QAAEyH,QAAQ;QAAEG,WAAW;QAAEjC,MAAM;QAAEF;MAAM,CAAC,GAAG,IAAI,CAACxF,OAAO;MAC7D,IAAM;QACJwH,QAAQ,EAAEiC,YAAY;QACtB9B,WAAW,EAAE+B,eAAe;QAC5BhE,MAAM,EAAEiE,UAAU;QAClBnE,KAAK,EAAEoE;MACT,CAAC,GAAG,IAAI,CAAC7J,WAAW;MAEpB,IAAI0J,YAAY,KAAKjC,QAAQ,IAAI9B,MAAM,KAAKiE,UAAU,EAAE;QACtD,IAAM;UAAEzK;QAAgB,CAAC,GAAG,IAAI,CAACkB,KAAK;QACtC,IAAIlB,eAAe,EAAE;UACnB,IAAI,CAACkD,cAAc,CAAC,CAAC;QACvB;MACF;MAEA,IAAIsH,eAAe,KAAK/B,WAAW,IAAInC,KAAK,KAAKoE,SAAS,EAAE;QAC1D,IAAM;UAAEzK;QAAe,CAAC,GAAG,IAAI,CAACiB,KAAK;QACrC,IAAIjB,cAAc,EAAE;UAClB,IAAI,CAACkD,aAAa,CAAC,CAAC;QACtB;MACF;IACF;IACA,IAAI,CAACtC,WAAW,GAAG,IAAI,CAACC,OAAO;EACjC;EAEA4D,aAAaA,CAAA,EAAkC;IAAA,IAAjCxD,KAAK,GAAAgF,SAAA,CAAAxC,MAAA,QAAAwC,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,IAAI,CAAChF,KAAK;IAC9B,IAAI,CAACL,WAAW,GAAG,IAAI,CAACC,OAAO;IAE/B,IAAM;MAAEZ;IAAiB,CAAC,GAAG,IAAI;IACjC,IAAMyK,WAAW,GAAG,IAAI,CAAC1E,cAAc,CAAC/E,KAAK,CAAC;IAC9C,IAAI,CAACJ,OAAO,GAAGZ,gBAAgB,CAAC0K,UAAU,CAACD,WAAW,CAAC;IACvD,IAAI,CAACL,kBAAkB,CAAC,CAAC;IAEzB,OAAO,IAAI,CAACxJ,OAAO;EACrB;;EAEA;AACF;AACA;AACA;EACEgE,oBAAoBA,CAACxB,SAAoB,EAAQ;IAC/C,IAAM;MAAEf,cAAc,EAAEsI;IAAkB,CAAC,GAAGvH,SAAS;IACvD,IAAM;MAAEf;IAAe,CAAC,GAAG,IAAI,CAACrB,KAAK;IAErC,IAAIqB,cAAc,KAAKsI,iBAAiB,EAAE;MACxC,IAAM;QAAEC;MAAmB,CAAC,GAAG,IAAI,CAACxM,KAAK;MACzCwM,kBAAkB,CAACvI,cAAc,CAAC;IACpC;EACF;;EAEA;AACF;AACA;AACA;EACEsC,iBAAiBA,CAAA,EAAY;IAC3B,IAAM;MAAEuB;IAAM,CAAC,GAAG,IAAI,CAAC9H,KAAK;IAC5B,IAAM;MAAEiE;IAAe,CAAC,GAAG,IAAI,CAACrB,KAAK;IACrC,IAAM;MAAEuH,WAAW;MAAEH;IAAS,CAAC,GAAGlC,KAAK;IAEvC,KAAK,IAAI2E,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxI,cAAc,CAACmB,MAAM,EAAEqH,CAAC,IAAI,CAAC,EAAE;MACjD,IAAMlC,KAAK,GAAGtG,cAAc,CAACwI,CAAC,CAAC;MAC/B,IACGlC,KAAK,CAACS,SAAS,IAAI,IAAI,IAAIT,KAAK,CAACS,SAAS,IAAIb,WAAW,IACzDI,KAAK,CAACU,MAAM,IAAI,IAAI,IAAIV,KAAK,CAACU,MAAM,IAAIjB,QAAS,EAClD;QACA;QACA,IAAI,CAAC7D,QAAQ,CAAC;UAAElC,cAAc,EAAE,EAAE;UAAEC,kBAAkB,EAAE;QAAG,CAAC,CAAC;QAC7D,OAAO,KAAK;MACd;IACF;IACA,OAAO,IAAI;EACb;;EAEA;AACF;AACA;EACE0F,mBAAmBA,CAAA,EAAS;IAC1B,IAAM;MAAE3F;IAAe,CAAC,GAAG,IAAI,CAACrB,KAAK;IACrC,IAAI,CAACuD,QAAQ,CAAC;MAAElC,cAAc,EAAE,EAAE;MAAEC,kBAAkB,EAAED;IAAe,CAAC,CAAC;EAC3E;;EAEA;EACAyI,kBAAkBA,CAAA,EAAS;IACzB,IAAM;MAAEzI;IAAe,CAAC,GAAG,IAAI,CAACrB,KAAK;IACrC,IAAIqB,cAAc,CAACmB,MAAM,GAAG,CAAC,EAAE;MAC7B,IAAI,CAACe,QAAQ,CAAC;QACZlC,cAAc,EAAEA,cAAc,CAAC0I,KAAK,CAAC1I,cAAc,CAACmB,MAAM,GAAG,CAAC;MAChE,CAAC,CAAC;IACJ;EACF;;EAEA;EACA3D,iBAAiBA,CAAA,EAAyB;IACxC,IAAM;MAAEwC;IAAe,CAAC,GAAG,IAAI,CAACrB,KAAK;IACrC,OAAOqB,cAAc;EACvB;;EAEA;AACF;AACA;AACA;AACA;EACE2I,cAAcA,CAAChC,MAAsB,EAAEtB,GAAmB,EAAQ;IAChE,IAAI,CAACnD,QAAQ,CAAC;MACZrC,oBAAoB,EAAE8G,MAAM;MAC5B/G,iBAAiB,EAAEyF,GAAG;MACtBtF,kBAAkB,EAAE4G,MAAM;MAC1B7G,eAAe,EAAEuF,GAAG;MACpB1F,YAAY,EAAEgH,MAAM;MACpBjH,SAAS,EAAE2F;IACb,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEuD,aAAaA,CACXjC,MAAsB,EACtBtB,GAAmB,EAGb;IAAA,IAFNwD,eAAe,GAAAlF,SAAA,CAAAxC,MAAA,QAAAwC,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,KAAK;IAAA,IACvBmF,qBAAqB,GAAAnF,SAAA,CAAAxC,MAAA,QAAAwC,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,KAAK;IAE7B,IAAI,CAACzB,QAAQ,CAACvD,KAAK,IAAI;MACrB,IAAM;QAAEqB,cAAc;QAAEJ,iBAAiB;QAAEC;MAAqB,CAAC,GAAGlB,KAAK;MACzE,IAAM;QAAEoE;MAAM,CAAC,GAAG,IAAI,CAAChH,KAAK;MAC5B,IAAM;QAAEgN,aAAa;QAAEC;MAAiB,CAAC,GAAGjG,KAAK;MAEjD,IAAI8F,eAAe,IAAI7I,cAAc,CAACmB,MAAM,GAAG,CAAC,EAAE;QAChD,IAAM8H,iBAAiB,GAAGjJ,cAAc,CAACA,cAAc,CAACmB,MAAM,GAAG,CAAC,CAAC;QACnE,IAAItC,IAAI,GAAG,IAAI;QACf,IAAID,GAAG,GAAG,IAAI;QACd,IAAIsK,KAAK,GAAG,IAAI;QAChB,IAAIC,MAAM,GAAG,IAAI;QACjB,IAAIL,qBAAqB,EAAE;UAAA,IAAAM,qBAAA,EAAAC,sBAAA,EAAAC,qBAAA,EAAAC,sBAAA;UACzB1K,IAAI,GACFkK,aAAa,KAAKnF,SAAS,IAAImF,aAAa,GACxC,IAAI,GACJrB,IAAI,CAAC8B,GAAG,CAAC7C,MAAM,aAANA,MAAM,cAANA,MAAM,GAAI,CAAC,GAAAyC,qBAAA,GAAEH,iBAAiB,CAACpC,WAAW,cAAAuC,qBAAA,cAAAA,qBAAA,GAAI,CAAC,CAAC;UAC/DxK,GAAG,GACDoK,gBAAgB,KAAKpF,SAAS,IAAIoF,gBAAgB,GAC9C,IAAI,GACJtB,IAAI,CAAC8B,GAAG,CAACnE,GAAG,aAAHA,GAAG,cAAHA,GAAG,GAAI,CAAC,GAAAgE,sBAAA,GAAEJ,iBAAiB,CAACnC,QAAQ,cAAAuC,sBAAA,cAAAA,sBAAA,GAAI,CAAC,CAAC;UACzDH,KAAK,GACHH,aAAa,KAAKnF,SAAS,IAAImF,aAAa,GACxC,IAAI,GACJrB,IAAI,CAAC+B,GAAG,CAAC9C,MAAM,aAANA,MAAM,cAANA,MAAM,GAAI,CAAC,GAAA2C,qBAAA,GAAEL,iBAAiB,CAAClC,SAAS,cAAAuC,qBAAA,cAAAA,qBAAA,GAAI,CAAC,CAAC;UAC7DH,MAAM,GACJH,gBAAgB,KAAKpF,SAAS,IAAIoF,gBAAgB,GAC9C,IAAI,GACJtB,IAAI,CAAC+B,GAAG,CAACpE,GAAG,aAAHA,GAAG,cAAHA,GAAG,GAAI,CAAC,GAAAkE,sBAAA,GAAEN,iBAAiB,CAACjC,MAAM,cAAAuC,sBAAA,cAAAA,sBAAA,GAAI,CAAC,CAAC;QACzD,CAAC,MAAM;UACL1K,IAAI,GAAGoK,iBAAiB,CAACpC,WAAW;UACpCjI,GAAG,GAAGqK,iBAAiB,CAACnC,QAAQ;UAEhC,IAAIjH,oBAAoB,IAAI,IAAI,IAAID,iBAAiB,IAAI,IAAI,EAAE;YAC7D,IAAImJ,aAAa,KAAKnF,SAAS,IAAI,CAACmF,aAAa,EAAE;cACjDlK,IAAI,GAAGgB,oBAAoB;YAC7B;YACA,IAAImJ,gBAAgB,KAAKpF,SAAS,IAAI,CAACoF,gBAAgB,EAAE;cACvDpK,GAAG,GAAGgB,iBAAiB;YACzB;UACF;UACAsJ,KAAK,GAAGH,aAAa,KAAKnF,SAAS,IAAImF,aAAa,GAAG,IAAI,GAAGpC,MAAM;UACpEwC,MAAM,GACJH,gBAAgB,KAAKpF,SAAS,IAAIoF,gBAAgB,GAAG,IAAI,GAAG3D,GAAG;QACnE;QACA,IAAMqE,aAAa,GAAG9Q,SAAS,CAAC+Q,cAAc,CAC5C9K,IAAI,EACJD,GAAG,EACHsK,KAAK,EACLC,MACF,CAAC;QAED,IAAIF,iBAAiB,CAACW,MAAM,CAACF,aAAa,CAAC,EAAE;UAC3C,OAAO,IAAI;QACb;QAEA,IAAMG,UAAS,GAAG,CAAC,GAAG7J,cAAc,CAAC;QACrC6J,UAAS,CAACA,UAAS,CAAC1I,MAAM,GAAG,CAAC,CAAC,GAAGuI,aAAa;QAC/C,OAAO;UACL1J,cAAc,EAAE6J,UAAS;UACzB9J,kBAAkB,EAAE4G,MAAM;UAC1B7G,eAAe,EAAEuF;QACnB,CAAC;MACH;MACA,IAAMwE,SAAS,GAAG,CAAC,GAAG7J,cAAc,CAAC;MACrC,IAAM8J,cAAc,GAClBf,aAAa,KAAKnF,SAAS,IAAImF,aAAa,GAAG,IAAI,GAAGpC,MAAM;MAC9D,IAAMoD,WAAW,GACff,gBAAgB,KAAKpF,SAAS,IAAIoF,gBAAgB,GAAG,IAAI,GAAG3D,GAAG;MAEjEwE,SAAS,CAACG,IAAI,CACZpR,SAAS,CAAC+Q,cAAc,CACtBG,cAAc,EACdC,WAAW,EACXD,cAAc,EACdC,WACF,CACF,CAAC;MACD,OAAO;QACL/J,cAAc,EAAE6J,SAAS;QACzB9J,kBAAkB,EAAE4G,MAAM;QAC1B7G,eAAe,EAAEuF;MACnB,CAAC;IACH,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEO,eAAeA,CAAA,EAAS;IACtB,IAAI,CAAC1D,QAAQ,CAAEvD,KAAgB,IAAK;MAClC,IAAM;QAAEoE;MAAM,CAAC,GAAG,IAAI,CAAChH,KAAK;MAC5B,IAAM;QAAEgN;MAAc,CAAC,GAAGhG,KAAK;MAC/B,IAAM;QAAE/C,cAAc;QAAEC,kBAAkB;QAAEP,SAAS;QAAEC;MAAa,CAAC,GACnEhB,KAAK;MAEP,IACEqB,cAAc,CAACmB,MAAM,KAAK,CAAC,KAC1B4H,aAAa,KAAKnF,SAAS,IAAImF,aAAa,GACzCnQ,SAAS,CAACmN,QAAQ,CAAC/F,cAAc,CAAC,KAAK,CAAC,GACxCpH,SAAS,CAACqR,SAAS,CAACjK,cAAc,CAAC,KAAK,CAAC,CAAC,IAC9CpH,SAAS,CAACsR,gBAAgB,CAAClK,cAAc,EAAEC,kBAAkB,CAAC,EAC9D;QACA;QACA;QACA,OAAO;UACLD,cAAc,EAAE,EAAE;UAClBC,kBAAkB,EAAE,EAAE;UACtBN,YAAY,EAAE,IAAI;UAClBD,SAAS,EAAE;QACb,CAAC;MACH;MAEA,IAAIyK,iBAAiB,GAAGnK,cAAc,CAAC0I,KAAK,CAAC,CAAC;MAC9C,IAAIyB,iBAAiB,CAAChJ,MAAM,GAAG,CAAC,EAAE;QAChC;QACA;QACA,IAAMiJ,SAAS,GAAGD,iBAAiB,CAACA,iBAAiB,CAAChJ,MAAM,GAAG,CAAC,CAAC;QACjE,KAAK,IAAIqH,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG2B,iBAAiB,CAAChJ,MAAM,GAAG,CAAC,EAAEqH,CAAC,IAAI,CAAC,EAAE;UACxD,IAAMkB,aAAa,GAAGS,iBAAiB,CAAC3B,CAAC,CAAC;UAC1C,IAAIkB,aAAa,CAACW,QAAQ,CAACD,SAAS,CAAC,EAAE;YACrC;YACA;YACA,IAAME,SAAS,GAAGZ,aAAa,CAACa,QAAQ,CAACH,SAAS,CAAC;YACnDD,iBAAiB,CAACK,GAAG,CAAC,CAAC;YACvBL,iBAAiB,CAACM,MAAM,CAACjC,CAAC,EAAE,CAAC,CAAC;YAC9B2B,iBAAiB,GAAGA,iBAAiB,CAACtO,MAAM,CAACyO,SAAS,CAAC;YACvD;UACF;QACF;QAEAH,iBAAiB,GAAGvR,SAAS,CAAC8R,WAAW,CAACP,iBAAiB,CAAC;MAC9D;MAEA,IAAI1D,eAAe,GAAG9G,YAAY;MAClC,IAAI6G,YAAY,GAAG9G,SAAS;MAC5B,IAAI,CAAC9G,SAAS,CAAC8N,YAAY,CAACyD,iBAAiB,EAAExK,YAAY,EAAED,SAAS,CAAC,EAAE;QACvE,IAAM;UAAEmE;QAAM,CAAC,GAAG,IAAI,CAAC9H,KAAK;QAC5B,IAAM;UAAEmK,WAAW;UAAEH;QAAS,CAAC,GAAGlC,KAAK;QACvC,IAAM8G,UAAU,GAAG/R,SAAS,CAACgS,QAAQ,CACnChS,SAAS,CAACiS,aAAa,CAAC7K,cAAc,EAAEkG,WAAW,EAAEH,QAAQ,CAC/D,CAAC;QACD,IAAI4E,UAAU,IAAI,IAAI,EAAE;UACtB,CAAC;YAAEhE,MAAM,EAAEF,eAAe;YAAEpB,GAAG,EAAEmB;UAAa,CAAC,GAAGmE,UAAU;QAC9D,CAAC,MAAM;UACLlE,eAAe,GAAG,IAAI;UACtBD,YAAY,GAAG,IAAI;QACrB;MACF;MAEA,IAAI2D,iBAAiB,CAAChJ,MAAM,KAAK,CAAC,EAAE;QAClCsF,eAAe,GAAG,IAAI;QACtBD,YAAY,GAAG,IAAI;MACrB;MAEA,OAAO;QACL9G,SAAS,EAAE8G,YAAY;QACvB7G,YAAY,EAAE8G,eAAe;QAC7BzG,cAAc,EAAEmK,iBAAiB;QACjClK,kBAAkB,EAAED;MACtB,CAAC;IACH,CAAC,CAAC;EACJ;EAEA8K,WAAWA,CAACC,UAAkB,EAAQ;IAAA,IAAAC,mBAAA;IACpC,IAAI,CAAC,IAAI,CAACzM,OAAO,IAAI,CAAC,IAAI,CAACD,WAAW,EAAE;MACtC;IACF;IAEA,IAAM;MAAE2M,KAAK;MAAEhH,MAAM;MAAE+B,OAAO;MAAEkF,cAAc;MAAEC;IAAU,CAAC,GAAG,IAAI,CAAC5M,OAAO;IAE1E,IAAM6M,WAAW,GAAGnH,MAAM,GAAGgH,KAAK;IAElC,IAAMI,kBAAkB,GACtB3D,IAAI,CAAC4D,KAAK,CAACF,WAAW,GAAG,CAAC,CAAC,KAAAJ,mBAAA,GAC1BE,cAAc,CAACpG,GAAG,CAACiG,UAAU,CAAC,cAAAC,mBAAA,cAAAA,mBAAA,GAAIG,SAAS,CAAC;IAE/C,IAAM/C,WAAW,GAAG,IAAI,CAAC1E,cAAc,CAAC,CAAC;IACzC,IAAM6H,MAAM,GAAG,IAAI,CAAC5N,gBAAgB,CAAC6N,UAAU,CAC7CpD,WAAW,EACX2C,UAAU,GAAG,CAAC,EACdM,kBACF,CAAC;IACD,IAAI,CAACnJ,QAAQ,CAAC;MACZtD,GAAG,EAAE8I,IAAI,CAAC8B,GAAG,CAACxD,OAAO,EAAEuF,MAAM,CAAC;MAC9BvL,cAAc,EAAE,CAAC,IAAIpH,SAAS,CAAC,IAAI,EAAEmS,UAAU,EAAE,IAAI,EAAEA,UAAU,CAAC,CAAC;MACnEtN,eAAe,EAAE;IACnB,CAAC,CAAC;IACF,IAAM;MAAEkC;IAAa,CAAC,GAAG,IAAI,CAAChB,KAAK;IACnC,IAAI,CAACkH,oBAAoB,CAAClG,YAAY,EAAEoL,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC;EACnE;;EAEA;AACF;AACA;EACEU,SAASA,CAAA,EAAS;IAChB,IAAM;MAAE5H,KAAK;MAAEd;IAAM,CAAC,GAAG,IAAI,CAAChH,KAAK;IACnC,IAAM;MAAEgN,aAAa;MAAEC;IAAiB,CAAC,GAAGjG,KAAK;IAEjD,IAAMnE,GAAG,GAAGoK,gBAAgB,KAAKpF,SAAS,IAAIoF,gBAAgB,GAAG,IAAI,GAAG,CAAC;IACzE,IAAMG,MAAM,GACVH,gBAAgB,KAAKpF,SAAS,IAAIoF,gBAAgB,GAC9C,IAAI,GACJnF,KAAK,CAACkC,QAAQ,GAAG,CAAC;IACxB,IAAMlH,IAAI,GAAGkK,aAAa,KAAKnF,SAAS,IAAImF,aAAa,GAAG,IAAI,GAAG,CAAC;IACpE,IAAMG,KAAK,GACTH,aAAa,KAAKnF,SAAS,IAAImF,aAAa,GACxC,IAAI,GACJlF,KAAK,CAACqC,WAAW,GAAG,CAAC;IAC3B,IAAI,CAACE,iBAAiB,CAAC,CAAC,IAAIxN,SAAS,CAACiG,IAAI,EAAED,GAAG,EAAEsK,KAAK,EAAEC,MAAM,CAAC,CAAC,CAAC;EACnE;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEuC,UAAUA,CACRC,WAAmB,EACnBC,QAAgB,EAChB/C,eAAwB,EAClB;IACN,IAAM;MAAEnJ,SAAS;MAAEC,YAAY;MAAEI,kBAAkB;MAAED;IAAgB,CAAC,GACpE,IAAI,CAACnB,KAAK;IACZ,IAAMgI,MAAM,GAAGkC,eAAe,GAAG9I,kBAAkB,GAAGJ,YAAY;IAClE,IAAM0F,GAAG,GAAGwD,eAAe,GAAG/I,eAAe,GAAGJ,SAAS;IACzD,IAAI2F,GAAG,KAAK,IAAI,IAAIsB,MAAM,KAAK,IAAI,EAAE;MACnC,IAAM;QAAE9H,IAAI;QAAED;MAAI,CAAC,GAAG,IAAI,CAACD,KAAK;MAChC,IAAI,CAACkH,oBAAoB,CAAChH,IAAI,EAAED,GAAG,EAAEiK,eAAe,CAAC;IACvD,CAAC,MAAM;MACL,IAAM;QAAEhF;MAAM,CAAC,GAAG,IAAI,CAAC9H,KAAK;MAC5B,IAAM;QAAEmK,WAAW;QAAEH;MAAS,CAAC,GAAGlC,KAAK;MAEvC,IAAMhF,KAAI,GAAGvG,KAAK,CAACqO,MAAM,GAAGgF,WAAW,EAAE,CAAC,EAAEzF,WAAW,GAAG,CAAC,CAAC;MAC5D,IAAMtH,IAAG,GAAGtG,KAAK,CAAC+M,GAAG,GAAGuG,QAAQ,EAAE,CAAC,EAAE7F,QAAQ,GAAG,CAAC,CAAC;MAClD,IAAI,CAACF,oBAAoB,CAAChH,KAAI,EAAED,IAAG,EAAEiK,eAAe,CAAC;IACvD;EACF;;EAEA;AACF;AACA;AACA;EACEgD,qBAAqBA,CAAA,EAAuD;IAAA,IAAtDC,SAAS,GAAAnI,SAAA,CAAAxC,MAAA,QAAAwC,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG/K,SAAS,CAACC,mBAAmB,CAACkT,IAAI;IAClE,IAAM;MAAElI;IAAM,CAAC,GAAG,IAAI,CAAC9H,KAAK;IAC5B,IAAM;MAAEmK,WAAW;MAAEH;IAAS,CAAC,GAAGlC,KAAK;IACvC,IAAM;MAAEnE,SAAS;MAAEC,YAAY;MAAEK;IAAe,CAAC,GAAG,IAAI,CAACrB,KAAK;IAC9D,IAAMqN,MAAM,GACVhM,cAAc,CAACmB,MAAM,GAAG,CAAC,GACrBnB,cAAc,GACd,CAACpH,SAAS,CAACqT,QAAQ,CAACtM,YAAY,EAAED,SAAS,CAAC,CAAC;IACnD,IAAIiL,UAAU,GAAG,IAAI;IACrB,IAAIqB,MAAM,CAAC7K,MAAM,KAAK,CAAC,IAAIvI,SAAS,CAACqR,SAAS,CAAC+B,MAAM,CAAC,KAAK,CAAC,EAAE;MAAA,IAAAE,mBAAA;MAC5D;MACA,IAAMC,SAAS,GAAG,IAAIvT,SAAS,CAAC,CAAC,EAAE,CAAC,EAAEsN,WAAW,GAAG,CAAC,EAAEH,QAAQ,GAAG,CAAC,CAAC;MACpE4E,UAAU,IAAAuB,mBAAA,GACRC,SAAS,CAACvB,QAAQ,CAACjL,YAAY,EAAED,SAAS,EAAEoM,SAAS,CAAC,cAAAI,mBAAA,cAAAA,mBAAA,GACtDC,SAAS,CAACvF,SAAS,CAACkF,SAAS,CAAC;IAClC,CAAC,MAAM;MACLnB,UAAU,GAAG/R,SAAS,CAACgS,QAAQ,CAC7BhS,SAAS,CAACiS,aAAa,CAACmB,MAAM,EAAE9F,WAAW,EAAEH,QAAQ,CAAC,EACtDpG,YAAY,EACZD,SAAS,EACToM,SACF,CAAC;IACH;IAEA,IAAInB,UAAU,IAAI,IAAI,EAAE;MACtB,IAAM;QAAEhE,MAAM;QAAEtB;MAAI,CAAC,GAAGsF,UAAU;MAClC,IAAI,CAACzI,QAAQ,CAAC;QACZvC,YAAY,EAAEgH,MAAM;QACpBjH,SAAS,EAAE2F;MACb,CAAC,CAAC;MAEF,IAAI,CAACzM,SAAS,CAAC8N,YAAY,CAAC1G,cAAc,EAAE2G,MAAM,EAAEtB,GAAG,CAAC,EAAE;QACxD,IAAI,CAACnD,QAAQ,CAAC;UACZlC,cAAc,EAAE,CAACpH,SAAS,CAACqT,QAAQ,CAACtF,MAAM,EAAEtB,GAAG,CAAC,CAAC;UACjDxF,oBAAoB,EAAE8G,MAAM;UAC5B/G,iBAAiB,EAAEyF,GAAG;UACtBtF,kBAAkB,EAAE4G,MAAM;UAC1B7G,eAAe,EAAEuF;QACnB,CAAC,CAAC;MACJ;MAEA,IAAI,CAAC+G,cAAc,CAACzB,UAAU,CAAChE,MAAM,EAAEgE,UAAU,CAACtF,GAAG,CAAC;IACxD;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEQ,oBAAoBA,CAClBc,MAAsB,EACtBtB,GAAmB,EAIb;IAAA,IAHNwD,eAAe,GAAAlF,SAAA,CAAAxC,MAAA,QAAAwC,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,KAAK;IAAA,IACvB0I,gBAAgB,GAAA1I,SAAA,CAAAxC,MAAA,QAAAwC,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,IAAI;IAAA,IACvBmF,qBAAqB,GAAAnF,SAAA,CAAAxC,MAAA,QAAAwC,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,KAAK;IAE7B,IAAI,CAACkF,eAAe,EAAE;MACpB,IAAI,CAACF,cAAc,CAAChC,MAAM,EAAEtB,GAAG,CAAC;IAClC;IAEA,IAAI,CAACuD,aAAa,CAACjC,MAAM,EAAEtB,GAAG,EAAEwD,eAAe,EAAEC,qBAAqB,CAAC;IAEvE,IAAIuD,gBAAgB,EAAE;MACpB,IAAI,CAACD,cAAc,CAACzF,MAAM,EAAEtB,GAAG,CAAC;IAClC;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE+G,cAAcA,CAACzF,MAAsB,EAAEtB,GAAmB,EAAQ;IAChE,IAAI,CAAC,IAAI,CAAC9G,OAAO,EAAE,MAAM,IAAIkF,KAAK,CAAC,iBAAiB,CAAC;IAErD,IAAM;MAAE9F;IAAiB,CAAC,GAAG,IAAI;IACjC,IAAM;MAAEmI,aAAa;MAAEG,YAAY;MAAEqG,UAAU;MAAEC;IAAY,CAAC,GAC5D,IAAI,CAAChO,OAAO;IACd,IAAM6J,WAAW,GAAG,IAAI,CAAC1E,cAAc,CAAC,IAAI,CAAC/E,KAAK,CAAC;IACnD,IAAI;MAAEC,GAAG;MAAEC,IAAI;MAAEC,SAAS;MAAEC;IAAW,CAAC,GAAG,IAAI,CAACJ,KAAK;IAErD,IAAI0G,GAAG,IAAI,IAAI,IAAI,CAACtM,SAAS,CAACyT,aAAa,CAACnH,GAAG,EAAE,IAAI,CAAC9G,OAAO,CAAC,EAAE;MAC9D,IAAI8G,GAAG,GAAGiH,UAAU,EAAE;QACpB1N,GAAG,GAAGjB,gBAAgB,CAAC8O,mBAAmB,CAACrE,WAAW,EAAE/C,GAAG,CAAC;QAC5DvG,SAAS,GAAG,CAAC;MACf,CAAC,MAAM,IAAIuG,GAAG,GAAGS,aAAa,EAAE;QAC9BlH,GAAG,GAAGjB,gBAAgB,CAAC+O,sBAAsB,CAACtE,WAAW,EAAE/C,GAAG,CAAC;QAC/DvG,SAAS,GAAG,CAAC;MACf;IACF;IAEA,IAAI6H,MAAM,IAAI,IAAI,IAAI,CAAC5N,SAAS,CAAC4T,gBAAgB,CAAChG,MAAM,EAAE,IAAI,CAACpI,OAAO,CAAC,EAAE;MACvE,IAAIoI,MAAM,GAAG4F,WAAW,EAAE;QACxB1N,IAAI,GAAGlB,gBAAgB,CAACiP,qBAAqB,CAACxE,WAAW,EAAEzB,MAAM,CAAC;QAClE5H,UAAU,GAAG,CAAC;MAChB,CAAC,MAAM,IAAI4H,MAAM,GAAGV,YAAY,EAAE;QAChCpH,IAAI,GAAGlB,gBAAgB,CAACkP,sBAAsB,CAACzE,WAAW,EAAEzB,MAAM,CAAC;QACnE5H,UAAU,GAAG,CAAC;MAChB;IACF;IAEA,IAAI,CAAC+N,YAAY,CAAC;MAAElO,GAAG;MAAEC,IAAI;MAAEC,SAAS;MAAEC;IAAW,CAAC,CAAC;EACzD;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE+N,YAAYA,CAACC,SAA6B,EAA6B;IAAA,IAA3BC,WAAW,GAAArJ,SAAA,CAAAxC,MAAA,QAAAwC,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,KAAK;IAC7D,IAAI,CAAC,IAAI,CAACpF,OAAO,EAAE,MAAM,IAAIkF,KAAK,CAAC,iBAAiB,CAAC;IAErD,IAAM;MAAErC,cAAc;MAAEC;IAAc,CAAC,GAAG,IAAI,CAACtF,KAAK;IACpD,IAAM;MAAE6C,GAAG;MAAEC;IAAK,CAAC,GAAGkO,SAAS;IAC/B,IAAM;MAAE/G,OAAO;MAAEG,QAAQ;MAAE8G,cAAc;MAAEC;IAAiB,CAAC,GAC3D,IAAI,CAAC3O,OAAO;IACd,IAAIK,GAAG,IAAI,IAAI,IAAIqO,cAAc,EAAE;MACjC,IAAI,CAAC/K,QAAQ,CAAC;QAAEzE,eAAe,EAAE2D,cAAc,IAAIxC,GAAG,IAAIoH;MAAQ,CAAC,CAAC;IACtE;IACA,IAAInH,IAAI,IAAI,IAAI,IAAIqO,gBAAgB,EAAE;MACpC,IAAI,CAAChL,QAAQ,CAAC;QAAExE,cAAc,EAAE2D,aAAa,IAAIxC,IAAI,IAAIsH;MAAS,CAAC,CAAC;IACtE;IAEA,IAAI,CAACjE,QAAQ,CAAC6K,SAAsB,CAAC;IACrC,IAAIC,WAAW,EAAE;MACf,IAAI,CAACA,WAAW,CAAC,CAAC;IACpB;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEG,YAAYA,CACVxG,MAAoB,EACpBtB,GAAiB,EAIX;IAAA,IAHN+H,WAAW,GAAAzJ,SAAA,CAAAxC,MAAA,QAAAwC,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,KAAK;IAAA,IACnB0J,cAA8C,GAAA1J,SAAA,CAAAxC,MAAA,OAAAwC,SAAA,MAAAC,SAAA;IAAA,IAC9C0J,KAAc,GAAA3J,SAAA,CAAAxC,MAAA,OAAAwC,SAAA,MAAAC,SAAA;IAEd,IAAM;MAAEC;IAAM,CAAC,GAAG,IAAI,CAAC9H,KAAK;IAC5B,IAAI,CAAC3B,mBAAmB,CAACyJ,KAAK,CAAC,EAAE,MAAM,IAAIJ,KAAK,CAAC,uBAAuB,CAAC;IAEzE,IAAM8J,WAAW,GAAG,IAAI,CAAC/I,cAAc,CAACmC,MAAM,CAAC;IAC/C,IAAMpB,QAAQ,GAAG,IAAI,CAACR,WAAW,CAACM,GAAG,CAAC;IACtC,IAAMmI,IAAI,GAAG;MACX7G,MAAM;MACNtB,GAAG;MACHgI,cAAc;MACdC,KAAK,EACHA,KAAK,KAAK1J,SAAS,GACf0J,KAAK,GACLzJ,KAAK,CAAC4J,gBAAgB,CAACF,WAAW,EAAEhI,QAAQ,CAAC;MACnD6H;IACF,CAAC;IAED,IAAI,CAAClL,QAAQ,CAAC;MAAEhC,WAAW,EAAEsN,IAAI;MAAE7N,YAAY,EAAEgH,MAAM;MAAEjH,SAAS,EAAE2F;IAAI,CAAC,CAAC;IAC1E,IAAI,CAAC+G,cAAc,CAACzF,MAAM,EAAEtB,GAAG,CAAC;EAClC;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEqI,cAAcA,CACZ/G,MAAoB,EACpBtB,GAAiB,EACjBiI,KAAa,EACJ;IACT,IAAM;MAAEzJ;IAAM,CAAC,GAAG,IAAI,CAAC9H,KAAK;IAE5B,IAAMwR,WAAW,GAAG,IAAI,CAAC/I,cAAc,CAACmC,MAAM,CAAC;IAC/C,IAAMpB,QAAQ,GAAG,IAAI,CAACR,WAAW,CAACM,GAAG,CAAC;IACtC,OACEjL,mBAAmB,CAACyJ,KAAK,CAAC,IAC1BA,KAAK,CAAC6J,cAAc,CAACH,WAAW,EAAEhI,QAAQ,EAAE+H,KAAK,CAAC;EAEtD;;EAEA;AACF;AACA;AACA;AACA;AACA;EACQK,UAAUA,CAACL,KAA0B,EAAiB;IAAA,IAAAM,KAAA;IAAA,OAAAC,iBAAA;MAC1D,IAAM;QAAEhK;MAAM,CAAC,GAAG+J,KAAI,CAAC7R,KAAK;MAC5B,IAAM;QAAE6B,YAAY;QAAEC,SAAS;QAAEmC;MAAe,CAAC,GAAG4N,KAAI,CAACjP,KAAK;MAE9D,IAAI;QACFxE,yBAAyB,CAAC0J,KAAK,CAAC;QAEhC,IACE,CAACA,KAAK,CAACiK,UAAU,IACjB,CAAC9N,cAAc,CAAC+N,KAAK,CAACzH,KAAK,IAAIzC,KAAK,CAACmK,eAAe,CAAC1H,KAAK,CAAC,CAAC,EAC5D;UACA,MAAM,IAAIrM,UAAU,CAAC,mCAAmC,CAAC;QAC3D;QAEA,IAAI+F,cAAc,CAACmB,MAAM,IAAI,CAAC,EAAE;UAC9B,MAAM,IAAIlH,UAAU,CAAC,6BAA6B,CAAC;QACrD;QAEA,IAAI,OAAOqT,KAAK,KAAK,QAAQ,EAAE;UAC7B;UACA,IAAMW,MAAsB,GAAG,EAAE;UAEjC,IAAMC,WAAW,GAAGnV,SAAS,CAACoV,cAAc,CAC1CnO,cAAc,EACdpC,YAAY,EACZC,SACF,CAAC;UACDjF,SAAS,CAACwV,WAAW,CAACF,WAAW,EAAE,CAACvH,MAAM,EAAEtB,GAAG,KAAK;YAClD4I,MAAK,CAACjE,IAAI,CAAC;cAAErD,MAAM;cAAEtB,GAAG;cAAEgJ,IAAI,EAAEf;YAAM,CAAC,CAAC;UAC1C,CAAC,CAAC;UACF,MAAMzJ,KAAK,CAACyK,SAAS,CAACL,MAAK,CAAC;UAC5B;QACF;;QAEA;QACA,IAAM7C,WAAW,GAAGkC,KAAK,CAACnM,MAAM;QAChC,IAAMoN,UAAU,GAAGjB,KAAK,CAAC,CAAC,CAAC,CAACnM,MAAM;QAClC,IAAM;UAAE+E,WAAW;UAAEH;QAAS,CAAC,GAAGlC,KAAK;QACvC,IAAImI,OAAM,GAAGhM,cAAc;QAC3B;QACA;QACA,IACEgM,OAAM,CAAC+B,KAAK,CACVzH,KAAK;UAAA,IAAAkI,kBAAA,EAAAC,eAAA;UAAA,OACH7V,SAAS,CAACqR,SAAS,CAAC,CAAC3D,KAAK,CAAC,CAAC,KAAK,CAAC,IAClC,EAAAkI,kBAAA,GAAClI,KAAK,CAACO,WAAW,cAAA2H,kBAAA,cAAAA,kBAAA,GAAI,CAAC,IAAID,UAAU,IAAIrI,WAAW,IACpD,EAAAuI,eAAA,GAACnI,KAAK,CAACQ,QAAQ,cAAA2H,eAAA,cAAAA,eAAA,GAAI,CAAC,IAAIrD,WAAW,IAAIrF,QAAQ;QAAA,CACnD,CAAC,EACD;UACA;UACAiG,OAAM,GAAGA,OAAM,CAAC0C,GAAG,CACjBpI,KAAK;YAAA,IAAAqI,mBAAA,EAAAC,gBAAA;YAAA,OACH,IAAIhW,SAAS,CACX0N,KAAK,CAACO,WAAW,EACjBP,KAAK,CAACQ,QAAQ,EACd,EAAA6H,mBAAA,GAACrI,KAAK,CAACO,WAAW,cAAA8H,mBAAA,cAAAA,mBAAA,GAAI,CAAC,IAAIJ,UAAU,GAAG,CAAC,EACzC,EAAAK,gBAAA,GAACtI,KAAK,CAACQ,QAAQ,cAAA8H,gBAAA,cAAAA,gBAAA,GAAI,CAAC,IAAIxD,WAAW,GAAG,CACxC,CAAC;UAAA,CACL,CAAC;UACDwC,KAAI,CAACxH,iBAAiB,CAAC4F,OAAM,CAAC;QAChC;QAEA,IAAMiC,KAAsB,GAAG,EAAE;QACjCjC,OAAM,CAAC6C,OAAO,CAACvI,KAAK,IAAI;UAAA,IAAAwI,mBAAA;UACtB,IAAI,EAAAA,mBAAA,GAACxI,KAAK,CAACO,WAAW,cAAAiI,mBAAA,cAAAA,mBAAA,GAAI,CAAC,IAAIP,UAAU,GAAGrI,WAAW,EAAE;YACvD,MAAM,IAAIjM,UAAU,CAAC,wCAAwC,CAAC;UAChE;UAEA,KAAK,IAAImJ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGmL,UAAU,EAAEnL,CAAC,IAAI,CAAC,EAAE;YACtC,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG8H,WAAW,EAAE9H,CAAC,IAAI,CAAC,EAAE;cAAA,IAAAyL,mBAAA,EAAAC,gBAAA;cACvCf,KAAK,CAACjE,IAAI,CAAC;gBACTrD,MAAM,EAAE,EAAAoI,mBAAA,GAACzI,KAAK,CAACO,WAAW,cAAAkI,mBAAA,cAAAA,mBAAA,GAAI,CAAC,IAAI3L,CAAC;gBACpCiC,GAAG,EAAE,EAAA2J,gBAAA,GAAC1I,KAAK,CAACQ,QAAQ,cAAAkI,gBAAA,cAAAA,gBAAA,GAAI,CAAC,IAAI1L,CAAC;gBAC9B+K,IAAI,EAAEf,KAAK,CAAChK,CAAC,CAAC,CAACF,CAAC;cAClB,CAAC,CAAC;YACJ;UACF;QACF,CAAC,CAAC;QACF,MAAMS,KAAK,CAACyK,SAAS,CAACL,KAAK,CAAC;MAC9B,CAAC,CAAC,OAAO7G,CAAC,EAAE;QACV,IAAM;UAAE6H;QAAQ,CAAC,GAAGrB,KAAI,CAAC7R,KAAK;QAC9BkT,OAAO,CAAC7H,CAAC,YAAY3D,KAAK,GAAG2D,CAAC,GAAG,IAAI3D,KAAK,IAAA5H,MAAA,CAAIuL,CAAC,CAAE,CAAC,CAAC;MACrD;IAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE8H,eAAeA,CACbvI,MAAoB,EACpBtB,GAAiB,EACjBiI,KAAa,EACJ;IACT,IAAM;MAAEzJ;IAAM,CAAC,GAAG,IAAI,CAAC9H,KAAK;IAC5B5B,yBAAyB,CAAC0J,KAAK,CAAC;IAEhC,IAAM0J,WAAW,GAAG,IAAI,CAAC/I,cAAc,CAACmC,MAAM,CAAC;IAC/C,IAAMpB,QAAQ,GAAG,IAAI,CAACR,WAAW,CAACM,GAAG,CAAC;IACtC,IAAIxB,KAAK,CAAC6J,cAAc,CAACH,WAAW,EAAEhI,QAAQ,EAAE+H,KAAK,CAAC,EAAE;MACtDzJ,KAAK,CAACqL,eAAe,CAAC3B,WAAW,EAAEhI,QAAQ,EAAE+H,KAAK,CAAC;MACnD,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;;EAEA;AACF;AACA;AACA;AACA;EACE6B,iBAAiBA,CAACnD,MAA4B,EAAEsB,KAAa,EAAQ;IACnE,IAAM;MAAEzJ;IAAM,CAAC,GAAG,IAAI,CAAC9H,KAAK;IAC5B,IAAM;MAAE6B,YAAY;MAAEC;IAAU,CAAC,GAAG,IAAI,CAACc,KAAK;IAE9C,IAAMuP,WAAW,GAAGnV,SAAS,CAACoV,cAAc,CAC1CnC,MAAM,EACNpO,YAAY,EACZC,SACF,CAAC;IACD,IAAIzD,mBAAmB,CAACyJ,KAAK,CAAC,EAAE;MAC9BA,KAAK,CAACsL,iBAAiB,CAACjB,WAAW,EAAEZ,KAAK,CAAC;IAC7C;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE8B,UAAUA,CAAC/J,GAAiB,EAAEsB,MAAoB,EAAW;IAC3D,IAAM;MAAE3G;IAAe,CAAC,GAAG,IAAI,CAACrB,KAAK;IAErC,KAAK,IAAI6J,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxI,cAAc,CAACmB,MAAM,EAAEqH,CAAC,IAAI,CAAC,EAAE;MAAA,IAAA6G,qBAAA,EAAAC,qBAAA;MACjD,IAAM5F,aAAa,GAAG1J,cAAc,CAACwI,CAAC,CAAC;MACvC,IAAM+G,WAAW,GACf7F,aAAa,CAAC5C,QAAQ,KAAK,IAAI,IAC9B4C,aAAa,CAAC5C,QAAQ,IAAIzB,GAAG,IAAIA,GAAG,MAAAgK,qBAAA,GAAK3F,aAAa,CAAC1C,MAAM,cAAAqI,qBAAA,cAAAA,qBAAA,GAAI,CAAC,CAAE;MACvE,IAAMG,cAAc,GAClB9F,aAAa,CAAC7C,WAAW,KAAK,IAAI,IACjC6C,aAAa,CAAC7C,WAAW,IAAIF,MAAM,IAClCA,MAAM,MAAA2I,qBAAA,GAAK5F,aAAa,CAAC3C,SAAS,cAAAuI,qBAAA,cAAAA,qBAAA,GAAI,CAAC,CAAE;MAC7C,IAAIC,WAAW,IAAIC,cAAc,EAAE;QACjC,OAAO,IAAI;MACb;IACF;IAEA,OAAO,KAAK;EACd;EAEAC,iBAAiBA,CAAA,EAAqC;IAAA,IAApC7T,MAAqB,GAAA+H,SAAA,CAAAxC,MAAA,QAAAwC,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,IAAI;IAC5C,IAAI,IAAI,CAAClF,cAAc,KAAK9D,IAAI,CAACgB,kBAAkB,CAACC,MAAM,CAAC,EAAE;IAC7D,IAAI,IAAI,CAAC6C,cAAc,IAAI,IAAI,EAAE;MAC/BiR,QAAQ,CAACC,eAAe,CAACC,SAAS,CAACC,MAAM,CAAC,IAAI,CAACpR,cAAc,CAAC;IAChE;IACA,IAAI,CAACA,cAAc,GAAG9D,IAAI,CAACgB,kBAAkB,CAACC,MAAM,CAAC;IACrD,IAAI,IAAI,CAAC6C,cAAc,IAAI,IAAI,EAAE;MAC/BiR,QAAQ,CAACC,eAAe,CAACC,SAAS,CAACE,GAAG,CAAC,IAAI,CAACrR,cAAc,CAAC;IAC7D;IACAiR,QAAQ,CAACC,eAAe,CAACC,SAAS,CAACE,GAAG,CAAC,mBAAmB,CAAC;EAC7D;EAEAC,oBAAoBA,CAAA,EAAS;IAC3B,IAAI,IAAI,CAACtR,cAAc,IAAI,IAAI,EAAE;MAC/BiR,QAAQ,CAACC,eAAe,CAACC,SAAS,CAACC,MAAM,CAAC,IAAI,CAACpR,cAAc,CAAC;MAC9DiR,QAAQ,CAACC,eAAe,CAACC,SAAS,CAACC,MAAM,CAAC,mBAAmB,CAAC;MAC9D,IAAI,CAACpR,cAAc,GAAG,IAAI;IAC5B;EACF;EAEAuR,cAAcA,CAAC/M,KAAuB,EAAQ;IAC5C,IAAI,CAACJ,aAAa,CAAC,CAAC;IAEpB,IAAMoN,UAAU,GAAG,IAAIC,UAAU,CAAC,QAAQ,EAAEjN,KAAK,CAACkN,WAAW,CAAC;IAE9D,IAAI,CAACzR,SAAS,GAAG0R,UAAU,CAAC,MAAM;MAChC,IAAI,CAAClT,eAAe,CAAC+S,UAAU,CAAC;IAClC,CAAC,EAAEtV,IAAI,CAAC0V,WAAW,CAAC;EACtB;EAEAxN,aAAaA,CAAA,EAAS;IACpB,IAAI,IAAI,CAACnE,SAAS,EAAE;MAClB4R,YAAY,CAAC,IAAI,CAAC5R,SAAS,CAAC;MAC5B,IAAI,CAACA,SAAS,GAAG,IAAI;IACvB;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;EACU+I,UAAUA,CAAA,EAAuC;IAAA,IAAtClJ,OAAO,GAAAoF,SAAA,CAAAxC,MAAA,QAAAwC,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,IAAI,CAACxB,aAAa,CAAC,CAAC;IAC/C,IAAI,CAAC,IAAI,CAACpE,MAAM,EAAE,MAAM,IAAI0F,KAAK,CAAC,mBAAmB,CAAC;IACtD,IAAI,CAAC,IAAI,CAACzF,aAAa,EAAE,MAAM,IAAIyF,KAAK,CAAC,iBAAiB,CAAC;IAE3D,IAAM;MAAE3F,QAAQ;MAAEE,aAAa,EAAEnD,OAAO;MAAE2D;IAAY,CAAC,GAAG,IAAI;IAE9D3D,OAAO,CAAC0V,IAAI,CAAC,CAAC;IAEdzS,QAAQ,CAAC2J,UAAU,CAACjJ,WAAW,CAAC;IAEhC3D,OAAO,CAAC2V,OAAO,CAAC,CAAC;EACnB;;EAEA;AACF;AACA;EACEC,KAAKA,CAAA,EAAS;IAAA,IAAAC,aAAA;IACZ,CAAAA,aAAA,OAAI,CAAC3S,MAAM,cAAA2S,aAAA,uBAAXA,aAAA,CAAaD,KAAK,CAAC,CAAC;EACtB;;EAEA;AACF;AACA;AACA;EACEE,SAASA,CAAA,EAAY;IACnB,OAAOjB,QAAQ,CAACkB,aAAa,KAAK,IAAI,CAAC7S,MAAM;EAC/C;;EAEA;AACF;AACA;AACA;AACA;EACExB,WAAWA,CAAC0G,KAAuB,EAAQ;IAAA,IAAA4N,aAAA;IACzC,IAAMC,SAAS,GAAG,IAAI,CAAC9N,qBAAqB,CAACC,KAAK,CAAC;IAEnD,IAAM3G,aAAa,GAAG,IAAI,CAACgI,gBAAgB,CAAC,CAAC;IAC7C,KAAK,IAAIkE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGlM,aAAa,CAAC6E,MAAM,EAAEqH,CAAC,IAAI,CAAC,EAAE;MAChD,IAAMuI,YAAY,GAAGzU,aAAa,CAACkM,CAAC,CAAC;MACrC,IAAIuI,YAAY,CAACC,OAAO,CAACF,SAAS,EAAE,IAAI,EAAE7N,KAAK,CAAC,KAAK,KAAK,EAAE;QAC1DA,KAAK,CAACgO,eAAe,CAAC,CAAC;QACvBhO,KAAK,CAACiO,cAAc,CAAC,CAAC;QACtB;MACF;IACF;IAEA,CAAAL,aAAA,OAAI,CAAC9S,MAAM,cAAA8S,aAAA,uBAAXA,aAAA,CAAaJ,KAAK,CAAC,CAAC;EACtB;;EAEA;AACF;AACA;AACA;EACEhU,iBAAiBA,CAACwG,KAAuB,EAAQ;IAC/C,IAAM6N,SAAS,GAAG,IAAI,CAAC9N,qBAAqB,CAACC,KAAK,CAAC;IAEnD,IAAM3G,aAAa,GAAG,IAAI,CAACgI,gBAAgB,CAAC,CAAC;IAC7C,KAAK,IAAIkE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGlM,aAAa,CAAC6E,MAAM,EAAEqH,CAAC,IAAI,CAAC,EAAE;MAChD,IAAMuI,YAAY,GAAGzU,aAAa,CAACkM,CAAC,CAAC;MACrC,IAAIuI,YAAY,CAACI,aAAa,CAACL,SAAS,EAAE,IAAI,EAAE7N,KAAK,CAAC,KAAK,KAAK,EAAE;QAChEA,KAAK,CAACgO,eAAe,CAAC,CAAC;QACvBhO,KAAK,CAACiO,cAAc,CAAC,CAAC;QACtB;MACF;IACF;EACF;;EAEA;AACF;AACA;AACA;AACA;EACEpU,sBAAsBA,CACpBsU,YAAwC,EACxCnO,KAAwB,EAClB;IACN,IAAMhH,WAAW,GAAG,IAAI,CAACmI,cAAc,CAAC,CAAC;IACzC,IAAIxI,MAAM,GAAG,IAAI;IACjB,KAAK,IAAI4M,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGvM,WAAW,CAACkF,MAAM,EAAEqH,CAAC,IAAI,CAAC,EAAE;MAC9C,IAAM6I,UAAU,GAAGpV,WAAW,CAACuM,CAAC,CAAC;MACjC,IAAM8I,MAAM,GACVD,UAAU,CAACD,YAAY,CAAC,IAAI,IAAI,IAChCC,UAAU,CAACD,YAAY,CAAC,CAACnO,KAAK,EAAE,IAAI,CAAC;MACvC,IAAIqO,MAAM,KAAK,KAAK,EAAE;QAAA,IAAAC,qBAAA,EAAAC,qBAAA;QACpB,IAAIH,UAAU,CAACzV,MAAM,IAAI,IAAI,EAAE;UAC7B,CAAC;YAAEA;UAAO,CAAC,GAAGyV,UAAU;QAC1B;QACA,IAAMI,OAAO,GAAGH,MAAmC;QACnD,KAAAC,qBAAA,GAAIE,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAER,eAAe,cAAAM,qBAAA,cAAAA,qBAAA,GAAI,IAAI,EAAEtO,KAAK,CAACgO,eAAe,CAAC,CAAC;QAC7D,KAAAO,qBAAA,GAAIC,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEP,cAAc,cAAAM,qBAAA,cAAAA,qBAAA,GAAI,IAAI,EAAEvO,KAAK,CAACiO,cAAc,CAAC,CAAC;QAC3D;MACF;IACF;IACA,IAAI,CAAChP,QAAQ,CAAC;MAAEtG;IAAO,CAAC,CAAC;EAC3B;EAEAmB,aAAaA,CAACkG,KAAwB,EAAQ;IAC5C,IAAI,CAACnG,sBAAsB,CAAC,QAAQ,EAAEmG,KAAK,CAAC;EAC9C;EAEAjG,WAAWA,CAACiG,KAAwB,EAAQ;IAC1C,IAAI,CAACnG,sBAAsB,CAAC,MAAM,EAAEmG,KAAK,CAAC;EAC5C;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEyO,mBAAmBA,CACjBN,YAA0C,EAC1CnO,KAAqB,EAGf;IAAA,IAFN0O,iBAAiB,GAAAhO,SAAA,CAAAxC,MAAA,QAAAwC,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,IAAI;IAAA,IACxBiO,mBAAmB,GAAAjO,SAAA,CAAAxC,MAAA,QAAAwC,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,KAAK;IAE3B,IAAMmN,SAAS,GAAG,IAAI,CAAC9N,qBAAqB,CAACC,KAAK,CAAC;IACnD,IAAM3G,aAAa,GAAG,IAAI,CAACgI,gBAAgB,CAAC,CAAC;IAC7C,IAAI1I,MAAM,GAAG,IAAI;IACjB,KAAK,IAAI4M,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGlM,aAAa,CAAC6E,MAAM,EAAEqH,CAAC,IAAI,CAAC,EAAE;MAChD,IAAMuI,YAAY,GAAGzU,aAAa,CAACkM,CAAC,CAAC;MACrC,IAAM8I,MAAM,GACVP,YAAY,CAACK,YAAY,CAAC,IAAI,IAAI,IAClCL,YAAY,CAACK,YAAY,CAAC,CAACN,SAAS,EAAE,IAAI,EAAE7N,KAAK,CAAC;MACpD,IAAIqO,MAAM,KAAK,KAAK,EAAE;QAAA,IAAAO,sBAAA,EAAAC,sBAAA;QACpB,IAAIf,YAAY,CAACnV,MAAM,IAAI,IAAI,EAAE;UAC/B,CAAC;YAAEA;UAAO,CAAC,GAAGmV,YAAY;UAC1B,IAAIa,mBAAmB,EAAE;YACvB,IAAI,CAACnC,iBAAiB,CAAC7T,MAAM,CAAC;UAChC;QACF;;QAEA;QACA,IAAM6V,OAAO,GAAGH,MAAmC;QACnD,KAAAO,sBAAA,GAAIJ,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAER,eAAe,cAAAY,sBAAA,cAAAA,sBAAA,GAAI,IAAI,EAAE5O,KAAK,CAACgO,eAAe,CAAC,CAAC;QAC7D,KAAAa,sBAAA,GAAIL,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEP,cAAc,cAAAY,sBAAA,cAAAA,sBAAA,GAAI,IAAI,EAAE7O,KAAK,CAACiO,cAAc,CAAC,CAAC;QAC3D;MACF;IACF;IAEA,IAAI,CAAChP,QAAQ,CAAC;MAAEtG;IAAO,CAAC,CAAC;IAEzB,IAAI+V,iBAAiB,EAAE;MACrB,IAAM;QAAEvO,CAAC;QAAEE;MAAE,CAAC,GAAGwN,SAAS;MAC1B,IAAI,CAAC5O,QAAQ,CAAC;QAAE1C,MAAM,EAAE4D,CAAC;QAAE3D,MAAM,EAAE6D;MAAE,CAAC,CAAC;IACzC;EACF;EAEArG,eAAeA,CAACgG,KAAuB,EAAQ;IAC7C7H,MAAM,CAACkF,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAACpD,eAAe,EAAE,IAAI,CAAC;IAChE9B,MAAM,CAACkF,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAACjD,aAAa,EAAE,IAAI,CAAC;IAE5D,IAAI4F,KAAK,CAAC8O,MAAM,IAAI,IAAI,IAAI9O,KAAK,CAAC8O,MAAM,KAAK,CAAC,EAAE;MAC9C;IACF;IAEA,IAAI,CAACL,mBAAmB,CAAC,QAAQ,EAAEzO,KAAK,CAAC;IAEzC,IAAI,CAAC+M,cAAc,CAAC/M,KAAK,CAAC;EAC5B;EAEApG,iBAAiBA,CAACoG,KAAuB,EAAQ;IAC/C,IAAI,CAACyO,mBAAmB,CAAC,eAAe,EAAEzO,KAAK,CAAC;EAClD;EAEA9F,eAAeA,CAAC8F,KAAuB,EAAQ;IAC7C,IAAI,CAACyO,mBAAmB,CAAC,QAAQ,EAAEzO,KAAK,CAAC;EAC3C;EAEA7F,gBAAgBA,CAAC6F,KAAuB,EAAQ;IAC9C,IAAI,CAACyO,mBAAmB,CAAC,SAAS,EAAEzO,KAAK,EAAE,KAAK,CAAC;IACjD,IAAI,CAACf,QAAQ,CAAC;MAAE1C,MAAM,EAAE,IAAI;MAAEC,MAAM,EAAE;IAAK,CAAC,CAAC;EAC/C;EAEAvC,eAAeA,CAAC+F,KAAiB,EAAQ;IACvC,IAAI,CAACf,QAAQ,CAAC;MAAE3C,UAAU,EAAE;IAAK,CAAC,CAAC;IACnC,IAAI,CAACmS,mBAAmB,CAAC,QAAQ,EAAEzO,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;IAErD,IAAI,CAACJ,aAAa,CAAC,CAAC;EACtB;EAEAxF,aAAaA,CAAC4F,KAAiB,EAAQ;IACrC7H,MAAM,CAACuH,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAACzF,eAAe,EAAE,IAAI,CAAC;IACnE9B,MAAM,CAACuH,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAACtF,aAAa,EAAE,IAAI,CAAC;IAE/D,IAAI4F,KAAK,CAAC8O,MAAM,IAAI,IAAI,IAAI9O,KAAK,CAAC8O,MAAM,KAAK,CAAC,EAAE;MAC9C;IACF;IAEA,IAAI,CAACL,mBAAmB,CAAC,MAAM,EAAEzO,KAAK,EAAE,KAAK,CAAC;IAE9C,IAAI,CAACJ,aAAa,CAAC,CAAC;IAEpB,IAAI,CAACkN,oBAAoB,CAAC,CAAC;EAC7B;EAEAzS,YAAYA,CAAA,EAAS;IACnB;AACJ;AACA;AACA;AACA;AACA;AACA;IACI,IAAI,CAACoD,YAAY,CAAC,CAAC;IAEnB,IAAI,CAAC,IAAI,CAACnC,OAAO,EAAE,MAAM,IAAIkF,KAAK,CAAC,iBAAiB,CAAC;IAErD,IAAI,CAACuJ,WAAW,CAAC,CAAC;EACpB;EAEAzP,WAAWA,CAAC0F,KAAiB,EAAQ;IACnC,IAAI,CAACyO,mBAAmB,CAAC,SAAS,EAAEzO,KAAK,CAAC;IAE1C,IAAIA,KAAK,CAAC+O,gBAAgB,EAAE;MAC1B;IACF;IAEA,IAAM;MAAErU,gBAAgB;MAAEY;IAAQ,CAAC,GAAG,IAAI;IAC1C,IAAM6J,WAAW,GAAG,IAAI,CAAC1E,cAAc,CAAC,CAAC;IAEzC,IAAI,CAACnF,OAAO,EAAE,MAAM,IAAIkF,KAAK,CAAC,iBAAiB,CAAC;IAEhD,IAAM;MACJuC,OAAO;MACPG,QAAQ;MACRD,WAAW;MACXH,QAAQ;MACRkM,sBAAsB;MACtBC,uBAAuB;MACvBC,uBAAuB;MACvBC,wBAAwB;MACxBlF,gBAAgB;MAChBD;IACF,CAAC,GAAG1O,OAAO;IACX,IAAI;MAAEK,GAAG;MAAEC,IAAI;MAAEC,SAAS;MAAEC;IAAW,CAAC,GAAGR,OAAO;IAElD,IAAMwE,KAAK,GAAG,IAAI,CAACD,QAAQ,CAAC,CAAC;IAE7B,IAAI;MAAEuP,MAAM;MAAEC;IAAO,CAAC,GAAGvZ,SAAS,CAACwZ,cAAc,CAC/CtP,KAAK,EACL1E,OAAO,CAACiU,QAAQ,EAChBjU,OAAO,CAACkU,SAAS,EACjBlU,OAAO,CAAC4M,SAAS,EACjB5M,OAAO,CAAC4M,SACV,CAAC;;IAED;IACA;IACA,OAAO+B,gBAAgB,IAAImF,MAAM,KAAK,CAAC,EAAE;MACvCtT,UAAU,IAAIsT,MAAM;MACpBA,MAAM,GAAG,CAAC;MAEV,IAAInM,WAAW,GAAG,CAAC,EAAE;QACnB;QACA,IACGnH,UAAU,GAAG,CAAC,IAAIF,IAAI,IAAIsH,QAAQ,IAClCpH,UAAU,GAAG,CAAC,IAAIF,IAAI,IAAI,CAAE,EAC7B;UACAE,UAAU,GAAG,CAAC;UACd;QACF;MACF,CAAC,MAAM;QACL;QACA,IAAIA,UAAU,IAAI,CAAC,EAAE;UACnBA,UAAU,GAAG,CAAC;UACd;QACF;QAEA,IAAM2T,aAAa,GAAGT,sBAAsB,GAAGC,uBAAuB;QACtE,IAAInT,UAAU,IAAI2T,aAAa,EAAE;UAC/B3T,UAAU,GAAG2T,aAAa;UAC1B;QACF;MACF;MAEA,IAAI3T,UAAU,GAAG,CAAC,EAAE;QAAA,IAAA4T,qBAAA;QAClB;;QAEA;QACA,IAAMC,WAAW,IAAAD,qBAAA,GACfpU,OAAO,CAACsU,eAAe,CAAC/N,GAAG,CAACjG,IAAI,CAAC,cAAA8T,qBAAA,cAAAA,qBAAA,GACjChV,gBAAgB,CAACmV,qBAAqB,CAACjU,IAAI,EAAEuJ,WAAW,CAAC;QAE3D,IAAIrJ,UAAU,IAAI6T,WAAW,EAAE;UAC7B;UACAP,MAAM,GAAGtT,UAAU,GAAG6T,WAAW;UACjC7T,UAAU,GAAG,CAAC;UACdF,IAAI,IAAI,CAAC;QACX,CAAC,MAAM,IAAIkE,KAAK,CAACgQ,kBAAkB,IAAI7M,WAAW,GAAG,CAAC,EAAE;UACtD;UACAnH,UAAU,GAAG,CAAC;UACdF,IAAI,IAAI,CAAC;QACX;MACF,CAAC,MAAM,IAAIE,UAAU,GAAG,CAAC,EAAE;QAAA,IAAAiU,sBAAA;QACzB;;QAEA;QACA,IAAMJ,YAAW,IAAAI,sBAAA,GACfzU,OAAO,CAACsU,eAAe,CAAC/N,GAAG,CAACjG,IAAI,GAAG,CAAC,CAAC,cAAAmU,sBAAA,cAAAA,sBAAA,GACrCrV,gBAAgB,CAACmV,qBAAqB,CAACjU,IAAI,GAAG,CAAC,EAAEuJ,WAAW,CAAC;QAE/D,IACEV,IAAI,CAACuL,GAAG,CAAClU,UAAU,CAAC,IAAI6T,YAAW,IACnC7P,KAAK,CAACgQ,kBAAkB,IACxB7M,WAAW,GAAG,CAAC,EACf;UACA;UACAnH,UAAU,GAAG,CAAC;UACdF,IAAI,IAAI,CAAC;QACX,CAAC,MAAM;UACL;UACAwT,MAAM,GAAGtT,UAAU,GAAG6T,YAAW;UACjC7T,UAAU,GAAG,CAAC;UACdF,IAAI,IAAI,CAAC;QACX;MACF;IACF;;IAEA;IACA;IACA,OAAOoO,cAAc,IAAIqF,MAAM,KAAK,CAAC,EAAE;MACrCxT,SAAS,IAAIwT,MAAM;MACnBA,MAAM,GAAG,CAAC;MAEV,IAAIvM,QAAQ,GAAG,CAAC,EAAE;QAChB;QACA,IAAKjH,SAAS,GAAG,CAAC,IAAIF,GAAG,IAAIoH,OAAO,IAAMlH,SAAS,GAAG,CAAC,IAAIF,GAAG,IAAI,CAAE,EAAE;UACpEE,SAAS,GAAG,CAAC;UACb;QACF;MACF,CAAC,MAAM;QACL;QACA,IAAIA,SAAS,IAAI,CAAC,EAAE;UAClBA,SAAS,GAAG,CAAC;UACb;QACF;QAEA,IAAMoU,YAAY,GAAGf,uBAAuB,GAAGC,wBAAwB;QACvE,IAAItT,SAAS,IAAIoU,YAAY,EAAE;UAC7BpU,SAAS,GAAGoU,YAAY;UACxB;QACF;MACF;MAEA,IAAIpU,SAAS,GAAG,CAAC,EAAE;QAAA,IAAAqU,qBAAA;QACjB;;QAEA;QACA,IAAMhI,SAAS,IAAAgI,qBAAA,GACb5U,OAAO,CAAC6U,aAAa,CAACtO,GAAG,CAAClG,GAAG,CAAC,cAAAuU,qBAAA,cAAAA,qBAAA,GAC9BxV,gBAAgB,CAAC0V,mBAAmB,CAACzU,GAAG,EAAEwJ,WAAW,CAAC;QAExD,IAAItJ,SAAS,IAAIqM,SAAS,EAAE;UAC1B;UACAmH,MAAM,GAAGxT,SAAS,GAAGqM,SAAS;UAC9BrM,SAAS,GAAG,CAAC;UACbF,GAAG,IAAI,CAAC;QACV,CAAC,MAAM,IAAImE,KAAK,CAACuQ,eAAe,IAAIvN,QAAQ,GAAG,CAAC,EAAE;UAChD;UACAjH,SAAS,GAAG,CAAC;UACbF,GAAG,IAAI,CAAC;QACV;MACF,CAAC,MAAM,IAAIE,SAAS,GAAG,CAAC,EAAE;QAAA,IAAAyU,sBAAA;QACxB;;QAEA;QACA,IAAMpI,UAAS,IAAAoI,sBAAA,GACbhV,OAAO,CAAC6U,aAAa,CAACtO,GAAG,CAAClG,GAAG,GAAG,CAAC,CAAC,cAAA2U,sBAAA,cAAAA,sBAAA,GAClC5V,gBAAgB,CAAC0V,mBAAmB,CAACzU,GAAG,GAAG,CAAC,EAAEwJ,WAAW,CAAC;QAE5D,IACEV,IAAI,CAACuL,GAAG,CAACnU,SAAS,CAAC,IAAIqM,UAAS,IAChCpI,KAAK,CAACuQ,eAAe,IACrBvN,QAAQ,GAAG,CAAC,EACZ;UACA;UACAjH,SAAS,GAAG,CAAC;UACbF,GAAG,IAAI,CAAC;QACV,CAAC,MAAM;UACL;UACA0T,MAAM,GAAGxT,SAAS,GAAGqM,UAAS;UAC9BrM,SAAS,GAAG,CAAC;UACbF,GAAG,IAAI,CAAC;QACV;MACF;IACF;IAEA,IACEL,OAAO,CAACK,GAAG,KAAKA,GAAG,IACnBL,OAAO,CAACM,IAAI,KAAKA,IAAI,IACrBN,OAAO,CAACO,SAAS,KAAKA,SAAS,IAC/BP,OAAO,CAACQ,UAAU,KAAKA,UAAU,EACjC;MACA,IAAI,CAAC+N,YAAY,CAAC;QAAElO,GAAG;QAAEC,IAAI;QAAEC,SAAS;QAAEC;MAAW,CAAC,CAAC;MACvDkE,KAAK,CAACgO,eAAe,CAAC,CAAC;MACvBhO,KAAK,CAACiO,cAAc,CAAC,CAAC;IACxB;EACF;;EAEA;AACF;AACA;EACExU,oBAAoBA,CAAA,EAAS;IAC3B,IAAI,CAACwF,QAAQ,CAAC;MAAEhC,WAAW,EAAE;IAAK,CAAC,CAAC;IACpC,IAAI,CAACuQ,KAAK,CAAC,CAAC;EACd;;EAEA;AACF;AACA;AACA;EACE9T,oBAAoBA,CAAC2Q,KAAa,EAAQ;IACxC,IAAI,CAACpL,QAAQ,CAACsR,KAAA,IAAqB;MAAA,IAApB;QAAEtT;MAAY,CAAC,GAAAsT,KAAA;MAC5B,IAAI;QACFnZ,eAAe,CAAC6F,WAAW,CAAC;QAE5B,OAAO;UACLA,WAAW,EAAAiE,aAAA,CAAAA,aAAA,KAAOjE,WAAW;YAAEoN;UAAK;QACtC,CAAC;MACH,CAAC,CAAC,OAAOlG,CAAC,EAAE;QACV;QACA,IAAM;UAAE6H;QAAQ,CAAC,GAAG,IAAI,CAAClT,KAAK;QAC9BkT,OAAO,CAAC7H,CAAC,YAAY3D,KAAK,GAAG2D,CAAC,GAAG,IAAI3D,KAAK,IAAA5H,MAAA,CAAIuL,CAAC,CAAE,CAAC,CAAC;QACnD,OAAO,IAAI;MACb;IACF,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;EACExK,oBAAoBA,CAClB0Q,KAAa,EAKP;IAAA,IAJN;MACExB,SAAS,GAAGjT,mBAAmB,CAACkT,IAAI;MACpC0H,SAAS,GAAG;IACmD,CAAC,GAAA9P,SAAA,CAAAxC,MAAA,QAAAwC,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,CAAC,CAAC;IAEvE,IAAM;MAAEzD,WAAW;MAAEF;IAAe,CAAC,GAAG,IAAI,CAACrB,KAAK;IAClD,IAAI,CAACuB,WAAW,EAAE,MAAM,IAAIuD,KAAK,CAAC,qBAAqB,CAAC;IAExD,IAAM;MAAEkD,MAAM;MAAEtB;IAAI,CAAC,GAAGnF,WAAW;IACnC,IAAI,CAAC,IAAI,CAACwN,cAAc,CAAC/G,MAAM,EAAEtB,GAAG,EAAEiI,KAAK,CAAC,EAAE;MAC5C;MACA,IAAIxB,SAAS,KAAK,IAAI,EAAE;QACtB;QACA,IAAI,CAAC5J,QAAQ,CAAC;UAAEhC,WAAW,EAAE;QAAK,CAAC,CAAC;MACtC;MACA;IACF;IAEA,IAAIuT,SAAS,EAAE;MACb,IAAI,CAACtE,iBAAiB,CAACnP,cAAc,EAAEsN,KAAK,CAAC;IAC/C,CAAC,MAAM;MACL,IAAI,CAAC4B,eAAe,CAACvI,MAAM,EAAEtB,GAAG,EAAEiI,KAAK,CAAC;IAC1C;IAEA,IAAIxB,SAAS,KAAK,IAAI,EAAE;MACtB,IAAI,CAACD,qBAAqB,CAACC,SAAS,CAAC;IACvC;IAEA,IAAI,CAAC5J,QAAQ,CAAC;MAAEhC,WAAW,EAAE;IAAK,CAAC,CAAC;IAEpC,IAAI,CAACuQ,KAAK,CAAC,CAAC;EACd;EAEAiD,gBAAgBA,CAAA,EAAc;IAC5B,IAAM;MAAE7P;IAAM,CAAC,GAAG,IAAI,CAAC9H,KAAK;IAC5B,IAAM;MAAEmE;IAAY,CAAC,GAAG,IAAI,CAACvB,KAAK;IAClC,IAAM;MAAEJ;IAAQ,CAAC,GAAG,IAAI;IACxB,IAAI2B,WAAW,IAAI,IAAI,IAAI3B,OAAO,IAAI,IAAI,IAAI,CAACnE,mBAAmB,CAACyJ,KAAK,CAAC,EAAE;MACzE,OAAO,IAAI;IACb;IACA,IAAM;MAAEwJ,cAAc;MAAEC,KAAK;MAAEF;IAAY,CAAC,GAAGlN,WAAW;IAC1D,IAAM;MAAEyG,MAAM;MAAEtB;IAAI,CAAC,GAAGnF,WAAW;IACnC,IAAM;MACJyT,OAAO;MACPC,KAAK;MACL3I,KAAK;MACL4I,WAAW;MACXC,QAAQ;MACRjB,eAAe;MACfO;IACF,CAAC,GAAG7U,OAAO;IAEX,IAAM;MAAEwV;IAA+B,CAAC,GAAG,IAAI,CAACjR,QAAQ,CAAC,CAAC;IAE1D,IAAMM,CAAC,GAAGyQ,WAAW,CAAC/O,GAAG,CAAC6B,MAAM,CAAC;IACjC,IAAMrD,CAAC,GAAGwQ,QAAQ,CAAChP,GAAG,CAACO,GAAG,CAAC;IAC3B,IAAM2O,CAAC,GAAGnB,eAAe,CAAC/N,GAAG,CAAC6B,MAAM,CAAC;IACrC,IAAMsN,CAAC,GAAGb,aAAa,CAACtO,GAAG,CAACO,GAAG,CAAC;;IAEhC;IACA,IAAM6O,gBAAgB,GACpBN,KAAK,IAAIxQ,CAAC,aAADA,CAAC,cAADA,CAAC,GAAI,CAAC,CAAC,IAAI,CAAC,IAAIuQ,OAAO,IAAI,CAAC,GACjCI,8BAA8B,GAC9B,CAAC;;IAEP;IACA,IAAMI,YAA2B,GAC/B/Q,CAAC,IAAI,IAAI,IAAIE,CAAC,IAAI,IAAI,IAAI0Q,CAAC,IAAI,IAAI,IAAIC,CAAC,IAAI,IAAI,GAC5C;MACEG,QAAQ,EAAE,UAAU;MACpBvV,IAAI,EAAE+U,KAAK,GAAGxQ,CAAC,GAAG8Q,gBAAgB;MAClCtV,GAAG,EAAEqM,KAAK,GAAG3H,CAAC;MACdS,KAAK,EAAEiQ,CAAC,GAAGE,gBAAgB;MAC3BjQ,MAAM,EAAEgQ;IACV,CAAC,GACD;MAAEI,OAAO,EAAE;IAAE,CAAC;IAEpB,IAAI9G,WAAW;IACf,IAAIhI,QAAQ;IACZ,IAAI;MACFgI,WAAW,GAAG,IAAI,CAAC/I,cAAc,CAACmC,MAAM,CAAC;MACzCpB,QAAQ,GAAG,IAAI,CAACR,WAAW,CAACM,GAAG,CAAC;IAClC,CAAC,CAAC,OAAO+B,CAAC,EAAE;MACV,OAAO,IAAI;IACb;IACA,IAAMkN,UAAqC,GACzC/G,WAAW,IAAI,IAAI,IAAIhI,QAAQ,IAAI,IAAI,GACnC;MACEgP,SAAS,EAAE1Q,KAAK,CAAC2Q,gBAAgB,CAACjH,WAAW,EAAEhI,QAAQ;IACzD,CAAC,GACD3B,SAAS;IACf,IAAM6Q,OAAO,GACXlH,WAAW,IAAI,IAAI,IAAIhI,QAAQ,IAAI,IAAI,GACnC1B,KAAK,CAAC6J,cAAc,CAACH,WAAW,EAAEhI,QAAQ,EAAE+H,KAAK,CAAC,GAClD,KAAK;IAEX,oBACE9S,IAAA;MAAKqN,KAAK,EAAEsM,YAAa;MAAAO,QAAA,eACvBla,IAAA,CAACR,cAAc;QAEbqT,cAAc,EAAEA,cAAe;QAC/BsH,SAAS,EAAEvc,UAAU,CAAC;UAAEwc,KAAK,EAAE,CAACH;QAAQ,CAAC,CAAE;QAC3CI,QAAQ,EAAE,IAAI,CAACnY,oBAAqB;QACpCoY,QAAQ,EAAE,IAAI,CAACnY,oBAAqB;QACpCoY,MAAM,EAAE,IAAI,CAACnY,oBAAqB;QAClCwQ,WAAW,EAAEA,WAAY;QACzBvF,KAAK,EAAEyM,UAAW;QAClBhH,KAAK,EAAEA;MAAM,MAAAzR,MAAA,CARL8K,MAAM,OAAA9K,MAAA,CAAIwJ,GAAG,CAStB;IAAC,CACC,CAAC;EAEV;;EAEA;AACF;AACA;AACA;EACEiC,iBAAiBA,CAAA,EAAoB;IACnC,IAAI,CAAC,IAAI,CAACvJ,MAAM,EAAE,MAAM,IAAI0F,KAAK,CAAC,mBAAmB,CAAC;IACtD,IAAI,CAAC,IAAI,CAACzF,aAAa,EAAE,MAAM,IAAIyF,KAAK,CAAC,iBAAiB,CAAC;IAE3D,IAAM;MACJ9D,YAAY;MACZD,SAAS;MACTV,cAAc;MACdG,uBAAuB;MACvBF,WAAW;MACXC,iBAAiB;MACjBE,oBAAoB;MACpBc,WAAW;MACXb,6BAA6B;MAC7BC,2BAA2B;MAC3BC,UAAU;MACVC,MAAM;MACNC,MAAM;MACNO;IACF,CAAC,GAAG,IAAI,CAACrB,KAAK;IACd,IAAM;MAAEkF,KAAK;MAAEC;IAAc,CAAC,GAAG,IAAI,CAAC/H,KAAK;IAC3C,IAAM;MAAEwC;IAAQ,CAAC,GAAG,IAAI;IACxB,IAAM1D,OAAO,GAAG,IAAI,CAACmD,aAAa;IAClC,IAAM+E,KAAK,GAAG,IAAI,CAACD,QAAQ,CAAC,CAAC;IAC7B,IAAMiB,KAAK,GAAG,IAAI,CAAChG,MAAM,CAACiG,WAAW;IACrC,IAAMC,MAAM,GAAG,IAAI,CAAClG,MAAM,CAACmG,YAAY;IAEvC3L,aAAa,CAACgG,OAAO,CAAC;IAEtB,IAAI,CAACC,WAAW,GAAA2F,aAAA;MACdJ,KAAK;MACLE,MAAM;MACNpJ,OAAO;MACPkI,KAAK;MACLc,KAAK;MACLtF,OAAO;MACPiB,MAAM;MACNC,MAAM;MACNO,cAAc;MACdhB,cAAc;MACdG,uBAAuB;MACvBF,WAAW;MACXC,iBAAiB;MACjBE,oBAAoB;MACpBc,WAAW;MACXb,6BAA6B;MAC7BC,2BAA2B;MAC3BC,UAAU;MACVI,YAAY;MACZD;IAAS,GACNoE,aAAa,CACjB;IAED,OAAO,IAAI,CAACtF,WAAW;EACzB;EAEAwW,MAAMA,CAAA,EAAc;IAClB,IAAM;MAAEN;IAAS,CAAC,GAAG,IAAI,CAAC3Y,KAAK;IAC/B,IAAM;MAAEH;IAAO,CAAC,GAAG,IAAI,CAAC+C,KAAK;IAE7B,oBACEjE,KAAA;MAAKia,SAAS,EAAC,cAAc;MAACM,GAAG,EAAE,IAAI,CAAChX,aAAc;MAAAyW,QAAA,gBACpDla,IAAA;QACEma,SAAS,EAAEvc,UAAU,CAAC,aAAa,EAAEuC,IAAI,CAACgB,kBAAkB,CAACC,MAAM,CAAC,CAAE;QACtEqZ,GAAG,EAAElX,MAAM,IAAI;UACb,IAAI,CAACA,MAAM,GAAGA,MAAM;QACtB,CAAE;QACFiT,OAAO,EAAE,IAAI,CAACzU,WAAY;QAC1B4U,aAAa,EAAE,IAAI,CAAC1U,iBAAkB;QACtCyY,aAAa,EAAE,IAAI,CAACrY,iBAAkB;QACtCsY,SAAS,EAAE,IAAI,CAACpY,aAAc;QAC9BqY,OAAO,EAAE,IAAI,CAACpY,WAAY;QAC1BqY,WAAW,EAAE,IAAI,CAACpY,eAAgB;QAClCqY,WAAW,EAAE,IAAI,CAACnY,eAAgB;QAClCoY,YAAY,EAAE,IAAI,CAACnY,gBAAiB;QACpCoY,QAAQ,EAAE,CAAE;QAAAd,QAAA,EACb;MAED,CAAQ,CAAC,EACR,IAAI,CAAChB,gBAAgB,CAAC,CAAC,EACvBgB,QAAQ;IAAA,CACN,CAAC;EAEV;AACF;AAAC1Y,eAAA,CA3iEKrB,IAAI,iBACaL,YAAY;AAAA0B,eAAA,CAD7BrB,IAAI,kBAGc;EACpBsM,aAAa,EAAE;IAAEwO,KAAK,EAAE;EAAM,CAAqC;EACnErU,cAAc,EAAE,KAAK;EACrBC,aAAa,EAAE,KAAK;EACpB5D,eAAe,EAAE,KAAK;EACtBC,cAAc,EAAE,KAAK;EACrBzB,WAAW,EAAEzD,WAAoC;EACjD8D,aAAa,EAAE9D,WAA0C;EACzDoF,YAAY,EAAEpF,WAAuC;EACrDqF,SAAS,EAAErF,WAAuC;EAClDyW,OAAO,EAAEA,CAAA,KAAYrL,SAAS;EAC9B2E,kBAAkB,EAAEA,CAAA,KAAY3E,SAAS;EACzCtC,qBAAqB,EAAGoU,cAAwC,IAC9D9R,SAAS;EACXrC,oBAAoB,EAAEA,CAAA,KAAYqC,SAAS;EAC3CpC,kBAAkB,EAAEA,CAAA,KAAYoC,SAAS;EACzCnC,iBAAiB,EAAEA,CAAA,KAAYmC,SAAS;EACxC4D,aAAa,EAAGjJ,OAAoB,IAAWqF,SAAS;EACxD+R,cAAc,EAAGC,KAAY,IAAW;IACtC,IAAI5c,WAAW,CAAC4c,KAAK,CAAC,EAAE;MACtBxa,MAAM,CAACya,IAAI,CAACD,KAAK,CAACE,IAAI,EAAE,QAAQ,EAAE,qBAAqB,CAAC;IAC1D;EACF,CAAC;EACDhS,aAAa,EAAE,CAAC,CAA4B;EAC5Cf,KAAK,EAAE;IACLiG,gBAAgB,EAAE,KAAK;IACvBD,aAAa,EAAE;EACjB;AACF,CAAC;AAAA/M,eAAA,CA/BGrB,IAAI,mBAmCe,GAAG,GAAG,CAAC;AAAAqB,eAAA,CAnC1BrB,IAAI,iBAqCa,IAAI;AAAAqB,eAAA,CArCrBrB,IAAI,cAuCUtC,OAAO,CACvB,CACE0d,YAAoC,EACpCC,SAAiC,KAAA7R,aAAA,CAAAA,aAAA,CAAAA,aAAA,KAE9BxL,SAAS,GACTod,YAAY,GACZC,SAAS,CAEhB,CAAC;AA6/DH,eAAerb,IAAI"}
@@ -1 +1 @@
1
- {"version":3,"file":"PasteKeyHandler.d.ts","sourceRoot":"","sources":["../../src/key-handlers/PasteKeyHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAEhC,OAAO,UAAU,EAAE,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEnE;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,EAAE,EAAE,CAevE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE,EAAE,CAY5E;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,WAAW,GACnB,MAAM,GAAG,MAAM,EAAE,EAAE,GAAG,IAAI,CAmC5B;AAED;;GAEG;AACH,cAAM,eAAgB,SAAQ,UAAU;IACtC,MAAM,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;CA0CjE;AAED,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"PasteKeyHandler.d.ts","sourceRoot":"","sources":["../../src/key-handlers/PasteKeyHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAEhC,OAAO,UAAU,EAAE,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEnE;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,EAAE,EAAE,CAevE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE,EAAE,CAW5E;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,WAAW,GACnB,MAAM,GAAG,MAAM,EAAE,EAAE,GAAG,IAAI,CAmC5B;AAED;;GAEG;AACH,cAAM,eAAgB,SAAQ,UAAU;IACtC,MAAM,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;CA0CjE;AAED,eAAe,eAAe,CAAC"}
@@ -37,7 +37,7 @@ export function parseValueFromNodes(nodes) {
37
37
  if (text.length > 0) {
38
38
  // When Chrome pastes a table from text, it preserves the tab characters
39
39
  // In Firefox, it breaks it into a combination of non-breaking spaces and spaces
40
- result.push(text.split(/\t|\u00a0\u00a0 \u00a0/));
40
+ result.push(text.split(/\t|\u00a0\u00a0\u00a0 /));
41
41
  }
42
42
  });
43
43
  return result;
@@ -59,7 +59,7 @@ export function parseValueFromElement(element) {
59
59
  childNodes
60
60
  } = element;
61
61
  var hasTabChar = text.includes('\t');
62
- var hasFirefoxTab = text.includes('\u00a0\u00a0 \u00a0');
62
+ var hasFirefoxTab = text.includes('\u00a0\u00a0\u00a0 ');
63
63
  if (hasTabChar && childNodes.length !== 0 && (childNodes.length === 1 || childNodes.length > 1 && (childNodes[0].textContent == null || !childNodes[0].textContent.includes('\t')))) {
64
64
  // When Chrome pastes a single row, it gets split into multiple child nodes
65
65
  // If we check the first child node and it doesn't have a tab character, but the full element text content does, then
@@ -1 +1 @@
1
- {"version":3,"file":"PasteKeyHandler.js","names":["GridUtils","KeyHandler","parseValueFromTable","table","data","rows","querySelectorAll","r","length","row","cells","rowData","c","_cell$textContent$tri","_cell$textContent","cell","push","textContent","trim","parseValueFromNodes","nodes","result","forEach","node","_node$textContent","text","split","parseValueFromElement","element","_element$textContent$","_element$textContent","querySelector","childNodes","hasTabChar","includes","hasFirefoxTab","map","PasteKeyHandler","onDown","event","grid","key","isModifierKeyDown","dummyInput","document","createElement","body","appendChild","setAttribute","listener","removeEventListener","remove","focus","value","pasteValue","addEventListener","preventDefault","stopPropagation"],"sources":["../../src/key-handlers/PasteKeyHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport { type EventHandlerResult } from '../EventHandlerResult';\nimport type Grid from '../Grid';\nimport GridUtils from '../GridUtils';\nimport KeyHandler, { type GridKeyboardEvent } from '../KeyHandler';\n\n/**\n * Parse out data from an HTML table. Currently does not support colspan/rowspan\n * @param table HTML Table\n * @returns A two dimensional array with the data found in the table\n */\nexport function parseValueFromTable(table: HTMLTableElement): string[][] {\n const data = [];\n const rows = table.querySelectorAll('tr');\n for (let r = 0; r < rows.length; r += 1) {\n const row = rows[r];\n const cells = row.querySelectorAll('td');\n const rowData = [];\n for (let c = 0; c < cells.length; c += 1) {\n const cell = cells[c];\n rowData.push(cell.textContent?.trim() ?? '');\n }\n data.push(rowData);\n }\n\n return data;\n}\n\n/**\n * Parses out a table of data from HTML elements. Treats each element as one rows.\n * Filters out blank rows.\n * @param rows The elements to parse out\n * @returns A string table of data\n */\nexport function parseValueFromNodes(nodes: NodeListOf<ChildNode>): string[][] {\n const result = [] as string[][];\n nodes.forEach(node => {\n const text = node.textContent ?? '';\n if (text.length > 0) {\n // When Chrome pastes a table from text, it preserves the tab characters\n // In Firefox, it breaks it into a combination of non-breaking spaces and spaces\n result.push(text.split(/\\t|\\u00a0\\u00a0 \\u00a0/));\n }\n });\n\n return result;\n}\n\nexport function parseValueFromElement(\n element: HTMLElement\n): string | string[][] | null {\n // Check first if there's an HTML table element that we can use\n const table = element.querySelector('table');\n if (table != null) {\n return parseValueFromTable(table);\n }\n\n // Otherwise check if there's any text content at all\n const text = element.textContent?.trim() ?? '';\n if (text.length > 0) {\n // If there's text content, try and parse out a table from the child nodes. Each node is a row.\n // If there's only one row and it doesn't contain a tab, then just treat it as a regular value\n const { childNodes } = element;\n const hasTabChar = text.includes('\\t');\n const hasFirefoxTab = text.includes('\\u00a0\\u00a0 \\u00a0');\n if (\n hasTabChar &&\n childNodes.length !== 0 &&\n (childNodes.length === 1 ||\n (childNodes.length > 1 &&\n (childNodes[0].textContent == null ||\n !childNodes[0].textContent.includes('\\t'))))\n ) {\n // When Chrome pastes a single row, it gets split into multiple child nodes\n // If we check the first child node and it doesn't have a tab character, but the full element text content does, then\n // just parse the text out separated by the tab chars\n return text.split('\\n').map(row => row.split('\\t'));\n }\n if (childNodes.length > 1 || hasFirefoxTab) {\n return parseValueFromNodes(element.childNodes);\n }\n // If there's no tabs or no multiple rows, than just treat it as one value\n return text;\n }\n return null;\n}\n\n/**\n * Handles the paste key combination\n */\nclass PasteKeyHandler extends KeyHandler {\n onDown(event: GridKeyboardEvent, grid: Grid): EventHandlerResult {\n switch (event.key) {\n case 'v':\n if (GridUtils.isModifierKeyDown(event)) {\n // Chrome doesn't allow the paste event on canvas elements\n // Instead, we capture the ctrl+v keydown, then do this to capture the input\n const dummyInput = document.createElement('div');\n document.body.appendChild(dummyInput);\n dummyInput.setAttribute('contenteditable', 'true');\n\n // Give it invisible styling\n dummyInput.setAttribute(\n 'style',\n 'clip-path: \"inset(50%)\"; height: 1px; width: 1px; margin: -1px; overflow: hidden; padding 0; position: absolute;'\n );\n\n const listener = (): void => {\n dummyInput.removeEventListener('input', listener);\n dummyInput.remove();\n\n grid.focus();\n const value = parseValueFromElement(dummyInput);\n if (value != null) {\n grid.pasteValue(value);\n }\n };\n\n // Listen for the `input` event, when there's a change to the HTML\n // We could also listen to the `paste` event to get the clipboard data, but that's just text data\n // By listening to `input`, we can get a table that's already parsed in HTML, which is easier to consume\n dummyInput.addEventListener('input', listener);\n\n // Focus the element so it receives the paste event\n dummyInput.focus();\n\n // Don't block the paste event from updating our dummy input\n return { preventDefault: false, stopPropagation: true };\n }\n break;\n }\n return false;\n }\n}\n\nexport default PasteKeyHandler;\n"],"mappings":"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"}
1
+ {"version":3,"file":"PasteKeyHandler.js","names":["GridUtils","KeyHandler","parseValueFromTable","table","data","rows","querySelectorAll","r","length","row","cells","rowData","c","_cell$textContent$tri","_cell$textContent","cell","push","textContent","trim","parseValueFromNodes","nodes","result","forEach","node","_node$textContent","text","split","parseValueFromElement","element","_element$textContent$","_element$textContent","querySelector","childNodes","hasTabChar","includes","hasFirefoxTab","map","PasteKeyHandler","onDown","event","grid","key","isModifierKeyDown","dummyInput","document","createElement","body","appendChild","setAttribute","listener","removeEventListener","remove","focus","value","pasteValue","addEventListener","preventDefault","stopPropagation"],"sources":["../../src/key-handlers/PasteKeyHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport { type EventHandlerResult } from '../EventHandlerResult';\nimport type Grid from '../Grid';\nimport GridUtils from '../GridUtils';\nimport KeyHandler, { type GridKeyboardEvent } from '../KeyHandler';\n\n/**\n * Parse out data from an HTML table. Currently does not support colspan/rowspan\n * @param table HTML Table\n * @returns A two dimensional array with the data found in the table\n */\nexport function parseValueFromTable(table: HTMLTableElement): string[][] {\n const data = [];\n const rows = table.querySelectorAll('tr');\n for (let r = 0; r < rows.length; r += 1) {\n const row = rows[r];\n const cells = row.querySelectorAll('td');\n const rowData = [];\n for (let c = 0; c < cells.length; c += 1) {\n const cell = cells[c];\n rowData.push(cell.textContent?.trim() ?? '');\n }\n data.push(rowData);\n }\n\n return data;\n}\n\n/**\n * Parses out a table of data from HTML elements. Treats each element as one rows.\n * Filters out blank rows.\n * @param rows The elements to parse out\n * @returns A string table of data\n */\nexport function parseValueFromNodes(nodes: NodeListOf<ChildNode>): string[][] {\n const result = [] as string[][];\n nodes.forEach(node => {\n const text = node.textContent ?? '';\n if (text.length > 0) {\n // When Chrome pastes a table from text, it preserves the tab characters\n // In Firefox, it breaks it into a combination of non-breaking spaces and spaces\n result.push(text.split(/\\t|\\u00a0\\u00a0\\u00a0 /));\n }\n });\n return result;\n}\n\nexport function parseValueFromElement(\n element: HTMLElement\n): string | string[][] | null {\n // Check first if there's an HTML table element that we can use\n const table = element.querySelector('table');\n if (table != null) {\n return parseValueFromTable(table);\n }\n\n // Otherwise check if there's any text content at all\n const text = element.textContent?.trim() ?? '';\n if (text.length > 0) {\n // If there's text content, try and parse out a table from the child nodes. Each node is a row.\n // If there's only one row and it doesn't contain a tab, then just treat it as a regular value\n const { childNodes } = element;\n const hasTabChar = text.includes('\\t');\n const hasFirefoxTab = text.includes('\\u00a0\\u00a0\\u00a0 ');\n if (\n hasTabChar &&\n childNodes.length !== 0 &&\n (childNodes.length === 1 ||\n (childNodes.length > 1 &&\n (childNodes[0].textContent == null ||\n !childNodes[0].textContent.includes('\\t'))))\n ) {\n // When Chrome pastes a single row, it gets split into multiple child nodes\n // If we check the first child node and it doesn't have a tab character, but the full element text content does, then\n // just parse the text out separated by the tab chars\n return text.split('\\n').map(row => row.split('\\t'));\n }\n if (childNodes.length > 1 || hasFirefoxTab) {\n return parseValueFromNodes(element.childNodes);\n }\n // If there's no tabs or no multiple rows, than just treat it as one value\n return text;\n }\n return null;\n}\n\n/**\n * Handles the paste key combination\n */\nclass PasteKeyHandler extends KeyHandler {\n onDown(event: GridKeyboardEvent, grid: Grid): EventHandlerResult {\n switch (event.key) {\n case 'v':\n if (GridUtils.isModifierKeyDown(event)) {\n // Chrome doesn't allow the paste event on canvas elements\n // Instead, we capture the ctrl+v keydown, then do this to capture the input\n const dummyInput = document.createElement('div');\n document.body.appendChild(dummyInput);\n dummyInput.setAttribute('contenteditable', 'true');\n\n // Give it invisible styling\n dummyInput.setAttribute(\n 'style',\n 'clip-path: \"inset(50%)\"; height: 1px; width: 1px; margin: -1px; overflow: hidden; padding 0; position: absolute;'\n );\n\n const listener = (): void => {\n dummyInput.removeEventListener('input', listener);\n dummyInput.remove();\n\n grid.focus();\n const value = parseValueFromElement(dummyInput);\n if (value != null) {\n grid.pasteValue(value);\n }\n };\n\n // Listen for the `input` event, when there's a change to the HTML\n // We could also listen to the `paste` event to get the clipboard data, but that's just text data\n // By listening to `input`, we can get a table that's already parsed in HTML, which is easier to consume\n dummyInput.addEventListener('input', listener);\n\n // Focus the element so it receives the paste event\n dummyInput.focus();\n\n // Don't block the paste event from updating our dummy input\n return { preventDefault: false, stopPropagation: true };\n }\n break;\n }\n return false;\n }\n}\n\nexport default PasteKeyHandler;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/grid",
3
- "version": "0.103.1-beta.2+bbba404c",
3
+ "version": "0.104.1-beta.0+680f0158",
4
4
  "description": "Deephaven React grid component",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -31,7 +31,7 @@
31
31
  "*.css"
32
32
  ],
33
33
  "dependencies": {
34
- "@deephaven/utils": "^0.103.1-beta.2+bbba404c",
34
+ "@deephaven/utils": "^0.104.1-beta.0+680f0158",
35
35
  "classnames": "^2.3.1",
36
36
  "color-convert": "^2.0.1",
37
37
  "event-target-shim": "^6.0.2",
@@ -44,5 +44,5 @@
44
44
  "publishConfig": {
45
45
  "access": "public"
46
46
  },
47
- "gitHead": "bbba404cb0f5cc207d4787543d5b3db3fb67bd56"
47
+ "gitHead": "680f0158df67c00c8330e79d916e716c7f4ead04"
48
48
  }