@deephaven/grid 0.104.1-virtual-webgl.11 → 0.105.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.
- package/dist/CellRenderer.d.ts +1 -1
 - package/dist/CellRenderer.d.ts.map +1 -1
 - package/dist/CellRenderer.js +1 -1
 - package/dist/CellRenderer.js.map +1 -1
 - package/dist/DataBarCellRenderer.d.ts.map +1 -1
 - package/dist/DataBarCellRenderer.js +5 -5
 - package/dist/DataBarCellRenderer.js.map +1 -1
 - package/dist/GridMetricCalculator.d.ts +21 -10
 - package/dist/GridMetricCalculator.d.ts.map +1 -1
 - package/dist/GridMetricCalculator.js +89 -33
 - package/dist/GridMetricCalculator.js.map +1 -1
 - package/dist/GridMetrics.d.ts +2 -1
 - package/dist/GridMetrics.d.ts.map +1 -1
 - package/dist/GridMetrics.js.map +1 -1
 - package/dist/GridRenderer.d.ts +2 -1
 - package/dist/GridRenderer.d.ts.map +1 -1
 - package/dist/GridRenderer.js +16 -17
 - package/dist/GridRenderer.js.map +1 -1
 - package/dist/TextCellRenderer.d.ts.map +1 -1
 - package/dist/TextCellRenderer.js +11 -10
 - package/dist/TextCellRenderer.js.map +1 -1
 - package/package.json +3 -3
 
    
        package/dist/CellRenderer.d.ts
    CHANGED
    
    | 
         @@ -6,7 +6,7 @@ declare abstract class CellRenderer { 
     | 
|
| 
       6 
6 
     | 
    
         
             
                abstract drawCellContent(context: CanvasRenderingContext2D, state: GridRenderState, column: VisibleIndex, row: VisibleIndex): void;
         
     | 
| 
       7 
7 
     | 
    
         
             
                drawCellRowTreeMarker(context: CanvasRenderingContext2D, state: GridRenderState, row: VisibleIndex): void;
         
     | 
| 
       8 
8 
     | 
    
         
             
                drawTreeMarker(context: CanvasRenderingContext2D, state: GridRenderState, columnX: Coordinate, rowY: Coordinate, treeBox: BoxCoordinates, color: GridColor, isExpanded: boolean): void;
         
     | 
| 
       9 
     | 
    
         
            -
                getCachedTruncatedString: ((context: CanvasRenderingContext2D, text: string, width: number,  
     | 
| 
      
 9 
     | 
    
         
            +
                getCachedTruncatedString: ((context: CanvasRenderingContext2D, text: string, width: number, fontWidthLower?: number, fontWidthUpper?: number, truncationChar?: string) => string) & import("@types/memoizee").Memoized<(context: CanvasRenderingContext2D, text: string, width: number, fontWidthLower?: number, fontWidthUpper?: number, truncationChar?: string) => string>;
         
     | 
| 
       10 
10 
     | 
    
         
             
            }
         
     | 
| 
       11 
11 
     | 
    
         
             
            export default CellRenderer;
         
     | 
| 
       12 
12 
     | 
    
         
             
            //# sourceMappingURL=CellRenderer.d.ts.map
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"CellRenderer.d.ts","sourceRoot":"","sources":["../src/CellRenderer.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,SAAS,CAAC;AAEhD,uBAAe,YAAY;IACzB,QAAQ,CAAC,eAAe,CACtB,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,YAAY,GAChB,IAAI;IAEP,qBAAqB,CACnB,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,eAAe,EACtB,GAAG,EAAE,YAAY,GAChB,IAAI;IA2CP,cAAc,CACZ,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,OAAO,GAClB,IAAI;IAUP,wBAAwB,aAEX,wBAAwB,QAC3B,MAAM,SACL,MAAM, 
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"CellRenderer.d.ts","sourceRoot":"","sources":["../src/CellRenderer.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,SAAS,CAAC;AAEhD,uBAAe,YAAY;IACzB,QAAQ,CAAC,eAAe,CACtB,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,YAAY,GAChB,IAAI;IAEP,qBAAqB,CACnB,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,eAAe,EACtB,GAAG,EAAE,YAAY,GAChB,IAAI;IA2CP,cAAc,CACZ,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,OAAO,GAClB,IAAI;IAUP,wBAAwB,aAEX,wBAAwB,QAC3B,MAAM,SACL,MAAM,mBACI,MAAM,mBACN,MAAM,mBACN,MAAM,KACtB,MAAM,iDANE,wBAAwB,QAC3B,MAAM,SACL,MAAM,mBACI,MAAM,mBACN,MAAM,mBACN,MAAM,KACtB,MAAM,EAUT;CACH;AAED,eAAe,YAAY,CAAC"}
         
     | 
    
        package/dist/CellRenderer.js
    CHANGED
    
    | 
         @@ -8,7 +8,7 @@ import GridRenderer from "./GridRenderer.js"; 
     | 
|
| 
       8 
8 
     | 
    
         
             
            import memoizeClear from "./memoizeClear.js";
         
     | 
| 
       9 
9 
     | 
    
         
             
            class CellRenderer {
         
     | 
| 
       10 
10 
     | 
    
         
             
              constructor() {
         
     | 
| 
       11 
     | 
    
         
            -
                _defineProperty(this, "getCachedTruncatedString", memoizeClear((context, text, width,  
     | 
| 
      
 11 
     | 
    
         
            +
                _defineProperty(this, "getCachedTruncatedString", memoizeClear((context, text, width, fontWidthLower, fontWidthUpper, truncationChar) => GridRenderer.truncateToWidth(context, text, width, fontWidthLower, fontWidthUpper, truncationChar), {
         
     | 
| 
       12 
12 
     | 
    
         
             
                  max: 10000
         
     | 
| 
       13 
13 
     | 
    
         
             
                }));
         
     | 
| 
       14 
14 
     | 
    
         
             
              }
         
     | 
    
        package/dist/CellRenderer.js.map
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"CellRenderer.js","names":["getOrThrow","isExpandableGridModel","GridRenderer","memoizeClear","CellRenderer","constructor","_defineProperty","context","text","width"," 
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"CellRenderer.js","names":["getOrThrow","isExpandableGridModel","GridRenderer","memoizeClear","CellRenderer","constructor","_defineProperty","context","text","width","fontWidthLower","fontWidthUpper","truncationChar","truncateToWidth","max","drawCellRowTreeMarker","state","row","metrics","model","mouseX","mouseY","theme","firstColumn","gridX","gridY","allColumnXs","allColumnWidths","allRowYs","allRowHeights","visibleRowTreeBoxes","treeMarkerColor","treeMarkerHoverColor","columnX","columnWidth","rowY","rowHeight","isRowExpandable","treeBox","color","drawTreeMarker","isRowExpanded","isExpanded","x1","y1","x2","y2","markerText","textX","textY","fillStyle","textAlign","fillText"],"sources":["../src/CellRenderer.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\nimport { getOrThrow } from '@deephaven/utils';\nimport { isExpandableGridModel } from './ExpandableGridModel';\nimport {\n  type VisibleIndex,\n  type Coordinate,\n  type BoxCoordinates,\n} from './GridMetrics';\nimport GridRenderer from './GridRenderer';\nimport { type GridRenderState } from './GridRendererTypes';\nimport { type GridColor } from './GridTheme';\nimport memoizeClear from './memoizeClear';\n\nexport type CellRenderType = 'text' | 'dataBar';\n\nabstract class CellRenderer {\n  abstract drawCellContent(\n    context: CanvasRenderingContext2D,\n    state: GridRenderState,\n    column: VisibleIndex,\n    row: VisibleIndex\n  ): void;\n\n  drawCellRowTreeMarker(\n    context: CanvasRenderingContext2D,\n    state: GridRenderState,\n    row: VisibleIndex\n  ): void {\n    const { metrics, model, mouseX, mouseY, theme } = state;\n    const {\n      firstColumn,\n      gridX,\n      gridY,\n      allColumnXs,\n      allColumnWidths,\n      allRowYs,\n      allRowHeights,\n      visibleRowTreeBoxes,\n    } = metrics;\n    const { treeMarkerColor, treeMarkerHoverColor } = theme;\n    const columnX = getOrThrow(allColumnXs, firstColumn);\n    const columnWidth = getOrThrow(allColumnWidths, firstColumn);\n    const rowY = getOrThrow(allRowYs, row);\n    const rowHeight = getOrThrow(allRowHeights, row);\n    if (!isExpandableGridModel(model) || !model.isRowExpandable(row)) {\n      return;\n    }\n\n    const treeBox = getOrThrow(visibleRowTreeBoxes, row);\n    const color =\n      mouseX != null &&\n      mouseY != null &&\n      mouseX >= gridX + columnX &&\n      mouseX <= gridX + columnX + columnWidth &&\n      mouseY >= gridY + rowY &&\n      mouseY <= gridY + rowY + rowHeight\n        ? treeMarkerHoverColor\n        : treeMarkerColor;\n\n    this.drawTreeMarker(\n      context,\n      state,\n      columnX,\n      rowY,\n      treeBox,\n      color,\n      model.isRowExpanded(row)\n    );\n  }\n\n  drawTreeMarker(\n    context: CanvasRenderingContext2D,\n    state: GridRenderState,\n    columnX: Coordinate,\n    rowY: Coordinate,\n    treeBox: BoxCoordinates,\n    color: GridColor,\n    isExpanded: boolean\n  ): void {\n    const { x1, y1, x2, y2 } = treeBox;\n    const markerText = isExpanded ? '⊟' : '⊞';\n    const textX = columnX + (x1 + x2) * 0.5 + 0.5;\n    const textY = rowY + (y1 + y2) * 0.5 + 0.5;\n    context.fillStyle = color;\n    context.textAlign = 'center';\n    context.fillText(markerText, textX, textY);\n  }\n\n  getCachedTruncatedString = memoizeClear(\n    (\n      context: CanvasRenderingContext2D,\n      text: string,\n      width: number,\n      fontWidthLower?: number,\n      fontWidthUpper?: number,\n      truncationChar?: string\n    ): string =>\n      GridRenderer.truncateToWidth(\n        context,\n        text,\n        width,\n        fontWidthLower,\n        fontWidthUpper,\n        truncationChar\n      ),\n    { max: 10000 }\n  );\n}\n\nexport default CellRenderer;\n"],"mappings":";;;AAAA;AACA,SAASA,UAAU,QAAQ,kBAAkB;AAAC,SACrCC,qBAAqB;AAAA,OAMvBC,YAAY;AAAA,OAGZC,YAAY;AAInB,MAAeC,YAAY,CAAC;EAAAC,YAAA;IAAAC,eAAA,mCAyECH,YAAY,CACrC,CACEI,OAAiC,EACjCC,IAAY,EACZC,KAAa,EACbC,cAAuB,EACvBC,cAAuB,EACvBC,cAAuB,KAEvBV,YAAY,CAACW,eAAe,CAC1BN,OAAO,EACPC,IAAI,EACJC,KAAK,EACLC,cAAc,EACdC,cAAc,EACdC,cACF,CAAC,EACH;MAAEE,GAAG,EAAE;IAAM,CACf,CAAC;EAAA;EAnFDC,qBAAqBA,CACnBR,OAAiC,EACjCS,KAAsB,EACtBC,GAAiB,EACX;IACN,IAAM;MAAEC,OAAO;MAAEC,KAAK;MAAEC,MAAM;MAAEC,MAAM;MAAEC;IAAM,CAAC,GAAGN,KAAK;IACvD,IAAM;MACJO,WAAW;MACXC,KAAK;MACLC,KAAK;MACLC,WAAW;MACXC,eAAe;MACfC,QAAQ;MACRC,aAAa;MACbC;IACF,CAAC,GAAGZ,OAAO;IACX,IAAM;MAAEa,eAAe;MAAEC;IAAqB,CAAC,GAAGV,KAAK;IACvD,IAAMW,OAAO,GAAGjC,UAAU,CAAC0B,WAAW,EAAEH,WAAW,CAAC;IACpD,IAAMW,WAAW,GAAGlC,UAAU,CAAC2B,eAAe,EAAEJ,WAAW,CAAC;IAC5D,IAAMY,IAAI,GAAGnC,UAAU,CAAC4B,QAAQ,EAAEX,GAAG,CAAC;IACtC,IAAMmB,SAAS,GAAGpC,UAAU,CAAC6B,aAAa,EAAEZ,GAAG,CAAC;IAChD,IAAI,CAAChB,qBAAqB,CAACkB,KAAK,CAAC,IAAI,CAACA,KAAK,CAACkB,eAAe,CAACpB,GAAG,CAAC,EAAE;MAChE;IACF;IAEA,IAAMqB,OAAO,GAAGtC,UAAU,CAAC8B,mBAAmB,EAAEb,GAAG,CAAC;IACpD,IAAMsB,KAAK,GACTnB,MAAM,IAAI,IAAI,IACdC,MAAM,IAAI,IAAI,IACdD,MAAM,IAAII,KAAK,GAAGS,OAAO,IACzBb,MAAM,IAAII,KAAK,GAAGS,OAAO,GAAGC,WAAW,IACvCb,MAAM,IAAII,KAAK,GAAGU,IAAI,IACtBd,MAAM,IAAII,KAAK,GAAGU,IAAI,GAAGC,SAAS,GAC9BJ,oBAAoB,GACpBD,eAAe;IAErB,IAAI,CAACS,cAAc,CACjBjC,OAAO,EACPS,KAAK,EACLiB,OAAO,EACPE,IAAI,EACJG,OAAO,EACPC,KAAK,EACLpB,KAAK,CAACsB,aAAa,CAACxB,GAAG,CACzB,CAAC;EACH;EAEAuB,cAAcA,CACZjC,OAAiC,EACjCS,KAAsB,EACtBiB,OAAmB,EACnBE,IAAgB,EAChBG,OAAuB,EACvBC,KAAgB,EAChBG,UAAmB,EACb;IACN,IAAM;MAAEC,EAAE;MAAEC,EAAE;MAAEC,EAAE;MAAEC;IAAG,CAAC,GAAGR,OAAO;IAClC,IAAMS,UAAU,GAAGL,UAAU,GAAG,GAAG,GAAG,GAAG;IACzC,IAAMM,KAAK,GAAGf,OAAO,GAAG,CAACU,EAAE,GAAGE,EAAE,IAAI,GAAG,GAAG,GAAG;IAC7C,IAAMI,KAAK,GAAGd,IAAI,GAAG,CAACS,EAAE,GAAGE,EAAE,IAAI,GAAG,GAAG,GAAG;IAC1CvC,OAAO,CAAC2C,SAAS,GAAGX,KAAK;IACzBhC,OAAO,CAAC4C,SAAS,GAAG,QAAQ;IAC5B5C,OAAO,CAAC6C,QAAQ,CAACL,UAAU,EAAEC,KAAK,EAAEC,KAAK,CAAC;EAC5C;AAqBF;AAEA,eAAe7C,YAAY"}
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"DataBarCellRenderer.d.ts","sourceRoot":"","sources":["../src/DataBarCellRenderer.ts"],"names":[],"mappings":"AAEA,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAG1C,OAAO,EACL,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACvB,MAAM,eAAe,CAAC;AAIvB,OAAO, 
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"DataBarCellRenderer.d.ts","sourceRoot":"","sources":["../src/DataBarCellRenderer.ts"],"names":[],"mappings":"AAEA,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAG1C,OAAO,EACL,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACvB,MAAM,eAAe,CAAC;AAIvB,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AAEzC,UAAU,oBAAoB;IAC5B,kHAAkH;IAClH,QAAQ,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,CAAC,EAAE,MAAM,CAAC;IACV,4CAA4C;IAC5C,CAAC,EAAE,MAAM,CAAC;IACV,oCAAoC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,yCAAyC;IACzC,gBAAgB,EAAE,MAAM,CAAC;IACzB,0CAA0C;IAC1C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,8EAA8E;IAC9E,eAAe,EAAE,MAAM,CAAC;IACxB,+BAA+B;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AACD,cAAM,mBAAoB,SAAQ,YAAY;IAC5C,MAAM,CAAC,WAAW,WACR,MAAM,UAAU,MAAM,EAAE,KAAG,cAAc,+CAAzC,MAAM,UAAU,MAAM,EAAE,KAAG,cAAc,EAiCjD;IAEF,eAAe,CACb,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,YAAY,GAChB,IAAI;IA2MP,uBAAuB,CACrB,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,YAAY,GAChB,oBAAoB;IAwOvB,cAAc,aACF,wBAAwB,QAAQ,MAAM,KAAG,MAAM,iDAA/C,wBAAwB,QAAQ,MAAM,KAAG,MAAM,EAGzD;IAEF;;OAEG;IACH,6BAA6B,aAEhB,wBAAwB,eACpB,SAAS,YAAY,EAAE,aACzB,iBAAiB,SACrB,SAAS,UACR,UAAU,KACjB,MAAM,iDALE,wBAAwB,eACpB,SAAS,YAAY,EAAE,aACzB,iBAAiB,SACrB,SAAS,UACR,UAAU,KACjB,MAAM,EAYT;CACH;AAED,eAAe,mBAAmB,CAAC"}
         
     | 
| 
         @@ -9,7 +9,6 @@ import { isDataBarGridModel } from "./DataBarGridModel.js"; 
     | 
|
| 
       9 
9 
     | 
    
         
             
            import GridColorUtils from "./GridColorUtils.js";
         
     | 
| 
       10 
10 
     | 
    
         
             
            import GridUtils from "./GridUtils.js";
         
     | 
| 
       11 
11 
     | 
    
         
             
            import memoizeClear from "./memoizeClear.js";
         
     | 
| 
       12 
     | 
    
         
            -
            import { DEFAULT_FONT_WIDTH } from "./GridRendererTypes.js";
         
     | 
| 
       13 
12 
     | 
    
         
             
            class DataBarCellRenderer extends CellRenderer {
         
     | 
| 
       14 
13 
     | 
    
         
             
              constructor() {
         
     | 
| 
       15 
14 
     | 
    
         
             
                super(...arguments);
         
     | 
| 
         @@ -30,7 +29,6 @@ class DataBarCellRenderer extends CellRenderer { 
     | 
|
| 
       30 
29 
     | 
    
         
             
                }));
         
     | 
| 
       31 
30 
     | 
    
         
             
              }
         
     | 
| 
       32 
31 
     | 
    
         
             
              drawCellContent(context, state, column, row) {
         
     | 
| 
       33 
     | 
    
         
            -
                var _fontWidths$get;
         
     | 
| 
       34 
32 
     | 
    
         
             
                var {
         
     | 
| 
       35 
33 
     | 
    
         
             
                  metrics,
         
     | 
| 
       36 
34 
     | 
    
         
             
                  model,
         
     | 
| 
         @@ -45,7 +43,8 @@ class DataBarCellRenderer extends CellRenderer { 
     | 
|
| 
       45 
43 
     | 
    
         
             
                  allRowHeights,
         
     | 
| 
       46 
44 
     | 
    
         
             
                  allRowYs,
         
     | 
| 
       47 
45 
     | 
    
         
             
                  firstColumn,
         
     | 
| 
       48 
     | 
    
         
            -
                   
     | 
| 
      
 46 
     | 
    
         
            +
                  fontWidthsLower,
         
     | 
| 
      
 47 
     | 
    
         
            +
                  fontWidthsUpper
         
     | 
| 
       49 
48 
     | 
    
         
             
                } = metrics;
         
     | 
| 
       50 
49 
     | 
    
         
             
                var isFirstColumn = column === firstColumn;
         
     | 
| 
       51 
50 
     | 
    
         
             
                var rowHeight = getOrThrow(allRowHeights, row);
         
     | 
| 
         @@ -59,9 +58,10 @@ class DataBarCellRenderer extends CellRenderer { 
     | 
|
| 
       59 
58 
     | 
    
         
             
                  y: textY,
         
     | 
| 
       60 
59 
     | 
    
         
             
                  width: textWidth
         
     | 
| 
       61 
60 
     | 
    
         
             
                } = GridUtils.getTextRenderMetrics(state, column, row);
         
     | 
| 
       62 
     | 
    
         
            -
                var  
     | 
| 
      
 61 
     | 
    
         
            +
                var fontWidthLower = fontWidthsLower.get(context.font);
         
     | 
| 
      
 62 
     | 
    
         
            +
                var fontWidthUpper = fontWidthsUpper.get(context.font);
         
     | 
| 
       63 
63 
     | 
    
         
             
                var truncationChar = model.truncationCharForCell(modelColumn, modelRow);
         
     | 
| 
       64 
     | 
    
         
            -
                var truncatedText = this.getCachedTruncatedString(context, text, textWidth,  
     | 
| 
      
 64 
     | 
    
         
            +
                var truncatedText = this.getCachedTruncatedString(context, text, textWidth, fontWidthLower, fontWidthUpper, truncationChar);
         
     | 
| 
       65 
65 
     | 
    
         
             
                var {
         
     | 
| 
       66 
66 
     | 
    
         
             
                  columnMin,
         
     | 
| 
       67 
67 
     | 
    
         
             
                  columnMax,
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"DataBarCellRenderer.js","names":["getOrThrow","CellRenderer","isExpandableGridModel","isDataBarGridModel","GridColorUtils","GridUtils","memoizeClear","DEFAULT_FONT_WIDTH","DataBarCellRenderer","constructor","arguments","_defineProperty","context","text","measureText","width","max","visibleRows","modelRows","model","column","widestValue","i","length","row","modelRow","textForCell","Math","getCachedWidth","drawCellContent","state","_fontWidths$get","metrics","theme","modelColumns","allRowHeights","allRowYs","firstColumn","fontWidths","isFirstColumn","rowHeight","modelColumn","rowY","textAlign","textAlignForCell","x","textX","y","textY","textWidth","getTextRenderMetrics","fontWidth","get","font","truncationChar","truncationCharForCell","truncatedText","getCachedTruncatedString","columnMin","columnMax","axis","color","dataBarColor","valuePlacement","opacity","markers","direction","value","dataBarOptionsForCell","hasGradient","Array","isArray","maxWidth","dataBarX","dataBarY","zeroPosition","leftmostPosition","markerXs","totalValueRange","dataBarWidth","getDataBarRenderMetrics","save","fillStyle","textBaseline","fillText","hasRowDividers","gridRowColor","yOffset","beginPath","roundRect","clip","globalAlpha","gradientWidth","gradientX","round","abs","translate","scale","gradient","getGradient","fillRect","restore","fill","forEach","markerX","index","shouldRenderDashedLine","strokeStyle","zeroLineColor","setLineDash","moveTo","lineTo","stroke","hasExpandableRows","drawCellRowTreeMarker","Error","allColumnXs","allColumnWidths","cellHorizontalPadding","treeDepthIndent","treeHorizontalPadding","columnWidth","treeIndent","depthForRow","longestValueWidth","getCachedWidestValueForColumn","leftPadding","rightPadding","columnLongest","map","marker","markerValue","offset","rightmostPosition","colors","canvas","document","createElement","ctx","getContext","Number","isNaN","createLinearGradient","oklabColors","linearSRGBToOklab","hexToRgb","colorStop","colorChangeInterval","leftColorIndex","floor","lerpColor","addColorStop","rgbToHex","OklabToLinearSRGB","primitive"],"sources":["../src/DataBarCellRenderer.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\nimport { getOrThrow } from '@deephaven/utils';\nimport CellRenderer from './CellRenderer';\nimport { isExpandableGridModel } from './ExpandableGridModel';\nimport { isDataBarGridModel } from './DataBarGridModel';\nimport {\n  type ModelIndex,\n  type VisibleIndex,\n  type VisibleToModelMap,\n} from './GridMetrics';\nimport GridColorUtils from './GridColorUtils';\nimport GridUtils from './GridUtils';\nimport memoizeClear from './memoizeClear';\nimport { DEFAULT_FONT_WIDTH, type GridRenderState } from './GridRendererTypes';\nimport type GridModel from './GridModel';\n\ninterface DataBarRenderMetrics {\n  /** The total width the entire bar from the min to max value can take up (rightmostPosition - leftmostPosition) */\n  maxWidth: number;\n  /** The x coordinate of the bar (the left) */\n  x: number;\n  /** The y coordinate of the bar (the top) */\n  y: number;\n  /** The position of the zero line */\n  zeroPosition: number;\n  /** The position of the leftmost point */\n  leftmostPosition: number;\n  /** The position of the rightmost point */\n  rightmostPosition: number;\n  /** The range of values (e.g. max of 100 and min of -50 means range of 150) */\n  totalValueRange: number;\n  /** The width of the databar */\n  dataBarWidth: number;\n  /** The x coordinates of the markers (the left) */\n  markerXs: number[];\n}\nclass DataBarCellRenderer extends CellRenderer {\n  static getGradient = memoizeClear(\n    (width: number, colors: string[]): CanvasGradient => {\n      const canvas = document.createElement('canvas');\n      const ctx = canvas.getContext('2d');\n      if (ctx == null) {\n        throw new Error('Failed to create canvas context');\n      }\n      if (Number.isNaN(width)) {\n        return ctx.createLinearGradient(0, 0, 0, 0);\n      }\n      const gradient = ctx.createLinearGradient(0, 0, width, 0);\n      const oklabColors = colors.map(color =>\n        GridColorUtils.linearSRGBToOklab(GridColorUtils.hexToRgb(color))\n      );\n      for (let i = 0; i < width; i += 1) {\n        const colorStop = i / width;\n        const colorChangeInterval = 1 / (colors.length - 1);\n        const leftColorIndex = Math.floor(colorStop / colorChangeInterval);\n        const color = GridColorUtils.lerpColor(\n          oklabColors[leftColorIndex],\n          oklabColors[leftColorIndex + 1],\n          (colorStop % colorChangeInterval) / colorChangeInterval\n        );\n        gradient.addColorStop(\n          i / width,\n          GridColorUtils.rgbToHex(GridColorUtils.OklabToLinearSRGB(color))\n        );\n      }\n      return gradient;\n    },\n    {\n      max: 1000,\n      primitive: true, // Stringify the arguments for memoization. Lets the color arrays be different arrays in memory, but still cache hit\n    }\n  );\n\n  drawCellContent(\n    context: CanvasRenderingContext2D,\n    state: GridRenderState,\n    column: VisibleIndex,\n    row: VisibleIndex\n  ): void {\n    const { metrics, model, theme } = state;\n    if (!isDataBarGridModel(model)) {\n      return;\n    }\n    const {\n      modelColumns,\n      modelRows,\n      allRowHeights,\n      allRowYs,\n      firstColumn,\n      fontWidths,\n    } = metrics;\n\n    const isFirstColumn = column === firstColumn;\n    const rowHeight = getOrThrow(allRowHeights, row);\n    const modelRow = getOrThrow(modelRows, row);\n    const modelColumn = getOrThrow(modelColumns, column);\n    const rowY = getOrThrow(allRowYs, row);\n    const textAlign = model.textAlignForCell(modelColumn, modelRow);\n    const text = model.textForCell(modelColumn, modelRow);\n    const {\n      x: textX,\n      y: textY,\n      width: textWidth,\n    } = GridUtils.getTextRenderMetrics(state, column, row);\n\n    const fontWidth = fontWidths?.get(context.font) ?? DEFAULT_FONT_WIDTH;\n    const truncationChar = model.truncationCharForCell(modelColumn, modelRow);\n    const truncatedText = this.getCachedTruncatedString(\n      context,\n      text,\n      textWidth,\n      fontWidth,\n      truncationChar\n    );\n\n    const {\n      columnMin,\n      columnMax,\n      axis,\n      color: dataBarColor,\n      valuePlacement,\n      opacity,\n      markers,\n      direction,\n      value,\n    } = model.dataBarOptionsForCell(modelColumn, modelRow, theme);\n\n    const hasGradient = Array.isArray(dataBarColor) && dataBarColor.length > 1;\n    if (columnMin == null || columnMax == null) {\n      return;\n    }\n\n    const {\n      maxWidth,\n      x: dataBarX,\n      y: dataBarY,\n      zeroPosition,\n      leftmostPosition,\n      markerXs,\n      totalValueRange,\n      dataBarWidth,\n    } = this.getDataBarRenderMetrics(context, state, column, row);\n\n    context.save();\n    context.textAlign = textAlign;\n    if (hasGradient) {\n      const color =\n        value >= 0 ? dataBarColor[dataBarColor.length - 1] : dataBarColor[0];\n      context.fillStyle = color;\n    } else {\n      context.fillStyle = Array.isArray(dataBarColor)\n        ? dataBarColor[0]\n        : dataBarColor;\n    }\n    context.textBaseline = 'middle';\n    context.font = theme.font;\n\n    if (valuePlacement !== 'hide') {\n      context.fillText(truncatedText, textX, textY);\n    }\n\n    const hasRowDividers = theme.gridRowColor != null;\n    const yOffset = hasRowDividers ? 2 : 1;\n\n    context.save();\n    context.beginPath();\n    context.roundRect(\n      dataBarX,\n      rowY + yOffset, // yOffset includes 1px for top padding\n      dataBarWidth,\n      rowHeight - 1 - yOffset, // 1px for bottom padding\n      1\n    );\n    context.clip();\n    context.globalAlpha = opacity;\n\n    // Draw bar\n    if (hasGradient) {\n      // Draw gradient bar\n\n      let gradientWidth = 0;\n      let gradientX = 0;\n      context.save();\n\n      // Translate the context so its origin is at the start of the gradient\n      // and increasing x value moves towards the end of the gradient.\n      // For RTL, scale x by -1 to flip across the x-axis\n      if (value < 0) {\n        if (direction === 'LTR') {\n          gradientWidth = Math.round(\n            (Math.abs(columnMin) / totalValueRange) * maxWidth\n          );\n          gradientX = Math.round(leftmostPosition);\n          context.translate(gradientX, 0);\n        } else if (direction === 'RTL') {\n          gradientWidth = Math.round(\n            maxWidth - (Math.abs(columnMax) / totalValueRange) * maxWidth\n          );\n          gradientX = Math.round(zeroPosition);\n          context.translate(gradientX + gradientWidth, 0);\n          context.scale(-1, 1);\n        }\n      } else if (direction === 'LTR') {\n        // Value is greater than or equal to 0\n        gradientWidth =\n          Math.round(\n            maxWidth - (Math.abs(columnMin) / totalValueRange) * maxWidth\n          ) - 1;\n        gradientX = Math.round(zeroPosition);\n        context.translate(gradientX, 0);\n      } else if (direction === 'RTL') {\n        // Value is greater than or equal to 0\n        gradientWidth = Math.round(\n          (Math.abs(columnMax) / totalValueRange) * maxWidth\n        );\n        gradientX = Math.round(leftmostPosition);\n        context.translate(gradientX + gradientWidth, 0);\n        context.scale(-1, 1);\n      }\n\n      const gradient = DataBarCellRenderer.getGradient(\n        gradientWidth,\n        dataBarColor\n      );\n      context.fillStyle = gradient;\n      context.fillRect(0, dataBarY, gradientWidth, rowHeight);\n      context.restore(); // Restore gradient translate/scale\n    } else {\n      // Draw normal bar\n      context.beginPath();\n      context.roundRect(dataBarX, dataBarY, dataBarWidth, rowHeight, 1);\n      context.fill();\n    }\n\n    // Draw markers\n    if (maxWidth > 0) {\n      markerXs.forEach((markerX, index) => {\n        context.fillStyle = markers[index].color;\n        context.fillRect(markerX, dataBarY, 1, rowHeight);\n      });\n    }\n\n    // restore clip\n    context.restore();\n\n    const shouldRenderDashedLine = !(\n      axis === 'directional' &&\n      ((valuePlacement === 'beside' &&\n        textAlign === 'right' &&\n        direction === 'LTR') ||\n        (valuePlacement === 'beside' &&\n          textAlign === 'left' &&\n          direction === 'RTL') ||\n        valuePlacement !== 'beside')\n    );\n\n    // Draw dashed line\n    if (shouldRenderDashedLine) {\n      context.strokeStyle = theme.zeroLineColor;\n      context.beginPath();\n      context.setLineDash([2, 1]);\n      context.moveTo(zeroPosition, rowY);\n      context.lineTo(zeroPosition, rowY + rowHeight);\n      context.stroke();\n    }\n\n    context.restore();\n\n    // Draw tree marker\n    if (\n      isFirstColumn &&\n      isExpandableGridModel(model) &&\n      model.hasExpandableRows\n    ) {\n      this.drawCellRowTreeMarker(context, state, row);\n    }\n  }\n\n  getDataBarRenderMetrics(\n    context: CanvasRenderingContext2D,\n    state: GridRenderState,\n    column: VisibleIndex,\n    row: VisibleIndex\n  ): DataBarRenderMetrics {\n    const { metrics, model, theme } = state;\n    if (!isDataBarGridModel(model)) {\n      throw new Error('Grid model is not a data bar grid model');\n    }\n    const {\n      firstColumn,\n      allColumnXs,\n      allColumnWidths,\n      allRowYs,\n      modelColumns,\n      modelRows,\n      visibleRows,\n    } = metrics;\n    const { cellHorizontalPadding, treeDepthIndent, treeHorizontalPadding } =\n      theme;\n\n    const modelColumn = getOrThrow(modelColumns, column);\n    const modelRow = getOrThrow(modelRows, row);\n    const x = getOrThrow(allColumnXs, column);\n    const y = getOrThrow(allRowYs, row);\n    const columnWidth = getOrThrow(allColumnWidths, column);\n    const isFirstColumn = column === firstColumn;\n    let treeIndent = 0;\n    if (\n      isExpandableGridModel(model) &&\n      model.hasExpandableRows &&\n      isFirstColumn\n    ) {\n      treeIndent =\n        treeDepthIndent * (model.depthForRow(row) + 1) + treeHorizontalPadding;\n    }\n\n    const textAlign = model.textAlignForCell(modelColumn, modelRow);\n    const {\n      columnMin,\n      columnMax,\n      axis,\n      valuePlacement,\n      markers,\n      direction,\n      value,\n    } = model.dataBarOptionsForCell(modelColumn, modelRow, theme);\n    const longestValueWidth = this.getCachedWidestValueForColumn(\n      context,\n      visibleRows,\n      modelRows,\n      model,\n      modelColumn\n    );\n\n    const leftPadding = 2;\n    const rightPadding =\n      valuePlacement === 'beside' && textAlign === 'right' ? 2 : 1;\n\n    // The value of the total range (e.g. max - column)\n    let totalValueRange = columnMax - columnMin;\n    // If min and max are both positive or min and max are equal, the max length is columnMax\n    if ((columnMax >= 0 && columnMin >= 0) || columnMin === columnMax) {\n      totalValueRange = columnMax;\n    } else if (columnMax <= 0 && columnMin <= 0) {\n      // If min and max are both negative, the max length is the absolute value of columnMin\n      totalValueRange = Math.abs(columnMin);\n    }\n\n    let maxWidth = columnWidth - treeIndent - rightPadding - leftPadding;\n    if (valuePlacement === 'beside') {\n      maxWidth = maxWidth - cellHorizontalPadding - longestValueWidth;\n    }\n\n    if (maxWidth < 0) {\n      maxWidth = 0;\n    }\n\n    const columnLongest = Math.max(Math.abs(columnMin), Math.abs(columnMax));\n    // If axis is proportional, totalValueRange is proportional to maxWidth\n    let dataBarWidth = (Math.abs(value) / totalValueRange) * maxWidth;\n\n    if (maxWidth === 0) {\n      dataBarWidth = 0;\n    } else if (axis === 'middle') {\n      // The longest bar is proportional to half of the maxWidth\n      dataBarWidth = (Math.abs(value) / columnLongest) * (maxWidth / 2);\n    } else if (axis === 'directional') {\n      // The longest bar is proportional to the maxWidth\n      dataBarWidth = (Math.abs(value) / columnLongest) * maxWidth;\n    }\n\n    // Default: proportional, beside, LTR, right text align\n    // All positions are assuming the left side is 0 and the right side is maxWidth\n    let zeroPosition =\n      columnMin >= 0 ? 0 : (Math.abs(columnMin) / totalValueRange) * maxWidth;\n    let dataBarX =\n      value >= 0\n        ? zeroPosition\n        : zeroPosition - (Math.abs(value) / totalValueRange) * maxWidth;\n    let markerXs = markers.map(marker => {\n      const { value: markerValue } = marker;\n      const offset = (Math.abs(markerValue) / totalValueRange) * maxWidth;\n      return markerValue >= 0 ? zeroPosition + offset : zeroPosition - offset;\n    });\n    let leftmostPosition =\n      valuePlacement === 'beside' && textAlign === 'left'\n        ? cellHorizontalPadding + longestValueWidth + leftPadding\n        : leftPadding;\n    let rightmostPosition =\n      valuePlacement === 'beside' && textAlign === 'right'\n        ? columnWidth - cellHorizontalPadding - longestValueWidth - rightPadding\n        : rightPadding;\n\n    // Proportional, RTL\n    if (direction === 'RTL') {\n      zeroPosition =\n        columnMin >= 0\n          ? columnWidth\n          : columnWidth - (Math.abs(columnMin) / totalValueRange) * maxWidth;\n      dataBarX =\n        value >= 0\n          ? zeroPosition - (value / totalValueRange) * maxWidth\n          : zeroPosition;\n      markerXs = markers.map(marker => {\n        const { value: markerValue } = marker;\n        return markerValue >= 0\n          ? zeroPosition - (Math.abs(markerValue) / totalValueRange) * maxWidth\n          : zeroPosition + (Math.abs(markerValue) / totalValueRange) * maxWidth;\n      });\n    }\n\n    if (axis === 'middle') {\n      zeroPosition = maxWidth / 2;\n      if (direction === 'LTR') {\n        // Middle, LTR\n        dataBarX =\n          value >= 0\n            ? zeroPosition\n            : zeroPosition - (Math.abs(value) / columnLongest) * (maxWidth / 2);\n        markerXs = markers.map(marker => {\n          const { value: markerValue } = marker;\n\n          return markerValue >= 0\n            ? zeroPosition +\n                (Math.abs(markerValue) / columnLongest) * (maxWidth / 2)\n            : zeroPosition -\n                (Math.abs(markerValue) / columnLongest) * (maxWidth / 2);\n        });\n      } else if (direction === 'RTL') {\n        // Middle, RTL\n        dataBarX =\n          value <= 0\n            ? zeroPosition\n            : zeroPosition - (Math.abs(value) / columnLongest) * (maxWidth / 2);\n        markerXs = markers.map(marker => {\n          const { value: markerValue } = marker;\n\n          return markerValue <= 0\n            ? zeroPosition +\n                (Math.abs(markerValue) / columnLongest) * (maxWidth / 2)\n            : zeroPosition -\n                (Math.abs(markerValue) / columnLongest) * (maxWidth / 2);\n        });\n      }\n    } else if (axis === 'directional') {\n      if (direction === 'LTR') {\n        // Directional, LTR\n        zeroPosition = 0;\n        dataBarX = zeroPosition;\n        markerXs = markers.map(marker => {\n          const { value: markerValue } = marker;\n\n          return (\n            zeroPosition + (Math.abs(markerValue) / columnLongest) * maxWidth\n          );\n        });\n      } else if (direction === 'RTL') {\n        // Directional, RTL\n        zeroPosition = columnWidth;\n        dataBarX = zeroPosition - (Math.abs(value) / columnLongest) * maxWidth;\n        markerXs = markers.map(marker => {\n          const { value: markerValue } = marker;\n\n          return (\n            zeroPosition - (Math.abs(markerValue) / columnLongest) * maxWidth\n          );\n        });\n      }\n    }\n\n    // Offset all values by the actual x value and padding\n    if (direction === 'LTR') {\n      zeroPosition += x + leftPadding + treeIndent;\n      dataBarX += x + leftPadding + treeIndent;\n      markerXs = markerXs.map(\n        markerX => markerX + x + leftPadding + treeIndent\n      );\n\n      if (valuePlacement === 'beside' && textAlign === 'left') {\n        zeroPosition += longestValueWidth + cellHorizontalPadding;\n        dataBarX += longestValueWidth + cellHorizontalPadding;\n        markerXs = markerXs.map(\n          markerX => markerX + longestValueWidth + cellHorizontalPadding\n        );\n      }\n    } else if (direction === 'RTL') {\n      zeroPosition = zeroPosition + x - rightPadding;\n      dataBarX = dataBarX + x - rightPadding;\n      markerXs = markerXs.map(markerX => markerX + x - rightPadding);\n\n      if (valuePlacement === 'beside' && textAlign === 'right') {\n        zeroPosition = zeroPosition - cellHorizontalPadding - longestValueWidth;\n        dataBarX = dataBarX - cellHorizontalPadding - longestValueWidth;\n        markerXs = markerXs.map(\n          markerX => markerX - cellHorizontalPadding - longestValueWidth\n        );\n      }\n    }\n\n    leftmostPosition += x + treeIndent;\n    rightmostPosition += x;\n\n    return {\n      maxWidth,\n      x: dataBarX,\n      y,\n      zeroPosition,\n      leftmostPosition,\n      rightmostPosition,\n      totalValueRange,\n      dataBarWidth,\n      markerXs,\n    };\n  }\n\n  getCachedWidth = memoizeClear(\n    (context: CanvasRenderingContext2D, text: string): number =>\n      context.measureText(text).width,\n    { max: 10000 }\n  );\n\n  /**\n   * Returns the width of the widest value in pixels\n   */\n  getCachedWidestValueForColumn = memoizeClear(\n    (\n      context: CanvasRenderingContext2D,\n      visibleRows: readonly VisibleIndex[],\n      modelRows: VisibleToModelMap,\n      model: GridModel,\n      column: ModelIndex\n    ): number => {\n      let widestValue = 0;\n      for (let i = 0; i < visibleRows.length; i += 1) {\n        const row = visibleRows[i];\n        const modelRow = getOrThrow(modelRows, row);\n        const text = model.textForCell(column, modelRow);\n        widestValue = Math.max(widestValue, this.getCachedWidth(context, text));\n      }\n\n      return widestValue;\n    },\n    { max: 1000 }\n  );\n}\n\nexport default DataBarCellRenderer;\n"],"mappings":"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"}
         
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"DataBarCellRenderer.js","names":["getOrThrow","CellRenderer","isExpandableGridModel","isDataBarGridModel","GridColorUtils","GridUtils","memoizeClear","DataBarCellRenderer","constructor","arguments","_defineProperty","context","text","measureText","width","max","visibleRows","modelRows","model","column","widestValue","i","length","row","modelRow","textForCell","Math","getCachedWidth","drawCellContent","state","metrics","theme","modelColumns","allRowHeights","allRowYs","firstColumn","fontWidthsLower","fontWidthsUpper","isFirstColumn","rowHeight","modelColumn","rowY","textAlign","textAlignForCell","x","textX","y","textY","textWidth","getTextRenderMetrics","fontWidthLower","get","font","fontWidthUpper","truncationChar","truncationCharForCell","truncatedText","getCachedTruncatedString","columnMin","columnMax","axis","color","dataBarColor","valuePlacement","opacity","markers","direction","value","dataBarOptionsForCell","hasGradient","Array","isArray","maxWidth","dataBarX","dataBarY","zeroPosition","leftmostPosition","markerXs","totalValueRange","dataBarWidth","getDataBarRenderMetrics","save","fillStyle","textBaseline","fillText","hasRowDividers","gridRowColor","yOffset","beginPath","roundRect","clip","globalAlpha","gradientWidth","gradientX","round","abs","translate","scale","gradient","getGradient","fillRect","restore","fill","forEach","markerX","index","shouldRenderDashedLine","strokeStyle","zeroLineColor","setLineDash","moveTo","lineTo","stroke","hasExpandableRows","drawCellRowTreeMarker","Error","allColumnXs","allColumnWidths","cellHorizontalPadding","treeDepthIndent","treeHorizontalPadding","columnWidth","treeIndent","depthForRow","longestValueWidth","getCachedWidestValueForColumn","leftPadding","rightPadding","columnLongest","map","marker","markerValue","offset","rightmostPosition","colors","canvas","document","createElement","ctx","getContext","Number","isNaN","createLinearGradient","oklabColors","linearSRGBToOklab","hexToRgb","colorStop","colorChangeInterval","leftColorIndex","floor","lerpColor","addColorStop","rgbToHex","OklabToLinearSRGB","primitive"],"sources":["../src/DataBarCellRenderer.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\nimport { getOrThrow } from '@deephaven/utils';\nimport CellRenderer from './CellRenderer';\nimport { isExpandableGridModel } from './ExpandableGridModel';\nimport { isDataBarGridModel } from './DataBarGridModel';\nimport {\n  type ModelIndex,\n  type VisibleIndex,\n  type VisibleToModelMap,\n} from './GridMetrics';\nimport GridColorUtils from './GridColorUtils';\nimport GridUtils from './GridUtils';\nimport memoizeClear from './memoizeClear';\nimport { type GridRenderState } from './GridRendererTypes';\nimport type GridModel from './GridModel';\n\ninterface DataBarRenderMetrics {\n  /** The total width the entire bar from the min to max value can take up (rightmostPosition - leftmostPosition) */\n  maxWidth: number;\n  /** The x coordinate of the bar (the left) */\n  x: number;\n  /** The y coordinate of the bar (the top) */\n  y: number;\n  /** The position of the zero line */\n  zeroPosition: number;\n  /** The position of the leftmost point */\n  leftmostPosition: number;\n  /** The position of the rightmost point */\n  rightmostPosition: number;\n  /** The range of values (e.g. max of 100 and min of -50 means range of 150) */\n  totalValueRange: number;\n  /** The width of the databar */\n  dataBarWidth: number;\n  /** The x coordinates of the markers (the left) */\n  markerXs: number[];\n}\nclass DataBarCellRenderer extends CellRenderer {\n  static getGradient = memoizeClear(\n    (width: number, colors: string[]): CanvasGradient => {\n      const canvas = document.createElement('canvas');\n      const ctx = canvas.getContext('2d');\n      if (ctx == null) {\n        throw new Error('Failed to create canvas context');\n      }\n      if (Number.isNaN(width)) {\n        return ctx.createLinearGradient(0, 0, 0, 0);\n      }\n      const gradient = ctx.createLinearGradient(0, 0, width, 0);\n      const oklabColors = colors.map(color =>\n        GridColorUtils.linearSRGBToOklab(GridColorUtils.hexToRgb(color))\n      );\n      for (let i = 0; i < width; i += 1) {\n        const colorStop = i / width;\n        const colorChangeInterval = 1 / (colors.length - 1);\n        const leftColorIndex = Math.floor(colorStop / colorChangeInterval);\n        const color = GridColorUtils.lerpColor(\n          oklabColors[leftColorIndex],\n          oklabColors[leftColorIndex + 1],\n          (colorStop % colorChangeInterval) / colorChangeInterval\n        );\n        gradient.addColorStop(\n          i / width,\n          GridColorUtils.rgbToHex(GridColorUtils.OklabToLinearSRGB(color))\n        );\n      }\n      return gradient;\n    },\n    {\n      max: 1000,\n      primitive: true, // Stringify the arguments for memoization. Lets the color arrays be different arrays in memory, but still cache hit\n    }\n  );\n\n  drawCellContent(\n    context: CanvasRenderingContext2D,\n    state: GridRenderState,\n    column: VisibleIndex,\n    row: VisibleIndex\n  ): void {\n    const { metrics, model, theme } = state;\n    if (!isDataBarGridModel(model)) {\n      return;\n    }\n    const {\n      modelColumns,\n      modelRows,\n      allRowHeights,\n      allRowYs,\n      firstColumn,\n      fontWidthsLower,\n      fontWidthsUpper,\n    } = metrics;\n\n    const isFirstColumn = column === firstColumn;\n    const rowHeight = getOrThrow(allRowHeights, row);\n    const modelRow = getOrThrow(modelRows, row);\n    const modelColumn = getOrThrow(modelColumns, column);\n    const rowY = getOrThrow(allRowYs, row);\n    const textAlign = model.textAlignForCell(modelColumn, modelRow);\n    const text = model.textForCell(modelColumn, modelRow);\n    const {\n      x: textX,\n      y: textY,\n      width: textWidth,\n    } = GridUtils.getTextRenderMetrics(state, column, row);\n\n    const fontWidthLower = fontWidthsLower.get(context.font);\n    const fontWidthUpper = fontWidthsUpper.get(context.font);\n    const truncationChar = model.truncationCharForCell(modelColumn, modelRow);\n    const truncatedText = this.getCachedTruncatedString(\n      context,\n      text,\n      textWidth,\n      fontWidthLower,\n      fontWidthUpper,\n      truncationChar\n    );\n\n    const {\n      columnMin,\n      columnMax,\n      axis,\n      color: dataBarColor,\n      valuePlacement,\n      opacity,\n      markers,\n      direction,\n      value,\n    } = model.dataBarOptionsForCell(modelColumn, modelRow, theme);\n\n    const hasGradient = Array.isArray(dataBarColor) && dataBarColor.length > 1;\n    if (columnMin == null || columnMax == null) {\n      return;\n    }\n\n    const {\n      maxWidth,\n      x: dataBarX,\n      y: dataBarY,\n      zeroPosition,\n      leftmostPosition,\n      markerXs,\n      totalValueRange,\n      dataBarWidth,\n    } = this.getDataBarRenderMetrics(context, state, column, row);\n\n    context.save();\n    context.textAlign = textAlign;\n    if (hasGradient) {\n      const color =\n        value >= 0 ? dataBarColor[dataBarColor.length - 1] : dataBarColor[0];\n      context.fillStyle = color;\n    } else {\n      context.fillStyle = Array.isArray(dataBarColor)\n        ? dataBarColor[0]\n        : dataBarColor;\n    }\n    context.textBaseline = 'middle';\n    context.font = theme.font;\n\n    if (valuePlacement !== 'hide') {\n      context.fillText(truncatedText, textX, textY);\n    }\n\n    const hasRowDividers = theme.gridRowColor != null;\n    const yOffset = hasRowDividers ? 2 : 1;\n\n    context.save();\n    context.beginPath();\n    context.roundRect(\n      dataBarX,\n      rowY + yOffset, // yOffset includes 1px for top padding\n      dataBarWidth,\n      rowHeight - 1 - yOffset, // 1px for bottom padding\n      1\n    );\n    context.clip();\n    context.globalAlpha = opacity;\n\n    // Draw bar\n    if (hasGradient) {\n      // Draw gradient bar\n\n      let gradientWidth = 0;\n      let gradientX = 0;\n      context.save();\n\n      // Translate the context so its origin is at the start of the gradient\n      // and increasing x value moves towards the end of the gradient.\n      // For RTL, scale x by -1 to flip across the x-axis\n      if (value < 0) {\n        if (direction === 'LTR') {\n          gradientWidth = Math.round(\n            (Math.abs(columnMin) / totalValueRange) * maxWidth\n          );\n          gradientX = Math.round(leftmostPosition);\n          context.translate(gradientX, 0);\n        } else if (direction === 'RTL') {\n          gradientWidth = Math.round(\n            maxWidth - (Math.abs(columnMax) / totalValueRange) * maxWidth\n          );\n          gradientX = Math.round(zeroPosition);\n          context.translate(gradientX + gradientWidth, 0);\n          context.scale(-1, 1);\n        }\n      } else if (direction === 'LTR') {\n        // Value is greater than or equal to 0\n        gradientWidth =\n          Math.round(\n            maxWidth - (Math.abs(columnMin) / totalValueRange) * maxWidth\n          ) - 1;\n        gradientX = Math.round(zeroPosition);\n        context.translate(gradientX, 0);\n      } else if (direction === 'RTL') {\n        // Value is greater than or equal to 0\n        gradientWidth = Math.round(\n          (Math.abs(columnMax) / totalValueRange) * maxWidth\n        );\n        gradientX = Math.round(leftmostPosition);\n        context.translate(gradientX + gradientWidth, 0);\n        context.scale(-1, 1);\n      }\n\n      const gradient = DataBarCellRenderer.getGradient(\n        gradientWidth,\n        dataBarColor\n      );\n      context.fillStyle = gradient;\n      context.fillRect(0, dataBarY, gradientWidth, rowHeight);\n      context.restore(); // Restore gradient translate/scale\n    } else {\n      // Draw normal bar\n      context.beginPath();\n      context.roundRect(dataBarX, dataBarY, dataBarWidth, rowHeight, 1);\n      context.fill();\n    }\n\n    // Draw markers\n    if (maxWidth > 0) {\n      markerXs.forEach((markerX, index) => {\n        context.fillStyle = markers[index].color;\n        context.fillRect(markerX, dataBarY, 1, rowHeight);\n      });\n    }\n\n    // restore clip\n    context.restore();\n\n    const shouldRenderDashedLine = !(\n      axis === 'directional' &&\n      ((valuePlacement === 'beside' &&\n        textAlign === 'right' &&\n        direction === 'LTR') ||\n        (valuePlacement === 'beside' &&\n          textAlign === 'left' &&\n          direction === 'RTL') ||\n        valuePlacement !== 'beside')\n    );\n\n    // Draw dashed line\n    if (shouldRenderDashedLine) {\n      context.strokeStyle = theme.zeroLineColor;\n      context.beginPath();\n      context.setLineDash([2, 1]);\n      context.moveTo(zeroPosition, rowY);\n      context.lineTo(zeroPosition, rowY + rowHeight);\n      context.stroke();\n    }\n\n    context.restore();\n\n    // Draw tree marker\n    if (\n      isFirstColumn &&\n      isExpandableGridModel(model) &&\n      model.hasExpandableRows\n    ) {\n      this.drawCellRowTreeMarker(context, state, row);\n    }\n  }\n\n  getDataBarRenderMetrics(\n    context: CanvasRenderingContext2D,\n    state: GridRenderState,\n    column: VisibleIndex,\n    row: VisibleIndex\n  ): DataBarRenderMetrics {\n    const { metrics, model, theme } = state;\n    if (!isDataBarGridModel(model)) {\n      throw new Error('Grid model is not a data bar grid model');\n    }\n    const {\n      firstColumn,\n      allColumnXs,\n      allColumnWidths,\n      allRowYs,\n      modelColumns,\n      modelRows,\n      visibleRows,\n    } = metrics;\n    const { cellHorizontalPadding, treeDepthIndent, treeHorizontalPadding } =\n      theme;\n\n    const modelColumn = getOrThrow(modelColumns, column);\n    const modelRow = getOrThrow(modelRows, row);\n    const x = getOrThrow(allColumnXs, column);\n    const y = getOrThrow(allRowYs, row);\n    const columnWidth = getOrThrow(allColumnWidths, column);\n    const isFirstColumn = column === firstColumn;\n    let treeIndent = 0;\n    if (\n      isExpandableGridModel(model) &&\n      model.hasExpandableRows &&\n      isFirstColumn\n    ) {\n      treeIndent =\n        treeDepthIndent * (model.depthForRow(row) + 1) + treeHorizontalPadding;\n    }\n\n    const textAlign = model.textAlignForCell(modelColumn, modelRow);\n    const {\n      columnMin,\n      columnMax,\n      axis,\n      valuePlacement,\n      markers,\n      direction,\n      value,\n    } = model.dataBarOptionsForCell(modelColumn, modelRow, theme);\n    const longestValueWidth = this.getCachedWidestValueForColumn(\n      context,\n      visibleRows,\n      modelRows,\n      model,\n      modelColumn\n    );\n\n    const leftPadding = 2;\n    const rightPadding =\n      valuePlacement === 'beside' && textAlign === 'right' ? 2 : 1;\n\n    // The value of the total range (e.g. max - column)\n    let totalValueRange = columnMax - columnMin;\n    // If min and max are both positive or min and max are equal, the max length is columnMax\n    if ((columnMax >= 0 && columnMin >= 0) || columnMin === columnMax) {\n      totalValueRange = columnMax;\n    } else if (columnMax <= 0 && columnMin <= 0) {\n      // If min and max are both negative, the max length is the absolute value of columnMin\n      totalValueRange = Math.abs(columnMin);\n    }\n\n    let maxWidth = columnWidth - treeIndent - rightPadding - leftPadding;\n    if (valuePlacement === 'beside') {\n      maxWidth = maxWidth - cellHorizontalPadding - longestValueWidth;\n    }\n\n    if (maxWidth < 0) {\n      maxWidth = 0;\n    }\n\n    const columnLongest = Math.max(Math.abs(columnMin), Math.abs(columnMax));\n    // If axis is proportional, totalValueRange is proportional to maxWidth\n    let dataBarWidth = (Math.abs(value) / totalValueRange) * maxWidth;\n\n    if (maxWidth === 0) {\n      dataBarWidth = 0;\n    } else if (axis === 'middle') {\n      // The longest bar is proportional to half of the maxWidth\n      dataBarWidth = (Math.abs(value) / columnLongest) * (maxWidth / 2);\n    } else if (axis === 'directional') {\n      // The longest bar is proportional to the maxWidth\n      dataBarWidth = (Math.abs(value) / columnLongest) * maxWidth;\n    }\n\n    // Default: proportional, beside, LTR, right text align\n    // All positions are assuming the left side is 0 and the right side is maxWidth\n    let zeroPosition =\n      columnMin >= 0 ? 0 : (Math.abs(columnMin) / totalValueRange) * maxWidth;\n    let dataBarX =\n      value >= 0\n        ? zeroPosition\n        : zeroPosition - (Math.abs(value) / totalValueRange) * maxWidth;\n    let markerXs = markers.map(marker => {\n      const { value: markerValue } = marker;\n      const offset = (Math.abs(markerValue) / totalValueRange) * maxWidth;\n      return markerValue >= 0 ? zeroPosition + offset : zeroPosition - offset;\n    });\n    let leftmostPosition =\n      valuePlacement === 'beside' && textAlign === 'left'\n        ? cellHorizontalPadding + longestValueWidth + leftPadding\n        : leftPadding;\n    let rightmostPosition =\n      valuePlacement === 'beside' && textAlign === 'right'\n        ? columnWidth - cellHorizontalPadding - longestValueWidth - rightPadding\n        : rightPadding;\n\n    // Proportional, RTL\n    if (direction === 'RTL') {\n      zeroPosition =\n        columnMin >= 0\n          ? columnWidth\n          : columnWidth - (Math.abs(columnMin) / totalValueRange) * maxWidth;\n      dataBarX =\n        value >= 0\n          ? zeroPosition - (value / totalValueRange) * maxWidth\n          : zeroPosition;\n      markerXs = markers.map(marker => {\n        const { value: markerValue } = marker;\n        return markerValue >= 0\n          ? zeroPosition - (Math.abs(markerValue) / totalValueRange) * maxWidth\n          : zeroPosition + (Math.abs(markerValue) / totalValueRange) * maxWidth;\n      });\n    }\n\n    if (axis === 'middle') {\n      zeroPosition = maxWidth / 2;\n      if (direction === 'LTR') {\n        // Middle, LTR\n        dataBarX =\n          value >= 0\n            ? zeroPosition\n            : zeroPosition - (Math.abs(value) / columnLongest) * (maxWidth / 2);\n        markerXs = markers.map(marker => {\n          const { value: markerValue } = marker;\n\n          return markerValue >= 0\n            ? zeroPosition +\n                (Math.abs(markerValue) / columnLongest) * (maxWidth / 2)\n            : zeroPosition -\n                (Math.abs(markerValue) / columnLongest) * (maxWidth / 2);\n        });\n      } else if (direction === 'RTL') {\n        // Middle, RTL\n        dataBarX =\n          value <= 0\n            ? zeroPosition\n            : zeroPosition - (Math.abs(value) / columnLongest) * (maxWidth / 2);\n        markerXs = markers.map(marker => {\n          const { value: markerValue } = marker;\n\n          return markerValue <= 0\n            ? zeroPosition +\n                (Math.abs(markerValue) / columnLongest) * (maxWidth / 2)\n            : zeroPosition -\n                (Math.abs(markerValue) / columnLongest) * (maxWidth / 2);\n        });\n      }\n    } else if (axis === 'directional') {\n      if (direction === 'LTR') {\n        // Directional, LTR\n        zeroPosition = 0;\n        dataBarX = zeroPosition;\n        markerXs = markers.map(marker => {\n          const { value: markerValue } = marker;\n\n          return (\n            zeroPosition + (Math.abs(markerValue) / columnLongest) * maxWidth\n          );\n        });\n      } else if (direction === 'RTL') {\n        // Directional, RTL\n        zeroPosition = columnWidth;\n        dataBarX = zeroPosition - (Math.abs(value) / columnLongest) * maxWidth;\n        markerXs = markers.map(marker => {\n          const { value: markerValue } = marker;\n\n          return (\n            zeroPosition - (Math.abs(markerValue) / columnLongest) * maxWidth\n          );\n        });\n      }\n    }\n\n    // Offset all values by the actual x value and padding\n    if (direction === 'LTR') {\n      zeroPosition += x + leftPadding + treeIndent;\n      dataBarX += x + leftPadding + treeIndent;\n      markerXs = markerXs.map(\n        markerX => markerX + x + leftPadding + treeIndent\n      );\n\n      if (valuePlacement === 'beside' && textAlign === 'left') {\n        zeroPosition += longestValueWidth + cellHorizontalPadding;\n        dataBarX += longestValueWidth + cellHorizontalPadding;\n        markerXs = markerXs.map(\n          markerX => markerX + longestValueWidth + cellHorizontalPadding\n        );\n      }\n    } else if (direction === 'RTL') {\n      zeroPosition = zeroPosition + x - rightPadding;\n      dataBarX = dataBarX + x - rightPadding;\n      markerXs = markerXs.map(markerX => markerX + x - rightPadding);\n\n      if (valuePlacement === 'beside' && textAlign === 'right') {\n        zeroPosition = zeroPosition - cellHorizontalPadding - longestValueWidth;\n        dataBarX = dataBarX - cellHorizontalPadding - longestValueWidth;\n        markerXs = markerXs.map(\n          markerX => markerX - cellHorizontalPadding - longestValueWidth\n        );\n      }\n    }\n\n    leftmostPosition += x + treeIndent;\n    rightmostPosition += x;\n\n    return {\n      maxWidth,\n      x: dataBarX,\n      y,\n      zeroPosition,\n      leftmostPosition,\n      rightmostPosition,\n      totalValueRange,\n      dataBarWidth,\n      markerXs,\n    };\n  }\n\n  getCachedWidth = memoizeClear(\n    (context: CanvasRenderingContext2D, text: string): number =>\n      context.measureText(text).width,\n    { max: 10000 }\n  );\n\n  /**\n   * Returns the width of the widest value in pixels\n   */\n  getCachedWidestValueForColumn = memoizeClear(\n    (\n      context: CanvasRenderingContext2D,\n      visibleRows: readonly VisibleIndex[],\n      modelRows: VisibleToModelMap,\n      model: GridModel,\n      column: ModelIndex\n    ): number => {\n      let widestValue = 0;\n      for (let i = 0; i < visibleRows.length; i += 1) {\n        const row = visibleRows[i];\n        const modelRow = getOrThrow(modelRows, row);\n        const text = model.textForCell(column, modelRow);\n        widestValue = Math.max(widestValue, this.getCachedWidth(context, text));\n      }\n\n      return widestValue;\n    },\n    { max: 1000 }\n  );\n}\n\nexport default DataBarCellRenderer;\n"],"mappings":"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"}
         
     | 
| 
         @@ -59,8 +59,12 @@ export declare class GridMetricCalculator { 
     | 
|
| 
       59 
59 
     | 
    
         
             
                protected calculatedColumnWidths: ModelSizeMap;
         
     | 
| 
       60 
60 
     | 
    
         
             
                /** Calculated row heights based on cell contents */
         
     | 
| 
       61 
61 
     | 
    
         
             
                protected calculatedRowHeights: ModelSizeMap;
         
     | 
| 
       62 
     | 
    
         
            -
                /** Cache of fonts to estimated width of  
     | 
| 
       63 
     | 
    
         
            -
                protected  
     | 
| 
      
 62 
     | 
    
         
            +
                /** Cache of fonts to estimated width of the smallest char */
         
     | 
| 
      
 63 
     | 
    
         
            +
                protected fontWidthsLower: Map<string, number>;
         
     | 
| 
      
 64 
     | 
    
         
            +
                /** Cache of fonts to estimated width of the largest char */
         
     | 
| 
      
 65 
     | 
    
         
            +
                protected fontWidthsUpper: Map<string, number>;
         
     | 
| 
      
 66 
     | 
    
         
            +
                /** Cache of fonts to width of all chars */
         
     | 
| 
      
 67 
     | 
    
         
            +
                protected allCharWidths: Map<string, Map<string, number>>;
         
     | 
| 
       64 
68 
     | 
    
         
             
                /** Map from visible index to model index for rows (e.g. reversing movedRows operations) */
         
     | 
| 
       65 
69 
     | 
    
         
             
                protected modelRows: VisibleToModelMap;
         
     | 
| 
       66 
70 
     | 
    
         
             
                /** Map from visible index to model index for columns (e.g. reversing movedColumns operations) */
         
     | 
| 
         @@ -69,12 +73,14 @@ export declare class GridMetricCalculator { 
     | 
|
| 
       69 
73 
     | 
    
         
             
                protected movedRows: readonly MoveOperation[];
         
     | 
| 
       70 
74 
     | 
    
         
             
                /** List of moved column operations. Need to track the previous value so we know if modelColumns needs to be cleared. */
         
     | 
| 
       71 
75 
     | 
    
         
             
                protected movedColumns: readonly MoveOperation[];
         
     | 
| 
       72 
     | 
    
         
            -
                constructor({ userColumnWidths, userRowHeights, calculatedColumnWidths, calculatedRowHeights,  
     | 
| 
      
 76 
     | 
    
         
            +
                constructor({ userColumnWidths, userRowHeights, calculatedColumnWidths, calculatedRowHeights, fontWidthsLower, fontWidthsUpper, allCharWidths, modelRows, modelColumns, movedRows, movedColumns, initialRowHeights, initialColumnWidths, }?: {
         
     | 
| 
       73 
77 
     | 
    
         
             
                    userColumnWidths?: Map<any, any> | undefined;
         
     | 
| 
       74 
78 
     | 
    
         
             
                    userRowHeights?: Map<any, any> | undefined;
         
     | 
| 
       75 
79 
     | 
    
         
             
                    calculatedColumnWidths?: Map<any, any> | undefined;
         
     | 
| 
       76 
80 
     | 
    
         
             
                    calculatedRowHeights?: Map<any, any> | undefined;
         
     | 
| 
       77 
     | 
    
         
            -
                     
     | 
| 
      
 81 
     | 
    
         
            +
                    fontWidthsLower?: Map<any, any> | undefined;
         
     | 
| 
      
 82 
     | 
    
         
            +
                    fontWidthsUpper?: Map<any, any> | undefined;
         
     | 
| 
      
 83 
     | 
    
         
            +
                    allCharWidths?: Map<any, any> | undefined;
         
     | 
| 
       78 
84 
     | 
    
         
             
                    modelRows?: Map<any, any> | undefined;
         
     | 
| 
       79 
85 
     | 
    
         
             
                    modelColumns?: Map<any, any> | undefined;
         
     | 
| 
       80 
86 
     | 
    
         
             
                    movedRows?: readonly MoveOperation[] | undefined;
         
     | 
| 
         @@ -428,14 +434,15 @@ export declare class GridMetricCalculator { 
     | 
|
| 
       428 
434 
     | 
    
         
             
                 * @param state The grid metric state
         
     | 
| 
       429 
435 
     | 
    
         
             
                 * @returns The calculated width of the column header
         
     | 
| 
       430 
436 
     | 
    
         
             
                 */
         
     | 
| 
       431 
     | 
    
         
            -
                calculateColumnHeaderWidth(modelColumn: ModelIndex, state: GridMetricState): number;
         
     | 
| 
      
 437 
     | 
    
         
            +
                calculateColumnHeaderWidth(modelColumn: ModelIndex, state: GridMetricState, maxColumnWidth: number): number;
         
     | 
| 
       432 
438 
     | 
    
         
             
                /**
         
     | 
| 
       433 
439 
     | 
    
         
             
                 * Calculate the width of the specified column's data
         
     | 
| 
       434 
440 
     | 
    
         
             
                 * @param modelColumn ModelIndex of the column to get the data width for
         
     | 
| 
       435 
441 
     | 
    
         
             
                 * @param state The grid metric state
         
     | 
| 
       436 
442 
     | 
    
         
             
                 * @returns The calculated width of the column data
         
     | 
| 
       437 
443 
     | 
    
         
             
                 */
         
     | 
| 
       438 
     | 
    
         
            -
                calculateColumnDataWidth(modelColumn: ModelIndex, state: GridMetricState): number;
         
     | 
| 
      
 444 
     | 
    
         
            +
                calculateColumnDataWidth(modelColumn: ModelIndex, state: GridMetricState, maxColumnWidth: number): number;
         
     | 
| 
      
 445 
     | 
    
         
            +
                getTextWidth(context: CanvasRenderingContext2D, font: string, text: string, maxWidth?: number): number;
         
     | 
| 
       439 
446 
     | 
    
         
             
                /**
         
     | 
| 
       440 
447 
     | 
    
         
             
                 * The coordinate for where the tree padding should be drawn
         
     | 
| 
       441 
448 
     | 
    
         
             
                 * @param state The grid metric state
         
     | 
| 
         @@ -443,13 +450,17 @@ export declare class GridMetricCalculator { 
     | 
|
| 
       443 
450 
     | 
    
         
             
                 */
         
     | 
| 
       444 
451 
     | 
    
         
             
                calculateTreePaddingX(state: GridMetricState): Coordinate;
         
     | 
| 
       445 
452 
     | 
    
         
             
                /**
         
     | 
| 
       446 
     | 
    
         
            -
                 *  
     | 
| 
       447 
     | 
    
         
            -
                 * using tabular figures so every character is same width
         
     | 
| 
      
 453 
     | 
    
         
            +
                 * Calculates the lower bound width of a character of the provided font.
         
     | 
| 
       448 
454 
     | 
    
         
             
                 * @param font The font to get the width for
         
     | 
| 
       449 
455 
     | 
    
         
             
                 * @param state The grid metric state
         
     | 
| 
       450 
     | 
    
         
            -
                 * @returns Width of the char `8` for the specified font
         
     | 
| 
       451 
456 
     | 
    
         
             
                 */
         
     | 
| 
       452 
     | 
    
         
            -
                 
     | 
| 
      
 457 
     | 
    
         
            +
                calculateLowerFontWidth(font: GridFont, context: CanvasRenderingContext2D): void;
         
     | 
| 
      
 458 
     | 
    
         
            +
                /**
         
     | 
| 
      
 459 
     | 
    
         
            +
                 * Calculates the upper bound width of a character of the provided font.
         
     | 
| 
      
 460 
     | 
    
         
            +
                 * @param font The font to get the width for
         
     | 
| 
      
 461 
     | 
    
         
            +
                 * @param state The grid metric state
         
     | 
| 
      
 462 
     | 
    
         
            +
                 */
         
     | 
| 
      
 463 
     | 
    
         
            +
                calculateUpperFontWidth(font: GridFont, context: CanvasRenderingContext2D): void;
         
     | 
| 
       453 
464 
     | 
    
         
             
                /**
         
     | 
| 
       454 
465 
     | 
    
         
             
                 * Sets the width for the specified column
         
     | 
| 
       455 
466 
     | 
    
         
             
                 * @param column The column model index to set
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"GridMetricCalculator.d.ts","sourceRoot":"","sources":["../src/GridMetricCalculator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,UAAU,EACV,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,aAAa,EACb,OAAO,EACR,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAElF,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAI9C,MAAM,WAAW,eAAe;IAE9B,IAAI,EAAE,YAAY,CAAC;IACnB,GAAG,EAAE,YAAY,CAAC;IAGlB,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,EAAE,UAAU,CAAC;IAGtB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IAGf,OAAO,EAAE,wBAAwB,CAAC;IAGlC,KAAK,EAAE,SAAS,CAAC;IAGjB,KAAK,EAAE,SAAS,CAAC;IAGjB,YAAY,EAAE,SAAS,aAAa,EAAE,CAAC;IACvC,SAAS,EAAE,SAAS,aAAa,EAAE,CAAC;IAGpC,6BAA6B,EAAE,OAAO,CAAC;IACvC,2BAA2B,EAAE,OAAO,CAAC;IAErC,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;CACvC;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CACrB,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,EAC1B,SAAS,SAAkC,EAC3C,UAAU,SAA4B,GACrC,IAAI,CAON;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,OAAO,GACf,aAAa,CAcf;AAED;;;;GAIG;AACH,qBAAa,oBAAoB;IAC/B,oDAAoD;IACpD,MAAM,CAAC,UAAU,SAAS;IAE1B,gEAAgE;IAChE,MAAM,CAAC,gBAAgB,SAAO;IAE9B,kFAAkF;IAC3E,iBAAiB,EAAE,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAE1D,oFAAoF;IAC7E,mBAAmB,EAAE,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAE5D,6BAA6B;IAC7B,SAAS,CAAC,gBAAgB,EAAE,YAAY,CAAC;IAEzC,2BAA2B;IAC3B,SAAS,CAAC,cAAc,EAAE,YAAY,CAAC;IAEvC,sDAAsD;IACtD,SAAS,CAAC,sBAAsB,EAAE,YAAY,CAAC;IAE/C,oDAAoD;IACpD,SAAS,CAAC,oBAAoB,EAAE,YAAY,CAAC;IAE7C, 
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"GridMetricCalculator.d.ts","sourceRoot":"","sources":["../src/GridMetricCalculator.ts"],"names":[],"mappings":"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"}
         
     |