@deephaven/iris-grid 0.32.1-beta.9 → 0.32.1-lsp.3
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/GotoRow.d.ts +3 -2
- package/dist/GotoRow.d.ts.map +1 -1
- package/dist/GotoRow.js +7 -11
- package/dist/GotoRow.js.map +1 -1
- package/dist/IrisGrid.d.ts.map +1 -1
- package/dist/IrisGrid.js +5 -7
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridRenderer.d.ts.map +1 -1
- package/dist/IrisGridRenderer.js +4 -2
- package/dist/IrisGridRenderer.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.d.ts.map +1 -1
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +0 -6
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationUtils.d.ts +0 -1
- package/dist/sidebar/aggregations/AggregationUtils.d.ts.map +1 -1
- package/dist/sidebar/aggregations/AggregationUtils.js +0 -2
- package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
- package/dist/sidebar/aggregations/Aggregations.d.ts +1 -0
- package/dist/sidebar/aggregations/Aggregations.d.ts.map +1 -1
- package/dist/sidebar/aggregations/Aggregations.js +3 -1
- package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
- package/package.json +15 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridRenderer.d.ts","sourceRoot":"","sources":["../src/IrisGridRenderer.ts"],"names":[],"mappings":"AAGA,OAAO,EAML,cAAc,EACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,WAAW,EACX,cAAc,EACd,YAAY,EACZ,eAAe,EACf,aAAa,EAEb,YAAY,EACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAc,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,cAAc,EACd,WAAW,EACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAa5C,MAAM,MAAM,mBAAmB,GAAG,eAAe,GAAG;IAClD,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,iBAAiB,CAAC;IACzB,iBAAiB,EAAE,cAAc,CAAC;IAClC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,yBAAyB,CAAC;IAC3C,YAAY,EAAE,sBAAsB,CAAC;IACrC,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AACF;;KAEK;AACL,cAAM,gBAAiB,SAAQ,YAAY;IACzC,MAAM,CAAC,aAAa,CAClB,cAAc,EAAE,cAAc,GAAG,SAAS,GAAG,IAAI,EACjD,WAAW,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI,GAC1C,OAAO;;IAeV,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE9B,SAAS,IAAI,IAAI;IASjB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI;IAcnD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI7B,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI;IAa7C,UAAU,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI;IAM5C,QAAQ,CACN,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,mBAAmB,GACzB,IAAI;IAKP,aAAa,CACX,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,mBAAmB,GACzB,IAAI;IAQP,eAAe,CACb,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,mBAAmB,EAC1B,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,YAAY,GAChB,IAAI;IAsBP,qBAAqB,CACnB,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,mBAAmB,GACzB,IAAI;IAmCP,kBAAkB,CAChB,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,mBAAmB,GACzB,IAAI;IA4BP,oBAAoB,CAClB,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,mBAAmB,GACzB,IAAI;
|
|
1
|
+
{"version":3,"file":"IrisGridRenderer.d.ts","sourceRoot":"","sources":["../src/IrisGridRenderer.ts"],"names":[],"mappings":"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"}
|
package/dist/IrisGridRenderer.js
CHANGED
|
@@ -194,8 +194,10 @@ class IrisGridRenderer extends GridRenderer {
|
|
|
194
194
|
allColumnXs,
|
|
195
195
|
maxY
|
|
196
196
|
} = metrics;
|
|
197
|
-
var x =
|
|
198
|
-
var columnWidth =
|
|
197
|
+
var x = allColumnXs.get(hoverSelectColumn);
|
|
198
|
+
var columnWidth = allColumnWidths.get(hoverSelectColumn);
|
|
199
|
+
assertNotNull(x);
|
|
200
|
+
assertNotNull(columnWidth);
|
|
199
201
|
context.fillStyle = theme.linkerColumnHoverBackgroundColor;
|
|
200
202
|
context.fillRect(x, 0, columnWidth, maxY);
|
|
201
203
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridRenderer.js","names":["dhSortDown","dhSortUp","vsTriangleDown","vsTriangleRight","vsLinkExternal","GridRenderer","GridUtils","TableUtils","assertNotNull","getOrThrow","ICON_NAMES","Object","freeze","SORT_UP","SORT_DOWN","CARET_DOWN","CARET_RIGHT","CELL_OVERFLOW","EXPAND_ICON_SIZE","ICON_SIZE","IrisGridRenderer","isFilterValid","advancedFilter","quickFilter","isAdvancedFilterValid","filter","isQuickFilterValid","constructor","icons","initIcons","setIcon","name","faIcon","path","Array","isArray","icon","Path2D","scaledIcon","scaleMatrix","a","d","addPath","getIcon","getSortIcon","sort","direction","sortDirection","ascending","descending","drawCanvas","state","drawScrim","drawGrid","context","drawCellOverflowButton","drawGridLines","drawGroupedColumnLine","drawPendingRowLine","drawCellContent","column","row","metrics","model","modelColumns","modelRows","modelRow","modelColumn","get","undefined","value","valueForCell","isTextType","columns","type","originalFont","font","displayValue","theme","groupedColumns","maxY","allColumnWidths","allColumnXs","length","groupedColumnDividerColor","lastVisibleGroupColumnIndex","columnX","columnWidth","x","strokeStyle","lineWidth","beginPath","moveTo","lineTo","stroke","allRowYs","maxX","pendingRowCount","firstPendingRow","rowCount","floatingBottomRowCount","y","save","setLineDash","pendingTextColor","restore","drawMouseColumnHover","hoverSelectColumn","linkerColumnHoverBackgroundColor","fillStyle","fillRect","drawMouseRowHover","isSelectingColumn","loadingScrimProgress","width","height","gridY","scrimBlurSize","scrimColor","globalCompositeOperation","rect","clip","drawColumnHeaders","reverseType","columnHeaderHeight","drawFilterHeaders","hasReverse","REVERSE_TYPE","NONE","color","headerReverseBarColor","headerSortBarColor","drawHeaderBar","reverseHeaderBarHeight","sortHeaderBarHeight","barHeight","interior","offset","headerBarCasingColor","columnHeaderMaxDepth","drawColumnHeadersAtDepth","range","boundsProp","depth","isMenuShown","bounds","drawColumnHeaderAtIndex","index","gridX","fontWidths","headerHorizontalPadding","columnName","getSortForColumn","text","textForColumnHeader","fontWidth","DEFAULT_FONT_WIDTH","textWidth","textRight","defaultX","Math","min","yOffset","translate","fill","isFilterBarShown","quickFilters","advancedFilters","drawExpandedFilterHeaders","size","drawCollapsedFilterHeaders","filterBarHeight","visibleColumns","textAlign","filterBarExpandedActiveBackgroundColor","filterBarExpandedBackgroundColor","y1","filterBarSeparatorColor","i","isFilterable","x1","drawExpandedFilterHeader","filterBarExpandedActiveCellBackgroundColor","filterBarErrorColor","filterBarHorizontalPadding","headerColor","filterText","getFilterText","measureText","maxLength","substring","rectLeft","rectTop","rectWidth","rectHeight","strokeRect","textX","textY","fillText","headerSeparatorColor","filterBarCollapsedHeight","drawCollapsedFilterHeader","filterBarActiveColor","filterBarActiveBackgroundColor","drawTreeMarker","rowY","treeBox","isExpanded","markerIcon","iconX","iconY","drawRowFooters","mouseX","mouseY","floatingTopHeight","floatingBottomHeight","floatingRows","rowFooterWidth","horizontalBarHeight","verticalBarWidth","allRowHeights","cellHorizontalPadding","floatingGridRowColor","floatingRowBackgroundColors","rowHoverBackgroundColor","mouseRow","getRowAtY","includes","rowHeight","textForRowFooter","getTextRenderMetrics","textMetrics","mouseColumn","getGridPointFromXY","left","getCellOverflowButtonPosition","shouldRenderOverflowButton","getCellInfoFromXY","isStringType","textForCell","truncatedText","getCachedTruncatedString","truncationCharForCell","NULL_POSITION","top","gridWidth","right","buttonLeft","buttonTop","buttonWidth","buttonHeight","overflowButtonColor","overflowButtonHoverColor","getExpandButtonPosition","max"],"sources":["../src/IrisGridRenderer.ts"],"sourcesContent":["/* eslint react/destructuring-assignment: \"off\" */\n/* eslint class-methods-use-this: \"off\" */\n/* eslint no-param-reassign: \"off\" */\nimport {\n dhSortDown,\n dhSortUp,\n vsTriangleDown,\n vsTriangleRight,\n vsLinkExternal,\n IconDefinition,\n} from '@deephaven/icons';\nimport {\n BoundedAxisRange,\n BoxCoordinates,\n Coordinate,\n GridMetrics,\n GridRangeIndex,\n GridRenderer,\n GridRenderState,\n GridThemeType,\n GridUtils,\n VisibleIndex,\n} from '@deephaven/grid';\nimport { Sort } from '@deephaven/jsapi-shim';\nimport { TableUtils, ReverseType } from '@deephaven/jsapi-utils';\nimport { assertNotNull, getOrThrow } from '@deephaven/utils';\nimport {\n ReadonlyAdvancedFilterMap,\n ReadonlyQuickFilterMap,\n AdvancedFilter,\n QuickFilter,\n} from './CommonTypes';\nimport { IrisGridThemeType } from './IrisGridTheme';\nimport IrisGridModel from './IrisGridModel';\n\nconst ICON_NAMES = Object.freeze({\n SORT_UP: 'sortUp',\n SORT_DOWN: 'sortDown',\n CARET_DOWN: 'caretDown',\n CARET_RIGHT: 'caretRight',\n CELL_OVERFLOW: 'cellOverflow',\n});\n\nconst EXPAND_ICON_SIZE = 10;\nconst ICON_SIZE = 16;\n\nexport type IrisGridRenderState = GridRenderState & {\n model: IrisGridModel;\n theme: IrisGridThemeType;\n hoverSelectColumn: GridRangeIndex;\n isSelectingColumn: boolean;\n loadingScrimProgress: number;\n reverseType: ReverseType;\n isFilterBarShown: boolean;\n advancedFilters: ReadonlyAdvancedFilterMap;\n quickFilters: ReadonlyQuickFilterMap;\n isMenuShown: boolean;\n};\n/**\n * Handles rendering some of the Iris specific features, such as sorting icons, sort bar display\n * */\nclass IrisGridRenderer extends GridRenderer {\n static isFilterValid(\n advancedFilter: AdvancedFilter | undefined | null,\n quickFilter: QuickFilter | undefined | null\n ): boolean {\n const isAdvancedFilterValid =\n advancedFilter == null || advancedFilter.filter != null;\n const isQuickFilterValid =\n quickFilter == null || quickFilter.filter != null;\n return isAdvancedFilterValid && isQuickFilterValid;\n }\n\n constructor() {\n super();\n this.icons = {};\n\n this.initIcons();\n }\n\n icons: Record<string, Path2D>;\n\n initIcons(): void {\n this.setIcon(ICON_NAMES.SORT_UP, dhSortUp);\n this.setIcon(ICON_NAMES.SORT_DOWN, dhSortDown);\n this.setIcon(ICON_NAMES.CARET_DOWN, vsTriangleDown);\n this.setIcon(ICON_NAMES.CARET_RIGHT, vsTriangleRight);\n this.setIcon(ICON_NAMES.CELL_OVERFLOW, vsLinkExternal);\n }\n\n // Scales the icon to be square and match the global ICON_SIZE\n setIcon(name: string, faIcon: IconDefinition): void {\n const path = Array.isArray(faIcon.icon[4])\n ? faIcon.icon[4][0]\n : faIcon.icon[4];\n const icon = new Path2D(path);\n const scaledIcon = new Path2D();\n const scaleMatrix = {\n a: ICON_SIZE / faIcon.icon[0],\n d: ICON_SIZE / faIcon.icon[1],\n };\n scaledIcon.addPath(icon, scaleMatrix);\n this.icons[name] = scaledIcon;\n }\n\n getIcon(name: string): Path2D {\n return this.icons[name];\n }\n\n getSortIcon(sort: Sort | null): Path2D | null {\n if (!sort) {\n return null;\n }\n if (sort.direction === TableUtils.sortDirection.ascending) {\n return this.getIcon(ICON_NAMES.SORT_UP);\n }\n if (sort.direction === TableUtils.sortDirection.descending) {\n return this.getIcon(ICON_NAMES.SORT_DOWN);\n }\n return null;\n }\n\n drawCanvas(state: IrisGridRenderState): void {\n super.drawCanvas(state);\n\n this.drawScrim(state);\n }\n\n drawGrid(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n super.drawGrid(context, state);\n this.drawCellOverflowButton(state);\n }\n\n drawGridLines(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n super.drawGridLines(context, state);\n\n this.drawGroupedColumnLine(context, state);\n\n this.drawPendingRowLine(context, state);\n }\n\n drawCellContent(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n column: VisibleIndex,\n row: VisibleIndex\n ): void {\n const { metrics, model } = state;\n const { modelColumns, modelRows } = metrics;\n const modelRow = getOrThrow(modelRows, row);\n const modelColumn = modelColumns.get(column);\n if (modelColumn === undefined) {\n return;\n }\n const value = model.valueForCell(modelColumn, modelRow);\n if (TableUtils.isTextType(model.columns[modelColumn]?.type)) {\n if (value === null || value === '') {\n const originalFont = context.font;\n context.font = `italic ${originalFont}`;\n const displayValue = value === null ? 'null' : 'empty';\n super.drawCellContent(context, state, column, row, displayValue);\n context.font = originalFont;\n return;\n }\n }\n super.drawCellContent(context, state, column, row);\n }\n\n drawGroupedColumnLine(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, theme } = state;\n const { groupedColumns } = model;\n const { maxY, allColumnWidths, allColumnXs } = metrics;\n if (\n groupedColumns.length === 0 ||\n theme.groupedColumnDividerColor == null\n ) {\n return;\n }\n\n // This assumes that the engine puts the grouped columns at the start of the\n // model, so model and visible index match for grouped columns. If we ever\n // add freeze support for tree tables or allow moving the grouped columns,\n // this assumption may no longer hold true. If such a change occurs, we'll\n // need to revisit this since a single vertical divider may no longer make\n // sense.\n const lastVisibleGroupColumnIndex = groupedColumns.length - 1;\n\n const columnX = allColumnXs.get(lastVisibleGroupColumnIndex);\n const columnWidth = allColumnWidths.get(lastVisibleGroupColumnIndex);\n if (columnX == null || columnWidth == null) {\n return;\n }\n\n const x = columnX + columnWidth + 0.5;\n\n context.strokeStyle = theme.groupedColumnDividerColor;\n context.lineWidth = 1;\n context.beginPath();\n context.moveTo(x, 0);\n context.lineTo(x, maxY);\n context.stroke();\n }\n\n drawPendingRowLine(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, theme } = state;\n const { allRowYs, maxX } = metrics;\n const { pendingRowCount } = model;\n if (pendingRowCount <= 0) {\n return;\n }\n\n const firstPendingRow =\n model.rowCount - model.pendingRowCount - model.floatingBottomRowCount;\n let y = allRowYs.get(firstPendingRow);\n if (y == null) {\n return;\n }\n\n y -= 0.5;\n context.save();\n context.setLineDash([4, 2]);\n context.strokeStyle = theme.pendingTextColor;\n\n context.lineWidth = 1;\n context.beginPath();\n context.moveTo(0, y);\n context.lineTo(maxX, y);\n context.stroke();\n context.restore();\n }\n\n drawMouseColumnHover(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { theme, metrics, hoverSelectColumn } = state;\n if (\n hoverSelectColumn == null ||\n theme.linkerColumnHoverBackgroundColor == null\n ) {\n return;\n }\n\n const { allColumnWidths, allColumnXs, maxY } = metrics;\n\n const x = getOrThrow(allColumnXs, hoverSelectColumn);\n const columnWidth = getOrThrow(allColumnWidths, hoverSelectColumn);\n\n context.fillStyle = theme.linkerColumnHoverBackgroundColor;\n context.fillRect(x, 0, columnWidth, maxY);\n }\n\n drawMouseRowHover(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { isSelectingColumn } = state;\n if (!isSelectingColumn) {\n super.drawMouseRowHover(context, state);\n }\n }\n\n drawScrim(state: IrisGridRenderState): void {\n const { context, loadingScrimProgress, metrics, theme } = state;\n if (loadingScrimProgress == null) {\n return;\n }\n\n const { width, height, gridY } = metrics;\n const { scrimBlurSize, scrimColor } = theme;\n\n context.save();\n\n // Use global composite so we can change the underlying layer to grayscale\n context.globalCompositeOperation = 'color';\n context.filter = `blur(${scrimBlurSize}px)`;\n if (scrimColor != null) {\n context.fillStyle = scrimColor;\n }\n\n // Clip the path so the top edge is hard edge, bottom edge is soft/blurry\n context.beginPath();\n context.rect(0, gridY, width, height - gridY);\n context.clip();\n\n // Extend the edges beyond the clip area so they're hard edges\n context.fillRect(\n -scrimBlurSize,\n -scrimBlurSize + gridY,\n scrimBlurSize * 2 + width,\n (scrimBlurSize * 2 + (height - gridY)) * loadingScrimProgress\n );\n\n // add an overlay of the scrim color to darken things a bit\n context.globalCompositeOperation = 'overlay';\n context.filter = `blur(${scrimBlurSize}px) opacity(15%)`;\n context.fillRect(\n -scrimBlurSize,\n -scrimBlurSize + gridY,\n scrimBlurSize * 2 + width,\n (scrimBlurSize * 2 + (height - gridY)) * loadingScrimProgress\n );\n\n context.restore();\n }\n\n drawColumnHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n super.drawColumnHeaders(context, state);\n\n const { theme, metrics, model, reverseType } = state;\n const { columnHeaderHeight } = metrics;\n\n this.drawFilterHeaders(context, state);\n\n if (columnHeaderHeight <= 0) {\n return;\n }\n\n const { sort } = model;\n // if there is only one sort bar, it is interior to the header to save space\n if (sort.length === 1) {\n const hasReverse = reverseType !== TableUtils.REVERSE_TYPE.NONE;\n\n let color;\n if (hasReverse) {\n color = theme.headerReverseBarColor;\n } else {\n color = theme.headerSortBarColor;\n }\n this.drawHeaderBar(\n context,\n state,\n color,\n hasReverse ? theme.reverseHeaderBarHeight : theme.sortHeaderBarHeight\n );\n } else if (sort.length > 1) {\n // if there's multiple bars, the sort is interior to header\n // and the reverse claims space in the table\n if (\n // has table reverse\n reverseType !== TableUtils.REVERSE_TYPE.NONE\n ) {\n this.drawHeaderBar(\n context,\n state,\n theme.headerReverseBarColor,\n theme.reverseHeaderBarHeight,\n false\n );\n }\n this.drawHeaderBar(\n context,\n state,\n theme.headerSortBarColor,\n theme.sortHeaderBarHeight\n );\n }\n }\n\n drawHeaderBar(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n color: string | CanvasGradient | CanvasPattern,\n barHeight: number,\n interior = true\n ): void {\n const { theme, metrics, model } = state;\n const { columnHeaderHeight, width } = metrics;\n // Draw casing with 1 pixel above and below the bar,\n // 1px falls on the existing split between grid/headers\n // so don't need to be accounnted for in math elsewhere\n let offset = 0;\n if (!interior) {\n offset = barHeight;\n }\n context.fillStyle = theme.headerBarCasingColor;\n context.fillRect(\n 0,\n model.columnHeaderMaxDepth * columnHeaderHeight - barHeight - 2 + offset,\n width,\n barHeight + 2\n );\n\n context.fillStyle = color;\n context.fillRect(\n 0,\n model.columnHeaderMaxDepth * columnHeaderHeight - barHeight - 1 + offset,\n width,\n barHeight\n );\n }\n\n drawColumnHeadersAtDepth(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n range: BoundedAxisRange,\n boundsProp: { minX: number; maxX: number },\n depth: number\n ): void {\n const { metrics, model, isMenuShown } = state;\n const { columnHeaderMaxDepth } = model;\n const { width } = metrics;\n const bounds = {\n ...boundsProp,\n maxX:\n depth === columnHeaderMaxDepth - 1 && boundsProp.maxX === width\n ? width - (isMenuShown ? 0 : 30) // Account for the menu button\n : boundsProp.maxX,\n };\n super.drawColumnHeadersAtDepth(context, state, range, bounds, depth);\n }\n\n drawColumnHeaderAtIndex(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n index: VisibleIndex,\n bounds: { minX: number; maxX: number }\n ): void {\n super.drawColumnHeaderAtIndex(context, state, index, bounds);\n const { metrics, model, theme } = state;\n const {\n modelColumns,\n allColumnWidths,\n allColumnXs,\n gridX,\n columnHeaderHeight,\n fontWidths,\n } = metrics;\n\n const { headerHorizontalPadding } = theme;\n const columnWidth = getOrThrow(allColumnWidths, index, 0);\n const columnX = getOrThrow(allColumnXs, index) + gridX;\n const modelColumn = modelColumns.get(index);\n\n if (modelColumn == null) {\n return;\n }\n\n const columnName = model.columns[modelColumn]?.name;\n\n if (columnName == null) {\n return;\n }\n\n const sort = TableUtils.getSortForColumn(model.sort, columnName);\n\n if (!sort) {\n return;\n }\n\n const icon = this.getSortIcon(sort);\n if (!icon) {\n return;\n }\n\n const text = model.textForColumnHeader(modelColumn);\n if (text === undefined) {\n return;\n }\n\n const fontWidth =\n fontWidths.get(context.font) ?? GridRenderer.DEFAULT_FONT_WIDTH;\n assertNotNull(fontWidth);\n const textWidth = text.length * fontWidth;\n const textRight = gridX + columnX + textWidth + headerHorizontalPadding;\n let { maxX } = bounds;\n maxX -= headerHorizontalPadding;\n const defaultX =\n gridX + columnX + columnWidth - headerHorizontalPadding - 1;\n\n const x = textRight > maxX ? textRight + 1 : Math.min(maxX, defaultX);\n const yOffset =\n sort.direction === TableUtils.sortDirection.ascending ? -6 : -12;\n const y = columnHeaderHeight * 0.5 + yOffset;\n\n context.save();\n\n context.beginPath();\n context.rect(columnX, 0, columnWidth, columnHeaderHeight);\n context.clip();\n\n context.fillStyle = theme.headerSortBarColor;\n context.translate(x, y);\n context.fill(icon);\n\n context.restore();\n }\n\n drawFilterHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { isFilterBarShown, quickFilters, advancedFilters } = state;\n\n if (isFilterBarShown) {\n this.drawExpandedFilterHeaders(context, state);\n } else if (\n (quickFilters != null && quickFilters.size > 0) ||\n (advancedFilters != null && advancedFilters.size > 0)\n ) {\n this.drawCollapsedFilterHeaders(context, state);\n }\n }\n\n drawExpandedFilterHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, theme, quickFilters, advancedFilters } = state;\n const { filterBarHeight } = theme;\n\n if (filterBarHeight <= 0) {\n return;\n }\n\n const {\n gridX,\n gridY,\n maxX,\n modelColumns,\n visibleColumns,\n allColumnWidths,\n allColumnXs,\n } = metrics;\n\n const columnHeaderHeight = gridY - filterBarHeight;\n\n context.save();\n\n context.font = theme.font;\n context.textAlign = 'left';\n\n if (\n (quickFilters != null && quickFilters.size > 0) ||\n (advancedFilters != null && advancedFilters.size > 0)\n ) {\n // fill style if a fiter is set on any column\n context.fillStyle = theme.filterBarExpandedActiveBackgroundColor;\n } else {\n // fill style with no filters set\n context.fillStyle = theme.filterBarExpandedBackgroundColor;\n }\n\n // Draw the background\n context.fillRect(gridX, columnHeaderHeight, maxX, filterBarHeight - 1);\n\n // Draw the bottom border\n context.fillStyle = theme.headerBarCasingColor;\n\n context.fillRect(gridX, columnHeaderHeight + filterBarHeight - 1, maxX, 1);\n\n // Draw the filter input boxes\n const y1 = columnHeaderHeight;\n context.strokeStyle = theme.filterBarSeparatorColor;\n context.beginPath();\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const modelColumn = getOrThrow(modelColumns, column);\n const columnX = getOrThrow(allColumnXs, column);\n const columnWidth = getOrThrow(allColumnWidths, column);\n if (model.isFilterable(modelColumn) && columnWidth > 0) {\n const x1 = gridX + (columnX ?? 0);\n context.rect(x1 + 0.5, y1 + 0.5, columnWidth, filterBarHeight - 2); // 1 for the border, 1 for the casing\n }\n }\n context.stroke();\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnWidth = getOrThrow(allColumnWidths, column);\n const columnX = getOrThrow(allColumnXs, column);\n const x = columnX + gridX;\n this.drawExpandedFilterHeader(context, state, column, x, columnWidth);\n }\n\n context.restore();\n }\n\n drawExpandedFilterHeader(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n column: VisibleIndex,\n columnX: Coordinate,\n columnWidth: number\n ): void {\n if (columnWidth <= 0) {\n return;\n }\n\n const { metrics, theme, quickFilters, advancedFilters } = state;\n const { modelColumns, gridY } = metrics;\n const {\n filterBarHeight,\n filterBarExpandedActiveCellBackgroundColor,\n filterBarErrorColor,\n filterBarHorizontalPadding,\n headerColor,\n } = theme;\n const columnHeaderHeight = gridY - filterBarHeight;\n const modelColumn = modelColumns.get(column);\n if (modelColumn === undefined) return;\n const quickFilter = quickFilters.get(modelColumn);\n const advancedFilter = advancedFilters.get(modelColumn);\n if (quickFilter == null && advancedFilter == null) {\n return;\n }\n\n let text = null;\n if (quickFilter != null) {\n const { text: filterText } = quickFilter;\n text = filterText;\n if (!text) {\n text = TableUtils.getFilterText(quickFilter.filter);\n }\n\n if (text != null) {\n const { fontWidths } = metrics;\n let fontWidth = fontWidths.get(context.font);\n if (fontWidth == null || fontWidth === 0) {\n fontWidth = context.measureText('8').width;\n if (!fontWidth) {\n fontWidth = 10;\n }\n }\n\n const maxLength =\n (columnWidth - filterBarHorizontalPadding * 2) / fontWidth;\n if (maxLength <= 0) {\n text = '';\n } else if (text.length > maxLength) {\n text = `${text.substring(0, maxLength - 1)}…`;\n }\n }\n }\n\n context.save();\n\n const isFilterValid = IrisGridRenderer.isFilterValid(\n advancedFilter,\n quickFilter\n );\n if (isFilterValid && filterBarExpandedActiveCellBackgroundColor != null) {\n // draw active filter background inside cell\n context.fillStyle = filterBarExpandedActiveCellBackgroundColor;\n context.fillRect(\n columnX + 1, // +1 left border\n columnHeaderHeight + 1, // +1 top border\n columnWidth - 1, // -1 right border\n filterBarHeight - 3 // -3 top, bottom border and bottom casing\n );\n } else if (filterBarErrorColor != null) {\n // draw error box inside cell\n context.fillStyle = filterBarErrorColor;\n context.lineWidth = 2;\n context.strokeStyle = filterBarErrorColor;\n // Because this is drawn with a strokeRect, we have to add/subtract half the,\n // linewidth from each side to make interior, in addition to accounting for any borders/casings\n const rectLeft = columnX + 2; // 1 for strokeRect, 1 for border\n const rectTop = columnHeaderHeight + 2; // 1 for strokeRect, 1 for border\n const rectWidth = columnWidth - 3; // for 2 border and 1 for strokeRect\n const rectHeight = filterBarHeight - 5; // -2 for strokeRect, -3 for top, bottom border and bottom casing\n context.strokeRect(rectLeft, rectTop, rectWidth, rectHeight);\n }\n\n if (text != null && text !== '') {\n const textX = columnX + filterBarHorizontalPadding;\n const textY = columnHeaderHeight + filterBarHeight * 0.5 + 1; // + 1 for border\n context.fillStyle = headerColor;\n context.fillText(text, textX, textY);\n }\n\n context.restore();\n }\n\n drawCollapsedFilterHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, theme } = state;\n const { headerSeparatorColor, filterBarCollapsedHeight } = theme;\n\n if (filterBarCollapsedHeight <= 0) {\n return;\n }\n\n const {\n gridX,\n gridY,\n maxX,\n visibleColumns,\n allColumnWidths,\n allColumnXs,\n } = metrics;\n const columnHeaderHeight = gridY - filterBarCollapsedHeight;\n\n context.save();\n\n // Draw the background of the collapsed filter bar\n context.fillStyle = headerSeparatorColor;\n context.fillRect(gridX, columnHeaderHeight, maxX, filterBarCollapsedHeight);\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnWidth = allColumnWidths.get(column);\n const columnX = allColumnXs.get(column);\n if (columnX != null && columnWidth != null) {\n const x = columnX + gridX;\n // draw the collapsed cells\n this.drawCollapsedFilterHeader(context, state, column, x, columnWidth);\n }\n }\n\n context.restore();\n }\n\n drawCollapsedFilterHeader(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n column: VisibleIndex,\n columnX: Coordinate,\n columnWidth: number\n ): void {\n if (columnWidth <= 0) {\n return;\n }\n\n const { metrics, theme, quickFilters, advancedFilters } = state;\n const { modelColumns, gridY } = metrics;\n const modelColumn = modelColumns.get(column);\n\n if (modelColumn === undefined) return;\n const quickFilter = quickFilters.get(modelColumn);\n const advancedFilter = advancedFilters.get(modelColumn);\n\n const {\n filterBarCollapsedHeight,\n filterBarActiveColor,\n filterBarActiveBackgroundColor,\n filterBarErrorColor,\n } = theme;\n\n context.save();\n\n const isFilterValid = IrisGridRenderer.isFilterValid(\n advancedFilter,\n quickFilter\n );\n\n if (\n filterBarActiveBackgroundColor != null &&\n quickFilter == null &&\n advancedFilter == null\n ) {\n context.fillStyle = filterBarActiveBackgroundColor;\n } else if (filterBarActiveColor != null && isFilterValid) {\n context.fillStyle = filterBarActiveColor;\n } else if (filterBarErrorColor != null) {\n context.fillStyle = filterBarErrorColor;\n }\n\n const x = columnX + 1; // for gap between columns\n const y = gridY - filterBarCollapsedHeight;\n const rectWidth = columnWidth - 1; // for gap between columns\n const rectHeight = filterBarCollapsedHeight - 1; // for casing bottom\n context.fillRect(x, y, rectWidth, rectHeight);\n\n context.restore();\n }\n\n drawTreeMarker(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n columnX: Coordinate,\n rowY: Coordinate,\n treeBox: BoxCoordinates,\n color: string,\n isExpanded: boolean\n ): void {\n context.save();\n const { x1, y1 } = treeBox;\n const markerIcon = isExpanded\n ? this.getIcon(ICON_NAMES.CARET_DOWN)\n : this.getIcon(ICON_NAMES.CARET_RIGHT);\n const iconX = columnX + x1 - 2;\n const iconY = rowY + y1 + 2.5;\n\n context.fillStyle = color;\n context.textAlign = 'center';\n context.translate(iconX, iconY);\n context.fill(markerIcon);\n context.restore();\n }\n\n drawRowFooters(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, mouseX, mouseY, theme } = state;\n const {\n gridY,\n gridX,\n maxX,\n modelRows,\n floatingTopHeight,\n floatingBottomHeight,\n floatingRows,\n rowFooterWidth,\n height,\n horizontalBarHeight,\n verticalBarWidth,\n allRowHeights,\n allRowYs,\n width,\n } = metrics;\n // Only draw the footers on the floating rows\n if (rowFooterWidth <= 0 || floatingRows.length === 0) {\n return;\n }\n\n const {\n cellHorizontalPadding,\n floatingGridRowColor,\n floatingRowBackgroundColors,\n headerColor,\n rowHoverBackgroundColor,\n } = theme;\n\n context.translate(gridX, gridY);\n\n context.beginPath();\n const x = Math.min(maxX, width - rowFooterWidth - verticalBarWidth - gridX);\n context.fillStyle = floatingRowBackgroundColors;\n if (floatingTopHeight > 0) {\n context.rect(x, 0, rowFooterWidth, floatingTopHeight);\n }\n if (floatingBottomHeight > 0) {\n context.rect(\n x,\n height - gridY - horizontalBarHeight - floatingBottomHeight,\n rowFooterWidth,\n floatingBottomHeight\n );\n }\n context.fill();\n\n const mouseRow =\n mouseX != null &&\n mouseY != null &&\n mouseX >= gridX &&\n mouseX <= maxX + rowFooterWidth\n ? GridUtils.getRowAtY(mouseY, metrics)\n : null;\n if (\n rowHoverBackgroundColor != null &&\n mouseRow !== null &&\n floatingRows.includes(mouseRow)\n ) {\n context.fillStyle = rowHoverBackgroundColor;\n const y = allRowYs.get(mouseRow);\n const rowHeight = allRowHeights.get(mouseRow);\n assertNotNull(y);\n assertNotNull(rowHeight);\n context.fillRect(x, y, rowFooterWidth, rowHeight);\n }\n\n context.beginPath();\n if (floatingGridRowColor != null) {\n context.strokeStyle = floatingGridRowColor;\n }\n if (floatingTopHeight > 0) {\n context.moveTo(x + 0.5, 0.5);\n context.lineTo(x + 0.5, floatingTopHeight - 0.5);\n }\n if (floatingBottomHeight > 0) {\n const y = height - gridY - horizontalBarHeight - floatingBottomHeight;\n context.moveTo(x - 0.5, y + 0.5);\n context.lineTo(x - 0.5, y + floatingBottomHeight - 0.5);\n }\n context.stroke();\n\n context.fillStyle = headerColor;\n context.textAlign = 'left';\n\n const textX = x + cellHorizontalPadding;\n for (let i = 0; i < floatingRows.length; i += 1) {\n const row = floatingRows[i];\n const rowHeight = allRowHeights.get(row);\n const rowY = allRowYs.get(row);\n const modelRow = modelRows.get(row);\n if (rowY != null && rowHeight != null && modelRow != null) {\n const textY = rowY + rowHeight * 0.5;\n context.fillText(model.textForRowFooter(modelRow), textX, textY);\n }\n }\n\n context.translate(-gridX, -gridY);\n }\n\n // This will shrink the size the text may take when the overflow button is rendered\n // The text will truncate to a smaller width and won't overlap the button\n getTextRenderMetrics(\n state: IrisGridRenderState,\n column: VisibleIndex,\n row: VisibleIndex\n ): {\n width: number;\n x: Coordinate;\n y: Coordinate;\n } {\n const textMetrics = super.getTextRenderMetrics(state, column, row);\n\n const { mouseX, mouseY, metrics } = state;\n\n if (mouseX == null || mouseY == null) {\n return textMetrics;\n }\n\n const { column: mouseColumn, row: mouseRow } = GridUtils.getGridPointFromXY(\n mouseX,\n mouseY,\n metrics\n );\n\n if (column === mouseColumn && row === mouseRow) {\n const { left } = this.getCellOverflowButtonPosition(state);\n if (this.shouldRenderOverflowButton(state) && left != null) {\n textMetrics.width = left - metrics.gridX - textMetrics.x;\n }\n }\n return textMetrics;\n }\n\n shouldRenderOverflowButton(state: IrisGridRenderState): boolean {\n const { context, mouseX, mouseY, metrics, model, theme } = state;\n if (mouseX == null || mouseY == null) {\n return false;\n }\n\n const { row, column, modelRow, modelColumn } = GridUtils.getCellInfoFromXY(\n mouseX,\n mouseY,\n metrics\n );\n\n if (\n row == null ||\n column == null ||\n modelRow == null ||\n modelColumn == null ||\n !TableUtils.isStringType(model.columns[modelColumn].type)\n ) {\n return false;\n }\n\n const text = model.textForCell(modelColumn, modelRow) ?? '';\n const { width: textWidth } = super.getTextRenderMetrics(state, column, row);\n const fontWidth =\n metrics.fontWidths.get(theme.font) ?? IrisGridRenderer.DEFAULT_FONT_WIDTH;\n\n context.save();\n context.font = theme.font;\n\n const truncatedText = this.getCachedTruncatedString(\n context,\n text,\n textWidth,\n fontWidth,\n model.truncationCharForCell(modelColumn, modelRow)\n );\n context.restore();\n\n return text !== '' && truncatedText !== text;\n }\n\n getCellOverflowButtonPosition({\n mouseX,\n mouseY,\n metrics,\n theme,\n }: {\n mouseX: Coordinate | null;\n mouseY: Coordinate | null;\n metrics: GridMetrics | undefined;\n theme: GridThemeType;\n }): {\n left: Coordinate | null;\n top: Coordinate | null;\n width: number | null;\n height: number | null;\n } {\n const NULL_POSITION = { left: null, top: null, width: null, height: null };\n if (mouseX == null || mouseY == null || !metrics) {\n return NULL_POSITION;\n }\n const { rowHeight, columnWidth, left, top } = GridUtils.getCellInfoFromXY(\n mouseX,\n mouseY,\n metrics\n );\n\n assertNotNull(left);\n assertNotNull(columnWidth);\n assertNotNull(top);\n const { width: gridWidth, verticalBarWidth } = metrics;\n const { cellHorizontalPadding } = theme;\n\n const width = ICON_SIZE + 2 * cellHorizontalPadding;\n const height = rowHeight;\n // Right edge of column or of visible grid, whichever is smaller\n const right = Math.min(\n metrics.gridX + left + columnWidth,\n gridWidth - verticalBarWidth\n );\n const buttonLeft = right - width;\n const buttonTop = metrics.gridY + top;\n\n return { left: buttonLeft, top: buttonTop, width, height };\n }\n\n drawCellOverflowButton(state: IrisGridRenderState): void {\n const { context, mouseX, mouseY, theme } = state;\n if (mouseX == null || mouseY == null) return;\n\n if (!this.shouldRenderOverflowButton(state)) {\n return;\n }\n\n const {\n left: buttonLeft,\n top: buttonTop,\n width: buttonWidth,\n height: buttonHeight,\n } = this.getCellOverflowButtonPosition(state);\n\n const {\n cellHorizontalPadding,\n overflowButtonColor,\n overflowButtonHoverColor,\n } = theme;\n\n context.save();\n if (\n overflowButtonHoverColor != null &&\n buttonLeft != null &&\n buttonWidth != null &&\n buttonTop != null &&\n buttonHeight != null &&\n mouseX >= buttonLeft &&\n mouseX <= buttonLeft + buttonWidth &&\n mouseY >= buttonTop &&\n mouseY <= buttonTop + buttonHeight\n ) {\n context.fillStyle = overflowButtonHoverColor;\n } else if (overflowButtonColor != null) {\n context.fillStyle = overflowButtonColor;\n }\n const icon = this.getIcon(ICON_NAMES.CELL_OVERFLOW);\n if (buttonLeft != null && buttonTop != null) {\n context.translate(buttonLeft + cellHorizontalPadding, buttonTop + 2);\n }\n context.fill(icon);\n\n context.restore();\n }\n\n getExpandButtonPosition(\n {\n mouseX,\n mouseY,\n metrics,\n theme,\n }: {\n mouseX: Coordinate | null;\n mouseY: Coordinate | null;\n metrics: GridMetrics | undefined;\n theme: GridThemeType;\n },\n depth: number | null\n ): {\n left: Coordinate | null;\n top: Coordinate | null;\n width: number | null;\n height: number | null;\n } {\n const NULL_POSITION = { left: null, top: null, width: null, height: null };\n if (mouseX == null || mouseY == null || depth == null || !metrics) {\n return NULL_POSITION;\n }\n const { rowHeight, left, top } = GridUtils.getCellInfoFromXY(\n mouseX,\n mouseY,\n metrics\n );\n\n assertNotNull(left);\n assertNotNull(rowHeight);\n assertNotNull(top);\n const { cellHorizontalPadding } = theme;\n\n const width = EXPAND_ICON_SIZE + 2 * cellHorizontalPadding;\n\n const buttonLeft = Math.max(left + EXPAND_ICON_SIZE * depth, metrics.gridX);\n const buttonTop = metrics.gridY + top;\n\n return {\n left: buttonLeft,\n top: buttonTop,\n width,\n height: rowHeight,\n };\n }\n}\n\nexport default IrisGridRenderer;\n"],"mappings":";;;;;AAAA;AACA;AACA;AACA,SACEA,UAAU,EACVC,QAAQ,EACRC,cAAc,EACdC,eAAe,EACfC,cAAc,QAET,kBAAkB;AACzB,SAMEC,YAAY,EAGZC,SAAS,QAEJ,iBAAiB;AAExB,SAASC,UAAU,QAAqB,wBAAwB;AAChE,SAASC,aAAa,EAAEC,UAAU,QAAQ,kBAAkB;AAU5D,IAAMC,UAAU,GAAGC,MAAM,CAACC,MAAM,CAAC;EAC/BC,OAAO,EAAE,QAAQ;EACjBC,SAAS,EAAE,UAAU;EACrBC,UAAU,EAAE,WAAW;EACvBC,WAAW,EAAE,YAAY;EACzBC,aAAa,EAAE;AACjB,CAAC,CAAC;AAEF,IAAMC,gBAAgB,GAAG,EAAE;AAC3B,IAAMC,SAAS,GAAG,EAAE;AAcpB;AACA;AACA;AACA,MAAMC,gBAAgB,SAASf,YAAY,CAAC;EAC1C,OAAOgB,aAAa,CAClBC,cAAiD,EACjDC,WAA2C,EAClC;IACT,IAAMC,qBAAqB,GACzBF,cAAc,IAAI,IAAI,IAAIA,cAAc,CAACG,MAAM,IAAI,IAAI;IACzD,IAAMC,kBAAkB,GACtBH,WAAW,IAAI,IAAI,IAAIA,WAAW,CAACE,MAAM,IAAI,IAAI;IACnD,OAAOD,qBAAqB,IAAIE,kBAAkB;EACpD;EAEAC,WAAW,GAAG;IACZ,KAAK,EAAE;IAAC;IACR,IAAI,CAACC,KAAK,GAAG,CAAC,CAAC;IAEf,IAAI,CAACC,SAAS,EAAE;EAClB;EAIAA,SAAS,GAAS;IAChB,IAAI,CAACC,OAAO,CAACpB,UAAU,CAACG,OAAO,EAAEZ,QAAQ,CAAC;IAC1C,IAAI,CAAC6B,OAAO,CAACpB,UAAU,CAACI,SAAS,EAAEd,UAAU,CAAC;IAC9C,IAAI,CAAC8B,OAAO,CAACpB,UAAU,CAACK,UAAU,EAAEb,cAAc,CAAC;IACnD,IAAI,CAAC4B,OAAO,CAACpB,UAAU,CAACM,WAAW,EAAEb,eAAe,CAAC;IACrD,IAAI,CAAC2B,OAAO,CAACpB,UAAU,CAACO,aAAa,EAAEb,cAAc,CAAC;EACxD;;EAEA;EACA0B,OAAO,CAACC,IAAY,EAAEC,MAAsB,EAAQ;IAClD,IAAMC,IAAI,GAAGC,KAAK,CAACC,OAAO,CAACH,MAAM,CAACI,IAAI,CAAC,CAAC,CAAC,CAAC,GACtCJ,MAAM,CAACI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBJ,MAAM,CAACI,IAAI,CAAC,CAAC,CAAC;IAClB,IAAMA,IAAI,GAAG,IAAIC,MAAM,CAACJ,IAAI,CAAC;IAC7B,IAAMK,UAAU,GAAG,IAAID,MAAM,EAAE;IAC/B,IAAME,WAAW,GAAG;MAClBC,CAAC,EAAErB,SAAS,GAAGa,MAAM,CAACI,IAAI,CAAC,CAAC,CAAC;MAC7BK,CAAC,EAAEtB,SAAS,GAAGa,MAAM,CAACI,IAAI,CAAC,CAAC;IAC9B,CAAC;IACDE,UAAU,CAACI,OAAO,CAACN,IAAI,EAAEG,WAAW,CAAC;IACrC,IAAI,CAACX,KAAK,CAACG,IAAI,CAAC,GAAGO,UAAU;EAC/B;EAEAK,OAAO,CAACZ,IAAY,EAAU;IAC5B,OAAO,IAAI,CAACH,KAAK,CAACG,IAAI,CAAC;EACzB;EAEAa,WAAW,CAACC,IAAiB,EAAiB;IAC5C,IAAI,CAACA,IAAI,EAAE;MACT,OAAO,IAAI;IACb;IACA,IAAIA,IAAI,CAACC,SAAS,KAAKvC,UAAU,CAACwC,aAAa,CAACC,SAAS,EAAE;MACzD,OAAO,IAAI,CAACL,OAAO,CAACjC,UAAU,CAACG,OAAO,CAAC;IACzC;IACA,IAAIgC,IAAI,CAACC,SAAS,KAAKvC,UAAU,CAACwC,aAAa,CAACE,UAAU,EAAE;MAC1D,OAAO,IAAI,CAACN,OAAO,CAACjC,UAAU,CAACI,SAAS,CAAC;IAC3C;IACA,OAAO,IAAI;EACb;EAEAoC,UAAU,CAACC,KAA0B,EAAQ;IAC3C,KAAK,CAACD,UAAU,CAACC,KAAK,CAAC;IAEvB,IAAI,CAACC,SAAS,CAACD,KAAK,CAAC;EACvB;EAEAE,QAAQ,CACNC,OAAiC,EACjCH,KAA0B,EACpB;IACN,KAAK,CAACE,QAAQ,CAACC,OAAO,EAAEH,KAAK,CAAC;IAC9B,IAAI,CAACI,sBAAsB,CAACJ,KAAK,CAAC;EACpC;EAEAK,aAAa,CACXF,OAAiC,EACjCH,KAA0B,EACpB;IACN,KAAK,CAACK,aAAa,CAACF,OAAO,EAAEH,KAAK,CAAC;IAEnC,IAAI,CAACM,qBAAqB,CAACH,OAAO,EAAEH,KAAK,CAAC;IAE1C,IAAI,CAACO,kBAAkB,CAACJ,OAAO,EAAEH,KAAK,CAAC;EACzC;EAEAQ,eAAe,CACbL,OAAiC,EACjCH,KAA0B,EAC1BS,MAAoB,EACpBC,GAAiB,EACX;IAAA;IACN,IAAM;MAAEC,OAAO;MAAEC;IAAM,CAAC,GAAGZ,KAAK;IAChC,IAAM;MAAEa,YAAY;MAAEC;IAAU,CAAC,GAAGH,OAAO;IAC3C,IAAMI,QAAQ,GAAGzD,UAAU,CAACwD,SAAS,EAAEJ,GAAG,CAAC;IAC3C,IAAMM,WAAW,GAAGH,YAAY,CAACI,GAAG,CAACR,MAAM,CAAC;IAC5C,IAAIO,WAAW,KAAKE,SAAS,EAAE;MAC7B;IACF;IACA,IAAMC,KAAK,GAAGP,KAAK,CAACQ,YAAY,CAACJ,WAAW,EAAED,QAAQ,CAAC;IACvD,IAAI3D,UAAU,CAACiE,UAAU,0BAACT,KAAK,CAACU,OAAO,CAACN,WAAW,CAAC,0DAA1B,sBAA4BO,IAAI,CAAC,EAAE;MAC3D,IAAIJ,KAAK,KAAK,IAAI,IAAIA,KAAK,KAAK,EAAE,EAAE;QAClC,IAAMK,YAAY,GAAGrB,OAAO,CAACsB,IAAI;QACjCtB,OAAO,CAACsB,IAAI,oBAAaD,YAAY,CAAE;QACvC,IAAME,YAAY,GAAGP,KAAK,KAAK,IAAI,GAAG,MAAM,GAAG,OAAO;QACtD,KAAK,CAACX,eAAe,CAACL,OAAO,EAAEH,KAAK,EAAES,MAAM,EAAEC,GAAG,EAAEgB,YAAY,CAAC;QAChEvB,OAAO,CAACsB,IAAI,GAAGD,YAAY;QAC3B;MACF;IACF;IACA,KAAK,CAAChB,eAAe,CAACL,OAAO,EAAEH,KAAK,EAAES,MAAM,EAAEC,GAAG,CAAC;EACpD;EAEAJ,qBAAqB,CACnBH,OAAiC,EACjCH,KAA0B,EACpB;IACN,IAAM;MAAEW,OAAO;MAAEC,KAAK;MAAEe;IAAM,CAAC,GAAG3B,KAAK;IACvC,IAAM;MAAE4B;IAAe,CAAC,GAAGhB,KAAK;IAChC,IAAM;MAAEiB,IAAI;MAAEC,eAAe;MAAEC;IAAY,CAAC,GAAGpB,OAAO;IACtD,IACEiB,cAAc,CAACI,MAAM,KAAK,CAAC,IAC3BL,KAAK,CAACM,yBAAyB,IAAI,IAAI,EACvC;MACA;IACF;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA,IAAMC,2BAA2B,GAAGN,cAAc,CAACI,MAAM,GAAG,CAAC;IAE7D,IAAMG,OAAO,GAAGJ,WAAW,CAACd,GAAG,CAACiB,2BAA2B,CAAC;IAC5D,IAAME,WAAW,GAAGN,eAAe,CAACb,GAAG,CAACiB,2BAA2B,CAAC;IACpE,IAAIC,OAAO,IAAI,IAAI,IAAIC,WAAW,IAAI,IAAI,EAAE;MAC1C;IACF;IAEA,IAAMC,CAAC,GAAGF,OAAO,GAAGC,WAAW,GAAG,GAAG;IAErCjC,OAAO,CAACmC,WAAW,GAAGX,KAAK,CAACM,yBAAyB;IACrD9B,OAAO,CAACoC,SAAS,GAAG,CAAC;IACrBpC,OAAO,CAACqC,SAAS,EAAE;IACnBrC,OAAO,CAACsC,MAAM,CAACJ,CAAC,EAAE,CAAC,CAAC;IACpBlC,OAAO,CAACuC,MAAM,CAACL,CAAC,EAAER,IAAI,CAAC;IACvB1B,OAAO,CAACwC,MAAM,EAAE;EAClB;EAEApC,kBAAkB,CAChBJ,OAAiC,EACjCH,KAA0B,EACpB;IACN,IAAM;MAAEW,OAAO;MAAEC,KAAK;MAAEe;IAAM,CAAC,GAAG3B,KAAK;IACvC,IAAM;MAAE4C,QAAQ;MAAEC;IAAK,CAAC,GAAGlC,OAAO;IAClC,IAAM;MAAEmC;IAAgB,CAAC,GAAGlC,KAAK;IACjC,IAAIkC,eAAe,IAAI,CAAC,EAAE;MACxB;IACF;IAEA,IAAMC,eAAe,GACnBnC,KAAK,CAACoC,QAAQ,GAAGpC,KAAK,CAACkC,eAAe,GAAGlC,KAAK,CAACqC,sBAAsB;IACvE,IAAIC,CAAC,GAAGN,QAAQ,CAAC3B,GAAG,CAAC8B,eAAe,CAAC;IACrC,IAAIG,CAAC,IAAI,IAAI,EAAE;MACb;IACF;IAEAA,CAAC,IAAI,GAAG;IACR/C,OAAO,CAACgD,IAAI,EAAE;IACdhD,OAAO,CAACiD,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3BjD,OAAO,CAACmC,WAAW,GAAGX,KAAK,CAAC0B,gBAAgB;IAE5ClD,OAAO,CAACoC,SAAS,GAAG,CAAC;IACrBpC,OAAO,CAACqC,SAAS,EAAE;IACnBrC,OAAO,CAACsC,MAAM,CAAC,CAAC,EAAES,CAAC,CAAC;IACpB/C,OAAO,CAACuC,MAAM,CAACG,IAAI,EAAEK,CAAC,CAAC;IACvB/C,OAAO,CAACwC,MAAM,EAAE;IAChBxC,OAAO,CAACmD,OAAO,EAAE;EACnB;EAEAC,oBAAoB,CAClBpD,OAAiC,EACjCH,KAA0B,EACpB;IACN,IAAM;MAAE2B,KAAK;MAAEhB,OAAO;MAAE6C;IAAkB,CAAC,GAAGxD,KAAK;IACnD,IACEwD,iBAAiB,IAAI,IAAI,IACzB7B,KAAK,CAAC8B,gCAAgC,IAAI,IAAI,EAC9C;MACA;IACF;IAEA,IAAM;MAAE3B,eAAe;MAAEC,WAAW;MAAEF;IAAK,CAAC,GAAGlB,OAAO;IAEtD,IAAM0B,CAAC,GAAG/E,UAAU,CAACyE,WAAW,EAAEyB,iBAAiB,CAAC;IACpD,IAAMpB,WAAW,GAAG9E,UAAU,CAACwE,eAAe,EAAE0B,iBAAiB,CAAC;IAElErD,OAAO,CAACuD,SAAS,GAAG/B,KAAK,CAAC8B,gCAAgC;IAC1DtD,OAAO,CAACwD,QAAQ,CAACtB,CAAC,EAAE,CAAC,EAAED,WAAW,EAAEP,IAAI,CAAC;EAC3C;EAEA+B,iBAAiB,CACfzD,OAAiC,EACjCH,KAA0B,EACpB;IACN,IAAM;MAAE6D;IAAkB,CAAC,GAAG7D,KAAK;IACnC,IAAI,CAAC6D,iBAAiB,EAAE;MACtB,KAAK,CAACD,iBAAiB,CAACzD,OAAO,EAAEH,KAAK,CAAC;IACzC;EACF;EAEAC,SAAS,CAACD,KAA0B,EAAQ;IAC1C,IAAM;MAAEG,OAAO;MAAE2D,oBAAoB;MAAEnD,OAAO;MAAEgB;IAAM,CAAC,GAAG3B,KAAK;IAC/D,IAAI8D,oBAAoB,IAAI,IAAI,EAAE;MAChC;IACF;IAEA,IAAM;MAAEC,KAAK;MAAEC,MAAM;MAAEC;IAAM,CAAC,GAAGtD,OAAO;IACxC,IAAM;MAAEuD,aAAa;MAAEC;IAAW,CAAC,GAAGxC,KAAK;IAE3CxB,OAAO,CAACgD,IAAI,EAAE;;IAEd;IACAhD,OAAO,CAACiE,wBAAwB,GAAG,OAAO;IAC1CjE,OAAO,CAAC7B,MAAM,kBAAW4F,aAAa,QAAK;IAC3C,IAAIC,UAAU,IAAI,IAAI,EAAE;MACtBhE,OAAO,CAACuD,SAAS,GAAGS,UAAU;IAChC;;IAEA;IACAhE,OAAO,CAACqC,SAAS,EAAE;IACnBrC,OAAO,CAACkE,IAAI,CAAC,CAAC,EAAEJ,KAAK,EAAEF,KAAK,EAAEC,MAAM,GAAGC,KAAK,CAAC;IAC7C9D,OAAO,CAACmE,IAAI,EAAE;;IAEd;IACAnE,OAAO,CAACwD,QAAQ,CACd,CAACO,aAAa,EACd,CAACA,aAAa,GAAGD,KAAK,EACtBC,aAAa,GAAG,CAAC,GAAGH,KAAK,EACzB,CAACG,aAAa,GAAG,CAAC,IAAIF,MAAM,GAAGC,KAAK,CAAC,IAAIH,oBAAoB,CAC9D;;IAED;IACA3D,OAAO,CAACiE,wBAAwB,GAAG,SAAS;IAC5CjE,OAAO,CAAC7B,MAAM,kBAAW4F,aAAa,qBAAkB;IACxD/D,OAAO,CAACwD,QAAQ,CACd,CAACO,aAAa,EACd,CAACA,aAAa,GAAGD,KAAK,EACtBC,aAAa,GAAG,CAAC,GAAGH,KAAK,EACzB,CAACG,aAAa,GAAG,CAAC,IAAIF,MAAM,GAAGC,KAAK,CAAC,IAAIH,oBAAoB,CAC9D;IAED3D,OAAO,CAACmD,OAAO,EAAE;EACnB;EAEAiB,iBAAiB,CACfpE,OAAiC,EACjCH,KAA0B,EACpB;IACN,KAAK,CAACuE,iBAAiB,CAACpE,OAAO,EAAEH,KAAK,CAAC;IAEvC,IAAM;MAAE2B,KAAK;MAAEhB,OAAO;MAAEC,KAAK;MAAE4D;IAAY,CAAC,GAAGxE,KAAK;IACpD,IAAM;MAAEyE;IAAmB,CAAC,GAAG9D,OAAO;IAEtC,IAAI,CAAC+D,iBAAiB,CAACvE,OAAO,EAAEH,KAAK,CAAC;IAEtC,IAAIyE,kBAAkB,IAAI,CAAC,EAAE;MAC3B;IACF;IAEA,IAAM;MAAE/E;IAAK,CAAC,GAAGkB,KAAK;IACtB;IACA,IAAIlB,IAAI,CAACsC,MAAM,KAAK,CAAC,EAAE;MACrB,IAAM2C,UAAU,GAAGH,WAAW,KAAKpH,UAAU,CAACwH,YAAY,CAACC,IAAI;MAE/D,IAAIC,KAAK;MACT,IAAIH,UAAU,EAAE;QACdG,KAAK,GAAGnD,KAAK,CAACoD,qBAAqB;MACrC,CAAC,MAAM;QACLD,KAAK,GAAGnD,KAAK,CAACqD,kBAAkB;MAClC;MACA,IAAI,CAACC,aAAa,CAChB9E,OAAO,EACPH,KAAK,EACL8E,KAAK,EACLH,UAAU,GAAGhD,KAAK,CAACuD,sBAAsB,GAAGvD,KAAK,CAACwD,mBAAmB,CACtE;IACH,CAAC,MAAM,IAAIzF,IAAI,CAACsC,MAAM,GAAG,CAAC,EAAE;MAC1B;MACA;MACA;MACE;MACAwC,WAAW,KAAKpH,UAAU,CAACwH,YAAY,CAACC,IAAI,EAC5C;QACA,IAAI,CAACI,aAAa,CAChB9E,OAAO,EACPH,KAAK,EACL2B,KAAK,CAACoD,qBAAqB,EAC3BpD,KAAK,CAACuD,sBAAsB,EAC5B,KAAK,CACN;MACH;MACA,IAAI,CAACD,aAAa,CAChB9E,OAAO,EACPH,KAAK,EACL2B,KAAK,CAACqD,kBAAkB,EACxBrD,KAAK,CAACwD,mBAAmB,CAC1B;IACH;EACF;EAEAF,aAAa,CACX9E,OAAiC,EACjCH,KAA0B,EAC1B8E,KAA8C,EAC9CM,SAAiB,EAEX;IAAA,IADNC,QAAQ,uEAAG,IAAI;IAEf,IAAM;MAAE1D,KAAK;MAAEhB,OAAO;MAAEC;IAAM,CAAC,GAAGZ,KAAK;IACvC,IAAM;MAAEyE,kBAAkB;MAAEV;IAAM,CAAC,GAAGpD,OAAO;IAC7C;IACA;IACA;IACA,IAAI2E,MAAM,GAAG,CAAC;IACd,IAAI,CAACD,QAAQ,EAAE;MACbC,MAAM,GAAGF,SAAS;IACpB;IACAjF,OAAO,CAACuD,SAAS,GAAG/B,KAAK,CAAC4D,oBAAoB;IAC9CpF,OAAO,CAACwD,QAAQ,CACd,CAAC,EACD/C,KAAK,CAAC4E,oBAAoB,GAAGf,kBAAkB,GAAGW,SAAS,GAAG,CAAC,GAAGE,MAAM,EACxEvB,KAAK,EACLqB,SAAS,GAAG,CAAC,CACd;IAEDjF,OAAO,CAACuD,SAAS,GAAGoB,KAAK;IACzB3E,OAAO,CAACwD,QAAQ,CACd,CAAC,EACD/C,KAAK,CAAC4E,oBAAoB,GAAGf,kBAAkB,GAAGW,SAAS,GAAG,CAAC,GAAGE,MAAM,EACxEvB,KAAK,EACLqB,SAAS,CACV;EACH;EAEAK,wBAAwB,CACtBtF,OAAiC,EACjCH,KAA0B,EAC1B0F,KAAuB,EACvBC,UAA0C,EAC1CC,KAAa,EACP;IACN,IAAM;MAAEjF,OAAO;MAAEC,KAAK;MAAEiF;IAAY,CAAC,GAAG7F,KAAK;IAC7C,IAAM;MAAEwF;IAAqB,CAAC,GAAG5E,KAAK;IACtC,IAAM;MAAEmD;IAAM,CAAC,GAAGpD,OAAO;IACzB,IAAMmF,MAAM,mCACPH,UAAU;MACb9C,IAAI,EACF+C,KAAK,KAAKJ,oBAAoB,GAAG,CAAC,IAAIG,UAAU,CAAC9C,IAAI,KAAKkB,KAAK,GAC3DA,KAAK,IAAI8B,WAAW,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;MAAA,EAC/BF,UAAU,CAAC9C;IAAI,EACtB;IACD,KAAK,CAAC4C,wBAAwB,CAACtF,OAAO,EAAEH,KAAK,EAAE0F,KAAK,EAAEI,MAAM,EAAEF,KAAK,CAAC;EACtE;EAEAG,uBAAuB,CACrB5F,OAAiC,EACjCH,KAA0B,EAC1BgG,KAAmB,EACnBF,MAAsC,EAChC;IAAA;IACN,KAAK,CAACC,uBAAuB,CAAC5F,OAAO,EAAEH,KAAK,EAAEgG,KAAK,EAAEF,MAAM,CAAC;IAC5D,IAAM;MAAEnF,OAAO;MAAEC,KAAK;MAAEe;IAAM,CAAC,GAAG3B,KAAK;IACvC,IAAM;MACJa,YAAY;MACZiB,eAAe;MACfC,WAAW;MACXkE,KAAK;MACLxB,kBAAkB;MAClByB;IACF,CAAC,GAAGvF,OAAO;IAEX,IAAM;MAAEwF;IAAwB,CAAC,GAAGxE,KAAK;IACzC,IAAMS,WAAW,GAAG9E,UAAU,CAACwE,eAAe,EAAEkE,KAAK,EAAE,CAAC,CAAC;IACzD,IAAM7D,OAAO,GAAG7E,UAAU,CAACyE,WAAW,EAAEiE,KAAK,CAAC,GAAGC,KAAK;IACtD,IAAMjF,WAAW,GAAGH,YAAY,CAACI,GAAG,CAAC+E,KAAK,CAAC;IAE3C,IAAIhF,WAAW,IAAI,IAAI,EAAE;MACvB;IACF;IAEA,IAAMoF,UAAU,6BAAGxF,KAAK,CAACU,OAAO,CAACN,WAAW,CAAC,2DAA1B,uBAA4BpC,IAAI;IAEnD,IAAIwH,UAAU,IAAI,IAAI,EAAE;MACtB;IACF;IAEA,IAAM1G,IAAI,GAAGtC,UAAU,CAACiJ,gBAAgB,CAACzF,KAAK,CAAClB,IAAI,EAAE0G,UAAU,CAAC;IAEhE,IAAI,CAAC1G,IAAI,EAAE;MACT;IACF;IAEA,IAAMT,IAAI,GAAG,IAAI,CAACQ,WAAW,CAACC,IAAI,CAAC;IACnC,IAAI,CAACT,IAAI,EAAE;MACT;IACF;IAEA,IAAMqH,IAAI,GAAG1F,KAAK,CAAC2F,mBAAmB,CAACvF,WAAW,CAAC;IACnD,IAAIsF,IAAI,KAAKpF,SAAS,EAAE;MACtB;IACF;IAEA,IAAMsF,SAAS,sBACbN,UAAU,CAACjF,GAAG,CAACd,OAAO,CAACsB,IAAI,CAAC,6DAAIvE,YAAY,CAACuJ,kBAAkB;IACjEpJ,aAAa,CAACmJ,SAAS,CAAC;IACxB,IAAME,SAAS,GAAGJ,IAAI,CAACtE,MAAM,GAAGwE,SAAS;IACzC,IAAMG,SAAS,GAAGV,KAAK,GAAG9D,OAAO,GAAGuE,SAAS,GAAGP,uBAAuB;IACvE,IAAI;MAAEtD;IAAK,CAAC,GAAGiD,MAAM;IACrBjD,IAAI,IAAIsD,uBAAuB;IAC/B,IAAMS,QAAQ,GACZX,KAAK,GAAG9D,OAAO,GAAGC,WAAW,GAAG+D,uBAAuB,GAAG,CAAC;IAE7D,IAAM9D,CAAC,GAAGsE,SAAS,GAAG9D,IAAI,GAAG8D,SAAS,GAAG,CAAC,GAAGE,IAAI,CAACC,GAAG,CAACjE,IAAI,EAAE+D,QAAQ,CAAC;IACrE,IAAMG,OAAO,GACXrH,IAAI,CAACC,SAAS,KAAKvC,UAAU,CAACwC,aAAa,CAACC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE;IAClE,IAAMqD,CAAC,GAAGuB,kBAAkB,GAAG,GAAG,GAAGsC,OAAO;IAE5C5G,OAAO,CAACgD,IAAI,EAAE;IAEdhD,OAAO,CAACqC,SAAS,EAAE;IACnBrC,OAAO,CAACkE,IAAI,CAAClC,OAAO,EAAE,CAAC,EAAEC,WAAW,EAAEqC,kBAAkB,CAAC;IACzDtE,OAAO,CAACmE,IAAI,EAAE;IAEdnE,OAAO,CAACuD,SAAS,GAAG/B,KAAK,CAACqD,kBAAkB;IAC5C7E,OAAO,CAAC6G,SAAS,CAAC3E,CAAC,EAAEa,CAAC,CAAC;IACvB/C,OAAO,CAAC8G,IAAI,CAAChI,IAAI,CAAC;IAElBkB,OAAO,CAACmD,OAAO,EAAE;EACnB;EAEAoB,iBAAiB,CACfvE,OAAiC,EACjCH,KAA0B,EACpB;IACN,IAAM;MAAEkH,gBAAgB;MAAEC,YAAY;MAAEC;IAAgB,CAAC,GAAGpH,KAAK;IAEjE,IAAIkH,gBAAgB,EAAE;MACpB,IAAI,CAACG,yBAAyB,CAAClH,OAAO,EAAEH,KAAK,CAAC;IAChD,CAAC,MAAM,IACJmH,YAAY,IAAI,IAAI,IAAIA,YAAY,CAACG,IAAI,GAAG,CAAC,IAC7CF,eAAe,IAAI,IAAI,IAAIA,eAAe,CAACE,IAAI,GAAG,CAAE,EACrD;MACA,IAAI,CAACC,0BAA0B,CAACpH,OAAO,EAAEH,KAAK,CAAC;IACjD;EACF;EAEAqH,yBAAyB,CACvBlH,OAAiC,EACjCH,KAA0B,EACpB;IACN,IAAM;MAAEW,OAAO;MAAEC,KAAK;MAAEe,KAAK;MAAEwF,YAAY;MAAEC;IAAgB,CAAC,GAAGpH,KAAK;IACtE,IAAM;MAAEwH;IAAgB,CAAC,GAAG7F,KAAK;IAEjC,IAAI6F,eAAe,IAAI,CAAC,EAAE;MACxB;IACF;IAEA,IAAM;MACJvB,KAAK;MACLhC,KAAK;MACLpB,IAAI;MACJhC,YAAY;MACZ4G,cAAc;MACd3F,eAAe;MACfC;IACF,CAAC,GAAGpB,OAAO;IAEX,IAAM8D,kBAAkB,GAAGR,KAAK,GAAGuD,eAAe;IAElDrH,OAAO,CAACgD,IAAI,EAAE;IAEdhD,OAAO,CAACsB,IAAI,GAAGE,KAAK,CAACF,IAAI;IACzBtB,OAAO,CAACuH,SAAS,GAAG,MAAM;IAE1B,IACGP,YAAY,IAAI,IAAI,IAAIA,YAAY,CAACG,IAAI,GAAG,CAAC,IAC7CF,eAAe,IAAI,IAAI,IAAIA,eAAe,CAACE,IAAI,GAAG,CAAE,EACrD;MACA;MACAnH,OAAO,CAACuD,SAAS,GAAG/B,KAAK,CAACgG,sCAAsC;IAClE,CAAC,MAAM;MACL;MACAxH,OAAO,CAACuD,SAAS,GAAG/B,KAAK,CAACiG,gCAAgC;IAC5D;;IAEA;IACAzH,OAAO,CAACwD,QAAQ,CAACsC,KAAK,EAAExB,kBAAkB,EAAE5B,IAAI,EAAE2E,eAAe,GAAG,CAAC,CAAC;;IAEtE;IACArH,OAAO,CAACuD,SAAS,GAAG/B,KAAK,CAAC4D,oBAAoB;IAE9CpF,OAAO,CAACwD,QAAQ,CAACsC,KAAK,EAAExB,kBAAkB,GAAG+C,eAAe,GAAG,CAAC,EAAE3E,IAAI,EAAE,CAAC,CAAC;;IAE1E;IACA,IAAMgF,EAAE,GAAGpD,kBAAkB;IAC7BtE,OAAO,CAACmC,WAAW,GAAGX,KAAK,CAACmG,uBAAuB;IACnD3H,OAAO,CAACqC,SAAS,EAAE;IAEnB,KAAK,IAAIuF,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGN,cAAc,CAACzF,MAAM,EAAE+F,CAAC,IAAI,CAAC,EAAE;MACjD,IAAMtH,MAAM,GAAGgH,cAAc,CAACM,CAAC,CAAC;MAChC,IAAM/G,WAAW,GAAG1D,UAAU,CAACuD,YAAY,EAAEJ,MAAM,CAAC;MACpD,IAAM0B,OAAO,GAAG7E,UAAU,CAACyE,WAAW,EAAEtB,MAAM,CAAC;MAC/C,IAAM2B,WAAW,GAAG9E,UAAU,CAACwE,eAAe,EAAErB,MAAM,CAAC;MACvD,IAAIG,KAAK,CAACoH,YAAY,CAAChH,WAAW,CAAC,IAAIoB,WAAW,GAAG,CAAC,EAAE;QACtD,IAAM6F,EAAE,GAAGhC,KAAK,IAAI9D,OAAO,aAAPA,OAAO,cAAPA,OAAO,GAAI,CAAC,CAAC;QACjChC,OAAO,CAACkE,IAAI,CAAC4D,EAAE,GAAG,GAAG,EAAEJ,EAAE,GAAG,GAAG,EAAEzF,WAAW,EAAEoF,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC;MACtE;IACF;;IACArH,OAAO,CAACwC,MAAM,EAAE;IAEhB,KAAK,IAAIoF,EAAC,GAAG,CAAC,EAAEA,EAAC,GAAGN,cAAc,CAACzF,MAAM,EAAE+F,EAAC,IAAI,CAAC,EAAE;MACjD,IAAMtH,OAAM,GAAGgH,cAAc,CAACM,EAAC,CAAC;MAChC,IAAM3F,YAAW,GAAG9E,UAAU,CAACwE,eAAe,EAAErB,OAAM,CAAC;MACvD,IAAM0B,QAAO,GAAG7E,UAAU,CAACyE,WAAW,EAAEtB,OAAM,CAAC;MAC/C,IAAM4B,CAAC,GAAGF,QAAO,GAAG8D,KAAK;MACzB,IAAI,CAACiC,wBAAwB,CAAC/H,OAAO,EAAEH,KAAK,EAAES,OAAM,EAAE4B,CAAC,EAAED,YAAW,CAAC;IACvE;IAEAjC,OAAO,CAACmD,OAAO,EAAE;EACnB;EAEA4E,wBAAwB,CACtB/H,OAAiC,EACjCH,KAA0B,EAC1BS,MAAoB,EACpB0B,OAAmB,EACnBC,WAAmB,EACb;IACN,IAAIA,WAAW,IAAI,CAAC,EAAE;MACpB;IACF;IAEA,IAAM;MAAEzB,OAAO;MAAEgB,KAAK;MAAEwF,YAAY;MAAEC;IAAgB,CAAC,GAAGpH,KAAK;IAC/D,IAAM;MAAEa,YAAY;MAAEoD;IAAM,CAAC,GAAGtD,OAAO;IACvC,IAAM;MACJ6G,eAAe;MACfW,0CAA0C;MAC1CC,mBAAmB;MACnBC,0BAA0B;MAC1BC;IACF,CAAC,GAAG3G,KAAK;IACT,IAAM8C,kBAAkB,GAAGR,KAAK,GAAGuD,eAAe;IAClD,IAAMxG,WAAW,GAAGH,YAAY,CAACI,GAAG,CAACR,MAAM,CAAC;IAC5C,IAAIO,WAAW,KAAKE,SAAS,EAAE;IAC/B,IAAM9C,WAAW,GAAG+I,YAAY,CAAClG,GAAG,CAACD,WAAW,CAAC;IACjD,IAAM7C,cAAc,GAAGiJ,eAAe,CAACnG,GAAG,CAACD,WAAW,CAAC;IACvD,IAAI5C,WAAW,IAAI,IAAI,IAAID,cAAc,IAAI,IAAI,EAAE;MACjD;IACF;IAEA,IAAImI,IAAI,GAAG,IAAI;IACf,IAAIlI,WAAW,IAAI,IAAI,EAAE;MACvB,IAAM;QAAEkI,IAAI,EAAEiC;MAAW,CAAC,GAAGnK,WAAW;MACxCkI,IAAI,GAAGiC,UAAU;MACjB,IAAI,CAACjC,IAAI,EAAE;QACTA,IAAI,GAAGlJ,UAAU,CAACoL,aAAa,CAACpK,WAAW,CAACE,MAAM,CAAC;MACrD;MAEA,IAAIgI,IAAI,IAAI,IAAI,EAAE;QAChB,IAAM;UAAEJ;QAAW,CAAC,GAAGvF,OAAO;QAC9B,IAAI6F,SAAS,GAAGN,UAAU,CAACjF,GAAG,CAACd,OAAO,CAACsB,IAAI,CAAC;QAC5C,IAAI+E,SAAS,IAAI,IAAI,IAAIA,SAAS,KAAK,CAAC,EAAE;UACxCA,SAAS,GAAGrG,OAAO,CAACsI,WAAW,CAAC,GAAG,CAAC,CAAC1E,KAAK;UAC1C,IAAI,CAACyC,SAAS,EAAE;YACdA,SAAS,GAAG,EAAE;UAChB;QACF;QAEA,IAAMkC,SAAS,GACb,CAACtG,WAAW,GAAGiG,0BAA0B,GAAG,CAAC,IAAI7B,SAAS;QAC5D,IAAIkC,SAAS,IAAI,CAAC,EAAE;UAClBpC,IAAI,GAAG,EAAE;QACX,CAAC,MAAM,IAAIA,IAAI,CAACtE,MAAM,GAAG0G,SAAS,EAAE;UAClCpC,IAAI,aAAMA,IAAI,CAACqC,SAAS,CAAC,CAAC,EAAED,SAAS,GAAG,CAAC,CAAC,WAAG;QAC/C;MACF;IACF;IAEAvI,OAAO,CAACgD,IAAI,EAAE;IAEd,IAAMjF,aAAa,GAAGD,gBAAgB,CAACC,aAAa,CAClDC,cAAc,EACdC,WAAW,CACZ;IACD,IAAIF,aAAa,IAAIiK,0CAA0C,IAAI,IAAI,EAAE;MACvE;MACAhI,OAAO,CAACuD,SAAS,GAAGyE,0CAA0C;MAC9DhI,OAAO,CAACwD,QAAQ,CACdxB,OAAO,GAAG,CAAC;MAAE;MACbsC,kBAAkB,GAAG,CAAC;MAAE;MACxBrC,WAAW,GAAG,CAAC;MAAE;MACjBoF,eAAe,GAAG,CAAC,CAAC;MAAA,CACrB;IACH,CAAC,MAAM,IAAIY,mBAAmB,IAAI,IAAI,EAAE;MACtC;MACAjI,OAAO,CAACuD,SAAS,GAAG0E,mBAAmB;MACvCjI,OAAO,CAACoC,SAAS,GAAG,CAAC;MACrBpC,OAAO,CAACmC,WAAW,GAAG8F,mBAAmB;MACzC;MACA;MACA,IAAMQ,QAAQ,GAAGzG,OAAO,GAAG,CAAC,CAAC,CAAC;MAC9B,IAAM0G,OAAO,GAAGpE,kBAAkB,GAAG,CAAC,CAAC,CAAC;MACxC,IAAMqE,SAAS,GAAG1G,WAAW,GAAG,CAAC,CAAC,CAAC;MACnC,IAAM2G,UAAU,GAAGvB,eAAe,GAAG,CAAC,CAAC,CAAC;MACxCrH,OAAO,CAAC6I,UAAU,CAACJ,QAAQ,EAAEC,OAAO,EAAEC,SAAS,EAAEC,UAAU,CAAC;IAC9D;IAEA,IAAIzC,IAAI,IAAI,IAAI,IAAIA,IAAI,KAAK,EAAE,EAAE;MAC/B,IAAM2C,KAAK,GAAG9G,OAAO,GAAGkG,0BAA0B;MAClD,IAAMa,KAAK,GAAGzE,kBAAkB,GAAG+C,eAAe,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;MAC9DrH,OAAO,CAACuD,SAAS,GAAG4E,WAAW;MAC/BnI,OAAO,CAACgJ,QAAQ,CAAC7C,IAAI,EAAE2C,KAAK,EAAEC,KAAK,CAAC;IACtC;IAEA/I,OAAO,CAACmD,OAAO,EAAE;EACnB;EAEAiE,0BAA0B,CACxBpH,OAAiC,EACjCH,KAA0B,EACpB;IACN,IAAM;MAAEW,OAAO;MAAEgB;IAAM,CAAC,GAAG3B,KAAK;IAChC,IAAM;MAAEoJ,oBAAoB;MAAEC;IAAyB,CAAC,GAAG1H,KAAK;IAEhE,IAAI0H,wBAAwB,IAAI,CAAC,EAAE;MACjC;IACF;IAEA,IAAM;MACJpD,KAAK;MACLhC,KAAK;MACLpB,IAAI;MACJ4E,cAAc;MACd3F,eAAe;MACfC;IACF,CAAC,GAAGpB,OAAO;IACX,IAAM8D,kBAAkB,GAAGR,KAAK,GAAGoF,wBAAwB;IAE3DlJ,OAAO,CAACgD,IAAI,EAAE;;IAEd;IACAhD,OAAO,CAACuD,SAAS,GAAG0F,oBAAoB;IACxCjJ,OAAO,CAACwD,QAAQ,CAACsC,KAAK,EAAExB,kBAAkB,EAAE5B,IAAI,EAAEwG,wBAAwB,CAAC;IAE3E,KAAK,IAAItB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGN,cAAc,CAACzF,MAAM,EAAE+F,CAAC,IAAI,CAAC,EAAE;MACjD,IAAMtH,MAAM,GAAGgH,cAAc,CAACM,CAAC,CAAC;MAChC,IAAM3F,WAAW,GAAGN,eAAe,CAACb,GAAG,CAACR,MAAM,CAAC;MAC/C,IAAM0B,OAAO,GAAGJ,WAAW,CAACd,GAAG,CAACR,MAAM,CAAC;MACvC,IAAI0B,OAAO,IAAI,IAAI,IAAIC,WAAW,IAAI,IAAI,EAAE;QAC1C,IAAMC,CAAC,GAAGF,OAAO,GAAG8D,KAAK;QACzB;QACA,IAAI,CAACqD,yBAAyB,CAACnJ,OAAO,EAAEH,KAAK,EAAES,MAAM,EAAE4B,CAAC,EAAED,WAAW,CAAC;MACxE;IACF;IAEAjC,OAAO,CAACmD,OAAO,EAAE;EACnB;EAEAgG,yBAAyB,CACvBnJ,OAAiC,EACjCH,KAA0B,EAC1BS,MAAoB,EACpB0B,OAAmB,EACnBC,WAAmB,EACb;IACN,IAAIA,WAAW,IAAI,CAAC,EAAE;MACpB;IACF;IAEA,IAAM;MAAEzB,OAAO;MAAEgB,KAAK;MAAEwF,YAAY;MAAEC;IAAgB,CAAC,GAAGpH,KAAK;IAC/D,IAAM;MAAEa,YAAY;MAAEoD;IAAM,CAAC,GAAGtD,OAAO;IACvC,IAAMK,WAAW,GAAGH,YAAY,CAACI,GAAG,CAACR,MAAM,CAAC;IAE5C,IAAIO,WAAW,KAAKE,SAAS,EAAE;IAC/B,IAAM9C,WAAW,GAAG+I,YAAY,CAAClG,GAAG,CAACD,WAAW,CAAC;IACjD,IAAM7C,cAAc,GAAGiJ,eAAe,CAACnG,GAAG,CAACD,WAAW,CAAC;IAEvD,IAAM;MACJqI,wBAAwB;MACxBE,oBAAoB;MACpBC,8BAA8B;MAC9BpB;IACF,CAAC,GAAGzG,KAAK;IAETxB,OAAO,CAACgD,IAAI,EAAE;IAEd,IAAMjF,aAAa,GAAGD,gBAAgB,CAACC,aAAa,CAClDC,cAAc,EACdC,WAAW,CACZ;IAED,IACEoL,8BAA8B,IAAI,IAAI,IACtCpL,WAAW,IAAI,IAAI,IACnBD,cAAc,IAAI,IAAI,EACtB;MACAgC,OAAO,CAACuD,SAAS,GAAG8F,8BAA8B;IACpD,CAAC,MAAM,IAAID,oBAAoB,IAAI,IAAI,IAAIrL,aAAa,EAAE;MACxDiC,OAAO,CAACuD,SAAS,GAAG6F,oBAAoB;IAC1C,CAAC,MAAM,IAAInB,mBAAmB,IAAI,IAAI,EAAE;MACtCjI,OAAO,CAACuD,SAAS,GAAG0E,mBAAmB;IACzC;IAEA,IAAM/F,CAAC,GAAGF,OAAO,GAAG,CAAC,CAAC,CAAC;IACvB,IAAMe,CAAC,GAAGe,KAAK,GAAGoF,wBAAwB;IAC1C,IAAMP,SAAS,GAAG1G,WAAW,GAAG,CAAC,CAAC,CAAC;IACnC,IAAM2G,UAAU,GAAGM,wBAAwB,GAAG,CAAC,CAAC,CAAC;IACjDlJ,OAAO,CAACwD,QAAQ,CAACtB,CAAC,EAAEa,CAAC,EAAE4F,SAAS,EAAEC,UAAU,CAAC;IAE7C5I,OAAO,CAACmD,OAAO,EAAE;EACnB;EAEAmG,cAAc,CACZtJ,OAAiC,EACjCH,KAA0B,EAC1BmC,OAAmB,EACnBuH,IAAgB,EAChBC,OAAuB,EACvB7E,KAAa,EACb8E,UAAmB,EACb;IACNzJ,OAAO,CAACgD,IAAI,EAAE;IACd,IAAM;MAAE8E,EAAE;MAAEJ;IAAG,CAAC,GAAG8B,OAAO;IAC1B,IAAME,UAAU,GAAGD,UAAU,GACzB,IAAI,CAACpK,OAAO,CAACjC,UAAU,CAACK,UAAU,CAAC,GACnC,IAAI,CAAC4B,OAAO,CAACjC,UAAU,CAACM,WAAW,CAAC;IACxC,IAAMiM,KAAK,GAAG3H,OAAO,GAAG8F,EAAE,GAAG,CAAC;IAC9B,IAAM8B,KAAK,GAAGL,IAAI,GAAG7B,EAAE,GAAG,GAAG;IAE7B1H,OAAO,CAACuD,SAAS,GAAGoB,KAAK;IACzB3E,OAAO,CAACuH,SAAS,GAAG,QAAQ;IAC5BvH,OAAO,CAAC6G,SAAS,CAAC8C,KAAK,EAAEC,KAAK,CAAC;IAC/B5J,OAAO,CAAC8G,IAAI,CAAC4C,UAAU,CAAC;IACxB1J,OAAO,CAACmD,OAAO,EAAE;EACnB;EAEA0G,cAAc,CACZ7J,OAAiC,EACjCH,KAA0B,EACpB;IACN,IAAM;MAAEW,OAAO;MAAEC,KAAK;MAAEqJ,MAAM;MAAEC,MAAM;MAAEvI;IAAM,CAAC,GAAG3B,KAAK;IACvD,IAAM;MACJiE,KAAK;MACLgC,KAAK;MACLpD,IAAI;MACJ/B,SAAS;MACTqJ,iBAAiB;MACjBC,oBAAoB;MACpBC,YAAY;MACZC,cAAc;MACdtG,MAAM;MACNuG,mBAAmB;MACnBC,gBAAgB;MAChBC,aAAa;MACb7H,QAAQ;MACRmB;IACF,CAAC,GAAGpD,OAAO;IACX;IACA,IAAI2J,cAAc,IAAI,CAAC,IAAID,YAAY,CAACrI,MAAM,KAAK,CAAC,EAAE;MACpD;IACF;IAEA,IAAM;MACJ0I,qBAAqB;MACrBC,oBAAoB;MACpBC,2BAA2B;MAC3BtC,WAAW;MACXuC;IACF,CAAC,GAAGlJ,KAAK;IAETxB,OAAO,CAAC6G,SAAS,CAACf,KAAK,EAAEhC,KAAK,CAAC;IAE/B9D,OAAO,CAACqC,SAAS,EAAE;IACnB,IAAMH,CAAC,GAAGwE,IAAI,CAACC,GAAG,CAACjE,IAAI,EAAEkB,KAAK,GAAGuG,cAAc,GAAGE,gBAAgB,GAAGvE,KAAK,CAAC;IAC3E9F,OAAO,CAACuD,SAAS,GAAGkH,2BAA2B;IAC/C,IAAIT,iBAAiB,GAAG,CAAC,EAAE;MACzBhK,OAAO,CAACkE,IAAI,CAAChC,CAAC,EAAE,CAAC,EAAEiI,cAAc,EAAEH,iBAAiB,CAAC;IACvD;IACA,IAAIC,oBAAoB,GAAG,CAAC,EAAE;MAC5BjK,OAAO,CAACkE,IAAI,CACVhC,CAAC,EACD2B,MAAM,GAAGC,KAAK,GAAGsG,mBAAmB,GAAGH,oBAAoB,EAC3DE,cAAc,EACdF,oBAAoB,CACrB;IACH;IACAjK,OAAO,CAAC8G,IAAI,EAAE;IAEd,IAAM6D,QAAQ,GACZb,MAAM,IAAI,IAAI,IACdC,MAAM,IAAI,IAAI,IACdD,MAAM,IAAIhE,KAAK,IACfgE,MAAM,IAAIpH,IAAI,GAAGyH,cAAc,GAC3BnN,SAAS,CAAC4N,SAAS,CAACb,MAAM,EAAEvJ,OAAO,CAAC,GACpC,IAAI;IACV,IACEkK,uBAAuB,IAAI,IAAI,IAC/BC,QAAQ,KAAK,IAAI,IACjBT,YAAY,CAACW,QAAQ,CAACF,QAAQ,CAAC,EAC/B;MACA3K,OAAO,CAACuD,SAAS,GAAGmH,uBAAuB;MAC3C,IAAM3H,CAAC,GAAGN,QAAQ,CAAC3B,GAAG,CAAC6J,QAAQ,CAAC;MAChC,IAAMG,SAAS,GAAGR,aAAa,CAACxJ,GAAG,CAAC6J,QAAQ,CAAC;MAC7CzN,aAAa,CAAC6F,CAAC,CAAC;MAChB7F,aAAa,CAAC4N,SAAS,CAAC;MACxB9K,OAAO,CAACwD,QAAQ,CAACtB,CAAC,EAAEa,CAAC,EAAEoH,cAAc,EAAEW,SAAS,CAAC;IACnD;IAEA9K,OAAO,CAACqC,SAAS,EAAE;IACnB,IAAImI,oBAAoB,IAAI,IAAI,EAAE;MAChCxK,OAAO,CAACmC,WAAW,GAAGqI,oBAAoB;IAC5C;IACA,IAAIR,iBAAiB,GAAG,CAAC,EAAE;MACzBhK,OAAO,CAACsC,MAAM,CAACJ,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC;MAC5BlC,OAAO,CAACuC,MAAM,CAACL,CAAC,GAAG,GAAG,EAAE8H,iBAAiB,GAAG,GAAG,CAAC;IAClD;IACA,IAAIC,oBAAoB,GAAG,CAAC,EAAE;MAC5B,IAAMlH,EAAC,GAAGc,MAAM,GAAGC,KAAK,GAAGsG,mBAAmB,GAAGH,oBAAoB;MACrEjK,OAAO,CAACsC,MAAM,CAACJ,CAAC,GAAG,GAAG,EAAEa,EAAC,GAAG,GAAG,CAAC;MAChC/C,OAAO,CAACuC,MAAM,CAACL,CAAC,GAAG,GAAG,EAAEa,EAAC,GAAGkH,oBAAoB,GAAG,GAAG,CAAC;IACzD;IACAjK,OAAO,CAACwC,MAAM,EAAE;IAEhBxC,OAAO,CAACuD,SAAS,GAAG4E,WAAW;IAC/BnI,OAAO,CAACuH,SAAS,GAAG,MAAM;IAE1B,IAAMuB,KAAK,GAAG5G,CAAC,GAAGqI,qBAAqB;IACvC,KAAK,IAAI3C,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGsC,YAAY,CAACrI,MAAM,EAAE+F,CAAC,IAAI,CAAC,EAAE;MAC/C,IAAMrH,GAAG,GAAG2J,YAAY,CAACtC,CAAC,CAAC;MAC3B,IAAMkD,UAAS,GAAGR,aAAa,CAACxJ,GAAG,CAACP,GAAG,CAAC;MACxC,IAAMgJ,IAAI,GAAG9G,QAAQ,CAAC3B,GAAG,CAACP,GAAG,CAAC;MAC9B,IAAMK,QAAQ,GAAGD,SAAS,CAACG,GAAG,CAACP,GAAG,CAAC;MACnC,IAAIgJ,IAAI,IAAI,IAAI,IAAIuB,UAAS,IAAI,IAAI,IAAIlK,QAAQ,IAAI,IAAI,EAAE;QACzD,IAAMmI,KAAK,GAAGQ,IAAI,GAAGuB,UAAS,GAAG,GAAG;QACpC9K,OAAO,CAACgJ,QAAQ,CAACvI,KAAK,CAACsK,gBAAgB,CAACnK,QAAQ,CAAC,EAAEkI,KAAK,EAAEC,KAAK,CAAC;MAClE;IACF;IAEA/I,OAAO,CAAC6G,SAAS,CAAC,CAACf,KAAK,EAAE,CAAChC,KAAK,CAAC;EACnC;;EAEA;EACA;EACAkH,oBAAoB,CAClBnL,KAA0B,EAC1BS,MAAoB,EACpBC,GAAiB,EAKjB;IACA,IAAM0K,WAAW,GAAG,KAAK,CAACD,oBAAoB,CAACnL,KAAK,EAAES,MAAM,EAAEC,GAAG,CAAC;IAElE,IAAM;MAAEuJ,MAAM;MAAEC,MAAM;MAAEvJ;IAAQ,CAAC,GAAGX,KAAK;IAEzC,IAAIiK,MAAM,IAAI,IAAI,IAAIC,MAAM,IAAI,IAAI,EAAE;MACpC,OAAOkB,WAAW;IACpB;IAEA,IAAM;MAAE3K,MAAM,EAAE4K,WAAW;MAAE3K,GAAG,EAAEoK;IAAS,CAAC,GAAG3N,SAAS,CAACmO,kBAAkB,CACzErB,MAAM,EACNC,MAAM,EACNvJ,OAAO,CACR;IAED,IAAIF,MAAM,KAAK4K,WAAW,IAAI3K,GAAG,KAAKoK,QAAQ,EAAE;MAC9C,IAAM;QAAES;MAAK,CAAC,GAAG,IAAI,CAACC,6BAA6B,CAACxL,KAAK,CAAC;MAC1D,IAAI,IAAI,CAACyL,0BAA0B,CAACzL,KAAK,CAAC,IAAIuL,IAAI,IAAI,IAAI,EAAE;QAC1DH,WAAW,CAACrH,KAAK,GAAGwH,IAAI,GAAG5K,OAAO,CAACsF,KAAK,GAAGmF,WAAW,CAAC/I,CAAC;MAC1D;IACF;IACA,OAAO+I,WAAW;EACpB;EAEAK,0BAA0B,CAACzL,KAA0B,EAAW;IAAA;IAC9D,IAAM;MAAEG,OAAO;MAAE8J,MAAM;MAAEC,MAAM;MAAEvJ,OAAO;MAAEC,KAAK;MAAEe;IAAM,CAAC,GAAG3B,KAAK;IAChE,IAAIiK,MAAM,IAAI,IAAI,IAAIC,MAAM,IAAI,IAAI,EAAE;MACpC,OAAO,KAAK;IACd;IAEA,IAAM;MAAExJ,GAAG;MAAED,MAAM;MAAEM,QAAQ;MAAEC;IAAY,CAAC,GAAG7D,SAAS,CAACuO,iBAAiB,CACxEzB,MAAM,EACNC,MAAM,EACNvJ,OAAO,CACR;IAED,IACED,GAAG,IAAI,IAAI,IACXD,MAAM,IAAI,IAAI,IACdM,QAAQ,IAAI,IAAI,IAChBC,WAAW,IAAI,IAAI,IACnB,CAAC5D,UAAU,CAACuO,YAAY,CAAC/K,KAAK,CAACU,OAAO,CAACN,WAAW,CAAC,CAACO,IAAI,CAAC,EACzD;MACA,OAAO,KAAK;IACd;IAEA,IAAM+E,IAAI,yBAAG1F,KAAK,CAACgL,WAAW,CAAC5K,WAAW,EAAED,QAAQ,CAAC,mEAAI,EAAE;IAC3D,IAAM;MAAEgD,KAAK,EAAE2C;IAAU,CAAC,GAAG,KAAK,CAACyE,oBAAoB,CAACnL,KAAK,EAAES,MAAM,EAAEC,GAAG,CAAC;IAC3E,IAAM8F,SAAS,4BACb7F,OAAO,CAACuF,UAAU,CAACjF,GAAG,CAACU,KAAK,CAACF,IAAI,CAAC,yEAAIxD,gBAAgB,CAACwI,kBAAkB;IAE3EtG,OAAO,CAACgD,IAAI,EAAE;IACdhD,OAAO,CAACsB,IAAI,GAAGE,KAAK,CAACF,IAAI;IAEzB,IAAMoK,aAAa,GAAG,IAAI,CAACC,wBAAwB,CACjD3L,OAAO,EACPmG,IAAI,EACJI,SAAS,EACTF,SAAS,EACT5F,KAAK,CAACmL,qBAAqB,CAAC/K,WAAW,EAAED,QAAQ,CAAC,CACnD;IACDZ,OAAO,CAACmD,OAAO,EAAE;IAEjB,OAAOgD,IAAI,KAAK,EAAE,IAAIuF,aAAa,KAAKvF,IAAI;EAC9C;EAEAkF,6BAA6B,OAe3B;IAAA,IAf4B;MAC5BvB,MAAM;MACNC,MAAM;MACNvJ,OAAO;MACPgB;IAMF,CAAC;IAMC,IAAMqK,aAAa,GAAG;MAAET,IAAI,EAAE,IAAI;MAAEU,GAAG,EAAE,IAAI;MAAElI,KAAK,EAAE,IAAI;MAAEC,MAAM,EAAE;IAAK,CAAC;IAC1E,IAAIiG,MAAM,IAAI,IAAI,IAAIC,MAAM,IAAI,IAAI,IAAI,CAACvJ,OAAO,EAAE;MAChD,OAAOqL,aAAa;IACtB;IACA,IAAM;MAAEf,SAAS;MAAE7I,WAAW;MAAEmJ,IAAI;MAAEU;IAAI,CAAC,GAAG9O,SAAS,CAACuO,iBAAiB,CACvEzB,MAAM,EACNC,MAAM,EACNvJ,OAAO,CACR;IAEDtD,aAAa,CAACkO,IAAI,CAAC;IACnBlO,aAAa,CAAC+E,WAAW,CAAC;IAC1B/E,aAAa,CAAC4O,GAAG,CAAC;IAClB,IAAM;MAAElI,KAAK,EAAEmI,SAAS;MAAE1B;IAAiB,CAAC,GAAG7J,OAAO;IACtD,IAAM;MAAE+J;IAAsB,CAAC,GAAG/I,KAAK;IAEvC,IAAMoC,KAAK,GAAG/F,SAAS,GAAG,CAAC,GAAG0M,qBAAqB;IACnD,IAAM1G,MAAM,GAAGiH,SAAS;IACxB;IACA,IAAMkB,KAAK,GAAGtF,IAAI,CAACC,GAAG,CACpBnG,OAAO,CAACsF,KAAK,GAAGsF,IAAI,GAAGnJ,WAAW,EAClC8J,SAAS,GAAG1B,gBAAgB,CAC7B;IACD,IAAM4B,UAAU,GAAGD,KAAK,GAAGpI,KAAK;IAChC,IAAMsI,SAAS,GAAG1L,OAAO,CAACsD,KAAK,GAAGgI,GAAG;IAErC,OAAO;MAAEV,IAAI,EAAEa,UAAU;MAAEH,GAAG,EAAEI,SAAS;MAAEtI,KAAK;MAAEC;IAAO,CAAC;EAC5D;EAEA5D,sBAAsB,CAACJ,KAA0B,EAAQ;IACvD,IAAM;MAAEG,OAAO;MAAE8J,MAAM;MAAEC,MAAM;MAAEvI;IAAM,CAAC,GAAG3B,KAAK;IAChD,IAAIiK,MAAM,IAAI,IAAI,IAAIC,MAAM,IAAI,IAAI,EAAE;IAEtC,IAAI,CAAC,IAAI,CAACuB,0BAA0B,CAACzL,KAAK,CAAC,EAAE;MAC3C;IACF;IAEA,IAAM;MACJuL,IAAI,EAAEa,UAAU;MAChBH,GAAG,EAAEI,SAAS;MACdtI,KAAK,EAAEuI,WAAW;MAClBtI,MAAM,EAAEuI;IACV,CAAC,GAAG,IAAI,CAACf,6BAA6B,CAACxL,KAAK,CAAC;IAE7C,IAAM;MACJ0K,qBAAqB;MACrB8B,mBAAmB;MACnBC;IACF,CAAC,GAAG9K,KAAK;IAETxB,OAAO,CAACgD,IAAI,EAAE;IACd,IACEsJ,wBAAwB,IAAI,IAAI,IAChCL,UAAU,IAAI,IAAI,IAClBE,WAAW,IAAI,IAAI,IACnBD,SAAS,IAAI,IAAI,IACjBE,YAAY,IAAI,IAAI,IACpBtC,MAAM,IAAImC,UAAU,IACpBnC,MAAM,IAAImC,UAAU,GAAGE,WAAW,IAClCpC,MAAM,IAAImC,SAAS,IACnBnC,MAAM,IAAImC,SAAS,GAAGE,YAAY,EAClC;MACApM,OAAO,CAACuD,SAAS,GAAG+I,wBAAwB;IAC9C,CAAC,MAAM,IAAID,mBAAmB,IAAI,IAAI,EAAE;MACtCrM,OAAO,CAACuD,SAAS,GAAG8I,mBAAmB;IACzC;IACA,IAAMvN,IAAI,GAAG,IAAI,CAACO,OAAO,CAACjC,UAAU,CAACO,aAAa,CAAC;IACnD,IAAIsO,UAAU,IAAI,IAAI,IAAIC,SAAS,IAAI,IAAI,EAAE;MAC3ClM,OAAO,CAAC6G,SAAS,CAACoF,UAAU,GAAG1B,qBAAqB,EAAE2B,SAAS,GAAG,CAAC,CAAC;IACtE;IACAlM,OAAO,CAAC8G,IAAI,CAAChI,IAAI,CAAC;IAElBkB,OAAO,CAACmD,OAAO,EAAE;EACnB;EAEAoJ,uBAAuB,QAYrB9G,KAAoB,EAMpB;IAAA,IAjBA;MACEqE,MAAM;MACNC,MAAM;MACNvJ,OAAO;MACPgB;IAMF,CAAC;IAQD,IAAMqK,aAAa,GAAG;MAAET,IAAI,EAAE,IAAI;MAAEU,GAAG,EAAE,IAAI;MAAElI,KAAK,EAAE,IAAI;MAAEC,MAAM,EAAE;IAAK,CAAC;IAC1E,IAAIiG,MAAM,IAAI,IAAI,IAAIC,MAAM,IAAI,IAAI,IAAItE,KAAK,IAAI,IAAI,IAAI,CAACjF,OAAO,EAAE;MACjE,OAAOqL,aAAa;IACtB;IACA,IAAM;MAAEf,SAAS;MAAEM,IAAI;MAAEU;IAAI,CAAC,GAAG9O,SAAS,CAACuO,iBAAiB,CAC1DzB,MAAM,EACNC,MAAM,EACNvJ,OAAO,CACR;IAEDtD,aAAa,CAACkO,IAAI,CAAC;IACnBlO,aAAa,CAAC4N,SAAS,CAAC;IACxB5N,aAAa,CAAC4O,GAAG,CAAC;IAClB,IAAM;MAAEvB;IAAsB,CAAC,GAAG/I,KAAK;IAEvC,IAAMoC,KAAK,GAAGhG,gBAAgB,GAAG,CAAC,GAAG2M,qBAAqB;IAE1D,IAAM0B,UAAU,GAAGvF,IAAI,CAAC8F,GAAG,CAACpB,IAAI,GAAGxN,gBAAgB,GAAG6H,KAAK,EAAEjF,OAAO,CAACsF,KAAK,CAAC;IAC3E,IAAMoG,SAAS,GAAG1L,OAAO,CAACsD,KAAK,GAAGgI,GAAG;IAErC,OAAO;MACLV,IAAI,EAAEa,UAAU;MAChBH,GAAG,EAAEI,SAAS;MACdtI,KAAK;MACLC,MAAM,EAAEiH;IACV,CAAC;EACH;AACF;AAEA,eAAehN,gBAAgB"}
|
|
1
|
+
{"version":3,"file":"IrisGridRenderer.js","names":["dhSortDown","dhSortUp","vsTriangleDown","vsTriangleRight","vsLinkExternal","GridRenderer","GridUtils","TableUtils","assertNotNull","getOrThrow","ICON_NAMES","Object","freeze","SORT_UP","SORT_DOWN","CARET_DOWN","CARET_RIGHT","CELL_OVERFLOW","EXPAND_ICON_SIZE","ICON_SIZE","IrisGridRenderer","isFilterValid","advancedFilter","quickFilter","isAdvancedFilterValid","filter","isQuickFilterValid","constructor","icons","initIcons","setIcon","name","faIcon","path","Array","isArray","icon","Path2D","scaledIcon","scaleMatrix","a","d","addPath","getIcon","getSortIcon","sort","direction","sortDirection","ascending","descending","drawCanvas","state","drawScrim","drawGrid","context","drawCellOverflowButton","drawGridLines","drawGroupedColumnLine","drawPendingRowLine","drawCellContent","column","row","metrics","model","modelColumns","modelRows","modelRow","modelColumn","get","undefined","value","valueForCell","isTextType","columns","type","originalFont","font","displayValue","theme","groupedColumns","maxY","allColumnWidths","allColumnXs","length","groupedColumnDividerColor","lastVisibleGroupColumnIndex","columnX","columnWidth","x","strokeStyle","lineWidth","beginPath","moveTo","lineTo","stroke","allRowYs","maxX","pendingRowCount","firstPendingRow","rowCount","floatingBottomRowCount","y","save","setLineDash","pendingTextColor","restore","drawMouseColumnHover","hoverSelectColumn","linkerColumnHoverBackgroundColor","fillStyle","fillRect","drawMouseRowHover","isSelectingColumn","loadingScrimProgress","width","height","gridY","scrimBlurSize","scrimColor","globalCompositeOperation","rect","clip","drawColumnHeaders","reverseType","columnHeaderHeight","drawFilterHeaders","hasReverse","REVERSE_TYPE","NONE","color","headerReverseBarColor","headerSortBarColor","drawHeaderBar","reverseHeaderBarHeight","sortHeaderBarHeight","barHeight","interior","offset","headerBarCasingColor","columnHeaderMaxDepth","drawColumnHeadersAtDepth","range","boundsProp","depth","isMenuShown","bounds","drawColumnHeaderAtIndex","index","gridX","fontWidths","headerHorizontalPadding","columnName","getSortForColumn","text","textForColumnHeader","fontWidth","DEFAULT_FONT_WIDTH","textWidth","textRight","defaultX","Math","min","yOffset","translate","fill","isFilterBarShown","quickFilters","advancedFilters","drawExpandedFilterHeaders","size","drawCollapsedFilterHeaders","filterBarHeight","visibleColumns","textAlign","filterBarExpandedActiveBackgroundColor","filterBarExpandedBackgroundColor","y1","filterBarSeparatorColor","i","isFilterable","x1","drawExpandedFilterHeader","filterBarExpandedActiveCellBackgroundColor","filterBarErrorColor","filterBarHorizontalPadding","headerColor","filterText","getFilterText","measureText","maxLength","substring","rectLeft","rectTop","rectWidth","rectHeight","strokeRect","textX","textY","fillText","headerSeparatorColor","filterBarCollapsedHeight","drawCollapsedFilterHeader","filterBarActiveColor","filterBarActiveBackgroundColor","drawTreeMarker","rowY","treeBox","isExpanded","markerIcon","iconX","iconY","drawRowFooters","mouseX","mouseY","floatingTopHeight","floatingBottomHeight","floatingRows","rowFooterWidth","horizontalBarHeight","verticalBarWidth","allRowHeights","cellHorizontalPadding","floatingGridRowColor","floatingRowBackgroundColors","rowHoverBackgroundColor","mouseRow","getRowAtY","includes","rowHeight","textForRowFooter","getTextRenderMetrics","textMetrics","mouseColumn","getGridPointFromXY","left","getCellOverflowButtonPosition","shouldRenderOverflowButton","getCellInfoFromXY","isStringType","textForCell","truncatedText","getCachedTruncatedString","truncationCharForCell","NULL_POSITION","top","gridWidth","right","buttonLeft","buttonTop","buttonWidth","buttonHeight","overflowButtonColor","overflowButtonHoverColor","getExpandButtonPosition","max"],"sources":["../src/IrisGridRenderer.ts"],"sourcesContent":["/* eslint react/destructuring-assignment: \"off\" */\n/* eslint class-methods-use-this: \"off\" */\n/* eslint no-param-reassign: \"off\" */\nimport {\n dhSortDown,\n dhSortUp,\n vsTriangleDown,\n vsTriangleRight,\n vsLinkExternal,\n IconDefinition,\n} from '@deephaven/icons';\nimport {\n BoundedAxisRange,\n BoxCoordinates,\n Coordinate,\n GridMetrics,\n GridRangeIndex,\n GridRenderer,\n GridRenderState,\n GridThemeType,\n GridUtils,\n VisibleIndex,\n} from '@deephaven/grid';\nimport { Sort } from '@deephaven/jsapi-shim';\nimport { TableUtils, ReverseType } from '@deephaven/jsapi-utils';\nimport { assertNotNull, getOrThrow } from '@deephaven/utils';\nimport {\n ReadonlyAdvancedFilterMap,\n ReadonlyQuickFilterMap,\n AdvancedFilter,\n QuickFilter,\n} from './CommonTypes';\nimport { IrisGridThemeType } from './IrisGridTheme';\nimport IrisGridModel from './IrisGridModel';\n\nconst ICON_NAMES = Object.freeze({\n SORT_UP: 'sortUp',\n SORT_DOWN: 'sortDown',\n CARET_DOWN: 'caretDown',\n CARET_RIGHT: 'caretRight',\n CELL_OVERFLOW: 'cellOverflow',\n});\n\nconst EXPAND_ICON_SIZE = 10;\nconst ICON_SIZE = 16;\n\nexport type IrisGridRenderState = GridRenderState & {\n model: IrisGridModel;\n theme: IrisGridThemeType;\n hoverSelectColumn: GridRangeIndex;\n isSelectingColumn: boolean;\n loadingScrimProgress: number;\n reverseType: ReverseType;\n isFilterBarShown: boolean;\n advancedFilters: ReadonlyAdvancedFilterMap;\n quickFilters: ReadonlyQuickFilterMap;\n isMenuShown: boolean;\n};\n/**\n * Handles rendering some of the Iris specific features, such as sorting icons, sort bar display\n * */\nclass IrisGridRenderer extends GridRenderer {\n static isFilterValid(\n advancedFilter: AdvancedFilter | undefined | null,\n quickFilter: QuickFilter | undefined | null\n ): boolean {\n const isAdvancedFilterValid =\n advancedFilter == null || advancedFilter.filter != null;\n const isQuickFilterValid =\n quickFilter == null || quickFilter.filter != null;\n return isAdvancedFilterValid && isQuickFilterValid;\n }\n\n constructor() {\n super();\n this.icons = {};\n\n this.initIcons();\n }\n\n icons: Record<string, Path2D>;\n\n initIcons(): void {\n this.setIcon(ICON_NAMES.SORT_UP, dhSortUp);\n this.setIcon(ICON_NAMES.SORT_DOWN, dhSortDown);\n this.setIcon(ICON_NAMES.CARET_DOWN, vsTriangleDown);\n this.setIcon(ICON_NAMES.CARET_RIGHT, vsTriangleRight);\n this.setIcon(ICON_NAMES.CELL_OVERFLOW, vsLinkExternal);\n }\n\n // Scales the icon to be square and match the global ICON_SIZE\n setIcon(name: string, faIcon: IconDefinition): void {\n const path = Array.isArray(faIcon.icon[4])\n ? faIcon.icon[4][0]\n : faIcon.icon[4];\n const icon = new Path2D(path);\n const scaledIcon = new Path2D();\n const scaleMatrix = {\n a: ICON_SIZE / faIcon.icon[0],\n d: ICON_SIZE / faIcon.icon[1],\n };\n scaledIcon.addPath(icon, scaleMatrix);\n this.icons[name] = scaledIcon;\n }\n\n getIcon(name: string): Path2D {\n return this.icons[name];\n }\n\n getSortIcon(sort: Sort | null): Path2D | null {\n if (!sort) {\n return null;\n }\n if (sort.direction === TableUtils.sortDirection.ascending) {\n return this.getIcon(ICON_NAMES.SORT_UP);\n }\n if (sort.direction === TableUtils.sortDirection.descending) {\n return this.getIcon(ICON_NAMES.SORT_DOWN);\n }\n return null;\n }\n\n drawCanvas(state: IrisGridRenderState): void {\n super.drawCanvas(state);\n\n this.drawScrim(state);\n }\n\n drawGrid(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n super.drawGrid(context, state);\n this.drawCellOverflowButton(state);\n }\n\n drawGridLines(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n super.drawGridLines(context, state);\n\n this.drawGroupedColumnLine(context, state);\n\n this.drawPendingRowLine(context, state);\n }\n\n drawCellContent(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n column: VisibleIndex,\n row: VisibleIndex\n ): void {\n const { metrics, model } = state;\n const { modelColumns, modelRows } = metrics;\n const modelRow = getOrThrow(modelRows, row);\n const modelColumn = modelColumns.get(column);\n if (modelColumn === undefined) {\n return;\n }\n const value = model.valueForCell(modelColumn, modelRow);\n if (TableUtils.isTextType(model.columns[modelColumn]?.type)) {\n if (value === null || value === '') {\n const originalFont = context.font;\n context.font = `italic ${originalFont}`;\n const displayValue = value === null ? 'null' : 'empty';\n super.drawCellContent(context, state, column, row, displayValue);\n context.font = originalFont;\n return;\n }\n }\n super.drawCellContent(context, state, column, row);\n }\n\n drawGroupedColumnLine(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, theme } = state;\n const { groupedColumns } = model;\n const { maxY, allColumnWidths, allColumnXs } = metrics;\n if (\n groupedColumns.length === 0 ||\n theme.groupedColumnDividerColor == null\n ) {\n return;\n }\n\n // This assumes that the engine puts the grouped columns at the start of the\n // model, so model and visible index match for grouped columns. If we ever\n // add freeze support for tree tables or allow moving the grouped columns,\n // this assumption may no longer hold true. If such a change occurs, we'll\n // need to revisit this since a single vertical divider may no longer make\n // sense.\n const lastVisibleGroupColumnIndex = groupedColumns.length - 1;\n\n const columnX = allColumnXs.get(lastVisibleGroupColumnIndex);\n const columnWidth = allColumnWidths.get(lastVisibleGroupColumnIndex);\n if (columnX == null || columnWidth == null) {\n return;\n }\n\n const x = columnX + columnWidth + 0.5;\n\n context.strokeStyle = theme.groupedColumnDividerColor;\n context.lineWidth = 1;\n context.beginPath();\n context.moveTo(x, 0);\n context.lineTo(x, maxY);\n context.stroke();\n }\n\n drawPendingRowLine(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, theme } = state;\n const { allRowYs, maxX } = metrics;\n const { pendingRowCount } = model;\n if (pendingRowCount <= 0) {\n return;\n }\n\n const firstPendingRow =\n model.rowCount - model.pendingRowCount - model.floatingBottomRowCount;\n let y = allRowYs.get(firstPendingRow);\n if (y == null) {\n return;\n }\n\n y -= 0.5;\n context.save();\n context.setLineDash([4, 2]);\n context.strokeStyle = theme.pendingTextColor;\n\n context.lineWidth = 1;\n context.beginPath();\n context.moveTo(0, y);\n context.lineTo(maxX, y);\n context.stroke();\n context.restore();\n }\n\n drawMouseColumnHover(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { theme, metrics, hoverSelectColumn } = state;\n if (\n hoverSelectColumn == null ||\n theme.linkerColumnHoverBackgroundColor == null\n ) {\n return;\n }\n\n const { allColumnWidths, allColumnXs, maxY } = metrics;\n\n const x = allColumnXs.get(hoverSelectColumn);\n const columnWidth = allColumnWidths.get(hoverSelectColumn);\n assertNotNull(x);\n assertNotNull(columnWidth);\n\n context.fillStyle = theme.linkerColumnHoverBackgroundColor;\n context.fillRect(x, 0, columnWidth, maxY);\n }\n\n drawMouseRowHover(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { isSelectingColumn } = state;\n if (!isSelectingColumn) {\n super.drawMouseRowHover(context, state);\n }\n }\n\n drawScrim(state: IrisGridRenderState): void {\n const { context, loadingScrimProgress, metrics, theme } = state;\n if (loadingScrimProgress == null) {\n return;\n }\n\n const { width, height, gridY } = metrics;\n const { scrimBlurSize, scrimColor } = theme;\n\n context.save();\n\n // Use global composite so we can change the underlying layer to grayscale\n context.globalCompositeOperation = 'color';\n context.filter = `blur(${scrimBlurSize}px)`;\n if (scrimColor != null) {\n context.fillStyle = scrimColor;\n }\n\n // Clip the path so the top edge is hard edge, bottom edge is soft/blurry\n context.beginPath();\n context.rect(0, gridY, width, height - gridY);\n context.clip();\n\n // Extend the edges beyond the clip area so they're hard edges\n context.fillRect(\n -scrimBlurSize,\n -scrimBlurSize + gridY,\n scrimBlurSize * 2 + width,\n (scrimBlurSize * 2 + (height - gridY)) * loadingScrimProgress\n );\n\n // add an overlay of the scrim color to darken things a bit\n context.globalCompositeOperation = 'overlay';\n context.filter = `blur(${scrimBlurSize}px) opacity(15%)`;\n context.fillRect(\n -scrimBlurSize,\n -scrimBlurSize + gridY,\n scrimBlurSize * 2 + width,\n (scrimBlurSize * 2 + (height - gridY)) * loadingScrimProgress\n );\n\n context.restore();\n }\n\n drawColumnHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n super.drawColumnHeaders(context, state);\n\n const { theme, metrics, model, reverseType } = state;\n const { columnHeaderHeight } = metrics;\n\n this.drawFilterHeaders(context, state);\n\n if (columnHeaderHeight <= 0) {\n return;\n }\n\n const { sort } = model;\n // if there is only one sort bar, it is interior to the header to save space\n if (sort.length === 1) {\n const hasReverse = reverseType !== TableUtils.REVERSE_TYPE.NONE;\n\n let color;\n if (hasReverse) {\n color = theme.headerReverseBarColor;\n } else {\n color = theme.headerSortBarColor;\n }\n this.drawHeaderBar(\n context,\n state,\n color,\n hasReverse ? theme.reverseHeaderBarHeight : theme.sortHeaderBarHeight\n );\n } else if (sort.length > 1) {\n // if there's multiple bars, the sort is interior to header\n // and the reverse claims space in the table\n if (\n // has table reverse\n reverseType !== TableUtils.REVERSE_TYPE.NONE\n ) {\n this.drawHeaderBar(\n context,\n state,\n theme.headerReverseBarColor,\n theme.reverseHeaderBarHeight,\n false\n );\n }\n this.drawHeaderBar(\n context,\n state,\n theme.headerSortBarColor,\n theme.sortHeaderBarHeight\n );\n }\n }\n\n drawHeaderBar(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n color: string | CanvasGradient | CanvasPattern,\n barHeight: number,\n interior = true\n ): void {\n const { theme, metrics, model } = state;\n const { columnHeaderHeight, width } = metrics;\n // Draw casing with 1 pixel above and below the bar,\n // 1px falls on the existing split between grid/headers\n // so don't need to be accounnted for in math elsewhere\n let offset = 0;\n if (!interior) {\n offset = barHeight;\n }\n context.fillStyle = theme.headerBarCasingColor;\n context.fillRect(\n 0,\n model.columnHeaderMaxDepth * columnHeaderHeight - barHeight - 2 + offset,\n width,\n barHeight + 2\n );\n\n context.fillStyle = color;\n context.fillRect(\n 0,\n model.columnHeaderMaxDepth * columnHeaderHeight - barHeight - 1 + offset,\n width,\n barHeight\n );\n }\n\n drawColumnHeadersAtDepth(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n range: BoundedAxisRange,\n boundsProp: { minX: number; maxX: number },\n depth: number\n ): void {\n const { metrics, model, isMenuShown } = state;\n const { columnHeaderMaxDepth } = model;\n const { width } = metrics;\n const bounds = {\n ...boundsProp,\n maxX:\n depth === columnHeaderMaxDepth - 1 && boundsProp.maxX === width\n ? width - (isMenuShown ? 0 : 30) // Account for the menu button\n : boundsProp.maxX,\n };\n super.drawColumnHeadersAtDepth(context, state, range, bounds, depth);\n }\n\n drawColumnHeaderAtIndex(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n index: VisibleIndex,\n bounds: { minX: number; maxX: number }\n ): void {\n super.drawColumnHeaderAtIndex(context, state, index, bounds);\n const { metrics, model, theme } = state;\n const {\n modelColumns,\n allColumnWidths,\n allColumnXs,\n gridX,\n columnHeaderHeight,\n fontWidths,\n } = metrics;\n\n const { headerHorizontalPadding } = theme;\n const columnWidth = getOrThrow(allColumnWidths, index, 0);\n const columnX = getOrThrow(allColumnXs, index) + gridX;\n const modelColumn = modelColumns.get(index);\n\n if (modelColumn == null) {\n return;\n }\n\n const columnName = model.columns[modelColumn]?.name;\n\n if (columnName == null) {\n return;\n }\n\n const sort = TableUtils.getSortForColumn(model.sort, columnName);\n\n if (!sort) {\n return;\n }\n\n const icon = this.getSortIcon(sort);\n if (!icon) {\n return;\n }\n\n const text = model.textForColumnHeader(modelColumn);\n if (text === undefined) {\n return;\n }\n\n const fontWidth =\n fontWidths.get(context.font) ?? GridRenderer.DEFAULT_FONT_WIDTH;\n assertNotNull(fontWidth);\n const textWidth = text.length * fontWidth;\n const textRight = gridX + columnX + textWidth + headerHorizontalPadding;\n let { maxX } = bounds;\n maxX -= headerHorizontalPadding;\n const defaultX =\n gridX + columnX + columnWidth - headerHorizontalPadding - 1;\n\n const x = textRight > maxX ? textRight + 1 : Math.min(maxX, defaultX);\n const yOffset =\n sort.direction === TableUtils.sortDirection.ascending ? -6 : -12;\n const y = columnHeaderHeight * 0.5 + yOffset;\n\n context.save();\n\n context.beginPath();\n context.rect(columnX, 0, columnWidth, columnHeaderHeight);\n context.clip();\n\n context.fillStyle = theme.headerSortBarColor;\n context.translate(x, y);\n context.fill(icon);\n\n context.restore();\n }\n\n drawFilterHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { isFilterBarShown, quickFilters, advancedFilters } = state;\n\n if (isFilterBarShown) {\n this.drawExpandedFilterHeaders(context, state);\n } else if (\n (quickFilters != null && quickFilters.size > 0) ||\n (advancedFilters != null && advancedFilters.size > 0)\n ) {\n this.drawCollapsedFilterHeaders(context, state);\n }\n }\n\n drawExpandedFilterHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, theme, quickFilters, advancedFilters } = state;\n const { filterBarHeight } = theme;\n\n if (filterBarHeight <= 0) {\n return;\n }\n\n const {\n gridX,\n gridY,\n maxX,\n modelColumns,\n visibleColumns,\n allColumnWidths,\n allColumnXs,\n } = metrics;\n\n const columnHeaderHeight = gridY - filterBarHeight;\n\n context.save();\n\n context.font = theme.font;\n context.textAlign = 'left';\n\n if (\n (quickFilters != null && quickFilters.size > 0) ||\n (advancedFilters != null && advancedFilters.size > 0)\n ) {\n // fill style if a fiter is set on any column\n context.fillStyle = theme.filterBarExpandedActiveBackgroundColor;\n } else {\n // fill style with no filters set\n context.fillStyle = theme.filterBarExpandedBackgroundColor;\n }\n\n // Draw the background\n context.fillRect(gridX, columnHeaderHeight, maxX, filterBarHeight - 1);\n\n // Draw the bottom border\n context.fillStyle = theme.headerBarCasingColor;\n\n context.fillRect(gridX, columnHeaderHeight + filterBarHeight - 1, maxX, 1);\n\n // Draw the filter input boxes\n const y1 = columnHeaderHeight;\n context.strokeStyle = theme.filterBarSeparatorColor;\n context.beginPath();\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const modelColumn = getOrThrow(modelColumns, column);\n const columnX = getOrThrow(allColumnXs, column);\n const columnWidth = getOrThrow(allColumnWidths, column);\n if (model.isFilterable(modelColumn) && columnWidth > 0) {\n const x1 = gridX + (columnX ?? 0);\n context.rect(x1 + 0.5, y1 + 0.5, columnWidth, filterBarHeight - 2); // 1 for the border, 1 for the casing\n }\n }\n context.stroke();\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnWidth = getOrThrow(allColumnWidths, column);\n const columnX = getOrThrow(allColumnXs, column);\n const x = columnX + gridX;\n this.drawExpandedFilterHeader(context, state, column, x, columnWidth);\n }\n\n context.restore();\n }\n\n drawExpandedFilterHeader(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n column: VisibleIndex,\n columnX: Coordinate,\n columnWidth: number\n ): void {\n if (columnWidth <= 0) {\n return;\n }\n\n const { metrics, theme, quickFilters, advancedFilters } = state;\n const { modelColumns, gridY } = metrics;\n const {\n filterBarHeight,\n filterBarExpandedActiveCellBackgroundColor,\n filterBarErrorColor,\n filterBarHorizontalPadding,\n headerColor,\n } = theme;\n const columnHeaderHeight = gridY - filterBarHeight;\n const modelColumn = modelColumns.get(column);\n if (modelColumn === undefined) return;\n const quickFilter = quickFilters.get(modelColumn);\n const advancedFilter = advancedFilters.get(modelColumn);\n if (quickFilter == null && advancedFilter == null) {\n return;\n }\n\n let text = null;\n if (quickFilter != null) {\n const { text: filterText } = quickFilter;\n text = filterText;\n if (!text) {\n text = TableUtils.getFilterText(quickFilter.filter);\n }\n\n if (text != null) {\n const { fontWidths } = metrics;\n let fontWidth = fontWidths.get(context.font);\n if (fontWidth == null || fontWidth === 0) {\n fontWidth = context.measureText('8').width;\n if (!fontWidth) {\n fontWidth = 10;\n }\n }\n\n const maxLength =\n (columnWidth - filterBarHorizontalPadding * 2) / fontWidth;\n if (maxLength <= 0) {\n text = '';\n } else if (text.length > maxLength) {\n text = `${text.substring(0, maxLength - 1)}…`;\n }\n }\n }\n\n context.save();\n\n const isFilterValid = IrisGridRenderer.isFilterValid(\n advancedFilter,\n quickFilter\n );\n if (isFilterValid && filterBarExpandedActiveCellBackgroundColor != null) {\n // draw active filter background inside cell\n context.fillStyle = filterBarExpandedActiveCellBackgroundColor;\n context.fillRect(\n columnX + 1, // +1 left border\n columnHeaderHeight + 1, // +1 top border\n columnWidth - 1, // -1 right border\n filterBarHeight - 3 // -3 top, bottom border and bottom casing\n );\n } else if (filterBarErrorColor != null) {\n // draw error box inside cell\n context.fillStyle = filterBarErrorColor;\n context.lineWidth = 2;\n context.strokeStyle = filterBarErrorColor;\n // Because this is drawn with a strokeRect, we have to add/subtract half the,\n // linewidth from each side to make interior, in addition to accounting for any borders/casings\n const rectLeft = columnX + 2; // 1 for strokeRect, 1 for border\n const rectTop = columnHeaderHeight + 2; // 1 for strokeRect, 1 for border\n const rectWidth = columnWidth - 3; // for 2 border and 1 for strokeRect\n const rectHeight = filterBarHeight - 5; // -2 for strokeRect, -3 for top, bottom border and bottom casing\n context.strokeRect(rectLeft, rectTop, rectWidth, rectHeight);\n }\n\n if (text != null && text !== '') {\n const textX = columnX + filterBarHorizontalPadding;\n const textY = columnHeaderHeight + filterBarHeight * 0.5 + 1; // + 1 for border\n context.fillStyle = headerColor;\n context.fillText(text, textX, textY);\n }\n\n context.restore();\n }\n\n drawCollapsedFilterHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, theme } = state;\n const { headerSeparatorColor, filterBarCollapsedHeight } = theme;\n\n if (filterBarCollapsedHeight <= 0) {\n return;\n }\n\n const {\n gridX,\n gridY,\n maxX,\n visibleColumns,\n allColumnWidths,\n allColumnXs,\n } = metrics;\n const columnHeaderHeight = gridY - filterBarCollapsedHeight;\n\n context.save();\n\n // Draw the background of the collapsed filter bar\n context.fillStyle = headerSeparatorColor;\n context.fillRect(gridX, columnHeaderHeight, maxX, filterBarCollapsedHeight);\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnWidth = allColumnWidths.get(column);\n const columnX = allColumnXs.get(column);\n if (columnX != null && columnWidth != null) {\n const x = columnX + gridX;\n // draw the collapsed cells\n this.drawCollapsedFilterHeader(context, state, column, x, columnWidth);\n }\n }\n\n context.restore();\n }\n\n drawCollapsedFilterHeader(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n column: VisibleIndex,\n columnX: Coordinate,\n columnWidth: number\n ): void {\n if (columnWidth <= 0) {\n return;\n }\n\n const { metrics, theme, quickFilters, advancedFilters } = state;\n const { modelColumns, gridY } = metrics;\n const modelColumn = modelColumns.get(column);\n\n if (modelColumn === undefined) return;\n const quickFilter = quickFilters.get(modelColumn);\n const advancedFilter = advancedFilters.get(modelColumn);\n\n const {\n filterBarCollapsedHeight,\n filterBarActiveColor,\n filterBarActiveBackgroundColor,\n filterBarErrorColor,\n } = theme;\n\n context.save();\n\n const isFilterValid = IrisGridRenderer.isFilterValid(\n advancedFilter,\n quickFilter\n );\n\n if (\n filterBarActiveBackgroundColor != null &&\n quickFilter == null &&\n advancedFilter == null\n ) {\n context.fillStyle = filterBarActiveBackgroundColor;\n } else if (filterBarActiveColor != null && isFilterValid) {\n context.fillStyle = filterBarActiveColor;\n } else if (filterBarErrorColor != null) {\n context.fillStyle = filterBarErrorColor;\n }\n\n const x = columnX + 1; // for gap between columns\n const y = gridY - filterBarCollapsedHeight;\n const rectWidth = columnWidth - 1; // for gap between columns\n const rectHeight = filterBarCollapsedHeight - 1; // for casing bottom\n context.fillRect(x, y, rectWidth, rectHeight);\n\n context.restore();\n }\n\n drawTreeMarker(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n columnX: Coordinate,\n rowY: Coordinate,\n treeBox: BoxCoordinates,\n color: string,\n isExpanded: boolean\n ): void {\n context.save();\n const { x1, y1 } = treeBox;\n const markerIcon = isExpanded\n ? this.getIcon(ICON_NAMES.CARET_DOWN)\n : this.getIcon(ICON_NAMES.CARET_RIGHT);\n const iconX = columnX + x1 - 2;\n const iconY = rowY + y1 + 2.5;\n\n context.fillStyle = color;\n context.textAlign = 'center';\n context.translate(iconX, iconY);\n context.fill(markerIcon);\n context.restore();\n }\n\n drawRowFooters(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, mouseX, mouseY, theme } = state;\n const {\n gridY,\n gridX,\n maxX,\n modelRows,\n floatingTopHeight,\n floatingBottomHeight,\n floatingRows,\n rowFooterWidth,\n height,\n horizontalBarHeight,\n verticalBarWidth,\n allRowHeights,\n allRowYs,\n width,\n } = metrics;\n // Only draw the footers on the floating rows\n if (rowFooterWidth <= 0 || floatingRows.length === 0) {\n return;\n }\n\n const {\n cellHorizontalPadding,\n floatingGridRowColor,\n floatingRowBackgroundColors,\n headerColor,\n rowHoverBackgroundColor,\n } = theme;\n\n context.translate(gridX, gridY);\n\n context.beginPath();\n const x = Math.min(maxX, width - rowFooterWidth - verticalBarWidth - gridX);\n context.fillStyle = floatingRowBackgroundColors;\n if (floatingTopHeight > 0) {\n context.rect(x, 0, rowFooterWidth, floatingTopHeight);\n }\n if (floatingBottomHeight > 0) {\n context.rect(\n x,\n height - gridY - horizontalBarHeight - floatingBottomHeight,\n rowFooterWidth,\n floatingBottomHeight\n );\n }\n context.fill();\n\n const mouseRow =\n mouseX != null &&\n mouseY != null &&\n mouseX >= gridX &&\n mouseX <= maxX + rowFooterWidth\n ? GridUtils.getRowAtY(mouseY, metrics)\n : null;\n if (\n rowHoverBackgroundColor != null &&\n mouseRow !== null &&\n floatingRows.includes(mouseRow)\n ) {\n context.fillStyle = rowHoverBackgroundColor;\n const y = allRowYs.get(mouseRow);\n const rowHeight = allRowHeights.get(mouseRow);\n assertNotNull(y);\n assertNotNull(rowHeight);\n context.fillRect(x, y, rowFooterWidth, rowHeight);\n }\n\n context.beginPath();\n if (floatingGridRowColor != null) {\n context.strokeStyle = floatingGridRowColor;\n }\n if (floatingTopHeight > 0) {\n context.moveTo(x + 0.5, 0.5);\n context.lineTo(x + 0.5, floatingTopHeight - 0.5);\n }\n if (floatingBottomHeight > 0) {\n const y = height - gridY - horizontalBarHeight - floatingBottomHeight;\n context.moveTo(x - 0.5, y + 0.5);\n context.lineTo(x - 0.5, y + floatingBottomHeight - 0.5);\n }\n context.stroke();\n\n context.fillStyle = headerColor;\n context.textAlign = 'left';\n\n const textX = x + cellHorizontalPadding;\n for (let i = 0; i < floatingRows.length; i += 1) {\n const row = floatingRows[i];\n const rowHeight = allRowHeights.get(row);\n const rowY = allRowYs.get(row);\n const modelRow = modelRows.get(row);\n if (rowY != null && rowHeight != null && modelRow != null) {\n const textY = rowY + rowHeight * 0.5;\n context.fillText(model.textForRowFooter(modelRow), textX, textY);\n }\n }\n\n context.translate(-gridX, -gridY);\n }\n\n // This will shrink the size the text may take when the overflow button is rendered\n // The text will truncate to a smaller width and won't overlap the button\n getTextRenderMetrics(\n state: IrisGridRenderState,\n column: VisibleIndex,\n row: VisibleIndex\n ): {\n width: number;\n x: Coordinate;\n y: Coordinate;\n } {\n const textMetrics = super.getTextRenderMetrics(state, column, row);\n\n const { mouseX, mouseY, metrics } = state;\n\n if (mouseX == null || mouseY == null) {\n return textMetrics;\n }\n\n const { column: mouseColumn, row: mouseRow } = GridUtils.getGridPointFromXY(\n mouseX,\n mouseY,\n metrics\n );\n\n if (column === mouseColumn && row === mouseRow) {\n const { left } = this.getCellOverflowButtonPosition(state);\n if (this.shouldRenderOverflowButton(state) && left != null) {\n textMetrics.width = left - metrics.gridX - textMetrics.x;\n }\n }\n return textMetrics;\n }\n\n shouldRenderOverflowButton(state: IrisGridRenderState): boolean {\n const { context, mouseX, mouseY, metrics, model, theme } = state;\n if (mouseX == null || mouseY == null) {\n return false;\n }\n\n const { row, column, modelRow, modelColumn } = GridUtils.getCellInfoFromXY(\n mouseX,\n mouseY,\n metrics\n );\n\n if (\n row == null ||\n column == null ||\n modelRow == null ||\n modelColumn == null ||\n !TableUtils.isStringType(model.columns[modelColumn].type)\n ) {\n return false;\n }\n\n const text = model.textForCell(modelColumn, modelRow) ?? '';\n const { width: textWidth } = super.getTextRenderMetrics(state, column, row);\n const fontWidth =\n metrics.fontWidths.get(theme.font) ?? IrisGridRenderer.DEFAULT_FONT_WIDTH;\n\n context.save();\n context.font = theme.font;\n\n const truncatedText = this.getCachedTruncatedString(\n context,\n text,\n textWidth,\n fontWidth,\n model.truncationCharForCell(modelColumn, modelRow)\n );\n context.restore();\n\n return text !== '' && truncatedText !== text;\n }\n\n getCellOverflowButtonPosition({\n mouseX,\n mouseY,\n metrics,\n theme,\n }: {\n mouseX: Coordinate | null;\n mouseY: Coordinate | null;\n metrics: GridMetrics | undefined;\n theme: GridThemeType;\n }): {\n left: Coordinate | null;\n top: Coordinate | null;\n width: number | null;\n height: number | null;\n } {\n const NULL_POSITION = { left: null, top: null, width: null, height: null };\n if (mouseX == null || mouseY == null || !metrics) {\n return NULL_POSITION;\n }\n const { rowHeight, columnWidth, left, top } = GridUtils.getCellInfoFromXY(\n mouseX,\n mouseY,\n metrics\n );\n\n assertNotNull(left);\n assertNotNull(columnWidth);\n assertNotNull(top);\n const { width: gridWidth, verticalBarWidth } = metrics;\n const { cellHorizontalPadding } = theme;\n\n const width = ICON_SIZE + 2 * cellHorizontalPadding;\n const height = rowHeight;\n // Right edge of column or of visible grid, whichever is smaller\n const right = Math.min(\n metrics.gridX + left + columnWidth,\n gridWidth - verticalBarWidth\n );\n const buttonLeft = right - width;\n const buttonTop = metrics.gridY + top;\n\n return { left: buttonLeft, top: buttonTop, width, height };\n }\n\n drawCellOverflowButton(state: IrisGridRenderState): void {\n const { context, mouseX, mouseY, theme } = state;\n if (mouseX == null || mouseY == null) return;\n\n if (!this.shouldRenderOverflowButton(state)) {\n return;\n }\n\n const {\n left: buttonLeft,\n top: buttonTop,\n width: buttonWidth,\n height: buttonHeight,\n } = this.getCellOverflowButtonPosition(state);\n\n const {\n cellHorizontalPadding,\n overflowButtonColor,\n overflowButtonHoverColor,\n } = theme;\n\n context.save();\n if (\n overflowButtonHoverColor != null &&\n buttonLeft != null &&\n buttonWidth != null &&\n buttonTop != null &&\n buttonHeight != null &&\n mouseX >= buttonLeft &&\n mouseX <= buttonLeft + buttonWidth &&\n mouseY >= buttonTop &&\n mouseY <= buttonTop + buttonHeight\n ) {\n context.fillStyle = overflowButtonHoverColor;\n } else if (overflowButtonColor != null) {\n context.fillStyle = overflowButtonColor;\n }\n const icon = this.getIcon(ICON_NAMES.CELL_OVERFLOW);\n if (buttonLeft != null && buttonTop != null) {\n context.translate(buttonLeft + cellHorizontalPadding, buttonTop + 2);\n }\n context.fill(icon);\n\n context.restore();\n }\n\n getExpandButtonPosition(\n {\n mouseX,\n mouseY,\n metrics,\n theme,\n }: {\n mouseX: Coordinate | null;\n mouseY: Coordinate | null;\n metrics: GridMetrics | undefined;\n theme: GridThemeType;\n },\n depth: number | null\n ): {\n left: Coordinate | null;\n top: Coordinate | null;\n width: number | null;\n height: number | null;\n } {\n const NULL_POSITION = { left: null, top: null, width: null, height: null };\n if (mouseX == null || mouseY == null || depth == null || !metrics) {\n return NULL_POSITION;\n }\n const { rowHeight, left, top } = GridUtils.getCellInfoFromXY(\n mouseX,\n mouseY,\n metrics\n );\n\n assertNotNull(left);\n assertNotNull(rowHeight);\n assertNotNull(top);\n const { cellHorizontalPadding } = theme;\n\n const width = EXPAND_ICON_SIZE + 2 * cellHorizontalPadding;\n\n const buttonLeft = Math.max(left + EXPAND_ICON_SIZE * depth, metrics.gridX);\n const buttonTop = metrics.gridY + top;\n\n return {\n left: buttonLeft,\n top: buttonTop,\n width,\n height: rowHeight,\n };\n }\n}\n\nexport default IrisGridRenderer;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridColumnSelectMouseHandler.d.ts","sourceRoot":"","sources":["../../src/mousehandlers/IrisGridColumnSelectMouseHandler.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,kBAAkB,EACnB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC;;GAEG;AACH,cAAM,gCAAiC,SAAQ,gBAAgB;gBACjD,QAAQ,EAAE,QAAQ;IAO9B,OAAO,CAAC,QAAQ,CAAW;IAE3B,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,2BAA2B;IAOnC,OAAO,CAAC,cAAc;IActB,MAAM,CAAC,SAAS,EAAE,SAAS,GAAG,kBAAkB;IAqBhD,OAAO,CAAC,SAAS,EAAE,SAAS,GAAG,kBAAkB;
|
|
1
|
+
{"version":3,"file":"IrisGridColumnSelectMouseHandler.d.ts","sourceRoot":"","sources":["../../src/mousehandlers/IrisGridColumnSelectMouseHandler.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,kBAAkB,EACnB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC;;GAEG;AACH,cAAM,gCAAiC,SAAQ,gBAAgB;gBACjD,QAAQ,EAAE,QAAQ;IAO9B,OAAO,CAAC,QAAQ,CAAW;IAE3B,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,2BAA2B;IAOnC,OAAO,CAAC,cAAc;IActB,MAAM,CAAC,SAAS,EAAE,SAAS,GAAG,kBAAkB;IAqBhD,OAAO,CAAC,SAAS,EAAE,SAAS,GAAG,kBAAkB;IAmBjD,OAAO,IAAI,kBAAkB;IAU7B,MAAM,IAAI,kBAAkB;IAI5B,OAAO,CAAC,SAAS,EAAE,SAAS,GAAG,kBAAkB;CAalD;AAED,eAAe,gCAAgC,CAAC"}
|
|
@@ -93,14 +93,8 @@ class IrisGridColumnSelectMouseHandler extends GridMouseHandler {
|
|
|
93
93
|
var tableColumn = this.getTableColumn(column);
|
|
94
94
|
if (this.isValidColumn(tableColumn)) {
|
|
95
95
|
this.cursor = columnAllowedCursor;
|
|
96
|
-
this.irisGrid.setState({
|
|
97
|
-
hoverSelectColumn: column
|
|
98
|
-
});
|
|
99
96
|
} else {
|
|
100
97
|
this.cursor = columnNotAllowedCursor;
|
|
101
|
-
this.irisGrid.setState({
|
|
102
|
-
hoverSelectColumn: null
|
|
103
|
-
});
|
|
104
98
|
}
|
|
105
99
|
|
|
106
100
|
// don't block wheel event from scrolling
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridColumnSelectMouseHandler.js","names":["GridMouseHandler","IrisGridColumnSelectMouseHandler","constructor","irisGrid","cursor","isActive","isSelectingColumn","props","isValidColumn","tableColumn","columnSelectionValidator","updateColumnSelectionStatus","getTableColumn","columnIndex","model","modelColumn","getModelColumn","columns","onMove","gridPoint","columnAllowedCursor","columnNotAllowedCursor","column","setState","hoverSelectColumn","onWheel","preventDefault","stopPropagation","onLeave","onDown","onClick","selectColumn"],"sources":["../../src/mousehandlers/IrisGridColumnSelectMouseHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport {\n GridMouseHandler,\n GridPoint,\n EventHandlerResult,\n} from '@deephaven/grid';\nimport type { Column } from '@deephaven/jsapi-shim';\nimport { IrisGrid } from '../IrisGrid';\n\n/**\n * Handles interaction with tables when the Linker tool is active\n */\nclass IrisGridColumnSelectMouseHandler extends GridMouseHandler {\n constructor(irisGrid: IrisGrid) {\n super();\n\n this.irisGrid = irisGrid;\n this.cursor = null;\n }\n\n private irisGrid: IrisGrid;\n\n private isActive(): boolean {\n const { isSelectingColumn } = this.irisGrid.props;\n return isSelectingColumn;\n }\n\n private isValidColumn(tableColumn: Column | null): boolean {\n if (tableColumn == null) {\n return false;\n }\n\n const { columnSelectionValidator } = this.irisGrid.props;\n if (columnSelectionValidator != null) {\n return columnSelectionValidator(tableColumn);\n }\n return true;\n }\n\n private updateColumnSelectionStatus(): void {\n const { columnSelectionValidator } = this.irisGrid.props;\n if (columnSelectionValidator != null) {\n columnSelectionValidator(null);\n }\n }\n\n private getTableColumn(columnIndex: number | null): Column | null {\n if (columnIndex == null) {\n return null;\n }\n\n const { model } = this.irisGrid.props;\n const modelColumn = this.irisGrid.getModelColumn(columnIndex);\n if (modelColumn == null) {\n return null;\n }\n\n return model.columns[modelColumn];\n }\n\n onMove(gridPoint: GridPoint): EventHandlerResult {\n if (!this.isActive()) {\n return false;\n }\n\n const { columnAllowedCursor, columnNotAllowedCursor } = this.irisGrid.props;\n const { column } = gridPoint;\n const tableColumn = this.getTableColumn(column);\n\n if (this.isValidColumn(tableColumn)) {\n this.cursor = columnAllowedCursor;\n this.irisGrid.setState({ hoverSelectColumn: column });\n } else {\n this.cursor = columnNotAllowedCursor;\n this.irisGrid.setState({ hoverSelectColumn: null });\n }\n\n return true;\n }\n\n // keeps linker cursor state during wheel event\n onWheel(gridPoint: GridPoint): EventHandlerResult {\n if (!this.isActive()) {\n return false;\n }\n\n const { columnAllowedCursor, columnNotAllowedCursor } = this.irisGrid.props;\n const { column } = gridPoint;\n const tableColumn = this.getTableColumn(column);\n\n if (this.isValidColumn(tableColumn)) {\n this.cursor = columnAllowedCursor;\n
|
|
1
|
+
{"version":3,"file":"IrisGridColumnSelectMouseHandler.js","names":["GridMouseHandler","IrisGridColumnSelectMouseHandler","constructor","irisGrid","cursor","isActive","isSelectingColumn","props","isValidColumn","tableColumn","columnSelectionValidator","updateColumnSelectionStatus","getTableColumn","columnIndex","model","modelColumn","getModelColumn","columns","onMove","gridPoint","columnAllowedCursor","columnNotAllowedCursor","column","setState","hoverSelectColumn","onWheel","preventDefault","stopPropagation","onLeave","onDown","onClick","selectColumn"],"sources":["../../src/mousehandlers/IrisGridColumnSelectMouseHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport {\n GridMouseHandler,\n GridPoint,\n EventHandlerResult,\n} from '@deephaven/grid';\nimport type { Column } from '@deephaven/jsapi-shim';\nimport { IrisGrid } from '../IrisGrid';\n\n/**\n * Handles interaction with tables when the Linker tool is active\n */\nclass IrisGridColumnSelectMouseHandler extends GridMouseHandler {\n constructor(irisGrid: IrisGrid) {\n super();\n\n this.irisGrid = irisGrid;\n this.cursor = null;\n }\n\n private irisGrid: IrisGrid;\n\n private isActive(): boolean {\n const { isSelectingColumn } = this.irisGrid.props;\n return isSelectingColumn;\n }\n\n private isValidColumn(tableColumn: Column | null): boolean {\n if (tableColumn == null) {\n return false;\n }\n\n const { columnSelectionValidator } = this.irisGrid.props;\n if (columnSelectionValidator != null) {\n return columnSelectionValidator(tableColumn);\n }\n return true;\n }\n\n private updateColumnSelectionStatus(): void {\n const { columnSelectionValidator } = this.irisGrid.props;\n if (columnSelectionValidator != null) {\n columnSelectionValidator(null);\n }\n }\n\n private getTableColumn(columnIndex: number | null): Column | null {\n if (columnIndex == null) {\n return null;\n }\n\n const { model } = this.irisGrid.props;\n const modelColumn = this.irisGrid.getModelColumn(columnIndex);\n if (modelColumn == null) {\n return null;\n }\n\n return model.columns[modelColumn];\n }\n\n onMove(gridPoint: GridPoint): EventHandlerResult {\n if (!this.isActive()) {\n return false;\n }\n\n const { columnAllowedCursor, columnNotAllowedCursor } = this.irisGrid.props;\n const { column } = gridPoint;\n const tableColumn = this.getTableColumn(column);\n\n if (this.isValidColumn(tableColumn)) {\n this.cursor = columnAllowedCursor;\n this.irisGrid.setState({ hoverSelectColumn: column });\n } else {\n this.cursor = columnNotAllowedCursor;\n this.irisGrid.setState({ hoverSelectColumn: null });\n }\n\n return true;\n }\n\n // keeps linker cursor state during wheel event\n onWheel(gridPoint: GridPoint): EventHandlerResult {\n if (!this.isActive()) {\n return false;\n }\n\n const { columnAllowedCursor, columnNotAllowedCursor } = this.irisGrid.props;\n const { column } = gridPoint;\n const tableColumn = this.getTableColumn(column);\n\n if (this.isValidColumn(tableColumn)) {\n this.cursor = columnAllowedCursor;\n } else {\n this.cursor = columnNotAllowedCursor;\n }\n\n // don't block wheel event from scrolling\n return { preventDefault: false, stopPropagation: false };\n }\n\n onLeave(): EventHandlerResult {\n if (this.isActive()) {\n this.irisGrid.setState({ hoverSelectColumn: null });\n }\n\n this.updateColumnSelectionStatus();\n\n return false;\n }\n\n onDown(): EventHandlerResult {\n return this.isActive();\n }\n\n onClick(gridPoint: GridPoint): EventHandlerResult {\n if (!this.isActive()) {\n return false;\n }\n\n const { column } = gridPoint;\n const tableColumn = this.getTableColumn(column);\n if (tableColumn != null && this.isValidColumn(tableColumn)) {\n this.irisGrid.selectColumn(tableColumn);\n }\n\n return true;\n }\n}\n\nexport default IrisGridColumnSelectMouseHandler;\n"],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { Column } from '@deephaven/jsapi-shim';
|
|
2
2
|
import AggregationOperation from './AggregationOperation';
|
|
3
|
-
export declare const SELECTABLE_OPTIONS: AggregationOperation[];
|
|
4
3
|
/**
|
|
5
4
|
* Check if an operation requires a rollup/table grouping
|
|
6
5
|
* @param type The operation to check
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AggregationUtils.d.ts","sourceRoot":"","sources":["../../../src/sidebar/aggregations/AggregationUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAE1D
|
|
1
|
+
{"version":3,"file":"AggregationUtils.d.ts","sourceRoot":"","sources":["../../../src/sidebar/aggregations/AggregationUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAE1D;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,SAAU,oBAAoB,KAAG,OAM9D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,kBACZ,oBAAoB,cACvB,MAAM,KACjB,OA0BF,CAAC;AAEF,eAAO,MAAM,kBAAkB,YACpB,SAAS,MAAM,EAAE,iBACX,oBAAoB,KAClC,MAAM,EAAkE,CAAC;AAE5E,eAAO,MAAM,uBAAuB,YACzB,SAAS,MAAM,EAAE,iBACX,oBAAoB,YACzB,SAAS,MAAM,EAAE,UACnB,OAAO,KACd,MAAM,EAGwD,CAAC;;;;;;AAElE,wBAIE"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { TableUtils } from '@deephaven/jsapi-utils';
|
|
2
2
|
import AggregationOperation from "./AggregationOperation.js";
|
|
3
|
-
export var SELECTABLE_OPTIONS = [AggregationOperation.SUM, AggregationOperation.ABS_SUM, AggregationOperation.MIN, AggregationOperation.MAX, AggregationOperation.VAR, AggregationOperation.AVG, AggregationOperation.STD, AggregationOperation.FIRST, AggregationOperation.LAST, AggregationOperation.COUNT_DISTINCT, AggregationOperation.DISTINCT, AggregationOperation.COUNT, AggregationOperation.UNIQUE];
|
|
4
|
-
|
|
5
3
|
/**
|
|
6
4
|
* Check if an operation requires a rollup/table grouping
|
|
7
5
|
* @param type The operation to check
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AggregationUtils.js","names":["TableUtils","AggregationOperation","
|
|
1
|
+
{"version":3,"file":"AggregationUtils.js","names":["TableUtils","AggregationOperation","isRollupOperation","type","isValidOperation","operationType","columnType","COUNT","FIRST","LAST","COUNT_DISTINCT","DISTINCT","UNIQUE","MIN","MAX","isNumberType","isDateType","isTextType","SUM","ABS_SUM","VAR","AVG","STD","SKIP","filterValidColumns","columns","filter","c","getOperationColumnNames","selected","invert","map","name","includes"],"sources":["../../../src/sidebar/aggregations/AggregationUtils.ts"],"sourcesContent":["import type { Column } from '@deephaven/jsapi-shim';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport AggregationOperation from './AggregationOperation';\n\n/**\n * Check if an operation requires a rollup/table grouping\n * @param type The operation to check\n * @returns True if this operation applies to the whole table, false if applies to columns\n */\nexport const isRollupOperation = (type: AggregationOperation): boolean => {\n switch (type) {\n // currently no rollup only operations, but there has been in the past\n default:\n return false;\n }\n};\n\n/**\n * Check if an operation is valid against the given column type\n * @param operationType The operation to check\n * @param columnType The column type to check against\n */\nexport const isValidOperation = (\n operationType: AggregationOperation,\n columnType: string\n): boolean => {\n switch (operationType) {\n case AggregationOperation.COUNT:\n case AggregationOperation.FIRST:\n case AggregationOperation.LAST:\n case AggregationOperation.COUNT_DISTINCT:\n case AggregationOperation.DISTINCT:\n case AggregationOperation.UNIQUE:\n return true;\n case AggregationOperation.MIN:\n case AggregationOperation.MAX:\n return (\n TableUtils.isNumberType(columnType) ||\n TableUtils.isDateType(columnType) ||\n TableUtils.isTextType(columnType)\n );\n case AggregationOperation.SUM:\n case AggregationOperation.ABS_SUM:\n case AggregationOperation.VAR:\n case AggregationOperation.AVG:\n case AggregationOperation.STD:\n return TableUtils.isNumberType(columnType);\n case AggregationOperation.SKIP:\n return false;\n // No default case - if AggregationOperation is added, we'll get a compile time error\n }\n};\n\nexport const filterValidColumns = (\n columns: readonly Column[],\n operationType: AggregationOperation\n): Column[] => columns.filter(c => isValidOperation(operationType, c.type));\n\nexport const getOperationColumnNames = (\n columns: readonly Column[],\n operationType: AggregationOperation,\n selected: readonly string[],\n invert: boolean\n): string[] =>\n filterValidColumns(columns, operationType)\n .map(({ name }) => name)\n .filter(name => (selected.includes(name) ? !invert : invert));\n\nexport default {\n isRollupOperation,\n filterValidColumns,\n getOperationColumnNames,\n};\n"],"mappings":"AACA,SAASA,UAAU,QAAQ,wBAAwB;AAAC,OAC7CC,oBAAoB;AAE3B;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,iBAAiB,GAAIC,IAA0B,IAAc;EACxE,QAAQA,IAAI;IACV;IACA;MACE,OAAO,KAAK;EAAC;AAEnB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,gBAAgB,GAAG,CAC9BC,aAAmC,EACnCC,UAAkB,KACN;EACZ,QAAQD,aAAa;IACnB,KAAKJ,oBAAoB,CAACM,KAAK;IAC/B,KAAKN,oBAAoB,CAACO,KAAK;IAC/B,KAAKP,oBAAoB,CAACQ,IAAI;IAC9B,KAAKR,oBAAoB,CAACS,cAAc;IACxC,KAAKT,oBAAoB,CAACU,QAAQ;IAClC,KAAKV,oBAAoB,CAACW,MAAM;MAC9B,OAAO,IAAI;IACb,KAAKX,oBAAoB,CAACY,GAAG;IAC7B,KAAKZ,oBAAoB,CAACa,GAAG;MAC3B,OACEd,UAAU,CAACe,YAAY,CAACT,UAAU,CAAC,IACnCN,UAAU,CAACgB,UAAU,CAACV,UAAU,CAAC,IACjCN,UAAU,CAACiB,UAAU,CAACX,UAAU,CAAC;IAErC,KAAKL,oBAAoB,CAACiB,GAAG;IAC7B,KAAKjB,oBAAoB,CAACkB,OAAO;IACjC,KAAKlB,oBAAoB,CAACmB,GAAG;IAC7B,KAAKnB,oBAAoB,CAACoB,GAAG;IAC7B,KAAKpB,oBAAoB,CAACqB,GAAG;MAC3B,OAAOtB,UAAU,CAACe,YAAY,CAACT,UAAU,CAAC;IAC5C,KAAKL,oBAAoB,CAACsB,IAAI;MAC5B,OAAO,KAAK;IACd;EAAA;AAEJ,CAAC;;AAED,OAAO,IAAMC,kBAAkB,GAAG,CAChCC,OAA0B,EAC1BpB,aAAmC,KACtBoB,OAAO,CAACC,MAAM,CAACC,CAAC,IAAIvB,gBAAgB,CAACC,aAAa,EAAEsB,CAAC,CAACxB,IAAI,CAAC,CAAC;AAE3E,OAAO,IAAMyB,uBAAuB,GAAG,CACrCH,OAA0B,EAC1BpB,aAAmC,EACnCwB,QAA2B,EAC3BC,MAAe,KAEfN,kBAAkB,CAACC,OAAO,EAAEpB,aAAa,CAAC,CACvC0B,GAAG,CAAC;EAAA,IAAC;IAAEC;EAAK,CAAC;EAAA,OAAKA,IAAI;AAAA,EAAC,CACvBN,MAAM,CAACM,IAAI,IAAKH,QAAQ,CAACI,QAAQ,CAACD,IAAI,CAAC,GAAG,CAACF,MAAM,GAAGA,MAAO,CAAC;AAEjE,eAAe;EACb5B,iBAAiB;EACjBsB,kBAAkB;EAClBI;AACF,CAAC"}
|
|
@@ -16,6 +16,7 @@ export type AggregationsProps = {
|
|
|
16
16
|
onChange: (settings: AggregationSettings) => void;
|
|
17
17
|
onEdit: (aggregation: Aggregation) => void;
|
|
18
18
|
};
|
|
19
|
+
export declare const SELECTABLE_OPTIONS: AggregationOperation[];
|
|
19
20
|
declare function Aggregations({ isRollup, settings, onChange, onEdit, }: AggregationsProps): JSX.Element;
|
|
20
21
|
export default Aggregations;
|
|
21
22
|
//# sourceMappingURL=Aggregations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Aggregations.d.ts","sourceRoot":"","sources":["../../../src/sidebar/aggregations/Aggregations.tsx"],"names":[],"mappings":";AA4BA,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAE1D,OAAO,qBAAqB,CAAC;AAI7B,MAAM,MAAM,WAAW,GAAG;IACxB,SAAS,EAAE,oBAAoB,CAAC;IAChC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,YAAY,EAAE,SAAS,WAAW,EAAE,CAAC;IACrC,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,QAAQ,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAClD,MAAM,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAC;CAC5C,CAAC;AAEF,iBAAS,YAAY,CAAC,EACpB,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,MAAM,GACP,EAAE,iBAAiB,GAAG,GAAG,CAAC,OAAO,CAuPjC;AAED,eAAe,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"Aggregations.d.ts","sourceRoot":"","sources":["../../../src/sidebar/aggregations/Aggregations.tsx"],"names":[],"mappings":";AA4BA,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAE1D,OAAO,qBAAqB,CAAC;AAI7B,MAAM,MAAM,WAAW,GAAG;IACxB,SAAS,EAAE,oBAAoB,CAAC;IAChC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,YAAY,EAAE,SAAS,WAAW,EAAE,CAAC;IACrC,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,QAAQ,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAClD,MAAM,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAC;CAC5C,CAAC;AAEF,eAAO,MAAM,kBAAkB,wBAc9B,CAAC;AAEF,iBAAS,YAAY,CAAC,EACpB,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,MAAM,GACP,EAAE,iBAAiB,GAAG,GAAG,CAAC,OAAO,CAuPjC;AAED,eAAe,YAAY,CAAC"}
|
|
@@ -10,9 +10,11 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
|
10
10
|
import { dhNewCircleLargeFilled, vsTrash, vsEdit, dhWarningFilled } from '@deephaven/icons';
|
|
11
11
|
import Log from '@deephaven/log';
|
|
12
12
|
import { DraggableItemList, DragUtils, Option, Select, RadioItem, RadioGroup, Button } from '@deephaven/components';
|
|
13
|
-
import
|
|
13
|
+
import AggregationOperation from "./AggregationOperation.js";
|
|
14
|
+
import AggregationUtils from "./AggregationUtils.js";
|
|
14
15
|
import "./Aggregations.css";
|
|
15
16
|
var log = Log.module('Aggregations');
|
|
17
|
+
export var SELECTABLE_OPTIONS = [AggregationOperation.SUM, AggregationOperation.ABS_SUM, AggregationOperation.MIN, AggregationOperation.MAX, AggregationOperation.VAR, AggregationOperation.AVG, AggregationOperation.STD, AggregationOperation.FIRST, AggregationOperation.LAST, AggregationOperation.COUNT_DISTINCT, AggregationOperation.DISTINCT, AggregationOperation.COUNT, AggregationOperation.UNIQUE];
|
|
16
18
|
function Aggregations(_ref) {
|
|
17
19
|
var {
|
|
18
20
|
isRollup,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Aggregations.js","names":["React","useCallback","useEffect","useMemo","useState","DragDropContext","classNames","FontAwesomeIcon","dhNewCircleLargeFilled","vsTrash","vsEdit","dhWarningFilled","Log","DraggableItemList","DragUtils","Option","Select","RadioItem","RadioGroup","Button","AggregationUtils","SELECTABLE_OPTIONS","log","module","Aggregations","isRollup","settings","onChange","onEdit","aggregations","showOnTop","options","filter","option","some","aggregation","operation","selectedOperation","setSelectedOperation","selectedRanges","setSelectedRanges","changeSettings","changedSettings","changeAggregations","newAggregations","changeShowOnTop","newShowOnTop","handleDragStart","debug","startDragging","handleDragEnd","destination","source","stopDragging","destinationIndex","index","draggedItems","reorder","insertIndex","adjustDestinationIndex","newSelectedRanges","length","handleOperationChange","handleAdd","selected","invert","handleDeleteClicked","itemIndex","handleAggregationSelectionChange","handleAggregationSelect","isRollupOperation","handleShowOnTopChange","event","target","value","setDefaultOperation","includes","renderAggregation","item","isClone","selectedCount","text","badgeText","undefined","className","isEditable","renderBadge","renderHandle","isOptionsShown","isAggregationsShown","map"],"sources":["../../../src/sidebar/aggregations/Aggregations.tsx"],"sourcesContent":["import React, {\n ChangeEvent,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport { DragDropContext } from 'react-beautiful-dnd';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n dhNewCircleLargeFilled,\n vsTrash,\n vsEdit,\n dhWarningFilled,\n} from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport {\n DraggableItemList,\n DragUtils,\n Option,\n Select,\n RadioItem,\n RadioGroup,\n Button,\n} from '@deephaven/components';\nimport type { DraggableRenderItemProps, Range } from '@deephaven/components';\nimport { ModelIndex } from '@deephaven/grid';\nimport AggregationOperation from './AggregationOperation';\nimport AggregationUtils, { SELECTABLE_OPTIONS } from './AggregationUtils';\nimport './Aggregations.scss';\n\nconst log = Log.module('Aggregations');\n\nexport type Aggregation = {\n operation: AggregationOperation;\n selected: readonly string[];\n invert: boolean;\n};\n\nexport type AggregationSettings = {\n aggregations: readonly Aggregation[];\n showOnTop: boolean;\n};\n\nexport type AggregationsProps = {\n isRollup: boolean;\n settings: AggregationSettings;\n onChange: (settings: AggregationSettings) => void;\n onEdit: (aggregation: Aggregation) => void;\n};\n\nfunction Aggregations({\n isRollup,\n settings,\n onChange,\n onEdit,\n}: AggregationsProps): JSX.Element {\n const { aggregations, showOnTop } = settings;\n const options = useMemo(\n () =>\n SELECTABLE_OPTIONS.filter(\n option =>\n !aggregations.some(aggregation => aggregation.operation === option)\n ),\n [aggregations]\n );\n const [selectedOperation, setSelectedOperation] = useState(options[0]);\n const [selectedRanges, setSelectedRanges] = useState<Range[]>([]);\n const changeSettings = useCallback(\n changedSettings => {\n onChange({ ...settings, ...changedSettings });\n },\n [onChange, settings]\n );\n const changeAggregations = useCallback(\n newAggregations => {\n changeSettings({ aggregations: newAggregations });\n },\n [changeSettings]\n );\n\n const changeShowOnTop = useCallback(\n newShowOnTop => {\n changeSettings({ showOnTop: newShowOnTop });\n },\n [changeSettings]\n );\n\n const handleDragStart = useCallback(() => {\n log.debug('handleDragStart');\n\n DragUtils.startDragging();\n }, []);\n\n const handleDragEnd = useCallback(\n ({ destination, source }) => {\n log.debug('handleDragEnd', destination, source);\n\n DragUtils.stopDragging();\n\n if (destination === null) {\n return;\n }\n\n let destinationIndex = destination.index;\n if (source.index < destination.index) {\n destinationIndex += 1;\n }\n\n const newAggregations = [...aggregations];\n const draggedItems = DragUtils.reorder(\n newAggregations,\n selectedRanges,\n newAggregations,\n destinationIndex\n );\n const insertIndex = DragUtils.adjustDestinationIndex(\n destinationIndex,\n selectedRanges\n );\n const newSelectedRanges: Range[] = [\n [insertIndex, insertIndex + draggedItems.length - 1],\n ];\n changeAggregations(newAggregations);\n setSelectedRanges(newSelectedRanges);\n },\n [changeAggregations, aggregations, selectedRanges, setSelectedRanges]\n );\n\n const handleOperationChange = useCallback(\n operation => {\n setSelectedOperation(operation);\n },\n [setSelectedOperation]\n );\n\n const handleAdd = useCallback(() => {\n changeAggregations([\n ...aggregations,\n { operation: selectedOperation, selected: [], invert: true },\n ]);\n }, [aggregations, selectedOperation, changeAggregations]);\n\n const handleDeleteClicked = useCallback(\n (itemIndex: ModelIndex) => {\n changeAggregations(\n aggregations.filter((aggregation, index) => index !== itemIndex)\n );\n },\n [aggregations, changeAggregations]\n );\n\n const handleAggregationSelectionChange = useCallback(\n newSelectedRanges => {\n setSelectedRanges(newSelectedRanges);\n },\n [setSelectedRanges]\n );\n\n const handleAggregationSelect = useCallback(\n itemIndex => {\n const aggregation = aggregations[itemIndex];\n if (!AggregationUtils.isRollupOperation(aggregation.operation)) {\n onEdit(aggregation);\n }\n },\n [aggregations, onEdit]\n );\n\n const handleShowOnTopChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n changeShowOnTop(event.target.value === 'true');\n },\n [changeShowOnTop]\n );\n\n useEffect(\n function setDefaultOperation() {\n if (options.length > 0 && !options.includes(selectedOperation)) {\n setSelectedOperation(options[0]);\n }\n },\n [options, selectedOperation]\n );\n\n const renderAggregation = useCallback(\n ({\n item,\n itemIndex,\n isClone = false,\n selectedCount,\n }: DraggableRenderItemProps<Aggregation>) => {\n const text = item.operation;\n const badgeText = isClone ? `${selectedCount}` : undefined;\n const className = isClone ? 'item-list-item-clone' : undefined;\n const isRollupOperation = AggregationUtils.isRollupOperation(\n item.operation\n );\n const isEditable = !isClone && !isRollupOperation;\n return (\n <>\n <div\n className={classNames(\n 'item-list-item-content',\n 'draggable-item-list-item-content',\n className\n )}\n >\n <span className=\"title\">\n {text}\n {!isRollup && isRollupOperation && (\n <span className=\"small text-warning\">\n <FontAwesomeIcon icon={dhWarningFilled} /> Requires rollup\n </span>\n )}\n </span>\n {DraggableItemList.renderBadge({ text: badgeText })}\n {DraggableItemList.renderHandle()}\n </div>\n {!isClone && (\n <>\n <Button\n kind=\"ghost\"\n className=\"btn-edit\"\n icon={vsEdit}\n tooltip=\"Edit Columns\"\n onClick={() => onEdit(item)}\n disabled={!isEditable}\n />\n <Button\n kind=\"ghost\"\n className=\"btn-delete\"\n icon={vsTrash}\n tooltip=\"Delete Aggregation\"\n onClick={() => handleDeleteClicked(itemIndex)}\n />\n </>\n )}\n </>\n );\n },\n [handleDeleteClicked, onEdit, isRollup]\n );\n\n const isOptionsShown = options.length > 0;\n const isAggregationsShown = aggregations.length > 0;\n\n return (\n <div className=\"aggregations\">\n {isOptionsShown && (\n <div className=\"form-inline\">\n <Select onChange={handleOperationChange} value={selectedOperation}>\n {options.map(option => (\n <Option value={option} key={option}>\n {option}\n </Option>\n ))}\n </Select>\n <button\n type=\"button\"\n className=\"btn btn-link btn-add\"\n onClick={handleAdd}\n >\n <FontAwesomeIcon icon={dhNewCircleLargeFilled} />\n Add Aggregation\n </button>\n </div>\n )}\n {isOptionsShown && isAggregationsShown && <hr />}\n {isAggregationsShown && (\n <>\n {!isRollup && (\n <div className=\"form-inline\">\n <label>Placement: </label>\n <RadioGroup\n onChange={handleShowOnTopChange}\n value={`${showOnTop}`}\n >\n <RadioItem value=\"true\">Top</RadioItem>\n <RadioItem value=\"false\">Bottom</RadioItem>\n </RadioGroup>\n </div>\n )}\n <DragDropContext\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n >\n <DraggableItemList<Aggregation>\n className=\"selected-aggregations\"\n itemCount={aggregations.length}\n items={aggregations}\n renderItem={renderAggregation}\n offset={0}\n onSelectionChange={handleAggregationSelectionChange}\n onSelect={handleAggregationSelect}\n selectedRanges={selectedRanges}\n isMultiSelect\n />\n </DragDropContext>\n </>\n )}\n </div>\n );\n}\n\nexport default Aggregations;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Aggregations.js","names":["React","useCallback","useEffect","useMemo","useState","DragDropContext","classNames","FontAwesomeIcon","dhNewCircleLargeFilled","vsTrash","vsEdit","dhWarningFilled","Log","DraggableItemList","DragUtils","Option","Select","RadioItem","RadioGroup","Button","AggregationOperation","AggregationUtils","log","module","SELECTABLE_OPTIONS","SUM","ABS_SUM","MIN","MAX","VAR","AVG","STD","FIRST","LAST","COUNT_DISTINCT","DISTINCT","COUNT","UNIQUE","Aggregations","isRollup","settings","onChange","onEdit","aggregations","showOnTop","options","filter","option","some","aggregation","operation","selectedOperation","setSelectedOperation","selectedRanges","setSelectedRanges","changeSettings","changedSettings","changeAggregations","newAggregations","changeShowOnTop","newShowOnTop","handleDragStart","debug","startDragging","handleDragEnd","destination","source","stopDragging","destinationIndex","index","draggedItems","reorder","insertIndex","adjustDestinationIndex","newSelectedRanges","length","handleOperationChange","handleAdd","selected","invert","handleDeleteClicked","itemIndex","handleAggregationSelectionChange","handleAggregationSelect","isRollupOperation","handleShowOnTopChange","event","target","value","setDefaultOperation","includes","renderAggregation","item","isClone","selectedCount","text","badgeText","undefined","className","isEditable","renderBadge","renderHandle","isOptionsShown","isAggregationsShown","map"],"sources":["../../../src/sidebar/aggregations/Aggregations.tsx"],"sourcesContent":["import React, {\n ChangeEvent,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport { DragDropContext } from 'react-beautiful-dnd';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n dhNewCircleLargeFilled,\n vsTrash,\n vsEdit,\n dhWarningFilled,\n} from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport {\n DraggableItemList,\n DragUtils,\n Option,\n Select,\n RadioItem,\n RadioGroup,\n Button,\n} from '@deephaven/components';\nimport type { DraggableRenderItemProps, Range } from '@deephaven/components';\nimport { ModelIndex } from '@deephaven/grid';\nimport AggregationOperation from './AggregationOperation';\nimport AggregationUtils from './AggregationUtils';\nimport './Aggregations.scss';\n\nconst log = Log.module('Aggregations');\n\nexport type Aggregation = {\n operation: AggregationOperation;\n selected: readonly string[];\n invert: boolean;\n};\n\nexport type AggregationSettings = {\n aggregations: readonly Aggregation[];\n showOnTop: boolean;\n};\n\nexport type AggregationsProps = {\n isRollup: boolean;\n settings: AggregationSettings;\n onChange: (settings: AggregationSettings) => void;\n onEdit: (aggregation: Aggregation) => void;\n};\n\nexport const SELECTABLE_OPTIONS = [\n AggregationOperation.SUM,\n AggregationOperation.ABS_SUM,\n AggregationOperation.MIN,\n AggregationOperation.MAX,\n AggregationOperation.VAR,\n AggregationOperation.AVG,\n AggregationOperation.STD,\n AggregationOperation.FIRST,\n AggregationOperation.LAST,\n AggregationOperation.COUNT_DISTINCT,\n AggregationOperation.DISTINCT,\n AggregationOperation.COUNT,\n AggregationOperation.UNIQUE,\n];\n\nfunction Aggregations({\n isRollup,\n settings,\n onChange,\n onEdit,\n}: AggregationsProps): JSX.Element {\n const { aggregations, showOnTop } = settings;\n const options = useMemo(\n () =>\n SELECTABLE_OPTIONS.filter(\n option =>\n !aggregations.some(aggregation => aggregation.operation === option)\n ),\n [aggregations]\n );\n const [selectedOperation, setSelectedOperation] = useState(options[0]);\n const [selectedRanges, setSelectedRanges] = useState<Range[]>([]);\n const changeSettings = useCallback(\n changedSettings => {\n onChange({ ...settings, ...changedSettings });\n },\n [onChange, settings]\n );\n const changeAggregations = useCallback(\n newAggregations => {\n changeSettings({ aggregations: newAggregations });\n },\n [changeSettings]\n );\n\n const changeShowOnTop = useCallback(\n newShowOnTop => {\n changeSettings({ showOnTop: newShowOnTop });\n },\n [changeSettings]\n );\n\n const handleDragStart = useCallback(() => {\n log.debug('handleDragStart');\n\n DragUtils.startDragging();\n }, []);\n\n const handleDragEnd = useCallback(\n ({ destination, source }) => {\n log.debug('handleDragEnd', destination, source);\n\n DragUtils.stopDragging();\n\n if (destination === null) {\n return;\n }\n\n let destinationIndex = destination.index;\n if (source.index < destination.index) {\n destinationIndex += 1;\n }\n\n const newAggregations = [...aggregations];\n const draggedItems = DragUtils.reorder(\n newAggregations,\n selectedRanges,\n newAggregations,\n destinationIndex\n );\n const insertIndex = DragUtils.adjustDestinationIndex(\n destinationIndex,\n selectedRanges\n );\n const newSelectedRanges: Range[] = [\n [insertIndex, insertIndex + draggedItems.length - 1],\n ];\n changeAggregations(newAggregations);\n setSelectedRanges(newSelectedRanges);\n },\n [changeAggregations, aggregations, selectedRanges, setSelectedRanges]\n );\n\n const handleOperationChange = useCallback(\n operation => {\n setSelectedOperation(operation);\n },\n [setSelectedOperation]\n );\n\n const handleAdd = useCallback(() => {\n changeAggregations([\n ...aggregations,\n { operation: selectedOperation, selected: [], invert: true },\n ]);\n }, [aggregations, selectedOperation, changeAggregations]);\n\n const handleDeleteClicked = useCallback(\n (itemIndex: ModelIndex) => {\n changeAggregations(\n aggregations.filter((aggregation, index) => index !== itemIndex)\n );\n },\n [aggregations, changeAggregations]\n );\n\n const handleAggregationSelectionChange = useCallback(\n newSelectedRanges => {\n setSelectedRanges(newSelectedRanges);\n },\n [setSelectedRanges]\n );\n\n const handleAggregationSelect = useCallback(\n itemIndex => {\n const aggregation = aggregations[itemIndex];\n if (!AggregationUtils.isRollupOperation(aggregation.operation)) {\n onEdit(aggregation);\n }\n },\n [aggregations, onEdit]\n );\n\n const handleShowOnTopChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n changeShowOnTop(event.target.value === 'true');\n },\n [changeShowOnTop]\n );\n\n useEffect(\n function setDefaultOperation() {\n if (options.length > 0 && !options.includes(selectedOperation)) {\n setSelectedOperation(options[0]);\n }\n },\n [options, selectedOperation]\n );\n\n const renderAggregation = useCallback(\n ({\n item,\n itemIndex,\n isClone = false,\n selectedCount,\n }: DraggableRenderItemProps<Aggregation>) => {\n const text = item.operation;\n const badgeText = isClone ? `${selectedCount}` : undefined;\n const className = isClone ? 'item-list-item-clone' : undefined;\n const isRollupOperation = AggregationUtils.isRollupOperation(\n item.operation\n );\n const isEditable = !isClone && !isRollupOperation;\n return (\n <>\n <div\n className={classNames(\n 'item-list-item-content',\n 'draggable-item-list-item-content',\n className\n )}\n >\n <span className=\"title\">\n {text}\n {!isRollup && isRollupOperation && (\n <span className=\"small text-warning\">\n <FontAwesomeIcon icon={dhWarningFilled} /> Requires rollup\n </span>\n )}\n </span>\n {DraggableItemList.renderBadge({ text: badgeText })}\n {DraggableItemList.renderHandle()}\n </div>\n {!isClone && (\n <>\n <Button\n kind=\"ghost\"\n className=\"btn-edit\"\n icon={vsEdit}\n tooltip=\"Edit Columns\"\n onClick={() => onEdit(item)}\n disabled={!isEditable}\n />\n <Button\n kind=\"ghost\"\n className=\"btn-delete\"\n icon={vsTrash}\n tooltip=\"Delete Aggregation\"\n onClick={() => handleDeleteClicked(itemIndex)}\n />\n </>\n )}\n </>\n );\n },\n [handleDeleteClicked, onEdit, isRollup]\n );\n\n const isOptionsShown = options.length > 0;\n const isAggregationsShown = aggregations.length > 0;\n\n return (\n <div className=\"aggregations\">\n {isOptionsShown && (\n <div className=\"form-inline\">\n <Select onChange={handleOperationChange} value={selectedOperation}>\n {options.map(option => (\n <Option value={option} key={option}>\n {option}\n </Option>\n ))}\n </Select>\n <button\n type=\"button\"\n className=\"btn btn-link btn-add\"\n onClick={handleAdd}\n >\n <FontAwesomeIcon icon={dhNewCircleLargeFilled} />\n Add Aggregation\n </button>\n </div>\n )}\n {isOptionsShown && isAggregationsShown && <hr />}\n {isAggregationsShown && (\n <>\n {!isRollup && (\n <div className=\"form-inline\">\n <label>Placement: </label>\n <RadioGroup\n onChange={handleShowOnTopChange}\n value={`${showOnTop}`}\n >\n <RadioItem value=\"true\">Top</RadioItem>\n <RadioItem value=\"false\">Bottom</RadioItem>\n </RadioGroup>\n </div>\n )}\n <DragDropContext\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n >\n <DraggableItemList<Aggregation>\n className=\"selected-aggregations\"\n itemCount={aggregations.length}\n items={aggregations}\n renderItem={renderAggregation}\n offset={0}\n onSelectionChange={handleAggregationSelectionChange}\n onSelect={handleAggregationSelect}\n selectedRanges={selectedRanges}\n isMultiSelect\n />\n </DragDropContext>\n </>\n )}\n </div>\n );\n}\n\nexport default Aggregations;\n"],"mappings":"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"}
|