@deephaven/iris-grid 1.11.0 → 1.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/FilterInputField.d.ts +2 -0
- package/dist/FilterInputField.d.ts.map +1 -1
- package/dist/FilterInputField.js +3 -1
- package/dist/FilterInputField.js.map +1 -1
- package/dist/IrisGrid.d.ts +10 -0
- package/dist/IrisGrid.d.ts.map +1 -1
- package/dist/IrisGrid.js +166 -162
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridMetricCalculator.d.ts +33 -1
- package/dist/IrisGridMetricCalculator.d.ts.map +1 -1
- package/dist/IrisGridMetricCalculator.js +96 -0
- package/dist/IrisGridMetricCalculator.js.map +1 -1
- package/dist/IrisGridUtils.d.ts +5 -7
- package/dist/IrisGridUtils.d.ts.map +1 -1
- package/dist/IrisGridUtils.js +5 -3
- package/dist/IrisGridUtils.js.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridUtils.js","names":["GridUtils","DateUtils","TableUtils","Log","assertNotNull","bindAllMethods","EMPTY_ARRAY","EMPTY_MAP","isNotNullOrUndefined","AggregationUtils","AggregationOperation","AdvancedSettings","ColumnHeaderGroup","isPartitionedGridModelProvider","log","module","isPanelStateV1","state","partition","undefined","isPanelStateV2","Array","isArray","partitions","isValidIndex","x","array","length","isDateWrapper","value","asDate","IrisGridUtils","dehydrateGridState","model","gridState","isStuckToBottom","isStuckToRight","movedColumns","movedRows","columns","filter","_ref","to","from","map","_ref2","name","hydrateGridState","customColumns","arguments","customColumnNames","parseCustomColumnNames","columnNames","_ref3","concat","_ref4","getIndex","findIndex","_ref5","dehydrateIrisGridPanelState","irisGridPanelState","isSelectingPartition","advancedSettings","hydrateIrisGridPanelState","Map","DEFAULTS","dehydrateQuickFilters","quickFilters","_ref6","columnIndex","quickFilter","text","dehydrateLong","dehydrateSort","sorts","sort","column","isAbs","direction","extractTableSettings","panelState","inputFilters","irisGridState","advancedFilters","getInputFiltersForColumns","_ref7","type","find","_ref8","columnName","columnType","getFiltersFromFilterMap","filterMap","filters","keys","i","key","item","get","push","getHiddenColumns","userColumnWidths","entries","_ref9","_ref0","customColumn","split","getRemovedCustomColumnNames","oldCustomColumns","oldCustomColumnsNames","oldCustomColumnName","includes","removeSortsInColumns","removeFiltersInColumns","removedColumnNames","_ref1","newFilter","forEach","delete","indexOf","removeColumnFromMovedColumns","_ref10","newMoves","_loop","removedColumnName","removedColumnIndex","moves","j","move","newMove","_objectSpread","fromStart","fromEnd","applyItemMoves","splice","removeColumnsFromSelectDistinctColumns","selectDistinctColumns","getVisibleColumnsInRange","tableColumns","left","right","hiddenColumns","modelIndex","getModelIndex","getPrevVisibleColumns","startIndex","count","unshift","getNextVisibleColumns","getColumnsToFetch","viewportColumns","alwaysFetchColumnNames","columnsToFetch","_ref11","getModelViewportColumns","bufferPages","columnsCenter","bufferWidth","columnsLeft","columnsRight","bufferedColumns","isValidSnapshotRanges","ranges","rangeMap","range","rowMapIndex","startRow","endRow","columnMapIndex","startColumn","endColumn","has","set","matchColumnRanges","join","Number","isInteger","columnsFromRanges","allColumns","columnSet","Set","c","_range$startColumn","_range$endColumn","add","snapshotDataToMatrix","data","rows","result","r","row","rowData","getModelRollupConfig","originalColumns","config","aggregationSettings","_config$columns$lengt","_config$columns","groupingColumns","showConstituents","includeConstituents","showNonAggregatedColumns","includeDescriptions","aggregations","filteredAggregations","_ref12","operation","isRollupProhibited","aggregationColumns","_ref13","selected","invert","isRollupOperation","getOperationColumnNames","aggregationMap","nonAggregatedColumnSet","size","_aggregationMap$Aggre","existingColumns","FIRST","getPendingErrors","pendingDataMap","rowIndex","Error","getColumn","error","getColumnByName","Object","values","_ref14","_ref15","changeFilterColumnNamesToIndexes","_ref16","index","filterConfig","combineFiltersFromList","filterList","a","b","operator","startColumnIndex","combinedText","symbol","getFilterOperatorString","filterText","isCharType","String","fromCharCode","parseInt","parseColumnHeaderGroups","groupsParam","makeColumnHeaderGroup","args","maxDepth","parentMap","groupMap","groups","_ref17","children","originalGroupMap","group","seenChildren","addGroup","_group$children","getColumnIndexByName","existingGroup","childIndexes","depth","childName","childGroup","childIndex","addedGroup","Math","max","headerGroupConfig","flat","columnHeaderGroup","groupNames","_parentMap$get","setParent","convertValueToText","isDateType","date","Date","offset","getTimezoneOffset","offsetDate","getTime","dateText","toISOString","formattedText","replace","substring","constructor","dh","_defineProperty","tableUtils","dehydrateIrisGridState","showOnTop","customColumnFormatMap","columnAlignmentMap","isFilterBarShown","metrics","userRowHeights","conditionalFormats","reverse","rollupConfig","showSearchBar","searchValue","selectedSearchColumns","invertSearchColumns","frozenColumns","columnHeaderGroups","partitionConfig","partitionColumns","dehydrateAdvancedFilters","_ref18","_ref19","width","dehydratePendingDataMap","_item$color","color","dehydratePartitionConfig","hydrateIrisGridState","_ref23","_model$layoutHints","reverseType","formatter","hydrateAdvancedFilters","timeZone","hydrateQuickFilters","hydrateSort","_ref20","_ref21","_ref22","REVERSE_TYPE","POST_SORT","hydratePendingDataMap","layoutHints","columnGroups","hydratePartitionConfig","savedQuickFilters","importedFilters","_ref24","makeQuickFilter","_ref25","advancedFilter","options","dehydrateAdvancedFilterOptions","savedAdvancedFilters","_ref26","hydrateAdvancedFilterOptions","columnRetrieved","makeAdvancedFilter","selectedValues","otherOptions","_objectWithoutProperties","_excluded","dehydrateValue","_excluded2","hydrateValue","_ref27","_ref28","_ref29","columnMap","getColumnIndex","_ref30","_ref31","_ref32","_getColumnIndex","dehydrateDateTime","isLongType","hydrateDateTime","hydrateLong","i18n","DateTimeFormat","format","FULL_DATE_FORMAT","parse","LongWrapper","ofString","dropReverse","columnIndexOrName","sortDirection","Table","hydrateDhSort","sortDescriptor","columnSort","abs","descending","desc","asc","applyTableSettings","table","tableSettings","getFiltersFromInputFilters","partitionColumnNames","partitionColumnName","partitionFilter","eq","FilterValue","applyFilter","applySort","_ref33","_ref34","e","debug","rangeSetFromRanges","rangeSets","slice","RangeSet","ofRange","ofRanges","colorForValue","theme","dateColor","isNumberType","positiveNumberColor","negativeNumberColor","zeroNumberColor","textColor","textAlignForValue"],"sources":["../src/IrisGridUtils.ts"],"sourcesContent":["import {\n type GridRange,\n type GridState,\n GridUtils,\n type ModelIndex,\n type ModelSizeMap,\n type MoveOperation,\n type VisibleIndex,\n} from '@deephaven/grid';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport {\n DateUtils,\n TableUtils,\n type ReverseType,\n type SortDirection,\n type FormattingRule,\n type SortDescriptor,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport {\n assertNotNull,\n bindAllMethods,\n EMPTY_ARRAY,\n EMPTY_MAP,\n isNotNullOrUndefined,\n} from '@deephaven/utils';\nimport AggregationUtils from './sidebar/aggregations/AggregationUtils';\nimport AggregationOperation from './sidebar/aggregations/AggregationOperation';\nimport { type FilterData, type IrisGridState } from './IrisGrid';\nimport {\n type ColumnName,\n type ReadonlyAdvancedFilterMap,\n type ReadonlyQuickFilterMap,\n type InputFilter,\n type CellData,\n type PendingDataMap,\n type UIRow,\n type AdvancedFilterOptions,\n} from './CommonTypes';\nimport { type UIRollupConfig } from './sidebar/RollupRows';\nimport { type AggregationSettings } from './sidebar/aggregations/Aggregations';\nimport { type FormattingRule as SidebarFormattingRule } from './sidebar/conditional-formatting/ConditionalFormattingUtils';\nimport type IrisGridModel from './IrisGridModel';\nimport type AdvancedSettingsType from './sidebar/AdvancedSettingsType';\nimport AdvancedSettings from './sidebar/AdvancedSettings';\nimport ColumnHeaderGroup, {\n type ColumnHeaderGroupConfig,\n} from './ColumnHeaderGroup';\nimport {\n isPartitionedGridModelProvider,\n type PartitionConfig,\n} from './PartitionedGridModel';\nimport { type IrisGridThemeType } from './IrisGridTheme';\n\nconst log = Log.module('IrisGridUtils');\n\nexport type HydratedIrisGridState = Pick<\n IrisGridState,\n | 'advancedFilters'\n | 'aggregationSettings'\n | 'customColumnFormatMap'\n | 'columnAlignmentMap'\n | 'isFilterBarShown'\n | 'quickFilters'\n | 'customColumns'\n | 'reverse'\n | 'rollupConfig'\n | 'showSearchBar'\n | 'searchValue'\n | 'selectDistinctColumns'\n | 'selectedSearchColumns'\n | 'sorts'\n | 'invertSearchColumns'\n | 'pendingDataMap'\n | 'frozenColumns'\n | 'conditionalFormats'\n | 'columnHeaderGroups'\n | 'partitionConfig'\n | 'metrics'\n>;\n\nexport type DehydratedPendingDataMap<T> = [number, { data: [string, T][] }][];\n\nexport type DehydratedAdvancedFilter = [\n number,\n {\n options: AdvancedFilterOptions;\n },\n];\n\nexport type DehydratedQuickFilter = [\n number,\n {\n text: string;\n },\n];\n\nexport type DehydratedCustomColumnFormat = [string, FormattingRule];\n\nexport type DehydratedUserColumnAlignment = [string, CanvasTextAlign];\n\nexport type DehydratedUserColumnWidth = [ColumnName, number];\n\nexport type DehydratedUserRowHeight = [number, number];\n\nexport type DehydratedPartitionConfig = PartitionConfig;\n\n/** @deprecated Use `DehydratedSort` instead */\nexport interface LegacyDehydratedSort {\n column: ModelIndex;\n isAbs: boolean;\n direction: SortDirection;\n}\n\nexport interface DehydratedSort {\n column: ColumnName;\n isAbs: boolean;\n direction: string;\n}\n\nexport interface TableSettings {\n quickFilters?: readonly DehydratedQuickFilter[];\n advancedFilters?: readonly DehydratedAdvancedFilter[];\n inputFilters?: readonly InputFilter[];\n sorts?: readonly (DehydratedSort | LegacyDehydratedSort)[];\n partitions?: unknown[];\n partitionColumns?: ColumnName[];\n}\n\nexport interface DehydratedIrisGridState {\n advancedFilters: readonly DehydratedAdvancedFilter[];\n aggregationSettings: AggregationSettings;\n customColumnFormatMap: readonly DehydratedCustomColumnFormat[];\n columnAlignmentMap: readonly DehydratedUserColumnAlignment[];\n isFilterBarShown: boolean;\n quickFilters: readonly DehydratedQuickFilter[];\n sorts: readonly DehydratedSort[];\n userColumnWidths: readonly DehydratedUserColumnWidth[];\n userRowHeights: readonly DehydratedUserRowHeight[];\n customColumns: readonly ColumnName[];\n conditionalFormats: readonly SidebarFormattingRule[];\n /** @deprecated use `reverse` instead. Can be removed after DHE sanluis release */\n reverseType?: ReverseType;\n reverse: boolean;\n rollupConfig?: UIRollupConfig;\n showSearchBar: boolean;\n searchValue: string;\n selectDistinctColumns: readonly ColumnName[];\n selectedSearchColumns: readonly ColumnName[];\n invertSearchColumns: boolean;\n pendingDataMap: DehydratedPendingDataMap<string | CellData | null>;\n frozenColumns: readonly ColumnName[];\n columnHeaderGroups?: readonly DhType.ColumnGroup[];\n partitionConfig?: DehydratedPartitionConfig;\n}\n\nexport interface DehydratedIrisGridPanelStateV1 {\n isSelectingPartition: boolean;\n partition: string | null;\n advancedSettings: [AdvancedSettingsType, boolean][];\n}\n\nexport interface DehydratedIrisGridPanelStateV2 {\n isSelectingPartition: boolean;\n partitions: (string | null)[];\n advancedSettings: [AdvancedSettingsType, boolean][];\n}\n\nexport type DehydratedIrisGridPanelState =\n | DehydratedIrisGridPanelStateV1\n | DehydratedIrisGridPanelStateV2;\n\nexport function isPanelStateV1(\n state: DehydratedIrisGridPanelState\n): state is DehydratedIrisGridPanelStateV1 {\n return (state as DehydratedIrisGridPanelStateV1).partition !== undefined;\n}\n\nexport function isPanelStateV2(\n state: DehydratedIrisGridPanelState\n): state is DehydratedIrisGridPanelStateV2 {\n return Array.isArray((state as DehydratedIrisGridPanelStateV2).partitions);\n}\n\n/**\n * Checks if an index is valid for the given array\n * @param x The index to check\n * @param array The array\n * @returns True if the index if valid within the array\n */\nfunction isValidIndex(x: number, array: readonly unknown[]): boolean {\n return x >= 0 && x < array.length;\n}\n\nfunction isDateWrapper(value: unknown): value is DhType.DateWrapper {\n return (value as DhType.DateWrapper)?.asDate != null;\n}\n\nexport type HydratedGridState = Pick<\n GridState,\n 'isStuckToBottom' | 'isStuckToRight' | 'movedColumns' | 'movedRows'\n>;\n\nexport type DehydratedGridState = {\n isStuckToBottom: boolean;\n isStuckToRight: boolean;\n movedColumns: readonly {\n from: string | [string, string] | ModelIndex | [ModelIndex, ModelIndex];\n to: string | ModelIndex;\n }[];\n movedRows: readonly MoveOperation[];\n};\n\nclass IrisGridUtils {\n /**\n * Exports the state from Grid component to a JSON stringifiable object.\n * See IrisGridCacheUtil for memoization and comparing dehydrated states.\n * @param model The table model to export the Grid state for\n * @param gridState The state of the Grid to export\n * @returns An object that can be stringified and imported with {{@link hydrateGridState}}\n */\n static dehydrateGridState(\n model: IrisGridModel,\n gridState: HydratedGridState\n ): DehydratedGridState {\n const { isStuckToBottom, isStuckToRight, movedColumns, movedRows } =\n gridState;\n\n const { columns } = model;\n\n return {\n isStuckToBottom,\n isStuckToRight,\n movedColumns: [...movedColumns]\n .filter(\n ({ to, from }) =>\n isValidIndex(to, columns) &&\n ((typeof from === 'number' && isValidIndex(from, columns)) ||\n (Array.isArray(from) &&\n isValidIndex(from[0], columns) &&\n isValidIndex(from[1], columns)))\n )\n .map(({ to, from }) => ({\n to: columns[to].name,\n from: Array.isArray(from)\n ? [columns[from[0]].name, columns[from[1]].name]\n : columns[from].name,\n })),\n movedRows: [...movedRows],\n };\n }\n\n /**\n * Import a state for Grid that was exported with {{@link dehydrateGridState}}\n * @param model The table model to import the state for\n * @param gridState The state of the panel that was saved\n * @returns The gridState props to set on the Grid\n */\n static hydrateGridState(\n model: IrisGridModel,\n gridState: DehydratedGridState,\n customColumns: readonly string[] = []\n ): HydratedGridState {\n const { isStuckToBottom, isStuckToRight, movedColumns, movedRows } =\n gridState;\n\n const { columns } = model;\n const customColumnNames =\n IrisGridUtils.parseCustomColumnNames(customColumns);\n const columnNames = columns\n .map(({ name }) => name)\n .concat(customColumnNames);\n\n return {\n isStuckToBottom,\n isStuckToRight,\n movedColumns: [...movedColumns]\n .map(({ to, from }) => {\n const getIndex = (x: string | number): number =>\n typeof x === 'string'\n ? columnNames.findIndex(name => name === x)\n : x;\n\n return {\n to: getIndex(to),\n from: Array.isArray(from)\n ? ([getIndex(from[0]), getIndex(from[1])] as [number, number])\n : getIndex(from),\n };\n })\n .filter(\n ({ to, from }) =>\n isValidIndex(to, columnNames) &&\n ((typeof from === 'number' && isValidIndex(from, columnNames)) ||\n (Array.isArray(from) &&\n isValidIndex(from[0], columnNames) &&\n isValidIndex(from[1], columnNames)))\n ),\n movedRows: [...movedRows],\n };\n }\n\n /**\n * Export the IrisGridPanel state.\n * @param model The table model the state is being dehydrated with\n * @param irisGridPanelState The current IrisGridPanel state\n * @returns The dehydrated IrisGridPanel state\n */\n static dehydrateIrisGridPanelState(\n model: IrisGridModel,\n irisGridPanelState: {\n // This needs to be changed after IrisGridPanel is done\n isSelectingPartition: boolean;\n partitions: (string | null)[];\n advancedSettings: Map<AdvancedSettingsType, boolean>;\n }\n ): DehydratedIrisGridPanelState {\n const { isSelectingPartition, partitions, advancedSettings } =\n irisGridPanelState;\n\n // Return value will be serialized, should not contain undefined\n return {\n isSelectingPartition,\n partitions,\n advancedSettings: [...advancedSettings],\n };\n }\n\n /**\n * Import the saved IrisGridPanel state.\n * @param model The model the state is being hydrated with\n * @param irisGridPanelState Exported IrisGridPanel state\n * @returns The state to apply to the IrisGridPanel\n */\n static hydrateIrisGridPanelState(\n model: IrisGridModel,\n irisGridPanelState: DehydratedIrisGridPanelState\n ): {\n isSelectingPartition: boolean;\n partitions: (string | null)[];\n advancedSettings: Map<AdvancedSettingsType, boolean>;\n } {\n const { isSelectingPartition, advancedSettings } = irisGridPanelState;\n\n let partitions: (string | null)[] = [];\n if (isPanelStateV2(irisGridPanelState)) {\n partitions = irisGridPanelState.partitions;\n } else if (irisGridPanelState.partition != null) {\n partitions = [irisGridPanelState.partition];\n }\n\n return {\n isSelectingPartition,\n partitions,\n advancedSettings: new Map([\n ...AdvancedSettings.DEFAULTS,\n ...advancedSettings,\n ]),\n };\n }\n\n /**\n * Export the quick filters to JSON striginfiable object\n * @param quickFilters The quick filters to dehydrate\n * @returns The dehydrated quick filters\n */\n static dehydrateQuickFilters(\n quickFilters: ReadonlyQuickFilterMap\n ): DehydratedQuickFilter[] {\n return [...quickFilters].map(([columnIndex, quickFilter]) => {\n const { text } = quickFilter;\n return [columnIndex, { text }];\n });\n }\n\n static dehydrateLong<T>(value: T): string | null {\n return value != null ? `${value}` : null;\n }\n\n /**\n * Export the sorts from the provided table sorts to JSON stringifiable object\n * @param sorts The table sorts\n * @returns The dehydrated sorts\n */\n static dehydrateSort(sorts: readonly SortDescriptor[]): DehydratedSort[] {\n return sorts.map(sort => {\n const { column, isAbs, direction } = sort;\n return {\n column: column.name,\n isAbs,\n direction,\n };\n });\n }\n\n /**\n * Pulls just the table settings from the panel state, eg. filters/sorts\n * @param panelState The dehydrated panel state\n * @returns A dehydrated table settings object, { partition, partitionColumn, advancedFilters, quickFilters, sorts }\n */\n static extractTableSettings<AF, QF, S>(\n panelState: {\n irisGridState: { advancedFilters: AF; quickFilters: QF; sorts: S };\n irisGridPanelState: DehydratedIrisGridPanelState;\n },\n inputFilters: InputFilter[] = []\n ): {\n partitions: unknown[];\n advancedFilters: AF;\n inputFilters: InputFilter[];\n quickFilters: QF;\n sorts: S;\n } {\n const { irisGridPanelState, irisGridState } = panelState;\n const partitions = isPanelStateV2(irisGridPanelState)\n ? irisGridPanelState.partitions\n : [irisGridPanelState.partition];\n const { advancedFilters, quickFilters, sorts } = irisGridState;\n\n return {\n advancedFilters,\n inputFilters,\n partitions,\n quickFilters,\n sorts,\n };\n }\n\n static getInputFiltersForColumns(\n columns: readonly { name: string; type: string }[],\n inputFilters: readonly InputFilter[] = []\n ): InputFilter[] {\n return inputFilters.filter(({ name, type }) =>\n columns.find(\n ({ name: columnName, type: columnType }) =>\n columnName === name && columnType === type\n )\n );\n }\n\n static getFiltersFromFilterMap(\n filterMap: ReadonlyAdvancedFilterMap | ReadonlyQuickFilterMap\n ): DhType.FilterCondition[] {\n const filters = [];\n\n const keys = Array.from(filterMap.keys());\n for (let i = 0; i < keys.length; i += 1) {\n const key = keys[i];\n const item = filterMap.get(key);\n if (item?.filter != null) {\n filters.push(item.filter);\n }\n }\n\n return filters;\n }\n\n /**\n * Get array of hidden column indexes\n * @param userColumnWidths Map of user column widths\n * @returns Array of hidden column indexes\n */\n static getHiddenColumns(userColumnWidths: ModelSizeMap): ModelIndex[] {\n return [...userColumnWidths.entries()]\n .filter(([, value]) => value === 0)\n .map(([key]) => key);\n }\n\n static parseCustomColumnNames(\n customColumns: readonly ColumnName[]\n ): ColumnName[] {\n return customColumns.map(customColumn => customColumn.split('=')[0]);\n }\n\n static getRemovedCustomColumnNames(\n oldCustomColumns: readonly ColumnName[],\n customColumns: readonly ColumnName[]\n ): ColumnName[] {\n const oldCustomColumnsNames =\n IrisGridUtils.parseCustomColumnNames(oldCustomColumns);\n const customColumnNames =\n IrisGridUtils.parseCustomColumnNames(customColumns);\n return oldCustomColumnsNames.filter(\n oldCustomColumnName => !customColumnNames.includes(oldCustomColumnName)\n );\n }\n\n static removeSortsInColumns(\n sorts: readonly SortDescriptor[],\n columnNames: readonly string[]\n ): readonly SortDescriptor[] {\n return sorts.filter(sort => !columnNames.includes(sort.column.name));\n }\n\n static removeFiltersInColumns<T>(\n columns: readonly DhType.Column[],\n filters: ReadonlyMap<number, T>,\n removedColumnNames: readonly ColumnName[]\n ): Map<number, T> {\n const columnNames = columns.map(({ name }) => name);\n const newFilter = new Map(filters);\n removedColumnNames.forEach(columnName =>\n newFilter.delete(columnNames.indexOf(columnName))\n );\n return newFilter;\n }\n\n static removeColumnFromMovedColumns(\n columns: readonly DhType.Column[],\n movedColumns: readonly MoveOperation[],\n removedColumnNames: readonly ColumnName[]\n ): MoveOperation[] {\n const columnNames = columns.map(({ name }) => name);\n let newMoves = [...movedColumns];\n for (let i = 0; i < removedColumnNames.length; i += 1) {\n const removedColumnName = removedColumnNames[i];\n let removedColumnIndex = columnNames.findIndex(\n name => name === removedColumnName\n );\n const moves: MoveOperation[] = [];\n for (let j = 0; j < newMoves.length; j += 1) {\n const move = newMoves[j];\n const newMove = { ...move };\n let [fromStart, fromEnd] = Array.isArray(move.from)\n ? move.from\n : [move.from, move.from];\n\n if (removedColumnIndex <= move.to) {\n newMove.to -= 1;\n }\n\n // If equal to fromStart, the new fromStart would stay the same\n // It's just the next element in the range which will have the same index after deletion\n if (removedColumnIndex < fromStart) {\n fromStart -= 1;\n }\n\n if (removedColumnIndex <= fromEnd) {\n fromEnd -= 1;\n }\n\n if (fromStart <= fromEnd && fromStart !== newMove.to) {\n if (fromStart === fromEnd) {\n moves.push({ ...newMove, from: fromStart });\n } else {\n moves.push({ ...newMove, from: [fromStart, fromEnd] });\n }\n }\n\n // get the next index of the removed column after the move is applied\n // eslint-disable-next-line prefer-destructuring\n removedColumnIndex = GridUtils.applyItemMoves(\n removedColumnIndex,\n removedColumnIndex,\n [move]\n )[0][0];\n }\n\n newMoves = moves;\n columnNames.splice(\n columnNames.findIndex(name => name === removedColumnName),\n 1\n );\n }\n return newMoves;\n }\n\n static removeColumnsFromSelectDistinctColumns(\n selectDistinctColumns: readonly ColumnName[],\n removedColumnNames: readonly ColumnName[]\n ): ColumnName[] {\n return selectDistinctColumns.filter(\n columnName => !removedColumnNames.includes(columnName)\n );\n }\n\n static getVisibleColumnsInRange(\n tableColumns: readonly DhType.Column[],\n left: number,\n right: number,\n movedColumns: readonly MoveOperation[],\n hiddenColumns: readonly number[]\n ): DhType.Column[] {\n const columns: DhType.Column[] = [];\n for (let i = left; i <= right; i += 1) {\n const modelIndex = GridUtils.getModelIndex(i, movedColumns);\n if (\n modelIndex >= 0 &&\n modelIndex < tableColumns.length &&\n !hiddenColumns.includes(modelIndex)\n ) {\n columns.push(tableColumns[modelIndex]);\n }\n }\n return columns;\n }\n\n static getPrevVisibleColumns(\n tableColumns: readonly DhType.Column[],\n startIndex: VisibleIndex,\n count: number,\n movedColumns: readonly MoveOperation[],\n hiddenColumns: readonly VisibleIndex[]\n ): DhType.Column[] {\n const columns = [];\n let i = startIndex;\n while (i >= 0 && columns.length < count) {\n const modelIndex = GridUtils.getModelIndex(i, movedColumns);\n if (\n modelIndex >= 0 &&\n modelIndex < tableColumns.length &&\n !hiddenColumns.includes(modelIndex)\n ) {\n columns.unshift(tableColumns[modelIndex]);\n }\n i -= 1;\n }\n return columns;\n }\n\n static getNextVisibleColumns(\n tableColumns: readonly DhType.Column[],\n startIndex: VisibleIndex,\n count: number,\n movedColumns: readonly MoveOperation[],\n hiddenColumns: readonly VisibleIndex[]\n ): DhType.Column[] {\n const columns = [];\n let i = startIndex;\n while (i < tableColumns.length && columns.length < count) {\n const modelIndex = GridUtils.getModelIndex(i, movedColumns);\n if (\n modelIndex >= 0 &&\n modelIndex < tableColumns.length &&\n !hiddenColumns.includes(modelIndex)\n ) {\n columns.push(tableColumns[modelIndex]);\n }\n i += 1;\n }\n return columns;\n }\n\n static getColumnsToFetch(\n tableColumns: readonly DhType.Column[],\n viewportColumns: readonly DhType.Column[],\n alwaysFetchColumnNames: readonly ColumnName[]\n ): DhType.Column[] {\n const columnsToFetch = [...viewportColumns];\n alwaysFetchColumnNames.forEach(columnName => {\n const column = tableColumns.find(({ name }) => name === columnName);\n if (column != null && !viewportColumns.includes(column)) {\n columnsToFetch.push(column);\n }\n });\n return columnsToFetch;\n }\n\n static getModelViewportColumns(\n columns: readonly DhType.Column[],\n left: number | null,\n right: number | null,\n movedColumns: readonly MoveOperation[],\n hiddenColumns: readonly VisibleIndex[] = [],\n alwaysFetchColumnNames: readonly ColumnName[] = [],\n bufferPages = 0\n ): DhType.Column[] | undefined {\n if (left == null || right == null) {\n return undefined;\n }\n\n const columnsCenter = IrisGridUtils.getVisibleColumnsInRange(\n columns,\n left,\n right,\n movedColumns,\n hiddenColumns\n );\n const bufferWidth = columnsCenter.length * bufferPages;\n const columnsLeft = IrisGridUtils.getPrevVisibleColumns(\n columns,\n left - 1,\n bufferWidth,\n movedColumns,\n hiddenColumns\n );\n const columnsRight = IrisGridUtils.getNextVisibleColumns(\n columns,\n right + 1,\n bufferWidth,\n movedColumns,\n hiddenColumns\n );\n\n const bufferedColumns = [...columnsLeft, ...columnsCenter, ...columnsRight];\n\n return IrisGridUtils.getColumnsToFetch(\n columns,\n bufferedColumns,\n alwaysFetchColumnNames\n );\n }\n\n /**\n * Validate whether the ranges passed in are valid to take a snapshot from.\n * Multiple selections are valid if all of the selected rows have the same columns selected.\n *\n * @param ranges The ranges to validate\n * @returns True if the ranges are valid, false otherwise\n */\n static isValidSnapshotRanges(ranges: readonly GridRange[]): boolean {\n if (ranges == null || ranges.length === 0) {\n return false;\n }\n\n // To verify all the rows selected have the same set of columns selected, build a map with string representations\n // of each range.\n const rangeMap = new Map();\n for (let i = 0; i < ranges.length; i += 1) {\n const range = ranges[i];\n const rowMapIndex = `${range.startRow}:${range.endRow}`;\n const columnMapIndex = `${range.startColumn}:${range.endColumn}`;\n if (!rangeMap.has(rowMapIndex)) {\n rangeMap.set(rowMapIndex, []);\n }\n rangeMap.get(rowMapIndex).push(columnMapIndex);\n }\n\n const keys = [...rangeMap.keys()];\n const matchColumnRanges = rangeMap.get(keys[0]).sort().join(',');\n for (let i = 1; i < keys.length; i += 1) {\n if (rangeMap.get(keys[i]).sort().join(',') !== matchColumnRanges) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Check if the provided value is a valid table index\n * @param value A value to check if it's a valid table index\n */\n static isValidIndex(value: unknown): boolean {\n if (!Number.isInteger(value)) {\n return false;\n }\n if (!(typeof value === 'number')) {\n return false;\n }\n return value >= 0;\n }\n\n /**\n * Returns all columns used in any of the ranges provided\n * @param ranges The model ranges to get columns for\n * @param allColumns All the columns to pull from\n * @returns The columns selected in the range\n */\n static columnsFromRanges(\n ranges: readonly GridRange[],\n allColumns: readonly DhType.Column[]\n ): DhType.Column[] {\n if (ranges == null || ranges.length === 0) {\n return [];\n }\n if (ranges[0].startColumn === null && ranges[0].endColumn === null) {\n // Snapshot of all the columns\n return [...allColumns];\n }\n\n const columnSet = new Set<ModelIndex>();\n for (let i = 0; i < ranges.length; i += 1) {\n const range = ranges[i];\n assertNotNull(range.startColumn);\n assertNotNull(range.endColumn);\n for (\n let c = range.startColumn ?? 0;\n c <= (range.endColumn ?? allColumns.length - 1);\n c += 1\n ) {\n columnSet.add(c);\n }\n }\n return [...columnSet].map(c => allColumns[c]);\n }\n\n /**\n * Transforms an iris data snapshot into a simple data matrix\n * @param data The Iris formatted table data\n * @returns A matrix of the values of the data\n */\n static snapshotDataToMatrix(data: DhType.TableData): unknown[][] {\n const { columns, rows } = data;\n const result = [];\n for (let r = 0; r < rows.length; r += 1) {\n const row = rows[r];\n const rowData = [];\n for (let c = 0; c < columns.length; c += 1) {\n const column = columns[c];\n const value = row.get(column);\n rowData.push(value);\n }\n result.push(rowData);\n }\n return result;\n }\n\n /**\n * Hydrate model rollup config\n * @param originalColumns Original model columns\n * @param config Dehydrated rollup config\n * @param aggregationSettings Aggregation settings\n * @returns Rollup config for the model\n */\n static getModelRollupConfig(\n originalColumns: readonly DhType.Column[],\n config: UIRollupConfig | undefined,\n aggregationSettings: AggregationSettings\n ): DhType.RollupConfig | null {\n if ((config?.columns?.length ?? 0) === 0) {\n return null;\n }\n\n const {\n columns: groupingColumns = [],\n showConstituents: includeConstituents = true,\n showNonAggregatedColumns = true,\n includeDescriptions = true,\n } = config ?? {};\n const { aggregations = [] } = aggregationSettings ?? {};\n const filteredAggregations = aggregations.filter(\n ({ operation }) => !AggregationUtils.isRollupProhibited(operation)\n );\n const aggregationColumns = filteredAggregations.map(\n ({ operation, selected, invert }) =>\n AggregationUtils.isRollupOperation(operation)\n ? []\n : AggregationUtils.getOperationColumnNames(\n originalColumns,\n operation,\n selected,\n invert\n )\n );\n\n const aggregationMap = {} as Record<AggregationOperation, string[]>;\n // Aggregation columns should show first, add them first\n for (let i = 0; i < filteredAggregations.length; i += 1) {\n aggregationMap[filteredAggregations[i].operation] = aggregationColumns[i];\n }\n\n if (showNonAggregatedColumns) {\n // Filter out any column that already has an aggregation or grouping\n const nonAggregatedColumnSet = new Set(\n originalColumns\n .map(c => c.name)\n .filter(name => !groupingColumns.includes(name))\n );\n aggregationColumns.forEach(columns => {\n columns.forEach(name => nonAggregatedColumnSet.delete(name));\n });\n\n if (nonAggregatedColumnSet.size > 0) {\n const existingColumns =\n aggregationMap[AggregationOperation.FIRST] ?? [];\n aggregationMap[AggregationOperation.FIRST] = [\n ...existingColumns,\n ...nonAggregatedColumnSet,\n ];\n }\n }\n\n return {\n groupingColumns,\n includeConstituents,\n includeDescriptions,\n aggregations: aggregationMap,\n };\n }\n\n /**\n * @param pendingDataMap Map of pending data\n * @returns A map with the errors in the pending data\n */\n static getPendingErrors(pendingDataMap: Map<number, UIRow>): void {\n pendingDataMap.forEach((row, rowIndex) => {\n if (!IrisGridUtils.isValidIndex(rowIndex)) {\n throw new Error(`Invalid rowIndex ${rowIndex}`);\n }\n\n const { data } = row;\n data.forEach((value, columnIndex) => {\n if (!IrisGridUtils.isValidIndex(columnIndex)) {\n throw new Error(`Invalid columnIndex ${columnIndex}`);\n }\n });\n });\n }\n\n /**\n * Retrieves a column from the provided array at the index, or `null` and logs an error if it's invalid\n *\n * @param columns The columns to get the column from\n * @param columnIndex The column index to get\n */\n static getColumn(\n columns: readonly DhType.Column[],\n columnIndex: ModelIndex\n ): DhType.Column | null {\n if (columnIndex < columns.length) {\n return columns[columnIndex];\n }\n\n log.error('Unable to retrieve column', columnIndex, '>=', columns.length);\n\n return null;\n }\n\n /**\n * Retrieves a column from the provided array matching the name, or `null` and logs an error if not found\n * @param columns The columns to get the column from\n * @param columnName The column name to retrieve\n */\n static getColumnByName(\n columns: readonly DhType.Column[],\n columnName: ColumnName\n ): DhType.Column | undefined {\n // Columns can contain ColumnBy sources with negative indexes\n const column = Object.values(columns).find(\n ({ name }) => name === columnName\n );\n if (column == null) {\n log.error(\n 'Unable to retrieve column by name',\n columnName,\n columns.map(({ name }) => name)\n );\n }\n\n return column;\n }\n\n /**\n * Get filter configs with column names changed to indexes, exclude missing columns\n * @param columns The columns to get column indexes from\n * @param filters Filter configs\n * @returns Updated filter configs with column names changed to indexes\n */\n static changeFilterColumnNamesToIndexes<T>(\n columns: readonly DhType.Column[],\n filters: { name: ColumnName; filter: T }[]\n ): [number, T][] {\n return filters\n .map(({ name, filter }): null | [number, T] => {\n const index = columns.findIndex(column => column.name === name);\n return index < 0 ? null : [index, filter];\n })\n .filter(filterConfig => filterConfig != null) as [number, T][];\n }\n\n /**\n * @param columnType The column type that the filters will be applied to.\n * @param filterList The list of filters to be combined.\n * @returns The combination of the filters in filterList as text.\n */\n static combineFiltersFromList(\n columnType: string | null,\n filterList: FilterData[]\n ): string {\n filterList.sort((a, b) => {\n // move all 'equals' comparisons to end of list\n if (a.operator === 'eq' && b.operator !== 'eq') {\n return 1;\n }\n if (a.operator !== 'eq' && b.operator === 'eq') {\n return -1;\n }\n return a.startColumnIndex - b.startColumnIndex;\n });\n\n let combinedText = '';\n for (let i = 0; i < filterList.length; i += 1) {\n const { text, value, operator } = filterList[i];\n if (value !== undefined) {\n let symbol = '';\n if (operator !== undefined) {\n if (value == null && operator === 'eq') {\n symbol = '=';\n } else if (operator !== 'eq') {\n if (operator === 'startsWith' || operator === 'endsWith') {\n symbol = '*';\n } else {\n symbol = TableUtils.getFilterOperatorString(operator);\n }\n }\n }\n\n let filterText = `${symbol}${text}`;\n if (operator === 'startsWith') {\n filterText = `${text}${symbol}`;\n }\n if (\n columnType != null &&\n value !== null &&\n TableUtils.isCharType(columnType)\n ) {\n filterText = `${symbol}${String.fromCharCode(parseInt(text, 10))}`;\n }\n if (i !== 0) {\n combinedText += operator === 'eq' ? ' || ' : ' && ';\n }\n combinedText += filterText;\n }\n }\n return combinedText;\n }\n\n /**\n * Parses the column header groups provided.\n * If undefined, should provide default groups such as from layoutHints\n *\n * @returns Object containing groups array, max depth, map of name to parent group, and map of name to group\n */\n static parseColumnHeaderGroups<\n T extends ColumnHeaderGroup,\n C extends ColumnHeaderGroupConfig,\n >(\n model: IrisGridModel,\n groupsParam: readonly (DhType.ColumnGroup | T)[],\n makeColumnHeaderGroup: (args: C) => T = (args: C) =>\n new ColumnHeaderGroup(args) as T\n ): {\n groups: T[];\n maxDepth: number;\n parentMap: Map<string, T>;\n groupMap: Map<string, T>;\n } {\n let maxDepth = 1;\n const parentMap: Map<string, T> = new Map();\n const groupMap: Map<string, T> = new Map();\n\n // Remove any empty groups before parsing\n const groups = groupsParam?.filter(\n ({ children }) => children != null && children.length > 0\n );\n\n if (groups.length === 0) {\n return { groups: [], maxDepth, parentMap, groupMap };\n }\n\n const originalGroupMap = new Map(groups.map(group => [group.name, group]));\n const seenChildren = new Set<string>();\n\n const addGroup = (group: DhType.ColumnGroup | T): T => {\n const { name } = group;\n\n assertNotNull(name, 'Column header group has no name');\n\n const columnIndex = model.getColumnIndexByName(name);\n // Groups cannot have names matching columns to avoid parent-child collision\n // unless they refer to ColumnBy sources with negative indexes\n if (columnIndex != null && columnIndex >= 0) {\n throw new Error(`Column header group has same name as column: ${name}`);\n }\n\n const existingGroup = groupMap.get(name);\n\n if (existingGroup) {\n return existingGroup;\n }\n\n const childIndexes: T['childIndexes'] = [];\n let depth = 1;\n\n if (group.children == null) {\n throw new Error(`Column header group ${name} has no children`);\n }\n\n group.children.forEach(childName => {\n if (seenChildren.has(childName)) {\n throw new Error(\n `Column group child ${childName} specified in multiple groups`\n );\n }\n seenChildren.add(childName);\n\n const childGroup = originalGroupMap.get(childName);\n const childIndex = model.getColumnIndexByName(childName);\n if (childGroup) {\n // Adding another column header group\n const addedGroup = addGroup(childGroup);\n childIndexes.push(...addedGroup.childIndexes);\n depth = Math.max(depth, addedGroup.depth + 1);\n } else if (childIndex != null) {\n // Adding a base column\n childIndexes.push(childIndex);\n depth = Math.max(depth, 1);\n } else {\n throw new Error(`Unknown child ${childName} in group ${name}`);\n }\n });\n\n const headerGroupConfig = {\n ...(group as C),\n name,\n children: group.children,\n depth,\n childIndexes: childIndexes.flat(),\n };\n\n const columnHeaderGroup = makeColumnHeaderGroup(headerGroupConfig);\n\n groupMap.set(name, columnHeaderGroup);\n group.children?.forEach(childName =>\n parentMap.set(childName, columnHeaderGroup)\n );\n\n maxDepth = Math.max(maxDepth, columnHeaderGroup.depth + 1);\n return columnHeaderGroup;\n };\n\n const groupNames = new Set();\n\n groups.forEach(group => {\n const { name } = group;\n if (groupNames.has(name)) {\n throw new Error(`Duplicate column group name: ${name}`);\n }\n groupNames.add(name);\n addGroup(group);\n });\n\n groupMap.forEach(group => {\n group.setParent(parentMap.get(group.name)?.name);\n });\n\n return { groups: [...groupMap.values()], maxDepth, groupMap, parentMap };\n }\n\n /**\n * @param value The value of the cell in a column\n * @param columnType The type of the column\n * @returns The value of the cell converted to text\n */\n static convertValueToText(value: unknown, columnType: string): string {\n if (\n columnType != null &&\n TableUtils.isCharType(columnType) &&\n value != null &&\n typeof value === 'number'\n ) {\n return String.fromCharCode(value);\n }\n if (TableUtils.isDateType(columnType) && isDateWrapper(value)) {\n const date = new Date(value.asDate());\n const offset = date.getTimezoneOffset();\n const offsetDate = new Date(date.getTime() - offset * 60 * 1000);\n const dateText = offsetDate.toISOString();\n const formattedText = dateText.replace('T', ' ').substring(0, 23);\n return formattedText;\n }\n if (value == null) {\n return '';\n }\n return `${value}`;\n }\n\n private dh: typeof DhType;\n\n private tableUtils: TableUtils;\n\n constructor(dh: typeof DhType) {\n this.dh = dh;\n this.tableUtils = new TableUtils(dh);\n bindAllMethods(this);\n }\n\n /**\n * Exports the state from IrisGrid to a JSON stringifiable object.\n * See IrisGridCacheUtil for memoization and comparing dehydrated states.\n * @param model The table model to export the state for\n * @param irisGridState The current state of the IrisGrid\n */\n dehydrateIrisGridState(\n model: IrisGridModel,\n irisGridState: HydratedIrisGridState\n ): DehydratedIrisGridState {\n const {\n aggregationSettings = { aggregations: EMPTY_ARRAY, showOnTop: false },\n advancedFilters,\n customColumnFormatMap,\n columnAlignmentMap = EMPTY_MAP,\n isFilterBarShown,\n metrics: { userColumnWidths, userRowHeights } = {\n userColumnWidths: EMPTY_MAP,\n userRowHeights: EMPTY_MAP,\n },\n quickFilters,\n customColumns,\n conditionalFormats = EMPTY_ARRAY,\n reverse,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns = EMPTY_ARRAY,\n selectedSearchColumns,\n sorts,\n invertSearchColumns,\n pendingDataMap = EMPTY_MAP,\n frozenColumns,\n columnHeaderGroups,\n partitionConfig,\n } = irisGridState;\n const { columns } = model;\n const partitionColumns = isPartitionedGridModelProvider(model)\n ? model.partitionColumns\n : [];\n\n // Return value will be serialized, should not contain undefined\n return {\n advancedFilters: this.dehydrateAdvancedFilters(columns, advancedFilters),\n aggregationSettings,\n customColumnFormatMap: [...customColumnFormatMap],\n columnAlignmentMap: [...columnAlignmentMap],\n isFilterBarShown,\n quickFilters: IrisGridUtils.dehydrateQuickFilters(quickFilters),\n sorts: IrisGridUtils.dehydrateSort(sorts),\n userColumnWidths: [...userColumnWidths]\n .filter(\n ([columnIndex]) =>\n columnIndex != null &&\n columnIndex >= 0 &&\n columnIndex < columns.length\n )\n .map(([columnIndex, width]) => [columns[columnIndex].name, width]),\n userRowHeights: [...userRowHeights],\n customColumns: [...customColumns],\n conditionalFormats: [...conditionalFormats],\n reverse,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns: [...selectDistinctColumns],\n selectedSearchColumns,\n invertSearchColumns,\n pendingDataMap: this.dehydratePendingDataMap(columns, pendingDataMap),\n frozenColumns,\n columnHeaderGroups: columnHeaderGroups?.map(item => ({\n name: item.name,\n children: item.children,\n color: item.color ?? null,\n })),\n partitionConfig: this.dehydratePartitionConfig(\n partitionColumns,\n partitionConfig\n ),\n };\n }\n\n /**\n * Import a state for IrisGrid that was exported with {{@link dehydrateIrisGridState}}\n * @param model The table model to import the state with\n * @param irisGridState The saved IrisGrid state\n */\n hydrateIrisGridState(\n model: IrisGridModel,\n irisGridState: DehydratedIrisGridState\n ): Omit<HydratedIrisGridState, 'metrics'> & {\n userColumnWidths: ModelSizeMap;\n userRowHeights: ModelSizeMap;\n } {\n const {\n advancedFilters,\n aggregationSettings = { aggregations: [], showOnTop: false },\n customColumnFormatMap,\n columnAlignmentMap = [],\n isFilterBarShown,\n quickFilters,\n sorts,\n customColumns,\n conditionalFormats,\n userColumnWidths,\n userRowHeights,\n reverseType,\n reverse,\n rollupConfig = undefined,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns = true,\n pendingDataMap = [],\n frozenColumns,\n columnHeaderGroups,\n partitionConfig,\n } = irisGridState;\n const { columns, formatter } = model;\n const partitionColumns = isPartitionedGridModelProvider(model)\n ? model.partitionColumns\n : [];\n return {\n advancedFilters: this.hydrateAdvancedFilters(\n columns,\n advancedFilters,\n formatter.timeZone\n ),\n aggregationSettings,\n customColumnFormatMap: new Map(customColumnFormatMap),\n columnAlignmentMap: new Map(columnAlignmentMap),\n isFilterBarShown,\n quickFilters: this.hydrateQuickFilters(\n columns,\n quickFilters,\n formatter.timeZone\n ),\n sorts: this.hydrateSort(columns, sorts, true),\n userColumnWidths: new Map(\n userColumnWidths\n .map(\n ([column, width]: [string | number, number]): [number, number] => {\n if (\n typeof column === 'string' ||\n (column as unknown) instanceof String\n ) {\n return [\n columns.findIndex(({ name }) => name === column),\n width,\n ];\n }\n return [column, width];\n }\n )\n .filter(\n ([column]) =>\n column != null && column >= 0 && column < columns.length\n )\n ),\n customColumns,\n conditionalFormats,\n userRowHeights: new Map(userRowHeights),\n reverse: reverseType === TableUtils.REVERSE_TYPE.POST_SORT || reverse,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns,\n pendingDataMap: this.hydratePendingDataMap(\n columns,\n pendingDataMap\n ) as PendingDataMap<UIRow>,\n frozenColumns,\n columnHeaderGroups: IrisGridUtils.parseColumnHeaderGroups(\n model,\n columnHeaderGroups ?? model.layoutHints?.columnGroups ?? []\n ).groups,\n partitionConfig: this.hydratePartitionConfig(\n partitionColumns,\n partitionConfig\n ),\n };\n }\n\n /**\n * Import the saved quick filters to apply to the columns. Does not actually apply the filters.\n * @param columns The columns the filters will be applied to\n * @param savedQuickFilters Exported quick filters definitions\n * @param timeZone The time zone to make this value in if it is a date type. E.g. America/New_York\n * @returns The quick filters to apply to the columns\n */\n hydrateQuickFilters(\n columns: readonly DhType.Column[],\n savedQuickFilters: readonly DehydratedQuickFilter[],\n timeZone?: string\n ): ReadonlyQuickFilterMap {\n const importedFilters = savedQuickFilters.map(\n ([columnIndex, quickFilter]: DehydratedQuickFilter): [\n number,\n { text: string; filter: DhType.FilterCondition | null },\n ] => {\n const { text } = quickFilter;\n\n let filter = null;\n try {\n const column = IrisGridUtils.getColumn(columns, columnIndex);\n if (column != null) {\n filter = this.tableUtils.makeQuickFilter(column, text, timeZone);\n }\n } catch (error) {\n log.error('hydrateQuickFilters error with', text, error);\n }\n\n return [columnIndex, { text, filter }];\n }\n );\n\n return new Map(importedFilters);\n }\n\n /**\n * Export the advanced filters from the provided columns to JSON striginfiable object\n * @param columns The columns for the filters\n * @param advancedFilters The advanced filters to dehydrate\n * @returns The dehydrated advanced filters\n */\n dehydrateAdvancedFilters(\n columns: readonly DhType.Column[],\n advancedFilters: ReadonlyAdvancedFilterMap\n ): DehydratedAdvancedFilter[] {\n return [...advancedFilters].map(([columnIndex, advancedFilter]) => {\n const column = IrisGridUtils.getColumn(columns, columnIndex);\n assertNotNull(column);\n const options = this.dehydrateAdvancedFilterOptions(\n column,\n advancedFilter.options\n );\n return [columnIndex, { options }];\n });\n }\n\n /**\n * Import the saved advanced filters to apply to the columns. Does not actually apply the filters.\n * @param columns The columns the filters will be applied to\n * @param savedAdvancedFilters Exported advanced filters definitions\n * @param timeZone The time zone to make this filter in if it is a date type. E.g. America/New_York\n * @returns The advanced filters to apply to the columns\n */\n hydrateAdvancedFilters(\n columns: readonly DhType.Column[],\n savedAdvancedFilters: readonly DehydratedAdvancedFilter[],\n timeZone: string\n ): ReadonlyAdvancedFilterMap {\n const importedFilters = savedAdvancedFilters.map(\n ([columnIndex, advancedFilter]: DehydratedAdvancedFilter): [\n number,\n {\n options: AdvancedFilterOptions;\n filter: DhType.FilterCondition | null;\n },\n ] => {\n const column = IrisGridUtils.getColumn(columns, columnIndex);\n assertNotNull(column);\n const options = this.hydrateAdvancedFilterOptions(\n column,\n advancedFilter.options\n );\n let filter = null;\n\n try {\n const columnRetrieved = IrisGridUtils.getColumn(columns, columnIndex);\n if (columnRetrieved != null) {\n filter = this.tableUtils.makeAdvancedFilter(\n column,\n options,\n timeZone\n );\n }\n } catch (error) {\n log.error('hydrateAdvancedFilters error with', options, error);\n }\n\n return [columnIndex, { options, filter }];\n }\n );\n\n return new Map(importedFilters);\n }\n\n dehydrateAdvancedFilterOptions(\n column: DhType.Column,\n options: AdvancedFilterOptions\n ): AdvancedFilterOptions {\n const { selectedValues, ...otherOptions } = options;\n return {\n selectedValues: selectedValues?.map((value: unknown) =>\n this.dehydrateValue(value, column?.type)\n ),\n ...otherOptions,\n };\n }\n\n hydrateAdvancedFilterOptions(\n column: DhType.Column,\n options: AdvancedFilterOptions\n ): AdvancedFilterOptions {\n const { selectedValues, ...otherOptions } = options;\n return {\n selectedValues: selectedValues?.map(value =>\n this.hydrateValue(value, column?.type)\n ),\n ...otherOptions,\n };\n }\n\n dehydratePendingDataMap(\n columns: readonly DhType.Column[],\n pendingDataMap: ReadonlyMap<\n ModelIndex,\n {\n data: Map<ModelIndex | ColumnName, CellData | string>;\n }\n >\n ): DehydratedPendingDataMap<CellData | string | null> {\n return [...pendingDataMap].map(([rowIndex, { data }]) => [\n rowIndex,\n {\n data: [...data]\n .filter(([c]) => typeof c === 'number')\n .map(([c, value]) => [\n columns[c as number].name,\n this.dehydrateValue(value, columns[c as number].type),\n ]),\n },\n ]);\n }\n\n hydratePendingDataMap(\n columns: readonly DhType.Column[],\n pendingDataMap: DehydratedPendingDataMap<CellData | string | null>\n ): Map<\n number,\n {\n data: Map<\n ModelIndex | null,\n string | CellData | DhType.LongWrapper | null\n >;\n }\n > {\n const columnMap = new Map<ColumnName, number>();\n const getColumnIndex = (columnName: ColumnName): number | undefined => {\n if (!columnMap.has(columnName)) {\n columnMap.set(\n columnName,\n columns.findIndex(({ name }) => name === columnName)\n );\n }\n return columnMap.get(columnName);\n };\n\n return new Map(\n pendingDataMap.map(\n ([rowIndex, { data }]: [\n number,\n { data: [string, CellData | string | null][] },\n ]) => [\n rowIndex,\n {\n data: new Map(\n data.map(([columnName, value]) => {\n const index = getColumnIndex(columnName);\n assertNotNull(index);\n return [\n getColumnIndex(columnName) ?? null,\n this.hydrateValue(value, columns[index].type),\n ];\n })\n ),\n },\n ]\n )\n );\n }\n\n dehydratePartitionConfig(\n partitionColumns: readonly DhType.Column[],\n partitionConfig: PartitionConfig | undefined\n ): PartitionConfig | undefined {\n if (partitionConfig == null) {\n return partitionConfig;\n }\n\n return {\n ...partitionConfig,\n partitions: partitionConfig.partitions.map((partition, index) =>\n this.dehydrateValue(partition, partitionColumns[index].type)\n ),\n };\n }\n\n hydratePartitionConfig(\n partitionColumns: readonly DhType.Column[],\n partitionConfig: PartitionConfig | undefined\n ): PartitionConfig | undefined {\n if (partitionConfig == null) {\n return partitionConfig;\n }\n\n return {\n ...partitionConfig,\n partitions: partitionConfig.partitions.map((partition, index) =>\n this.hydrateValue(partition, partitionColumns[index].type)\n ),\n };\n }\n\n /**\n * Dehydrates/serializes a value for storage.\n * @param value The value to dehydrate\n * @param columnType The column type\n */\n dehydrateValue<T>(value: T, columnType: string): string | T | null {\n if (TableUtils.isDateType(columnType)) {\n return this.dehydrateDateTime(\n value as unknown as number | DhType.DateWrapper | Date\n );\n }\n\n if (TableUtils.isLongType(columnType)) {\n return IrisGridUtils.dehydrateLong(value);\n }\n\n return value;\n }\n\n /**\n * Hydrate a value from it's serialized state\n * @param value The dehydrated value that needs to be hydrated\n * @param columnType The type of column\n */\n hydrateValue<T>(\n value: T,\n columnType: string\n ): DhType.DateWrapper | DhType.LongWrapper | T | null {\n if (TableUtils.isDateType(columnType)) {\n return this.hydrateDateTime(value as unknown as string);\n }\n\n if (TableUtils.isLongType(columnType)) {\n return this.hydrateLong(value as unknown as string);\n }\n\n return value;\n }\n\n dehydrateDateTime(value: number | DhType.DateWrapper | Date): string | null {\n return value != null\n ? this.dh.i18n.DateTimeFormat.format(DateUtils.FULL_DATE_FORMAT, value)\n : null;\n }\n\n hydrateDateTime(value: string): DhType.DateWrapper | null {\n return value != null\n ? this.dh.i18n.DateTimeFormat.parse(DateUtils.FULL_DATE_FORMAT, value)\n : null;\n }\n\n hydrateLong(value: string): DhType.LongWrapper | null {\n return value != null ? this.dh.LongWrapper.ofString(value) : null;\n }\n\n /**\n * Import the saved sorts to apply to the model. Does not actually apply the sort.\n * @param columns The columns the sorts will be applied to\n * @param sorts Exported sort definitions\n * @param dropReverse If true, drop reverse sort descriptors from the result\n * @returns The sort descriptors to apply to the model\n */\n hydrateSort(\n columns: readonly DhType.Column[],\n sorts: readonly (DehydratedSort | LegacyDehydratedSort)[],\n dropReverse = false\n ): readonly SortDescriptor[] {\n const { dh } = this;\n return (\n sorts\n .map(sort => {\n const { column: columnIndexOrName, isAbs, direction } = sort;\n if (direction === TableUtils.sortDirection.reverse) {\n return dh.Table.reverse();\n }\n\n const column =\n typeof columnIndexOrName === 'string'\n ? IrisGridUtils.getColumnByName(columns, columnIndexOrName)\n : IrisGridUtils.getColumn(columns, columnIndexOrName);\n\n if (column != null) {\n return {\n column: {\n name: column.name,\n type: column.type,\n },\n isAbs,\n direction,\n };\n }\n return null;\n })\n // If we can't find the column any more, it's null, filter it out\n // If the item is a reverse sort item, and dropReverse is true, filter it out\n // - it will get applied with the `reverse` property\n // This should only happen when loading a legacy dashboard\n .filter(\n item =>\n item != null &&\n (item.direction !== TableUtils.sortDirection.reverse ||\n !dropReverse)\n ) as SortDescriptor[]\n );\n }\n\n hydrateDhSort(\n columns: readonly DhType.Column[],\n sorts: readonly SortDescriptor[]\n ): DhType.Sort[] {\n const { dh } = this;\n return (\n sorts\n .map(sortDescriptor => {\n const {\n column: { name },\n isAbs,\n direction,\n } = sortDescriptor;\n\n if (direction === TableUtils.sortDirection.reverse) {\n return dh.Table.reverse();\n }\n\n const column = IrisGridUtils.getColumnByName(columns, name);\n\n if (column != null) {\n let columnSort = column.sort();\n if (isAbs) {\n columnSort = columnSort.abs();\n }\n if (direction === TableUtils.sortDirection.descending) {\n columnSort = columnSort.desc();\n } else {\n columnSort = columnSort.asc();\n }\n return columnSort;\n }\n\n return null;\n })\n // If we can't find the column any more, it's null, filter it out\n .filter(isNotNullOrUndefined) as DhType.Sort[]\n );\n }\n\n /**\n * Applies the passed in table settings directly to the provided table\n * @param table The table to apply the settings to\n * @param tableSettings Dehydrated table settings extracted with `extractTableSettings`\n * @param timeZone The time zone to make this value in if it is a date type. E.g. America/New_York\n */\n applyTableSettings(\n table: DhType.Table,\n tableSettings: TableSettings,\n timeZone: string\n ): void {\n const { columns } = table;\n\n let quickFilters: DhType.FilterCondition[] = [];\n if (tableSettings.quickFilters) {\n quickFilters = IrisGridUtils.getFiltersFromFilterMap(\n this.hydrateQuickFilters(columns, tableSettings.quickFilters, timeZone)\n );\n }\n\n let advancedFilters: DhType.FilterCondition[] = [];\n if (tableSettings.advancedFilters) {\n advancedFilters = IrisGridUtils.getFiltersFromFilterMap(\n this.hydrateAdvancedFilters(\n columns,\n tableSettings.advancedFilters,\n timeZone\n )\n );\n }\n const inputFilters = this.getFiltersFromInputFilters(\n columns,\n tableSettings.inputFilters,\n timeZone\n );\n\n let sorts: DhType.Sort[] = [];\n if (tableSettings.sorts) {\n sorts = this.hydrateDhSort(\n columns,\n this.hydrateSort(columns, tableSettings.sorts)\n );\n }\n\n let filters = [...quickFilters, ...advancedFilters];\n const { partitions, partitionColumns: partitionColumnNames } =\n tableSettings;\n if (\n partitions &&\n partitions.length &&\n partitionColumnNames &&\n partitionColumnNames?.length\n ) {\n const partitionColumns = partitionColumnNames.map(partitionColumnName =>\n IrisGridUtils.getColumnByName(columns, partitionColumnName)\n );\n for (let i = 0; i < partitionColumns.length; i += 1) {\n if (partitionColumns[i] !== undefined && partitions[i] != null) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const partitionFilter = partitionColumns[i]!.filter().eq(\n this.dh.FilterValue.ofString(partitions[i])\n );\n filters = [partitionFilter, ...filters];\n }\n }\n }\n filters = [...inputFilters, ...filters];\n\n table.applyFilter(filters);\n table.applySort(sorts);\n }\n\n getFiltersFromInputFilters(\n columns: readonly DhType.Column[],\n inputFilters: readonly InputFilter[] = [],\n timeZone?: string\n ): DhType.FilterCondition[] {\n return inputFilters\n .map(({ name, type, value }) => {\n const column = columns.find(\n ({ name: columnName, type: columnType }) =>\n columnName === name && columnType === type\n );\n if (column) {\n try {\n return this.tableUtils.makeQuickFilter(column, value, timeZone);\n } catch (e) {\n // It may be unable to create it because user hasn't completed their input\n log.debug('Unable to create input filter', e);\n }\n }\n\n return null;\n })\n .filter(filter => filter != null) as DhType.FilterCondition[];\n }\n\n /**\n * Get the dh.RangeSet representation of the provided ranges.\n * Ranges are sorted prior to creating the RangeSet. Only the rows are taken into account,\n * RangeSet does not have an option for columns.\n * @param ranges The ranges to get the range set for\n * @returns The rangeset for the provided ranges\n */\n rangeSetFromRanges(ranges: readonly GridRange[]): DhType.RangeSet {\n const { dh } = this;\n const rangeSets = ranges\n .slice()\n .sort((a, b): number => {\n assertNotNull(a.startRow);\n assertNotNull(b.startRow);\n return a.startRow - b.startRow;\n })\n .map(range => {\n const { startRow, endRow } = range;\n assertNotNull(startRow);\n assertNotNull(endRow);\n return dh.RangeSet.ofRange(startRow, endRow);\n });\n return dh.RangeSet.ofRanges(rangeSets);\n }\n\n /**\n * Get the color for a cell value\n * @param theme The IrisGrid theme\n * @param columnType The type of the column\n * @param columnName The name of the column\n * @param value The value of the cell\n * @returns The color for the cell value\n */\n static colorForValue(\n theme: IrisGridThemeType,\n columnType: string,\n columnName: string,\n value: unknown\n ): string {\n if (TableUtils.isDateType(columnType) || columnName === 'Date') {\n assertNotNull(theme.dateColor);\n return theme.dateColor;\n }\n if (TableUtils.isNumberType(columnType)) {\n if ((value as number) > 0) {\n assertNotNull(theme.positiveNumberColor);\n return theme.positiveNumberColor;\n }\n if ((value as number) < 0) {\n assertNotNull(theme.negativeNumberColor);\n return theme.negativeNumberColor;\n }\n assertNotNull(theme.zeroNumberColor);\n return theme.zeroNumberColor;\n }\n return theme.textColor;\n }\n\n /**\n * Determines the text alignment for a cell value\n * @param columnType The type of the column\n * @param columnName The name of the column\n * @returns The text alignment for the cell value\n */\n static textAlignForValue(\n columnType: string,\n columnName: string\n ): CanvasTextAlign {\n if (TableUtils.isDateType(columnType) || columnName === 'Date') {\n return 'center';\n }\n\n if (TableUtils.isNumberType(columnType)) {\n return 'right';\n }\n\n return 'left';\n }\n}\n\nexport default IrisGridUtils;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"IrisGridUtils.js","names":["GridUtils","DateUtils","TableUtils","Log","assertNotNull","bindAllMethods","EMPTY_ARRAY","EMPTY_MAP","isNotNullOrUndefined","AggregationUtils","AggregationOperation","AdvancedSettings","ColumnHeaderGroup","isPartitionedGridModelProvider","log","module","isPanelStateV1","state","partition","undefined","isPanelStateV2","Array","isArray","partitions","isValidIndex","x","array","length","isDateWrapper","value","asDate","IrisGridUtils","dehydrateGridState","model","gridState","isStuckToBottom","isStuckToRight","movedColumns","movedRows","columns","filter","_ref","to","from","map","_ref2","name","hydrateGridState","customColumns","arguments","customColumnNames","parseCustomColumnNames","columnNames","_ref3","concat","_ref4","getIndex","findIndex","_ref5","dehydrateIrisGridPanelState","irisGridPanelState","isSelectingPartition","advancedSettings","hydrateIrisGridPanelState","Map","DEFAULTS","dehydrateQuickFilters","quickFilters","_ref6","columnIndex","quickFilter","text","dehydrateLong","dehydrateSort","sorts","sort","column","isAbs","direction","extractTableSettings","panelState","inputFilters","irisGridState","advancedFilters","getInputFiltersForColumns","_ref7","type","find","_ref8","columnName","columnType","getFiltersFromFilterMap","filterMap","filters","keys","i","key","item","get","push","getHiddenColumns","userColumnWidths","entries","_ref9","_ref0","customColumn","split","getRemovedCustomColumnNames","oldCustomColumns","oldCustomColumnsNames","oldCustomColumnName","includes","removeSortsInColumns","removeFiltersInColumns","removedColumnNames","_ref1","newFilter","forEach","delete","indexOf","removeColumnFromMovedColumns","_ref10","newMoves","_loop","removedColumnName","removedColumnIndex","moves","j","move","newMove","_objectSpread","fromStart","fromEnd","applyItemMoves","splice","removeColumnsFromSelectDistinctColumns","selectDistinctColumns","getVisibleColumnsInRange","tableColumns","left","right","hiddenColumns","modelIndex","getModelIndex","getPrevVisibleColumns","startIndex","count","unshift","getNextVisibleColumns","getColumnsToFetch","viewportColumns","alwaysFetchColumnNames","columnsToFetch","_ref11","getModelViewportColumns","bufferPages","columnsCenter","bufferWidth","columnsLeft","columnsRight","bufferedColumns","isValidSnapshotRanges","ranges","rangeMap","range","rowMapIndex","startRow","endRow","columnMapIndex","startColumn","endColumn","has","set","matchColumnRanges","join","Number","isInteger","columnsFromRanges","allColumns","columnSet","Set","c","_range$startColumn","_range$endColumn","add","snapshotDataToMatrix","data","rows","result","r","row","rowData","getModelRollupConfig","originalColumns","config","aggregationSettings","_config$columns$lengt","_config$columns","groupingColumns","showConstituents","includeConstituents","showNonAggregatedColumns","includeDescriptions","aggregations","filteredAggregations","_ref12","operation","isRollupProhibited","aggregationColumns","_ref13","selected","invert","isRollupOperation","getOperationColumnNames","aggregationMap","nonAggregatedColumnSet","size","_aggregationMap$Aggre","existingColumns","FIRST","getPendingErrors","pendingDataMap","rowIndex","Error","getColumn","error","getColumnByName","Object","values","_ref14","_ref15","changeFilterColumnNamesToIndexes","_ref16","index","filterConfig","combineFiltersFromList","filterList","a","b","operator","startColumnIndex","combinedText","symbol","getFilterOperatorString","filterText","isCharType","String","fromCharCode","parseInt","parseColumnHeaderGroups","groupsParam","makeColumnHeaderGroup","args","maxDepth","parentMap","groupMap","groups","_ref17","children","originalGroupMap","group","seenChildren","addGroup","_group$children","getColumnIndexByName","existingGroup","childIndexes","depth","childName","childGroup","childIndex","addedGroup","Math","max","headerGroupConfig","flat","columnHeaderGroup","groupNames","_parentMap$get","setParent","convertValueToText","isDateType","date","Date","offset","getTimezoneOffset","offsetDate","getTime","dateText","toISOString","formattedText","replace","substring","constructor","dh","_defineProperty","tableUtils","dehydrateIrisGridState","showOnTop","customColumnFormatMap","columnAlignmentMap","isFilterBarShown","metrics","userRowHeights","conditionalFormats","reverse","rollupConfig","showSearchBar","searchValue","selectedSearchColumns","invertSearchColumns","frozenColumns","columnHeaderGroups","partitionConfig","partitionColumns","dehydrateAdvancedFilters","_ref18","_ref19","width","dehydratePendingDataMap","_item$color","color","dehydratePartitionConfig","hydrateIrisGridState","_ref23","_model$layoutHints","reverseType","formatter","hydrateAdvancedFilters","timeZone","hydrateQuickFilters","hydrateSort","_ref20","_ref21","_ref22","REVERSE_TYPE","POST_SORT","hydratePendingDataMap","layoutHints","columnGroups","hydratePartitionConfig","savedQuickFilters","importedFilters","_ref24","makeQuickFilter","_ref25","advancedFilter","options","dehydrateAdvancedFilterOptions","savedAdvancedFilters","_ref26","hydrateAdvancedFilterOptions","columnRetrieved","makeAdvancedFilter","selectedValues","otherOptions","_objectWithoutProperties","_excluded","dehydrateValue","_excluded2","hydrateValue","_ref27","_ref28","_ref29","cellData","columnMap","getColumnIndex","_ref30","_ref31","_ref32","_getColumnIndex","dehydrateDateTime","isLongType","hydrateDateTime","hydrateLong","i18n","DateTimeFormat","format","FULL_DATE_FORMAT","parse","LongWrapper","ofString","dropReverse","columnIndexOrName","sortDirection","Table","hydrateDhSort","sortDescriptor","columnSort","abs","descending","desc","asc","applyTableSettings","table","tableSettings","getFiltersFromInputFilters","partitionColumnNames","partitionColumnName","partitionFilter","eq","FilterValue","applyFilter","applySort","_ref33","_ref34","e","debug","rangeSetFromRanges","rangeSets","slice","RangeSet","ofRange","ofRanges","colorForValue","theme","dateColor","isNumberType","positiveNumberColor","negativeNumberColor","zeroNumberColor","textColor","textAlignForValue"],"sources":["../src/IrisGridUtils.ts"],"sourcesContent":["import {\n type GridRange,\n type GridState,\n GridUtils,\n type ModelIndex,\n type ModelSizeMap,\n type MoveOperation,\n type VisibleIndex,\n} from '@deephaven/grid';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport {\n DateUtils,\n TableUtils,\n type ReverseType,\n type SortDirection,\n type FormattingRule,\n type SortDescriptor,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport {\n assertNotNull,\n bindAllMethods,\n EMPTY_ARRAY,\n EMPTY_MAP,\n isNotNullOrUndefined,\n} from '@deephaven/utils';\nimport AggregationUtils from './sidebar/aggregations/AggregationUtils';\nimport AggregationOperation from './sidebar/aggregations/AggregationOperation';\nimport { type FilterData, type IrisGridState } from './IrisGrid';\nimport {\n type ColumnName,\n type ReadonlyAdvancedFilterMap,\n type ReadonlyQuickFilterMap,\n type InputFilter,\n type CellData,\n type PendingDataMap,\n type UIRow,\n type AdvancedFilterOptions,\n} from './CommonTypes';\nimport { type UIRollupConfig } from './sidebar/RollupRows';\nimport { type AggregationSettings } from './sidebar/aggregations/Aggregations';\nimport { type FormattingRule as SidebarFormattingRule } from './sidebar/conditional-formatting/ConditionalFormattingUtils';\nimport type IrisGridModel from './IrisGridModel';\nimport type AdvancedSettingsType from './sidebar/AdvancedSettingsType';\nimport AdvancedSettings from './sidebar/AdvancedSettings';\nimport ColumnHeaderGroup, {\n type ColumnHeaderGroupConfig,\n} from './ColumnHeaderGroup';\nimport {\n isPartitionedGridModelProvider,\n type PartitionConfig,\n} from './PartitionedGridModel';\nimport { type IrisGridThemeType } from './IrisGridTheme';\n\nconst log = Log.module('IrisGridUtils');\n\nexport type HydratedIrisGridState = Pick<\n IrisGridState,\n | 'advancedFilters'\n | 'aggregationSettings'\n | 'customColumnFormatMap'\n | 'columnAlignmentMap'\n | 'isFilterBarShown'\n | 'quickFilters'\n | 'customColumns'\n | 'reverse'\n | 'rollupConfig'\n | 'showSearchBar'\n | 'searchValue'\n | 'selectDistinctColumns'\n | 'selectedSearchColumns'\n | 'sorts'\n | 'invertSearchColumns'\n | 'pendingDataMap'\n | 'frozenColumns'\n | 'conditionalFormats'\n | 'columnHeaderGroups'\n | 'partitionConfig'\n | 'metrics'\n>;\n\nexport type DehydratedPendingDataMap<T> = [number, { data: [string, T][] }][];\n\nexport type DehydratedAdvancedFilter = [\n number,\n {\n options: AdvancedFilterOptions;\n },\n];\n\nexport type DehydratedQuickFilter = [\n number,\n {\n text: string;\n },\n];\n\nexport type DehydratedCustomColumnFormat = [string, FormattingRule];\n\nexport type DehydratedUserColumnAlignment = [string, CanvasTextAlign];\n\nexport type DehydratedUserColumnWidth = [ColumnName, number];\n\nexport type DehydratedUserRowHeight = [number, number];\n\nexport type DehydratedPartitionConfig = PartitionConfig;\n\n/** @deprecated Use `DehydratedSort` instead */\nexport interface LegacyDehydratedSort {\n column: ModelIndex;\n isAbs: boolean;\n direction: SortDirection;\n}\n\nexport interface DehydratedSort {\n column: ColumnName;\n isAbs: boolean;\n direction: string;\n}\n\nexport interface TableSettings {\n quickFilters?: readonly DehydratedQuickFilter[];\n advancedFilters?: readonly DehydratedAdvancedFilter[];\n inputFilters?: readonly InputFilter[];\n sorts?: readonly (DehydratedSort | LegacyDehydratedSort)[];\n partitions?: unknown[];\n partitionColumns?: ColumnName[];\n}\n\nexport interface DehydratedIrisGridState {\n advancedFilters: readonly DehydratedAdvancedFilter[];\n aggregationSettings: AggregationSettings;\n customColumnFormatMap: readonly DehydratedCustomColumnFormat[];\n columnAlignmentMap: readonly DehydratedUserColumnAlignment[];\n isFilterBarShown: boolean;\n quickFilters: readonly DehydratedQuickFilter[];\n sorts: readonly DehydratedSort[];\n userColumnWidths: readonly DehydratedUserColumnWidth[];\n userRowHeights: readonly DehydratedUserRowHeight[];\n customColumns: readonly ColumnName[];\n conditionalFormats: readonly SidebarFormattingRule[];\n /** @deprecated use `reverse` instead. Can be removed after DHE sanluis release */\n reverseType?: ReverseType;\n reverse: boolean;\n rollupConfig?: UIRollupConfig;\n showSearchBar: boolean;\n searchValue: string;\n selectDistinctColumns: readonly ColumnName[];\n selectedSearchColumns: readonly ColumnName[];\n invertSearchColumns: boolean;\n pendingDataMap: DehydratedPendingDataMap<unknown>;\n frozenColumns: readonly ColumnName[];\n columnHeaderGroups?: readonly DhType.ColumnGroup[];\n partitionConfig?: DehydratedPartitionConfig;\n}\n\nexport interface DehydratedIrisGridPanelStateV1 {\n isSelectingPartition: boolean;\n partition: string | null;\n advancedSettings: [AdvancedSettingsType, boolean][];\n}\n\nexport interface DehydratedIrisGridPanelStateV2 {\n isSelectingPartition: boolean;\n partitions: (string | null)[];\n advancedSettings: [AdvancedSettingsType, boolean][];\n}\n\nexport type DehydratedIrisGridPanelState =\n | DehydratedIrisGridPanelStateV1\n | DehydratedIrisGridPanelStateV2;\n\nexport function isPanelStateV1(\n state: DehydratedIrisGridPanelState\n): state is DehydratedIrisGridPanelStateV1 {\n return (state as DehydratedIrisGridPanelStateV1).partition !== undefined;\n}\n\nexport function isPanelStateV2(\n state: DehydratedIrisGridPanelState\n): state is DehydratedIrisGridPanelStateV2 {\n return Array.isArray((state as DehydratedIrisGridPanelStateV2).partitions);\n}\n\n/**\n * Checks if an index is valid for the given array\n * @param x The index to check\n * @param array The array\n * @returns True if the index if valid within the array\n */\nfunction isValidIndex(x: number, array: readonly unknown[]): boolean {\n return x >= 0 && x < array.length;\n}\n\nfunction isDateWrapper(value: unknown): value is DhType.DateWrapper {\n return (value as DhType.DateWrapper)?.asDate != null;\n}\n\nexport type HydratedGridState = Pick<\n GridState,\n 'isStuckToBottom' | 'isStuckToRight' | 'movedColumns' | 'movedRows'\n>;\n\nexport type DehydratedGridState = {\n isStuckToBottom: boolean;\n isStuckToRight: boolean;\n movedColumns: readonly {\n from: string | [string, string] | ModelIndex | [ModelIndex, ModelIndex];\n to: string | ModelIndex;\n }[];\n movedRows: readonly MoveOperation[];\n};\n\nclass IrisGridUtils {\n /**\n * Exports the state from Grid component to a JSON stringifiable object.\n * See IrisGridCacheUtil for memoization and comparing dehydrated states.\n * @param model The table model to export the Grid state for\n * @param gridState The state of the Grid to export\n * @returns An object that can be stringified and imported with {{@link hydrateGridState}}\n */\n static dehydrateGridState(\n model: IrisGridModel,\n gridState: HydratedGridState\n ): DehydratedGridState {\n const { isStuckToBottom, isStuckToRight, movedColumns, movedRows } =\n gridState;\n\n const { columns } = model;\n\n return {\n isStuckToBottom,\n isStuckToRight,\n movedColumns: [...movedColumns]\n .filter(\n ({ to, from }) =>\n isValidIndex(to, columns) &&\n ((typeof from === 'number' && isValidIndex(from, columns)) ||\n (Array.isArray(from) &&\n isValidIndex(from[0], columns) &&\n isValidIndex(from[1], columns)))\n )\n .map(({ to, from }) => ({\n to: columns[to].name,\n from: Array.isArray(from)\n ? [columns[from[0]].name, columns[from[1]].name]\n : columns[from].name,\n })),\n movedRows: [...movedRows],\n };\n }\n\n /**\n * Import a state for Grid that was exported with {{@link dehydrateGridState}}\n * @param model The table model to import the state for\n * @param gridState The state of the panel that was saved\n * @returns The gridState props to set on the Grid\n */\n static hydrateGridState(\n model: IrisGridModel,\n gridState: DehydratedGridState,\n customColumns: readonly string[] = []\n ): HydratedGridState {\n const { isStuckToBottom, isStuckToRight, movedColumns, movedRows } =\n gridState;\n\n const { columns } = model;\n const customColumnNames =\n IrisGridUtils.parseCustomColumnNames(customColumns);\n const columnNames = columns\n .map(({ name }) => name)\n .concat(customColumnNames);\n\n return {\n isStuckToBottom,\n isStuckToRight,\n movedColumns: [...movedColumns]\n .map(({ to, from }) => {\n const getIndex = (x: string | number): number =>\n typeof x === 'string'\n ? columnNames.findIndex(name => name === x)\n : x;\n\n return {\n to: getIndex(to),\n from: Array.isArray(from)\n ? ([getIndex(from[0]), getIndex(from[1])] as [number, number])\n : getIndex(from),\n };\n })\n .filter(\n ({ to, from }) =>\n isValidIndex(to, columnNames) &&\n ((typeof from === 'number' && isValidIndex(from, columnNames)) ||\n (Array.isArray(from) &&\n isValidIndex(from[0], columnNames) &&\n isValidIndex(from[1], columnNames)))\n ),\n movedRows: [...movedRows],\n };\n }\n\n /**\n * Export the IrisGridPanel state.\n * @param model The table model the state is being dehydrated with\n * @param irisGridPanelState The current IrisGridPanel state\n * @returns The dehydrated IrisGridPanel state\n */\n static dehydrateIrisGridPanelState(\n model: IrisGridModel,\n irisGridPanelState: {\n // This needs to be changed after IrisGridPanel is done\n isSelectingPartition: boolean;\n partitions: (string | null)[];\n advancedSettings: Map<AdvancedSettingsType, boolean>;\n }\n ): DehydratedIrisGridPanelState {\n const { isSelectingPartition, partitions, advancedSettings } =\n irisGridPanelState;\n\n // Return value will be serialized, should not contain undefined\n return {\n isSelectingPartition,\n partitions,\n advancedSettings: [...advancedSettings],\n };\n }\n\n /**\n * Import the saved IrisGridPanel state.\n * @param model The model the state is being hydrated with\n * @param irisGridPanelState Exported IrisGridPanel state\n * @returns The state to apply to the IrisGridPanel\n */\n static hydrateIrisGridPanelState(\n model: IrisGridModel,\n irisGridPanelState: DehydratedIrisGridPanelState\n ): {\n isSelectingPartition: boolean;\n partitions: (string | null)[];\n advancedSettings: Map<AdvancedSettingsType, boolean>;\n } {\n const { isSelectingPartition, advancedSettings } = irisGridPanelState;\n\n let partitions: (string | null)[] = [];\n if (isPanelStateV2(irisGridPanelState)) {\n partitions = irisGridPanelState.partitions;\n } else if (irisGridPanelState.partition != null) {\n partitions = [irisGridPanelState.partition];\n }\n\n return {\n isSelectingPartition,\n partitions,\n advancedSettings: new Map([\n ...AdvancedSettings.DEFAULTS,\n ...advancedSettings,\n ]),\n };\n }\n\n /**\n * Export the quick filters to JSON striginfiable object\n * @param quickFilters The quick filters to dehydrate\n * @returns The dehydrated quick filters\n */\n static dehydrateQuickFilters(\n quickFilters: ReadonlyQuickFilterMap\n ): DehydratedQuickFilter[] {\n return [...quickFilters].map(([columnIndex, quickFilter]) => {\n const { text } = quickFilter;\n return [columnIndex, { text }];\n });\n }\n\n static dehydrateLong<T>(value: T): string | null {\n return value != null ? `${value}` : null;\n }\n\n /**\n * Export the sorts from the provided table sorts to JSON stringifiable object\n * @param sorts The table sorts\n * @returns The dehydrated sorts\n */\n static dehydrateSort(sorts: readonly SortDescriptor[]): DehydratedSort[] {\n return sorts.map(sort => {\n const { column, isAbs, direction } = sort;\n return {\n column: column.name,\n isAbs,\n direction,\n };\n });\n }\n\n /**\n * Pulls just the table settings from the panel state, eg. filters/sorts\n * @param panelState The dehydrated panel state\n * @returns A dehydrated table settings object, { partition, partitionColumn, advancedFilters, quickFilters, sorts }\n */\n static extractTableSettings<AF, QF, S>(\n panelState: {\n irisGridState: { advancedFilters: AF; quickFilters: QF; sorts: S };\n irisGridPanelState: DehydratedIrisGridPanelState;\n },\n inputFilters: InputFilter[] = []\n ): {\n partitions: unknown[];\n advancedFilters: AF;\n inputFilters: InputFilter[];\n quickFilters: QF;\n sorts: S;\n } {\n const { irisGridPanelState, irisGridState } = panelState;\n const partitions = isPanelStateV2(irisGridPanelState)\n ? irisGridPanelState.partitions\n : [irisGridPanelState.partition];\n const { advancedFilters, quickFilters, sorts } = irisGridState;\n\n return {\n advancedFilters,\n inputFilters,\n partitions,\n quickFilters,\n sorts,\n };\n }\n\n static getInputFiltersForColumns(\n columns: readonly { name: string; type: string }[],\n inputFilters: readonly InputFilter[] = []\n ): InputFilter[] {\n return inputFilters.filter(({ name, type }) =>\n columns.find(\n ({ name: columnName, type: columnType }) =>\n columnName === name && columnType === type\n )\n );\n }\n\n static getFiltersFromFilterMap(\n filterMap: ReadonlyAdvancedFilterMap | ReadonlyQuickFilterMap\n ): DhType.FilterCondition[] {\n const filters = [];\n\n const keys = Array.from(filterMap.keys());\n for (let i = 0; i < keys.length; i += 1) {\n const key = keys[i];\n const item = filterMap.get(key);\n if (item?.filter != null) {\n filters.push(item.filter);\n }\n }\n\n return filters;\n }\n\n /**\n * Get array of hidden column indexes\n * @param userColumnWidths Map of user column widths\n * @returns Array of hidden column indexes\n */\n static getHiddenColumns(userColumnWidths: ModelSizeMap): ModelIndex[] {\n return [...userColumnWidths.entries()]\n .filter(([, value]) => value === 0)\n .map(([key]) => key);\n }\n\n static parseCustomColumnNames(\n customColumns: readonly ColumnName[]\n ): ColumnName[] {\n return customColumns.map(customColumn => customColumn.split('=')[0]);\n }\n\n static getRemovedCustomColumnNames(\n oldCustomColumns: readonly ColumnName[],\n customColumns: readonly ColumnName[]\n ): ColumnName[] {\n const oldCustomColumnsNames =\n IrisGridUtils.parseCustomColumnNames(oldCustomColumns);\n const customColumnNames =\n IrisGridUtils.parseCustomColumnNames(customColumns);\n return oldCustomColumnsNames.filter(\n oldCustomColumnName => !customColumnNames.includes(oldCustomColumnName)\n );\n }\n\n static removeSortsInColumns(\n sorts: readonly SortDescriptor[],\n columnNames: readonly string[]\n ): readonly SortDescriptor[] {\n return sorts.filter(sort => !columnNames.includes(sort.column.name));\n }\n\n static removeFiltersInColumns<T>(\n columns: readonly DhType.Column[],\n filters: ReadonlyMap<number, T>,\n removedColumnNames: readonly ColumnName[]\n ): Map<number, T> {\n const columnNames = columns.map(({ name }) => name);\n const newFilter = new Map(filters);\n removedColumnNames.forEach(columnName =>\n newFilter.delete(columnNames.indexOf(columnName))\n );\n return newFilter;\n }\n\n static removeColumnFromMovedColumns(\n columns: readonly DhType.Column[],\n movedColumns: readonly MoveOperation[],\n removedColumnNames: readonly ColumnName[]\n ): MoveOperation[] {\n const columnNames = columns.map(({ name }) => name);\n let newMoves = [...movedColumns];\n for (let i = 0; i < removedColumnNames.length; i += 1) {\n const removedColumnName = removedColumnNames[i];\n let removedColumnIndex = columnNames.findIndex(\n name => name === removedColumnName\n );\n const moves: MoveOperation[] = [];\n for (let j = 0; j < newMoves.length; j += 1) {\n const move = newMoves[j];\n const newMove = { ...move };\n let [fromStart, fromEnd] = Array.isArray(move.from)\n ? move.from\n : [move.from, move.from];\n\n if (removedColumnIndex <= move.to) {\n newMove.to -= 1;\n }\n\n // If equal to fromStart, the new fromStart would stay the same\n // It's just the next element in the range which will have the same index after deletion\n if (removedColumnIndex < fromStart) {\n fromStart -= 1;\n }\n\n if (removedColumnIndex <= fromEnd) {\n fromEnd -= 1;\n }\n\n if (fromStart <= fromEnd && fromStart !== newMove.to) {\n if (fromStart === fromEnd) {\n moves.push({ ...newMove, from: fromStart });\n } else {\n moves.push({ ...newMove, from: [fromStart, fromEnd] });\n }\n }\n\n // get the next index of the removed column after the move is applied\n // eslint-disable-next-line prefer-destructuring\n removedColumnIndex = GridUtils.applyItemMoves(\n removedColumnIndex,\n removedColumnIndex,\n [move]\n )[0][0];\n }\n\n newMoves = moves;\n columnNames.splice(\n columnNames.findIndex(name => name === removedColumnName),\n 1\n );\n }\n return newMoves;\n }\n\n static removeColumnsFromSelectDistinctColumns(\n selectDistinctColumns: readonly ColumnName[],\n removedColumnNames: readonly ColumnName[]\n ): ColumnName[] {\n return selectDistinctColumns.filter(\n columnName => !removedColumnNames.includes(columnName)\n );\n }\n\n static getVisibleColumnsInRange(\n tableColumns: readonly DhType.Column[],\n left: number,\n right: number,\n movedColumns: readonly MoveOperation[],\n hiddenColumns: readonly number[]\n ): DhType.Column[] {\n const columns: DhType.Column[] = [];\n for (let i = left; i <= right; i += 1) {\n const modelIndex = GridUtils.getModelIndex(i, movedColumns);\n if (\n modelIndex >= 0 &&\n modelIndex < tableColumns.length &&\n !hiddenColumns.includes(modelIndex)\n ) {\n columns.push(tableColumns[modelIndex]);\n }\n }\n return columns;\n }\n\n static getPrevVisibleColumns(\n tableColumns: readonly DhType.Column[],\n startIndex: VisibleIndex,\n count: number,\n movedColumns: readonly MoveOperation[],\n hiddenColumns: readonly VisibleIndex[]\n ): DhType.Column[] {\n const columns = [];\n let i = startIndex;\n while (i >= 0 && columns.length < count) {\n const modelIndex = GridUtils.getModelIndex(i, movedColumns);\n if (\n modelIndex >= 0 &&\n modelIndex < tableColumns.length &&\n !hiddenColumns.includes(modelIndex)\n ) {\n columns.unshift(tableColumns[modelIndex]);\n }\n i -= 1;\n }\n return columns;\n }\n\n static getNextVisibleColumns(\n tableColumns: readonly DhType.Column[],\n startIndex: VisibleIndex,\n count: number,\n movedColumns: readonly MoveOperation[],\n hiddenColumns: readonly VisibleIndex[]\n ): DhType.Column[] {\n const columns = [];\n let i = startIndex;\n while (i < tableColumns.length && columns.length < count) {\n const modelIndex = GridUtils.getModelIndex(i, movedColumns);\n if (\n modelIndex >= 0 &&\n modelIndex < tableColumns.length &&\n !hiddenColumns.includes(modelIndex)\n ) {\n columns.push(tableColumns[modelIndex]);\n }\n i += 1;\n }\n return columns;\n }\n\n static getColumnsToFetch(\n tableColumns: readonly DhType.Column[],\n viewportColumns: readonly DhType.Column[],\n alwaysFetchColumnNames: readonly ColumnName[]\n ): DhType.Column[] {\n const columnsToFetch = [...viewportColumns];\n alwaysFetchColumnNames.forEach(columnName => {\n const column = tableColumns.find(({ name }) => name === columnName);\n if (column != null && !viewportColumns.includes(column)) {\n columnsToFetch.push(column);\n }\n });\n return columnsToFetch;\n }\n\n static getModelViewportColumns(\n columns: readonly DhType.Column[],\n left: number | null,\n right: number | null,\n movedColumns: readonly MoveOperation[],\n hiddenColumns: readonly VisibleIndex[] = [],\n alwaysFetchColumnNames: readonly ColumnName[] = [],\n bufferPages = 0\n ): DhType.Column[] | undefined {\n if (left == null || right == null) {\n return undefined;\n }\n\n const columnsCenter = IrisGridUtils.getVisibleColumnsInRange(\n columns,\n left,\n right,\n movedColumns,\n hiddenColumns\n );\n const bufferWidth = columnsCenter.length * bufferPages;\n const columnsLeft = IrisGridUtils.getPrevVisibleColumns(\n columns,\n left - 1,\n bufferWidth,\n movedColumns,\n hiddenColumns\n );\n const columnsRight = IrisGridUtils.getNextVisibleColumns(\n columns,\n right + 1,\n bufferWidth,\n movedColumns,\n hiddenColumns\n );\n\n const bufferedColumns = [...columnsLeft, ...columnsCenter, ...columnsRight];\n\n return IrisGridUtils.getColumnsToFetch(\n columns,\n bufferedColumns,\n alwaysFetchColumnNames\n );\n }\n\n /**\n * Validate whether the ranges passed in are valid to take a snapshot from.\n * Multiple selections are valid if all of the selected rows have the same columns selected.\n *\n * @param ranges The ranges to validate\n * @returns True if the ranges are valid, false otherwise\n */\n static isValidSnapshotRanges(ranges: readonly GridRange[]): boolean {\n if (ranges == null || ranges.length === 0) {\n return false;\n }\n\n // To verify all the rows selected have the same set of columns selected, build a map with string representations\n // of each range.\n const rangeMap = new Map();\n for (let i = 0; i < ranges.length; i += 1) {\n const range = ranges[i];\n const rowMapIndex = `${range.startRow}:${range.endRow}`;\n const columnMapIndex = `${range.startColumn}:${range.endColumn}`;\n if (!rangeMap.has(rowMapIndex)) {\n rangeMap.set(rowMapIndex, []);\n }\n rangeMap.get(rowMapIndex).push(columnMapIndex);\n }\n\n const keys = [...rangeMap.keys()];\n const matchColumnRanges = rangeMap.get(keys[0]).sort().join(',');\n for (let i = 1; i < keys.length; i += 1) {\n if (rangeMap.get(keys[i]).sort().join(',') !== matchColumnRanges) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Check if the provided value is a valid table index\n * @param value A value to check if it's a valid table index\n */\n static isValidIndex(value: unknown): boolean {\n if (!Number.isInteger(value)) {\n return false;\n }\n if (!(typeof value === 'number')) {\n return false;\n }\n return value >= 0;\n }\n\n /**\n * Returns all columns used in any of the ranges provided\n * @param ranges The model ranges to get columns for\n * @param allColumns All the columns to pull from\n * @returns The columns selected in the range\n */\n static columnsFromRanges(\n ranges: readonly GridRange[],\n allColumns: readonly DhType.Column[]\n ): DhType.Column[] {\n if (ranges == null || ranges.length === 0) {\n return [];\n }\n if (ranges[0].startColumn === null && ranges[0].endColumn === null) {\n // Snapshot of all the columns\n return [...allColumns];\n }\n\n const columnSet = new Set<ModelIndex>();\n for (let i = 0; i < ranges.length; i += 1) {\n const range = ranges[i];\n assertNotNull(range.startColumn);\n assertNotNull(range.endColumn);\n for (\n let c = range.startColumn ?? 0;\n c <= (range.endColumn ?? allColumns.length - 1);\n c += 1\n ) {\n columnSet.add(c);\n }\n }\n return [...columnSet].map(c => allColumns[c]);\n }\n\n /**\n * Transforms an iris data snapshot into a simple data matrix\n * @param data The Iris formatted table data\n * @returns A matrix of the values of the data\n */\n static snapshotDataToMatrix(data: DhType.TableData): unknown[][] {\n const { columns, rows } = data;\n const result = [];\n for (let r = 0; r < rows.length; r += 1) {\n const row = rows[r];\n const rowData = [];\n for (let c = 0; c < columns.length; c += 1) {\n const column = columns[c];\n const value = row.get(column);\n rowData.push(value);\n }\n result.push(rowData);\n }\n return result;\n }\n\n /**\n * Hydrate model rollup config\n * @param originalColumns Original model columns\n * @param config Dehydrated rollup config\n * @param aggregationSettings Aggregation settings\n * @returns Rollup config for the model\n */\n static getModelRollupConfig(\n originalColumns: readonly DhType.Column[],\n config: UIRollupConfig | undefined,\n aggregationSettings: AggregationSettings\n ): DhType.RollupConfig | null {\n if ((config?.columns?.length ?? 0) === 0) {\n return null;\n }\n\n const {\n columns: groupingColumns = [],\n showConstituents: includeConstituents = true,\n showNonAggregatedColumns = true,\n includeDescriptions = true,\n } = config ?? {};\n const { aggregations = [] } = aggregationSettings ?? {};\n const filteredAggregations = aggregations.filter(\n ({ operation }) => !AggregationUtils.isRollupProhibited(operation)\n );\n const aggregationColumns = filteredAggregations.map(\n ({ operation, selected, invert }) =>\n AggregationUtils.isRollupOperation(operation)\n ? []\n : AggregationUtils.getOperationColumnNames(\n originalColumns,\n operation,\n selected,\n invert\n )\n );\n\n const aggregationMap = {} as Record<AggregationOperation, string[]>;\n // Aggregation columns should show first, add them first\n for (let i = 0; i < filteredAggregations.length; i += 1) {\n aggregationMap[filteredAggregations[i].operation] = aggregationColumns[i];\n }\n\n if (showNonAggregatedColumns) {\n // Filter out any column that already has an aggregation or grouping\n const nonAggregatedColumnSet = new Set(\n originalColumns\n .map(c => c.name)\n .filter(name => !groupingColumns.includes(name))\n );\n aggregationColumns.forEach(columns => {\n columns.forEach(name => nonAggregatedColumnSet.delete(name));\n });\n\n if (nonAggregatedColumnSet.size > 0) {\n const existingColumns =\n aggregationMap[AggregationOperation.FIRST] ?? [];\n aggregationMap[AggregationOperation.FIRST] = [\n ...existingColumns,\n ...nonAggregatedColumnSet,\n ];\n }\n }\n\n return {\n groupingColumns,\n includeConstituents,\n includeDescriptions,\n aggregations: aggregationMap,\n };\n }\n\n /**\n * @param pendingDataMap Map of pending data\n * @returns A map with the errors in the pending data\n */\n static getPendingErrors(pendingDataMap: Map<number, UIRow>): void {\n pendingDataMap.forEach((row, rowIndex) => {\n if (!IrisGridUtils.isValidIndex(rowIndex)) {\n throw new Error(`Invalid rowIndex ${rowIndex}`);\n }\n\n const { data } = row;\n data.forEach((value, columnIndex) => {\n if (!IrisGridUtils.isValidIndex(columnIndex)) {\n throw new Error(`Invalid columnIndex ${columnIndex}`);\n }\n });\n });\n }\n\n /**\n * Retrieves a column from the provided array at the index, or `null` and logs an error if it's invalid\n *\n * @param columns The columns to get the column from\n * @param columnIndex The column index to get\n */\n static getColumn(\n columns: readonly DhType.Column[],\n columnIndex: ModelIndex\n ): DhType.Column | null {\n if (columnIndex < columns.length) {\n return columns[columnIndex];\n }\n\n log.error('Unable to retrieve column', columnIndex, '>=', columns.length);\n\n return null;\n }\n\n /**\n * Retrieves a column from the provided array matching the name, or `null` and logs an error if not found\n * @param columns The columns to get the column from\n * @param columnName The column name to retrieve\n */\n static getColumnByName(\n columns: readonly DhType.Column[],\n columnName: ColumnName\n ): DhType.Column | undefined {\n // Columns can contain ColumnBy sources with negative indexes\n const column = Object.values(columns).find(\n ({ name }) => name === columnName\n );\n if (column == null) {\n log.error(\n 'Unable to retrieve column by name',\n columnName,\n columns.map(({ name }) => name)\n );\n }\n\n return column;\n }\n\n /**\n * Get filter configs with column names changed to indexes, exclude missing columns\n * @param columns The columns to get column indexes from\n * @param filters Filter configs\n * @returns Updated filter configs with column names changed to indexes\n */\n static changeFilterColumnNamesToIndexes<T>(\n columns: readonly DhType.Column[],\n filters: { name: ColumnName; filter: T }[]\n ): [number, T][] {\n return filters\n .map(({ name, filter }): null | [number, T] => {\n const index = columns.findIndex(column => column.name === name);\n return index < 0 ? null : [index, filter];\n })\n .filter(filterConfig => filterConfig != null) as [number, T][];\n }\n\n /**\n * @param columnType The column type that the filters will be applied to.\n * @param filterList The list of filters to be combined.\n * @returns The combination of the filters in filterList as text.\n */\n static combineFiltersFromList(\n columnType: string | null,\n filterList: FilterData[]\n ): string {\n filterList.sort((a, b) => {\n // move all 'equals' comparisons to end of list\n if (a.operator === 'eq' && b.operator !== 'eq') {\n return 1;\n }\n if (a.operator !== 'eq' && b.operator === 'eq') {\n return -1;\n }\n return a.startColumnIndex - b.startColumnIndex;\n });\n\n let combinedText = '';\n for (let i = 0; i < filterList.length; i += 1) {\n const { text, value, operator } = filterList[i];\n if (value !== undefined) {\n let symbol = '';\n if (operator !== undefined) {\n if (value == null && operator === 'eq') {\n symbol = '=';\n } else if (operator !== 'eq') {\n if (operator === 'startsWith' || operator === 'endsWith') {\n symbol = '*';\n } else {\n symbol = TableUtils.getFilterOperatorString(operator);\n }\n }\n }\n\n let filterText = `${symbol}${text}`;\n if (operator === 'startsWith') {\n filterText = `${text}${symbol}`;\n }\n if (\n columnType != null &&\n value !== null &&\n TableUtils.isCharType(columnType)\n ) {\n filterText = `${symbol}${String.fromCharCode(parseInt(text, 10))}`;\n }\n if (i !== 0) {\n combinedText += operator === 'eq' ? ' || ' : ' && ';\n }\n combinedText += filterText;\n }\n }\n return combinedText;\n }\n\n /**\n * Parses the column header groups provided.\n * If undefined, should provide default groups such as from layoutHints\n *\n * @returns Object containing groups array, max depth, map of name to parent group, and map of name to group\n */\n static parseColumnHeaderGroups<\n T extends ColumnHeaderGroup,\n C extends ColumnHeaderGroupConfig,\n >(\n model: IrisGridModel,\n groupsParam: readonly (DhType.ColumnGroup | T)[],\n makeColumnHeaderGroup: (args: C) => T = (args: C) =>\n new ColumnHeaderGroup(args) as T\n ): {\n groups: T[];\n maxDepth: number;\n parentMap: Map<string, T>;\n groupMap: Map<string, T>;\n } {\n let maxDepth = 1;\n const parentMap: Map<string, T> = new Map();\n const groupMap: Map<string, T> = new Map();\n\n // Remove any empty groups before parsing\n const groups = groupsParam?.filter(\n ({ children }) => children != null && children.length > 0\n );\n\n if (groups.length === 0) {\n return { groups: [], maxDepth, parentMap, groupMap };\n }\n\n const originalGroupMap = new Map(groups.map(group => [group.name, group]));\n const seenChildren = new Set<string>();\n\n const addGroup = (group: DhType.ColumnGroup | T): T => {\n const { name } = group;\n\n assertNotNull(name, 'Column header group has no name');\n\n const columnIndex = model.getColumnIndexByName(name);\n // Groups cannot have names matching columns to avoid parent-child collision\n // unless they refer to ColumnBy sources with negative indexes\n if (columnIndex != null && columnIndex >= 0) {\n throw new Error(`Column header group has same name as column: ${name}`);\n }\n\n const existingGroup = groupMap.get(name);\n\n if (existingGroup) {\n return existingGroup;\n }\n\n const childIndexes: T['childIndexes'] = [];\n let depth = 1;\n\n if (group.children == null) {\n throw new Error(`Column header group ${name} has no children`);\n }\n\n group.children.forEach(childName => {\n if (seenChildren.has(childName)) {\n throw new Error(\n `Column group child ${childName} specified in multiple groups`\n );\n }\n seenChildren.add(childName);\n\n const childGroup = originalGroupMap.get(childName);\n const childIndex = model.getColumnIndexByName(childName);\n if (childGroup) {\n // Adding another column header group\n const addedGroup = addGroup(childGroup);\n childIndexes.push(...addedGroup.childIndexes);\n depth = Math.max(depth, addedGroup.depth + 1);\n } else if (childIndex != null) {\n // Adding a base column\n childIndexes.push(childIndex);\n depth = Math.max(depth, 1);\n } else {\n throw new Error(`Unknown child ${childName} in group ${name}`);\n }\n });\n\n const headerGroupConfig = {\n ...(group as C),\n name,\n children: group.children,\n depth,\n childIndexes: childIndexes.flat(),\n };\n\n const columnHeaderGroup = makeColumnHeaderGroup(headerGroupConfig);\n\n groupMap.set(name, columnHeaderGroup);\n group.children?.forEach(childName =>\n parentMap.set(childName, columnHeaderGroup)\n );\n\n maxDepth = Math.max(maxDepth, columnHeaderGroup.depth + 1);\n return columnHeaderGroup;\n };\n\n const groupNames = new Set();\n\n groups.forEach(group => {\n const { name } = group;\n if (groupNames.has(name)) {\n throw new Error(`Duplicate column group name: ${name}`);\n }\n groupNames.add(name);\n addGroup(group);\n });\n\n groupMap.forEach(group => {\n group.setParent(parentMap.get(group.name)?.name);\n });\n\n return { groups: [...groupMap.values()], maxDepth, groupMap, parentMap };\n }\n\n /**\n * @param value The value of the cell in a column\n * @param columnType The type of the column\n * @returns The value of the cell converted to text\n */\n static convertValueToText(value: unknown, columnType: string): string {\n if (\n columnType != null &&\n TableUtils.isCharType(columnType) &&\n value != null &&\n typeof value === 'number'\n ) {\n return String.fromCharCode(value);\n }\n if (TableUtils.isDateType(columnType) && isDateWrapper(value)) {\n const date = new Date(value.asDate());\n const offset = date.getTimezoneOffset();\n const offsetDate = new Date(date.getTime() - offset * 60 * 1000);\n const dateText = offsetDate.toISOString();\n const formattedText = dateText.replace('T', ' ').substring(0, 23);\n return formattedText;\n }\n if (value == null) {\n return '';\n }\n return `${value}`;\n }\n\n private dh: typeof DhType;\n\n private tableUtils: TableUtils;\n\n constructor(dh: typeof DhType) {\n this.dh = dh;\n this.tableUtils = new TableUtils(dh);\n bindAllMethods(this);\n }\n\n /**\n * Exports the state from IrisGrid to a JSON stringifiable object.\n * See IrisGridCacheUtil for memoization and comparing dehydrated states.\n * @param model The table model to export the state for\n * @param irisGridState The current state of the IrisGrid\n */\n dehydrateIrisGridState(\n model: IrisGridModel,\n irisGridState: HydratedIrisGridState\n ): DehydratedIrisGridState {\n const {\n aggregationSettings = { aggregations: EMPTY_ARRAY, showOnTop: false },\n advancedFilters,\n customColumnFormatMap,\n columnAlignmentMap = EMPTY_MAP,\n isFilterBarShown,\n metrics: { userColumnWidths, userRowHeights } = {\n userColumnWidths: EMPTY_MAP,\n userRowHeights: EMPTY_MAP,\n },\n quickFilters,\n customColumns,\n conditionalFormats = EMPTY_ARRAY,\n reverse,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns = EMPTY_ARRAY,\n selectedSearchColumns,\n sorts,\n invertSearchColumns,\n pendingDataMap = EMPTY_MAP,\n frozenColumns,\n columnHeaderGroups,\n partitionConfig,\n } = irisGridState;\n const { columns } = model;\n const partitionColumns = isPartitionedGridModelProvider(model)\n ? model.partitionColumns\n : [];\n\n // Return value will be serialized, should not contain undefined\n return {\n advancedFilters: this.dehydrateAdvancedFilters(columns, advancedFilters),\n aggregationSettings,\n customColumnFormatMap: [...customColumnFormatMap],\n columnAlignmentMap: [...columnAlignmentMap],\n isFilterBarShown,\n quickFilters: IrisGridUtils.dehydrateQuickFilters(quickFilters),\n sorts: IrisGridUtils.dehydrateSort(sorts),\n userColumnWidths: [...userColumnWidths]\n .filter(\n ([columnIndex]) =>\n columnIndex != null &&\n columnIndex >= 0 &&\n columnIndex < columns.length\n )\n .map(([columnIndex, width]) => [columns[columnIndex].name, width]),\n userRowHeights: [...userRowHeights],\n customColumns: [...customColumns],\n conditionalFormats: [...conditionalFormats],\n reverse,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns: [...selectDistinctColumns],\n selectedSearchColumns,\n invertSearchColumns,\n pendingDataMap: this.dehydratePendingDataMap(columns, pendingDataMap),\n frozenColumns,\n columnHeaderGroups: columnHeaderGroups?.map(item => ({\n name: item.name,\n children: item.children,\n color: item.color ?? null,\n })),\n partitionConfig: this.dehydratePartitionConfig(\n partitionColumns,\n partitionConfig\n ),\n };\n }\n\n /**\n * Import a state for IrisGrid that was exported with {{@link dehydrateIrisGridState}}\n * @param model The table model to import the state with\n * @param irisGridState The saved IrisGrid state\n */\n hydrateIrisGridState(\n model: IrisGridModel,\n irisGridState: DehydratedIrisGridState\n ): Omit<HydratedIrisGridState, 'metrics'> & {\n userColumnWidths: ModelSizeMap;\n userRowHeights: ModelSizeMap;\n } {\n const {\n advancedFilters,\n aggregationSettings = { aggregations: [], showOnTop: false },\n customColumnFormatMap,\n columnAlignmentMap = [],\n isFilterBarShown,\n quickFilters,\n sorts,\n customColumns,\n conditionalFormats,\n userColumnWidths,\n userRowHeights,\n reverseType,\n reverse,\n rollupConfig = undefined,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns = true,\n pendingDataMap = [],\n frozenColumns,\n columnHeaderGroups,\n partitionConfig,\n } = irisGridState;\n const { columns, formatter } = model;\n const partitionColumns = isPartitionedGridModelProvider(model)\n ? model.partitionColumns\n : [];\n return {\n advancedFilters: this.hydrateAdvancedFilters(\n columns,\n advancedFilters,\n formatter.timeZone\n ),\n aggregationSettings,\n customColumnFormatMap: new Map(customColumnFormatMap),\n columnAlignmentMap: new Map(columnAlignmentMap),\n isFilterBarShown,\n quickFilters: this.hydrateQuickFilters(\n columns,\n quickFilters,\n formatter.timeZone\n ),\n sorts: this.hydrateSort(columns, sorts, true),\n userColumnWidths: new Map(\n userColumnWidths\n .map(\n ([column, width]: [string | number, number]): [number, number] => {\n if (\n typeof column === 'string' ||\n (column as unknown) instanceof String\n ) {\n return [\n columns.findIndex(({ name }) => name === column),\n width,\n ];\n }\n return [column, width];\n }\n )\n .filter(\n ([column]) =>\n column != null && column >= 0 && column < columns.length\n )\n ),\n customColumns,\n conditionalFormats,\n userRowHeights: new Map(userRowHeights),\n reverse: reverseType === TableUtils.REVERSE_TYPE.POST_SORT || reverse,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns,\n pendingDataMap: this.hydratePendingDataMap(\n columns,\n pendingDataMap\n ) as PendingDataMap<UIRow>,\n frozenColumns,\n columnHeaderGroups: IrisGridUtils.parseColumnHeaderGroups(\n model,\n columnHeaderGroups ?? model.layoutHints?.columnGroups ?? []\n ).groups,\n partitionConfig: this.hydratePartitionConfig(\n partitionColumns,\n partitionConfig\n ),\n };\n }\n\n /**\n * Import the saved quick filters to apply to the columns. Does not actually apply the filters.\n * @param columns The columns the filters will be applied to\n * @param savedQuickFilters Exported quick filters definitions\n * @param timeZone The time zone to make this value in if it is a date type. E.g. America/New_York\n * @returns The quick filters to apply to the columns\n */\n hydrateQuickFilters(\n columns: readonly DhType.Column[],\n savedQuickFilters: readonly DehydratedQuickFilter[],\n timeZone?: string\n ): ReadonlyQuickFilterMap {\n const importedFilters = savedQuickFilters.map(\n ([columnIndex, quickFilter]: DehydratedQuickFilter): [\n number,\n { text: string; filter: DhType.FilterCondition | null },\n ] => {\n const { text } = quickFilter;\n\n let filter = null;\n try {\n const column = IrisGridUtils.getColumn(columns, columnIndex);\n if (column != null) {\n filter = this.tableUtils.makeQuickFilter(column, text, timeZone);\n }\n } catch (error) {\n log.error('hydrateQuickFilters error with', text, error);\n }\n\n return [columnIndex, { text, filter }];\n }\n );\n\n return new Map(importedFilters);\n }\n\n /**\n * Export the advanced filters from the provided columns to JSON striginfiable object\n * @param columns The columns for the filters\n * @param advancedFilters The advanced filters to dehydrate\n * @returns The dehydrated advanced filters\n */\n dehydrateAdvancedFilters(\n columns: readonly DhType.Column[],\n advancedFilters: ReadonlyAdvancedFilterMap\n ): DehydratedAdvancedFilter[] {\n return [...advancedFilters].map(([columnIndex, advancedFilter]) => {\n const column = IrisGridUtils.getColumn(columns, columnIndex);\n assertNotNull(column);\n const options = this.dehydrateAdvancedFilterOptions(\n column,\n advancedFilter.options\n );\n return [columnIndex, { options }];\n });\n }\n\n /**\n * Import the saved advanced filters to apply to the columns. Does not actually apply the filters.\n * @param columns The columns the filters will be applied to\n * @param savedAdvancedFilters Exported advanced filters definitions\n * @param timeZone The time zone to make this filter in if it is a date type. E.g. America/New_York\n * @returns The advanced filters to apply to the columns\n */\n hydrateAdvancedFilters(\n columns: readonly DhType.Column[],\n savedAdvancedFilters: readonly DehydratedAdvancedFilter[],\n timeZone: string\n ): ReadonlyAdvancedFilterMap {\n const importedFilters = savedAdvancedFilters.map(\n ([columnIndex, advancedFilter]: DehydratedAdvancedFilter): [\n number,\n {\n options: AdvancedFilterOptions;\n filter: DhType.FilterCondition | null;\n },\n ] => {\n const column = IrisGridUtils.getColumn(columns, columnIndex);\n assertNotNull(column);\n const options = this.hydrateAdvancedFilterOptions(\n column,\n advancedFilter.options\n );\n let filter = null;\n\n try {\n const columnRetrieved = IrisGridUtils.getColumn(columns, columnIndex);\n if (columnRetrieved != null) {\n filter = this.tableUtils.makeAdvancedFilter(\n column,\n options,\n timeZone\n );\n }\n } catch (error) {\n log.error('hydrateAdvancedFilters error with', options, error);\n }\n\n return [columnIndex, { options, filter }];\n }\n );\n\n return new Map(importedFilters);\n }\n\n dehydrateAdvancedFilterOptions(\n column: DhType.Column,\n options: AdvancedFilterOptions\n ): AdvancedFilterOptions {\n const { selectedValues, ...otherOptions } = options;\n return {\n selectedValues: selectedValues?.map((value: unknown) =>\n this.dehydrateValue(value, column?.type)\n ),\n ...otherOptions,\n };\n }\n\n hydrateAdvancedFilterOptions(\n column: DhType.Column,\n options: AdvancedFilterOptions\n ): AdvancedFilterOptions {\n const { selectedValues, ...otherOptions } = options;\n return {\n selectedValues: selectedValues?.map(value =>\n this.hydrateValue(value, column?.type)\n ),\n ...otherOptions,\n };\n }\n\n dehydratePendingDataMap(\n columns: readonly DhType.Column[],\n pendingDataMap: PendingDataMap\n ): DehydratedPendingDataMap<unknown> {\n return [...pendingDataMap].map(([rowIndex, { data }]) => [\n rowIndex,\n {\n data: [...data]\n .filter(([c]) => typeof c === 'number')\n .map(([c, cellData]) => [\n columns[c as number].name,\n this.dehydrateValue(cellData.value, columns[c as number].type),\n ]),\n },\n ]);\n }\n\n hydratePendingDataMap(\n columns: readonly DhType.Column[],\n pendingDataMap: DehydratedPendingDataMap<unknown>\n ): Map<\n number,\n {\n data: Map<ModelIndex | null, CellData>;\n }\n > {\n const columnMap = new Map<ColumnName, number>();\n const getColumnIndex = (columnName: ColumnName): number | undefined => {\n if (!columnMap.has(columnName)) {\n columnMap.set(\n columnName,\n columns.findIndex(({ name }) => name === columnName)\n );\n }\n return columnMap.get(columnName);\n };\n\n return new Map(\n pendingDataMap.map(\n ([rowIndex, { data }]: [number, { data: [string, unknown][] }]) => [\n rowIndex,\n {\n data: new Map(\n data.map(([columnName, value]) => {\n const index = getColumnIndex(columnName);\n assertNotNull(index);\n return [\n getColumnIndex(columnName) ?? null,\n { value: this.hydrateValue(value, columns[index].type) },\n ];\n })\n ),\n },\n ]\n )\n );\n }\n\n dehydratePartitionConfig(\n partitionColumns: readonly DhType.Column[],\n partitionConfig: PartitionConfig | undefined\n ): PartitionConfig | undefined {\n if (partitionConfig == null) {\n return partitionConfig;\n }\n\n return {\n ...partitionConfig,\n partitions: partitionConfig.partitions.map((partition, index) =>\n this.dehydrateValue(partition, partitionColumns[index].type)\n ),\n };\n }\n\n hydratePartitionConfig(\n partitionColumns: readonly DhType.Column[],\n partitionConfig: PartitionConfig | undefined\n ): PartitionConfig | undefined {\n if (partitionConfig == null) {\n return partitionConfig;\n }\n\n return {\n ...partitionConfig,\n partitions: partitionConfig.partitions.map((partition, index) =>\n this.hydrateValue(partition, partitionColumns[index].type)\n ),\n };\n }\n\n /**\n * Dehydrates/serializes a value for storage.\n * @param value The value to dehydrate\n * @param columnType The column type\n */\n dehydrateValue<T>(value: T, columnType: string): string | T | null {\n if (TableUtils.isDateType(columnType)) {\n return this.dehydrateDateTime(\n value as unknown as number | DhType.DateWrapper | Date\n );\n }\n\n if (TableUtils.isLongType(columnType)) {\n return IrisGridUtils.dehydrateLong(value);\n }\n\n return value;\n }\n\n /**\n * Hydrate a value from it's serialized state\n * @param value The dehydrated value that needs to be hydrated\n * @param columnType The type of column\n */\n hydrateValue<T>(\n value: T,\n columnType: string\n ): DhType.DateWrapper | DhType.LongWrapper | T | null {\n if (TableUtils.isDateType(columnType)) {\n return this.hydrateDateTime(value as unknown as string);\n }\n\n if (TableUtils.isLongType(columnType)) {\n return this.hydrateLong(value as unknown as string);\n }\n\n return value;\n }\n\n dehydrateDateTime(value: number | DhType.DateWrapper | Date): string | null {\n return value != null\n ? this.dh.i18n.DateTimeFormat.format(DateUtils.FULL_DATE_FORMAT, value)\n : null;\n }\n\n hydrateDateTime(value: string): DhType.DateWrapper | null {\n return value != null\n ? this.dh.i18n.DateTimeFormat.parse(DateUtils.FULL_DATE_FORMAT, value)\n : null;\n }\n\n hydrateLong(value: string): DhType.LongWrapper | null {\n return value != null ? this.dh.LongWrapper.ofString(value) : null;\n }\n\n /**\n * Import the saved sorts to apply to the model. Does not actually apply the sort.\n * @param columns The columns the sorts will be applied to\n * @param sorts Exported sort definitions\n * @param dropReverse If true, drop reverse sort descriptors from the result\n * @returns The sort descriptors to apply to the model\n */\n hydrateSort(\n columns: readonly DhType.Column[],\n sorts: readonly (DehydratedSort | LegacyDehydratedSort)[],\n dropReverse = false\n ): readonly SortDescriptor[] {\n const { dh } = this;\n return (\n sorts\n .map(sort => {\n const { column: columnIndexOrName, isAbs, direction } = sort;\n if (direction === TableUtils.sortDirection.reverse) {\n return dh.Table.reverse();\n }\n\n const column =\n typeof columnIndexOrName === 'string'\n ? IrisGridUtils.getColumnByName(columns, columnIndexOrName)\n : IrisGridUtils.getColumn(columns, columnIndexOrName);\n\n if (column != null) {\n return {\n column: {\n name: column.name,\n type: column.type,\n },\n isAbs,\n direction,\n };\n }\n return null;\n })\n // If we can't find the column any more, it's null, filter it out\n // If the item is a reverse sort item, and dropReverse is true, filter it out\n // - it will get applied with the `reverse` property\n // This should only happen when loading a legacy dashboard\n .filter(\n item =>\n item != null &&\n (item.direction !== TableUtils.sortDirection.reverse ||\n !dropReverse)\n ) as SortDescriptor[]\n );\n }\n\n hydrateDhSort(\n columns: readonly DhType.Column[],\n sorts: readonly SortDescriptor[]\n ): DhType.Sort[] {\n const { dh } = this;\n return (\n sorts\n .map(sortDescriptor => {\n const {\n column: { name },\n isAbs,\n direction,\n } = sortDescriptor;\n\n if (direction === TableUtils.sortDirection.reverse) {\n return dh.Table.reverse();\n }\n\n const column = IrisGridUtils.getColumnByName(columns, name);\n\n if (column != null) {\n let columnSort = column.sort();\n if (isAbs) {\n columnSort = columnSort.abs();\n }\n if (direction === TableUtils.sortDirection.descending) {\n columnSort = columnSort.desc();\n } else {\n columnSort = columnSort.asc();\n }\n return columnSort;\n }\n\n return null;\n })\n // If we can't find the column any more, it's null, filter it out\n .filter(isNotNullOrUndefined) as DhType.Sort[]\n );\n }\n\n /**\n * Applies the passed in table settings directly to the provided table\n * @param table The table to apply the settings to\n * @param tableSettings Dehydrated table settings extracted with `extractTableSettings`\n * @param timeZone The time zone to make this value in if it is a date type. E.g. America/New_York\n */\n applyTableSettings(\n table: DhType.Table,\n tableSettings: TableSettings,\n timeZone: string\n ): void {\n const { columns } = table;\n\n let quickFilters: DhType.FilterCondition[] = [];\n if (tableSettings.quickFilters) {\n quickFilters = IrisGridUtils.getFiltersFromFilterMap(\n this.hydrateQuickFilters(columns, tableSettings.quickFilters, timeZone)\n );\n }\n\n let advancedFilters: DhType.FilterCondition[] = [];\n if (tableSettings.advancedFilters) {\n advancedFilters = IrisGridUtils.getFiltersFromFilterMap(\n this.hydrateAdvancedFilters(\n columns,\n tableSettings.advancedFilters,\n timeZone\n )\n );\n }\n const inputFilters = this.getFiltersFromInputFilters(\n columns,\n tableSettings.inputFilters,\n timeZone\n );\n\n let sorts: DhType.Sort[] = [];\n if (tableSettings.sorts) {\n sorts = this.hydrateDhSort(\n columns,\n this.hydrateSort(columns, tableSettings.sorts)\n );\n }\n\n let filters = [...quickFilters, ...advancedFilters];\n const { partitions, partitionColumns: partitionColumnNames } =\n tableSettings;\n if (\n partitions &&\n partitions.length &&\n partitionColumnNames &&\n partitionColumnNames?.length\n ) {\n const partitionColumns = partitionColumnNames.map(partitionColumnName =>\n IrisGridUtils.getColumnByName(columns, partitionColumnName)\n );\n for (let i = 0; i < partitionColumns.length; i += 1) {\n if (partitionColumns[i] !== undefined && partitions[i] != null) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const partitionFilter = partitionColumns[i]!.filter().eq(\n this.dh.FilterValue.ofString(partitions[i])\n );\n filters = [partitionFilter, ...filters];\n }\n }\n }\n filters = [...inputFilters, ...filters];\n\n table.applyFilter(filters);\n table.applySort(sorts);\n }\n\n getFiltersFromInputFilters(\n columns: readonly DhType.Column[],\n inputFilters: readonly InputFilter[] = [],\n timeZone?: string\n ): DhType.FilterCondition[] {\n return inputFilters\n .map(({ name, type, value }) => {\n const column = columns.find(\n ({ name: columnName, type: columnType }) =>\n columnName === name && columnType === type\n );\n if (column) {\n try {\n return this.tableUtils.makeQuickFilter(column, value, timeZone);\n } catch (e) {\n // It may be unable to create it because user hasn't completed their input\n log.debug('Unable to create input filter', e);\n }\n }\n\n return null;\n })\n .filter(filter => filter != null) as DhType.FilterCondition[];\n }\n\n /**\n * Get the dh.RangeSet representation of the provided ranges.\n * Ranges are sorted prior to creating the RangeSet. Only the rows are taken into account,\n * RangeSet does not have an option for columns.\n * @param ranges The ranges to get the range set for\n * @returns The rangeset for the provided ranges\n */\n rangeSetFromRanges(ranges: readonly GridRange[]): DhType.RangeSet {\n const { dh } = this;\n const rangeSets = ranges\n .slice()\n .sort((a, b): number => {\n assertNotNull(a.startRow);\n assertNotNull(b.startRow);\n return a.startRow - b.startRow;\n })\n .map(range => {\n const { startRow, endRow } = range;\n assertNotNull(startRow);\n assertNotNull(endRow);\n return dh.RangeSet.ofRange(startRow, endRow);\n });\n return dh.RangeSet.ofRanges(rangeSets);\n }\n\n /**\n * Get the color for a cell value\n * @param theme The IrisGrid theme\n * @param columnType The type of the column\n * @param columnName The name of the column\n * @param value The value of the cell\n * @returns The color for the cell value\n */\n static colorForValue(\n theme: IrisGridThemeType,\n columnType: string,\n columnName: string,\n value: unknown\n ): string {\n if (TableUtils.isDateType(columnType) || columnName === 'Date') {\n assertNotNull(theme.dateColor);\n return theme.dateColor;\n }\n if (TableUtils.isNumberType(columnType)) {\n if ((value as number) > 0) {\n assertNotNull(theme.positiveNumberColor);\n return theme.positiveNumberColor;\n }\n if ((value as number) < 0) {\n assertNotNull(theme.negativeNumberColor);\n return theme.negativeNumberColor;\n }\n assertNotNull(theme.zeroNumberColor);\n return theme.zeroNumberColor;\n }\n return theme.textColor;\n }\n\n /**\n * Determines the text alignment for a cell value\n * @param columnType The type of the column\n * @param columnName The name of the column\n * @returns The text alignment for the cell value\n */\n static textAlignForValue(\n columnType: string,\n columnName: string\n ): CanvasTextAlign {\n if (TableUtils.isDateType(columnType) || columnName === 'Date') {\n return 'center';\n }\n\n if (TableUtils.isNumberType(columnType)) {\n return 'right';\n }\n\n return 'left';\n }\n}\n\nexport default IrisGridUtils;\n"],"mappings":";;;;;;;;;AAAA,SAGEA,SAAS,QAKJ,iBAAiB;AAExB,SACEC,SAAS,EACTC,UAAU,QAKL,wBAAwB;AAC/B,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SACEC,aAAa,EACbC,cAAc,EACdC,WAAW,EACXC,SAAS,EACTC,oBAAoB,QACf,kBAAkB;AAAC,OACnBC,gBAAgB;AAAA,OAChBC,oBAAoB;AAAA,OAiBpBC,gBAAgB;AAAA,OAChBC,iBAAiB;AAAA,SAItBC,8BAA8B;AAKhC,IAAMC,GAAG,GAAGX,GAAG,CAACY,MAAM,CAAC,eAAe,CAAC;;AAqDvC;;AAiEA,OAAO,SAASC,cAAcA,CAC5BC,KAAmC,EACM;EACzC,OAAQA,KAAK,CAAoCC,SAAS,KAAKC,SAAS;AAC1E;AAEA,OAAO,SAASC,cAAcA,CAC5BH,KAAmC,EACM;EACzC,OAAOI,KAAK,CAACC,OAAO,CAAEL,KAAK,CAAoCM,UAAU,CAAC;AAC5E;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,YAAYA,CAACC,CAAS,EAAEC,KAAyB,EAAW;EACnE,OAAOD,CAAC,IAAI,CAAC,IAAIA,CAAC,GAAGC,KAAK,CAACC,MAAM;AACnC;AAEA,SAASC,aAAaA,CAACC,KAAc,EAA+B;EAClE,OAAO,CAACA,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAyBC,MAAM,KAAI,IAAI;AACtD;AAiBA,MAAMC,aAAa,CAAC;EAClB;AACF;AACA;AACA;AACA;AACA;AACA;EACE,OAAOC,kBAAkBA,CACvBC,KAAoB,EACpBC,SAA4B,EACP;IACrB,IAAM;MAAEC,eAAe;MAAEC,cAAc;MAAEC,YAAY;MAAEC;IAAU,CAAC,GAChEJ,SAAS;IAEX,IAAM;MAAEK;IAAQ,CAAC,GAAGN,KAAK;IAEzB,OAAO;MACLE,eAAe;MACfC,cAAc;MACdC,YAAY,EAAE,CAAC,GAAGA,YAAY,CAAC,CAC5BG,MAAM,CACLC,IAAA;QAAA,IAAC;UAAEC,EAAE;UAAEC;QAAK,CAAC,GAAAF,IAAA;QAAA,OACXjB,YAAY,CAACkB,EAAE,EAAEH,OAAO,CAAC,KACvB,OAAOI,IAAI,KAAK,QAAQ,IAAInB,YAAY,CAACmB,IAAI,EAAEJ,OAAO,CAAC,IACtDlB,KAAK,CAACC,OAAO,CAACqB,IAAI,CAAC,IAClBnB,YAAY,CAACmB,IAAI,CAAC,CAAC,CAAC,EAAEJ,OAAO,CAAC,IAC9Bf,YAAY,CAACmB,IAAI,CAAC,CAAC,CAAC,EAAEJ,OAAO,CAAE,CAAC;MAAA,CACxC,CAAC,CACAK,GAAG,CAACC,KAAA;QAAA,IAAC;UAAEH,EAAE;UAAEC;QAAK,CAAC,GAAAE,KAAA;QAAA,OAAM;UACtBH,EAAE,EAAEH,OAAO,CAACG,EAAE,CAAC,CAACI,IAAI;UACpBH,IAAI,EAAEtB,KAAK,CAACC,OAAO,CAACqB,IAAI,CAAC,GACrB,CAACJ,OAAO,CAACI,IAAI,CAAC,CAAC,CAAC,CAAC,CAACG,IAAI,EAAEP,OAAO,CAACI,IAAI,CAAC,CAAC,CAAC,CAAC,CAACG,IAAI,CAAC,GAC9CP,OAAO,CAACI,IAAI,CAAC,CAACG;QACpB,CAAC;MAAA,CAAC,CAAC;MACLR,SAAS,EAAE,CAAC,GAAGA,SAAS;IAC1B,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,OAAOS,gBAAgBA,CACrBd,KAAoB,EACpBC,SAA8B,EAEX;IAAA,IADnBc,aAAgC,GAAAC,SAAA,CAAAtB,MAAA,QAAAsB,SAAA,QAAA9B,SAAA,GAAA8B,SAAA,MAAG,EAAE;IAErC,IAAM;MAAEd,eAAe;MAAEC,cAAc;MAAEC,YAAY;MAAEC;IAAU,CAAC,GAChEJ,SAAS;IAEX,IAAM;MAAEK;IAAQ,CAAC,GAAGN,KAAK;IACzB,IAAMiB,iBAAiB,GACrBnB,aAAa,CAACoB,sBAAsB,CAACH,aAAa,CAAC;IACrD,IAAMI,WAAW,GAAGb,OAAO,CACxBK,GAAG,CAACS,KAAA;MAAA,IAAC;QAAEP;MAAK,CAAC,GAAAO,KAAA;MAAA,OAAKP,IAAI;IAAA,EAAC,CACvBQ,MAAM,CAACJ,iBAAiB,CAAC;IAE5B,OAAO;MACLf,eAAe;MACfC,cAAc;MACdC,YAAY,EAAE,CAAC,GAAGA,YAAY,CAAC,CAC5BO,GAAG,CAACW,KAAA,IAAkB;QAAA,IAAjB;UAAEb,EAAE;UAAEC;QAAK,CAAC,GAAAY,KAAA;QAChB,IAAMC,QAAQ,GAAI/B,CAAkB,IAClC,OAAOA,CAAC,KAAK,QAAQ,GACjB2B,WAAW,CAACK,SAAS,CAACX,IAAI,IAAIA,IAAI,KAAKrB,CAAC,CAAC,GACzCA,CAAC;QAEP,OAAO;UACLiB,EAAE,EAAEc,QAAQ,CAACd,EAAE,CAAC;UAChBC,IAAI,EAAEtB,KAAK,CAACC,OAAO,CAACqB,IAAI,CAAC,GACpB,CAACa,QAAQ,CAACb,IAAI,CAAC,CAAC,CAAC,CAAC,EAAEa,QAAQ,CAACb,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GACvCa,QAAQ,CAACb,IAAI;QACnB,CAAC;MACH,CAAC,CAAC,CACDH,MAAM,CACLkB,KAAA;QAAA,IAAC;UAAEhB,EAAE;UAAEC;QAAK,CAAC,GAAAe,KAAA;QAAA,OACXlC,YAAY,CAACkB,EAAE,EAAEU,WAAW,CAAC,KAC3B,OAAOT,IAAI,KAAK,QAAQ,IAAInB,YAAY,CAACmB,IAAI,EAAES,WAAW,CAAC,IAC1D/B,KAAK,CAACC,OAAO,CAACqB,IAAI,CAAC,IAClBnB,YAAY,CAACmB,IAAI,CAAC,CAAC,CAAC,EAAES,WAAW,CAAC,IAClC5B,YAAY,CAACmB,IAAI,CAAC,CAAC,CAAC,EAAES,WAAW,CAAE,CAAC;MAAA,CAC5C,CAAC;MACHd,SAAS,EAAE,CAAC,GAAGA,SAAS;IAC1B,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,OAAOqB,2BAA2BA,CAChC1B,KAAoB,EACpB2B,kBAKC,EAC6B;IAC9B,IAAM;MAAEC,oBAAoB;MAAEtC,UAAU;MAAEuC;IAAiB,CAAC,GAC1DF,kBAAkB;;IAEpB;IACA,OAAO;MACLC,oBAAoB;MACpBtC,UAAU;MACVuC,gBAAgB,EAAE,CAAC,GAAGA,gBAAgB;IACxC,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,OAAOC,yBAAyBA,CAC9B9B,KAAoB,EACpB2B,kBAAgD,EAKhD;IACA,IAAM;MAAEC,oBAAoB;MAAEC;IAAiB,CAAC,GAAGF,kBAAkB;IAErE,IAAIrC,UAA6B,GAAG,EAAE;IACtC,IAAIH,cAAc,CAACwC,kBAAkB,CAAC,EAAE;MACtCrC,UAAU,GAAGqC,kBAAkB,CAACrC,UAAU;IAC5C,CAAC,MAAM,IAAIqC,kBAAkB,CAAC1C,SAAS,IAAI,IAAI,EAAE;MAC/CK,UAAU,GAAG,CAACqC,kBAAkB,CAAC1C,SAAS,CAAC;IAC7C;IAEA,OAAO;MACL2C,oBAAoB;MACpBtC,UAAU;MACVuC,gBAAgB,EAAE,IAAIE,GAAG,CAAC,CACxB,GAAGrD,gBAAgB,CAACsD,QAAQ,EAC5B,GAAGH,gBAAgB,CACpB;IACH,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOI,qBAAqBA,CAC1BC,YAAoC,EACX;IACzB,OAAO,CAAC,GAAGA,YAAY,CAAC,CAACvB,GAAG,CAACwB,KAAA,IAAgC;MAAA,IAA/B,CAACC,WAAW,EAAEC,WAAW,CAAC,GAAAF,KAAA;MACtD,IAAM;QAAEG;MAAK,CAAC,GAAGD,WAAW;MAC5B,OAAO,CAACD,WAAW,EAAE;QAAEE;MAAK,CAAC,CAAC;IAChC,CAAC,CAAC;EACJ;EAEA,OAAOC,aAAaA,CAAI3C,KAAQ,EAAiB;IAC/C,OAAOA,KAAK,IAAI,IAAI,MAAAyB,MAAA,CAAMzB,KAAK,IAAK,IAAI;EAC1C;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAO4C,aAAaA,CAACC,KAAgC,EAAoB;IACvE,OAAOA,KAAK,CAAC9B,GAAG,CAAC+B,IAAI,IAAI;MACvB,IAAM;QAAEC,MAAM;QAAEC,KAAK;QAAEC;MAAU,CAAC,GAAGH,IAAI;MACzC,OAAO;QACLC,MAAM,EAAEA,MAAM,CAAC9B,IAAI;QACnB+B,KAAK;QACLC;MACF,CAAC;IACH,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOC,oBAAoBA,CACzBC,UAGC,EAQD;IAAA,IAPAC,YAA2B,GAAAhC,SAAA,CAAAtB,MAAA,QAAAsB,SAAA,QAAA9B,SAAA,GAAA8B,SAAA,MAAG,EAAE;IAQhC,IAAM;MAAEW,kBAAkB;MAAEsB;IAAc,CAAC,GAAGF,UAAU;IACxD,IAAMzD,UAAU,GAAGH,cAAc,CAACwC,kBAAkB,CAAC,GACjDA,kBAAkB,CAACrC,UAAU,GAC7B,CAACqC,kBAAkB,CAAC1C,SAAS,CAAC;IAClC,IAAM;MAAEiE,eAAe;MAAEhB,YAAY;MAAEO;IAAM,CAAC,GAAGQ,aAAa;IAE9D,OAAO;MACLC,eAAe;MACfF,YAAY;MACZ1D,UAAU;MACV4C,YAAY;MACZO;IACF,CAAC;EACH;EAEA,OAAOU,yBAAyBA,CAC9B7C,OAAkD,EAEnC;IAAA,IADf0C,YAAoC,GAAAhC,SAAA,CAAAtB,MAAA,QAAAsB,SAAA,QAAA9B,SAAA,GAAA8B,SAAA,MAAG,EAAE;IAEzC,OAAOgC,YAAY,CAACzC,MAAM,CAAC6C,KAAA;MAAA,IAAC;QAAEvC,IAAI;QAAEwC;MAAK,CAAC,GAAAD,KAAA;MAAA,OACxC9C,OAAO,CAACgD,IAAI,CACVC,KAAA;QAAA,IAAC;UAAE1C,IAAI,EAAE2C,UAAU;UAAEH,IAAI,EAAEI;QAAW,CAAC,GAAAF,KAAA;QAAA,OACrCC,UAAU,KAAK3C,IAAI,IAAI4C,UAAU,KAAKJ,IAAI;MAAA,CAC9C,CAAC;IAAA,CACH,CAAC;EACH;EAEA,OAAOK,uBAAuBA,CAC5BC,SAA6D,EACnC;IAC1B,IAAMC,OAAO,GAAG,EAAE;IAElB,IAAMC,IAAI,GAAGzE,KAAK,CAACsB,IAAI,CAACiD,SAAS,CAACE,IAAI,CAAC,CAAC,CAAC;IACzC,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGD,IAAI,CAACnE,MAAM,EAAEoE,CAAC,IAAI,CAAC,EAAE;MACvC,IAAMC,GAAG,GAAGF,IAAI,CAACC,CAAC,CAAC;MACnB,IAAME,IAAI,GAAGL,SAAS,CAACM,GAAG,CAACF,GAAG,CAAC;MAC/B,IAAI,CAAAC,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEzD,MAAM,KAAI,IAAI,EAAE;QACxBqD,OAAO,CAACM,IAAI,CAACF,IAAI,CAACzD,MAAM,CAAC;MAC3B;IACF;IAEA,OAAOqD,OAAO;EAChB;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOO,gBAAgBA,CAACC,gBAA8B,EAAgB;IACpE,OAAO,CAAC,GAAGA,gBAAgB,CAACC,OAAO,CAAC,CAAC,CAAC,CACnC9D,MAAM,CAAC+D,KAAA;MAAA,IAAC,GAAG1E,KAAK,CAAC,GAAA0E,KAAA;MAAA,OAAK1E,KAAK,KAAK,CAAC;IAAA,EAAC,CAClCe,GAAG,CAAC4D,KAAA;MAAA,IAAC,CAACR,GAAG,CAAC,GAAAQ,KAAA;MAAA,OAAKR,GAAG;IAAA,EAAC;EACxB;EAEA,OAAO7C,sBAAsBA,CAC3BH,aAAoC,EACtB;IACd,OAAOA,aAAa,CAACJ,GAAG,CAAC6D,YAAY,IAAIA,YAAY,CAACC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;EACtE;EAEA,OAAOC,2BAA2BA,CAChCC,gBAAuC,EACvC5D,aAAoC,EACtB;IACd,IAAM6D,qBAAqB,GACzB9E,aAAa,CAACoB,sBAAsB,CAACyD,gBAAgB,CAAC;IACxD,IAAM1D,iBAAiB,GACrBnB,aAAa,CAACoB,sBAAsB,CAACH,aAAa,CAAC;IACrD,OAAO6D,qBAAqB,CAACrE,MAAM,CACjCsE,mBAAmB,IAAI,CAAC5D,iBAAiB,CAAC6D,QAAQ,CAACD,mBAAmB,CACxE,CAAC;EACH;EAEA,OAAOE,oBAAoBA,CACzBtC,KAAgC,EAChCtB,WAA8B,EACH;IAC3B,OAAOsB,KAAK,CAAClC,MAAM,CAACmC,IAAI,IAAI,CAACvB,WAAW,CAAC2D,QAAQ,CAACpC,IAAI,CAACC,MAAM,CAAC9B,IAAI,CAAC,CAAC;EACtE;EAEA,OAAOmE,sBAAsBA,CAC3B1E,OAAiC,EACjCsD,OAA+B,EAC/BqB,kBAAyC,EACzB;IAChB,IAAM9D,WAAW,GAAGb,OAAO,CAACK,GAAG,CAACuE,KAAA;MAAA,IAAC;QAAErE;MAAK,CAAC,GAAAqE,KAAA;MAAA,OAAKrE,IAAI;IAAA,EAAC;IACnD,IAAMsE,SAAS,GAAG,IAAIpD,GAAG,CAAC6B,OAAO,CAAC;IAClCqB,kBAAkB,CAACG,OAAO,CAAC5B,UAAU,IACnC2B,SAAS,CAACE,MAAM,CAAClE,WAAW,CAACmE,OAAO,CAAC9B,UAAU,CAAC,CAClD,CAAC;IACD,OAAO2B,SAAS;EAClB;EAEA,OAAOI,4BAA4BA,CACjCjF,OAAiC,EACjCF,YAAsC,EACtC6E,kBAAyC,EACxB;IACjB,IAAM9D,WAAW,GAAGb,OAAO,CAACK,GAAG,CAAC6E,MAAA;MAAA,IAAC;QAAE3E;MAAK,CAAC,GAAA2E,MAAA;MAAA,OAAK3E,IAAI;IAAA,EAAC;IACnD,IAAI4E,QAAQ,GAAG,CAAC,GAAGrF,YAAY,CAAC;IAAC,IAAAsF,KAAA,YAAAA,MAAA,EACsB;MACrD,IAAMC,iBAAiB,GAAGV,kBAAkB,CAACnB,CAAC,CAAC;MAC/C,IAAI8B,kBAAkB,GAAGzE,WAAW,CAACK,SAAS,CAC5CX,IAAI,IAAIA,IAAI,KAAK8E,iBACnB,CAAC;MACD,IAAME,KAAsB,GAAG,EAAE;MACjC,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGL,QAAQ,CAAC/F,MAAM,EAAEoG,CAAC,IAAI,CAAC,EAAE;QAC3C,IAAMC,IAAI,GAAGN,QAAQ,CAACK,CAAC,CAAC;QACxB,IAAME,OAAO,GAAAC,aAAA,KAAQF,IAAI,CAAE;QAC3B,IAAI,CAACG,SAAS,EAAEC,OAAO,CAAC,GAAG/G,KAAK,CAACC,OAAO,CAAC0G,IAAI,CAACrF,IAAI,CAAC,GAC/CqF,IAAI,CAACrF,IAAI,GACT,CAACqF,IAAI,CAACrF,IAAI,EAAEqF,IAAI,CAACrF,IAAI,CAAC;QAE1B,IAAIkF,kBAAkB,IAAIG,IAAI,CAACtF,EAAE,EAAE;UACjCuF,OAAO,CAACvF,EAAE,IAAI,CAAC;QACjB;;QAEA;QACA;QACA,IAAImF,kBAAkB,GAAGM,SAAS,EAAE;UAClCA,SAAS,IAAI,CAAC;QAChB;QAEA,IAAIN,kBAAkB,IAAIO,OAAO,EAAE;UACjCA,OAAO,IAAI,CAAC;QACd;QAEA,IAAID,SAAS,IAAIC,OAAO,IAAID,SAAS,KAAKF,OAAO,CAACvF,EAAE,EAAE;UACpD,IAAIyF,SAAS,KAAKC,OAAO,EAAE;YACzBN,KAAK,CAAC3B,IAAI,CAAA+B,aAAA,CAAAA,aAAA,KAAMD,OAAO;cAAEtF,IAAI,EAAEwF;YAAS,EAAE,CAAC;UAC7C,CAAC,MAAM;YACLL,KAAK,CAAC3B,IAAI,CAAA+B,aAAA,CAAAA,aAAA,KAAMD,OAAO;cAAEtF,IAAI,EAAE,CAACwF,SAAS,EAAEC,OAAO;YAAC,EAAE,CAAC;UACxD;QACF;;QAEA;QACA;QACAP,kBAAkB,GAAG7H,SAAS,CAACqI,cAAc,CAC3CR,kBAAkB,EAClBA,kBAAkB,EAClB,CAACG,IAAI,CACP,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;MACT;MAEAN,QAAQ,GAAGI,KAAK;MAChB1E,WAAW,CAACkF,MAAM,CAChBlF,WAAW,CAACK,SAAS,CAACX,IAAI,IAAIA,IAAI,KAAK8E,iBAAiB,CAAC,EACzD,CACF,CAAC;IACH,CAAC;IAjDD,KAAK,IAAI7B,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGmB,kBAAkB,CAACvF,MAAM,EAAEoE,CAAC,IAAI,CAAC;MAAA4B,KAAA;IAAA;IAkDrD,OAAOD,QAAQ;EACjB;EAEA,OAAOa,sCAAsCA,CAC3CC,qBAA4C,EAC5CtB,kBAAyC,EAC3B;IACd,OAAOsB,qBAAqB,CAAChG,MAAM,CACjCiD,UAAU,IAAI,CAACyB,kBAAkB,CAACH,QAAQ,CAACtB,UAAU,CACvD,CAAC;EACH;EAEA,OAAOgD,wBAAwBA,CAC7BC,YAAsC,EACtCC,IAAY,EACZC,KAAa,EACbvG,YAAsC,EACtCwG,aAAgC,EACf;IACjB,IAAMtG,OAAwB,GAAG,EAAE;IACnC,KAAK,IAAIwD,CAAC,GAAG4C,IAAI,EAAE5C,CAAC,IAAI6C,KAAK,EAAE7C,CAAC,IAAI,CAAC,EAAE;MACrC,IAAM+C,UAAU,GAAG9I,SAAS,CAAC+I,aAAa,CAAChD,CAAC,EAAE1D,YAAY,CAAC;MAC3D,IACEyG,UAAU,IAAI,CAAC,IACfA,UAAU,GAAGJ,YAAY,CAAC/G,MAAM,IAChC,CAACkH,aAAa,CAAC9B,QAAQ,CAAC+B,UAAU,CAAC,EACnC;QACAvG,OAAO,CAAC4D,IAAI,CAACuC,YAAY,CAACI,UAAU,CAAC,CAAC;MACxC;IACF;IACA,OAAOvG,OAAO;EAChB;EAEA,OAAOyG,qBAAqBA,CAC1BN,YAAsC,EACtCO,UAAwB,EACxBC,KAAa,EACb7G,YAAsC,EACtCwG,aAAsC,EACrB;IACjB,IAAMtG,OAAO,GAAG,EAAE;IAClB,IAAIwD,CAAC,GAAGkD,UAAU;IAClB,OAAOlD,CAAC,IAAI,CAAC,IAAIxD,OAAO,CAACZ,MAAM,GAAGuH,KAAK,EAAE;MACvC,IAAMJ,UAAU,GAAG9I,SAAS,CAAC+I,aAAa,CAAChD,CAAC,EAAE1D,YAAY,CAAC;MAC3D,IACEyG,UAAU,IAAI,CAAC,IACfA,UAAU,GAAGJ,YAAY,CAAC/G,MAAM,IAChC,CAACkH,aAAa,CAAC9B,QAAQ,CAAC+B,UAAU,CAAC,EACnC;QACAvG,OAAO,CAAC4G,OAAO,CAACT,YAAY,CAACI,UAAU,CAAC,CAAC;MAC3C;MACA/C,CAAC,IAAI,CAAC;IACR;IACA,OAAOxD,OAAO;EAChB;EAEA,OAAO6G,qBAAqBA,CAC1BV,YAAsC,EACtCO,UAAwB,EACxBC,KAAa,EACb7G,YAAsC,EACtCwG,aAAsC,EACrB;IACjB,IAAMtG,OAAO,GAAG,EAAE;IAClB,IAAIwD,CAAC,GAAGkD,UAAU;IAClB,OAAOlD,CAAC,GAAG2C,YAAY,CAAC/G,MAAM,IAAIY,OAAO,CAACZ,MAAM,GAAGuH,KAAK,EAAE;MACxD,IAAMJ,UAAU,GAAG9I,SAAS,CAAC+I,aAAa,CAAChD,CAAC,EAAE1D,YAAY,CAAC;MAC3D,IACEyG,UAAU,IAAI,CAAC,IACfA,UAAU,GAAGJ,YAAY,CAAC/G,MAAM,IAChC,CAACkH,aAAa,CAAC9B,QAAQ,CAAC+B,UAAU,CAAC,EACnC;QACAvG,OAAO,CAAC4D,IAAI,CAACuC,YAAY,CAACI,UAAU,CAAC,CAAC;MACxC;MACA/C,CAAC,IAAI,CAAC;IACR;IACA,OAAOxD,OAAO;EAChB;EAEA,OAAO8G,iBAAiBA,CACtBX,YAAsC,EACtCY,eAAyC,EACzCC,sBAA6C,EAC5B;IACjB,IAAMC,cAAc,GAAG,CAAC,GAAGF,eAAe,CAAC;IAC3CC,sBAAsB,CAAClC,OAAO,CAAC5B,UAAU,IAAI;MAC3C,IAAMb,MAAM,GAAG8D,YAAY,CAACnD,IAAI,CAACkE,MAAA;QAAA,IAAC;UAAE3G;QAAK,CAAC,GAAA2G,MAAA;QAAA,OAAK3G,IAAI,KAAK2C,UAAU;MAAA,EAAC;MACnE,IAAIb,MAAM,IAAI,IAAI,IAAI,CAAC0E,eAAe,CAACvC,QAAQ,CAACnC,MAAM,CAAC,EAAE;QACvD4E,cAAc,CAACrD,IAAI,CAACvB,MAAM,CAAC;MAC7B;IACF,CAAC,CAAC;IACF,OAAO4E,cAAc;EACvB;EAEA,OAAOE,uBAAuBA,CAC5BnH,OAAiC,EACjCoG,IAAmB,EACnBC,KAAoB,EACpBvG,YAAsC,EAIT;IAAA,IAH7BwG,aAAsC,GAAA5F,SAAA,CAAAtB,MAAA,QAAAsB,SAAA,QAAA9B,SAAA,GAAA8B,SAAA,MAAG,EAAE;IAAA,IAC3CsG,sBAA6C,GAAAtG,SAAA,CAAAtB,MAAA,QAAAsB,SAAA,QAAA9B,SAAA,GAAA8B,SAAA,MAAG,EAAE;IAAA,IAClD0G,WAAW,GAAA1G,SAAA,CAAAtB,MAAA,QAAAsB,SAAA,QAAA9B,SAAA,GAAA8B,SAAA,MAAG,CAAC;IAEf,IAAI0F,IAAI,IAAI,IAAI,IAAIC,KAAK,IAAI,IAAI,EAAE;MACjC,OAAOzH,SAAS;IAClB;IAEA,IAAMyI,aAAa,GAAG7H,aAAa,CAAC0G,wBAAwB,CAC1DlG,OAAO,EACPoG,IAAI,EACJC,KAAK,EACLvG,YAAY,EACZwG,aACF,CAAC;IACD,IAAMgB,WAAW,GAAGD,aAAa,CAACjI,MAAM,GAAGgI,WAAW;IACtD,IAAMG,WAAW,GAAG/H,aAAa,CAACiH,qBAAqB,CACrDzG,OAAO,EACPoG,IAAI,GAAG,CAAC,EACRkB,WAAW,EACXxH,YAAY,EACZwG,aACF,CAAC;IACD,IAAMkB,YAAY,GAAGhI,aAAa,CAACqH,qBAAqB,CACtD7G,OAAO,EACPqG,KAAK,GAAG,CAAC,EACTiB,WAAW,EACXxH,YAAY,EACZwG,aACF,CAAC;IAED,IAAMmB,eAAe,GAAG,CAAC,GAAGF,WAAW,EAAE,GAAGF,aAAa,EAAE,GAAGG,YAAY,CAAC;IAE3E,OAAOhI,aAAa,CAACsH,iBAAiB,CACpC9G,OAAO,EACPyH,eAAe,EACfT,sBACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,OAAOU,qBAAqBA,CAACC,MAA4B,EAAW;IAClE,IAAIA,MAAM,IAAI,IAAI,IAAIA,MAAM,CAACvI,MAAM,KAAK,CAAC,EAAE;MACzC,OAAO,KAAK;IACd;;IAEA;IACA;IACA,IAAMwI,QAAQ,GAAG,IAAInG,GAAG,CAAC,CAAC;IAC1B,KAAK,IAAI+B,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGmE,MAAM,CAACvI,MAAM,EAAEoE,CAAC,IAAI,CAAC,EAAE;MACzC,IAAMqE,KAAK,GAAGF,MAAM,CAACnE,CAAC,CAAC;MACvB,IAAMsE,WAAW,MAAA/G,MAAA,CAAM8G,KAAK,CAACE,QAAQ,OAAAhH,MAAA,CAAI8G,KAAK,CAACG,MAAM,CAAE;MACvD,IAAMC,cAAc,MAAAlH,MAAA,CAAM8G,KAAK,CAACK,WAAW,OAAAnH,MAAA,CAAI8G,KAAK,CAACM,SAAS,CAAE;MAChE,IAAI,CAACP,QAAQ,CAACQ,GAAG,CAACN,WAAW,CAAC,EAAE;QAC9BF,QAAQ,CAACS,GAAG,CAACP,WAAW,EAAE,EAAE,CAAC;MAC/B;MACAF,QAAQ,CAACjE,GAAG,CAACmE,WAAW,CAAC,CAAClE,IAAI,CAACqE,cAAc,CAAC;IAChD;IAEA,IAAM1E,IAAI,GAAG,CAAC,GAAGqE,QAAQ,CAACrE,IAAI,CAAC,CAAC,CAAC;IACjC,IAAM+E,iBAAiB,GAAGV,QAAQ,CAACjE,GAAG,CAACJ,IAAI,CAAC,CAAC,CAAC,CAAC,CAACnB,IAAI,CAAC,CAAC,CAACmG,IAAI,CAAC,GAAG,CAAC;IAChE,KAAK,IAAI/E,EAAC,GAAG,CAAC,EAAEA,EAAC,GAAGD,IAAI,CAACnE,MAAM,EAAEoE,EAAC,IAAI,CAAC,EAAE;MACvC,IAAIoE,QAAQ,CAACjE,GAAG,CAACJ,IAAI,CAACC,EAAC,CAAC,CAAC,CAACpB,IAAI,CAAC,CAAC,CAACmG,IAAI,CAAC,GAAG,CAAC,KAAKD,iBAAiB,EAAE;QAChE,OAAO,KAAK;MACd;IACF;IAEA,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;EACE,OAAOrJ,YAAYA,CAACK,KAAc,EAAW;IAC3C,IAAI,CAACkJ,MAAM,CAACC,SAAS,CAACnJ,KAAK,CAAC,EAAE;MAC5B,OAAO,KAAK;IACd;IACA,IAAI,EAAE,OAAOA,KAAK,KAAK,QAAQ,CAAC,EAAE;MAChC,OAAO,KAAK;IACd;IACA,OAAOA,KAAK,IAAI,CAAC;EACnB;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,OAAOoJ,iBAAiBA,CACtBf,MAA4B,EAC5BgB,UAAoC,EACnB;IACjB,IAAIhB,MAAM,IAAI,IAAI,IAAIA,MAAM,CAACvI,MAAM,KAAK,CAAC,EAAE;MACzC,OAAO,EAAE;IACX;IACA,IAAIuI,MAAM,CAAC,CAAC,CAAC,CAACO,WAAW,KAAK,IAAI,IAAIP,MAAM,CAAC,CAAC,CAAC,CAACQ,SAAS,KAAK,IAAI,EAAE;MAClE;MACA,OAAO,CAAC,GAAGQ,UAAU,CAAC;IACxB;IAEA,IAAMC,SAAS,GAAG,IAAIC,GAAG,CAAa,CAAC;IACvC,KAAK,IAAIrF,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGmE,MAAM,CAACvI,MAAM,EAAEoE,CAAC,IAAI,CAAC,EAAE;MACzC,IAAMqE,KAAK,GAAGF,MAAM,CAACnE,CAAC,CAAC;MACvB3F,aAAa,CAACgK,KAAK,CAACK,WAAW,CAAC;MAChCrK,aAAa,CAACgK,KAAK,CAACM,SAAS,CAAC;MAC9B,KACE,IAAIW,CAAC,IAAAC,kBAAA,GAAGlB,KAAK,CAACK,WAAW,cAAAa,kBAAA,cAAAA,kBAAA,GAAI,CAAC,EAC9BD,CAAC,MAAAE,gBAAA,GAAKnB,KAAK,CAACM,SAAS,cAAAa,gBAAA,cAAAA,gBAAA,GAAIL,UAAU,CAACvJ,MAAM,GAAG,CAAC,CAAC,EAC/C0J,CAAC,IAAI,CAAC,EACN;QAAA,IAAAC,kBAAA,EAAAC,gBAAA;QACAJ,SAAS,CAACK,GAAG,CAACH,CAAC,CAAC;MAClB;IACF;IACA,OAAO,CAAC,GAAGF,SAAS,CAAC,CAACvI,GAAG,CAACyI,CAAC,IAAIH,UAAU,CAACG,CAAC,CAAC,CAAC;EAC/C;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOI,oBAAoBA,CAACC,IAAsB,EAAe;IAC/D,IAAM;MAAEnJ,OAAO;MAAEoJ;IAAK,CAAC,GAAGD,IAAI;IAC9B,IAAME,MAAM,GAAG,EAAE;IACjB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,IAAI,CAAChK,MAAM,EAAEkK,CAAC,IAAI,CAAC,EAAE;MACvC,IAAMC,GAAG,GAAGH,IAAI,CAACE,CAAC,CAAC;MACnB,IAAME,OAAO,GAAG,EAAE;MAClB,KAAK,IAAIV,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG9I,OAAO,CAACZ,MAAM,EAAE0J,CAAC,IAAI,CAAC,EAAE;QAC1C,IAAMzG,MAAM,GAAGrC,OAAO,CAAC8I,CAAC,CAAC;QACzB,IAAMxJ,KAAK,GAAGiK,GAAG,CAAC5F,GAAG,CAACtB,MAAM,CAAC;QAC7BmH,OAAO,CAAC5F,IAAI,CAACtE,KAAK,CAAC;MACrB;MACA+J,MAAM,CAACzF,IAAI,CAAC4F,OAAO,CAAC;IACtB;IACA,OAAOH,MAAM;EACf;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,OAAOI,oBAAoBA,CACzBC,eAAyC,EACzCC,MAAkC,EAClCC,mBAAwC,EACZ;IAAA,IAAAC,qBAAA,EAAAC,eAAA;IAC5B,IAAI,EAAAD,qBAAA,GAACF,MAAM,aAANA,MAAM,gBAAAG,eAAA,GAANH,MAAM,CAAE3J,OAAO,cAAA8J,eAAA,uBAAfA,eAAA,CAAiB1K,MAAM,cAAAyK,qBAAA,cAAAA,qBAAA,GAAI,CAAC,MAAM,CAAC,EAAE;MACxC,OAAO,IAAI;IACb;IAEA,IAAM;MACJ7J,OAAO,EAAE+J,eAAe,GAAG,EAAE;MAC7BC,gBAAgB,EAAEC,mBAAmB,GAAG,IAAI;MAC5CC,wBAAwB,GAAG,IAAI;MAC/BC,mBAAmB,GAAG;IACxB,CAAC,GAAGR,MAAM,aAANA,MAAM,cAANA,MAAM,GAAI,CAAC,CAAC;IAChB,IAAM;MAAES,YAAY,GAAG;IAAG,CAAC,GAAGR,mBAAmB,aAAnBA,mBAAmB,cAAnBA,mBAAmB,GAAI,CAAC,CAAC;IACvD,IAAMS,oBAAoB,GAAGD,YAAY,CAACnK,MAAM,CAC9CqK,MAAA;MAAA,IAAC;QAAEC;MAAU,CAAC,GAAAD,MAAA;MAAA,OAAK,CAACpM,gBAAgB,CAACsM,kBAAkB,CAACD,SAAS,CAAC;IAAA,CACpE,CAAC;IACD,IAAME,kBAAkB,GAAGJ,oBAAoB,CAAChK,GAAG,CACjDqK,MAAA;MAAA,IAAC;QAAEH,SAAS;QAAEI,QAAQ;QAAEC;MAAO,CAAC,GAAAF,MAAA;MAAA,OAC9BxM,gBAAgB,CAAC2M,iBAAiB,CAACN,SAAS,CAAC,GACzC,EAAE,GACFrM,gBAAgB,CAAC4M,uBAAuB,CACtCpB,eAAe,EACfa,SAAS,EACTI,QAAQ,EACRC,MACF,CAAC;IAAA,CACT,CAAC;IAED,IAAMG,cAAc,GAAG,CAAC,CAA2C;IACnE;IACA,KAAK,IAAIvH,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG6G,oBAAoB,CAACjL,MAAM,EAAEoE,CAAC,IAAI,CAAC,EAAE;MACvDuH,cAAc,CAACV,oBAAoB,CAAC7G,CAAC,CAAC,CAAC+G,SAAS,CAAC,GAAGE,kBAAkB,CAACjH,CAAC,CAAC;IAC3E;IAEA,IAAI0G,wBAAwB,EAAE;MAC5B;MACA,IAAMc,sBAAsB,GAAG,IAAInC,GAAG,CACpCa,eAAe,CACZrJ,GAAG,CAACyI,CAAC,IAAIA,CAAC,CAACvI,IAAI,CAAC,CAChBN,MAAM,CAACM,IAAI,IAAI,CAACwJ,eAAe,CAACvF,QAAQ,CAACjE,IAAI,CAAC,CACnD,CAAC;MACDkK,kBAAkB,CAAC3F,OAAO,CAAC9E,OAAO,IAAI;QACpCA,OAAO,CAAC8E,OAAO,CAACvE,IAAI,IAAIyK,sBAAsB,CAACjG,MAAM,CAACxE,IAAI,CAAC,CAAC;MAC9D,CAAC,CAAC;MAEF,IAAIyK,sBAAsB,CAACC,IAAI,GAAG,CAAC,EAAE;QAAA,IAAAC,qBAAA;QACnC,IAAMC,eAAe,IAAAD,qBAAA,GACnBH,cAAc,CAAC5M,oBAAoB,CAACiN,KAAK,CAAC,cAAAF,qBAAA,cAAAA,qBAAA,GAAI,EAAE;QAClDH,cAAc,CAAC5M,oBAAoB,CAACiN,KAAK,CAAC,GAAG,CAC3C,GAAGD,eAAe,EAClB,GAAGH,sBAAsB,CAC1B;MACH;IACF;IAEA,OAAO;MACLjB,eAAe;MACfE,mBAAmB;MACnBE,mBAAmB;MACnBC,YAAY,EAAEW;IAChB,CAAC;EACH;;EAEA;AACF;AACA;AACA;EACE,OAAOM,gBAAgBA,CAACC,cAAkC,EAAQ;IAChEA,cAAc,CAACxG,OAAO,CAAC,CAACyE,GAAG,EAAEgC,QAAQ,KAAK;MACxC,IAAI,CAAC/L,aAAa,CAACP,YAAY,CAACsM,QAAQ,CAAC,EAAE;QACzC,MAAM,IAAIC,KAAK,qBAAAzK,MAAA,CAAqBwK,QAAQ,CAAE,CAAC;MACjD;MAEA,IAAM;QAAEpC;MAAK,CAAC,GAAGI,GAAG;MACpBJ,IAAI,CAACrE,OAAO,CAAC,CAACxF,KAAK,EAAEwC,WAAW,KAAK;QACnC,IAAI,CAACtC,aAAa,CAACP,YAAY,CAAC6C,WAAW,CAAC,EAAE;UAC5C,MAAM,IAAI0J,KAAK,wBAAAzK,MAAA,CAAwBe,WAAW,CAAE,CAAC;QACvD;MACF,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,OAAO2J,SAASA,CACdzL,OAAiC,EACjC8B,WAAuB,EACD;IACtB,IAAIA,WAAW,GAAG9B,OAAO,CAACZ,MAAM,EAAE;MAChC,OAAOY,OAAO,CAAC8B,WAAW,CAAC;IAC7B;IAEAvD,GAAG,CAACmN,KAAK,CAAC,2BAA2B,EAAE5J,WAAW,EAAE,IAAI,EAAE9B,OAAO,CAACZ,MAAM,CAAC;IAEzE,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOuM,eAAeA,CACpB3L,OAAiC,EACjCkD,UAAsB,EACK;IAC3B;IACA,IAAMb,MAAM,GAAGuJ,MAAM,CAACC,MAAM,CAAC7L,OAAO,CAAC,CAACgD,IAAI,CACxC8I,MAAA;MAAA,IAAC;QAAEvL;MAAK,CAAC,GAAAuL,MAAA;MAAA,OAAKvL,IAAI,KAAK2C,UAAU;IAAA,CACnC,CAAC;IACD,IAAIb,MAAM,IAAI,IAAI,EAAE;MAClB9D,GAAG,CAACmN,KAAK,CACP,mCAAmC,EACnCxI,UAAU,EACVlD,OAAO,CAACK,GAAG,CAAC0L,MAAA;QAAA,IAAC;UAAExL;QAAK,CAAC,GAAAwL,MAAA;QAAA,OAAKxL,IAAI;MAAA,EAChC,CAAC;IACH;IAEA,OAAO8B,MAAM;EACf;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,OAAO2J,gCAAgCA,CACrChM,OAAiC,EACjCsD,OAA0C,EAC3B;IACf,OAAOA,OAAO,CACXjD,GAAG,CAAC4L,MAAA,IAA0C;MAAA,IAAzC;QAAE1L,IAAI;QAAEN;MAAO,CAAC,GAAAgM,MAAA;MACpB,IAAMC,KAAK,GAAGlM,OAAO,CAACkB,SAAS,CAACmB,MAAM,IAAIA,MAAM,CAAC9B,IAAI,KAAKA,IAAI,CAAC;MAC/D,OAAO2L,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAACA,KAAK,EAAEjM,MAAM,CAAC;IAC3C,CAAC,CAAC,CACDA,MAAM,CAACkM,YAAY,IAAIA,YAAY,IAAI,IAAI,CAAC;EACjD;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOC,sBAAsBA,CAC3BjJ,UAAyB,EACzBkJ,UAAwB,EAChB;IACRA,UAAU,CAACjK,IAAI,CAAC,CAACkK,CAAC,EAAEC,CAAC,KAAK;MACxB;MACA,IAAID,CAAC,CAACE,QAAQ,KAAK,IAAI,IAAID,CAAC,CAACC,QAAQ,KAAK,IAAI,EAAE;QAC9C,OAAO,CAAC;MACV;MACA,IAAIF,CAAC,CAACE,QAAQ,KAAK,IAAI,IAAID,CAAC,CAACC,QAAQ,KAAK,IAAI,EAAE;QAC9C,OAAO,CAAC,CAAC;MACX;MACA,OAAOF,CAAC,CAACG,gBAAgB,GAAGF,CAAC,CAACE,gBAAgB;IAChD,CAAC,CAAC;IAEF,IAAIC,YAAY,GAAG,EAAE;IACrB,KAAK,IAAIlJ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG6I,UAAU,CAACjN,MAAM,EAAEoE,CAAC,IAAI,CAAC,EAAE;MAC7C,IAAM;QAAExB,IAAI;QAAE1C,KAAK;QAAEkN;MAAS,CAAC,GAAGH,UAAU,CAAC7I,CAAC,CAAC;MAC/C,IAAIlE,KAAK,KAAKV,SAAS,EAAE;QACvB,IAAI+N,MAAM,GAAG,EAAE;QACf,IAAIH,QAAQ,KAAK5N,SAAS,EAAE;UAC1B,IAAIU,KAAK,IAAI,IAAI,IAAIkN,QAAQ,KAAK,IAAI,EAAE;YACtCG,MAAM,GAAG,GAAG;UACd,CAAC,MAAM,IAAIH,QAAQ,KAAK,IAAI,EAAE;YAC5B,IAAIA,QAAQ,KAAK,YAAY,IAAIA,QAAQ,KAAK,UAAU,EAAE;cACxDG,MAAM,GAAG,GAAG;YACd,CAAC,MAAM;cACLA,MAAM,GAAGhP,UAAU,CAACiP,uBAAuB,CAACJ,QAAQ,CAAC;YACvD;UACF;QACF;QAEA,IAAIK,UAAU,MAAA9L,MAAA,CAAM4L,MAAM,EAAA5L,MAAA,CAAGiB,IAAI,CAAE;QACnC,IAAIwK,QAAQ,KAAK,YAAY,EAAE;UAC7BK,UAAU,MAAA9L,MAAA,CAAMiB,IAAI,EAAAjB,MAAA,CAAG4L,MAAM,CAAE;QACjC;QACA,IACExJ,UAAU,IAAI,IAAI,IAClB7D,KAAK,KAAK,IAAI,IACd3B,UAAU,CAACmP,UAAU,CAAC3J,UAAU,CAAC,EACjC;UACA0J,UAAU,MAAA9L,MAAA,CAAM4L,MAAM,EAAA5L,MAAA,CAAGgM,MAAM,CAACC,YAAY,CAACC,QAAQ,CAACjL,IAAI,EAAE,EAAE,CAAC,CAAC,CAAE;QACpE;QACA,IAAIwB,CAAC,KAAK,CAAC,EAAE;UACXkJ,YAAY,IAAIF,QAAQ,KAAK,IAAI,GAAG,MAAM,GAAG,MAAM;QACrD;QACAE,YAAY,IAAIG,UAAU;MAC5B;IACF;IACA,OAAOH,YAAY;EACrB;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,OAAOQ,uBAAuBA,CAI5BxN,KAAoB,EACpByN,WAAgD,EAQhD;IAAA,IAPAC,qBAAqC,GAAA1M,SAAA,CAAAtB,MAAA,QAAAsB,SAAA,QAAA9B,SAAA,GAAA8B,SAAA,MAAI2M,IAAO,IAC9C,IAAIhP,iBAAiB,CAACgP,IAAI,CAAM;IAOlC,IAAIC,QAAQ,GAAG,CAAC;IAChB,IAAMC,SAAyB,GAAG,IAAI9L,GAAG,CAAC,CAAC;IAC3C,IAAM+L,QAAwB,GAAG,IAAI/L,GAAG,CAAC,CAAC;;IAE1C;IACA,IAAMgM,MAAM,GAAGN,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAElN,MAAM,CAChCyN,MAAA;MAAA,IAAC;QAAEC;MAAS,CAAC,GAAAD,MAAA;MAAA,OAAKC,QAAQ,IAAI,IAAI,IAAIA,QAAQ,CAACvO,MAAM,GAAG,CAAC;IAAA,CAC3D,CAAC;IAED,IAAIqO,MAAM,CAACrO,MAAM,KAAK,CAAC,EAAE;MACvB,OAAO;QAAEqO,MAAM,EAAE,EAAE;QAAEH,QAAQ;QAAEC,SAAS;QAAEC;MAAS,CAAC;IACtD;IAEA,IAAMI,gBAAgB,GAAG,IAAInM,GAAG,CAACgM,MAAM,CAACpN,GAAG,CAACwN,KAAK,IAAI,CAACA,KAAK,CAACtN,IAAI,EAAEsN,KAAK,CAAC,CAAC,CAAC;IAC1E,IAAMC,YAAY,GAAG,IAAIjF,GAAG,CAAS,CAAC;IAEtC,IAAMkF,QAAQ,GAAIF,KAA6B,IAAQ;MAAA,IAAAG,eAAA;MACrD,IAAM;QAAEzN;MAAK,CAAC,GAAGsN,KAAK;MAEtBhQ,aAAa,CAAC0C,IAAI,EAAE,iCAAiC,CAAC;MAEtD,IAAMuB,WAAW,GAAGpC,KAAK,CAACuO,oBAAoB,CAAC1N,IAAI,CAAC;MACpD;MACA;MACA,IAAIuB,WAAW,IAAI,IAAI,IAAIA,WAAW,IAAI,CAAC,EAAE;QAC3C,MAAM,IAAI0J,KAAK,iDAAAzK,MAAA,CAAiDR,IAAI,CAAE,CAAC;MACzE;MAEA,IAAM2N,aAAa,GAAGV,QAAQ,CAAC7J,GAAG,CAACpD,IAAI,CAAC;MAExC,IAAI2N,aAAa,EAAE;QACjB,OAAOA,aAAa;MACtB;MAEA,IAAMC,YAA+B,GAAG,EAAE;MAC1C,IAAIC,KAAK,GAAG,CAAC;MAEb,IAAIP,KAAK,CAACF,QAAQ,IAAI,IAAI,EAAE;QAC1B,MAAM,IAAInC,KAAK,wBAAAzK,MAAA,CAAwBR,IAAI,qBAAkB,CAAC;MAChE;MAEAsN,KAAK,CAACF,QAAQ,CAAC7I,OAAO,CAACuJ,SAAS,IAAI;QAClC,IAAIP,YAAY,CAAC1F,GAAG,CAACiG,SAAS,CAAC,EAAE;UAC/B,MAAM,IAAI7C,KAAK,uBAAAzK,MAAA,CACSsN,SAAS,kCACjC,CAAC;QACH;QACAP,YAAY,CAAC7E,GAAG,CAACoF,SAAS,CAAC;QAE3B,IAAMC,UAAU,GAAGV,gBAAgB,CAACjK,GAAG,CAAC0K,SAAS,CAAC;QAClD,IAAME,UAAU,GAAG7O,KAAK,CAACuO,oBAAoB,CAACI,SAAS,CAAC;QACxD,IAAIC,UAAU,EAAE;UACd;UACA,IAAME,UAAU,GAAGT,QAAQ,CAACO,UAAU,CAAC;UACvCH,YAAY,CAACvK,IAAI,CAAC,GAAG4K,UAAU,CAACL,YAAY,CAAC;UAC7CC,KAAK,GAAGK,IAAI,CAACC,GAAG,CAACN,KAAK,EAAEI,UAAU,CAACJ,KAAK,GAAG,CAAC,CAAC;QAC/C,CAAC,MAAM,IAAIG,UAAU,IAAI,IAAI,EAAE;UAC7B;UACAJ,YAAY,CAACvK,IAAI,CAAC2K,UAAU,CAAC;UAC7BH,KAAK,GAAGK,IAAI,CAACC,GAAG,CAACN,KAAK,EAAE,CAAC,CAAC;QAC5B,CAAC,MAAM;UACL,MAAM,IAAI5C,KAAK,kBAAAzK,MAAA,CAAkBsN,SAAS,gBAAAtN,MAAA,CAAaR,IAAI,CAAE,CAAC;QAChE;MACF,CAAC,CAAC;MAEF,IAAMoO,iBAAiB,GAAAhJ,aAAA,CAAAA,aAAA,KACjBkI,KAAK;QACTtN,IAAI;QACJoN,QAAQ,EAAEE,KAAK,CAACF,QAAQ;QACxBS,KAAK;QACLD,YAAY,EAAEA,YAAY,CAACS,IAAI,CAAC;MAAC,EAClC;MAED,IAAMC,iBAAiB,GAAGzB,qBAAqB,CAACuB,iBAAiB,CAAC;MAElEnB,QAAQ,CAACnF,GAAG,CAAC9H,IAAI,EAAEsO,iBAAiB,CAAC;MACrC,CAAAb,eAAA,GAAAH,KAAK,CAACF,QAAQ,cAAAK,eAAA,eAAdA,eAAA,CAAgBlJ,OAAO,CAACuJ,SAAS,IAC/Bd,SAAS,CAAClF,GAAG,CAACgG,SAAS,EAAEQ,iBAAiB,CAC5C,CAAC;MAEDvB,QAAQ,GAAGmB,IAAI,CAACC,GAAG,CAACpB,QAAQ,EAAEuB,iBAAiB,CAACT,KAAK,GAAG,CAAC,CAAC;MAC1D,OAAOS,iBAAiB;IAC1B,CAAC;IAED,IAAMC,UAAU,GAAG,IAAIjG,GAAG,CAAC,CAAC;IAE5B4E,MAAM,CAAC3I,OAAO,CAAC+I,KAAK,IAAI;MACtB,IAAM;QAAEtN;MAAK,CAAC,GAAGsN,KAAK;MACtB,IAAIiB,UAAU,CAAC1G,GAAG,CAAC7H,IAAI,CAAC,EAAE;QACxB,MAAM,IAAIiL,KAAK,iCAAAzK,MAAA,CAAiCR,IAAI,CAAE,CAAC;MACzD;MACAuO,UAAU,CAAC7F,GAAG,CAAC1I,IAAI,CAAC;MACpBwN,QAAQ,CAACF,KAAK,CAAC;IACjB,CAAC,CAAC;IAEFL,QAAQ,CAAC1I,OAAO,CAAC+I,KAAK,IAAI;MAAA,IAAAkB,cAAA;MACxBlB,KAAK,CAACmB,SAAS,EAAAD,cAAA,GAACxB,SAAS,CAAC5J,GAAG,CAACkK,KAAK,CAACtN,IAAI,CAAC,cAAAwO,cAAA,uBAAzBA,cAAA,CAA2BxO,IAAI,CAAC;IAClD,CAAC,CAAC;IAEF,OAAO;MAAEkN,MAAM,EAAE,CAAC,GAAGD,QAAQ,CAAC3B,MAAM,CAAC,CAAC,CAAC;MAAEyB,QAAQ;MAAEE,QAAQ;MAAED;IAAU,CAAC;EAC1E;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAO0B,kBAAkBA,CAAC3P,KAAc,EAAE6D,UAAkB,EAAU;IACpE,IACEA,UAAU,IAAI,IAAI,IAClBxF,UAAU,CAACmP,UAAU,CAAC3J,UAAU,CAAC,IACjC7D,KAAK,IAAI,IAAI,IACb,OAAOA,KAAK,KAAK,QAAQ,EACzB;MACA,OAAOyN,MAAM,CAACC,YAAY,CAAC1N,KAAK,CAAC;IACnC;IACA,IAAI3B,UAAU,CAACuR,UAAU,CAAC/L,UAAU,CAAC,IAAI9D,aAAa,CAACC,KAAK,CAAC,EAAE;MAC7D,IAAM6P,IAAI,GAAG,IAAIC,IAAI,CAAC9P,KAAK,CAACC,MAAM,CAAC,CAAC,CAAC;MACrC,IAAM8P,MAAM,GAAGF,IAAI,CAACG,iBAAiB,CAAC,CAAC;MACvC,IAAMC,UAAU,GAAG,IAAIH,IAAI,CAACD,IAAI,CAACK,OAAO,CAAC,CAAC,GAAGH,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC;MAChE,IAAMI,QAAQ,GAAGF,UAAU,CAACG,WAAW,CAAC,CAAC;MACzC,IAAMC,aAAa,GAAGF,QAAQ,CAACG,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAACC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;MACjE,OAAOF,aAAa;IACtB;IACA,IAAIrQ,KAAK,IAAI,IAAI,EAAE;MACjB,OAAO,EAAE;IACX;IACA,UAAAyB,MAAA,CAAUzB,KAAK;EACjB;EAMAwQ,WAAWA,CAACC,EAAiB,EAAE;IAAAC,eAAA;IAAAA,eAAA;IAC7B,IAAI,CAACD,EAAE,GAAGA,EAAE;IACZ,IAAI,CAACE,UAAU,GAAG,IAAItS,UAAU,CAACoS,EAAE,CAAC;IACpCjS,cAAc,CAAC,IAAI,CAAC;EACtB;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEoS,sBAAsBA,CACpBxQ,KAAoB,EACpBiD,aAAoC,EACX;IACzB,IAAM;MACJiH,mBAAmB,GAAG;QAAEQ,YAAY,EAAErM,WAAW;QAAEoS,SAAS,EAAE;MAAM,CAAC;MACrEvN,eAAe;MACfwN,qBAAqB;MACrBC,kBAAkB,GAAGrS,SAAS;MAC9BsS,gBAAgB;MAChBC,OAAO,EAAE;QAAEzM,gBAAgB;QAAE0M;MAAe,CAAC,GAAG;QAC9C1M,gBAAgB,EAAE9F,SAAS;QAC3BwS,cAAc,EAAExS;MAClB,CAAC;MACD4D,YAAY;MACZnB,aAAa;MACbgQ,kBAAkB,GAAG1S,WAAW;MAChC2S,OAAO;MACPC,YAAY;MACZC,aAAa;MACbC,WAAW;MACX5K,qBAAqB,GAAGlI,WAAW;MACnC+S,qBAAqB;MACrB3O,KAAK;MACL4O,mBAAmB;MACnBzF,cAAc,GAAGtN,SAAS;MAC1BgT,aAAa;MACbC,kBAAkB;MAClBC;IACF,CAAC,GAAGvO,aAAa;IACjB,IAAM;MAAE3C;IAAQ,CAAC,GAAGN,KAAK;IACzB,IAAMyR,gBAAgB,GAAG7S,8BAA8B,CAACoB,KAAK,CAAC,GAC1DA,KAAK,CAACyR,gBAAgB,GACtB,EAAE;;IAEN;IACA,OAAO;MACLvO,eAAe,EAAE,IAAI,CAACwO,wBAAwB,CAACpR,OAAO,EAAE4C,eAAe,CAAC;MACxEgH,mBAAmB;MACnBwG,qBAAqB,EAAE,CAAC,GAAGA,qBAAqB,CAAC;MACjDC,kBAAkB,EAAE,CAAC,GAAGA,kBAAkB,CAAC;MAC3CC,gBAAgB;MAChB1O,YAAY,EAAEpC,aAAa,CAACmC,qBAAqB,CAACC,YAAY,CAAC;MAC/DO,KAAK,EAAE3C,aAAa,CAAC0C,aAAa,CAACC,KAAK,CAAC;MACzC2B,gBAAgB,EAAE,CAAC,GAAGA,gBAAgB,CAAC,CACpC7D,MAAM,CACLoR,MAAA;QAAA,IAAC,CAACvP,WAAW,CAAC,GAAAuP,MAAA;QAAA,OACZvP,WAAW,IAAI,IAAI,IACnBA,WAAW,IAAI,CAAC,IAChBA,WAAW,GAAG9B,OAAO,CAACZ,MAAM;MAAA,CAChC,CAAC,CACAiB,GAAG,CAACiR,MAAA;QAAA,IAAC,CAACxP,WAAW,EAAEyP,KAAK,CAAC,GAAAD,MAAA;QAAA,OAAK,CAACtR,OAAO,CAAC8B,WAAW,CAAC,CAACvB,IAAI,EAAEgR,KAAK,CAAC;MAAA,EAAC;MACpEf,cAAc,EAAE,CAAC,GAAGA,cAAc,CAAC;MACnC/P,aAAa,EAAE,CAAC,GAAGA,aAAa,CAAC;MACjCgQ,kBAAkB,EAAE,CAAC,GAAGA,kBAAkB,CAAC;MAC3CC,OAAO;MACPC,YAAY;MACZC,aAAa;MACbC,WAAW;MACX5K,qBAAqB,EAAE,CAAC,GAAGA,qBAAqB,CAAC;MACjD6K,qBAAqB;MACrBC,mBAAmB;MACnBzF,cAAc,EAAE,IAAI,CAACkG,uBAAuB,CAACxR,OAAO,EAAEsL,cAAc,CAAC;MACrE0F,aAAa;MACbC,kBAAkB,EAAEA,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CAAE5Q,GAAG,CAACqD,IAAI;QAAA,IAAA+N,WAAA;QAAA,OAAK;UACnDlR,IAAI,EAAEmD,IAAI,CAACnD,IAAI;UACfoN,QAAQ,EAAEjK,IAAI,CAACiK,QAAQ;UACvB+D,KAAK,GAAAD,WAAA,GAAE/N,IAAI,CAACgO,KAAK,cAAAD,WAAA,cAAAA,WAAA,GAAI;QACvB,CAAC;MAAA,CAAC,CAAC;MACHP,eAAe,EAAE,IAAI,CAACS,wBAAwB,CAC5CR,gBAAgB,EAChBD,eACF;IACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;EACEU,oBAAoBA,CAClBlS,KAAoB,EACpBiD,aAAsC,EAItC;IAAA,IAAAkP,MAAA,EAAAC,kBAAA;IACA,IAAM;MACJlP,eAAe;MACfgH,mBAAmB,GAAG;QAAEQ,YAAY,EAAE,EAAE;QAAE+F,SAAS,EAAE;MAAM,CAAC;MAC5DC,qBAAqB;MACrBC,kBAAkB,GAAG,EAAE;MACvBC,gBAAgB;MAChB1O,YAAY;MACZO,KAAK;MACL1B,aAAa;MACbgQ,kBAAkB;MAClB3M,gBAAgB;MAChB0M,cAAc;MACduB,WAAW;MACXrB,OAAO;MACPC,YAAY,GAAG/R,SAAS;MACxBgS,aAAa;MACbC,WAAW;MACX5K,qBAAqB;MACrB6K,qBAAqB;MACrBC,mBAAmB,GAAG,IAAI;MAC1BzF,cAAc,GAAG,EAAE;MACnB0F,aAAa;MACbC,kBAAkB;MAClBC;IACF,CAAC,GAAGvO,aAAa;IACjB,IAAM;MAAE3C,OAAO;MAAEgS;IAAU,CAAC,GAAGtS,KAAK;IACpC,IAAMyR,gBAAgB,GAAG7S,8BAA8B,CAACoB,KAAK,CAAC,GAC1DA,KAAK,CAACyR,gBAAgB,GACtB,EAAE;IACN,OAAO;MACLvO,eAAe,EAAE,IAAI,CAACqP,sBAAsB,CAC1CjS,OAAO,EACP4C,eAAe,EACfoP,SAAS,CAACE,QACZ,CAAC;MACDtI,mBAAmB;MACnBwG,qBAAqB,EAAE,IAAI3O,GAAG,CAAC2O,qBAAqB,CAAC;MACrDC,kBAAkB,EAAE,IAAI5O,GAAG,CAAC4O,kBAAkB,CAAC;MAC/CC,gBAAgB;MAChB1O,YAAY,EAAE,IAAI,CAACuQ,mBAAmB,CACpCnS,OAAO,EACP4B,YAAY,EACZoQ,SAAS,CAACE,QACZ,CAAC;MACD/P,KAAK,EAAE,IAAI,CAACiQ,WAAW,CAACpS,OAAO,EAAEmC,KAAK,EAAE,IAAI,CAAC;MAC7C2B,gBAAgB,EAAE,IAAIrC,GAAG,CACvBqC,gBAAgB,CACbzD,GAAG,CACFgS,MAAA,IAAkE;QAAA,IAAjE,CAAChQ,MAAM,EAAEkP,KAAK,CAA4B,GAAAc,MAAA;QACzC,IACE,OAAOhQ,MAAM,KAAK,QAAQ,IACzBA,MAAM,YAAwB0K,MAAM,EACrC;UACA,OAAO,CACL/M,OAAO,CAACkB,SAAS,CAACoR,MAAA;YAAA,IAAC;cAAE/R;YAAK,CAAC,GAAA+R,MAAA;YAAA,OAAK/R,IAAI,KAAK8B,MAAM;UAAA,EAAC,EAChDkP,KAAK,CACN;QACH;QACA,OAAO,CAAClP,MAAM,EAAEkP,KAAK,CAAC;MACxB,CACF,CAAC,CACAtR,MAAM,CACLsS,MAAA;QAAA,IAAC,CAAClQ,MAAM,CAAC,GAAAkQ,MAAA;QAAA,OACPlQ,MAAM,IAAI,IAAI,IAAIA,MAAM,IAAI,CAAC,IAAIA,MAAM,GAAGrC,OAAO,CAACZ,MAAM;MAAA,CAC5D,CACJ,CAAC;MACDqB,aAAa;MACbgQ,kBAAkB;MAClBD,cAAc,EAAE,IAAI/O,GAAG,CAAC+O,cAAc,CAAC;MACvCE,OAAO,EAAEqB,WAAW,KAAKpU,UAAU,CAAC6U,YAAY,CAACC,SAAS,IAAI/B,OAAO;MACrEC,YAAY;MACZC,aAAa;MACbC,WAAW;MACX5K,qBAAqB;MACrB6K,qBAAqB;MACrBC,mBAAmB;MACnBzF,cAAc,EAAE,IAAI,CAACoH,qBAAqB,CACxC1S,OAAO,EACPsL,cACF,CAA0B;MAC1B0F,aAAa;MACbC,kBAAkB,EAAEzR,aAAa,CAAC0N,uBAAuB,CACvDxN,KAAK,GAAAmS,MAAA,GACLZ,kBAAkB,aAAlBA,kBAAkB,cAAlBA,kBAAkB,IAAAa,kBAAA,GAAIpS,KAAK,CAACiT,WAAW,cAAAb,kBAAA,uBAAjBA,kBAAA,CAAmBc,YAAY,cAAAf,MAAA,cAAAA,MAAA,GAAI,EAC3D,CAAC,CAACpE,MAAM;MACRyD,eAAe,EAAE,IAAI,CAAC2B,sBAAsB,CAC1C1B,gBAAgB,EAChBD,eACF;IACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEiB,mBAAmBA,CACjBnS,OAAiC,EACjC8S,iBAAmD,EACnDZ,QAAiB,EACO;IACxB,IAAMa,eAAe,GAAGD,iBAAiB,CAACzS,GAAG,CAC3C2S,MAAA,IAGK;MAAA,IAHJ,CAAClR,WAAW,EAAEC,WAAW,CAAwB,GAAAiR,MAAA;MAIhD,IAAM;QAAEhR;MAAK,CAAC,GAAGD,WAAW;MAE5B,IAAI9B,MAAM,GAAG,IAAI;MACjB,IAAI;QACF,IAAMoC,MAAM,GAAG7C,aAAa,CAACiM,SAAS,CAACzL,OAAO,EAAE8B,WAAW,CAAC;QAC5D,IAAIO,MAAM,IAAI,IAAI,EAAE;UAClBpC,MAAM,GAAG,IAAI,CAACgQ,UAAU,CAACgD,eAAe,CAAC5Q,MAAM,EAAEL,IAAI,EAAEkQ,QAAQ,CAAC;QAClE;MACF,CAAC,CAAC,OAAOxG,KAAK,EAAE;QACdnN,GAAG,CAACmN,KAAK,CAAC,gCAAgC,EAAE1J,IAAI,EAAE0J,KAAK,CAAC;MAC1D;MAEA,OAAO,CAAC5J,WAAW,EAAE;QAAEE,IAAI;QAAE/B;MAAO,CAAC,CAAC;IACxC,CACF,CAAC;IAED,OAAO,IAAIwB,GAAG,CAACsR,eAAe,CAAC;EACjC;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE3B,wBAAwBA,CACtBpR,OAAiC,EACjC4C,eAA0C,EACd;IAC5B,OAAO,CAAC,GAAGA,eAAe,CAAC,CAACvC,GAAG,CAAC6S,MAAA,IAAmC;MAAA,IAAlC,CAACpR,WAAW,EAAEqR,cAAc,CAAC,GAAAD,MAAA;MAC5D,IAAM7Q,MAAM,GAAG7C,aAAa,CAACiM,SAAS,CAACzL,OAAO,EAAE8B,WAAW,CAAC;MAC5DjE,aAAa,CAACwE,MAAM,CAAC;MACrB,IAAM+Q,OAAO,GAAG,IAAI,CAACC,8BAA8B,CACjDhR,MAAM,EACN8Q,cAAc,CAACC,OACjB,CAAC;MACD,OAAO,CAACtR,WAAW,EAAE;QAAEsR;MAAQ,CAAC,CAAC;IACnC,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEnB,sBAAsBA,CACpBjS,OAAiC,EACjCsT,oBAAyD,EACzDpB,QAAgB,EACW;IAC3B,IAAMa,eAAe,GAAGO,oBAAoB,CAACjT,GAAG,CAC9CkT,MAAA,IAMK;MAAA,IANJ,CAACzR,WAAW,EAAEqR,cAAc,CAA2B,GAAAI,MAAA;MAOtD,IAAMlR,MAAM,GAAG7C,aAAa,CAACiM,SAAS,CAACzL,OAAO,EAAE8B,WAAW,CAAC;MAC5DjE,aAAa,CAACwE,MAAM,CAAC;MACrB,IAAM+Q,OAAO,GAAG,IAAI,CAACI,4BAA4B,CAC/CnR,MAAM,EACN8Q,cAAc,CAACC,OACjB,CAAC;MACD,IAAInT,MAAM,GAAG,IAAI;MAEjB,IAAI;QACF,IAAMwT,eAAe,GAAGjU,aAAa,CAACiM,SAAS,CAACzL,OAAO,EAAE8B,WAAW,CAAC;QACrE,IAAI2R,eAAe,IAAI,IAAI,EAAE;UAC3BxT,MAAM,GAAG,IAAI,CAACgQ,UAAU,CAACyD,kBAAkB,CACzCrR,MAAM,EACN+Q,OAAO,EACPlB,QACF,CAAC;QACH;MACF,CAAC,CAAC,OAAOxG,KAAK,EAAE;QACdnN,GAAG,CAACmN,KAAK,CAAC,mCAAmC,EAAE0H,OAAO,EAAE1H,KAAK,CAAC;MAChE;MAEA,OAAO,CAAC5J,WAAW,EAAE;QAAEsR,OAAO;QAAEnT;MAAO,CAAC,CAAC;IAC3C,CACF,CAAC;IAED,OAAO,IAAIwB,GAAG,CAACsR,eAAe,CAAC;EACjC;EAEAM,8BAA8BA,CAC5BhR,MAAqB,EACrB+Q,OAA8B,EACP;IACvB,IAAM;QAAEO;MAAgC,CAAC,GAAGP,OAAO;MAAxBQ,YAAY,GAAAC,wBAAA,CAAKT,OAAO,EAAAU,SAAA;IACnD,OAAAnO,aAAA;MACEgO,cAAc,EAAEA,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAEtT,GAAG,CAAEf,KAAc,IACjD,IAAI,CAACyU,cAAc,CAACzU,KAAK,EAAE+C,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEU,IAAI,CACzC;IAAC,GACE6Q,YAAY;EAEnB;EAEAJ,4BAA4BA,CAC1BnR,MAAqB,EACrB+Q,OAA8B,EACP;IACvB,IAAM;QAAEO;MAAgC,CAAC,GAAGP,OAAO;MAAxBQ,YAAY,GAAAC,wBAAA,CAAKT,OAAO,EAAAY,UAAA;IACnD,OAAArO,aAAA;MACEgO,cAAc,EAAEA,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAEtT,GAAG,CAACf,KAAK,IACvC,IAAI,CAAC2U,YAAY,CAAC3U,KAAK,EAAE+C,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEU,IAAI,CACvC;IAAC,GACE6Q,YAAY;EAEnB;EAEApC,uBAAuBA,CACrBxR,OAAiC,EACjCsL,cAA8B,EACK;IACnC,OAAO,CAAC,GAAGA,cAAc,CAAC,CAACjL,GAAG,CAAC6T,MAAA;MAAA,IAAC,CAAC3I,QAAQ,EAAE;QAAEpC;MAAK,CAAC,CAAC,GAAA+K,MAAA;MAAA,OAAK,CACvD3I,QAAQ,EACR;QACEpC,IAAI,EAAE,CAAC,GAAGA,IAAI,CAAC,CACZlJ,MAAM,CAACkU,MAAA;UAAA,IAAC,CAACrL,CAAC,CAAC,GAAAqL,MAAA;UAAA,OAAK,OAAOrL,CAAC,KAAK,QAAQ;QAAA,EAAC,CACtCzI,GAAG,CAAC+T,MAAA;UAAA,IAAC,CAACtL,CAAC,EAAEuL,QAAQ,CAAC,GAAAD,MAAA;UAAA,OAAK,CACtBpU,OAAO,CAAC8I,CAAC,CAAW,CAACvI,IAAI,EACzB,IAAI,CAACwT,cAAc,CAACM,QAAQ,CAAC/U,KAAK,EAAEU,OAAO,CAAC8I,CAAC,CAAW,CAAC/F,IAAI,CAAC,CAC/D;QAAA;MACL,CAAC,CACF;IAAA,EAAC;EACJ;EAEA2P,qBAAqBA,CACnB1S,OAAiC,EACjCsL,cAAiD,EAMjD;IACA,IAAMgJ,SAAS,GAAG,IAAI7S,GAAG,CAAqB,CAAC;IAC/C,IAAM8S,cAAc,GAAIrR,UAAsB,IAAyB;MACrE,IAAI,CAACoR,SAAS,CAAClM,GAAG,CAAClF,UAAU,CAAC,EAAE;QAC9BoR,SAAS,CAACjM,GAAG,CACXnF,UAAU,EACVlD,OAAO,CAACkB,SAAS,CAACsT,MAAA;UAAA,IAAC;YAAEjU;UAAK,CAAC,GAAAiU,MAAA;UAAA,OAAKjU,IAAI,KAAK2C,UAAU;QAAA,EACrD,CAAC;MACH;MACA,OAAOoR,SAAS,CAAC3Q,GAAG,CAACT,UAAU,CAAC;IAClC,CAAC;IAED,OAAO,IAAIzB,GAAG,CACZ6J,cAAc,CAACjL,GAAG,CAChBoU,MAAA;MAAA,IAAC,CAAClJ,QAAQ,EAAE;QAAEpC;MAAK,CAAC,CAA0C,GAAAsL,MAAA;MAAA,OAAK,CACjElJ,QAAQ,EACR;QACEpC,IAAI,EAAE,IAAI1H,GAAG,CACX0H,IAAI,CAAC9I,GAAG,CAACqU,MAAA,IAAyB;UAAA,IAAAC,eAAA;UAAA,IAAxB,CAACzR,UAAU,EAAE5D,KAAK,CAAC,GAAAoV,MAAA;UAC3B,IAAMxI,KAAK,GAAGqI,cAAc,CAACrR,UAAU,CAAC;UACxCrF,aAAa,CAACqO,KAAK,CAAC;UACpB,OAAO,EAAAyI,eAAA,GACLJ,cAAc,CAACrR,UAAU,CAAC,cAAAyR,eAAA,cAAAA,eAAA,GAAI,IAAI,EAClC;YAAErV,KAAK,EAAE,IAAI,CAAC2U,YAAY,CAAC3U,KAAK,EAAEU,OAAO,CAACkM,KAAK,CAAC,CAACnJ,IAAI;UAAE,CAAC,CACzD;QACH,CAAC,CACH;MACF,CAAC,CACF;IAAA,CACH,CACF,CAAC;EACH;EAEA4O,wBAAwBA,CACtBR,gBAA0C,EAC1CD,eAA4C,EACf;IAC7B,IAAIA,eAAe,IAAI,IAAI,EAAE;MAC3B,OAAOA,eAAe;IACxB;IAEA,OAAAvL,aAAA,CAAAA,aAAA,KACKuL,eAAe;MAClBlS,UAAU,EAAEkS,eAAe,CAAClS,UAAU,CAACqB,GAAG,CAAC,CAAC1B,SAAS,EAAEuN,KAAK,KAC1D,IAAI,CAAC6H,cAAc,CAACpV,SAAS,EAAEwS,gBAAgB,CAACjF,KAAK,CAAC,CAACnJ,IAAI,CAC7D;IAAC;EAEL;EAEA8P,sBAAsBA,CACpB1B,gBAA0C,EAC1CD,eAA4C,EACf;IAC7B,IAAIA,eAAe,IAAI,IAAI,EAAE;MAC3B,OAAOA,eAAe;IACxB;IAEA,OAAAvL,aAAA,CAAAA,aAAA,KACKuL,eAAe;MAClBlS,UAAU,EAAEkS,eAAe,CAAClS,UAAU,CAACqB,GAAG,CAAC,CAAC1B,SAAS,EAAEuN,KAAK,KAC1D,IAAI,CAAC+H,YAAY,CAACtV,SAAS,EAAEwS,gBAAgB,CAACjF,KAAK,CAAC,CAACnJ,IAAI,CAC3D;IAAC;EAEL;;EAEA;AACF;AACA;AACA;AACA;EACEgR,cAAcA,CAAIzU,KAAQ,EAAE6D,UAAkB,EAAqB;IACjE,IAAIxF,UAAU,CAACuR,UAAU,CAAC/L,UAAU,CAAC,EAAE;MACrC,OAAO,IAAI,CAACyR,iBAAiB,CAC3BtV,KACF,CAAC;IACH;IAEA,IAAI3B,UAAU,CAACkX,UAAU,CAAC1R,UAAU,CAAC,EAAE;MACrC,OAAO3D,aAAa,CAACyC,aAAa,CAAC3C,KAAK,CAAC;IAC3C;IAEA,OAAOA,KAAK;EACd;;EAEA;AACF;AACA;AACA;AACA;EACE2U,YAAYA,CACV3U,KAAQ,EACR6D,UAAkB,EACkC;IACpD,IAAIxF,UAAU,CAACuR,UAAU,CAAC/L,UAAU,CAAC,EAAE;MACrC,OAAO,IAAI,CAAC2R,eAAe,CAACxV,KAA0B,CAAC;IACzD;IAEA,IAAI3B,UAAU,CAACkX,UAAU,CAAC1R,UAAU,CAAC,EAAE;MACrC,OAAO,IAAI,CAAC4R,WAAW,CAACzV,KAA0B,CAAC;IACrD;IAEA,OAAOA,KAAK;EACd;EAEAsV,iBAAiBA,CAACtV,KAAyC,EAAiB;IAC1E,OAAOA,KAAK,IAAI,IAAI,GAChB,IAAI,CAACyQ,EAAE,CAACiF,IAAI,CAACC,cAAc,CAACC,MAAM,CAACxX,SAAS,CAACyX,gBAAgB,EAAE7V,KAAK,CAAC,GACrE,IAAI;EACV;EAEAwV,eAAeA,CAACxV,KAAa,EAA6B;IACxD,OAAOA,KAAK,IAAI,IAAI,GAChB,IAAI,CAACyQ,EAAE,CAACiF,IAAI,CAACC,cAAc,CAACG,KAAK,CAAC1X,SAAS,CAACyX,gBAAgB,EAAE7V,KAAK,CAAC,GACpE,IAAI;EACV;EAEAyV,WAAWA,CAACzV,KAAa,EAA6B;IACpD,OAAOA,KAAK,IAAI,IAAI,GAAG,IAAI,CAACyQ,EAAE,CAACsF,WAAW,CAACC,QAAQ,CAAChW,KAAK,CAAC,GAAG,IAAI;EACnE;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE8S,WAAWA,CACTpS,OAAiC,EACjCmC,KAAyD,EAE9B;IAAA,IAD3BoT,WAAW,GAAA7U,SAAA,CAAAtB,MAAA,QAAAsB,SAAA,QAAA9B,SAAA,GAAA8B,SAAA,MAAG,KAAK;IAEnB,IAAM;MAAEqP;IAAG,CAAC,GAAG,IAAI;IACnB,OACE5N,KAAK,CACF9B,GAAG,CAAC+B,IAAI,IAAI;MACX,IAAM;QAAEC,MAAM,EAAEmT,iBAAiB;QAAElT,KAAK;QAAEC;MAAU,CAAC,GAAGH,IAAI;MAC5D,IAAIG,SAAS,KAAK5E,UAAU,CAAC8X,aAAa,CAAC/E,OAAO,EAAE;QAClD,OAAOX,EAAE,CAAC2F,KAAK,CAAChF,OAAO,CAAC,CAAC;MAC3B;MAEA,IAAMrO,MAAM,GACV,OAAOmT,iBAAiB,KAAK,QAAQ,GACjChW,aAAa,CAACmM,eAAe,CAAC3L,OAAO,EAAEwV,iBAAiB,CAAC,GACzDhW,aAAa,CAACiM,SAAS,CAACzL,OAAO,EAAEwV,iBAAiB,CAAC;MAEzD,IAAInT,MAAM,IAAI,IAAI,EAAE;QAClB,OAAO;UACLA,MAAM,EAAE;YACN9B,IAAI,EAAE8B,MAAM,CAAC9B,IAAI;YACjBwC,IAAI,EAAEV,MAAM,CAACU;UACf,CAAC;UACDT,KAAK;UACLC;QACF,CAAC;MACH;MACA,OAAO,IAAI;IACb,CAAC;IACD;IACA;IACA;IACA;IAAA,CACCtC,MAAM,CACLyD,IAAI,IACFA,IAAI,IAAI,IAAI,KACXA,IAAI,CAACnB,SAAS,KAAK5E,UAAU,CAAC8X,aAAa,CAAC/E,OAAO,IAClD,CAAC6E,WAAW,CAClB,CAAC;EAEP;EAEAI,aAAaA,CACX3V,OAAiC,EACjCmC,KAAgC,EACjB;IACf,IAAM;MAAE4N;IAAG,CAAC,GAAG,IAAI;IACnB,OACE5N,KAAK,CACF9B,GAAG,CAACuV,cAAc,IAAI;MACrB,IAAM;QACJvT,MAAM,EAAE;UAAE9B;QAAK,CAAC;QAChB+B,KAAK;QACLC;MACF,CAAC,GAAGqT,cAAc;MAElB,IAAIrT,SAAS,KAAK5E,UAAU,CAAC8X,aAAa,CAAC/E,OAAO,EAAE;QAClD,OAAOX,EAAE,CAAC2F,KAAK,CAAChF,OAAO,CAAC,CAAC;MAC3B;MAEA,IAAMrO,MAAM,GAAG7C,aAAa,CAACmM,eAAe,CAAC3L,OAAO,EAAEO,IAAI,CAAC;MAE3D,IAAI8B,MAAM,IAAI,IAAI,EAAE;QAClB,IAAIwT,UAAU,GAAGxT,MAAM,CAACD,IAAI,CAAC,CAAC;QAC9B,IAAIE,KAAK,EAAE;UACTuT,UAAU,GAAGA,UAAU,CAACC,GAAG,CAAC,CAAC;QAC/B;QACA,IAAIvT,SAAS,KAAK5E,UAAU,CAAC8X,aAAa,CAACM,UAAU,EAAE;UACrDF,UAAU,GAAGA,UAAU,CAACG,IAAI,CAAC,CAAC;QAChC,CAAC,MAAM;UACLH,UAAU,GAAGA,UAAU,CAACI,GAAG,CAAC,CAAC;QAC/B;QACA,OAAOJ,UAAU;MACnB;MAEA,OAAO,IAAI;IACb,CAAC;IACD;IAAA,CACC5V,MAAM,CAAChC,oBAAoB,CAAC;EAEnC;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEiY,kBAAkBA,CAChBC,KAAmB,EACnBC,aAA4B,EAC5BlE,QAAgB,EACV;IACN,IAAM;MAAElS;IAAQ,CAAC,GAAGmW,KAAK;IAEzB,IAAIvU,YAAsC,GAAG,EAAE;IAC/C,IAAIwU,aAAa,CAACxU,YAAY,EAAE;MAC9BA,YAAY,GAAGpC,aAAa,CAAC4D,uBAAuB,CAClD,IAAI,CAAC+O,mBAAmB,CAACnS,OAAO,EAAEoW,aAAa,CAACxU,YAAY,EAAEsQ,QAAQ,CACxE,CAAC;IACH;IAEA,IAAItP,eAAyC,GAAG,EAAE;IAClD,IAAIwT,aAAa,CAACxT,eAAe,EAAE;MACjCA,eAAe,GAAGpD,aAAa,CAAC4D,uBAAuB,CACrD,IAAI,CAAC6O,sBAAsB,CACzBjS,OAAO,EACPoW,aAAa,CAACxT,eAAe,EAC7BsP,QACF,CACF,CAAC;IACH;IACA,IAAMxP,YAAY,GAAG,IAAI,CAAC2T,0BAA0B,CAClDrW,OAAO,EACPoW,aAAa,CAAC1T,YAAY,EAC1BwP,QACF,CAAC;IAED,IAAI/P,KAAoB,GAAG,EAAE;IAC7B,IAAIiU,aAAa,CAACjU,KAAK,EAAE;MACvBA,KAAK,GAAG,IAAI,CAACwT,aAAa,CACxB3V,OAAO,EACP,IAAI,CAACoS,WAAW,CAACpS,OAAO,EAAEoW,aAAa,CAACjU,KAAK,CAC/C,CAAC;IACH;IAEA,IAAImB,OAAO,GAAG,CAAC,GAAG1B,YAAY,EAAE,GAAGgB,eAAe,CAAC;IACnD,IAAM;MAAE5D,UAAU;MAAEmS,gBAAgB,EAAEmF;IAAqB,CAAC,GAC1DF,aAAa;IACf,IACEpX,UAAU,IACVA,UAAU,CAACI,MAAM,IACjBkX,oBAAoB,IACpBA,oBAAoB,aAApBA,oBAAoB,eAApBA,oBAAoB,CAAElX,MAAM,EAC5B;MACA,IAAM+R,gBAAgB,GAAGmF,oBAAoB,CAACjW,GAAG,CAACkW,mBAAmB,IACnE/W,aAAa,CAACmM,eAAe,CAAC3L,OAAO,EAAEuW,mBAAmB,CAC5D,CAAC;MACD,KAAK,IAAI/S,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG2N,gBAAgB,CAAC/R,MAAM,EAAEoE,CAAC,IAAI,CAAC,EAAE;QACnD,IAAI2N,gBAAgB,CAAC3N,CAAC,CAAC,KAAK5E,SAAS,IAAII,UAAU,CAACwE,CAAC,CAAC,IAAI,IAAI,EAAE;UAC9D;UACA,IAAMgT,eAAe,GAAGrF,gBAAgB,CAAC3N,CAAC,CAAC,CAAEvD,MAAM,CAAC,CAAC,CAACwW,EAAE,CACtD,IAAI,CAAC1G,EAAE,CAAC2G,WAAW,CAACpB,QAAQ,CAACtW,UAAU,CAACwE,CAAC,CAAC,CAC5C,CAAC;UACDF,OAAO,GAAG,CAACkT,eAAe,EAAE,GAAGlT,OAAO,CAAC;QACzC;MACF;IACF;IACAA,OAAO,GAAG,CAAC,GAAGZ,YAAY,EAAE,GAAGY,OAAO,CAAC;IAEvC6S,KAAK,CAACQ,WAAW,CAACrT,OAAO,CAAC;IAC1B6S,KAAK,CAACS,SAAS,CAACzU,KAAK,CAAC;EACxB;EAEAkU,0BAA0BA,CACxBrW,OAAiC,EAGP;IAAA,IAF1B0C,YAAoC,GAAAhC,SAAA,CAAAtB,MAAA,QAAAsB,SAAA,QAAA9B,SAAA,GAAA8B,SAAA,MAAG,EAAE;IAAA,IACzCwR,QAAiB,GAAAxR,SAAA,CAAAtB,MAAA,OAAAsB,SAAA,MAAA9B,SAAA;IAEjB,OAAO8D,YAAY,CAChBrC,GAAG,CAACwW,MAAA,IAA2B;MAAA,IAA1B;QAAEtW,IAAI;QAAEwC,IAAI;QAAEzD;MAAM,CAAC,GAAAuX,MAAA;MACzB,IAAMxU,MAAM,GAAGrC,OAAO,CAACgD,IAAI,CACzB8T,MAAA;QAAA,IAAC;UAAEvW,IAAI,EAAE2C,UAAU;UAAEH,IAAI,EAAEI;QAAW,CAAC,GAAA2T,MAAA;QAAA,OACrC5T,UAAU,KAAK3C,IAAI,IAAI4C,UAAU,KAAKJ,IAAI;MAAA,CAC9C,CAAC;MACD,IAAIV,MAAM,EAAE;QACV,IAAI;UACF,OAAO,IAAI,CAAC4N,UAAU,CAACgD,eAAe,CAAC5Q,MAAM,EAAE/C,KAAK,EAAE4S,QAAQ,CAAC;QACjE,CAAC,CAAC,OAAO6E,CAAC,EAAE;UACV;UACAxY,GAAG,CAACyY,KAAK,CAAC,+BAA+B,EAAED,CAAC,CAAC;QAC/C;MACF;MAEA,OAAO,IAAI;IACb,CAAC,CAAC,CACD9W,MAAM,CAACA,MAAM,IAAIA,MAAM,IAAI,IAAI,CAAC;EACrC;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEgX,kBAAkBA,CAACtP,MAA4B,EAAmB;IAChE,IAAM;MAAEoI;IAAG,CAAC,GAAG,IAAI;IACnB,IAAMmH,SAAS,GAAGvP,MAAM,CACrBwP,KAAK,CAAC,CAAC,CACP/U,IAAI,CAAC,CAACkK,CAAC,EAAEC,CAAC,KAAa;MACtB1O,aAAa,CAACyO,CAAC,CAACvE,QAAQ,CAAC;MACzBlK,aAAa,CAAC0O,CAAC,CAACxE,QAAQ,CAAC;MACzB,OAAOuE,CAAC,CAACvE,QAAQ,GAAGwE,CAAC,CAACxE,QAAQ;IAChC,CAAC,CAAC,CACD1H,GAAG,CAACwH,KAAK,IAAI;MACZ,IAAM;QAAEE,QAAQ;QAAEC;MAAO,CAAC,GAAGH,KAAK;MAClChK,aAAa,CAACkK,QAAQ,CAAC;MACvBlK,aAAa,CAACmK,MAAM,CAAC;MACrB,OAAO+H,EAAE,CAACqH,QAAQ,CAACC,OAAO,CAACtP,QAAQ,EAAEC,MAAM,CAAC;IAC9C,CAAC,CAAC;IACJ,OAAO+H,EAAE,CAACqH,QAAQ,CAACE,QAAQ,CAACJ,SAAS,CAAC;EACxC;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,OAAOK,aAAaA,CAClBC,KAAwB,EACxBrU,UAAkB,EAClBD,UAAkB,EAClB5D,KAAc,EACN;IACR,IAAI3B,UAAU,CAACuR,UAAU,CAAC/L,UAAU,CAAC,IAAID,UAAU,KAAK,MAAM,EAAE;MAC9DrF,aAAa,CAAC2Z,KAAK,CAACC,SAAS,CAAC;MAC9B,OAAOD,KAAK,CAACC,SAAS;IACxB;IACA,IAAI9Z,UAAU,CAAC+Z,YAAY,CAACvU,UAAU,CAAC,EAAE;MACvC,IAAK7D,KAAK,GAAc,CAAC,EAAE;QACzBzB,aAAa,CAAC2Z,KAAK,CAACG,mBAAmB,CAAC;QACxC,OAAOH,KAAK,CAACG,mBAAmB;MAClC;MACA,IAAKrY,KAAK,GAAc,CAAC,EAAE;QACzBzB,aAAa,CAAC2Z,KAAK,CAACI,mBAAmB,CAAC;QACxC,OAAOJ,KAAK,CAACI,mBAAmB;MAClC;MACA/Z,aAAa,CAAC2Z,KAAK,CAACK,eAAe,CAAC;MACpC,OAAOL,KAAK,CAACK,eAAe;IAC9B;IACA,OAAOL,KAAK,CAACM,SAAS;EACxB;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,OAAOC,iBAAiBA,CACtB5U,UAAkB,EAClBD,UAAkB,EACD;IACjB,IAAIvF,UAAU,CAACuR,UAAU,CAAC/L,UAAU,CAAC,IAAID,UAAU,KAAK,MAAM,EAAE;MAC9D,OAAO,QAAQ;IACjB;IAEA,IAAIvF,UAAU,CAAC+Z,YAAY,CAACvU,UAAU,CAAC,EAAE;MACvC,OAAO,OAAO;IAChB;IAEA,OAAO,MAAM;EACf;AACF;AAEA,eAAe3D,aAAa","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/iris-grid",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.12.0",
|
|
4
4
|
"description": "Deephaven Iris Grid",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -31,12 +31,12 @@
|
|
|
31
31
|
"build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@deephaven/components": "^1.
|
|
35
|
-
"@deephaven/console": "^1.
|
|
34
|
+
"@deephaven/components": "^1.12.0",
|
|
35
|
+
"@deephaven/console": "^1.12.0",
|
|
36
36
|
"@deephaven/filters": "^1.1.0",
|
|
37
|
-
"@deephaven/grid": "^1.
|
|
37
|
+
"@deephaven/grid": "^1.12.0",
|
|
38
38
|
"@deephaven/icons": "^1.2.0",
|
|
39
|
-
"@deephaven/jsapi-components": "^1.
|
|
39
|
+
"@deephaven/jsapi-components": "^1.12.0",
|
|
40
40
|
"@deephaven/jsapi-types": "^1.0.0-dev0.40.4",
|
|
41
41
|
"@deephaven/jsapi-utils": "^1.10.1",
|
|
42
42
|
"@deephaven/log": "^1.8.0",
|
|
@@ -81,5 +81,5 @@
|
|
|
81
81
|
"publishConfig": {
|
|
82
82
|
"access": "public"
|
|
83
83
|
},
|
|
84
|
-
"gitHead": "
|
|
84
|
+
"gitHead": "f6807a8587d3b6dd0948ba3a632cd6af5cee919d"
|
|
85
85
|
}
|