@deephaven/iris-grid 0.58.1-alpha-logos.5 → 0.58.1-alpha-light-theme-fixes.30

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.
Files changed (43) hide show
  1. package/dist/AdvancedFilterCreator.css +4 -4
  2. package/dist/AdvancedFilterCreator.css.map +1 -1
  3. package/dist/AdvancedFilterCreatorFilterItem.css.map +1 -1
  4. package/dist/AdvancedFilterCreatorSelectValue.css +1 -1
  5. package/dist/AdvancedFilterCreatorSelectValue.css.map +1 -1
  6. package/dist/ColumnStatistics.css +1 -1
  7. package/dist/ColumnStatistics.css.map +1 -1
  8. package/dist/FilterInputField.css +1 -1
  9. package/dist/FilterInputField.css.map +1 -1
  10. package/dist/GotoRow.css.map +1 -1
  11. package/dist/IrisGrid.css +1 -1
  12. package/dist/IrisGrid.css.map +1 -1
  13. package/dist/IrisGridBottomBar.css.map +1 -1
  14. package/dist/IrisGridCopyHandler.css.map +1 -1
  15. package/dist/IrisGridPartitionSelector.css.map +1 -1
  16. package/dist/IrisGridUtils.js +1 -1
  17. package/dist/IrisGridUtils.js.map +1 -1
  18. package/dist/PartitionSelectorSearch.css +2 -2
  19. package/dist/PartitionSelectorSearch.css.map +1 -1
  20. package/dist/format-context-menus/CustomFormatAction.css +1 -1
  21. package/dist/mousehandlers/IrisGridContextMenuHandler.css +1 -1
  22. package/dist/sidebar/ChartBuilder.css.map +1 -1
  23. package/dist/sidebar/CustomColumnBuilder.css +1 -1
  24. package/dist/sidebar/CustomColumnBuilder.css.map +1 -1
  25. package/dist/sidebar/InputEditor.css +1 -1
  26. package/dist/sidebar/InputEditor.css.map +1 -1
  27. package/dist/sidebar/RollupRows.css +4 -4
  28. package/dist/sidebar/RollupRows.css.map +1 -1
  29. package/dist/sidebar/SelectDistinctBuilder.css.map +1 -1
  30. package/dist/sidebar/TableCsvExporter.css.map +1 -1
  31. package/dist/sidebar/aggregations/AggregationEdit.css +1 -1
  32. package/dist/sidebar/aggregations/AggregationEdit.css.map +1 -1
  33. package/dist/sidebar/aggregations/Aggregations.css.map +1 -1
  34. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.css.map +1 -1
  35. package/dist/sidebar/conditional-formatting/StyleEditor.css +6 -3
  36. package/dist/sidebar/conditional-formatting/StyleEditor.css.map +1 -1
  37. package/dist/sidebar/conditional-formatting/StyleEditor.d.ts.map +1 -1
  38. package/dist/sidebar/conditional-formatting/StyleEditor.js +3 -8
  39. package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
  40. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.css.map +1 -1
  41. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.css +3 -3
  42. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.css.map +1 -1
  43. package/package.json +15 -15
@@ -36,7 +36,7 @@ function isValidIndex(x, array) {
36
36
  return x >= 0 && x < array.length;
37
37
  }
38
38
  function isDateWrapper(value) {
39
- return value.asDate != null;
39
+ return (value === null || value === void 0 ? void 0 : value.asDate) != null;
40
40
  }
41
41
  class IrisGridUtils {
42
42
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridUtils.js","names":["GridUtils","DateUtils","TableUtils","Log","assertNotNull","EMPTY_ARRAY","EMPTY_MAP","AggregationUtils","AggregationOperation","AdvancedSettings","ColumnHeaderGroup","log","module","isPanelStateV1","state","partitionColumn","undefined","isPanelStateV2","Array","isArray","partitionColumns","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","partitions","advancedSettings","hydrateIrisGridPanelState","partition","column","getColumnByName","Error","Map","DEFAULTS","dehydrateQuickFilters","quickFilters","_ref6","columnIndex","quickFilter","text","dehydrateLong","dehydrateSort","sorts","sort","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","_ref10","customColumn","split","getRemovedCustomColumnNames","oldCustomColumns","oldCustomColumnsNames","oldCustomColumnName","includes","removeSortsInColumns","removeFiltersInColumns","removedColumnNames","_ref11","newFilter","forEach","delete","indexOf","removeColumnFromMovedColumns","_ref12","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","_ref13","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","aggregationColumns","_ref14","operation","selected","invert","isRollupOperation","getOperationColumnNames","aggregationMap","nonAggregatedColumnSet","size","_aggregationMap$Aggre","existingColumns","FIRST","getPendingErrors","pendingDataMap","rowIndex","getColumn","error","_ref15","_ref16","changeFilterColumnNamesToIndexes","_ref17","index","filterConfig","combineFiltersFromList","filterList","a","b","operator","startColumnIndex","combinedText","symbol","getFilterOperatorString","filterText","isCharType","String","fromCharCode","parseInt","parseColumnHeaderGroups","groupsParam","maxDepth","parentMap","groupMap","groups","_ref18","children","originalGroupMap","group","seenChildren","addGroup","getColumnIndexByName","existingGroup","childIndexes","depth","childName","childGroup","childIndex","addedGroup","Math","max","columnHeaderGroup","flat","groupNames","_parentMap$get","setParent","values","convertValueToText","isDateType","date","Date","offset","getTimezoneOffset","offsetDate","getTime","dateText","toISOString","formattedText","replace","substring","constructor","dh","_defineProperty","tableUtils","dehydrateIrisGridState","showOnTop","customColumnFormatMap","isFilterBarShown","metrics","conditionalFormats","reverseType","rollupConfig","showSearchBar","searchValue","selectedSearchColumns","invertSearchColumns","frozenColumns","columnHeaderGroups","userRowHeights","dehydrateAdvancedFilters","_ref19","_ref20","width","dehydratePendingDataMap","color","hydrateIrisGridState","_ref24","_model$layoutHints","formatter","hydrateAdvancedFilters","timeZone","hydrateQuickFilters","hydrateSort","_ref21","_ref22","_ref23","hydratePendingDataMap","layoutHints","columnGroups","savedQuickFilters","importedFilters","_ref25","makeQuickFilter","_ref26","advancedFilter","options","dehydrateAdvancedFilterOptions","savedAdvancedFilters","_ref27","hydrateAdvancedFilterOptions","columnRetrieved","makeAdvancedFilter","selectedValues","otherOptions","_objectWithoutProperties","_excluded","dehydrateValue","_excluded2","hydrateValue","_ref28","_ref29","columnMap","getColumnIndex","_ref30","_ref31","_ref32","_getColumnIndex","dehydrateDateTime","isLongType","hydrateDateTime","hydrateLong","i18n","DateTimeFormat","format","FULL_DATE_FORMAT","parse","LongWrapper","ofString","columnIndexOrName","sortDirection","reverse","Table","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"],"sources":["../src/IrisGridUtils.ts"],"sourcesContent":["import {\n GridMetrics,\n GridRange,\n GridUtils,\n ModelIndex,\n ModelSizeMap,\n MoveOperation,\n VisibleIndex,\n} from '@deephaven/grid';\nimport type {\n Column,\n ColumnGroup,\n DateWrapper,\n dh as DhType,\n FilterCondition,\n LongWrapper,\n RangeSet,\n RollupConfig,\n Sort,\n Table,\n TableData,\n} from '@deephaven/jsapi-types';\nimport {\n DateUtils,\n TableUtils,\n ReverseType,\n SortDirection,\n FormattingRule,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { assertNotNull, EMPTY_ARRAY, EMPTY_MAP } from '@deephaven/utils';\nimport AggregationUtils from './sidebar/aggregations/AggregationUtils';\nimport AggregationOperation from './sidebar/aggregations/AggregationOperation';\nimport { FilterData, IrisGridProps, IrisGridState } from './IrisGrid';\nimport {\n ColumnName,\n ReadonlyAdvancedFilterMap,\n ReadonlyQuickFilterMap,\n InputFilter,\n CellData,\n PendingDataMap,\n UIRow,\n AdvancedFilterOptions,\n} from './CommonTypes';\nimport { UIRollupConfig } from './sidebar/RollupRows';\nimport { AggregationSettings } from './sidebar/aggregations/Aggregations';\nimport { FormattingRule as SidebarFormattingRule } from './sidebar/conditional-formatting/ConditionalFormattingUtils';\nimport IrisGridModel from './IrisGridModel';\nimport type AdvancedSettingsType from './sidebar/AdvancedSettingsType';\nimport AdvancedSettings from './sidebar/AdvancedSettings';\nimport ColumnHeaderGroup from './ColumnHeaderGroup';\n\nconst log = Log.module('IrisGridUtils');\n\ntype HydratedIrisGridState = Pick<\n IrisGridState,\n | 'advancedFilters'\n | 'aggregationSettings'\n | 'customColumnFormatMap'\n | 'isFilterBarShown'\n | 'quickFilters'\n | 'customColumns'\n | 'reverseType'\n | 'rollupConfig'\n | 'showSearchBar'\n | 'searchValue'\n | 'selectDistinctColumns'\n | 'selectedSearchColumns'\n | 'sorts'\n | 'invertSearchColumns'\n | 'pendingDataMap'\n | 'frozenColumns'\n | 'conditionalFormats'\n | 'columnHeaderGroups'\n> & {\n metrics: Pick<GridMetrics, 'userColumnWidths' | 'userRowHeights'>;\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 DehydratedUserColumnWidth = [ColumnName, number];\n\nexport type DehydratedUserRowHeight = [number, number];\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: SortDirection;\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 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 reverseType: ReverseType;\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 ColumnGroup[];\n}\n\nexport interface DehydratedIrisGridPanelStateV1 {\n isSelectingPartition: boolean;\n partition: string | null;\n partitionColumn: ColumnName | null;\n advancedSettings: [AdvancedSettingsType, boolean][];\n}\n\nexport interface DehydratedIrisGridPanelStateV2 {\n isSelectingPartition: boolean;\n partitions: (string | null)[];\n partitionColumns: ColumnName[];\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 (\n (state as DehydratedIrisGridPanelStateV1).partitionColumn !== undefined\n );\n}\n\nexport function isPanelStateV2(\n state: DehydratedIrisGridPanelState\n): state is DehydratedIrisGridPanelStateV2 {\n return Array.isArray(\n (state as DehydratedIrisGridPanelStateV2).partitionColumns\n );\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 DateWrapper {\n return (value as DateWrapper).asDate != null;\n}\n\nclass IrisGridUtils {\n /**\n * Exports the state from Grid component to a JSON stringifiable object\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: Pick<\n IrisGridProps,\n 'isStuckToBottom' | 'isStuckToRight' | 'movedColumns' | 'movedRows'\n >\n ): {\n isStuckToBottom: boolean;\n isStuckToRight: boolean;\n movedColumns: { from: string | [string, string]; to: string }[];\n movedRows: MoveOperation[];\n } {\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: {\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 customColumns: readonly string[] = []\n ): Pick<\n IrisGridProps,\n 'isStuckToBottom' | 'isStuckToRight' | 'movedColumns' | 'movedRows'\n > {\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 partitionColumns: Column[];\n advancedSettings: Map<AdvancedSettingsType, boolean>;\n }\n ): DehydratedIrisGridPanelState {\n const {\n isSelectingPartition,\n partitions,\n partitionColumns,\n advancedSettings,\n } = irisGridPanelState;\n\n // Return value will be serialized, should not contain undefined\n return {\n isSelectingPartition,\n partitions,\n partitionColumns: partitionColumns.map(\n partitionColumn => partitionColumn.name\n ),\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 partitionColumns: Column[];\n advancedSettings: Map<AdvancedSettingsType, boolean>;\n } {\n const { isSelectingPartition, advancedSettings } = irisGridPanelState;\n\n const { partitionColumns, partitions } = isPanelStateV2(irisGridPanelState)\n ? irisGridPanelState\n : {\n partitionColumns:\n irisGridPanelState.partitionColumn !== null\n ? [irisGridPanelState.partitionColumn]\n : [],\n partitions: [irisGridPanelState.partition],\n };\n\n const { columns } = model;\n return {\n isSelectingPartition,\n partitions,\n partitionColumns: partitionColumns.map(partitionColumn => {\n const column = IrisGridUtils.getColumnByName(columns, partitionColumn);\n if (column === undefined) {\n throw new Error(`Invalid partition column ${partitionColumn}`);\n }\n return column;\n }),\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 Sort[]): 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 partitionColumns: ColumnName[];\n partitions: unknown[];\n advancedFilters: AF;\n inputFilters: InputFilter[];\n quickFilters: QF;\n sorts: S;\n } {\n const { irisGridPanelState, irisGridState } = panelState;\n const { partitionColumns, partitions } = isPanelStateV2(irisGridPanelState)\n ? irisGridPanelState\n : {\n partitionColumns:\n irisGridPanelState.partitionColumn !== null\n ? [irisGridPanelState.partitionColumn]\n : [],\n partitions: [irisGridPanelState.partition],\n };\n const { advancedFilters, quickFilters, sorts } = irisGridState;\n\n return {\n advancedFilters,\n inputFilters,\n partitions,\n partitionColumns,\n quickFilters,\n sorts,\n };\n }\n\n static getInputFiltersForColumns(\n columns: readonly Column[],\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 ): 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 Sort[],\n columnNames: readonly string[]\n ): Sort[] {\n return sorts.filter(sort => !columnNames.includes(sort.column.name));\n }\n\n static removeFiltersInColumns<T>(\n columns: readonly 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 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 Column[],\n left: number,\n right: number,\n movedColumns: readonly MoveOperation[],\n hiddenColumns: readonly number[]\n ): Column[] {\n const columns: 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 Column[],\n startIndex: VisibleIndex,\n count: number,\n movedColumns: readonly MoveOperation[],\n hiddenColumns: readonly VisibleIndex[]\n ): 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 Column[],\n startIndex: VisibleIndex,\n count: number,\n movedColumns: readonly MoveOperation[],\n hiddenColumns: readonly VisibleIndex[]\n ): 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 Column[],\n viewportColumns: readonly Column[],\n alwaysFetchColumnNames: readonly ColumnName[]\n ): 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 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 ): Column[] | null {\n if (left == null || right == null) {\n return null;\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 Column[]\n ): 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: 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 Column[],\n config: UIRollupConfig | undefined,\n aggregationSettings: AggregationSettings\n ): 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 aggregationColumns = aggregations.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 < aggregations.length; i += 1) {\n aggregationMap[aggregations[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 Column[],\n columnIndex: ModelIndex\n ): 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 Column[],\n columnName: ColumnName\n ): Column | undefined {\n const column = columns.find(({ name }) => name === columnName);\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 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,\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 model: IrisGridModel,\n groupsParam: readonly ColumnGroup[]\n ): {\n groups: ColumnHeaderGroup[];\n maxDepth: number;\n parentMap: Map<string, ColumnHeaderGroup>;\n groupMap: Map<string, ColumnHeaderGroup>;\n } {\n let maxDepth = 1;\n const parentMap: Map<string, ColumnHeaderGroup> = new Map();\n const groupMap: Map<string, ColumnHeaderGroup> = new Map();\n\n // Remove any empty groups before parsing\n const groups = groupsParam?.filter(({ children }) => children.length > 0);\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: ColumnGroup): ColumnHeaderGroup => {\n const { name } = group;\n\n if (model.getColumnIndexByName(name) != null) {\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: ColumnHeaderGroup['childIndexes'] = [];\n let depth = 1;\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 columnHeaderGroup = new ColumnHeaderGroup({\n ...group,\n depth,\n childIndexes: childIndexes.flat(),\n });\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: DhType;\n\n private tableUtils: TableUtils;\n\n constructor(dh: DhType) {\n this.dh = dh;\n this.tableUtils = new TableUtils(dh);\n }\n\n /**\n * Exports the state from IrisGrid to a JSON stringifiable object\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 isFilterBarShown,\n metrics,\n quickFilters,\n customColumns,\n conditionalFormats = EMPTY_ARRAY,\n reverseType,\n rollupConfig = undefined,\n showSearchBar,\n searchValue,\n selectDistinctColumns = EMPTY_ARRAY,\n selectedSearchColumns,\n sorts,\n invertSearchColumns,\n pendingDataMap = EMPTY_MAP,\n frozenColumns,\n columnHeaderGroups,\n } = irisGridState;\n assertNotNull(metrics);\n const { userColumnWidths, userRowHeights } = metrics;\n const { columns } = model;\n // Return value will be serialized, should not contain undefined\n return {\n advancedFilters: this.dehydrateAdvancedFilters(columns, advancedFilters),\n aggregationSettings,\n customColumnFormatMap: [...customColumnFormatMap],\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 reverseType,\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,\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 isFilterBarShown,\n quickFilters,\n sorts,\n customColumns,\n conditionalFormats,\n userColumnWidths,\n userRowHeights,\n reverseType,\n rollupConfig = undefined,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns = true,\n pendingDataMap = [],\n frozenColumns,\n columnHeaderGroups,\n } = irisGridState;\n const { columns, formatter } = model;\n\n return {\n advancedFilters: this.hydrateAdvancedFilters(\n columns,\n advancedFilters,\n formatter.timeZone\n ),\n aggregationSettings,\n customColumnFormatMap: new Map(customColumnFormatMap),\n isFilterBarShown,\n quickFilters: this.hydrateQuickFilters(\n columns,\n quickFilters,\n formatter.timeZone\n ),\n sorts: this.hydrateSort(columns, sorts),\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 reverseType,\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 };\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 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: 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 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 Column[],\n savedAdvancedFilters: readonly DehydratedAdvancedFilter[],\n timeZone: string\n ): ReadonlyAdvancedFilterMap {\n const importedFilters = savedAdvancedFilters.map(\n ([columnIndex, advancedFilter]: DehydratedAdvancedFilter): [\n number,\n { options: AdvancedFilterOptions; filter: FilterCondition | null },\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: 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: 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 Column[],\n pendingDataMap: ReadonlyMap<\n ModelIndex,\n {\n data: Map<ModelIndex, CellData | string>;\n }\n >\n ): DehydratedPendingDataMap<CellData | string | null> {\n return [...pendingDataMap].map(([rowIndex, { data }]) => [\n rowIndex,\n {\n data: [...data].map(([c, value]) => [\n columns[c].name,\n this.dehydrateValue(value, columns[c].type),\n ]),\n },\n ]);\n }\n\n hydratePendingDataMap(\n columns: readonly Column[],\n pendingDataMap: DehydratedPendingDataMap<CellData | string | null>\n ): Map<\n number,\n { data: Map<ModelIndex | null, string | CellData | LongWrapper | null> }\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 /**\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 | 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 ): DateWrapper | 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 | 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): 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): LongWrapper | null {\n return value != null ? this.dh.LongWrapper.ofString(value) : null;\n }\n\n /**\n * Import the saved sorts to apply to the table. Does not actually apply the sort.\n * @param columns The columns the sorts will be applied to\n * @param sorts Exported sort definitions\n * @returns The sorts to apply to the table\n */\n hydrateSort(\n columns: readonly Column[],\n sorts: readonly (DehydratedSort | LegacyDehydratedSort)[]\n ): Sort[] {\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 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 // If the item is a reverse sort item, filter it out - it will get applied with the `reverseType` property\n // This should only happen when loading a legacy dashboard\n .filter(\n item =>\n item != null && item.direction !== TableUtils.sortDirection.reverse\n ) as 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: Table,\n tableSettings: TableSettings,\n timeZone: string\n ): void {\n const { columns } = table;\n\n let quickFilters: FilterCondition[] = [];\n if (tableSettings.quickFilters) {\n quickFilters = IrisGridUtils.getFiltersFromFilterMap(\n this.hydrateQuickFilters(columns, tableSettings.quickFilters, timeZone)\n );\n }\n\n let advancedFilters: 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: Sort[] = [];\n if (tableSettings.sorts) {\n sorts = this.hydrateSort(columns, tableSettings.sorts);\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 Column[],\n inputFilters: readonly InputFilter[] = [],\n timeZone?: string\n ): 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 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[]): 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\nexport default IrisGridUtils;\n"],"mappings":";;;;;;;;;AAAA,SAGEA,SAAS,QAKJ,iBAAiB;AAcxB,SACEC,SAAS,EACTC,UAAU,QAIL,wBAAwB;AAC/B,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SAASC,aAAa,EAAEC,WAAW,EAAEC,SAAS,QAAQ,kBAAkB;AAAC,OAClEC,gBAAgB;AAAA,OAChBC,oBAAoB;AAAA,OAiBpBC,gBAAgB;AAAA,OAChBC,iBAAiB;AAExB,IAAMC,GAAG,GAAGR,GAAG,CAACS,MAAM,CAAC,eAAe,CAAC;;AAgDvC;;AA+DA,OAAO,SAASC,cAAcA,CAC5BC,KAAmC,EACM;EACzC,OACGA,KAAK,CAAoCC,eAAe,KAAKC,SAAS;AAE3E;AAEA,OAAO,SAASC,cAAcA,CAC5BH,KAAmC,EACM;EACzC,OAAOI,KAAK,CAACC,OAAO,CACjBL,KAAK,CAAoCM,gBAC5C,CAAC;AACH;;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,EAAwB;EAC3D,OAAQA,KAAK,CAAiBC,MAAM,IAAI,IAAI;AAC9C;AAEA,MAAMC,aAAa,CAAC;EAClB;AACF;AACA;AACA;AACA;AACA;EACE,OAAOC,kBAAkBA,CACvBC,KAAoB,EACpBC,SAGC,EAMD;IACA,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,SAQC,EAKD;IAAA,IAJAc,aAAgC,GAAAC,SAAA,CAAAtB,MAAA,QAAAsB,SAAA,QAAA9B,SAAA,GAAA8B,SAAA,MAAG,EAAE;IAKrC,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,kBAMC,EAC6B;IAC9B,IAAM;MACJC,oBAAoB;MACpBC,UAAU;MACVvC,gBAAgB;MAChBwC;IACF,CAAC,GAAGH,kBAAkB;;IAEtB;IACA,OAAO;MACLC,oBAAoB;MACpBC,UAAU;MACVvC,gBAAgB,EAAEA,gBAAgB,CAACqB,GAAG,CACpC1B,eAAe,IAAIA,eAAe,CAAC4B,IACrC,CAAC;MACDiB,gBAAgB,EAAE,CAAC,GAAGA,gBAAgB;IACxC,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,OAAOC,yBAAyBA,CAC9B/B,KAAoB,EACpB2B,kBAAgD,EAMhD;IACA,IAAM;MAAEC,oBAAoB;MAAEE;IAAiB,CAAC,GAAGH,kBAAkB;IAErE,IAAM;MAAErC,gBAAgB;MAAEuC;IAAW,CAAC,GAAG1C,cAAc,CAACwC,kBAAkB,CAAC,GACvEA,kBAAkB,GAClB;MACErC,gBAAgB,EACdqC,kBAAkB,CAAC1C,eAAe,KAAK,IAAI,GACvC,CAAC0C,kBAAkB,CAAC1C,eAAe,CAAC,GACpC,EAAE;MACR4C,UAAU,EAAE,CAACF,kBAAkB,CAACK,SAAS;IAC3C,CAAC;IAEL,IAAM;MAAE1B;IAAQ,CAAC,GAAGN,KAAK;IACzB,OAAO;MACL4B,oBAAoB;MACpBC,UAAU;MACVvC,gBAAgB,EAAEA,gBAAgB,CAACqB,GAAG,CAAC1B,eAAe,IAAI;QACxD,IAAMgD,MAAM,GAAGnC,aAAa,CAACoC,eAAe,CAAC5B,OAAO,EAAErB,eAAe,CAAC;QACtE,IAAIgD,MAAM,KAAK/C,SAAS,EAAE;UACxB,MAAM,IAAIiD,KAAK,6BAAAd,MAAA,CAA6BpC,eAAe,CAAE,CAAC;QAChE;QACA,OAAOgD,MAAM;MACf,CAAC,CAAC;MACFH,gBAAgB,EAAE,IAAIM,GAAG,CAAC,CACxB,GAAGzD,gBAAgB,CAAC0D,QAAQ,EAC5B,GAAGP,gBAAgB,CACpB;IACH,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOQ,qBAAqBA,CAC1BC,YAAoC,EACX;IACzB,OAAO,CAAC,GAAGA,YAAY,CAAC,CAAC5B,GAAG,CAAC6B,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,CAAIhD,KAAQ,EAAiB;IAC/C,OAAOA,KAAK,IAAI,IAAI,MAAAyB,MAAA,CAAMzB,KAAK,IAAK,IAAI;EAC1C;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOiD,aAAaA,CAACC,KAAsB,EAAoB;IAC7D,OAAOA,KAAK,CAACnC,GAAG,CAACoC,IAAI,IAAI;MACvB,IAAM;QAAEd,MAAM;QAAEe,KAAK;QAAEC;MAAU,CAAC,GAAGF,IAAI;MACzC,OAAO;QACLd,MAAM,EAAEA,MAAM,CAACpB,IAAI;QACnBmC,KAAK;QACLC;MACF,CAAC;IACH,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOC,oBAAoBA,CACzBC,UAGC,EASD;IAAA,IARAC,YAA2B,GAAApC,SAAA,CAAAtB,MAAA,QAAAsB,SAAA,QAAA9B,SAAA,GAAA8B,SAAA,MAAG,EAAE;IAShC,IAAM;MAAEW,kBAAkB;MAAE0B;IAAc,CAAC,GAAGF,UAAU;IACxD,IAAM;MAAE7D,gBAAgB;MAAEuC;IAAW,CAAC,GAAG1C,cAAc,CAACwC,kBAAkB,CAAC,GACvEA,kBAAkB,GAClB;MACErC,gBAAgB,EACdqC,kBAAkB,CAAC1C,eAAe,KAAK,IAAI,GACvC,CAAC0C,kBAAkB,CAAC1C,eAAe,CAAC,GACpC,EAAE;MACR4C,UAAU,EAAE,CAACF,kBAAkB,CAACK,SAAS;IAC3C,CAAC;IACL,IAAM;MAAEsB,eAAe;MAAEf,YAAY;MAAEO;IAAM,CAAC,GAAGO,aAAa;IAE9D,OAAO;MACLC,eAAe;MACfF,YAAY;MACZvB,UAAU;MACVvC,gBAAgB;MAChBiD,YAAY;MACZO;IACF,CAAC;EACH;EAEA,OAAOS,yBAAyBA,CAC9BjD,OAA0B,EAEX;IAAA,IADf8C,YAAoC,GAAApC,SAAA,CAAAtB,MAAA,QAAAsB,SAAA,QAAA9B,SAAA,GAAA8B,SAAA,MAAG,EAAE;IAEzC,OAAOoC,YAAY,CAAC7C,MAAM,CAACiD,KAAA;MAAA,IAAC;QAAE3C,IAAI;QAAE4C;MAAK,CAAC,GAAAD,KAAA;MAAA,OACxClD,OAAO,CAACoD,IAAI,CACVC,KAAA;QAAA,IAAC;UAAE9C,IAAI,EAAE+C,UAAU;UAAEH,IAAI,EAAEI;QAAW,CAAC,GAAAF,KAAA;QAAA,OACrCC,UAAU,KAAK/C,IAAI,IAAIgD,UAAU,KAAKJ,IAAI;MAAA,CAC9C,CAAC;IAAA,CACH,CAAC;EACH;EAEA,OAAOK,uBAAuBA,CAC5BC,SAA6D,EAC1C;IACnB,IAAMC,OAAO,GAAG,EAAE;IAElB,IAAMC,IAAI,GAAG7E,KAAK,CAACsB,IAAI,CAACqD,SAAS,CAACE,IAAI,CAAC,CAAC,CAAC;IACzC,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGD,IAAI,CAACvE,MAAM,EAAEwE,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,CAAE7D,MAAM,KAAI,IAAI,EAAE;QACxByD,OAAO,CAACM,IAAI,CAACF,IAAI,CAAC7D,MAAM,CAAC;MAC3B;IACF;IAEA,OAAOyD,OAAO;EAChB;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOO,gBAAgBA,CAACC,gBAA8B,EAAgB;IACpE,OAAO,CAAC,GAAGA,gBAAgB,CAACC,OAAO,CAAC,CAAC,CAAC,CACnClE,MAAM,CAACmE,KAAA;MAAA,IAAC,GAAG9E,KAAK,CAAC,GAAA8E,KAAA;MAAA,OAAK9E,KAAK,KAAK,CAAC;IAAA,EAAC,CAClCe,GAAG,CAACgE,MAAA;MAAA,IAAC,CAACR,GAAG,CAAC,GAAAQ,MAAA;MAAA,OAAKR,GAAG;IAAA,EAAC;EACxB;EAEA,OAAOjD,sBAAsBA,CAC3BH,aAAoC,EACtB;IACd,OAAOA,aAAa,CAACJ,GAAG,CAACiE,YAAY,IAAIA,YAAY,CAACC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;EACtE;EAEA,OAAOC,2BAA2BA,CAChCC,gBAAuC,EACvChE,aAAoC,EACtB;IACd,IAAMiE,qBAAqB,GACzBlF,aAAa,CAACoB,sBAAsB,CAAC6D,gBAAgB,CAAC;IACxD,IAAM9D,iBAAiB,GACrBnB,aAAa,CAACoB,sBAAsB,CAACH,aAAa,CAAC;IACrD,OAAOiE,qBAAqB,CAACzE,MAAM,CACjC0E,mBAAmB,IAAI,CAAChE,iBAAiB,CAACiE,QAAQ,CAACD,mBAAmB,CACxE,CAAC;EACH;EAEA,OAAOE,oBAAoBA,CACzBrC,KAAsB,EACtB3B,WAA8B,EACtB;IACR,OAAO2B,KAAK,CAACvC,MAAM,CAACwC,IAAI,IAAI,CAAC5B,WAAW,CAAC+D,QAAQ,CAACnC,IAAI,CAACd,MAAM,CAACpB,IAAI,CAAC,CAAC;EACtE;EAEA,OAAOuE,sBAAsBA,CAC3B9E,OAA0B,EAC1B0D,OAA+B,EAC/BqB,kBAAyC,EACzB;IAChB,IAAMlE,WAAW,GAAGb,OAAO,CAACK,GAAG,CAAC2E,MAAA;MAAA,IAAC;QAAEzE;MAAK,CAAC,GAAAyE,MAAA;MAAA,OAAKzE,IAAI;IAAA,EAAC;IACnD,IAAM0E,SAAS,GAAG,IAAInD,GAAG,CAAC4B,OAAO,CAAC;IAClCqB,kBAAkB,CAACG,OAAO,CAAC5B,UAAU,IACnC2B,SAAS,CAACE,MAAM,CAACtE,WAAW,CAACuE,OAAO,CAAC9B,UAAU,CAAC,CAClD,CAAC;IACD,OAAO2B,SAAS;EAClB;EAEA,OAAOI,4BAA4BA,CACjCrF,OAA0B,EAC1BF,YAAsC,EACtCiF,kBAAyC,EACxB;IACjB,IAAMlE,WAAW,GAAGb,OAAO,CAACK,GAAG,CAACiF,MAAA;MAAA,IAAC;QAAE/E;MAAK,CAAC,GAAA+E,MAAA;MAAA,OAAK/E,IAAI;IAAA,EAAC;IACnD,IAAIgF,QAAQ,GAAG,CAAC,GAAGzF,YAAY,CAAC;IAAC,IAAA0F,KAAA,YAAAA,MAAA,EACsB;MACrD,IAAMC,iBAAiB,GAAGV,kBAAkB,CAACnB,CAAC,CAAC;MAC/C,IAAI8B,kBAAkB,GAAG7E,WAAW,CAACK,SAAS,CAC5CX,IAAI,IAAIA,IAAI,KAAKkF,iBACnB,CAAC;MACD,IAAME,KAAsB,GAAG,EAAE;MACjC,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGL,QAAQ,CAACnG,MAAM,EAAEwG,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,GAAGnH,KAAK,CAACC,OAAO,CAAC8G,IAAI,CAACzF,IAAI,CAAC,GAC/CyF,IAAI,CAACzF,IAAI,GACT,CAACyF,IAAI,CAACzF,IAAI,EAAEyF,IAAI,CAACzF,IAAI,CAAC;QAE1B,IAAIsF,kBAAkB,IAAIG,IAAI,CAAC1F,EAAE,EAAE;UACjC2F,OAAO,CAAC3F,EAAE,IAAI,CAAC;QACjB;;QAEA;QACA;QACA,IAAIuF,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,CAAC3F,EAAE,EAAE;UACpD,IAAI6F,SAAS,KAAKC,OAAO,EAAE;YACzBN,KAAK,CAAC3B,IAAI,CAAA+B,aAAA,CAAAA,aAAA,KAAMD,OAAO;cAAE1F,IAAI,EAAE4F;YAAS,EAAE,CAAC;UAC7C,CAAC,MAAM;YACLL,KAAK,CAAC3B,IAAI,CAAA+B,aAAA,CAAAA,aAAA,KAAMD,OAAO;cAAE1F,IAAI,EAAE,CAAC4F,SAAS,EAAEC,OAAO;YAAC,EAAE,CAAC;UACxD;QACF;;QAEA;QACA;QACAP,kBAAkB,GAAG9H,SAAS,CAACsI,cAAc,CAC3CR,kBAAkB,EAClBA,kBAAkB,EAClB,CAACG,IAAI,CACP,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;MACT;MAEAN,QAAQ,GAAGI,KAAK;MAChB9E,WAAW,CAACsF,MAAM,CAChBtF,WAAW,CAACK,SAAS,CAACX,IAAI,IAAIA,IAAI,KAAKkF,iBAAiB,CAAC,EACzD,CACF,CAAC;IACH,CAAC;IAjDD,KAAK,IAAI7B,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGmB,kBAAkB,CAAC3F,MAAM,EAAEwE,CAAC,IAAI,CAAC;MAAA4B,KAAA;IAAA;IAkDrD,OAAOD,QAAQ;EACjB;EAEA,OAAOa,sCAAsCA,CAC3CC,qBAA4C,EAC5CtB,kBAAyC,EAC3B;IACd,OAAOsB,qBAAqB,CAACpG,MAAM,CACjCqD,UAAU,IAAI,CAACyB,kBAAkB,CAACH,QAAQ,CAACtB,UAAU,CACvD,CAAC;EACH;EAEA,OAAOgD,wBAAwBA,CAC7BC,YAA+B,EAC/BC,IAAY,EACZC,KAAa,EACb3G,YAAsC,EACtC4G,aAAgC,EACtB;IACV,IAAM1G,OAAiB,GAAG,EAAE;IAC5B,KAAK,IAAI4D,CAAC,GAAG4C,IAAI,EAAE5C,CAAC,IAAI6C,KAAK,EAAE7C,CAAC,IAAI,CAAC,EAAE;MACrC,IAAM+C,UAAU,GAAG/I,SAAS,CAACgJ,aAAa,CAAChD,CAAC,EAAE9D,YAAY,CAAC;MAC3D,IACE6G,UAAU,IAAI,CAAC,IACfA,UAAU,GAAGJ,YAAY,CAACnH,MAAM,IAChC,CAACsH,aAAa,CAAC9B,QAAQ,CAAC+B,UAAU,CAAC,EACnC;QACA3G,OAAO,CAACgE,IAAI,CAACuC,YAAY,CAACI,UAAU,CAAC,CAAC;MACxC;IACF;IACA,OAAO3G,OAAO;EAChB;EAEA,OAAO6G,qBAAqBA,CAC1BN,YAA+B,EAC/BO,UAAwB,EACxBC,KAAa,EACbjH,YAAsC,EACtC4G,aAAsC,EAC5B;IACV,IAAM1G,OAAO,GAAG,EAAE;IAClB,IAAI4D,CAAC,GAAGkD,UAAU;IAClB,OAAOlD,CAAC,IAAI,CAAC,IAAI5D,OAAO,CAACZ,MAAM,GAAG2H,KAAK,EAAE;MACvC,IAAMJ,UAAU,GAAG/I,SAAS,CAACgJ,aAAa,CAAChD,CAAC,EAAE9D,YAAY,CAAC;MAC3D,IACE6G,UAAU,IAAI,CAAC,IACfA,UAAU,GAAGJ,YAAY,CAACnH,MAAM,IAChC,CAACsH,aAAa,CAAC9B,QAAQ,CAAC+B,UAAU,CAAC,EACnC;QACA3G,OAAO,CAACgH,OAAO,CAACT,YAAY,CAACI,UAAU,CAAC,CAAC;MAC3C;MACA/C,CAAC,IAAI,CAAC;IACR;IACA,OAAO5D,OAAO;EAChB;EAEA,OAAOiH,qBAAqBA,CAC1BV,YAA+B,EAC/BO,UAAwB,EACxBC,KAAa,EACbjH,YAAsC,EACtC4G,aAAsC,EAC5B;IACV,IAAM1G,OAAO,GAAG,EAAE;IAClB,IAAI4D,CAAC,GAAGkD,UAAU;IAClB,OAAOlD,CAAC,GAAG2C,YAAY,CAACnH,MAAM,IAAIY,OAAO,CAACZ,MAAM,GAAG2H,KAAK,EAAE;MACxD,IAAMJ,UAAU,GAAG/I,SAAS,CAACgJ,aAAa,CAAChD,CAAC,EAAE9D,YAAY,CAAC;MAC3D,IACE6G,UAAU,IAAI,CAAC,IACfA,UAAU,GAAGJ,YAAY,CAACnH,MAAM,IAChC,CAACsH,aAAa,CAAC9B,QAAQ,CAAC+B,UAAU,CAAC,EACnC;QACA3G,OAAO,CAACgE,IAAI,CAACuC,YAAY,CAACI,UAAU,CAAC,CAAC;MACxC;MACA/C,CAAC,IAAI,CAAC;IACR;IACA,OAAO5D,OAAO;EAChB;EAEA,OAAOkH,iBAAiBA,CACtBX,YAA+B,EAC/BY,eAAkC,EAClCC,sBAA6C,EACnC;IACV,IAAMC,cAAc,GAAG,CAAC,GAAGF,eAAe,CAAC;IAC3CC,sBAAsB,CAAClC,OAAO,CAAC5B,UAAU,IAAI;MAC3C,IAAM3B,MAAM,GAAG4E,YAAY,CAACnD,IAAI,CAACkE,MAAA;QAAA,IAAC;UAAE/G;QAAK,CAAC,GAAA+G,MAAA;QAAA,OAAK/G,IAAI,KAAK+C,UAAU;MAAA,EAAC;MACnE,IAAI3B,MAAM,IAAI,IAAI,IAAI,CAACwF,eAAe,CAACvC,QAAQ,CAACjD,MAAM,CAAC,EAAE;QACvD0F,cAAc,CAACrD,IAAI,CAACrC,MAAM,CAAC;MAC7B;IACF,CAAC,CAAC;IACF,OAAO0F,cAAc;EACvB;EAEA,OAAOE,uBAAuBA,CAC5BvH,OAA0B,EAC1BwG,IAAmB,EACnBC,KAAoB,EACpB3G,YAAsC,EAIrB;IAAA,IAHjB4G,aAAsC,GAAAhG,SAAA,CAAAtB,MAAA,QAAAsB,SAAA,QAAA9B,SAAA,GAAA8B,SAAA,MAAG,EAAE;IAAA,IAC3C0G,sBAA6C,GAAA1G,SAAA,CAAAtB,MAAA,QAAAsB,SAAA,QAAA9B,SAAA,GAAA8B,SAAA,MAAG,EAAE;IAAA,IAClD8G,WAAW,GAAA9G,SAAA,CAAAtB,MAAA,QAAAsB,SAAA,QAAA9B,SAAA,GAAA8B,SAAA,MAAG,CAAC;IAEf,IAAI8F,IAAI,IAAI,IAAI,IAAIC,KAAK,IAAI,IAAI,EAAE;MACjC,OAAO,IAAI;IACb;IAEA,IAAMgB,aAAa,GAAGjI,aAAa,CAAC8G,wBAAwB,CAC1DtG,OAAO,EACPwG,IAAI,EACJC,KAAK,EACL3G,YAAY,EACZ4G,aACF,CAAC;IACD,IAAMgB,WAAW,GAAGD,aAAa,CAACrI,MAAM,GAAGoI,WAAW;IACtD,IAAMG,WAAW,GAAGnI,aAAa,CAACqH,qBAAqB,CACrD7G,OAAO,EACPwG,IAAI,GAAG,CAAC,EACRkB,WAAW,EACX5H,YAAY,EACZ4G,aACF,CAAC;IACD,IAAMkB,YAAY,GAAGpI,aAAa,CAACyH,qBAAqB,CACtDjH,OAAO,EACPyG,KAAK,GAAG,CAAC,EACTiB,WAAW,EACX5H,YAAY,EACZ4G,aACF,CAAC;IAED,IAAMmB,eAAe,GAAG,CAAC,GAAGF,WAAW,EAAE,GAAGF,aAAa,EAAE,GAAGG,YAAY,CAAC;IAE3E,OAAOpI,aAAa,CAAC0H,iBAAiB,CACpClH,OAAO,EACP6H,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,CAAC3I,MAAM,KAAK,CAAC,EAAE;MACzC,OAAO,KAAK;IACd;;IAEA;IACA;IACA,IAAM4I,QAAQ,GAAG,IAAIlG,GAAG,CAAC,CAAC;IAC1B,KAAK,IAAI8B,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGmE,MAAM,CAAC3I,MAAM,EAAEwE,CAAC,IAAI,CAAC,EAAE;MACzC,IAAMqE,KAAK,GAAGF,MAAM,CAACnE,CAAC,CAAC;MACvB,IAAMsE,WAAW,MAAAnH,MAAA,CAAMkH,KAAK,CAACE,QAAQ,OAAApH,MAAA,CAAIkH,KAAK,CAACG,MAAM,CAAE;MACvD,IAAMC,cAAc,MAAAtH,MAAA,CAAMkH,KAAK,CAACK,WAAW,OAAAvH,MAAA,CAAIkH,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,CAAClB,IAAI,CAAC,CAAC,CAACkG,IAAI,CAAC,GAAG,CAAC;IAChE,KAAK,IAAI/E,EAAC,GAAG,CAAC,EAAEA,EAAC,GAAGD,IAAI,CAACvE,MAAM,EAAEwE,EAAC,IAAI,CAAC,EAAE;MACvC,IAAIoE,QAAQ,CAACjE,GAAG,CAACJ,IAAI,CAACC,EAAC,CAAC,CAAC,CAACnB,IAAI,CAAC,CAAC,CAACkG,IAAI,CAAC,GAAG,CAAC,KAAKD,iBAAiB,EAAE;QAChE,OAAO,KAAK;MACd;IACF;IAEA,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;EACE,OAAOzJ,YAAYA,CAACK,KAAc,EAAW;IAC3C,IAAI,CAACsJ,MAAM,CAACC,SAAS,CAACvJ,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,OAAOwJ,iBAAiBA,CACtBf,MAA4B,EAC5BgB,UAA6B,EACnB;IACV,IAAIhB,MAAM,IAAI,IAAI,IAAIA,MAAM,CAAC3I,MAAM,KAAK,CAAC,EAAE;MACzC,OAAO,EAAE;IACX;IACA,IAAI2I,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,CAAC3I,MAAM,EAAEwE,CAAC,IAAI,CAAC,EAAE;MACzC,IAAMqE,KAAK,GAAGF,MAAM,CAACnE,CAAC,CAAC;MACvB5F,aAAa,CAACiK,KAAK,CAACK,WAAW,CAAC;MAChCtK,aAAa,CAACiK,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,CAAC3J,MAAM,GAAG,CAAC,CAAC,EAC/C8J,CAAC,IAAI,CAAC,EACN;QAAA,IAAAC,kBAAA,EAAAC,gBAAA;QACAJ,SAAS,CAACK,GAAG,CAACH,CAAC,CAAC;MAClB;IACF;IACA,OAAO,CAAC,GAAGF,SAAS,CAAC,CAAC3I,GAAG,CAAC6I,CAAC,IAAIH,UAAU,CAACG,CAAC,CAAC,CAAC;EAC/C;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOI,oBAAoBA,CAACC,IAAe,EAAe;IACxD,IAAM;MAAEvJ,OAAO;MAAEwJ;IAAK,CAAC,GAAGD,IAAI;IAC9B,IAAME,MAAM,GAAG,EAAE;IACjB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,IAAI,CAACpK,MAAM,EAAEsK,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,GAAGlJ,OAAO,CAACZ,MAAM,EAAE8J,CAAC,IAAI,CAAC,EAAE;QAC1C,IAAMvH,MAAM,GAAG3B,OAAO,CAACkJ,CAAC,CAAC;QACzB,IAAM5J,KAAK,GAAGqK,GAAG,CAAC5F,GAAG,CAACpC,MAAM,CAAC;QAC7BiI,OAAO,CAAC5F,IAAI,CAAC1E,KAAK,CAAC;MACrB;MACAmK,MAAM,CAACzF,IAAI,CAAC4F,OAAO,CAAC;IACtB;IACA,OAAOH,MAAM;EACf;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,OAAOI,oBAAoBA,CACzBC,eAAkC,EAClCC,MAAkC,EAClCC,mBAAwC,EACnB;IAAA,IAAAC,qBAAA,EAAAC,eAAA;IACrB,IAAI,EAAAD,qBAAA,GAACF,MAAM,aAANA,MAAM,wBAAAG,eAAA,GAANH,MAAM,CAAE/J,OAAO,cAAAkK,eAAA,uBAAfA,eAAA,CAAiB9K,MAAM,cAAA6K,qBAAA,cAAAA,qBAAA,GAAI,CAAC,MAAM,CAAC,EAAE;MACxC,OAAO,IAAI;IACb;IAEA,IAAM;MACJjK,OAAO,EAAEmK,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,kBAAkB,GAAGD,YAAY,CAACnK,GAAG,CACzCqK,MAAA;MAAA,IAAC;QAAEC,SAAS;QAAEC,QAAQ;QAAEC;MAAO,CAAC,GAAAH,MAAA;MAAA,OAC9BvM,gBAAgB,CAAC2M,iBAAiB,CAACH,SAAS,CAAC,GACzC,EAAE,GACFxM,gBAAgB,CAAC4M,uBAAuB,CACtCjB,eAAe,EACfa,SAAS,EACTC,QAAQ,EACRC,MACF,CAAC;IAAA,CACT,CAAC;IAED,IAAMG,cAAc,GAAG,CAAC,CAA2C;IACnE;IACA,KAAK,IAAIpH,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4G,YAAY,CAACpL,MAAM,EAAEwE,CAAC,IAAI,CAAC,EAAE;MAC/CoH,cAAc,CAACR,YAAY,CAAC5G,CAAC,CAAC,CAAC+G,SAAS,CAAC,GAAGF,kBAAkB,CAAC7G,CAAC,CAAC;IACnE;IAEA,IAAI0G,wBAAwB,EAAE;MAC5B;MACA,IAAMW,sBAAsB,GAAG,IAAIhC,GAAG,CACpCa,eAAe,CACZzJ,GAAG,CAAC6I,CAAC,IAAIA,CAAC,CAAC3I,IAAI,CAAC,CAChBN,MAAM,CAACM,IAAI,IAAI,CAAC4J,eAAe,CAACvF,QAAQ,CAACrE,IAAI,CAAC,CACnD,CAAC;MACDkK,kBAAkB,CAACvF,OAAO,CAAClF,OAAO,IAAI;QACpCA,OAAO,CAACkF,OAAO,CAAC3E,IAAI,IAAI0K,sBAAsB,CAAC9F,MAAM,CAAC5E,IAAI,CAAC,CAAC;MAC9D,CAAC,CAAC;MAEF,IAAI0K,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;MACLd,eAAe;MACfE,mBAAmB;MACnBE,mBAAmB;MACnBC,YAAY,EAAEQ;IAChB,CAAC;EACH;;EAEA;AACF;AACA;AACA;EACE,OAAOM,gBAAgBA,CAACC,cAAkC,EAAQ;IAChEA,cAAc,CAACrG,OAAO,CAAC,CAACyE,GAAG,EAAE6B,QAAQ,KAAK;MACxC,IAAI,CAAChM,aAAa,CAACP,YAAY,CAACuM,QAAQ,CAAC,EAAE;QACzC,MAAM,IAAI3J,KAAK,qBAAAd,MAAA,CAAqByK,QAAQ,CAAE,CAAC;MACjD;MAEA,IAAM;QAAEjC;MAAK,CAAC,GAAGI,GAAG;MACpBJ,IAAI,CAACrE,OAAO,CAAC,CAAC5F,KAAK,EAAE6C,WAAW,KAAK;QACnC,IAAI,CAAC3C,aAAa,CAACP,YAAY,CAACkD,WAAW,CAAC,EAAE;UAC5C,MAAM,IAAIN,KAAK,wBAAAd,MAAA,CAAwBoB,WAAW,CAAE,CAAC;QACvD;MACF,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,OAAOsJ,SAASA,CACdzL,OAA0B,EAC1BmC,WAAuB,EACR;IACf,IAAIA,WAAW,GAAGnC,OAAO,CAACZ,MAAM,EAAE;MAChC,OAAOY,OAAO,CAACmC,WAAW,CAAC;IAC7B;IAEA5D,GAAG,CAACmN,KAAK,CAAC,2BAA2B,EAAEvJ,WAAW,EAAE,IAAI,EAAEnC,OAAO,CAACZ,MAAM,CAAC;IAEzE,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOwC,eAAeA,CACpB5B,OAA0B,EAC1BsD,UAAsB,EACF;IACpB,IAAM3B,MAAM,GAAG3B,OAAO,CAACoD,IAAI,CAACuI,MAAA;MAAA,IAAC;QAAEpL;MAAK,CAAC,GAAAoL,MAAA;MAAA,OAAKpL,IAAI,KAAK+C,UAAU;IAAA,EAAC;IAC9D,IAAI3B,MAAM,IAAI,IAAI,EAAE;MAClBpD,GAAG,CAACmN,KAAK,CACP,mCAAmC,EACnCpI,UAAU,EACVtD,OAAO,CAACK,GAAG,CAACuL,MAAA;QAAA,IAAC;UAAErL;QAAK,CAAC,GAAAqL,MAAA;QAAA,OAAKrL,IAAI;MAAA,EAChC,CAAC;IACH;IAEA,OAAOoB,MAAM;EACf;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,OAAOkK,gCAAgCA,CACrC7L,OAA0B,EAC1B0D,OAA0C,EAC3B;IACf,OAAOA,OAAO,CACXrD,GAAG,CAACyL,MAAA,IAA0C;MAAA,IAAzC;QAAEvL,IAAI;QAAEN;MAAO,CAAC,GAAA6L,MAAA;MACpB,IAAMC,KAAK,GAAG/L,OAAO,CAACkB,SAAS,CAACS,MAAM,IAAIA,MAAM,CAACpB,IAAI,KAAKA,IAAI,CAAC;MAC/D,OAAOwL,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAACA,KAAK,EAAE9L,MAAM,CAAC;IAC3C,CAAC,CAAC,CACDA,MAAM,CAAC+L,YAAY,IAAIA,YAAY,IAAI,IAAI,CAAC;EACjD;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOC,sBAAsBA,CAC3B1I,UAAkB,EAClB2I,UAAwB,EAChB;IACRA,UAAU,CAACzJ,IAAI,CAAC,CAAC0J,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,IAAI3I,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGsI,UAAU,CAAC9M,MAAM,EAAEwE,CAAC,IAAI,CAAC,EAAE;MAC7C,IAAM;QAAEvB,IAAI;QAAE/C,KAAK;QAAE+M;MAAS,CAAC,GAAGH,UAAU,CAACtI,CAAC,CAAC;MAC/C,IAAItE,KAAK,KAAKV,SAAS,EAAE;QACvB,IAAI4N,MAAM,GAAG,EAAE;QACf,IAAIH,QAAQ,KAAKzN,SAAS,EAAE;UAC1B,IAAIU,KAAK,IAAI,IAAI,IAAI+M,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,GAAG1O,UAAU,CAAC2O,uBAAuB,CAACJ,QAAQ,CAAC;YACvD;UACF;QACF;QAEA,IAAIK,UAAU,MAAA3L,MAAA,CAAMyL,MAAM,EAAAzL,MAAA,CAAGsB,IAAI,CAAE;QACnC,IAAIgK,QAAQ,KAAK,YAAY,EAAE;UAC7BK,UAAU,MAAA3L,MAAA,CAAMsB,IAAI,EAAAtB,MAAA,CAAGyL,MAAM,CAAE;QACjC;QACA,IACEjJ,UAAU,IAAI,IAAI,IAClBjE,KAAK,KAAK,IAAI,IACdxB,UAAU,CAAC6O,UAAU,CAACpJ,UAAU,CAAC,EACjC;UACAmJ,UAAU,MAAA3L,MAAA,CAAMyL,MAAM,EAAAzL,MAAA,CAAG6L,MAAM,CAACC,YAAY,CAACC,QAAQ,CAACzK,IAAI,EAAE,EAAE,CAAC,CAAC,CAAE;QACpE;QACA,IAAIuB,CAAC,KAAK,CAAC,EAAE;UACX2I,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,CAC5BrN,KAAoB,EACpBsN,WAAmC,EAMnC;IACA,IAAIC,QAAQ,GAAG,CAAC;IAChB,IAAMC,SAAyC,GAAG,IAAIpL,GAAG,CAAC,CAAC;IAC3D,IAAMqL,QAAwC,GAAG,IAAIrL,GAAG,CAAC,CAAC;;IAE1D;IACA,IAAMsL,MAAM,GAAGJ,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAE/M,MAAM,CAACoN,MAAA;MAAA,IAAC;QAAEC;MAAS,CAAC,GAAAD,MAAA;MAAA,OAAKC,QAAQ,CAAClO,MAAM,GAAG,CAAC;IAAA,EAAC;IAEzE,IAAIgO,MAAM,CAAChO,MAAM,KAAK,CAAC,EAAE;MACvB,OAAO;QAAEgO,MAAM,EAAE,EAAE;QAAEH,QAAQ;QAAEC,SAAS;QAAEC;MAAS,CAAC;IACtD;IAEA,IAAMI,gBAAgB,GAAG,IAAIzL,GAAG,CAACsL,MAAM,CAAC/M,GAAG,CAACmN,KAAK,IAAI,CAACA,KAAK,CAACjN,IAAI,EAAEiN,KAAK,CAAC,CAAC,CAAC;IAC1E,IAAMC,YAAY,GAAG,IAAIxE,GAAG,CAAS,CAAC;IAEtC,IAAMyE,QAAQ,GAAIF,KAAkB,IAAwB;MAC1D,IAAM;QAAEjN;MAAK,CAAC,GAAGiN,KAAK;MAEtB,IAAI9N,KAAK,CAACiO,oBAAoB,CAACpN,IAAI,CAAC,IAAI,IAAI,EAAE;QAC5C,MAAM,IAAIsB,KAAK,iDAAAd,MAAA,CAAiDR,IAAI,CAAE,CAAC;MACzE;MAEA,IAAMqN,aAAa,GAAGT,QAAQ,CAACpJ,GAAG,CAACxD,IAAI,CAAC;MAExC,IAAIqN,aAAa,EAAE;QACjB,OAAOA,aAAa;MACtB;MAEA,IAAMC,YAA+C,GAAG,EAAE;MAC1D,IAAIC,KAAK,GAAG,CAAC;MAEbN,KAAK,CAACF,QAAQ,CAACpI,OAAO,CAAC6I,SAAS,IAAI;QAClC,IAAIN,YAAY,CAACjF,GAAG,CAACuF,SAAS,CAAC,EAAE;UAC/B,MAAM,IAAIlM,KAAK,uBAAAd,MAAA,CACSgN,SAAS,kCACjC,CAAC;QACH;QACAN,YAAY,CAACpE,GAAG,CAAC0E,SAAS,CAAC;QAE3B,IAAMC,UAAU,GAAGT,gBAAgB,CAACxJ,GAAG,CAACgK,SAAS,CAAC;QAClD,IAAME,UAAU,GAAGvO,KAAK,CAACiO,oBAAoB,CAACI,SAAS,CAAC;QACxD,IAAIC,UAAU,EAAE;UACd;UACA,IAAME,UAAU,GAAGR,QAAQ,CAACM,UAAU,CAAC;UACvCH,YAAY,CAAC7J,IAAI,CAAC,GAAGkK,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,CAAC7J,IAAI,CAACiK,UAAU,CAAC;UAC7BH,KAAK,GAAGK,IAAI,CAACC,GAAG,CAACN,KAAK,EAAE,CAAC,CAAC;QAC5B,CAAC,MAAM;UACL,MAAM,IAAIjM,KAAK,kBAAAd,MAAA,CAAkBgN,SAAS,gBAAAhN,MAAA,CAAaR,IAAI,CAAE,CAAC;QAChE;MACF,CAAC,CAAC;MAEF,IAAM8N,iBAAiB,GAAG,IAAI/P,iBAAiB,CAAAyH,aAAA,CAAAA,aAAA,KAC1CyH,KAAK;QACRM,KAAK;QACLD,YAAY,EAAEA,YAAY,CAACS,IAAI,CAAC;MAAC,EAClC,CAAC;MAEFnB,QAAQ,CAAC1E,GAAG,CAAClI,IAAI,EAAE8N,iBAAiB,CAAC;MACrCb,KAAK,CAACF,QAAQ,CAACpI,OAAO,CAAC6I,SAAS,IAC9Bb,SAAS,CAACzE,GAAG,CAACsF,SAAS,EAAEM,iBAAiB,CAC5C,CAAC;MAEDpB,QAAQ,GAAGkB,IAAI,CAACC,GAAG,CAACnB,QAAQ,EAAEoB,iBAAiB,CAACP,KAAK,GAAG,CAAC,CAAC;MAC1D,OAAOO,iBAAiB;IAC1B,CAAC;IAED,IAAME,UAAU,GAAG,IAAItF,GAAG,CAAC,CAAC;IAE5BmE,MAAM,CAAClI,OAAO,CAACsI,KAAK,IAAI;MACtB,IAAM;QAAEjN;MAAK,CAAC,GAAGiN,KAAK;MACtB,IAAIe,UAAU,CAAC/F,GAAG,CAACjI,IAAI,CAAC,EAAE;QACxB,MAAM,IAAIsB,KAAK,iCAAAd,MAAA,CAAiCR,IAAI,CAAE,CAAC;MACzD;MACAgO,UAAU,CAAClF,GAAG,CAAC9I,IAAI,CAAC;MACpBmN,QAAQ,CAACF,KAAK,CAAC;IACjB,CAAC,CAAC;IAEFL,QAAQ,CAACjI,OAAO,CAACsI,KAAK,IAAI;MAAA,IAAAgB,cAAA;MACxBhB,KAAK,CAACiB,SAAS,EAAAD,cAAA,GAACtB,SAAS,CAACnJ,GAAG,CAACyJ,KAAK,CAACjN,IAAI,CAAC,cAAAiO,cAAA,uBAAzBA,cAAA,CAA2BjO,IAAI,CAAC;IAClD,CAAC,CAAC;IAEF,OAAO;MAAE6M,MAAM,EAAE,CAAC,GAAGD,QAAQ,CAACuB,MAAM,CAAC,CAAC,CAAC;MAAEzB,QAAQ;MAAEE,QAAQ;MAAED;IAAU,CAAC;EAC1E;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOyB,kBAAkBA,CAACrP,KAAc,EAAEiE,UAAkB,EAAU;IACpE,IACEA,UAAU,IAAI,IAAI,IAClBzF,UAAU,CAAC6O,UAAU,CAACpJ,UAAU,CAAC,IACjCjE,KAAK,IAAI,IAAI,IACb,OAAOA,KAAK,KAAK,QAAQ,EACzB;MACA,OAAOsN,MAAM,CAACC,YAAY,CAACvN,KAAK,CAAC;IACnC;IACA,IAAIxB,UAAU,CAAC8Q,UAAU,CAACrL,UAAU,CAAC,IAAIlE,aAAa,CAACC,KAAK,CAAC,EAAE;MAC7D,IAAMuP,IAAI,GAAG,IAAIC,IAAI,CAACxP,KAAK,CAACC,MAAM,CAAC,CAAC,CAAC;MACrC,IAAMwP,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,IAAI/P,KAAK,IAAI,IAAI,EAAE;MACjB,OAAO,EAAE;IACX;IACA,UAAAyB,MAAA,CAAUzB,KAAK;EACjB;EAMAkQ,WAAWA,CAACC,EAAU,EAAE;IAAAC,eAAA;IAAAA,eAAA;IACtB,IAAI,CAACD,EAAE,GAAGA,EAAE;IACZ,IAAI,CAACE,UAAU,GAAG,IAAI7R,UAAU,CAAC2R,EAAE,CAAC;EACtC;;EAEA;AACF;AACA;AACA;AACA;EACEG,sBAAsBA,CACpBlQ,KAAoB,EACpBqD,aAAoC,EACX;IACzB,IAAM;MACJiH,mBAAmB,GAAG;QAAEQ,YAAY,EAAEvM,WAAW;QAAE4R,SAAS,EAAE;MAAM,CAAC;MACrE7M,eAAe;MACf8M,qBAAqB;MACrBC,gBAAgB;MAChBC,OAAO;MACP/N,YAAY;MACZxB,aAAa;MACbwP,kBAAkB,GAAGhS,WAAW;MAChCiS,WAAW;MACXC,YAAY,GAAGvR,SAAS;MACxBwR,aAAa;MACbC,WAAW;MACXhK,qBAAqB,GAAGpI,WAAW;MACnCqS,qBAAqB;MACrB9N,KAAK;MACL+N,mBAAmB;MACnBhF,cAAc,GAAGrN,SAAS;MAC1BsS,aAAa;MACbC;IACF,CAAC,GAAG1N,aAAa;IACjB/E,aAAa,CAACgS,OAAO,CAAC;IACtB,IAAM;MAAE9L,gBAAgB;MAAEwM;IAAe,CAAC,GAAGV,OAAO;IACpD,IAAM;MAAEhQ;IAAQ,CAAC,GAAGN,KAAK;IACzB;IACA,OAAO;MACLsD,eAAe,EAAE,IAAI,CAAC2N,wBAAwB,CAAC3Q,OAAO,EAAEgD,eAAe,CAAC;MACxEgH,mBAAmB;MACnB8F,qBAAqB,EAAE,CAAC,GAAGA,qBAAqB,CAAC;MACjDC,gBAAgB;MAChB9N,YAAY,EAAEzC,aAAa,CAACwC,qBAAqB,CAACC,YAAY,CAAC;MAC/DO,KAAK,EAAEhD,aAAa,CAAC+C,aAAa,CAACC,KAAK,CAAC;MACzC0B,gBAAgB,EAAE,CAAC,GAAGA,gBAAgB,CAAC,CACpCjE,MAAM,CACL2Q,MAAA;QAAA,IAAC,CAACzO,WAAW,CAAC,GAAAyO,MAAA;QAAA,OACZzO,WAAW,IAAI,IAAI,IACnBA,WAAW,IAAI,CAAC,IAChBA,WAAW,GAAGnC,OAAO,CAACZ,MAAM;MAAA,CAChC,CAAC,CACAiB,GAAG,CAACwQ,MAAA;QAAA,IAAC,CAAC1O,WAAW,EAAE2O,KAAK,CAAC,GAAAD,MAAA;QAAA,OAAK,CAAC7Q,OAAO,CAACmC,WAAW,CAAC,CAAC5B,IAAI,EAAEuQ,KAAK,CAAC;MAAA,EAAC;MACpEJ,cAAc,EAAE,CAAC,GAAGA,cAAc,CAAC;MACnCjQ,aAAa,EAAE,CAAC,GAAGA,aAAa,CAAC;MACjCwP,kBAAkB,EAAE,CAAC,GAAGA,kBAAkB,CAAC;MAC3CC,WAAW;MACXC,YAAY;MACZC,aAAa;MACbC,WAAW;MACXhK,qBAAqB,EAAE,CAAC,GAAGA,qBAAqB,CAAC;MACjDiK,qBAAqB;MACrBC,mBAAmB;MACnBhF,cAAc,EAAE,IAAI,CAACwF,uBAAuB,CAAC/Q,OAAO,EAAEuL,cAAc,CAAC;MACrEiF,aAAa;MACbC,kBAAkB,EAAEA,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CAAEpQ,GAAG,CAACyD,IAAI,KAAK;QACnDvD,IAAI,EAAEuD,IAAI,CAACvD,IAAI;QACf+M,QAAQ,EAAExJ,IAAI,CAACwJ,QAAQ;QACvB0D,KAAK,EAAElN,IAAI,CAACkN;MACd,CAAC,CAAC;IACJ,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;EACEC,oBAAoBA,CAClBvR,KAAoB,EACpBqD,aAAsC,EAItC;IAAA,IAAAmO,MAAA,EAAAC,kBAAA;IACA,IAAM;MACJnO,eAAe;MACfgH,mBAAmB,GAAG;QAAEQ,YAAY,EAAE,EAAE;QAAEqF,SAAS,EAAE;MAAM,CAAC;MAC5DC,qBAAqB;MACrBC,gBAAgB;MAChB9N,YAAY;MACZO,KAAK;MACL/B,aAAa;MACbwP,kBAAkB;MAClB/L,gBAAgB;MAChBwM,cAAc;MACdR,WAAW;MACXC,YAAY,GAAGvR,SAAS;MACxBwR,aAAa;MACbC,WAAW;MACXhK,qBAAqB;MACrBiK,qBAAqB;MACrBC,mBAAmB,GAAG,IAAI;MAC1BhF,cAAc,GAAG,EAAE;MACnBiF,aAAa;MACbC;IACF,CAAC,GAAG1N,aAAa;IACjB,IAAM;MAAE/C,OAAO;MAAEoR;IAAU,CAAC,GAAG1R,KAAK;IAEpC,OAAO;MACLsD,eAAe,EAAE,IAAI,CAACqO,sBAAsB,CAC1CrR,OAAO,EACPgD,eAAe,EACfoO,SAAS,CAACE,QACZ,CAAC;MACDtH,mBAAmB;MACnB8F,qBAAqB,EAAE,IAAIhO,GAAG,CAACgO,qBAAqB,CAAC;MACrDC,gBAAgB;MAChB9N,YAAY,EAAE,IAAI,CAACsP,mBAAmB,CACpCvR,OAAO,EACPiC,YAAY,EACZmP,SAAS,CAACE,QACZ,CAAC;MACD9O,KAAK,EAAE,IAAI,CAACgP,WAAW,CAACxR,OAAO,EAAEwC,KAAK,CAAC;MACvC0B,gBAAgB,EAAE,IAAIpC,GAAG,CACvBoC,gBAAgB,CACb7D,GAAG,CACFoR,MAAA,IAAkE;QAAA,IAAjE,CAAC9P,MAAM,EAAEmP,KAAK,CAA4B,GAAAW,MAAA;QACzC,IACE,OAAO9P,MAAM,KAAK,QAAQ,IACzBA,MAAM,YAAwBiL,MAAM,EACrC;UACA,OAAO,CACL5M,OAAO,CAACkB,SAAS,CAACwQ,MAAA;YAAA,IAAC;cAAEnR;YAAK,CAAC,GAAAmR,MAAA;YAAA,OAAKnR,IAAI,KAAKoB,MAAM;UAAA,EAAC,EAChDmP,KAAK,CACN;QACH;QACA,OAAO,CAACnP,MAAM,EAAEmP,KAAK,CAAC;MACxB,CACF,CAAC,CACA7Q,MAAM,CACL0R,MAAA;QAAA,IAAC,CAAChQ,MAAM,CAAC,GAAAgQ,MAAA;QAAA,OACPhQ,MAAM,IAAI,IAAI,IAAIA,MAAM,IAAI,CAAC,IAAIA,MAAM,GAAG3B,OAAO,CAACZ,MAAM;MAAA,CAC5D,CACJ,CAAC;MACDqB,aAAa;MACbwP,kBAAkB;MAClBS,cAAc,EAAE,IAAI5O,GAAG,CAAC4O,cAAc,CAAC;MACvCR,WAAW;MACXC,YAAY;MACZC,aAAa;MACbC,WAAW;MACXhK,qBAAqB;MACrBiK,qBAAqB;MACrBC,mBAAmB;MACnBhF,cAAc,EAAE,IAAI,CAACqG,qBAAqB,CACxC5R,OAAO,EACPuL,cACF,CAA0B;MAC1BiF,aAAa;MACbC,kBAAkB,EAAEjR,aAAa,CAACuN,uBAAuB,CACvDrN,KAAK,GAAAwR,MAAA,GACLT,kBAAkB,aAAlBA,kBAAkB,cAAlBA,kBAAkB,IAAAU,kBAAA,GAAIzR,KAAK,CAACmS,WAAW,cAAAV,kBAAA,uBAAjBA,kBAAA,CAAmBW,YAAY,cAAAZ,MAAA,cAAAA,MAAA,GAAI,EAC3D,CAAC,CAAC9D;IACJ,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEmE,mBAAmBA,CACjBvR,OAA0B,EAC1B+R,iBAAmD,EACnDT,QAAiB,EACO;IACxB,IAAMU,eAAe,GAAGD,iBAAiB,CAAC1R,GAAG,CAC3C4R,MAAA,IAGK;MAAA,IAHJ,CAAC9P,WAAW,EAAEC,WAAW,CAAwB,GAAA6P,MAAA;MAIhD,IAAM;QAAE5P;MAAK,CAAC,GAAGD,WAAW;MAE5B,IAAInC,MAAM,GAAG,IAAI;MACjB,IAAI;QACF,IAAM0B,MAAM,GAAGnC,aAAa,CAACiM,SAAS,CAACzL,OAAO,EAAEmC,WAAW,CAAC;QAC5D,IAAIR,MAAM,IAAI,IAAI,EAAE;UAClB1B,MAAM,GAAG,IAAI,CAAC0P,UAAU,CAACuC,eAAe,CAACvQ,MAAM,EAAEU,IAAI,EAAEiP,QAAQ,CAAC;QAClE;MACF,CAAC,CAAC,OAAO5F,KAAK,EAAE;QACdnN,GAAG,CAACmN,KAAK,CAAC,gCAAgC,EAAErJ,IAAI,EAAEqJ,KAAK,CAAC;MAC1D;MAEA,OAAO,CAACvJ,WAAW,EAAE;QAAEE,IAAI;QAAEpC;MAAO,CAAC,CAAC;IACxC,CACF,CAAC;IAED,OAAO,IAAI6B,GAAG,CAACkQ,eAAe,CAAC;EACjC;;EAEA;AACF;AACA;AACA;AACA;AACA;EACErB,wBAAwBA,CACtB3Q,OAA0B,EAC1BgD,eAA0C,EACd;IAC5B,OAAO,CAAC,GAAGA,eAAe,CAAC,CAAC3C,GAAG,CAAC8R,MAAA,IAAmC;MAAA,IAAlC,CAAChQ,WAAW,EAAEiQ,cAAc,CAAC,GAAAD,MAAA;MAC5D,IAAMxQ,MAAM,GAAGnC,aAAa,CAACiM,SAAS,CAACzL,OAAO,EAAEmC,WAAW,CAAC;MAC5DnE,aAAa,CAAC2D,MAAM,CAAC;MACrB,IAAM0Q,OAAO,GAAG,IAAI,CAACC,8BAA8B,CACjD3Q,MAAM,EACNyQ,cAAc,CAACC,OACjB,CAAC;MACD,OAAO,CAAClQ,WAAW,EAAE;QAAEkQ;MAAQ,CAAC,CAAC;IACnC,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEhB,sBAAsBA,CACpBrR,OAA0B,EAC1BuS,oBAAyD,EACzDjB,QAAgB,EACW;IAC3B,IAAMU,eAAe,GAAGO,oBAAoB,CAAClS,GAAG,CAC9CmS,MAAA,IAGK;MAAA,IAHJ,CAACrQ,WAAW,EAAEiQ,cAAc,CAA2B,GAAAI,MAAA;MAItD,IAAM7Q,MAAM,GAAGnC,aAAa,CAACiM,SAAS,CAACzL,OAAO,EAAEmC,WAAW,CAAC;MAC5DnE,aAAa,CAAC2D,MAAM,CAAC;MACrB,IAAM0Q,OAAO,GAAG,IAAI,CAACI,4BAA4B,CAC/C9Q,MAAM,EACNyQ,cAAc,CAACC,OACjB,CAAC;MACD,IAAIpS,MAAM,GAAG,IAAI;MAEjB,IAAI;QACF,IAAMyS,eAAe,GAAGlT,aAAa,CAACiM,SAAS,CAACzL,OAAO,EAAEmC,WAAW,CAAC;QACrE,IAAIuQ,eAAe,IAAI,IAAI,EAAE;UAC3BzS,MAAM,GAAG,IAAI,CAAC0P,UAAU,CAACgD,kBAAkB,CACzChR,MAAM,EACN0Q,OAAO,EACPf,QACF,CAAC;QACH;MACF,CAAC,CAAC,OAAO5F,KAAK,EAAE;QACdnN,GAAG,CAACmN,KAAK,CAAC,mCAAmC,EAAE2G,OAAO,EAAE3G,KAAK,CAAC;MAChE;MAEA,OAAO,CAACvJ,WAAW,EAAE;QAAEkQ,OAAO;QAAEpS;MAAO,CAAC,CAAC;IAC3C,CACF,CAAC;IAED,OAAO,IAAI6B,GAAG,CAACkQ,eAAe,CAAC;EACjC;EAEAM,8BAA8BA,CAC5B3Q,MAAc,EACd0Q,OAA8B,EACP;IACvB,IAAM;QAAEO;MAAgC,CAAC,GAAGP,OAAO;MAAxBQ,YAAY,GAAAC,wBAAA,CAAKT,OAAO,EAAAU,SAAA;IACnD,OAAAhN,aAAA;MACE6M,cAAc,EAAEA,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAEvS,GAAG,CAAEf,KAAc,IACjD,IAAI,CAAC0T,cAAc,CAAC1T,KAAK,EAAEqC,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEwB,IAAI,CACzC;IAAC,GACE0P,YAAY;EAEnB;EAEAJ,4BAA4BA,CAC1B9Q,MAAc,EACd0Q,OAA8B,EACP;IACvB,IAAM;QAAEO;MAAgC,CAAC,GAAGP,OAAO;MAAxBQ,YAAY,GAAAC,wBAAA,CAAKT,OAAO,EAAAY,UAAA;IACnD,OAAAlN,aAAA;MACE6M,cAAc,EAAEA,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAEvS,GAAG,CAACf,KAAK,IACvC,IAAI,CAAC4T,YAAY,CAAC5T,KAAK,EAAEqC,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEwB,IAAI,CACvC;IAAC,GACE0P,YAAY;EAEnB;EAEA9B,uBAAuBA,CACrB/Q,OAA0B,EAC1BuL,cAKC,EACmD;IACpD,OAAO,CAAC,GAAGA,cAAc,CAAC,CAAClL,GAAG,CAAC8S,MAAA;MAAA,IAAC,CAAC3H,QAAQ,EAAE;QAAEjC;MAAK,CAAC,CAAC,GAAA4J,MAAA;MAAA,OAAK,CACvD3H,QAAQ,EACR;QACEjC,IAAI,EAAE,CAAC,GAAGA,IAAI,CAAC,CAAClJ,GAAG,CAAC+S,MAAA;UAAA,IAAC,CAAClK,CAAC,EAAE5J,KAAK,CAAC,GAAA8T,MAAA;UAAA,OAAK,CAClCpT,OAAO,CAACkJ,CAAC,CAAC,CAAC3I,IAAI,EACf,IAAI,CAACyS,cAAc,CAAC1T,KAAK,EAAEU,OAAO,CAACkJ,CAAC,CAAC,CAAC/F,IAAI,CAAC,CAC5C;QAAA;MACH,CAAC,CACF;IAAA,EAAC;EACJ;EAEAyO,qBAAqBA,CACnB5R,OAA0B,EAC1BuL,cAAkE,EAIlE;IACA,IAAM8H,SAAS,GAAG,IAAIvR,GAAG,CAAqB,CAAC;IAC/C,IAAMwR,cAAc,GAAIhQ,UAAsB,IAAyB;MACrE,IAAI,CAAC+P,SAAS,CAAC7K,GAAG,CAAClF,UAAU,CAAC,EAAE;QAC9B+P,SAAS,CAAC5K,GAAG,CACXnF,UAAU,EACVtD,OAAO,CAACkB,SAAS,CAACqS,MAAA;UAAA,IAAC;YAAEhT;UAAK,CAAC,GAAAgT,MAAA;UAAA,OAAKhT,IAAI,KAAK+C,UAAU;QAAA,EACrD,CAAC;MACH;MACA,OAAO+P,SAAS,CAACtP,GAAG,CAACT,UAAU,CAAC;IAClC,CAAC;IAED,OAAO,IAAIxB,GAAG,CACZyJ,cAAc,CAAClL,GAAG,CAChBmT,MAAA;MAAA,IAAC,CAAChI,QAAQ,EAAE;QAAEjC;MAAK,CAAC,CAGnB,GAAAiK,MAAA;MAAA,OAAK,CACJhI,QAAQ,EACR;QACEjC,IAAI,EAAE,IAAIzH,GAAG,CACXyH,IAAI,CAAClJ,GAAG,CAACoT,MAAA,IAAyB;UAAA,IAAAC,eAAA;UAAA,IAAxB,CAACpQ,UAAU,EAAEhE,KAAK,CAAC,GAAAmU,MAAA;UAC3B,IAAM1H,KAAK,GAAGuH,cAAc,CAAChQ,UAAU,CAAC;UACxCtF,aAAa,CAAC+N,KAAK,CAAC;UACpB,OAAO,EAAA2H,eAAA,GACLJ,cAAc,CAAChQ,UAAU,CAAC,cAAAoQ,eAAA,cAAAA,eAAA,GAAI,IAAI,EAClC,IAAI,CAACR,YAAY,CAAC5T,KAAK,EAAEU,OAAO,CAAC+L,KAAK,CAAC,CAAC5I,IAAI,CAAC,CAC9C;QACH,CAAC,CACH;MACF,CAAC,CACF;IAAA,CACH,CACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;EACE6P,cAAcA,CAAI1T,KAAQ,EAAEiE,UAAkB,EAAqB;IACjE,IAAIzF,UAAU,CAAC8Q,UAAU,CAACrL,UAAU,CAAC,EAAE;MACrC,OAAO,IAAI,CAACoQ,iBAAiB,CAC3BrU,KACF,CAAC;IACH;IAEA,IAAIxB,UAAU,CAAC8V,UAAU,CAACrQ,UAAU,CAAC,EAAE;MACrC,OAAO/D,aAAa,CAAC8C,aAAa,CAAChD,KAAK,CAAC;IAC3C;IAEA,OAAOA,KAAK;EACd;;EAEA;AACF;AACA;AACA;AACA;EACE4T,YAAYA,CACV5T,KAAQ,EACRiE,UAAkB,EACoB;IACtC,IAAIzF,UAAU,CAAC8Q,UAAU,CAACrL,UAAU,CAAC,EAAE;MACrC,OAAO,IAAI,CAACsQ,eAAe,CAACvU,KAA0B,CAAC;IACzD;IAEA,IAAIxB,UAAU,CAAC8V,UAAU,CAACrQ,UAAU,CAAC,EAAE;MACrC,OAAO,IAAI,CAACuQ,WAAW,CAACxU,KAA0B,CAAC;IACrD;IAEA,OAAOA,KAAK;EACd;EAEAqU,iBAAiBA,CAACrU,KAAkC,EAAiB;IACnE,OAAOA,KAAK,IAAI,IAAI,GAChB,IAAI,CAACmQ,EAAE,CAACsE,IAAI,CAACC,cAAc,CAACC,MAAM,CAACpW,SAAS,CAACqW,gBAAgB,EAAE5U,KAAK,CAAC,GACrE,IAAI;EACV;EAEAuU,eAAeA,CAACvU,KAAa,EAAsB;IACjD,OAAOA,KAAK,IAAI,IAAI,GAChB,IAAI,CAACmQ,EAAE,CAACsE,IAAI,CAACC,cAAc,CAACG,KAAK,CAACtW,SAAS,CAACqW,gBAAgB,EAAE5U,KAAK,CAAC,GACpE,IAAI;EACV;EAEAwU,WAAWA,CAACxU,KAAa,EAAsB;IAC7C,OAAOA,KAAK,IAAI,IAAI,GAAG,IAAI,CAACmQ,EAAE,CAAC2E,WAAW,CAACC,QAAQ,CAAC/U,KAAK,CAAC,GAAG,IAAI;EACnE;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEkS,WAAWA,CACTxR,OAA0B,EAC1BwC,KAAyD,EACjD;IACR,IAAM;MAAEiN;IAAG,CAAC,GAAG,IAAI;IACnB,OACEjN,KAAK,CACFnC,GAAG,CAACoC,IAAI,IAAI;MACX,IAAM;QAAEd,MAAM,EAAE2S,iBAAiB;QAAE5R,KAAK;QAAEC;MAAU,CAAC,GAAGF,IAAI;MAC5D,IAAIE,SAAS,KAAK7E,UAAU,CAACyW,aAAa,CAACC,OAAO,EAAE;QAClD,OAAO/E,EAAE,CAACgF,KAAK,CAACD,OAAO,CAAC,CAAC;MAC3B;MAEA,IAAM7S,MAAM,GACV,OAAO2S,iBAAiB,KAAK,QAAQ,GACjC9U,aAAa,CAACoC,eAAe,CAAC5B,OAAO,EAAEsU,iBAAiB,CAAC,GACzD9U,aAAa,CAACiM,SAAS,CAACzL,OAAO,EAAEsU,iBAAiB,CAAC;MAEzD,IAAI3S,MAAM,IAAI,IAAI,EAAE;QAClB,IAAI+S,UAAU,GAAG/S,MAAM,CAACc,IAAI,CAAC,CAAC;QAC9B,IAAIC,KAAK,EAAE;UACTgS,UAAU,GAAGA,UAAU,CAACC,GAAG,CAAC,CAAC;QAC/B;QACA,IAAIhS,SAAS,KAAK7E,UAAU,CAACyW,aAAa,CAACK,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;IACA;IACA;IAAA,CACCzU,MAAM,CACL6D,IAAI,IACFA,IAAI,IAAI,IAAI,IAAIA,IAAI,CAACnB,SAAS,KAAK7E,UAAU,CAACyW,aAAa,CAACC,OAChE,CAAC;EAEP;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEO,kBAAkBA,CAChBC,KAAY,EACZC,aAA4B,EAC5B3D,QAAgB,EACV;IACN,IAAM;MAAEtR;IAAQ,CAAC,GAAGgV,KAAK;IAEzB,IAAI/S,YAA+B,GAAG,EAAE;IACxC,IAAIgT,aAAa,CAAChT,YAAY,EAAE;MAC9BA,YAAY,GAAGzC,aAAa,CAACgE,uBAAuB,CAClD,IAAI,CAAC+N,mBAAmB,CAACvR,OAAO,EAAEiV,aAAa,CAAChT,YAAY,EAAEqP,QAAQ,CACxE,CAAC;IACH;IAEA,IAAItO,eAAkC,GAAG,EAAE;IAC3C,IAAIiS,aAAa,CAACjS,eAAe,EAAE;MACjCA,eAAe,GAAGxD,aAAa,CAACgE,uBAAuB,CACrD,IAAI,CAAC6N,sBAAsB,CACzBrR,OAAO,EACPiV,aAAa,CAACjS,eAAe,EAC7BsO,QACF,CACF,CAAC;IACH;IACA,IAAMxO,YAAY,GAAG,IAAI,CAACoS,0BAA0B,CAClDlV,OAAO,EACPiV,aAAa,CAACnS,YAAY,EAC1BwO,QACF,CAAC;IAED,IAAI9O,KAAa,GAAG,EAAE;IACtB,IAAIyS,aAAa,CAACzS,KAAK,EAAE;MACvBA,KAAK,GAAG,IAAI,CAACgP,WAAW,CAACxR,OAAO,EAAEiV,aAAa,CAACzS,KAAK,CAAC;IACxD;IAEA,IAAIkB,OAAO,GAAG,CAAC,GAAGzB,YAAY,EAAE,GAAGe,eAAe,CAAC;IACnD,IAAM;MAAEzB,UAAU;MAAEvC,gBAAgB,EAAEmW;IAAqB,CAAC,GAC1DF,aAAa;IACf,IACE1T,UAAU,IACVA,UAAU,CAACnC,MAAM,IACjB+V,oBAAoB,IACpBA,oBAAoB,aAApBA,oBAAoB,eAApBA,oBAAoB,CAAE/V,MAAM,EAC5B;MACA,IAAMJ,gBAAgB,GAAGmW,oBAAoB,CAAC9U,GAAG,CAAC+U,mBAAmB,IACnE5V,aAAa,CAACoC,eAAe,CAAC5B,OAAO,EAAEoV,mBAAmB,CAC5D,CAAC;MACD,KAAK,IAAIxR,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG5E,gBAAgB,CAACI,MAAM,EAAEwE,CAAC,IAAI,CAAC,EAAE;QACnD,IAAI5E,gBAAgB,CAAC4E,CAAC,CAAC,KAAKhF,SAAS,IAAI2C,UAAU,CAACqC,CAAC,CAAC,IAAI,IAAI,EAAE;UAC9D;UACA,IAAMyR,eAAe,GAAGrW,gBAAgB,CAAC4E,CAAC,CAAC,CAAE3D,MAAM,CAAC,CAAC,CAACqV,EAAE,CACtD,IAAI,CAAC7F,EAAE,CAAC8F,WAAW,CAAClB,QAAQ,CAAC9S,UAAU,CAACqC,CAAC,CAAC,CAC5C,CAAC;UACDF,OAAO,GAAG,CAAC2R,eAAe,EAAE,GAAG3R,OAAO,CAAC;QACzC;MACF;IACF;IACAA,OAAO,GAAG,CAAC,GAAGZ,YAAY,EAAE,GAAGY,OAAO,CAAC;IAEvCsR,KAAK,CAACQ,WAAW,CAAC9R,OAAO,CAAC;IAC1BsR,KAAK,CAACS,SAAS,CAACjT,KAAK,CAAC;EACxB;EAEA0S,0BAA0BA,CACxBlV,OAA0B,EAGP;IAAA,IAFnB8C,YAAoC,GAAApC,SAAA,CAAAtB,MAAA,QAAAsB,SAAA,QAAA9B,SAAA,GAAA8B,SAAA,MAAG,EAAE;IAAA,IACzC4Q,QAAiB,GAAA5Q,SAAA,CAAAtB,MAAA,OAAAsB,SAAA,MAAA9B,SAAA;IAEjB,OAAOkE,YAAY,CAChBzC,GAAG,CAACqV,MAAA,IAA2B;MAAA,IAA1B;QAAEnV,IAAI;QAAE4C,IAAI;QAAE7D;MAAM,CAAC,GAAAoW,MAAA;MACzB,IAAM/T,MAAM,GAAG3B,OAAO,CAACoD,IAAI,CACzBuS,MAAA;QAAA,IAAC;UAAEpV,IAAI,EAAE+C,UAAU;UAAEH,IAAI,EAAEI;QAAW,CAAC,GAAAoS,MAAA;QAAA,OACrCrS,UAAU,KAAK/C,IAAI,IAAIgD,UAAU,KAAKJ,IAAI;MAAA,CAC9C,CAAC;MACD,IAAIxB,MAAM,EAAE;QACV,IAAI;UACF,OAAO,IAAI,CAACgO,UAAU,CAACuC,eAAe,CAACvQ,MAAM,EAAErC,KAAK,EAAEgS,QAAQ,CAAC;QACjE,CAAC,CAAC,OAAOsE,CAAC,EAAE;UACV;UACArX,GAAG,CAACsX,KAAK,CAAC,+BAA+B,EAAED,CAAC,CAAC;QAC/C;MACF;MAEA,OAAO,IAAI;IACb,CAAC,CAAC,CACD3V,MAAM,CAACA,MAAM,IAAIA,MAAM,IAAI,IAAI,CAAC;EACrC;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE6V,kBAAkBA,CAAC/N,MAA4B,EAAY;IACzD,IAAM;MAAE0H;IAAG,CAAC,GAAG,IAAI;IACnB,IAAMsG,SAAS,GAAGhO,MAAM,CACrBiO,KAAK,CAAC,CAAC,CACPvT,IAAI,CAAC,CAAC0J,CAAC,EAAEC,CAAC,KAAa;MACtBpO,aAAa,CAACmO,CAAC,CAAChE,QAAQ,CAAC;MACzBnK,aAAa,CAACoO,CAAC,CAACjE,QAAQ,CAAC;MACzB,OAAOgE,CAAC,CAAChE,QAAQ,GAAGiE,CAAC,CAACjE,QAAQ;IAChC,CAAC,CAAC,CACD9H,GAAG,CAAC4H,KAAK,IAAI;MACZ,IAAM;QAAEE,QAAQ;QAAEC;MAAO,CAAC,GAAGH,KAAK;MAClCjK,aAAa,CAACmK,QAAQ,CAAC;MACvBnK,aAAa,CAACoK,MAAM,CAAC;MACrB,OAAOqH,EAAE,CAACwG,QAAQ,CAACC,OAAO,CAAC/N,QAAQ,EAAEC,MAAM,CAAC;IAC9C,CAAC,CAAC;IACJ,OAAOqH,EAAE,CAACwG,QAAQ,CAACE,QAAQ,CAACJ,SAAS,CAAC;EACxC;AACF;AAEA,eAAevW,aAAa"}
1
+ {"version":3,"file":"IrisGridUtils.js","names":["GridUtils","DateUtils","TableUtils","Log","assertNotNull","EMPTY_ARRAY","EMPTY_MAP","AggregationUtils","AggregationOperation","AdvancedSettings","ColumnHeaderGroup","log","module","isPanelStateV1","state","partitionColumn","undefined","isPanelStateV2","Array","isArray","partitionColumns","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","partitions","advancedSettings","hydrateIrisGridPanelState","partition","column","getColumnByName","Error","Map","DEFAULTS","dehydrateQuickFilters","quickFilters","_ref6","columnIndex","quickFilter","text","dehydrateLong","dehydrateSort","sorts","sort","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","_ref10","customColumn","split","getRemovedCustomColumnNames","oldCustomColumns","oldCustomColumnsNames","oldCustomColumnName","includes","removeSortsInColumns","removeFiltersInColumns","removedColumnNames","_ref11","newFilter","forEach","delete","indexOf","removeColumnFromMovedColumns","_ref12","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","_ref13","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","aggregationColumns","_ref14","operation","selected","invert","isRollupOperation","getOperationColumnNames","aggregationMap","nonAggregatedColumnSet","size","_aggregationMap$Aggre","existingColumns","FIRST","getPendingErrors","pendingDataMap","rowIndex","getColumn","error","_ref15","_ref16","changeFilterColumnNamesToIndexes","_ref17","index","filterConfig","combineFiltersFromList","filterList","a","b","operator","startColumnIndex","combinedText","symbol","getFilterOperatorString","filterText","isCharType","String","fromCharCode","parseInt","parseColumnHeaderGroups","groupsParam","maxDepth","parentMap","groupMap","groups","_ref18","children","originalGroupMap","group","seenChildren","addGroup","getColumnIndexByName","existingGroup","childIndexes","depth","childName","childGroup","childIndex","addedGroup","Math","max","columnHeaderGroup","flat","groupNames","_parentMap$get","setParent","values","convertValueToText","isDateType","date","Date","offset","getTimezoneOffset","offsetDate","getTime","dateText","toISOString","formattedText","replace","substring","constructor","dh","_defineProperty","tableUtils","dehydrateIrisGridState","showOnTop","customColumnFormatMap","isFilterBarShown","metrics","conditionalFormats","reverseType","rollupConfig","showSearchBar","searchValue","selectedSearchColumns","invertSearchColumns","frozenColumns","columnHeaderGroups","userRowHeights","dehydrateAdvancedFilters","_ref19","_ref20","width","dehydratePendingDataMap","color","hydrateIrisGridState","_ref24","_model$layoutHints","formatter","hydrateAdvancedFilters","timeZone","hydrateQuickFilters","hydrateSort","_ref21","_ref22","_ref23","hydratePendingDataMap","layoutHints","columnGroups","savedQuickFilters","importedFilters","_ref25","makeQuickFilter","_ref26","advancedFilter","options","dehydrateAdvancedFilterOptions","savedAdvancedFilters","_ref27","hydrateAdvancedFilterOptions","columnRetrieved","makeAdvancedFilter","selectedValues","otherOptions","_objectWithoutProperties","_excluded","dehydrateValue","_excluded2","hydrateValue","_ref28","_ref29","columnMap","getColumnIndex","_ref30","_ref31","_ref32","_getColumnIndex","dehydrateDateTime","isLongType","hydrateDateTime","hydrateLong","i18n","DateTimeFormat","format","FULL_DATE_FORMAT","parse","LongWrapper","ofString","columnIndexOrName","sortDirection","reverse","Table","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"],"sources":["../src/IrisGridUtils.ts"],"sourcesContent":["import {\n GridMetrics,\n GridRange,\n GridUtils,\n ModelIndex,\n ModelSizeMap,\n MoveOperation,\n VisibleIndex,\n} from '@deephaven/grid';\nimport type {\n Column,\n ColumnGroup,\n DateWrapper,\n dh as DhType,\n FilterCondition,\n LongWrapper,\n RangeSet,\n RollupConfig,\n Sort,\n Table,\n TableData,\n} from '@deephaven/jsapi-types';\nimport {\n DateUtils,\n TableUtils,\n ReverseType,\n SortDirection,\n FormattingRule,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { assertNotNull, EMPTY_ARRAY, EMPTY_MAP } from '@deephaven/utils';\nimport AggregationUtils from './sidebar/aggregations/AggregationUtils';\nimport AggregationOperation from './sidebar/aggregations/AggregationOperation';\nimport { FilterData, IrisGridProps, IrisGridState } from './IrisGrid';\nimport {\n ColumnName,\n ReadonlyAdvancedFilterMap,\n ReadonlyQuickFilterMap,\n InputFilter,\n CellData,\n PendingDataMap,\n UIRow,\n AdvancedFilterOptions,\n} from './CommonTypes';\nimport { UIRollupConfig } from './sidebar/RollupRows';\nimport { AggregationSettings } from './sidebar/aggregations/Aggregations';\nimport { FormattingRule as SidebarFormattingRule } from './sidebar/conditional-formatting/ConditionalFormattingUtils';\nimport IrisGridModel from './IrisGridModel';\nimport type AdvancedSettingsType from './sidebar/AdvancedSettingsType';\nimport AdvancedSettings from './sidebar/AdvancedSettings';\nimport ColumnHeaderGroup from './ColumnHeaderGroup';\n\nconst log = Log.module('IrisGridUtils');\n\ntype HydratedIrisGridState = Pick<\n IrisGridState,\n | 'advancedFilters'\n | 'aggregationSettings'\n | 'customColumnFormatMap'\n | 'isFilterBarShown'\n | 'quickFilters'\n | 'customColumns'\n | 'reverseType'\n | 'rollupConfig'\n | 'showSearchBar'\n | 'searchValue'\n | 'selectDistinctColumns'\n | 'selectedSearchColumns'\n | 'sorts'\n | 'invertSearchColumns'\n | 'pendingDataMap'\n | 'frozenColumns'\n | 'conditionalFormats'\n | 'columnHeaderGroups'\n> & {\n metrics: Pick<GridMetrics, 'userColumnWidths' | 'userRowHeights'>;\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 DehydratedUserColumnWidth = [ColumnName, number];\n\nexport type DehydratedUserRowHeight = [number, number];\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: SortDirection;\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 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 reverseType: ReverseType;\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 ColumnGroup[];\n}\n\nexport interface DehydratedIrisGridPanelStateV1 {\n isSelectingPartition: boolean;\n partition: string | null;\n partitionColumn: ColumnName | null;\n advancedSettings: [AdvancedSettingsType, boolean][];\n}\n\nexport interface DehydratedIrisGridPanelStateV2 {\n isSelectingPartition: boolean;\n partitions: (string | null)[];\n partitionColumns: ColumnName[];\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 (\n (state as DehydratedIrisGridPanelStateV1).partitionColumn !== undefined\n );\n}\n\nexport function isPanelStateV2(\n state: DehydratedIrisGridPanelState\n): state is DehydratedIrisGridPanelStateV2 {\n return Array.isArray(\n (state as DehydratedIrisGridPanelStateV2).partitionColumns\n );\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 DateWrapper {\n return (value as DateWrapper)?.asDate != null;\n}\n\nclass IrisGridUtils {\n /**\n * Exports the state from Grid component to a JSON stringifiable object\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: Pick<\n IrisGridProps,\n 'isStuckToBottom' | 'isStuckToRight' | 'movedColumns' | 'movedRows'\n >\n ): {\n isStuckToBottom: boolean;\n isStuckToRight: boolean;\n movedColumns: { from: string | [string, string]; to: string }[];\n movedRows: MoveOperation[];\n } {\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: {\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 customColumns: readonly string[] = []\n ): Pick<\n IrisGridProps,\n 'isStuckToBottom' | 'isStuckToRight' | 'movedColumns' | 'movedRows'\n > {\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 partitionColumns: Column[];\n advancedSettings: Map<AdvancedSettingsType, boolean>;\n }\n ): DehydratedIrisGridPanelState {\n const {\n isSelectingPartition,\n partitions,\n partitionColumns,\n advancedSettings,\n } = irisGridPanelState;\n\n // Return value will be serialized, should not contain undefined\n return {\n isSelectingPartition,\n partitions,\n partitionColumns: partitionColumns.map(\n partitionColumn => partitionColumn.name\n ),\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 partitionColumns: Column[];\n advancedSettings: Map<AdvancedSettingsType, boolean>;\n } {\n const { isSelectingPartition, advancedSettings } = irisGridPanelState;\n\n const { partitionColumns, partitions } = isPanelStateV2(irisGridPanelState)\n ? irisGridPanelState\n : {\n partitionColumns:\n irisGridPanelState.partitionColumn !== null\n ? [irisGridPanelState.partitionColumn]\n : [],\n partitions: [irisGridPanelState.partition],\n };\n\n const { columns } = model;\n return {\n isSelectingPartition,\n partitions,\n partitionColumns: partitionColumns.map(partitionColumn => {\n const column = IrisGridUtils.getColumnByName(columns, partitionColumn);\n if (column === undefined) {\n throw new Error(`Invalid partition column ${partitionColumn}`);\n }\n return column;\n }),\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 Sort[]): 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 partitionColumns: ColumnName[];\n partitions: unknown[];\n advancedFilters: AF;\n inputFilters: InputFilter[];\n quickFilters: QF;\n sorts: S;\n } {\n const { irisGridPanelState, irisGridState } = panelState;\n const { partitionColumns, partitions } = isPanelStateV2(irisGridPanelState)\n ? irisGridPanelState\n : {\n partitionColumns:\n irisGridPanelState.partitionColumn !== null\n ? [irisGridPanelState.partitionColumn]\n : [],\n partitions: [irisGridPanelState.partition],\n };\n const { advancedFilters, quickFilters, sorts } = irisGridState;\n\n return {\n advancedFilters,\n inputFilters,\n partitions,\n partitionColumns,\n quickFilters,\n sorts,\n };\n }\n\n static getInputFiltersForColumns(\n columns: readonly Column[],\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 ): 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 Sort[],\n columnNames: readonly string[]\n ): Sort[] {\n return sorts.filter(sort => !columnNames.includes(sort.column.name));\n }\n\n static removeFiltersInColumns<T>(\n columns: readonly 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 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 Column[],\n left: number,\n right: number,\n movedColumns: readonly MoveOperation[],\n hiddenColumns: readonly number[]\n ): Column[] {\n const columns: 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 Column[],\n startIndex: VisibleIndex,\n count: number,\n movedColumns: readonly MoveOperation[],\n hiddenColumns: readonly VisibleIndex[]\n ): 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 Column[],\n startIndex: VisibleIndex,\n count: number,\n movedColumns: readonly MoveOperation[],\n hiddenColumns: readonly VisibleIndex[]\n ): 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 Column[],\n viewportColumns: readonly Column[],\n alwaysFetchColumnNames: readonly ColumnName[]\n ): 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 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 ): Column[] | null {\n if (left == null || right == null) {\n return null;\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 Column[]\n ): 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: 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 Column[],\n config: UIRollupConfig | undefined,\n aggregationSettings: AggregationSettings\n ): 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 aggregationColumns = aggregations.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 < aggregations.length; i += 1) {\n aggregationMap[aggregations[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 Column[],\n columnIndex: ModelIndex\n ): 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 Column[],\n columnName: ColumnName\n ): Column | undefined {\n const column = columns.find(({ name }) => name === columnName);\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 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,\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 model: IrisGridModel,\n groupsParam: readonly ColumnGroup[]\n ): {\n groups: ColumnHeaderGroup[];\n maxDepth: number;\n parentMap: Map<string, ColumnHeaderGroup>;\n groupMap: Map<string, ColumnHeaderGroup>;\n } {\n let maxDepth = 1;\n const parentMap: Map<string, ColumnHeaderGroup> = new Map();\n const groupMap: Map<string, ColumnHeaderGroup> = new Map();\n\n // Remove any empty groups before parsing\n const groups = groupsParam?.filter(({ children }) => children.length > 0);\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: ColumnGroup): ColumnHeaderGroup => {\n const { name } = group;\n\n if (model.getColumnIndexByName(name) != null) {\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: ColumnHeaderGroup['childIndexes'] = [];\n let depth = 1;\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 columnHeaderGroup = new ColumnHeaderGroup({\n ...group,\n depth,\n childIndexes: childIndexes.flat(),\n });\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: DhType;\n\n private tableUtils: TableUtils;\n\n constructor(dh: DhType) {\n this.dh = dh;\n this.tableUtils = new TableUtils(dh);\n }\n\n /**\n * Exports the state from IrisGrid to a JSON stringifiable object\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 isFilterBarShown,\n metrics,\n quickFilters,\n customColumns,\n conditionalFormats = EMPTY_ARRAY,\n reverseType,\n rollupConfig = undefined,\n showSearchBar,\n searchValue,\n selectDistinctColumns = EMPTY_ARRAY,\n selectedSearchColumns,\n sorts,\n invertSearchColumns,\n pendingDataMap = EMPTY_MAP,\n frozenColumns,\n columnHeaderGroups,\n } = irisGridState;\n assertNotNull(metrics);\n const { userColumnWidths, userRowHeights } = metrics;\n const { columns } = model;\n // Return value will be serialized, should not contain undefined\n return {\n advancedFilters: this.dehydrateAdvancedFilters(columns, advancedFilters),\n aggregationSettings,\n customColumnFormatMap: [...customColumnFormatMap],\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 reverseType,\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,\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 isFilterBarShown,\n quickFilters,\n sorts,\n customColumns,\n conditionalFormats,\n userColumnWidths,\n userRowHeights,\n reverseType,\n rollupConfig = undefined,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns = true,\n pendingDataMap = [],\n frozenColumns,\n columnHeaderGroups,\n } = irisGridState;\n const { columns, formatter } = model;\n\n return {\n advancedFilters: this.hydrateAdvancedFilters(\n columns,\n advancedFilters,\n formatter.timeZone\n ),\n aggregationSettings,\n customColumnFormatMap: new Map(customColumnFormatMap),\n isFilterBarShown,\n quickFilters: this.hydrateQuickFilters(\n columns,\n quickFilters,\n formatter.timeZone\n ),\n sorts: this.hydrateSort(columns, sorts),\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 reverseType,\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 };\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 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: 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 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 Column[],\n savedAdvancedFilters: readonly DehydratedAdvancedFilter[],\n timeZone: string\n ): ReadonlyAdvancedFilterMap {\n const importedFilters = savedAdvancedFilters.map(\n ([columnIndex, advancedFilter]: DehydratedAdvancedFilter): [\n number,\n { options: AdvancedFilterOptions; filter: FilterCondition | null },\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: 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: 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 Column[],\n pendingDataMap: ReadonlyMap<\n ModelIndex,\n {\n data: Map<ModelIndex, CellData | string>;\n }\n >\n ): DehydratedPendingDataMap<CellData | string | null> {\n return [...pendingDataMap].map(([rowIndex, { data }]) => [\n rowIndex,\n {\n data: [...data].map(([c, value]) => [\n columns[c].name,\n this.dehydrateValue(value, columns[c].type),\n ]),\n },\n ]);\n }\n\n hydratePendingDataMap(\n columns: readonly Column[],\n pendingDataMap: DehydratedPendingDataMap<CellData | string | null>\n ): Map<\n number,\n { data: Map<ModelIndex | null, string | CellData | LongWrapper | null> }\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 /**\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 | 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 ): DateWrapper | 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 | 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): 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): LongWrapper | null {\n return value != null ? this.dh.LongWrapper.ofString(value) : null;\n }\n\n /**\n * Import the saved sorts to apply to the table. Does not actually apply the sort.\n * @param columns The columns the sorts will be applied to\n * @param sorts Exported sort definitions\n * @returns The sorts to apply to the table\n */\n hydrateSort(\n columns: readonly Column[],\n sorts: readonly (DehydratedSort | LegacyDehydratedSort)[]\n ): Sort[] {\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 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 // If the item is a reverse sort item, filter it out - it will get applied with the `reverseType` property\n // This should only happen when loading a legacy dashboard\n .filter(\n item =>\n item != null && item.direction !== TableUtils.sortDirection.reverse\n ) as 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: Table,\n tableSettings: TableSettings,\n timeZone: string\n ): void {\n const { columns } = table;\n\n let quickFilters: FilterCondition[] = [];\n if (tableSettings.quickFilters) {\n quickFilters = IrisGridUtils.getFiltersFromFilterMap(\n this.hydrateQuickFilters(columns, tableSettings.quickFilters, timeZone)\n );\n }\n\n let advancedFilters: 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: Sort[] = [];\n if (tableSettings.sorts) {\n sorts = this.hydrateSort(columns, tableSettings.sorts);\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 Column[],\n inputFilters: readonly InputFilter[] = [],\n timeZone?: string\n ): 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 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[]): 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\nexport default IrisGridUtils;\n"],"mappings":"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"}
@@ -4,12 +4,12 @@
4
4
  }
5
5
  .iris-grid-partition-selector-search .iris-grid-partition-selector-search-empty {
6
6
  color: var(--dh-color-gray-600);
7
- padding: 0.4214rem 0.75rem;
7
+ padding: 0.42145rem 0.75rem;
8
8
  text-align: center;
9
9
  }
10
10
  .iris-grid-partition-selector-search .iris-grid-partition-selector-loading {
11
11
  color: var(--dh-color-gray-600);
12
- padding: 0.4214rem 0.75rem;
12
+ padding: 0.42145rem 0.75rem;
13
13
  text-align: center;
14
14
  }
15
15
  .iris-grid-partition-selector-search .search-container {
@@ -1 +1 @@
1
- {"version":3,"sourceRoot":"","sources":["../../../node_modules/@deephaven/components/scss/custom.scss","../src/PartitionSelectorSearch.scss","../../../node_modules/@deephaven/components/scss/bootstrap_overrides.scss"],"names":[],"mappings":"AAAA;ACII;EACE;;AAGJ;EACE,OCMO;EDLP;EACA;;AAEF;EACE,OCCO;EDAP;EACA;;AAEF;EACE;;AACA;EACE,kBCLK","file":"PartitionSelectorSearch.css","sourcesContent":["/* stylelint-disable scss/at-import-no-partial-leading-underscore */\n// Consumers should be able to resolve bootstrap/ to node_modules/bootstrap\n\n//Make bootstrap functions available for use in overrides\n@import 'bootstrap/scss/_functions.scss';\n@import './bootstrap_overrides.scss';\n\n//_variable imports come after bootstrap default overrides,\n// makes all other variables and mixins from bootstrap available\n/// with just importing customer.scss\n@import 'bootstrap/scss/_variables.scss';\n@import 'bootstrap/scss/_mixins.scss';\n\n//New variables come after imports\n@import './new_variables.scss';\n","@import '@deephaven/components/scss/custom.scss';\n$partition-selector-search-input-bg: $gray-500;\n.iris-grid-partition-selector-search {\n .iris-grid-partition-selector-search-list {\n .item-list-scroll-pane {\n border: none;\n }\n }\n .iris-grid-partition-selector-search-empty {\n color: $text-muted;\n padding: $input-padding-y $input-btn-padding-x;\n text-align: center;\n }\n .iris-grid-partition-selector-loading {\n color: $text-muted;\n padding: $input-padding-y $input-btn-padding-x;\n text-align: center;\n }\n .search-container {\n padding: $tooltip-padding-y $tooltip-padding-x;\n .form-control {\n background-color: $partition-selector-search-input-bg;\n }\n }\n}\n","// Styling overrides for bootstrap\n@use 'sass:map';\n\n// Override / set color variables\n$red: var(--dh-color-visual-red);\n$orange: var(--dh-color-visual-orange);\n$yellow: var(--dh-color-visual-yellow);\n$green: var(--dh-color-visual-green);\n$blue: var(--dh-color-visual-blue);\n$purple: var(--dh-color-visual-purple);\n\n//Define our Gray scale\n$gray-100: var(--dh-color-gray-900, #fcfcfa);\n$gray-200: var(--dh-color-gray-800);\n$gray-300: var(--dh-color-gray-700);\n$gray-400: var(--dh-color-gray-600);\n$gray-500: var(--dh-color-gray-500);\n// intentional duplicate, scale doesn't line up otherwise\n// as we have gray-850 and spectrum doesn't and it is needed\n$gray-600: var(--dh-color-gray-500);\n$gray-700: var(--dh-color-gray-400);\n$gray-800: var(--dh-color-gray-300);\n$gray-850: var(--dh-color-gray-200);\n$gray-900: var(--dh-color-gray-75);\n$black: var(--dh-color-black, #1a171a);\n$white: var(--dh-color-white, #f0f0ee);\n\n//Define some UI colors\n$interfacegray: var(--dh-color-content-bg, #2d2a2e);\n$interfaceblue: var(--dh-color-accent-bg);\n$interfacewhite: $white;\n$interfaceblack: $black;\n$content-bg: var(--dh-color-content-bg, #2d2a2e);\n$background: var(--dh-color-bg);\n$foreground: var(--dh-color-fg);\n\n// Extend default Bootstrap $grays map\n$grays-custom: (\n '850': $gray-850,\n);\n$grays: () !default;\n$grays: map-merge($grays, $grays-custom);\n\n// Extend default Bootstrap $colors map\n$colors-custom: (\n 'black': $black,\n);\n$colors: () !default;\n$colors: map-merge($colors, $colors-custom);\n\n// Override default Bootstrap $theme-colors map by mapping each key to itself.\n// These will then be re-mapped inside of `button-outline-variant` and\n// `button-outline-variant` mixins in `bootstrap_override_mixins_buttons.scss`\n$theme-colors-self-map: ();\n@each $key\n in (\n 'primary',\n 'secondary',\n 'success',\n 'info',\n 'warning',\n 'danger',\n 'light',\n 'dark'\n )\n{\n $theme-colors-self-map: map.set($theme-colors-self-map, $key, $key);\n}\n$theme-colors: () !default;\n$theme-colors: map-merge($theme-colors, $theme-colors-self-map);\n\n// Used by bootstrap_override_mixins_buttons.scss to map Bootstrap colors to\n// DH semantic colors\n$bootstrap-dh-semantic-map: (\n 'primary': 'accent',\n 'secondary': 'neutral',\n 'success': 'positive',\n 'info': 'info',\n 'warning': 'notice',\n 'danger': 'negative',\n // We shouldn't be using these, but mapping so they work with our custom\n // `color-yiq` mixin. If we find a way to remove $light + $dark that are\n // defined in Bootstrap _variables.scss, we should remove these\n 'light': 'neutral',\n 'dark': 'neutral',\n);\n\n//Set default colors\n$body-bg: $black;\n$body-color: $interfacewhite;\n\n// Set brand colors\n$primary: var(--dh-color-accent-bg);\n$primary-hover: var(--dh-color-accent-hover-bg);\n$primary-dark: var(--dh-color-accent-down-bg);\n$primary-light: var(--dh-color-accent-1100);\n$secondary: var(--dh-color-neutral-bg);\n$secondary-hover: var(--dh-color-neutral-hover-bg);\n$success: $green;\n$info: $yellow;\n$warning: $orange;\n$danger: var(--dh-color-negative-bg);\n$danger-hover: var(--dh-color-negative-hover-bg);\n// We really don't want to use $light or $dark variables, but Bootstrap defines\n// them in _variables.scss. Explicitly setting them to ensure we are in control\n// of their values. If we can find a way to remove them, we should\n$light: var(--dh-color-gray-light);\n$dark: var(--dh-color-gray-dark);\n// Bootstrap doesn't define $mid, and we want to move away from this particular\n// semantic. Should be deleted by #1635\n$mid: var(--dh-color-gray-mid);\n\n$semantic-colors: (\n 'primary-hover': $primary-hover,\n 'primary-light': $primary-light,\n 'primary-dark': $primary-dark,\n 'mid': $mid,\n 'content-bg': $interfacegray,\n 'background': $interfaceblack,\n 'foreground': $interfacewhite,\n 'secondary-hover': $secondary-hover,\n 'danger-hover': $danger-hover,\n);\n\n$component-active-bg: $primary;\n$theme-color-interval: 9%;\n$yiq-contrasted-threshold: 180;\n\n// Override fonts\n$font-family-sans-serif:\n 'Fira Sans',\n -apple-system,\n blinkmacsystemfont,\n 'Segoe UI',\n 'Roboto',\n 'Helvetica Neue',\n arial,\n sans-serif; //fira sans then native system ui fallbacks\n$font-family-monospace: 'Fira Mono', menlo, monaco, consolas, 'Liberation Mono',\n 'Courier New', monospace;\n$font-family-base: $font-family-sans-serif;\n\n$headings-font-weight: 400;\n\n//Text overides\n$text-muted: $gray-400;\n\n//Style Selection highlight color\n$text-select-color: var(--dh-color-text-highlight);\n\n//Grid variables, same value as default just making easily accessible\n$grid-gutter-width: 30px;\n\n//Visual Overrides\n$border-radius: 4px;\n$box-shadow: 0 0.1rem 1rem var(--dh-color-dropshadow);\n\n//Override Btn\n$btn-border-radius: 4rem;\n$btn-padding-x: 1.5rem;\n$btn-transition:\n color 0.12s ease-in-out,\n background-color 0.12s ease-in-out,\n border-color 0.12s ease-in-out,\n box-shadow 0.12s ease-in-out; //default 0.15 is too long\n$btn-border-width: 2px;\n$btn-font-weight: var(--spectrum-global-font-weight-bold);\n$btn-line-height: 1.3;\n\n//Override Inputs\n$input-bg: var(--dh-color-input-bg);\n$input-disabled-bg: var(--dh-color-input-disabled-bg);\n$input-color: var(--dh-color-input-fg);\n$input-border-color: var(--dh-color-input-border);\n$input-placeholder-color: var(--dh-color-input-placeholder);\n$input-focus-border-color: var(--dh-color-input-focus-border);\n\n$input-btn-focus-width: 0.2rem;\n$input-btn-focus-color: hsla(var(--dh-color-accent-hsl), 0.35);\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color;\n$input-btn-line-height: 1.3;\n// Bootstrap uses a calc expression to determine the input height (calc(line-height + 2*padding-y + border)).\n// The padding-y value has to be in rem to match units. Using 0.4214rem with 1.3\n// line height gets us to 31.99px vs Spectrum's 32px.\n$input-btn-padding-y: 0.4214rem;\n\n//checkbox\n$custom-control-indicator-bg: var(--dh-color-input-bg);\n$custom-control-indicator-border-color: var(--dh-color-input-border);\n$custom-checkbox-indicator-border-radius: 2px;\n$custom-control-indicator-border-width: 2px;\n$custom-control-indicator-active-bg: var(--dh-color-input-bg);\n$custom-control-indicator-active-border-color: var(--dh-color-input-fg);\n$custom-control-indicator-checked-bg: var(--dh-color-input-fg);\n$custom-control-indicator-checked-color: black; // used as mask fill color\n$custom-checkbox-indicator-indeterminate-bg: var(--dh-color-input-fg);\n$custom-control-indicator-bg-size: 75% 75%;\n$custom-control-indicator-disabled-bg: var(--dh-color-input-disabled-bg);\n$custom-control-indicator-checked-disabled-bg: var(\n --dh-color-input-disabled-bg\n);\n$custom-control-label-disabled-color: var(--dh-color-input-disabled-fg);\n\n// The $custom-select-indicator variable is used by Bootstrap to provide the\n// icon for the select dropdown. Inline svgs can't use CSS variables, so we hard\n// code the color to #929192 (the default value of --dh-color-gray-600). PR #1651\n// overrides this icon altogether for known dropdowns, so technically we may not\n// need this, but it's here in case there are any remaining instances.\n$custom-select-indicator-color: #929192;\n$custom-select-bg: var(--dh-color-selector-bg);\n$custom-select-bg-size: 16px 16px;\n//dhSort icon encoded\n$custom-select-indicator: str-replace(\n url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='#{$custom-select-indicator-color}' d='M4 7l-.4-.8 4-3.7h.8l4 3.7-.4.8H4zm0 2l-.4.8 4 3.7h.8l4-3.7L12 9H4z'/%3E%3C/svg%3E\"),\n '#',\n '%23'\n);\n$custom-select-focus-box-shadow: $input-btn-focus-box-shadow;\n$custom-select-disabled-color: $gray-500;\n$custom-select-disabled-bg: $gray-800;\n\n//modal\n$modal-content-bg: $content-bg;\n$modal-content-border-width: 0;\n$modal-md: 550px;\n$close-color: var(--dh-color-text);\n$close-text-shadow: none;\n\n// Toast notification\n$toast-bg: var(--dh-color-accent-100);\n$toast-color: var(--dh-color-text);\n$toast-error-bg: var(--dh-color-negative-bg);\n$toast-error-color: var(--dh-color-text);\n\n//tooltips\n$tooltip-bg: var(--dh-color-tooltip-bg);\n$tooltip-color: var(--dh-color-tooltip-fg);\n$tooltip-box-shadow: 0 0.1rem 1.5rem 0.1rem var(--dh-color-tooltip-box-shadow);\n\n//drowdowns\n$dropdown-bg: $gray-600;\n$dropdown-link-color: $foreground;\n$dropdown-link-hover-color: $foreground;\n$dropdown-link-hover-bg: $primary;\n$dropdown-divider-bg: $gray-700;\n\n//context menus\n$contextmenu-bg: var(--dh-color-popover-bg);\n$contextmenu-color: var(--dh-color-text);\n$contextmenu-disabled-color: var(--dh-color-input-disabled-fg);\n$contextmenu-keyboard-selected-bg: var(--dh-color-keyboard-selected-bg);\n$contextmenu-selected-bg: var(--dh-color-item-list-hover-bg);\n$contextmenu-selected-color: var(--dh-color-item-list-selected-fg);\n\n//hr\n$hr-border-color: var(--dh-color-hr);\n\n//links\n$link-color: $gray-400;\n$link-hover-color: $foreground;\n\n//progress-bar\n$progress-bg: $gray-600;\n$progress-border-radius: 1rem;\n\n// Set global options\n$enable-shadows: false;\n$enable-gradients: false;\n$enable-print-styles: false; //I don't think anyone should expect to \"print\" this app.\n\n// Transition times\n$transition: 0.15s;\n$transition-mid: 0.2s;\n$transition-long: 0.3s;\n$transition-slow: 0.6s;\n\n//form-validation icon, uses vsWarning icon encoded here as svg\n$form-feedback-icon-invalid-color: $danger;\n$form-feedback-icon-invalid: str-replace(\n url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cg fill='none'%3E%3Cg fill='#{$form-feedback-icon-invalid-color}'%3E%3Cpath d='M7.56 1h.88l6.54 12.26-.44.74H1.44L1 13.26 7.56 1zM8 2.28 2.28 13H13.7L8 2.28zM8.625 12v-1h-1.25v1h1.25zm-1.25-2V6h1.25v4h-1.25z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E \"),\n '#',\n '%23'\n);\n\n// This section of variables is not consumed directly by DH, but they need to be\n// defined for sass to compile _variables\n$table-dark-bg: $gray-800;\n$table-dark-accent-bg: var(--dh-color-highlight-hover);\n$table-dark-hover-bg: var(--dh-color-highlight-active);\n$table-dark-border-color: $gray-700;\n$popover-bg: var(--dh-color-tooltip-bg);\n$popover-border-color: var(--dh-color-overlay-modal-bg);\n$popover-header-bg: #000;\n$popover-arrow-outer-color: var(--dh-color-dropshadow);\n$custom-range-thumb-active-bg: var(--dh-color-accent-1100);\n"]}
1
+ {"version":3,"sourceRoot":"","sources":["../../../node_modules/@deephaven/components/scss/custom.scss","../src/PartitionSelectorSearch.scss","../../../node_modules/@deephaven/components/scss/bootstrap_overrides.scss"],"names":[],"mappings":"AAAA;ACII;EACE;;AAGJ;EACE,OCSO;EDRP;EACA;;AAEF;EACE,OCIO;EDHP;EACA;;AAEF;EACE;;AACA;EACE,kBCFK","file":"PartitionSelectorSearch.css","sourcesContent":["/* stylelint-disable scss/at-import-no-partial-leading-underscore */\n// Consumers should be able to resolve bootstrap/ to node_modules/bootstrap\n\n//Make bootstrap functions available for use in overrides\n@import 'bootstrap/scss/_functions.scss';\n@import './bootstrap_overrides.scss';\n\n//_variable imports come after bootstrap default overrides,\n// makes all other variables and mixins from bootstrap available\n/// with just importing customer.scss\n@import 'bootstrap/scss/_variables.scss';\n@import 'bootstrap/scss/_mixins.scss';\n\n//New variables come after imports\n@import './new_variables.scss';\n","@import '@deephaven/components/scss/custom.scss';\n$partition-selector-search-input-bg: $gray-500;\n.iris-grid-partition-selector-search {\n .iris-grid-partition-selector-search-list {\n .item-list-scroll-pane {\n border: none;\n }\n }\n .iris-grid-partition-selector-search-empty {\n color: $text-muted;\n padding: $input-padding-y $input-btn-padding-x;\n text-align: center;\n }\n .iris-grid-partition-selector-loading {\n color: $text-muted;\n padding: $input-padding-y $input-btn-padding-x;\n text-align: center;\n }\n .search-container {\n padding: $tooltip-padding-y $tooltip-padding-x;\n .form-control {\n background-color: $partition-selector-search-input-bg;\n }\n }\n}\n","// Styling overrides for bootstrap\n@use 'sass:map';\n\n// Override / set color variables\n$red: var(--dh-color-visual-red);\n$orange: var(--dh-color-visual-orange);\n$yellow: var(--dh-color-visual-yellow);\n$green: var(--dh-color-visual-green);\n$blue: var(--dh-color-visual-blue);\n$purple: var(--dh-color-visual-purple);\n\n// Fallback colors are used if theme isn't loaded\n// this is required for error messages if the API doesn't load\n\n//Define our Gray scale\n$gray-100: var(--dh-color-gray-900, #fcfcfa);\n$gray-200: var(--dh-color-gray-800);\n$gray-300: var(--dh-color-gray-700);\n$gray-400: var(--dh-color-gray-600);\n$gray-500: var(--dh-color-gray-500);\n// intentional duplicate, scale doesn't line up otherwise\n// as we have gray-850 and spectrum doesn't and it is needed\n$gray-600: var(--dh-color-gray-500);\n$gray-700: var(--dh-color-gray-400);\n$gray-800: var(--dh-color-gray-300);\n$gray-850: var(--dh-color-gray-200);\n$gray-900: var(--dh-color-gray-75);\n$black: var(--dh-color-black, #1a171a);\n$white: var(--dh-color-white, #f0f0ee);\n\n//Define some UI colors\n$interfacegray: var(--dh-color-content-bg, #2d2a2e);\n$interfaceblue: var(--dh-color-accent-bg);\n$interfacewhite: $white;\n$interfaceblack: $black;\n$content-bg: var(--dh-color-content-bg, #2d2a2e);\n$background: var(--dh-color-bg, #1a171a);\n$foreground: var(--dh-color-fg, #f0f0ee);\n\n// Extend default Bootstrap $grays map\n$grays-custom: (\n '850': $gray-850,\n);\n$grays: () !default;\n$grays: map-merge($grays, $grays-custom);\n\n// Extend default Bootstrap $colors map\n$colors-custom: (\n 'black': $black,\n);\n$colors: () !default;\n$colors: map-merge($colors, $colors-custom);\n\n// Override default Bootstrap $theme-colors map by mapping each key to itself.\n// These will then be re-mapped inside of `button-outline-variant` and\n// `button-outline-variant` mixins in `bootstrap_override_mixins_buttons.scss`\n$theme-colors-self-map: ();\n@each $key\n in (\n 'primary',\n 'secondary',\n 'success',\n 'info',\n 'warning',\n 'danger',\n 'light',\n 'dark'\n )\n{\n $theme-colors-self-map: map.set($theme-colors-self-map, $key, $key);\n}\n$theme-colors: () !default;\n$theme-colors: map-merge($theme-colors, $theme-colors-self-map);\n\n// Used by bootstrap_override_mixins_buttons.scss to map Bootstrap colors to\n// DH semantic colors\n$bootstrap-dh-semantic-map: (\n 'primary': 'accent',\n 'secondary': 'neutral',\n 'success': 'positive',\n 'info': 'info',\n 'warning': 'notice',\n 'danger': 'negative',\n // We shouldn't be using these, but mapping so they work with our custom\n // `color-yiq` mixin. If we find a way to remove $light + $dark that are\n // defined in Bootstrap _variables.scss, we should remove these\n 'light': 'neutral',\n 'dark': 'neutral',\n);\n\n//Set default colors\n$body-bg: $black;\n$body-color: $interfacewhite;\n\n// Set brand colors\n$primary: var(--dh-color-accent-bg);\n$primary-hover: var(--dh-color-accent-hover-bg);\n$primary-dark: var(--dh-color-accent-down-bg);\n$secondary: var(--dh-color-neutral-bg);\n$secondary-hover: var(--dh-color-neutral-hover-bg);\n$success: $green;\n$info: $yellow;\n$warning: $orange;\n$danger: var(--dh-color-negative-bg);\n$danger-hover: var(--dh-color-negative-hover-bg);\n// We really don't want to use $light or $dark variables, but Bootstrap defines\n// them in _variables.scss. Explicitly setting them to ensure we are in control\n// of their values. If we can find a way to remove them, we should\n$light: var(--dh-color-gray-light);\n$dark: var(--dh-color-gray-dark);\n// Bootstrap doesn't define $mid, and we want to move away from this particular\n// semantic. Should be deleted by #1635\n$mid: var(--dh-color-gray-mid);\n\n$semantic-colors: (\n 'primary-hover': $primary-hover,\n 'primary-dark': $primary-dark,\n 'mid': $mid,\n 'content-bg': $interfacegray,\n 'background': $interfaceblack,\n 'foreground': $interfacewhite,\n 'secondary-hover': $secondary-hover,\n 'danger-hover': $danger-hover,\n);\n\n$component-active-bg: $primary;\n$theme-color-interval: 9%;\n$yiq-contrasted-threshold: 180;\n\n// Override fonts\n$font-family-sans-serif:\n 'Fira Sans',\n -apple-system,\n blinkmacsystemfont,\n 'Segoe UI',\n 'Roboto',\n 'Helvetica Neue',\n arial,\n sans-serif; //fira sans then native system ui fallbacks\n$font-family-monospace: 'Fira Mono', menlo, monaco, consolas, 'Liberation Mono',\n 'Courier New', monospace;\n$font-family-base: $font-family-sans-serif;\n\n$headings-font-weight: 400;\n\n//Text overides\n$text-muted: $gray-400;\n\n//Style Selection highlight color\n$text-select-color: var(--dh-color-text-highlight);\n\n//Grid variables, same value as default just making easily accessible\n$grid-gutter-width: 30px;\n\n//Visual Overrides\n$border-radius: 4px;\n$box-shadow: 0 0.1rem 1rem var(--dh-color-dropshadow);\n\n//Override Btn\n$btn-border-radius: 4rem;\n$btn-padding-x: 1.5rem;\n$btn-transition:\n color 0.12s ease-in-out,\n background-color 0.12s ease-in-out,\n border-color 0.12s ease-in-out,\n box-shadow 0.12s ease-in-out; //default 0.15 is too long\n$btn-border-width: 2px;\n$btn-font-weight: var(--spectrum-global-font-weight-bold);\n$btn-line-height: 1.3;\n\n//Override Inputs\n$input-bg: var(--dh-color-input-bg);\n$input-disabled-bg: var(--dh-color-input-disabled-bg);\n$input-color: var(--dh-color-input-fg);\n$input-border-color: var(--dh-color-input-border);\n$input-placeholder-color: var(--dh-color-input-placeholder);\n$input-focus-border-color: var(--dh-color-input-focus-border);\n\n$input-btn-focus-width: 0.2rem;\n$input-btn-focus-color: hsla(var(--dh-color-accent-hsl), 0.35);\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color;\n$input-btn-line-height: 1.3;\n// Bootstrap uses a calc expression to determine the input height (calc(line-height + 2*padding-y + border)).\n// The padding-y value has to be in rem to match units as it is a SASS calc.\n// Using 0.42145rem with 1.3 line height gets us to spectrum's 32px.\n$input-btn-padding-y: 0.42145rem;\n\n//checkbox\n$custom-control-indicator-bg: var(--dh-color-input-bg);\n$custom-control-indicator-border-color: var(--dh-color-input-border);\n$custom-checkbox-indicator-border-radius: 2px;\n$custom-control-indicator-border-width: 2px;\n$custom-control-indicator-active-bg: var(--dh-color-input-bg);\n$custom-control-indicator-active-border-color: var(--dh-color-input-fg);\n$custom-control-indicator-checked-bg: var(--dh-color-input-fg);\n$custom-control-indicator-checked-color: black; // used as mask fill color\n$custom-checkbox-indicator-indeterminate-bg: var(--dh-color-input-fg);\n$custom-control-indicator-bg-size: 75% 75%;\n$custom-control-indicator-disabled-bg: var(--dh-color-input-disabled-bg);\n$custom-control-indicator-checked-disabled-bg: var(\n --dh-color-input-disabled-bg\n);\n$custom-control-label-disabled-color: var(--dh-color-input-disabled-fg);\n\n// The $custom-select-indicator variable is used by Bootstrap to provide the\n// icon for the select dropdown. Inline svgs can't use CSS variables, so we hard\n// code the color to #929192 (the default value of --dh-color-gray-600). PR #1651\n// overrides this icon altogether for known dropdowns, so technically we may not\n// need this, but it's here in case there are any remaining instances.\n$custom-select-indicator-color: #929192;\n$custom-select-bg: var(--dh-color-selector-bg);\n$custom-select-bg-size: 16px 16px;\n//dhSort icon encoded\n$custom-select-indicator: str-replace(\n url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='#{$custom-select-indicator-color}' d='M4 7l-.4-.8 4-3.7h.8l4 3.7-.4.8H4zm0 2l-.4.8 4 3.7h.8l4-3.7L12 9H4z'/%3E%3C/svg%3E\"),\n '#',\n '%23'\n);\n$custom-select-focus-box-shadow: $input-btn-focus-box-shadow;\n$custom-select-disabled-color: $gray-500;\n$custom-select-disabled-bg: $gray-800;\n\n//modal\n$modal-content-bg: $content-bg;\n$modal-content-border-width: 0;\n$modal-md: 550px;\n$close-color: var(--dh-color-text);\n$close-text-shadow: none;\n\n// Toast notification\n$toast-bg: var(--dh-color-accent-100);\n$toast-color: var(--dh-color-text);\n$toast-error-bg: var(--dh-color-negative-bg);\n$toast-error-color: var(--dh-color-text);\n\n//tooltips\n$tooltip-bg: var(--dh-color-tooltip-bg);\n$tooltip-color: var(--dh-color-tooltip-fg);\n$tooltip-box-shadow: 0 0.1rem 1.5rem 0.1rem var(--dh-color-tooltip-box-shadow);\n\n//drowdowns\n$dropdown-bg: $gray-600;\n$dropdown-link-color: $foreground;\n$dropdown-link-hover-color: $foreground;\n$dropdown-link-hover-bg: $primary;\n$dropdown-divider-bg: $gray-700;\n\n//context menus\n$contextmenu-bg: var(--dh-color-popover-bg);\n$contextmenu-color: var(--dh-color-text);\n$contextmenu-disabled-color: var(--dh-color-input-disabled-fg);\n$contextmenu-keyboard-selected-bg: var(--dh-color-keyboard-selected-bg);\n$contextmenu-selected-bg: var(--dh-color-item-list-hover-bg);\n$contextmenu-selected-color: var(--dh-color-item-list-selected-fg);\n\n//hr\n$hr-border-color: var(--dh-color-hr);\n\n//links\n$link-color: $gray-400;\n$link-hover-color: $foreground;\n\n//progress-bar\n$progress-bg: $gray-600;\n$progress-border-radius: 1rem;\n\n// Set global options\n$enable-shadows: false;\n$enable-gradients: false;\n$enable-print-styles: false; //I don't think anyone should expect to \"print\" this app.\n\n// Transition times\n$transition: 0.15s;\n$transition-mid: 0.2s;\n$transition-long: 0.3s;\n$transition-slow: 0.6s;\n\n//form-validation icon, uses vsWarning icon encoded here as svg\n$form-feedback-icon-invalid-color: $danger;\n$form-feedback-icon-invalid: str-replace(\n url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cg fill='none'%3E%3Cg fill='#{$form-feedback-icon-invalid-color}'%3E%3Cpath d='M7.56 1h.88l6.54 12.26-.44.74H1.44L1 13.26 7.56 1zM8 2.28 2.28 13H13.7L8 2.28zM8.625 12v-1h-1.25v1h1.25zm-1.25-2V6h1.25v4h-1.25z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E \"),\n '#',\n '%23'\n);\n\n// This section of variables is not consumed directly by DH, but they need to be\n// defined for sass to compile _variables\n$table-dark-bg: $gray-800;\n$table-dark-accent-bg: var(--dh-color-highlight-hover);\n$table-dark-hover-bg: var(--dh-color-highlight-active);\n$table-dark-border-color: $gray-700;\n$popover-bg: var(--dh-color-tooltip-bg);\n$popover-border-color: var(--dh-color-overlay-modal-bg);\n$popover-header-bg: #000;\n$popover-arrow-outer-color: var(--dh-color-dropshadow);\n$custom-range-thumb-active-bg: var(--dh-color-accent-1100);\n"]}
@@ -4,7 +4,7 @@
4
4
  border: none;
5
5
  display: flex;
6
6
  width: 100%;
7
- padding: 0.4214rem 0.75rem;
7
+ padding: 0.42145rem 0.75rem;
8
8
  white-space: nowrap;
9
9
  text-decoration: none;
10
10
  background-color: transparent;
@@ -3,7 +3,7 @@
3
3
  user-select: none;
4
4
  background: var(--dh-color-surface-bg);
5
5
  border-radius: 4px 4px 0 0;
6
- padding: 0.4214rem 2rem;
6
+ padding: 0.42145rem 2rem;
7
7
  text-overflow: ellipsis;
8
8
  overflow: hidden;
9
9
  }