@deephaven/iris-grid 0.22.3-beta.0 → 0.22.3-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AdvancedFilterCreator.css.map +1 -1
- package/dist/AdvancedFilterCreatorFilterItem.css.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.css.map +1 -1
- package/dist/ColumnStatistics.css.map +1 -1
- package/dist/FilterInputField.css.map +1 -1
- package/dist/GotoRow.css.map +1 -1
- package/dist/IrisGrid.css.map +1 -1
- package/dist/IrisGrid.d.ts.map +1 -1
- package/dist/IrisGrid.js +20 -9
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridBottomBar.css.map +1 -1
- package/dist/IrisGridCopyHandler.css.map +1 -1
- package/dist/IrisGridPartitionSelector.css.map +1 -1
- package/dist/IrisGridTableModelTemplate.d.ts +1 -1
- package/dist/IrisGridTableModelTemplate.d.ts.map +1 -1
- package/dist/IrisGridTableModelTemplate.js +3 -2
- package/dist/IrisGridTableModelTemplate.js.map +1 -1
- package/dist/IrisGridTheme.module.css.map +1 -1
- package/dist/PartitionSelectorSearch.css.map +1 -1
- package/dist/PendingDataBottomBar.css.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.css.map +1 -1
- package/dist/sidebar/ChartBuilder.css.map +1 -1
- package/dist/sidebar/CustomColumnBuilder.css.map +1 -1
- package/dist/sidebar/InputEditor.css.map +1 -1
- package/dist/sidebar/RollupRows.css.map +1 -1
- package/dist/sidebar/SelectDistinctBuilder.css.map +1 -1
- package/dist/sidebar/TableCsvExporter.css.map +1 -1
- package/dist/sidebar/VisibilityOrderingBuilder.css.map +1 -1
- package/dist/sidebar/aggregations/AggregationEdit.css.map +1 -1
- package/dist/sidebar/aggregations/Aggregations.css.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.css.map +1 -1
- package/dist/sidebar/conditional-formatting/StyleEditor.css.map +1 -1
- package/package.json +15 -15
package/dist/IrisGrid.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGrid.js","names":["React","Component","memoize","classNames","CSSTransition","PropTypes","deepEqual","Log","FontAwesomeIcon","ContextActionUtils","ContextActions","Stack","Menu","Page","Popper","ThemeExport","Tooltip","Button","Grid","GridRange","GridUtils","isEditableGridModel","isExpandableGridModel","dhEye","dhFilterFilled","dhGraphLineUp","dhTriangleDownSquare","vsClose","vsCloudDownload","vsEdit","vsFilter","vsMenu","vsReply","vsRuby","vsSearch","vsSplitHorizontal","vsSymbolOperator","vsTools","dh","DateUtils","Formatter","FormatterUtils","TableUtils","assertNotNull","Pending","PromiseUtils","ValidationError","throttle","debounce","clamp","getFormatColumns","PendingDataBottomBar","IrisGridCopyHandler","FilterInputField","ClearFilterKeyHandler","CopyKeyHandler","ReverseKeyHandler","IrisGridCellOverflowMouseHandler","IrisGridColumnSelectMouseHandler","IrisGridColumnTooltipMouseHandler","IrisGridContextMenuHandler","IrisGridDataSelectMouseHandler","IrisGridFilterMouseHandler","IrisGridSortMouseHandler","PendingMouseHandler","ToastBottomBar","IrisGridMetricCalculator","IrisGridModelUpdater","IrisGridRenderer","IrisGridTheme","ColumnStatistics","AdvancedFilterCreator","Aggregations","AggregationEdit","AggregationUtils","ChartBuilder","CustomColumnBuilder","OptionType","RollupRows","TableCsvExporter","TableSaver","VisibilityOrderingBuilder","IrisGridUtils","CrossColumnSearch","IrisGridModel","IrisGridPartitionSelector","SelectDistinctBuilder","AdvancedSettingsType","AdvancedSettingsMenu","SHORTCUTS","ConditionalFormattingMenu","ConditionalFormatEditor","IrisGridCellOverflowModal","GotoRow","log","module","UPDATE_DOWNLOAD_THROTTLE","SET_FILTER_DEBOUNCE","SET_CONDITIONAL_FORMAT_DEBOUNCE","DEFAULT_AGGREGATION_SETTINGS","Object","freeze","aggregations","showOnTop","isEmptyConfig","advancedFilters","aggregationSettings","customColumns","quickFilters","reverseType","rollupConfig","searchFilter","selectDistinctColumns","sorts","size","length","REVERSE_TYPE","NONE","IrisGrid","makeQuickFilter","column","text","timeZone","err","error","constructor","props","handleAdvancedMenuOpened","bind","max","model","advancedFilterOptions","sortDirection","formatter","handleAdvancedFilterChange","handleAdvancedFilterSortChange","handleAdvancedFilterDone","isChartBuilderAvailable","isCustomColumnsAvailable","isFormatColumnsAvailable","isRollupAvailable","isTotalsAvailable","isSelectDistinctAvailable","isExportAvailable","toggleFilterBarAction","toggleSearchBarAction","toggleGotoRowAction","isFilterBarShown","showSearchBar","canDownloadCsv","canToggleSearch","showGotoRow","hasAdvancedSettings","optionItems","push","type","CHART_BUILDER","title","icon","VISIBILITY_ORDERING_BUILDER","CONDITIONAL_FORMATTING","CUSTOM_COLUMN_BUILDER","ROLLUP_ROWS","AGGREGATIONS","SELECT_DISTINCT","TABLE_EXPORTER","ADVANCED_SETTINGS","QUICK_FILTERS","subtitle","shortcut","getDisplayText","isOn","onChange","action","SEARCH_BAR","GOTO","hiddenColumns","normalizer","join","columns","aggregationMap","forEach","operation","selected","invert","getOperationColumnNames","operationMap","filter","a","isRollupOperation","name","newOperations","map","o","rules","rulesParam","preview","editIndex","debug","undefined","getCachedFormatColumns","originalColumns","config","getModelRollupConfig","getOperationMap","operationOrder","getOperationOrder","hoverSelectColumn","isSelectingColumn","loadingScrimProgress","isMenuShown","customFilters","partitionFilters","getFiltersFromFilterMap","theme","isEditable","floatingRowCount","autoSelectRow","rowFooterWidth","alwaysFetchColumns","movedColumns","floatingLeftColumnCount","floatingRightColumnCount","draggingRange","floatingColumns","i","getModelIndex","columnSet","Set","searchValue","selectedSearchColumns","invertSearchColumns","createSearchFilter","setState","conditionalFormatPreview","tableDownloadProgress","tableDownloadEstimatedTime","tableDownloadStatus","state","DOWNLOAD_STATUS","DOWNLOADING","overflowButtonTooltipProps","wrapperStyle","position","pointerEvents","popperOptions","placement","modifiers","flip","behavior","Date","now","handleTooltipRef","handleGotoRowOpened","handleGotoRowClosed","handleAdvancedMenuClosed","handleAggregationChange","handleAggregationsChange","handleAggregationEdit","handleAnimationLoop","handleAnimationStart","handleAnimationEnd","handleChartChange","handleChartCreate","handleGridError","handleFilterBarChange","handleFilterBarDone","handleFilterBarTab","handleCancel","handleMenu","handleMenuClose","handleMenuSelect","handleMenuBack","handleRequestFailed","handleSelectionChanged","handleMovedColumnsChanged","handleUpdate","handleViewChanged","handleFormatSelection","handleConditionalFormatCreate","handleConditionalFormatEdit","handleConditionalFormatsChange","handleConditionalFormatEditorSave","handleConditionalFormatEditorCancel","handleUpdateCustomColumns","handleCustomColumnsChanged","handleSelectDistinctChanged","handlePendingDataUpdated","handlePendingCommitClicked","handlePendingDiscardClicked","handleGotoRowSelectedRowNumberSubmit","focusRowInGrid","handleDownloadTable","handleDownloadTableStart","handleCancelDownloadTable","handleDownloadCanceled","handleDownloadCompleted","handlePartitionAppend","handlePartitionChange","handlePartitionFetchAll","handlePartitionDone","handleColumnVisibilityChanged","handleCrossColumnSearch","handleRollupChange","handleOverflowClose","getColumnBoundingRect","handleGotoRowSelectedRowNumberChanged","grid","gridWrapper","lastLoadedConfig","pending","globalColumnFormats","decimalFormatOptions","integerFormatOptions","truncateNumbersWithPound","renderer","tableSaver","crossColumnRef","createRef","isAnimating","filterInputRef","toggleFilterBar","TABLE","TOGGLE_QUICK_FILTER","toggleSearchBar","TOGGLE_SEARCH","toggleGotoRow","GOTO_ROW","discardAction","pendingDataMap","discardPending","catch","INPUT_TABLE","DISCARD","commitAction","pendingDataErrors","commitPending","COMMIT","contextActions","conditionalFormats","customColumnFormatMap","isSelectingPartition","movedColumnsProp","movedRows","movedRowsProp","partition","partitionColumn","userColumnWidths","userRowHeights","canCopy","frozenColumns","keyHandlers","mouseHandlers","metricCalculator","Map","searchColumns","focusedFilterBarColumn","metrics","partitionTable","shownAdvancedFilter","hoverAdvancedFilter","selectedRanges","copyOperation","loadingText","loadingSpinnerShown","shownColumnTooltip","conditionalFormatEditIndex","isTableDownloading","isReady","rollupSelectedColumns","selectedAggregation","openOptions","pendingRowCount","pendingSavePromise","pendingSaveError","toastMessage","showOverflowModal","overflowText","isGotoRowShown","gotoRow","gotoRowError","componentDidMount","find","c","isPartitionColumn","isFilterRequired","isValuesTableAvailable","loadPartitionsTable","initState","startListening","componentDidUpdate","prevProps","inputFilters","settings","stopListening","changedInputFilters","inputFilter","includes","advancedSettings","replaceExistingFilters","get","FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS","clearGridInputField","clearCrossColumSearch","startLoading","applyInputFilters","resetColumnSelection","updateFormatterSettings","updateSorts","loadingScrimStartTime","loadingScrimFinishTime","window","requestAnimationFrame","currentTime","totalTime","Math","min","debug2","sendStateChange","componentWillUnmount","cancel","updateSearchFilter","loadingTimer","clearTimeout","handleDownloadProgressUpdate","animationFrame","cancelAnimationFrame","getValueForCell","columnIndex","rowIndex","rawValue","modelColumn","getModelColumn","modelRow","getModelRow","valueForCell","textForCell","modelColumns","modelRows","getTheme","getCachedTheme","floatingTopRowCount","floatingBottomRowCount","getVisibleColumn","modelIndex","getVisibleIndex","replaceExisting","newAdvancedFilters","newQuickFilters","isChanged","value","findIndex","columnName","columnType","delete","applyQuickFilter","trim","quickFilter","set","setAdvancedFilterMap","setAdvancedFilter","options","setQuickFilter","setFilterMap","filterMap","clearFiltersOnLinkerFilterUpdate","LINK_CHANGE_CLEARS_ALL_FILTERS","clearAllFilters","getColumnIndexByName","removeQuickFilter","isNull","filterValue","isTextType","FilterValue","ofString","ofNumber","eq","removeColumnFilter","current","setValue","rebuildFilters","key","makeAdvancedFilter","setFilters","forceUpdate","getColumnFormats","dateTimeFormatterOptions","getDateTimeFormatterOptions","defaultDecimalFormatOptions","defaultIntegerFormatOptions","isColumnFormatChanged","isDateFormattingChanged","isDecimalFormattingChanged","isIntegerFormattingChanged","isTruncateNumbersChanged","updateFormatter","updatedFormats","update","mergedColumnFormats","values","initFormatter","applyInputFiltersOnInit","inputFiltersWithValues","add","valuesTable","resolved","close","sort","desc","applySort","setViewport","data","getViewportData","rows","row","updatePartition","info","handleTableLoadError","partitionFilter","copyCell","String","copyToClipboard","e","copyRanges","ranges","includeHeaders","formatValues","getUserColumnWidths","boundedRanges","columnCount","rowCount","resetRanges","clearSelectedRanges","setViewState","top","minScrimTransitionTime","maxScrimTransitionTime","height","getBoundingClientRect","scrimTransitionTime","setTimeout","loadingSpinnerDelay","stopLoading","rollback","canRollback","addEventListener","EVENT","UPDATED","REQUEST_FAILED","COLUMNS_CHANGED","PENDING_DATA_UPDATED","removeEventListener","focus","focusFilterBar","isFilterable","left","rightVisible","lastLeft","metricState","getMetricState","newLeft","getLastLeft","leftOffset","lastFocusedFilterBarColumn","hideColumnByVisibleIndex","columnVisibleIndex","setColumnWidth","freezeColumnByColumnName","allFrozenColumns","visibleIndex","newMovedColumns","moveItem","unFreezeColumnByColumnName","frontColumns","modelIndexes","visibilityOption","VISIBILITY_OPTIONS","SHOW","resetColumnWidth","updateCanvasScale","updateCanvas","onPartitionAppend","isCanceled","onError","showAllColumns","entries","columnWidth","toggleSort","addToExisting","currentSorts","toggleSortForColumn","sortColumn","direction","none","isAbs","reverse","isReversible","focusIndex","isTableSearchAvailable","searchDisplayMode","layoutHints","SearchDisplayMode","SEARCH_DISPLAY_HIDE","SEARCH_DISPLAY_SHOW","Error","containsGridCellInputField","document","activeElement","classList","contains","newPendingSavePromise","then","selectColumn","onColumnSelected","selectData","groupedColumns","dataMap","isExpandable","isRowExpandable","isGrouped","onDataSelected","index","oldSort","getSortForColumn","newSort","descending","asc","setSortForColumn","onCreateChart","warn","setGridFocus","defocusInput","backward","selectedFormat","prevCustomColumnFormatMap","normalizedType","getNormalizedType","columnFormattingRule","makeColumnFormattingRule","stopPropagation","newOptions","pop","option","event","customEvent","detail","selectionEndRow","bottomViewport","bottomNonFloating","onSelectionChanged","onChangeApplied","tooltip","startTimer","CONDITIONAL_FORMATTING_EDIT","oldCustomColumns","customColumn","removedColumnNames","getRemovedCustomColumnNames","newSorts","removeSortsInColumns","removeFiltersInColumns","removeColumnFromMovedColumns","newSelectDistinctColumns","removeColumnsFromSelectDistinctColumns","aggregation","AGGREGATION_EDIT","resetGridViewState","columnNames","INITIATING","fileName","frozenTable","tableSubscription","gridRanges","startDownload","cancelDownload","FINISHED","CANCELED","deleteRanges","columnAllowedCursor","cursor","topOffset","irisGridState","gridState","onStateChange","gridRect","popperMargin","columnHeaderHeight","visibleColumnXs","visibleColumnWidths","width","columnHeaderMaxDepth","columnX","bottom","right","x","y","toJSON","rowNumber","rowInt","parseInt","setFocusRow","target","getColumnTooltip","boundedLeft","boundedWidth","abs","virtualReference","clientWidth","clientHeight","render","children","getDownloadWorker","isStuckToBottom","isStuckToRight","onlyFetchVisibleColumns","onAdvancedSettingsChange","getCachedFilter","stateOverride","getCachedStateOverride","isVisible","isRollup","focusField","debounceMs","minDebounce","round","maxDebounce","gridX","gridY","filterBarHeight","fieldWidth","fieldHeight","style","minWidth","isValid","advancedFilter","isBarFiltered","active","handleContextMenu","loadingElement","loadingStatus","show","columnTooltip","filterBar","visibleColumns","isFilterSet","isFilterVisible","element","hidden","advancedFilterMenus","xColumnHeader","xFilterBar","getAdvancedMenuOpenedHandler","positionFixed","getCachedAdvancedFilterMenuActions","getCachedOptionItems","openOptionsStack","handleConditionalFormatEditorUpdate","getCachedHiddenColumns","getHiddenColumns","transitionSlowMs","stringName","displayString","getAlwaysFetchColumns","draggingColumn","range","getCachedPreviewFormatColumns","getCachedModelColumns","getModelTotalsConfig","getOverflowButtonTooltip","transitionMidMs","columnSelectionValidator","columnNotAllowedCursor","onContextMenu","defaultDateTimeFormat","FULL_DATE_FORMAT","showTimeZone","showTSeparator","shape","defaultFormatString","string"],"sources":["../src/IrisGrid.tsx"],"sourcesContent":["import React, {\n ChangeEvent,\n Component,\n CSSProperties,\n ReactElement,\n ReactNode,\n} from 'react';\nimport memoize from 'memoizee';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport PropTypes from 'prop-types';\nimport deepEqual from 'deep-equal';\nimport Log from '@deephaven/log';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n ContextActionUtils,\n ContextActions,\n Stack,\n Menu,\n Page,\n Popper,\n ThemeExport,\n Tooltip,\n ContextAction,\n PopperOptions,\n ReferenceObject,\n Button,\n} from '@deephaven/components';\nimport {\n Grid,\n GridMetrics,\n GridMouseHandler,\n GridRange,\n GridRangeIndex,\n GridThemeType,\n GridUtils,\n KeyHandler,\n ModelIndex,\n ModelSizeMap,\n MoveOperation,\n VisibleIndex,\n GridState,\n isEditableGridModel,\n BoundedAxisRange,\n isExpandableGridModel,\n} from '@deephaven/grid';\nimport {\n dhEye,\n dhFilterFilled,\n dhGraphLineUp,\n dhTriangleDownSquare,\n vsClose,\n vsCloudDownload,\n vsEdit,\n vsFilter,\n vsMenu,\n vsReply,\n vsRuby,\n vsSearch,\n vsSplitHorizontal,\n vsSymbolOperator,\n vsTools,\n} from '@deephaven/icons';\nimport dh, {\n Column,\n CustomColumn,\n FilterCondition,\n Sort,\n Table,\n TableViewportSubscription,\n} from '@deephaven/jsapi-shim';\nimport {\n DateUtils,\n Formatter,\n FormatterUtils,\n TableUtils,\n FormattingRule,\n ReverseType,\n RowDataMap,\n SortDirection,\n DateTimeColumnFormatterOptions,\n TableColumnFormat,\n Settings,\n} from '@deephaven/jsapi-utils';\nimport {\n assertNotNull,\n Pending,\n PromiseUtils,\n ValidationError,\n} from '@deephaven/utils';\nimport throttle from 'lodash.throttle';\nimport debounce from 'lodash.debounce';\nimport clamp from 'lodash.clamp';\nimport {\n FormattingRule as SidebarFormattingRule,\n getFormatColumns,\n} from './sidebar/conditional-formatting/ConditionalFormattingUtils';\nimport PendingDataBottomBar from './PendingDataBottomBar';\nimport IrisGridCopyHandler, { CopyOperation } from './IrisGridCopyHandler';\nimport FilterInputField from './FilterInputField';\nimport {\n ClearFilterKeyHandler,\n CopyKeyHandler,\n ReverseKeyHandler,\n} from './key-handlers';\nimport {\n IrisGridCellOverflowMouseHandler,\n IrisGridColumnSelectMouseHandler,\n IrisGridColumnTooltipMouseHandler,\n IrisGridContextMenuHandler,\n IrisGridDataSelectMouseHandler,\n IrisGridFilterMouseHandler,\n IrisGridSortMouseHandler,\n PendingMouseHandler,\n} from './mousehandlers';\nimport ToastBottomBar from './ToastBottomBar';\nimport IrisGridMetricCalculator from './IrisGridMetricCalculator';\nimport IrisGridModelUpdater from './IrisGridModelUpdater';\nimport IrisGridRenderer from './IrisGridRenderer';\nimport IrisGridTheme, { IrisGridThemeType } from './IrisGridTheme';\nimport ColumnStatistics from './ColumnStatistics';\nimport './IrisGrid.scss';\nimport AdvancedFilterCreator from './AdvancedFilterCreator';\nimport {\n Aggregations,\n AggregationEdit,\n AggregationUtils,\n ChartBuilder,\n CustomColumnBuilder,\n OptionType,\n RollupRows,\n TableCsvExporter,\n TableSaver,\n VisibilityOrderingBuilder,\n} from './sidebar';\nimport IrisGridUtils from './IrisGridUtils';\nimport CrossColumnSearch from './CrossColumnSearch';\nimport IrisGridModel from './IrisGridModel';\nimport IrisGridPartitionSelector from './IrisGridPartitionSelector';\nimport SelectDistinctBuilder from './sidebar/SelectDistinctBuilder';\nimport AdvancedSettingsType from './sidebar/AdvancedSettingsType';\nimport AdvancedSettingsMenu, {\n AdvancedSettingsMenuCallback,\n} from './sidebar/AdvancedSettingsMenu';\nimport SHORTCUTS from './IrisGridShortcuts';\nimport ConditionalFormattingMenu from './sidebar/conditional-formatting/ConditionalFormattingMenu';\n\nimport ConditionalFormatEditor from './sidebar/conditional-formatting/ConditionalFormatEditor';\nimport IrisGridCellOverflowModal from './IrisGridCellOverflowModal';\nimport GotoRow from './GotoRow';\nimport {\n Aggregation,\n AggregationSettings,\n} from './sidebar/aggregations/Aggregations';\nimport { ChartBuilderSettings } from './sidebar/ChartBuilder';\nimport AggregationOperation from './sidebar/aggregations/AggregationOperation';\nimport { UIRollupConfig } from './sidebar/RollupRows';\nimport { VisibilityOptionType } from './sidebar/VisibilityOrderingBuilder';\nimport {\n AdvancedFilterMap,\n ColumnName,\n QuickFilterMap,\n AggregationMap,\n OperationMap,\n Action,\n OptionItem,\n UITotalsTableConfig,\n InputFilter,\n PendingDataMap,\n AdvancedFilterOptions,\n} from './CommonTypes';\n\nconst log = Log.module('IrisGrid');\n\nconst UPDATE_DOWNLOAD_THROTTLE = 500;\n\nconst SET_FILTER_DEBOUNCE = 250;\n\nconst SET_CONDITIONAL_FORMAT_DEBOUNCE = 250;\n\nconst DEFAULT_AGGREGATION_SETTINGS = Object.freeze({\n aggregations: [],\n showOnTop: false,\n});\n\nfunction isEmptyConfig({\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverseType,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts,\n}: {\n advancedFilters: AdvancedFilterMap;\n aggregationSettings: AggregationSettings;\n customColumns: ColumnName[];\n quickFilters: QuickFilterMap;\n reverseType: ReverseType;\n rollupConfig?: UIRollupConfig;\n searchFilter?: FilterCondition;\n selectDistinctColumns: ColumnName[];\n sorts: Sort[];\n}) {\n return (\n advancedFilters.size === 0 &&\n aggregationSettings.aggregations.length === 0 &&\n customColumns.length === 0 &&\n quickFilters.size === 0 &&\n reverseType === TableUtils.REVERSE_TYPE.NONE &&\n rollupConfig == null &&\n searchFilter == null &&\n selectDistinctColumns.length === 0 &&\n sorts.length === 0\n );\n}\n\nexport type FilterMap = Map<\n ColumnName,\n { columnType: string; text: string; value: unknown }\n>;\nexport interface IrisGridProps {\n children: React.ReactNode;\n advancedFilters: AdvancedFilterMap;\n advancedSettings: Map<AdvancedSettingsType, boolean>;\n alwaysFetchColumns: ColumnName[];\n isFilterBarShown: boolean;\n applyInputFiltersOnInit: boolean;\n conditionalFormats: SidebarFormattingRule[];\n customColumnFormatMap: Map<ColumnName, FormattingRule>;\n movedColumns: MoveOperation[];\n movedRows: MoveOperation[];\n inputFilters: InputFilter[];\n customFilters: FilterCondition[];\n model: IrisGridModel;\n onCreateChart: (settings: ChartBuilderSettings, model: IrisGridModel) => void;\n onColumnSelected: (column: Column) => void;\n onError: (error: unknown) => void;\n onDataSelected: (index: ModelIndex, map: Record<ColumnName, unknown>) => void;\n onStateChange: (irisGridState: IrisGridState, gridState: GridState) => void;\n onPartitionAppend: (partitionColumn: Column, value: string) => void;\n onAdvancedSettingsChange: AdvancedSettingsMenuCallback;\n partition: string;\n partitionColumn: Column;\n sorts: Sort[];\n reverseType: ReverseType;\n quickFilters: QuickFilterMap | null;\n customColumns: ColumnName[];\n selectDistinctColumns: ColumnName[];\n settings?: Settings;\n userColumnWidths: ModelSizeMap;\n userRowHeights: ModelSizeMap;\n onSelectionChanged: (gridRanges: GridRange[]) => void;\n rollupConfig?: UIRollupConfig;\n aggregationSettings: AggregationSettings;\n\n isSelectingColumn: boolean;\n isSelectingPartition: boolean;\n isStuckToBottom: boolean;\n isStuckToRight: boolean;\n\n // eslint-disable-next-line react/no-unused-prop-types\n columnSelectionValidator: (value: Column | null) => boolean;\n columnAllowedCursor: string;\n\n // eslint-disable-next-line react/no-unused-prop-types\n columnNotAllowedCursor: string;\n name: string;\n onlyFetchVisibleColumns: boolean;\n\n showSearchBar: boolean;\n searchValue: string;\n selectedSearchColumns: ColumnName[];\n invertSearchColumns: boolean;\n\n onContextMenu: (obj: {\n model: IrisGridModel;\n value: unknown;\n valueText: string | null;\n column: Column;\n rowIndex: GridRangeIndex;\n columnIndex: GridRangeIndex;\n modelRow: GridRangeIndex;\n modelColumn: GridRangeIndex;\n }) => ContextAction;\n\n pendingDataMap?: PendingDataMap;\n getDownloadWorker: () => Promise<ServiceWorker>;\n\n canCopy: boolean;\n canDownloadCsv: boolean;\n frozenColumns: ColumnName[];\n\n // Theme override for IrisGridTheme\n theme: GridThemeType;\n\n canToggleSearch: boolean;\n}\n\nexport interface IrisGridState {\n isFilterBarShown: boolean;\n isSelectingPartition: boolean;\n focusedFilterBarColumn: number | null;\n metricCalculator: IrisGridMetricCalculator;\n metrics?: GridMetrics;\n keyHandlers: KeyHandler[];\n mouseHandlers: GridMouseHandler[];\n\n partition: string;\n partitionColumn: Column;\n partitionTable: Table | null;\n partitionFilters: FilterCondition[];\n // setAdvancedFilter and setQuickFilter mutate the arguments\n // so we want to always use map copies from the state instead of props\n quickFilters: QuickFilterMap;\n advancedFilters: AdvancedFilterMap;\n shownAdvancedFilter: number | null;\n hoverAdvancedFilter: number | null;\n\n sorts: Sort[];\n reverseType: ReverseType;\n customColumns: ColumnName[];\n selectDistinctColumns: ColumnName[];\n\n // selected range in table\n selectedRanges: GridRange[];\n\n // Current ongoing copy operation\n copyOperation: CopyOperation | null;\n\n // The filter that is currently being applied. Reset after update is received\n loadingText: string | null;\n loadingScrimProgress: number | null;\n loadingSpinnerShown: boolean;\n\n movedColumns: MoveOperation[];\n movedRows: MoveOperation[];\n\n shownColumnTooltip: number | null;\n\n formatter: Formatter;\n isMenuShown: boolean;\n customColumnFormatMap: Map<ColumnName, FormattingRule>;\n\n conditionalFormats: SidebarFormattingRule[];\n conditionalFormatEditIndex: number | null;\n conditionalFormatPreview?: SidebarFormattingRule;\n\n // Column user is hovering over for selection\n hoverSelectColumn: GridRangeIndex;\n\n isTableDownloading: boolean;\n isReady: boolean;\n tableDownloadStatus: string;\n tableDownloadProgress: number;\n tableDownloadEstimatedTime: number | null;\n\n showSearchBar: boolean;\n searchFilter?: FilterCondition;\n searchValue: string;\n selectedSearchColumns: ColumnName[];\n invertSearchColumns: boolean;\n\n rollupConfig?: UIRollupConfig;\n rollupSelectedColumns: [];\n aggregationSettings: AggregationSettings;\n selectedAggregation: Aggregation | null;\n\n openOptions: OptionItem[];\n\n pendingRowCount: number;\n pendingDataMap: PendingDataMap;\n pendingDataErrors: Map<number, Error[]>;\n pendingSavePromise: Promise<void> | null;\n pendingSaveError: string | null;\n\n toastMessage: JSX.Element | null;\n frozenColumns: ColumnName[];\n showOverflowModal: boolean;\n overflowText: string;\n overflowButtonTooltipProps: CSSProperties | null;\n\n gotoRow: string;\n gotoRowError: string;\n isGotoRowShown: boolean;\n}\n\nexport class IrisGrid extends Component<IrisGridProps, IrisGridState> {\n static minDebounce = 150;\n\n static maxDebounce = 500;\n\n static loadingSpinnerDelay = 800;\n\n static defaultProps = {\n children: null,\n advancedFilters: new Map(),\n advancedSettings: new Map(),\n alwaysFetchColumns: [],\n conditionalFormats: [],\n customColumnFormatMap: new Map(),\n isFilterBarShown: false,\n applyInputFiltersOnInit: false,\n movedColumns: [],\n movedRows: [],\n inputFilters: [],\n customFilters: [],\n onCreateChart: undefined,\n onColumnSelected: (): void => undefined,\n onDataSelected: (): void => undefined,\n onError: (): void => undefined,\n onStateChange: (): void => undefined,\n onPartitionAppend: (): void => undefined,\n onAdvancedSettingsChange: (): void => undefined,\n partition: null,\n partitionColumn: null,\n quickFilters: new Map(),\n selectDistinctColumns: [],\n sorts: [],\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n customColumns: [],\n aggregationSettings: DEFAULT_AGGREGATION_SETTINGS,\n rollupConfig: undefined,\n userColumnWidths: new Map(),\n userRowHeights: new Map(),\n onSelectionChanged: (): void => undefined,\n isSelectingColumn: false,\n isSelectingPartition: false,\n isStuckToBottom: false,\n isStuckToRight: false,\n columnSelectionValidator: null,\n columnAllowedCursor: null,\n columnNotAllowedCursor: null,\n name: 'table',\n onlyFetchVisibleColumns: true,\n showSearchBar: false,\n searchValue: '',\n selectedSearchColumns: null,\n invertSearchColumns: true,\n onContextMenu: (): void => undefined,\n pendingDataMap: new Map(),\n getDownloadWorker: undefined,\n settings: {\n timeZone: 'America/New_York',\n defaultDateTimeFormat: DateUtils.FULL_DATE_FORMAT,\n showTimeZone: false,\n showTSeparator: true,\n truncateNumbersWithPound: false,\n formatter: [],\n decimalFormatOptions: PropTypes.shape({\n defaultFormatString: PropTypes.string,\n }),\n integerFormatOptions: PropTypes.shape({\n defaultFormatString: PropTypes.string,\n }),\n },\n canCopy: true,\n canDownloadCsv: true,\n frozenColumns: null,\n theme: IrisGridTheme,\n canToggleSearch: true,\n };\n\n static makeQuickFilter(\n column: Column,\n text: string,\n timeZone: string\n ): FilterCondition | null {\n try {\n return TableUtils.makeQuickFilter(column, text, timeZone);\n } catch (err) {\n log.error('Error creating quick filter', err);\n }\n return null;\n }\n\n constructor(props: IrisGridProps) {\n super(props);\n\n this.handleAdvancedFilterChange = this.handleAdvancedFilterChange.bind(\n this\n );\n this.handleAdvancedFilterSortChange = this.handleAdvancedFilterSortChange.bind(\n this\n );\n this.handleAdvancedFilterDone = this.handleAdvancedFilterDone.bind(this);\n this.handleAdvancedMenuOpened = this.handleAdvancedMenuOpened.bind(this);\n this.handleGotoRowOpened = this.handleGotoRowOpened.bind(this);\n this.handleGotoRowClosed = this.handleGotoRowClosed.bind(this);\n this.handleAdvancedMenuClosed = this.handleAdvancedMenuClosed.bind(this);\n this.handleAggregationChange = this.handleAggregationChange.bind(this);\n this.handleAggregationsChange = this.handleAggregationsChange.bind(this);\n this.handleAggregationEdit = this.handleAggregationEdit.bind(this);\n this.handleAnimationLoop = this.handleAnimationLoop.bind(this);\n this.handleAnimationStart = this.handleAnimationStart.bind(this);\n this.handleAnimationEnd = this.handleAnimationEnd.bind(this);\n this.handleChartChange = this.handleChartChange.bind(this);\n this.handleChartCreate = this.handleChartCreate.bind(this);\n this.handleGridError = this.handleGridError.bind(this);\n this.handleFilterBarChange = this.handleFilterBarChange.bind(this);\n this.handleFilterBarDone = this.handleFilterBarDone.bind(this);\n this.handleFilterBarTab = this.handleFilterBarTab.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleMenu = this.handleMenu.bind(this);\n this.handleMenuClose = this.handleMenuClose.bind(this);\n this.handleMenuSelect = this.handleMenuSelect.bind(this);\n this.handleMenuBack = this.handleMenuBack.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.handleSelectionChanged = this.handleSelectionChanged.bind(this);\n this.handleMovedColumnsChanged = this.handleMovedColumnsChanged.bind(this);\n this.handleUpdate = this.handleUpdate.bind(this);\n this.handleTooltipRef = this.handleTooltipRef.bind(this);\n this.handleViewChanged = this.handleViewChanged.bind(this);\n this.handleFormatSelection = this.handleFormatSelection.bind(this);\n this.handleConditionalFormatCreate = this.handleConditionalFormatCreate.bind(\n this\n );\n this.handleConditionalFormatEdit = this.handleConditionalFormatEdit.bind(\n this\n );\n this.handleConditionalFormatsChange = this.handleConditionalFormatsChange.bind(\n this\n );\n this.handleConditionalFormatEditorSave = this.handleConditionalFormatEditorSave.bind(\n this\n );\n this.handleConditionalFormatEditorCancel = this.handleConditionalFormatEditorCancel.bind(\n this\n );\n this.handleUpdateCustomColumns = this.handleUpdateCustomColumns.bind(this);\n this.handleCustomColumnsChanged = this.handleCustomColumnsChanged.bind(\n this\n );\n this.handleSelectDistinctChanged = this.handleSelectDistinctChanged.bind(\n this\n );\n this.handlePendingDataUpdated = this.handlePendingDataUpdated.bind(this);\n this.handlePendingCommitClicked = this.handlePendingCommitClicked.bind(\n this\n );\n this.handlePendingDiscardClicked = this.handlePendingDiscardClicked.bind(\n this\n );\n this.handleGotoRowSelectedRowNumberSubmit = this.handleGotoRowSelectedRowNumberSubmit.bind(\n this\n );\n this.focusRowInGrid = this.focusRowInGrid.bind(this);\n this.handleDownloadTable = this.handleDownloadTable.bind(this);\n this.handleDownloadTableStart = this.handleDownloadTableStart.bind(this);\n this.handleCancelDownloadTable = this.handleCancelDownloadTable.bind(this);\n this.handleDownloadCanceled = this.handleDownloadCanceled.bind(this);\n this.handleDownloadCompleted = this.handleDownloadCompleted.bind(this);\n this.handlePartitionAppend = this.handlePartitionAppend.bind(this);\n this.handlePartitionChange = this.handlePartitionChange.bind(this);\n this.handlePartitionFetchAll = this.handlePartitionFetchAll.bind(this);\n this.handlePartitionDone = this.handlePartitionDone.bind(this);\n this.handleColumnVisibilityChanged = this.handleColumnVisibilityChanged.bind(\n this\n );\n this.handleCrossColumnSearch = this.handleCrossColumnSearch.bind(this);\n this.handleRollupChange = this.handleRollupChange.bind(this);\n this.handleOverflowClose = this.handleOverflowClose.bind(this);\n this.getColumnBoundingRect = this.getColumnBoundingRect.bind(this);\n this.handleGotoRowSelectedRowNumberChanged = this.handleGotoRowSelectedRowNumberChanged.bind(\n this\n );\n\n this.grid = null;\n this.gridWrapper = null;\n this.lastLoadedConfig = null;\n this.pending = new Pending();\n this.globalColumnFormats = [];\n this.decimalFormatOptions = {};\n this.integerFormatOptions = {};\n this.truncateNumbersWithPound = false;\n\n // When the loading scrim started/when it should extend to the end of the screen.\n this.renderer = new IrisGridRenderer();\n this.tableSaver = null;\n this.crossColumnRef = React.createRef();\n this.isAnimating = false;\n this.filterInputRef = React.createRef();\n\n this.toggleFilterBarAction = {\n action: () => this.toggleFilterBar(),\n shortcut: SHORTCUTS.TABLE.TOGGLE_QUICK_FILTER,\n };\n\n this.toggleSearchBarAction = {\n action: () => this.toggleSearchBar(),\n shortcut: SHORTCUTS.TABLE.TOGGLE_SEARCH,\n };\n\n this.toggleGotoRowAction = {\n action: () => this.toggleGotoRow(),\n shortcut: SHORTCUTS.TABLE.GOTO_ROW,\n };\n\n this.discardAction = {\n action: () => {\n const { model } = this.props;\n if (\n isEditableGridModel(model) &&\n model.isEditable &&\n model.pendingDataMap.size > 0\n ) {\n this.discardPending().catch(log.error);\n }\n },\n shortcut: SHORTCUTS.INPUT_TABLE.DISCARD,\n };\n this.commitAction = {\n action: () => {\n const { model } = this.props;\n if (\n isEditableGridModel(model) &&\n model.isEditable &&\n model.pendingDataMap.size > 0 &&\n model.pendingDataErrors.size === 0\n ) {\n this.commitPending().catch(log.error);\n }\n },\n shortcut: SHORTCUTS.INPUT_TABLE.COMMIT,\n };\n this.contextActions = [\n this.toggleFilterBarAction,\n this.toggleSearchBarAction,\n this.toggleGotoRowAction,\n this.discardAction,\n this.commitAction,\n ];\n\n const {\n aggregationSettings,\n conditionalFormats,\n customColumnFormatMap,\n isFilterBarShown,\n isSelectingPartition,\n model,\n movedColumns: movedColumnsProp,\n movedRows: movedRowsProp,\n partition,\n partitionColumn,\n rollupConfig,\n userColumnWidths,\n userRowHeights,\n showSearchBar,\n searchValue,\n selectedSearchColumns,\n invertSearchColumns,\n advancedFilters,\n quickFilters,\n selectDistinctColumns,\n pendingDataMap,\n canCopy,\n frozenColumns,\n } = props;\n\n const keyHandlers: KeyHandler[] = [\n new ReverseKeyHandler(this),\n new ClearFilterKeyHandler(this),\n ];\n if (canCopy) {\n keyHandlers.push(new CopyKeyHandler(this));\n }\n const mouseHandlers = [\n new IrisGridCellOverflowMouseHandler(this),\n new IrisGridColumnSelectMouseHandler(this),\n new IrisGridColumnTooltipMouseHandler(this),\n new IrisGridSortMouseHandler(this),\n new IrisGridFilterMouseHandler(this),\n new IrisGridContextMenuHandler(this),\n new IrisGridDataSelectMouseHandler(this),\n new PendingMouseHandler(this),\n ];\n\n const movedColumns =\n movedColumnsProp.length > 0 ? movedColumnsProp : model.movedColumns;\n const movedRows =\n movedRowsProp.length > 0 ? movedRowsProp : model.movedRows;\n\n const metricCalculator = new IrisGridMetricCalculator({\n userColumnWidths: new Map(userColumnWidths),\n userRowHeights: new Map(userRowHeights),\n movedColumns,\n });\n const searchColumns = selectedSearchColumns ?? [];\n const searchFilter = CrossColumnSearch.createSearchFilter(\n searchValue,\n searchColumns,\n model.columns,\n invertSearchColumns\n );\n\n this.state = {\n isFilterBarShown,\n isSelectingPartition,\n focusedFilterBarColumn: null,\n metricCalculator,\n metrics: undefined,\n keyHandlers,\n mouseHandlers,\n\n partition,\n partitionColumn,\n partitionTable: null,\n partitionFilters: [],\n // setAdvancedFilter and setQuickFilter mutate the arguments\n // so we want to always use map copies from the state instead of props\n quickFilters: quickFilters ? new Map(quickFilters) : new Map(),\n advancedFilters: new Map(advancedFilters),\n shownAdvancedFilter: null,\n hoverAdvancedFilter: null,\n sorts: [],\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n customColumns: [],\n selectDistinctColumns,\n\n // selected range in table\n selectedRanges: [],\n\n // Current ongoing copy operation\n copyOperation: null,\n\n // The filter that is currently being applied. Reset after update is received\n loadingText: null,\n loadingScrimProgress: null,\n loadingSpinnerShown: false,\n\n movedColumns,\n movedRows,\n\n shownColumnTooltip: null,\n\n formatter: new Formatter(),\n isMenuShown: false,\n customColumnFormatMap: new Map(customColumnFormatMap),\n\n conditionalFormats,\n conditionalFormatEditIndex: null,\n conditionalFormatPreview: undefined,\n\n // Column user is hovering over for selection\n hoverSelectColumn: null,\n\n isTableDownloading: false,\n isReady: false,\n tableDownloadStatus: '',\n tableDownloadProgress: 0,\n tableDownloadEstimatedTime: 0,\n\n showSearchBar,\n searchFilter,\n searchValue,\n selectedSearchColumns: searchColumns,\n invertSearchColumns,\n\n rollupConfig,\n rollupSelectedColumns: [],\n aggregationSettings,\n selectedAggregation: null,\n\n openOptions: [],\n\n pendingRowCount: 0,\n pendingDataMap: pendingDataMap ?? new Map(),\n pendingDataErrors: new Map(),\n pendingSavePromise: null,\n pendingSaveError: null,\n\n toastMessage: null,\n frozenColumns,\n showOverflowModal: false,\n overflowText: '',\n overflowButtonTooltipProps: null,\n isGotoRowShown: false,\n gotoRow: '',\n gotoRowError: '',\n };\n }\n\n componentDidMount(): void {\n const { partitionColumn, model } = this.props;\n const column =\n partitionColumn ?? model.columns.find(c => c.isPartitionColumn);\n if (\n model.isFilterRequired &&\n model.isValuesTableAvailable &&\n column != null\n ) {\n this.loadPartitionsTable(column);\n } else {\n this.initState();\n }\n this.startListening(model);\n }\n\n componentDidUpdate(prevProps: IrisGridProps): void {\n const {\n inputFilters,\n isSelectingColumn,\n settings,\n model,\n customFilters,\n sorts,\n } = this.props;\n\n if (model !== prevProps.model) {\n this.stopListening(prevProps.model);\n this.startListening(model);\n }\n\n const changedInputFilters =\n inputFilters !== prevProps.inputFilters\n ? inputFilters.filter(\n inputFilter => !prevProps.inputFilters.includes(inputFilter)\n )\n : [];\n if (changedInputFilters.length > 0) {\n const { advancedSettings } = this.props;\n const replaceExistingFilters =\n advancedSettings.get(\n AdvancedSettingsType.FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS\n ) ?? false;\n if (replaceExistingFilters) {\n this.clearGridInputField();\n this.clearCrossColumSearch();\n }\n this.startLoading('Filtering...', true);\n this.applyInputFilters(changedInputFilters, replaceExistingFilters);\n }\n\n if (isSelectingColumn !== prevProps.isSelectingColumn) {\n this.resetColumnSelection();\n }\n if (settings !== prevProps.settings) {\n this.updateFormatterSettings(settings);\n }\n if (customFilters !== prevProps.customFilters) {\n this.startLoading('Filtering...', true);\n }\n if (sorts !== prevProps.sorts) {\n this.updateSorts(sorts);\n }\n const { loadingScrimStartTime, loadingScrimFinishTime } = this;\n if (loadingScrimStartTime != null && loadingScrimFinishTime != null) {\n window.requestAnimationFrame(() => {\n const now = Date.now();\n const currentTime = now - loadingScrimStartTime;\n const totalTime = loadingScrimFinishTime - loadingScrimStartTime;\n const loadingScrimProgress = Math.min(currentTime / totalTime, 1);\n if (loadingScrimFinishTime < now) {\n this.loadingScrimStartTime = undefined;\n this.loadingScrimFinishTime = undefined;\n }\n\n this.setState(state => {\n if (state.loadingScrimProgress == null) {\n log.debug2('Ignoring scrim update because loading cancelled.');\n return null;\n }\n\n return { loadingScrimProgress };\n });\n });\n }\n\n this.sendStateChange();\n }\n\n componentWillUnmount(): void {\n const { model } = this.props;\n this.stopListening(model);\n this.pending.cancel();\n this.updateSearchFilter.cancel();\n\n if (this.loadingTimer) {\n clearTimeout(this.loadingTimer);\n }\n this.handleDownloadProgressUpdate.cancel();\n if (this.animationFrame !== undefined) {\n cancelAnimationFrame(this.animationFrame);\n }\n }\n\n grid: Grid | null;\n\n gridWrapper: HTMLDivElement | null;\n\n lastFocusedFilterBarColumn?: number;\n\n lastLoadedConfig: Pick<\n IrisGridState,\n | 'advancedFilters'\n | 'aggregationSettings'\n | 'customColumns'\n | 'quickFilters'\n | 'reverseType'\n | 'rollupConfig'\n | 'searchFilter'\n | 'selectDistinctColumns'\n | 'sorts'\n > | null;\n\n tooltip?: Tooltip;\n\n pending: Pending;\n\n globalColumnFormats?: FormattingRule[];\n\n dateTimeFormatterOptions?: DateTimeColumnFormatterOptions;\n\n decimalFormatOptions: { defaultFormatString?: string };\n\n integerFormatOptions: { defaultFormatString?: string };\n\n truncateNumbersWithPound: boolean;\n\n // When the loading scrim started/when it should extend to the end of the screen.\n loadingScrimStartTime?: number;\n\n loadingScrimFinishTime?: number;\n\n animationFrame?: number;\n\n loadingTimer?: ReturnType<typeof setTimeout>;\n\n renderer: IrisGridRenderer;\n\n tableSaver: TableSaver | null;\n\n crossColumnRef: React.RefObject<CrossColumnSearch>;\n\n isAnimating: boolean;\n\n filterInputRef: React.RefObject<FilterInputField>;\n\n toggleFilterBarAction: Action;\n\n toggleSearchBarAction: Action;\n\n toggleGotoRowAction: Action;\n\n discardAction: Action;\n\n commitAction: Action;\n\n contextActions: ContextAction[];\n\n getAdvancedMenuOpenedHandler = memoize(\n column => this.handleAdvancedMenuOpened.bind(this, column),\n { max: 100 }\n );\n\n getCachedAdvancedFilterMenuActions = memoize(\n (\n model,\n column,\n advancedFilterOptions,\n sortDirection?: SortDirection,\n formatter?\n ) => (\n <AdvancedFilterCreator\n model={model}\n column={column}\n onFilterChange={this.handleAdvancedFilterChange}\n onSortChange={this.handleAdvancedFilterSortChange}\n onDone={this.handleAdvancedFilterDone}\n options={advancedFilterOptions}\n sortDirection={sortDirection}\n formatter={formatter}\n />\n ),\n { max: 50 }\n );\n\n getCachedOptionItems = memoize(\n (\n isChartBuilderAvailable: boolean,\n isCustomColumnsAvailable: boolean,\n isFormatColumnsAvailable: boolean,\n isRollupAvailable: boolean,\n isTotalsAvailable: boolean,\n isSelectDistinctAvailable: boolean,\n isExportAvailable: boolean,\n toggleFilterBarAction,\n toggleSearchBarAction,\n toggleGotoRowAction,\n isFilterBarShown: boolean,\n showSearchBar: boolean,\n canDownloadCsv: boolean,\n canToggleSearch: boolean,\n showGotoRow: boolean,\n hasAdvancedSettings: boolean\n ) => {\n const optionItems: OptionItem[] = [];\n if (isChartBuilderAvailable) {\n optionItems.push({\n type: OptionType.CHART_BUILDER,\n title: 'Chart Builder',\n icon: dhGraphLineUp,\n });\n }\n optionItems.push({\n type: OptionType.VISIBILITY_ORDERING_BUILDER,\n title: 'Column Visibility & Ordering',\n icon: dhEye,\n });\n if (isFormatColumnsAvailable) {\n optionItems.push({\n type: OptionType.CONDITIONAL_FORMATTING,\n title: 'Conditional Formatting',\n icon: vsEdit,\n });\n }\n if (isCustomColumnsAvailable) {\n optionItems.push({\n type: OptionType.CUSTOM_COLUMN_BUILDER,\n title: 'Manage Custom Columns',\n icon: vsSplitHorizontal,\n });\n }\n if (isRollupAvailable) {\n optionItems.push({\n type: OptionType.ROLLUP_ROWS,\n title: 'Rollup Rows',\n icon: dhTriangleDownSquare,\n });\n }\n if (isTotalsAvailable) {\n optionItems.push({\n type: OptionType.AGGREGATIONS,\n title: 'Aggregate Columns',\n icon: vsSymbolOperator,\n });\n }\n if (isSelectDistinctAvailable) {\n optionItems.push({\n type: OptionType.SELECT_DISTINCT,\n title: 'Select Distinct Values',\n icon: vsRuby,\n });\n }\n if (isExportAvailable && canDownloadCsv) {\n optionItems.push({\n type: OptionType.TABLE_EXPORTER,\n title: 'Download CSV',\n icon: vsCloudDownload,\n });\n }\n if (hasAdvancedSettings) {\n optionItems.push({\n type: OptionType.ADVANCED_SETTINGS,\n title: 'Advanced Settings',\n icon: vsTools,\n });\n }\n optionItems.push({\n type: OptionType.QUICK_FILTERS,\n title: 'Quick Filters',\n subtitle: toggleFilterBarAction.shortcut.getDisplayText(),\n icon: vsFilter,\n isOn: isFilterBarShown,\n onChange: toggleFilterBarAction.action,\n });\n if (canToggleSearch) {\n optionItems.push({\n type: OptionType.SEARCH_BAR,\n title: 'Search Bar',\n subtitle: toggleSearchBarAction.shortcut.getDisplayText(),\n icon: vsSearch,\n isOn: showSearchBar,\n onChange: toggleSearchBarAction.action,\n });\n }\n optionItems.push({\n type: OptionType.GOTO,\n title: 'Go to',\n subtitle: toggleGotoRowAction.shortcut.getDisplayText(),\n icon: vsReply,\n isOn: showGotoRow,\n onChange: toggleGotoRowAction.action,\n });\n\n return optionItems;\n },\n { max: 1 }\n );\n\n getCachedHiddenColumns = memoize(hiddenColumns => hiddenColumns, {\n max: 1,\n normalizer: ([hiddenColumns]) => hiddenColumns.join(),\n });\n\n getAggregationMap = memoize(\n (columns: Column[], aggregations: Aggregation[]): AggregationMap => {\n const aggregationMap = {} as Record<AggregationOperation, string[]>;\n aggregations.forEach(({ operation, selected, invert }) => {\n aggregationMap[operation] = AggregationUtils.getOperationColumnNames(\n columns,\n operation,\n selected,\n invert\n );\n });\n return aggregationMap;\n }\n );\n\n getOperationMap = memoize(\n (columns: Column[], aggregations: Aggregation[]): OperationMap => {\n const operationMap: Record<string, AggregationOperation[]> = {};\n aggregations\n .filter(\n (a: Aggregation) => !AggregationUtils.isRollupOperation(a.operation)\n )\n .forEach(({ operation, selected, invert }) => {\n AggregationUtils.getOperationColumnNames(\n columns,\n operation,\n selected,\n invert\n ).forEach(name => {\n const newOperations = [...(operationMap[name] ?? []), operation];\n operationMap[name] = newOperations;\n });\n });\n return operationMap;\n }\n );\n\n getOperationOrder = memoize(\n (aggregations: Aggregation[]): AggregationOperation[] =>\n aggregations\n .map((a: Aggregation) => a.operation)\n .filter(\n (o: AggregationOperation) => !AggregationUtils.isRollupOperation(o)\n )\n );\n\n getCachedFormatColumns = memoize((columns, rules) =>\n getFormatColumns(columns, rules)\n );\n\n // customColumns arg is needed to invalidate the cache\n // eslint-disable-next-line no-unused-vars\n getCachedModelColumns = memoize((model, customColumns) => model.columns);\n\n /**\n * Builds formatColumns array based on the provided formatting rules with optional preview\n * @param columns Array of columns\n * @param rulesParam Array of formatting rules\n * @param preview Optional temporary formatting rule for previewing live changes\n * @param editIndex Index in the rulesParam array to replace with the preview, null if preview not applicable\n * @returns Format columns array\n */\n getCachedPreviewFormatColumns = memoize(\n (\n columns: Column[],\n rulesParam: SidebarFormattingRule[],\n preview?: SidebarFormattingRule,\n editIndex?: number\n ): CustomColumn[] => {\n log.debug(\n 'getCachedPreviewFormatColumns',\n rulesParam,\n preview,\n editIndex\n );\n if (preview !== undefined && editIndex !== undefined) {\n const rules = [...rulesParam];\n rules[editIndex] = preview;\n return this.getCachedFormatColumns(columns, rules);\n }\n\n return this.getCachedFormatColumns(columns, rulesParam);\n }\n );\n\n getModelRollupConfig = memoize(\n (originalColumns, config, aggregationSettings) =>\n IrisGridUtils.getModelRollupConfig(\n originalColumns,\n config,\n aggregationSettings\n )\n );\n\n getModelTotalsConfig = memoize(\n (columns, config, aggregationSettings): UITotalsTableConfig | null => {\n const { aggregations, showOnTop } = aggregationSettings;\n // If we've got rollups, then aggregations are applied as part of that...\n if (\n (config?.columns?.length ?? 0) > 0 ||\n (aggregations?.length ?? 0) === 0\n ) {\n return null;\n }\n\n const operationMap = this.getOperationMap(columns, aggregations);\n const operationOrder = this.getOperationOrder(aggregations);\n\n return { operationMap, operationOrder, showOnTop };\n }\n );\n\n getCachedStateOverride = memoize(\n (\n hoverSelectColumn,\n isFilterBarShown,\n isSelectingColumn,\n loadingScrimProgress,\n quickFilters,\n advancedFilters,\n sorts,\n reverseType,\n rollupConfig,\n isMenuShown\n ) => ({\n hoverSelectColumn,\n isFilterBarShown,\n isSelectingColumn,\n loadingScrimProgress,\n quickFilters,\n advancedFilters,\n sorts,\n reverseType,\n rollupConfig,\n isMenuShown,\n }),\n { max: 1 }\n );\n\n getCachedFilter = memoize(\n (\n customFilters: FilterCondition[],\n quickFilters: QuickFilterMap,\n advancedFilters: AdvancedFilterMap,\n partitionFilters: FilterCondition[],\n searchFilter: FilterCondition | undefined\n ) => [\n ...(customFilters ?? []),\n ...(partitionFilters ?? []),\n ...IrisGridUtils.getFiltersFromFilterMap(quickFilters),\n ...IrisGridUtils.getFiltersFromFilterMap(advancedFilters),\n ...(searchFilter !== undefined ? [searchFilter] : []),\n ],\n { max: 1 }\n );\n\n getCachedTheme = memoize(\n (\n theme: GridThemeType,\n isEditable: boolean,\n floatingRowCount: number\n ): Partial<IrisGridThemeType> => ({\n ...IrisGridTheme,\n ...theme,\n autoSelectRow: !isEditable,\n // We only show the row footers when we have floating rows for aggregations\n rowFooterWidth: floatingRowCount > 0 ? theme.rowFooterWidth : 0,\n }),\n { max: 1 }\n );\n\n getValueForCell(\n columnIndex: GridRangeIndex,\n rowIndex: GridRangeIndex,\n rawValue = false\n ): string | unknown {\n const { model } = this.props;\n const modelColumn = this.getModelColumn(columnIndex);\n const modelRow = this.getModelRow(rowIndex);\n if (rawValue && modelColumn != null && modelRow != null) {\n return model.valueForCell(modelColumn, modelRow);\n }\n if (rawValue) {\n return null;\n }\n if (modelColumn != null && modelRow != null) {\n return model.textForCell(modelColumn, modelRow);\n }\n return '';\n }\n\n getModelColumn(columnIndex: GridRangeIndex): ModelIndex | null | undefined {\n const { metrics } = this.state;\n assertNotNull(metrics);\n const { modelColumns } = metrics;\n if (modelColumns == null) {\n return null;\n }\n\n return columnIndex != null ? modelColumns.get(columnIndex) : null;\n }\n\n getModelRow(rowIndex: GridRangeIndex): ModelIndex | null | undefined {\n const { metrics } = this.state;\n assertNotNull(metrics);\n const { modelRows } = metrics;\n if (modelRows == null) {\n return null;\n }\n\n return rowIndex != null ? modelRows.get(rowIndex) : null;\n }\n\n getTheme(): Partial<IrisGridThemeType> {\n const { model, theme } = this.props;\n return this.getCachedTheme(\n theme,\n (isEditableGridModel(model) && model.isEditable) ?? false,\n model.floatingTopRowCount + model.floatingBottomRowCount\n );\n }\n\n getVisibleColumn(modelIndex: ModelIndex): VisibleIndex {\n const { movedColumns } = this.state;\n return GridUtils.getVisibleIndex(modelIndex, movedColumns);\n }\n\n /**\n * Applies the provided input filters as quick filters,\n * and clears any existing quickFilters or advancedFilters on that column\n * @param inputFilters Array of input filters to apply\n * @param replaceExisting If true, new filters will replace the existing ones, instead of merging\n */\n applyInputFilters(\n inputFilters: InputFilter[],\n replaceExisting = false\n ): void {\n const { model } = this.props;\n const { advancedFilters, quickFilters } = this.state;\n const newAdvancedFilters = replaceExisting\n ? new Map()\n : new Map(advancedFilters);\n const newQuickFilters = replaceExisting ? new Map() : new Map(quickFilters);\n\n let isChanged = replaceExisting && advancedFilters.size > 0;\n inputFilters.forEach(({ name, type, value }) => {\n const modelIndex = model.columns.findIndex(\n ({ name: columnName, type: columnType }) =>\n columnName === name && columnType === type\n );\n if (modelIndex >= 0) {\n isChanged = newAdvancedFilters.delete(modelIndex) || isChanged;\n isChanged =\n this.applyQuickFilter(modelIndex, value, newQuickFilters) ||\n isChanged;\n } else {\n log.error('Unable to find column for inputFilter', name, type, value);\n }\n });\n if (isChanged) {\n this.setState({\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters,\n });\n }\n }\n\n /**\n * Applies a quick filter\n * @param modelIndex The index in the model of the column to set\n * @param value The string value to set to the quick filter\n * @param quickFilters The quick filters map\n * @returns True if the filters have changed because this quick filter was applied\n */\n applyQuickFilter(\n modelIndex: ModelIndex,\n value: string | null,\n quickFilters: QuickFilterMap\n ): boolean {\n const { model } = this.props;\n const { formatter } = model;\n const column = model.columns[modelIndex];\n\n if (value != null && `${value}`.trim().length > 0) {\n const quickFilter = quickFilters.get(modelIndex);\n if (quickFilter != null) {\n const { text } = quickFilter;\n if (text === value) {\n log.debug2('Ignoring change to existing filter');\n return false;\n }\n }\n quickFilters.set(modelIndex, {\n text: value,\n filter: IrisGrid.makeQuickFilter(column, value, formatter.timeZone),\n });\n return true;\n }\n return quickFilters.delete(modelIndex);\n }\n\n setAdvancedFilterMap(advancedFilters: AdvancedFilterMap): void {\n this.setState({ advancedFilters });\n }\n\n setAdvancedFilter(\n modelIndex: ModelIndex,\n filter: FilterCondition | null,\n options: AdvancedFilterOptions\n ): void {\n log.debug('Setting advanced filter', modelIndex, filter);\n\n this.startLoading('Filtering...', true);\n\n this.setState(({ advancedFilters }) => {\n const newAdvancedFilters = new Map(advancedFilters);\n if (filter == null) {\n newAdvancedFilters.delete(modelIndex);\n } else {\n newAdvancedFilters.set(modelIndex, {\n filter,\n options,\n });\n }\n return { advancedFilters: newAdvancedFilters };\n });\n }\n\n /**\n * Sets a quick filter against the provided column\n * @param modelIndex The index in the model for the column this filter is applied to\n * @param filter A filter to apply to the column, or null if there was an error\n * @param text The original text the filter was created with\n */\n setQuickFilter(\n modelIndex: ModelIndex,\n filter: FilterCondition,\n text: string\n ): void {\n log.debug('Setting quick filter', modelIndex, filter, text);\n\n this.startLoading('Filtering...', true);\n\n this.setState(({ quickFilters }) => {\n const newQuickFilters = new Map(quickFilters);\n newQuickFilters.set(modelIndex, { filter, text });\n return { quickFilters: newQuickFilters };\n });\n }\n\n /**\n * Set grid filters based on the filter map\n * @param filterMap Filter map\n */\n setFilterMap(filterMap: FilterMap): void {\n log.debug('setFilterMap', filterMap);\n\n const { advancedSettings } = this.props;\n const clearFiltersOnLinkerFilterUpdate =\n advancedSettings.get(\n AdvancedSettingsType.LINK_CHANGE_CLEARS_ALL_FILTERS\n ) ?? false;\n if (clearFiltersOnLinkerFilterUpdate) {\n this.clearAllFilters();\n }\n\n const { model } = this.props;\n filterMap.forEach(({ columnType, text, value }, columnName) => {\n const column = model.columns.find(\n c => c.name === columnName && c.type === columnType\n );\n if (column == null) {\n return;\n }\n const columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n if (value === undefined) {\n this.removeQuickFilter(columnIndex);\n } else if (value === null) {\n this.setQuickFilter(columnIndex, column.filter().isNull(), '=null');\n } else {\n const filterValue = TableUtils.isTextType(columnType)\n ? dh.FilterValue.ofString(value)\n : dh.FilterValue.ofNumber(value);\n this.setQuickFilter(\n columnIndex,\n column.filter().eq(filterValue),\n `${text}`\n );\n }\n });\n }\n\n removeColumnFilter(modelColumn: ModelIndex): void {\n this.startLoading('Filtering...', true);\n\n this.setState(\n ({ advancedFilters, quickFilters }: Partial<IrisGridState>) => {\n const newAdvancedFilters = advancedFilters\n ? new Map(advancedFilters)\n : new Map();\n const newQuickFilters = quickFilters\n ? new Map(quickFilters)\n : new Map();\n newQuickFilters.delete(modelColumn);\n newAdvancedFilters.delete(modelColumn);\n\n return {\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters,\n };\n }\n );\n }\n\n removeQuickFilter(modelColumn: ModelIndex): void {\n this.startLoading('Clearing Filter...', true);\n\n this.setState(({ quickFilters }) => {\n const newQuickFilters = new Map(quickFilters);\n newQuickFilters.delete(modelColumn);\n\n return { quickFilters: newQuickFilters };\n });\n }\n\n clearAllFilters(): void {\n log.debug('Clearing all filters');\n\n const { advancedFilters, quickFilters, searchFilter } = this.state;\n if (\n quickFilters.size === 0 &&\n advancedFilters.size === 0 &&\n searchFilter === null\n ) {\n return;\n }\n\n // if there is an active quick filter input field, reset it as well\n this.clearGridInputField();\n\n this.startLoading('Clearing Filters...', true);\n this.setState({\n quickFilters: new Map(),\n advancedFilters: new Map(),\n searchValue: '',\n searchFilter: undefined,\n });\n }\n\n clearCrossColumSearch(): void {\n log.debug('Clearing cross-column search');\n\n this.setState({\n searchValue: '',\n searchFilter: undefined,\n });\n }\n\n clearGridInputField(): void {\n if (this.filterInputRef.current != null) {\n this.filterInputRef.current.setValue('');\n }\n }\n\n /**\n * Rebuilds all the current filters. Necessary if something like the time zone has changed.\n */\n rebuildFilters(): void {\n log.debug('Rebuilding filters');\n\n const { model } = this.props;\n const { advancedFilters, quickFilters } = this.state;\n const { columns, formatter } = model;\n\n const newAdvancedFilters = new Map();\n const newQuickFilters = new Map();\n\n advancedFilters.forEach((value, key) => {\n const { options } = value;\n const column = columns[key];\n const filter = TableUtils.makeAdvancedFilter(\n column,\n options,\n formatter.timeZone\n );\n newAdvancedFilters.set(key, {\n options,\n filter,\n });\n });\n\n quickFilters.forEach((value, key) => {\n const { text } = value;\n const column = columns[key];\n newQuickFilters.set(key, {\n text,\n filter: IrisGrid.makeQuickFilter(column, text, formatter.timeZone),\n });\n });\n\n this.startLoading('Rebuilding filters...', true);\n this.setState({\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters,\n });\n }\n\n setFilters({\n quickFilters,\n advancedFilters,\n }: Pick<IrisGridState, 'quickFilters' | 'advancedFilters'>): void {\n this.setState({\n quickFilters,\n advancedFilters,\n });\n }\n\n updateFormatterSettings(settings?: Settings, forceUpdate = true): void {\n const globalColumnFormats = FormatterUtils.getColumnFormats(settings);\n const dateTimeFormatterOptions = FormatterUtils.getDateTimeFormatterOptions(\n settings\n );\n\n const defaultDecimalFormatOptions =\n settings?.defaultDecimalFormatOptions ?? {};\n const defaultIntegerFormatOptions =\n settings?.defaultIntegerFormatOptions ?? {};\n const truncateNumbersWithPound =\n settings?.truncateNumbersWithPound ?? false;\n\n const isColumnFormatChanged = !deepEqual(\n this.globalColumnFormats,\n globalColumnFormats\n );\n const isDateFormattingChanged = !deepEqual(\n this.dateTimeFormatterOptions,\n dateTimeFormatterOptions\n );\n const isDecimalFormattingChanged = !deepEqual(\n this.decimalFormatOptions,\n settings?.defaultDecimalFormatOptions\n );\n const isIntegerFormattingChanged = !deepEqual(\n this.integerFormatOptions,\n defaultIntegerFormatOptions\n );\n const isTruncateNumbersChanged =\n this.truncateNumbersWithPound !== truncateNumbersWithPound;\n if (\n isColumnFormatChanged ||\n isDateFormattingChanged ||\n isDecimalFormattingChanged ||\n isIntegerFormattingChanged ||\n isTruncateNumbersChanged\n ) {\n this.globalColumnFormats = globalColumnFormats;\n this.dateTimeFormatterOptions = dateTimeFormatterOptions;\n this.decimalFormatOptions = defaultDecimalFormatOptions;\n this.integerFormatOptions = defaultIntegerFormatOptions;\n this.truncateNumbersWithPound = truncateNumbersWithPound;\n this.updateFormatter({}, forceUpdate);\n\n if (isDateFormattingChanged && forceUpdate) {\n this.rebuildFilters();\n }\n }\n }\n\n getAlwaysFetchColumns = memoize(\n (\n alwaysFetchColumns: ColumnName[],\n columns: Column[],\n movedColumns: MoveOperation[],\n floatingLeftColumnCount: number,\n floatingRightColumnCount: number,\n draggingRange?: BoundedAxisRange\n ) => {\n const floatingColumns: ColumnName[] = [];\n\n for (let i = 0; i < floatingLeftColumnCount; i += 1) {\n floatingColumns.push(\n columns[GridUtils.getModelIndex(i, movedColumns)].name\n );\n }\n\n for (let i = 0; i < floatingRightColumnCount; i += 1) {\n floatingColumns.push(\n columns[GridUtils.getModelIndex(columns.length - 1 - i, movedColumns)]\n .name\n );\n }\n\n if (draggingRange) {\n for (let i = draggingRange[0]; i <= draggingRange[1]; i += 1) {\n floatingColumns.push(\n columns[GridUtils.getModelIndex(i, movedColumns)].name\n );\n }\n }\n\n const columnSet = new Set([...alwaysFetchColumns, ...floatingColumns]);\n\n return [...columnSet];\n }\n );\n\n updateFormatter(\n updatedFormats: { customColumnFormatMap?: Map<ColumnName, FormattingRule> },\n forceUpdate = true\n ): void {\n const { customColumnFormatMap } = this.state;\n const update = {\n customColumnFormatMap,\n ...updatedFormats,\n };\n const mergedColumnFormats = [\n ...(this.globalColumnFormats ?? []),\n ...update.customColumnFormatMap.values(),\n ];\n const formatter = new Formatter(\n mergedColumnFormats,\n this.dateTimeFormatterOptions,\n this.decimalFormatOptions,\n this.integerFormatOptions,\n this.truncateNumbersWithPound\n );\n\n log.debug('updateFormatter', this.globalColumnFormats, mergedColumnFormats);\n\n this.setState({ ...update, formatter }, () => {\n if (forceUpdate && this.grid) {\n this.grid.forceUpdate();\n }\n });\n }\n\n initFormatter(): void {\n const { settings } = this.props;\n this.updateFormatterSettings(settings);\n }\n\n initState(): void {\n const {\n applyInputFiltersOnInit,\n inputFilters,\n sorts,\n model,\n reverseType,\n customColumns,\n searchValue,\n selectedSearchColumns,\n invertSearchColumns,\n } = this.props;\n\n const searchColumns = selectedSearchColumns ?? [];\n const searchFilter = CrossColumnSearch.createSearchFilter(\n searchValue,\n searchColumns,\n model.columns,\n invertSearchColumns\n );\n\n if (applyInputFiltersOnInit) {\n // There may be more than one input filter on the same column with value === '' applied last\n // We don't want to skip it here, so only excluding the ones that were never applied (null)\n const inputFiltersWithValues = inputFilters.filter(\n inputFilter => inputFilter.value != null\n );\n this.applyInputFilters(inputFiltersWithValues);\n }\n\n this.setState({\n sorts,\n reverseType,\n customColumns,\n isReady: true,\n searchFilter,\n });\n this.initFormatter();\n }\n\n async loadPartitionsTable(partitionColumn: Column): Promise<void> {\n const { model } = this.props;\n this.setState({ isSelectingPartition: true });\n\n try {\n const partitionTable = await this.pending.add(\n model.valuesTable(partitionColumn),\n resolved => resolved.close()\n );\n\n const column = partitionTable.columns[0];\n const sort = column.sort().desc();\n partitionTable.applySort([sort]);\n partitionTable.setViewport(0, 0, [column]);\n\n const data = await this.pending.add(partitionTable.getViewportData());\n if (data.rows.length > 0) {\n const row = data.rows[0];\n const value = row.get(column);\n\n this.updatePartition(value, partitionColumn);\n\n this.setState({ isSelectingPartition: true });\n } else {\n log.info('Table does not have any data, just fetching all');\n this.setState({ isSelectingPartition: false });\n this.handlePartitionFetchAll();\n }\n this.setState({ partitionTable, partitionColumn }, () => {\n this.initState();\n });\n } catch (error) {\n this.handleTableLoadError(error);\n }\n }\n\n updatePartition(partition: string, partitionColumn: Column): void {\n const partitionFilter = partitionColumn\n .filter()\n .eq(dh.FilterValue.ofString(partition));\n const partitionFilters = [partitionFilter];\n this.setState({\n partition,\n partitionFilters,\n });\n }\n\n copyCell(\n columnIndex: GridRangeIndex,\n rowIndex: GridRangeIndex,\n rawValue = false\n ): void {\n const { canCopy } = this.props;\n if (canCopy) {\n const value = String(\n this.getValueForCell(columnIndex, rowIndex, rawValue)\n );\n ContextActionUtils.copyToClipboard(value).catch(e =>\n log.error('Unable to copy cell', e)\n );\n } else {\n log.error('Attempted to copyCell for user without copy permission.');\n }\n }\n\n /**\n * Copy the provided ranges to the clipboard\n * @paramranges The ranges to copy\n * @param includeHeaders Include the headers or not\n * @param formatValues Whether to format values or not\n * @param error Error message if one occurred\n */\n copyRanges(\n ranges: GridRange[],\n includeHeaders = false,\n formatValues = true,\n error?: string\n ): void {\n const { model, canCopy } = this.props;\n const { metricCalculator, movedColumns } = this.state;\n const userColumnWidths = metricCalculator.getUserColumnWidths();\n\n if (canCopy) {\n const copyOperation = {\n ranges: GridRange.boundedRanges(\n ranges,\n model.columnCount,\n model.rowCount\n ),\n includeHeaders,\n formatValues,\n movedColumns,\n userColumnWidths,\n error,\n };\n\n this.setState({ copyOperation });\n } else {\n log.error('Attempted copyRanges for user without copy permission.');\n }\n }\n\n startLoading(loadingText: string, resetRanges = false): void {\n this.setState({ loadingText });\n\n const theme = this.getTheme();\n\n if (resetRanges && this.grid) {\n this.grid.clearSelectedRanges();\n this.grid.setViewState({ top: 0 }, true);\n }\n\n if (this.loadingScrimStartTime == null) {\n const { minScrimTransitionTime, maxScrimTransitionTime } = theme;\n assertNotNull(minScrimTransitionTime);\n assertNotNull(maxScrimTransitionTime);\n const height = this.gridWrapper?.getBoundingClientRect().height ?? 0;\n const scrimTransitionTime = Math.max(\n minScrimTransitionTime,\n Math.min(height / 2, maxScrimTransitionTime)\n );\n this.loadingScrimStartTime = Date.now();\n this.loadingScrimFinishTime =\n this.loadingScrimStartTime + scrimTransitionTime;\n this.setState({\n loadingScrimProgress: 0,\n });\n this.loadingTimer = setTimeout(() => {\n this.setState({\n loadingSpinnerShown: true,\n });\n }, IrisGrid.loadingSpinnerDelay);\n }\n }\n\n stopLoading(): void {\n this.loadingScrimStartTime = undefined;\n this.loadingScrimFinishTime = undefined;\n this.setState({\n loadingText: null,\n loadingScrimProgress: null,\n loadingSpinnerShown: false,\n });\n\n if (this.loadingTimer != null) {\n clearTimeout(this.loadingTimer);\n this.loadingTimer = undefined;\n }\n }\n\n /**\n * Rolls back the table state to the last known safe state, or if that's not available then clears all sorts/filters/custom columns.\n */\n rollback(): void {\n if (this.lastLoadedConfig) {\n log.debug('loading last loading config', this.lastLoadedConfig);\n const {\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverseType,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts,\n } = this.lastLoadedConfig;\n\n this.lastLoadedConfig = null;\n this.setState({\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverseType,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts,\n });\n } else {\n log.debug('remove all sorts, filters, and custom columns');\n this.setState({\n advancedFilters: new Map(),\n aggregationSettings: DEFAULT_AGGREGATION_SETTINGS,\n customColumns: [],\n quickFilters: new Map(),\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n rollupConfig: undefined,\n selectDistinctColumns: [],\n sorts: [],\n });\n }\n }\n\n /**\n * Check if we can rollback the current state to a safe state.\n * @returns true if there's a previously known safe state or if some of the current state isn't empty.\n */\n canRollback(): boolean {\n return this.lastLoadedConfig != null || !isEmptyConfig(this.state);\n }\n\n startListening(model: IrisGridModel): void {\n model.addEventListener(IrisGridModel.EVENT.UPDATED, this.handleUpdate);\n model.addEventListener(\n IrisGridModel.EVENT.REQUEST_FAILED,\n this.handleRequestFailed\n );\n model.addEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleCustomColumnsChanged\n );\n model.addEventListener(\n IrisGridModel.EVENT.PENDING_DATA_UPDATED,\n this.handlePendingDataUpdated\n );\n }\n\n stopListening(model: IrisGridModel): void {\n model.removeEventListener(IrisGridModel.EVENT.UPDATED, this.handleUpdate);\n model.removeEventListener(\n IrisGridModel.EVENT.REQUEST_FAILED,\n this.handleRequestFailed\n );\n model.removeEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleCustomColumnsChanged\n );\n model.removeEventListener(\n IrisGridModel.EVENT.PENDING_DATA_UPDATED,\n this.handlePendingDataUpdated\n );\n }\n\n focus(): void {\n this.grid?.focus();\n }\n\n focusFilterBar(column: VisibleIndex): void {\n const { movedColumns } = this.state;\n const { model } = this.props;\n const { columnCount } = model;\n const modelColumn = GridUtils.getModelIndex(column, movedColumns);\n\n if (\n column == null ||\n column < 0 ||\n columnCount <= column ||\n !model.isFilterable(modelColumn)\n ) {\n this.setState({ focusedFilterBarColumn: null });\n return;\n }\n\n const { metricCalculator, metrics } = this.state;\n assertNotNull(metrics);\n const { left, rightVisible, lastLeft } = metrics;\n if (column < left) {\n this.grid?.setViewState({ left: column }, true);\n } else if (rightVisible < column) {\n const metricState = this.grid?.getMetricState();\n assertNotNull(metricState);\n const newLeft = metricCalculator.getLastLeft(metricState, column);\n this.grid?.setViewState(\n { left: Math.min(newLeft, lastLeft), leftOffset: 0 },\n true\n );\n }\n this.lastFocusedFilterBarColumn = column;\n this.setState({ focusedFilterBarColumn: column, isFilterBarShown: true });\n }\n\n hideColumnByVisibleIndex(columnVisibleIndex: VisibleIndex): void {\n const { metricCalculator, movedColumns } = this.state;\n metricCalculator.setColumnWidth(\n GridUtils.getModelIndex(columnVisibleIndex, movedColumns),\n 0\n );\n\n this.grid?.forceUpdate();\n }\n\n freezeColumnByColumnName(columnName: ColumnName): void {\n const { frozenColumns, movedColumns } = this.state;\n const { model } = this.props;\n log.debug2('freezing column', columnName);\n\n const allFrozenColumns =\n frozenColumns == null\n ? new Set(model.frozenColumns)\n : new Set(frozenColumns);\n\n allFrozenColumns.add(columnName);\n\n const modelIndex = model.getColumnIndexByName(columnName);\n assertNotNull(modelIndex);\n const visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);\n const newMovedColumns = GridUtils.moveItem(\n visibleIndex,\n allFrozenColumns.size - 1,\n movedColumns\n );\n\n this.setState({\n frozenColumns: [...allFrozenColumns],\n movedColumns: newMovedColumns,\n });\n }\n\n unFreezeColumnByColumnName(columnName: ColumnName): void {\n const { frozenColumns, movedColumns } = this.state;\n const { model } = this.props;\n log.debug2('unfreezing column', columnName);\n\n const allFrozenColumns =\n frozenColumns == null\n ? new Set(model.frozenColumns)\n : new Set(frozenColumns);\n\n allFrozenColumns.delete(columnName);\n\n const modelIndex = model.getColumnIndexByName(columnName);\n assertNotNull(modelIndex);\n const visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);\n\n // Move to after remaining frozen columns and front columns\n const newMovedColumns = GridUtils.moveItem(\n visibleIndex,\n allFrozenColumns.size + model.frontColumns.length,\n movedColumns\n );\n\n this.setState({\n frozenColumns: [...allFrozenColumns],\n movedColumns: newMovedColumns,\n });\n }\n\n handleColumnVisibilityChanged(\n modelIndexes: ModelIndex[],\n visibilityOption?: VisibilityOptionType\n ): void {\n const { metricCalculator } = this.state;\n if (\n visibilityOption === VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n ) {\n modelIndexes.forEach(modelIndex => {\n metricCalculator.resetColumnWidth(modelIndex);\n });\n } else {\n modelIndexes.forEach(modelIndex => {\n metricCalculator.setColumnWidth(modelIndex, 0);\n });\n }\n this.grid?.forceUpdate();\n }\n\n handleCrossColumnSearch(\n searchValue: string,\n selectedSearchColumns: ColumnName[],\n invertSearchColumns: boolean\n ): void {\n const { model } = this.props;\n\n this.updateSearchFilter(\n searchValue,\n selectedSearchColumns,\n model.columns,\n invertSearchColumns\n );\n\n this.setState({\n searchValue,\n selectedSearchColumns,\n invertSearchColumns,\n });\n }\n\n updateSearchFilter = debounce(\n (\n searchValue: string,\n selectedSearchColumns: ColumnName[],\n columns: Column[],\n invertSearchColumns: boolean\n ): void => {\n const searchFilter = CrossColumnSearch.createSearchFilter(\n searchValue,\n selectedSearchColumns,\n columns,\n invertSearchColumns\n );\n this.setState({ searchFilter });\n },\n SET_FILTER_DEBOUNCE\n );\n\n handleAnimationLoop(): void {\n this.grid?.updateCanvasScale();\n this.grid?.updateCanvas();\n\n if (this.isAnimating) {\n this.animationFrame = requestAnimationFrame(this.handleAnimationLoop);\n }\n }\n\n handleAnimationStart(): void {\n log.debug2('handleAnimationStart');\n\n this.isAnimating = true;\n\n this.animationFrame = requestAnimationFrame(this.handleAnimationLoop);\n }\n\n handleAnimationEnd(): void {\n log.debug2('handleAnimationEnd');\n\n this.isAnimating = false;\n }\n\n handlePartitionAppend(value: string): void {\n const { onPartitionAppend } = this.props;\n const { partitionColumn } = this.state;\n onPartitionAppend(partitionColumn, value);\n }\n\n handlePartitionChange(partition: string): void {\n const { partitionColumn } = this.state;\n this.updatePartition(partition, partitionColumn);\n }\n\n handlePartitionFetchAll(): void {\n this.setState({\n partitionFilters: [],\n isSelectingPartition: false,\n });\n }\n\n handlePartitionDone(): void {\n this.setState({ isSelectingPartition: false });\n }\n\n handleTableLoadError(error: unknown): void {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n\n log.error(error);\n\n const { onError } = this.props;\n onError(error);\n }\n\n showAllColumns(): void {\n const { metricCalculator } = this.state;\n const userColumnWidths = metricCalculator.getUserColumnWidths();\n const entries = [...userColumnWidths.entries()];\n for (let i = 0; i < entries.length; i += 1) {\n const [modelIndex, columnWidth] = entries[i];\n if (columnWidth === 0) {\n metricCalculator.resetColumnWidth(modelIndex);\n }\n }\n this.grid?.forceUpdate();\n }\n\n toggleSort(columnIndex: VisibleIndex, addToExisting: boolean): void {\n log.info('Toggling sort for column', columnIndex);\n\n const { model } = this.props;\n const { sorts: currentSorts } = this.state;\n const modelColumn = this.getModelColumn(columnIndex);\n assertNotNull(modelColumn);\n const sorts = TableUtils.toggleSortForColumn(\n currentSorts,\n model.columns,\n modelColumn,\n addToExisting\n );\n this.updateSorts(sorts);\n }\n\n updateSorts(sorts: Sort[]): void {\n this.startLoading('Sorting...');\n this.setState({ sorts });\n this.grid?.forceUpdate();\n }\n\n sortColumn(\n modelColumn: ModelIndex,\n direction: SortDirection = TableUtils.sortDirection.none,\n isAbs = false,\n addToExisting = false\n ): void {\n assertNotNull(modelColumn);\n const { model } = this.props;\n const sorts = TableUtils.sortColumn(\n model.sort,\n model.columns,\n modelColumn,\n direction,\n isAbs,\n addToExisting\n );\n this.startLoading('Sorting...');\n this.setState({ sorts });\n this.grid?.forceUpdate();\n }\n\n reverse(reverseType: ReverseType): void {\n this.startLoading('Reversing...');\n this.setState({ reverseType });\n this.grid?.forceUpdate();\n }\n\n isReversible(): boolean {\n const { model } = this.props;\n return model.isReversible;\n }\n\n toggleFilterBar(focusIndex = this.lastFocusedFilterBarColumn): void {\n let { isFilterBarShown } = this.state;\n isFilterBarShown = !isFilterBarShown;\n this.setState({ isFilterBarShown });\n\n if (isFilterBarShown) {\n if (focusIndex != null) {\n this.focusFilterBar(focusIndex);\n } else {\n let columnIndex = 0;\n const { model } = this.props;\n const { columnCount } = model;\n for (let i = 0; i < columnCount; i += 1) {\n const modelColumn = this.getModelColumn(i);\n if (modelColumn != null) {\n const column = model.columns[modelColumn];\n if (column != null && TableUtils.isTextType(column.type)) {\n columnIndex = i;\n break;\n }\n }\n }\n this.focusFilterBar(columnIndex);\n }\n } else {\n this.grid?.focus();\n }\n }\n\n isTableSearchAvailable(): boolean {\n const { model, canToggleSearch } = this.props;\n const searchDisplayMode = model?.layoutHints?.searchDisplayMode;\n\n if (searchDisplayMode === dh.SearchDisplayMode?.SEARCH_DISPLAY_HIDE) {\n return false;\n }\n if (searchDisplayMode === dh.SearchDisplayMode?.SEARCH_DISPLAY_SHOW) {\n return true;\n }\n\n return canToggleSearch;\n }\n\n toggleSearchBar(): void {\n const { showSearchBar } = this.state;\n if (!this.isTableSearchAvailable()) {\n return;\n }\n\n const update = !showSearchBar;\n this.setState(\n {\n showSearchBar: update,\n },\n () => {\n if (update && this.crossColumnRef?.current) {\n this.crossColumnRef?.current.focus();\n } else {\n this.grid?.focus();\n }\n }\n );\n }\n\n toggleGotoRow(row = ''): void {\n const { isGotoRowShown } = this.state;\n if (row) {\n // if invoked with a row, keep open instead of toggle\n this.setState({\n isGotoRowShown: true,\n gotoRow: row,\n gotoRowError: '',\n });\n return;\n }\n this.setState({\n isGotoRowShown: !isGotoRowShown,\n gotoRow: '',\n gotoRowError: '',\n });\n }\n\n async commitPending(): Promise<void> {\n const { model } = this.props;\n if (!isEditableGridModel(model) || !model.isEditable) {\n throw new Error('Cannot save, table is not editable');\n }\n\n const { pendingSavePromise } = this.state;\n if (pendingSavePromise != null) {\n throw new Error('Save already in progress');\n }\n\n const containsGridCellInputField = document?.activeElement?.classList.contains(\n 'grid-cell-input-field'\n );\n if (containsGridCellInputField != null && containsGridCellInputField) {\n if (\n document.activeElement != null &&\n document.activeElement.classList.contains('error')\n ) {\n throw new ValidationError('Current input is invalid');\n }\n\n // Focus the grid again to commit any pending input changes\n this.grid?.focus();\n }\n\n const newPendingSavePromise = this.pending\n .add(model.commitPending())\n .then(() => {\n this.setState({ pendingSaveError: null, pendingSavePromise: null });\n })\n .catch(err => {\n if (!PromiseUtils.isCanceled(err)) {\n this.setState({ pendingSaveError: err, pendingSavePromise: null });\n }\n });\n this.setState({ pendingSavePromise: newPendingSavePromise });\n return newPendingSavePromise;\n }\n\n async discardPending(): Promise<void> {\n const { pendingSavePromise } = this.state;\n if (pendingSavePromise != null) {\n throw new Error('Cannot cancel a save in progress');\n }\n\n this.setState({\n pendingSavePromise: null,\n pendingSaveError: null,\n pendingDataMap: new Map(),\n pendingDataErrors: new Map(),\n });\n }\n\n /**\n * Select the passed in column and notify listener\n * @param column The column in this table to link\n */\n selectColumn(column: Column): void {\n const { onColumnSelected } = this.props;\n onColumnSelected(column);\n }\n\n /**\n * Select all the data for a given row and notify listener\n */\n selectData(columnIndex: ModelIndex, rowIndex: ModelIndex): void {\n const { model } = this.props;\n const { columns, groupedColumns } = model;\n const dataMap: RowDataMap = {};\n for (let i = 0; i < columns.length; i += 1) {\n const column = columns[i];\n const { name, type } = column;\n const value = model.valueForCell(i, rowIndex);\n const text = model.textForCell(i, rowIndex);\n const isExpandable =\n isExpandableGridModel(model) && model.isRowExpandable(rowIndex);\n const isGrouped = groupedColumns.find(c => c.name === name) != null;\n dataMap[name] = { value, text, type, isGrouped, isExpandable };\n }\n const { onDataSelected } = this.props;\n onDataSelected(rowIndex, dataMap);\n }\n\n handleAdvancedFilterChange(\n column: Column,\n filter: FilterCondition | null,\n options: AdvancedFilterOptions\n ): void {\n const { model } = this.props;\n const index = model.getColumnIndexByName(column.name);\n assertNotNull(index);\n this.setAdvancedFilter(index, filter, options);\n }\n\n handleAdvancedFilterSortChange(\n column: Column,\n direction: SortDirection,\n addToExisting = false\n ): void {\n const { model } = this.props;\n const columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n const oldSort = TableUtils.getSortForColumn(model.sort, columnIndex);\n let newSort = null;\n\n if (oldSort == null || oldSort.direction !== direction) {\n if (direction === TableUtils.sortDirection.descending) {\n newSort = column.sort().desc();\n } else {\n newSort = column.sort().asc();\n }\n }\n\n const sorts = TableUtils.setSortForColumn(\n model.sort,\n columnIndex,\n newSort,\n addToExisting\n );\n log.info('Setting table sorts', sorts);\n\n this.startLoading('Sorting...');\n this.setState({ sorts });\n\n this.grid?.forceUpdate();\n }\n\n handleAdvancedFilterDone(): void {\n this.grid?.focus();\n }\n\n handleAdvancedMenuOpened(column: GridRangeIndex): void {\n this.setState({ shownAdvancedFilter: column });\n }\n\n handleGotoRowOpened(): void {\n this.setState({ isGotoRowShown: true });\n }\n\n handleGotoRowClosed(): void {\n this.setState({ isGotoRowShown: false });\n }\n\n handleAdvancedMenuClosed(columnIndex: number): void {\n const { focusedFilterBarColumn, isFilterBarShown } = this.state;\n if (\n isFilterBarShown &&\n focusedFilterBarColumn === columnIndex &&\n this.filterInputRef?.current !== null\n ) {\n this.filterInputRef?.current.focus();\n this.setState({ shownAdvancedFilter: null });\n } else {\n this.setState({\n focusedFilterBarColumn: null,\n shownAdvancedFilter: null,\n });\n }\n }\n\n handleCancel(): void {\n this.rollback();\n }\n\n // eslint-disable-next-line class-methods-use-this\n handleChartChange(): void {\n // TODO: IDS-4242 Update Chart Preview\n }\n\n handleChartCreate(settings: ChartBuilderSettings): void {\n const { model, onCreateChart } = this.props;\n onCreateChart(settings, model);\n }\n\n handleGridError(error?: Error): void {\n log.warn('Grid Error', error);\n this.setState({\n toastMessage: <div className=\"error-message\">{`${error}`}</div>,\n });\n }\n\n handleFilterBarChange(value: string): void {\n this.startLoading('Filtering...', true);\n\n this.setState(({ focusedFilterBarColumn, quickFilters }) => {\n const newQuickFilters = new Map(quickFilters);\n if (focusedFilterBarColumn != null) {\n const modelIndex = this.getModelColumn(focusedFilterBarColumn);\n assertNotNull(modelIndex);\n this.applyQuickFilter(modelIndex, value, newQuickFilters);\n }\n return { quickFilters: newQuickFilters };\n });\n }\n\n handleFilterBarDone(setGridFocus = true, defocusInput = true): void {\n if (setGridFocus) {\n this.grid?.focus();\n }\n if (defocusInput) {\n this.setState({ focusedFilterBarColumn: null });\n }\n }\n\n handleFilterBarTab(backward: boolean): void {\n const { focusedFilterBarColumn } = this.state;\n assertNotNull(focusedFilterBarColumn);\n if (backward) {\n this.focusFilterBar(focusedFilterBarColumn - 1);\n } else {\n this.focusFilterBar(focusedFilterBarColumn + 1);\n }\n }\n\n handleFormatSelection(\n modelIndex: ModelIndex,\n selectedFormat: TableColumnFormat | null\n ): void {\n const { model } = this.props;\n const column = model.columns[modelIndex];\n const { customColumnFormatMap: prevCustomColumnFormatMap } = this.state;\n const customColumnFormatMap = new Map(prevCustomColumnFormatMap);\n\n if (selectedFormat != null) {\n const normalizedType = TableUtils.getNormalizedType(column.type);\n assertNotNull(normalizedType);\n const columnFormattingRule = Formatter.makeColumnFormattingRule(\n normalizedType,\n column.name,\n selectedFormat\n );\n\n customColumnFormatMap.set(column.name, columnFormattingRule);\n } else {\n customColumnFormatMap.delete(column.name);\n }\n\n this.updateFormatter({ customColumnFormatMap });\n }\n\n handleMenu(e: React.MouseEvent<HTMLButtonElement>): void {\n e.stopPropagation();\n this.setState({ isMenuShown: true });\n }\n\n handleMenuClose(): void {\n this.setState({ isMenuShown: false, openOptions: [] });\n }\n\n handleMenuBack(): void {\n this.setState(({ openOptions }) => {\n const newOptions = [...openOptions];\n newOptions.pop();\n return { openOptions: newOptions };\n });\n }\n\n handleMenuSelect(option: OptionItem): void {\n this.setState(({ openOptions }) => ({\n openOptions: [...openOptions, option],\n }));\n }\n\n handleRequestFailed(event: Event): void {\n const customEvent = event as CustomEvent;\n log.error('request failed:', customEvent.detail);\n this.stopLoading();\n if (this.canRollback()) {\n this.startLoading('Rolling back changes...', true);\n this.rollback();\n } else {\n log.error('Table failed and unable to rollback');\n const { onError } = this.props;\n onError(new Error(`Error displaying table: ${customEvent.detail}`));\n }\n }\n\n handleUpdate(): void {\n this.stopLoading();\n log.debug2('Received model update');\n\n const {\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverseType,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts,\n } = this.state;\n\n const config = {\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverseType,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts,\n };\n\n if (!isEmptyConfig(config)) {\n this.lastLoadedConfig = config;\n } else {\n this.lastLoadedConfig = null;\n }\n\n this.grid?.forceUpdate();\n }\n\n handleViewChanged(metrics?: GridMetrics): void {\n const { model } = this.props;\n const { selectionEndRow = 0 } = this.grid?.state ?? {};\n let pendingRowCount = 0;\n if (isEditableGridModel(model) && model.isEditable) {\n assertNotNull(metrics);\n const { bottomViewport } = metrics;\n\n // We have an editable table that we can add new rows to\n // Display empty rows beneath the table rows that user can fill in\n const bottomNonFloating = model.rowCount - model.floatingBottomRowCount;\n if (selectionEndRow === bottomNonFloating - 1) {\n // Selection is in the last row, add another blank row\n pendingRowCount = model.pendingRowCount + 1;\n } else if (selectionEndRow === bottomNonFloating - 2) {\n // We may have just added a row based on selection moving, so just leave it as is\n pendingRowCount = model.pendingRowCount;\n } else {\n // Otherwise fill up the viewport with empty cells\n pendingRowCount = Math.max(\n 0,\n bottomViewport -\n (model.rowCount - model.pendingRowCount) -\n model.floatingTopRowCount -\n model.floatingBottomRowCount -\n 1\n );\n }\n }\n\n this.setState({ metrics, pendingRowCount });\n }\n\n handleSelectionChanged(selectedRanges?: GridRange[]): void {\n assertNotNull(selectedRanges);\n const { onSelectionChanged } = this.props;\n const { copyOperation } = this.state;\n this.setState({ selectedRanges });\n if (copyOperation != null) {\n this.setState({ copyOperation: null });\n }\n onSelectionChanged(selectedRanges);\n }\n\n handleMovedColumnsChanged(\n movedColumns: MoveOperation[],\n onChangeApplied: (() => void) | undefined = () => null\n ): void {\n this.setState({ movedColumns }, onChangeApplied);\n }\n\n handleTooltipRef(tooltip: Tooltip): void {\n // Need to start the timer right away, since we're creating the tooltip when we want the timer to start\n if (tooltip != null) {\n tooltip.startTimer();\n }\n\n this.tooltip = tooltip;\n }\n\n handleConditionalFormatsChange(\n conditionalFormats: SidebarFormattingRule[]\n ): void {\n log.debug('Updated conditional formats', conditionalFormats);\n this.setState({ conditionalFormats });\n }\n\n handleConditionalFormatCreate(): void {\n log.debug('Create new conditional format');\n const { openOptions, conditionalFormats } = this.state;\n this.setState({\n openOptions: [\n ...openOptions,\n {\n type: OptionType.CONDITIONAL_FORMATTING_EDIT,\n title: `Create Formatting Rule`,\n },\n ],\n conditionalFormatEditIndex: conditionalFormats.length,\n // Start with a blank rule\n conditionalFormatPreview: undefined,\n });\n }\n\n handleConditionalFormatEdit(index: number): void {\n log.debug('Edit conditional format', index);\n const { openOptions, conditionalFormats } = this.state;\n this.setState({\n openOptions: [\n ...openOptions,\n {\n type: OptionType.CONDITIONAL_FORMATTING_EDIT,\n title: `Edit Formatting Rule`,\n },\n ],\n conditionalFormatEditIndex: index,\n // Clone rule to preview temporary changes\n conditionalFormatPreview: { ...conditionalFormats[index] },\n });\n }\n\n // Apply live changes\n handleConditionalFormatEditorUpdate = debounce(\n (conditionalFormatPreview?: SidebarFormattingRule): void => {\n this.setState({ conditionalFormatPreview });\n },\n SET_CONDITIONAL_FORMAT_DEBOUNCE\n );\n\n handleConditionalFormatEditorSave(config: SidebarFormattingRule): void {\n log.debug('Save conditional format changes', config);\n this.setState(\n state => {\n if (state.conditionalFormatEditIndex === null) {\n log.debug('Invalid format index');\n return null;\n }\n const conditionalFormats = [...state.conditionalFormats];\n conditionalFormats[state.conditionalFormatEditIndex] = config;\n return { conditionalFormats };\n },\n () => {\n this.handleMenuBack();\n }\n );\n }\n\n handleConditionalFormatEditorCancel(): void {\n this.handleMenuBack();\n // Not resetting conditionalFormatPreview here\n // to prevent editor fields change during the menu transition\n this.setState({ conditionalFormatEditIndex: null });\n }\n\n handleUpdateCustomColumns(customColumns: string[]): void {\n log.info(`handleUpdateCustomColumns:`, customColumns);\n\n const { model } = this.props;\n const {\n movedColumns,\n sorts,\n quickFilters,\n advancedFilters,\n selectDistinctColumns,\n } = this.state;\n\n const { columns } = model;\n const oldCustomColumns = model.customColumns.map(\n customColumn => `${customColumn}`\n );\n\n const removedColumnNames = IrisGridUtils.getRemovedCustomColumnNames(\n oldCustomColumns,\n customColumns\n );\n if (removedColumnNames.length > 0) {\n const newSorts = IrisGridUtils.removeSortsInColumns(\n sorts,\n removedColumnNames\n );\n const newQuickFilters = IrisGridUtils.removeFiltersInColumns(\n columns,\n quickFilters,\n removedColumnNames\n );\n const newAdvancedFilters = IrisGridUtils.removeFiltersInColumns(\n columns,\n advancedFilters,\n removedColumnNames\n );\n const newMovedColumns = IrisGridUtils.removeColumnFromMovedColumns(\n columns,\n movedColumns,\n removedColumnNames\n );\n const newSelectDistinctColumns = IrisGridUtils.removeColumnsFromSelectDistinctColumns(\n selectDistinctColumns,\n removedColumnNames\n );\n if (newSorts.length !== sorts.length) {\n log.debug('removing sorts from removed custom columns...');\n this.setState({ sorts: newSorts });\n }\n if (\n newQuickFilters.size !== quickFilters.size ||\n newAdvancedFilters.size !== advancedFilters.size\n ) {\n log.debug(`removing filters from removed custom columns...`);\n this.setState({\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters,\n });\n }\n if (!deepEqual(movedColumns, newMovedColumns)) {\n log.debug(\n `change moved columns for removed custom columns`,\n newMovedColumns\n );\n this.setState({ movedColumns: newMovedColumns });\n }\n if (!deepEqual(selectDistinctColumns, newSelectDistinctColumns)) {\n log.debug(\n `change selectDistinct columns for removed custom columns`,\n newMovedColumns\n );\n this.setState({ selectDistinctColumns: newSelectDistinctColumns });\n }\n }\n\n this.setState({ customColumns });\n this.startLoading('Applying custom columns...');\n }\n\n handleCustomColumnsChanged(): void {\n log.debug('custom columns changed');\n const { isReady } = this.state;\n if (isReady) {\n this.stopLoading();\n this.grid?.forceUpdate();\n } else {\n this.initState();\n }\n }\n\n handlePendingCommitClicked(): Promise<void> {\n return this.commitPending();\n }\n\n handlePendingDiscardClicked(): Promise<void> {\n return this.discardPending();\n }\n\n handlePendingDataUpdated(): void {\n log.debug('pending data updated');\n const { model } = this.props;\n const { pendingDataMap, pendingDataErrors } = model;\n this.setState({\n pendingDataMap,\n pendingDataErrors,\n pendingSaveError: null,\n });\n this.grid?.forceUpdate();\n }\n\n /**\n * User added, removed, or changed the order of aggregations, or position\n * @param aggregationSettings The new aggregation settings\n */\n handleAggregationsChange(aggregationSettings: AggregationSettings): void {\n log.debug('handleAggregationsChange', aggregationSettings);\n\n this.startLoading(\n `Aggregating ${aggregationSettings.aggregations\n .map(a => a.operation)\n .join(', ')}...`\n );\n this.setState({ aggregationSettings });\n }\n\n /**\n * A specific aggregation has been modified\n * @param aggregation The new aggregation\n */\n handleAggregationChange(aggregation: Aggregation): void {\n log.debug('handleAggregationChange', aggregation);\n\n this.startLoading(`Aggregating ${aggregation.operation}...`);\n this.setState(({ aggregationSettings }) => ({\n selectedAggregation: aggregation,\n aggregationSettings: {\n ...aggregationSettings,\n aggregations: aggregationSettings.aggregations.map(a =>\n a.operation === aggregation.operation ? aggregation : a\n ),\n },\n }));\n }\n\n /**\n * An aggregations has been selected for editing\n * @param aggregation The aggregation to edit\n */\n handleAggregationEdit(aggregation: Aggregation): void {\n log.debug('handleAggregationEdit', aggregation);\n\n const { openOptions } = this.state;\n\n this.setState({\n openOptions: [\n ...openOptions,\n {\n type: OptionType.AGGREGATION_EDIT,\n title: `Edit Columns to ${aggregation.operation}`,\n },\n ],\n selectedAggregation: aggregation,\n });\n }\n\n handleRollupChange(rollupConfig: UIRollupConfig): void {\n log.info('Rollup change', rollupConfig);\n\n this.resetGridViewState();\n this.showAllColumns();\n this.clearAllFilters();\n\n this.startLoading(\n `Grouping by columns ${rollupConfig?.columns?.join(', ') ?? ''}...`\n );\n\n // Have to clear select distinct since rollup uses the original columns, not the current ones.\n // IrisGridProxyModel has a check to prevent model update\n // when selectDistinctModel is cleared and the rollupConfig is set on the model.\n this.setState({\n rollupConfig,\n movedColumns: [],\n sorts: [],\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n selectDistinctColumns: [],\n });\n }\n\n handleSelectDistinctChanged(columnNames: ColumnName[]): void {\n log.debug('SelectDistinct change', columnNames);\n\n this.resetGridViewState();\n\n this.showAllColumns();\n this.clearAllFilters();\n\n this.startLoading(\n `Selecting distinct values in ${\n columnNames.length > 0 ? columnNames.join(', ') : ''\n }...`\n );\n\n this.setState({\n selectDistinctColumns: columnNames,\n movedColumns: [],\n sorts: [],\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n });\n }\n\n handleDownloadTableStart(): void {\n const { canDownloadCsv } = this.props;\n if (canDownloadCsv) {\n this.setState({\n isTableDownloading: true,\n tableDownloadProgress: 0,\n tableDownloadEstimatedTime: null,\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.INITIATING,\n });\n } else {\n log.error(\n 'Attempted to handleDownloadTableStart for user without download CSV permission.'\n );\n }\n }\n\n handleDownloadTable(\n fileName: string,\n frozenTable: Table,\n tableSubscription: TableViewportSubscription,\n gridRanges: GridRange[]\n ): void {\n const { canDownloadCsv } = this.props;\n if (canDownloadCsv) {\n log.info(\n 'start table downloading',\n fileName,\n frozenTable,\n tableSubscription,\n gridRanges\n );\n this.setState(() => {\n if (this.tableSaver) {\n this.tableSaver.startDownload(\n fileName,\n frozenTable,\n tableSubscription,\n gridRanges\n );\n }\n return {\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING,\n };\n });\n } else {\n log.error(\n 'Attempted to handleDownloadTable for user without download CSV permission.'\n );\n }\n }\n\n handleCancelDownloadTable(): void {\n this.tableSaver?.cancelDownload();\n this.setState({ isTableDownloading: false });\n }\n\n handleDownloadProgressUpdate = throttle(\n (\n tableDownloadProgress: number,\n tableDownloadEstimatedTime: number | null\n ) => {\n const { tableDownloadStatus } = this.state;\n if (\n tableDownloadStatus === TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING\n ) {\n this.setState({\n tableDownloadProgress,\n tableDownloadEstimatedTime,\n });\n }\n },\n UPDATE_DOWNLOAD_THROTTLE\n );\n\n handleDownloadCompleted(): void {\n this.setState({\n isTableDownloading: false,\n tableDownloadProgress: 100,\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.FINISHED,\n });\n }\n\n handleDownloadCanceled(): void {\n this.setState({\n isTableDownloading: false,\n tableDownloadProgress: 0,\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.CANCELED,\n });\n }\n\n /**\n * Delete the specified ranges from the table.\n * @param ranges The ranges to delete\n */\n deleteRanges(ranges: GridRange[]): void {\n const { model } = this.props;\n this.pending.add(model.delete(ranges)).catch(e => {\n if (!PromiseUtils.isCanceled(e)) {\n log.error('Unable to delete ranges', ranges, e);\n }\n });\n }\n\n resetColumnSelection(): void {\n if (this.grid == null) {\n return;\n }\n const { isSelectingColumn } = this.props;\n if (isSelectingColumn) {\n const { columnAllowedCursor } = this.props;\n this.grid.setState({ cursor: columnAllowedCursor });\n } else {\n this.grid.setState({ cursor: null });\n this.setState({ hoverSelectColumn: null });\n }\n }\n\n resetGridViewState(forceUpdate = true): void {\n if (!this.grid) {\n return;\n }\n\n this.grid.clearSelectedRanges();\n this.grid.setViewState(\n { left: 0, top: 0, topOffset: 0, leftOffset: 0 },\n forceUpdate\n );\n }\n\n sendStateChange(): void {\n if (!this.grid) {\n return;\n }\n const { state: irisGridState } = this;\n const { state: gridState } = this.grid;\n const { onStateChange } = this.props;\n\n onStateChange(irisGridState, gridState);\n }\n\n handleOverflowClose(): void {\n this.setState({\n showOverflowModal: false,\n });\n }\n\n getColumnBoundingRect(): DOMRect {\n const { metrics, shownColumnTooltip } = this.state;\n assertNotNull(metrics);\n assertNotNull(shownColumnTooltip);\n const gridRect = this.gridWrapper?.getBoundingClientRect();\n const popperMargin = 20;\n assertNotNull(gridRect);\n const {\n columnHeaderHeight,\n visibleColumnXs,\n visibleColumnWidths,\n width,\n columnHeaderMaxDepth,\n } = metrics;\n const columnX = visibleColumnXs.get(shownColumnTooltip);\n const columnWidth = visibleColumnWidths.get(shownColumnTooltip);\n\n assertNotNull(columnX);\n assertNotNull(columnWidth);\n\n const left =\n gridRect.left +\n clamp(columnX + columnWidth / 2, popperMargin, width - popperMargin);\n\n return {\n top: gridRect.top + (columnHeaderMaxDepth - 1) * columnHeaderHeight,\n left:\n gridRect.left +\n clamp(columnX + columnWidth / 2, popperMargin, width - popperMargin),\n bottom: gridRect.top + columnHeaderMaxDepth * columnHeaderHeight,\n right:\n gridRect.left +\n clamp(columnX + columnWidth / 2, popperMargin, width - popperMargin) +\n 1,\n width: 1,\n height: columnHeaderHeight,\n x: left,\n y: gridRect.top,\n toJSON: () => {\n throw new Error('not implemented');\n },\n };\n }\n\n getOverflowButtonTooltip = memoize(\n (overflowButtonTooltipProps: CSSProperties): ReactNode => {\n if (overflowButtonTooltipProps == null) {\n return null;\n }\n\n const wrapperStyle: CSSProperties = {\n position: 'absolute',\n ...overflowButtonTooltipProps,\n pointerEvents: 'none',\n };\n\n const popperOptions: PopperOptions = {\n placement: 'left',\n modifiers: {\n flip: {\n behavior: ['left', 'right'],\n },\n },\n };\n\n return (\n <div style={wrapperStyle}>\n <Tooltip\n key={Date.now()}\n options={popperOptions}\n ref={this.handleTooltipRef}\n >\n View full contents\n </Tooltip>\n </div>\n );\n }\n );\n\n handleGotoRowSelectedRowNumberSubmit(): void {\n const { gotoRow: rowNumber } = this.state;\n this.focusRowInGrid(rowNumber);\n }\n\n focusRowInGrid(rowNumber: string): void {\n const { model } = this.props;\n const { rowCount } = model;\n this.setState({ gotoRow: rowNumber });\n if (rowNumber === '') {\n this.setState({ gotoRowError: '' });\n return;\n }\n const rowInt = parseInt(rowNumber, 10);\n if (rowInt > rowCount || rowInt < -rowCount) {\n this.setState({ gotoRowError: 'Invalid row index' });\n } else if (rowInt === 0) {\n this.setState({ gotoRowError: '' });\n this.grid?.setFocusRow(0);\n } else if (rowInt < 0) {\n this.setState({ gotoRowError: '' });\n this.grid?.setFocusRow(rowInt + rowCount);\n } else {\n this.grid?.setFocusRow(rowInt - 1);\n this.setState({ gotoRowError: '' });\n }\n }\n\n handleGotoRowSelectedRowNumberChanged(\n event: ChangeEvent<HTMLInputElement>\n ): void {\n const rowNumber = event.target.value;\n this.focusRowInGrid(rowNumber);\n }\n\n getColumnTooltip(\n visibleIndex: VisibleIndex,\n metrics: GridMetrics,\n model: IrisGridModel\n ): ReactNode {\n const {\n columnHeaderHeight,\n columnHeaderMaxDepth,\n visibleColumnXs,\n visibleColumnWidths,\n width,\n } = metrics;\n const columnX = visibleColumnXs.get(visibleIndex);\n const columnWidth = visibleColumnWidths.get(visibleIndex);\n\n if (columnX == null || columnWidth == null) {\n return null;\n }\n\n /**\n * Create a wrapper dom element, the size of the column header.\n * The wrapper acts as tooltip parent, the tooltip component\n * will trigger hide on mouseleave of wrapper or tooltip.\n * The wrapper should be bound to within the grid dimensions,\n * so popper only remains triggered while mouse is inside the panel.\n */\n const boundedLeft = Math.max(0, columnX);\n let boundedWidth = columnWidth;\n if (columnX + columnWidth > width) {\n // column is extending past right edge\n boundedWidth = width - columnX;\n } else if (columnX < 0) {\n // column is extending past left edge\n boundedWidth = columnWidth - Math.abs(columnX);\n }\n\n const wrapperStyle: CSSProperties = {\n position: 'absolute',\n top: (columnHeaderMaxDepth - 1) * columnHeaderHeight,\n left: boundedLeft,\n width: boundedWidth,\n height: columnHeaderHeight,\n pointerEvents: 'none',\n };\n\n /**\n * Because the popper parent wrapper center is no longer the same as\n * the column label center, we create a popper virtual ref, to handle\n * positioning and keep the popper centered on the label. Creates a\n * 1px x headerHeight virtual object, placed centered on the column\n * label, clamped to 0 + margin to width - margin. We add a margin,\n * otherwise the arrow wants to escape the boundary.\n */\n const virtualReference: ReferenceObject = {\n clientWidth: 1,\n clientHeight: columnHeaderHeight,\n getBoundingClientRect: this.getColumnBoundingRect,\n };\n\n const popperOptions: PopperOptions = {\n placement: 'bottom',\n modifiers: {\n flip: {\n behavior: ['bottom', 'top'],\n },\n },\n };\n\n const modelColumn = this.getModelColumn(visibleIndex);\n if (modelColumn == null) return null;\n\n const column = model.columns[modelColumn];\n if (column == null) return null;\n\n return (\n <div style={wrapperStyle}>\n <Tooltip\n key={column.name}\n timeout={400}\n interactive\n options={popperOptions}\n ref={this.handleTooltipRef}\n referenceObject={virtualReference}\n onExited={() => {\n this.setState({ shownColumnTooltip: null });\n }}\n >\n <ColumnStatistics\n model={model}\n column={column}\n onStatistics={() => {\n this.tooltip?.update();\n }}\n />\n </Tooltip>\n </div>\n );\n }\n\n render(): ReactElement | null {\n const {\n children,\n customFilters,\n getDownloadWorker,\n isSelectingColumn,\n isStuckToBottom,\n isStuckToRight,\n model,\n name,\n onlyFetchVisibleColumns,\n alwaysFetchColumns,\n advancedSettings,\n onAdvancedSettingsChange,\n canDownloadCsv,\n onCreateChart,\n } = this.props;\n const {\n metricCalculator,\n metrics,\n isFilterBarShown,\n isSelectingPartition,\n isMenuShown,\n isReady,\n copyOperation,\n focusedFilterBarColumn,\n loadingText,\n loadingScrimProgress,\n loadingSpinnerShown,\n keyHandlers,\n mouseHandlers,\n shownColumnTooltip,\n hoverAdvancedFilter,\n shownAdvancedFilter,\n hoverSelectColumn,\n quickFilters,\n advancedFilters,\n partition,\n partitionFilters,\n partitionTable,\n partitionColumn,\n searchFilter,\n selectDistinctColumns,\n\n movedColumns,\n movedRows,\n\n formatter,\n conditionalFormats,\n conditionalFormatPreview,\n conditionalFormatEditIndex,\n\n sorts,\n reverseType,\n customColumns,\n\n selectedRanges,\n isTableDownloading,\n tableDownloadStatus,\n tableDownloadProgress,\n tableDownloadEstimatedTime,\n\n showSearchBar,\n searchValue,\n selectedSearchColumns,\n invertSearchColumns,\n\n aggregationSettings,\n selectedAggregation,\n rollupConfig,\n openOptions,\n pendingSavePromise,\n pendingSaveError,\n pendingRowCount,\n pendingDataErrors,\n pendingDataMap,\n toastMessage,\n frozenColumns,\n showOverflowModal,\n overflowText,\n overflowButtonTooltipProps,\n isGotoRowShown,\n gotoRow,\n gotoRowError,\n } = this.state;\n if (!isReady) {\n return null;\n }\n\n const theme = this.getTheme();\n\n const filter = this.getCachedFilter(\n customFilters,\n quickFilters,\n advancedFilters,\n partitionFilters,\n searchFilter\n );\n\n const userColumnWidths = metricCalculator.getUserColumnWidths();\n const stateOverride = this.getCachedStateOverride(\n hoverSelectColumn,\n isFilterBarShown,\n isSelectingColumn,\n loadingScrimProgress,\n quickFilters,\n advancedFilters,\n sorts,\n reverseType,\n rollupConfig,\n isMenuShown\n );\n const top = metrics ? metrics.top : 0;\n const bottom = metrics ? metrics.bottomViewport : 0;\n let left = null;\n let right = null;\n if (onlyFetchVisibleColumns) {\n left = metrics ? metrics.left : 0;\n right = metrics ? metrics.right : 0;\n }\n const isVisible =\n metrics != null && metrics.width > 0 && metrics.height > 0;\n const isRollup = (rollupConfig?.columns?.length ?? 0) > 0;\n\n let focusField = null;\n\n const debounceMs = metrics\n ? Math.min(\n Math.max(IrisGrid.minDebounce, Math.round(metrics.rowCount / 200)),\n IrisGrid.maxDebounce\n )\n : IrisGrid.maxDebounce;\n\n if (isFilterBarShown && focusedFilterBarColumn != null && metrics != null) {\n const {\n gridX,\n gridY,\n visibleColumnXs,\n visibleColumnWidths,\n width,\n } = metrics;\n const columnX = visibleColumnXs.get(focusedFilterBarColumn);\n const columnWidth = visibleColumnWidths.get(focusedFilterBarColumn);\n if (columnX != null && columnWidth != null) {\n const x = gridX + columnX;\n const y = gridY - (theme.filterBarHeight ?? 0);\n const fieldWidth = columnWidth + 1; // cover right border\n const fieldHeight = (theme.filterBarHeight ?? 0) - 1; // remove bottom border\n const style = {\n top: y,\n left: x,\n minWidth: Math.min(fieldWidth, width - x), // Don't cause overflow\n height: fieldHeight,\n };\n let value = '';\n let isValid = true;\n const modelColumn = this.getModelColumn(focusedFilterBarColumn);\n assertNotNull(modelColumn);\n const quickFilter = quickFilters.get(modelColumn);\n const advancedFilter = advancedFilters.get(modelColumn);\n if (quickFilter != null) {\n value = quickFilter.text;\n isValid = quickFilter.filter != null;\n }\n const isBarFiltered =\n quickFilters.size !== 0 || advancedFilters.size !== 0;\n focusField = (\n <FilterInputField\n ref={this.filterInputRef}\n style={style}\n className={classNames({\n error: !isValid,\n active: value !== '' || advancedFilter != null,\n 'iris-grid-has-filter': isBarFiltered,\n })}\n isAdvancedFilterSet={advancedFilter != null}\n onAdvancedFiltersTriggered={() => {\n this.setState({ shownAdvancedFilter: focusedFilterBarColumn });\n }}\n key={focusedFilterBarColumn}\n onChange={this.handleFilterBarChange}\n onDone={this.handleFilterBarDone}\n onTab={this.handleFilterBarTab}\n onContextMenu={this.grid?.handleContextMenu}\n debounceMs={debounceMs}\n value={value}\n />\n );\n }\n }\n\n let loadingElement = null;\n if (loadingText != null) {\n const loadingStatus = (\n <div className=\"iris-grid-loading-status\">\n <div\n className={classNames('iris-grid-loading-status-bar', {\n show: loadingSpinnerShown,\n })}\n >\n {loadingText}\n </div>\n <button\n type=\"button\"\n onClick={this.handleCancel}\n className={classNames('iris-grid-btn-cancel', {\n show: loadingSpinnerShown,\n })}\n >\n <FontAwesomeIcon icon={vsClose} transform=\"down-1\" />\n Cancel\n </button>\n </div>\n );\n const gridY = metrics ? metrics.gridY : 0;\n loadingElement = (\n <div className=\"iris-grid-loading\" style={{ top: gridY }}>\n {loadingStatus}\n </div>\n );\n }\n\n let columnTooltip: React.ReactNode = null;\n if (shownColumnTooltip != null && metrics) {\n columnTooltip = this.getColumnTooltip(shownColumnTooltip, metrics, model);\n // #510 We may need to update the position of the tooltip if it's already opened and columns are resized\n this.tooltip?.update();\n }\n\n const filterBar = [];\n if (metrics && isFilterBarShown) {\n const {\n gridX,\n gridY,\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths,\n } = metrics;\n const { filterBarHeight } = theme;\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const columnIndex = visibleColumns[i];\n\n const columnX = visibleColumnXs.get(columnIndex);\n const columnWidth = visibleColumnWidths.get(columnIndex);\n const modelColumn = this.getModelColumn(columnIndex);\n if (modelColumn != null) {\n const isFilterable = model.isFilterable(modelColumn);\n if (\n isFilterable &&\n columnX != null &&\n columnWidth != null &&\n columnWidth > 0\n ) {\n const x = gridX + columnX + columnWidth - 24;\n const y = gridY - (filterBarHeight ?? 0) + 2; // 2 acts as top margin for the button\n const style: CSSProperties = {\n position: 'absolute',\n top: y,\n left: x,\n };\n const advancedFilter = advancedFilters.get(modelColumn);\n const isFilterSet = advancedFilter != null;\n const isFilterVisible =\n columnIndex === hoverAdvancedFilter ||\n columnIndex === focusedFilterBarColumn ||\n isFilterSet;\n const element = (\n <div\n className={classNames('advanced-filter-button-container', {\n hidden: !isFilterVisible,\n })}\n key={columnIndex}\n style={style}\n >\n {isFilterVisible && (\n <Button\n kind=\"ghost\"\n className={classNames(\n 'btn-link-icon advanced-filter-button',\n {\n 'filter-set': isFilterSet,\n }\n )}\n onClick={() => {\n this.setState({ shownAdvancedFilter: columnIndex });\n }}\n onContextMenu={event => {\n this.grid?.handleContextMenu(event);\n }}\n onMouseEnter={() => {\n this.setState({ hoverAdvancedFilter: columnIndex });\n }}\n onMouseLeave={() => {\n this.setState({ hoverAdvancedFilter: null });\n }}\n >\n <div className=\"fa-layers\">\n <FontAwesomeIcon\n icon={dhFilterFilled}\n className=\"filter-solid\"\n />\n <FontAwesomeIcon\n icon={vsFilter}\n className=\"filter-light\"\n />\n </div>\n </Button>\n )}\n </div>\n );\n filterBar.push(element);\n }\n }\n }\n }\n const advancedFilterMenus = [];\n if (metrics) {\n const {\n gridX,\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths,\n columnHeaderHeight,\n } = metrics;\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const columnIndex = visibleColumns[i];\n const columnX = visibleColumnXs.get(columnIndex);\n const columnWidth = visibleColumnWidths.get(columnIndex);\n if (columnX != null && columnWidth != null && columnWidth > 0) {\n const xColumnHeader = gridX + columnX;\n const xFilterBar = gridX + columnX + columnWidth - 20;\n const style: CSSProperties = isFilterBarShown\n ? {\n position: 'absolute',\n top: columnHeaderHeight,\n left: xFilterBar,\n width: 20,\n height: theme.filterBarHeight,\n }\n : {\n position: 'absolute',\n top: 0,\n left: xColumnHeader,\n width: columnWidth,\n height: columnHeaderHeight,\n };\n const modelColumn = this.getModelColumn(columnIndex);\n if (modelColumn != null) {\n const column = model.columns[modelColumn];\n const advancedFilter = advancedFilters.get(modelColumn);\n const { options: advancedFilterOptions } = advancedFilter || {};\n const sort = TableUtils.getSortForColumn(model.sort, modelColumn);\n const sortDirection = sort ? sort.direction : null;\n const element = (\n <div\n key={columnIndex}\n className=\"advanced-filter-menu-container\"\n style={style}\n >\n <Popper\n className=\"advanced-filter-menu-popper\"\n onEntered={this.getAdvancedMenuOpenedHandler(columnIndex)}\n onExited={() => {\n this.handleAdvancedMenuClosed(columnIndex);\n }}\n isShown={shownAdvancedFilter === columnIndex}\n interactive\n closeOnBlur\n options={{\n positionFixed: true,\n }}\n >\n {this.getCachedAdvancedFilterMenuActions(\n model,\n column,\n advancedFilterOptions,\n sortDirection,\n formatter\n )}\n </Popper>\n </div>\n );\n advancedFilterMenus.push(element);\n }\n }\n }\n }\n\n const optionItems = this.getCachedOptionItems(\n onCreateChart !== undefined && model.isChartBuilderAvailable,\n model.isCustomColumnsAvailable,\n model.isFormatColumnsAvailable,\n model.isRollupAvailable,\n model.isTotalsAvailable,\n model.isSelectDistinctAvailable,\n model.isExportAvailable,\n this.toggleFilterBarAction,\n this.toggleSearchBarAction,\n this.toggleGotoRowAction,\n isFilterBarShown,\n showSearchBar,\n canDownloadCsv,\n this.isTableSearchAvailable(),\n isGotoRowShown,\n advancedSettings.size > 0\n );\n\n const openOptionsStack = openOptions.map(option => {\n switch (option.type) {\n case OptionType.CHART_BUILDER:\n return (\n <ChartBuilder\n model={model}\n onChange={this.handleChartChange}\n onSubmit={this.handleChartCreate}\n key={OptionType.CHART_BUILDER}\n />\n );\n case OptionType.VISIBILITY_ORDERING_BUILDER:\n return (\n <VisibilityOrderingBuilder\n model={model}\n movedColumns={movedColumns}\n userColumnWidths={userColumnWidths}\n onColumnVisibilityChanged={this.handleColumnVisibilityChanged}\n onMovedColumnsChanged={this.handleMovedColumnsChanged}\n key={OptionType.VISIBILITY_ORDERING_BUILDER}\n />\n );\n case OptionType.CONDITIONAL_FORMATTING:\n return (\n <ConditionalFormattingMenu\n rules={conditionalFormats}\n onChange={this.handleConditionalFormatsChange}\n onCreate={this.handleConditionalFormatCreate}\n onSelect={this.handleConditionalFormatEdit}\n />\n );\n case OptionType.CONDITIONAL_FORMATTING_EDIT:\n assertNotNull(model.columns);\n assertNotNull(this.handleConditionalFormatEditorUpdate);\n return (\n <ConditionalFormatEditor\n columns={model.columns}\n rule={conditionalFormatPreview}\n onUpdate={this.handleConditionalFormatEditorUpdate}\n onSave={this.handleConditionalFormatEditorSave}\n onCancel={this.handleConditionalFormatEditorCancel}\n />\n );\n case OptionType.CUSTOM_COLUMN_BUILDER:\n return (\n <CustomColumnBuilder\n model={model}\n customColumns={customColumns}\n onSave={this.handleUpdateCustomColumns}\n onCancel={this.handleMenuBack}\n key={OptionType.CUSTOM_COLUMN_BUILDER}\n />\n );\n case OptionType.ROLLUP_ROWS:\n return (\n <RollupRows\n model={model}\n onChange={this.handleRollupChange}\n config={rollupConfig}\n key={OptionType.ROLLUP_ROWS}\n />\n );\n case OptionType.AGGREGATIONS:\n return (\n <Aggregations\n settings={aggregationSettings}\n isRollup={isRollup}\n onChange={this.handleAggregationsChange}\n onEdit={this.handleAggregationEdit}\n />\n );\n case OptionType.AGGREGATION_EDIT:\n return (\n selectedAggregation && (\n <AggregationEdit\n aggregation={selectedAggregation}\n columns={model.originalColumns}\n onChange={this.handleAggregationChange}\n />\n )\n );\n case OptionType.TABLE_EXPORTER:\n return (\n <TableCsvExporter\n model={model}\n name={name}\n isDownloading={isTableDownloading}\n tableDownloadStatus={tableDownloadStatus}\n tableDownloadProgress={tableDownloadProgress}\n tableDownloadEstimatedTime={\n tableDownloadEstimatedTime ?? undefined\n }\n onDownload={this.handleDownloadTable}\n onDownloadStart={this.handleDownloadTableStart}\n onCancel={this.handleCancelDownloadTable}\n selectedRanges={selectedRanges}\n key={OptionType.TABLE_EXPORTER}\n />\n );\n case OptionType.SELECT_DISTINCT:\n return (\n <SelectDistinctBuilder\n model={model}\n selectDistinctColumns={selectDistinctColumns}\n onChange={this.handleSelectDistinctChanged}\n />\n );\n case OptionType.ADVANCED_SETTINGS:\n return (\n <AdvancedSettingsMenu\n items={advancedSettings}\n onChange={onAdvancedSettingsChange}\n />\n );\n\n default:\n throw Error(`Unexpected option type ${option.type}`);\n }\n });\n\n const hiddenColumns = this.getCachedHiddenColumns(\n IrisGridUtils.getHiddenColumns(userColumnWidths)\n );\n\n return (\n <div className=\"iris-grid\" role=\"presentation\">\n <div className=\"iris-grid-column\">\n {children != null && <div className=\"iris-grid-bar\">{children}</div>}\n <CSSTransition\n in={isSelectingPartition}\n timeout={ThemeExport.transitionSlowMs}\n classNames=\"iris-grid-bar-horizontal\"\n onEnter={this.handleAnimationStart}\n onEntered={this.handleAnimationEnd}\n onExit={this.handleAnimationStart}\n onExited={this.handleAnimationEnd}\n mountOnEnter\n unmountOnExit\n >\n <div className=\"iris-grid-partition-selector-wrapper iris-grid-bar iris-grid-bar-primary\">\n {partitionTable && partitionColumn && (\n <IrisGridPartitionSelector\n table={partitionTable}\n getFormattedString={(\n value: unknown,\n type: string,\n stringName: string\n ) => model.displayString(value, type, stringName)}\n columnName={partitionColumn.name}\n partition={partition}\n onChange={this.handlePartitionChange}\n onFetchAll={this.handlePartitionFetchAll}\n onAppend={this.handlePartitionAppend}\n onDone={this.handlePartitionDone}\n />\n )}\n </div>\n </CSSTransition>\n <CSSTransition\n in={showSearchBar}\n timeout={ThemeExport.transitionSlowMs}\n classNames=\"iris-grid-bar-horizontal\"\n onEnter={this.handleAnimationStart}\n onEntered={this.handleAnimationEnd}\n onExit={this.handleAnimationStart}\n onExited={this.handleAnimationEnd}\n mountOnEnter\n unmountOnExit\n >\n <div className=\"iris-grid-bar\">\n <CrossColumnSearch\n value={searchValue}\n selectedColumns={selectedSearchColumns}\n invertSelection={invertSearchColumns}\n onChange={this.handleCrossColumnSearch}\n columns={model.columns}\n ref={this.crossColumnRef}\n />\n </div>\n </CSSTransition>\n <div\n className=\"grid-wrapper\"\n ref={gridWrapper => {\n this.gridWrapper = gridWrapper;\n }}\n >\n <Grid\n ref={grid => {\n this.grid = grid;\n }}\n isStickyBottom={!isEditableGridModel(model) || !model.isEditable}\n isStuckToBottom={isStuckToBottom}\n isStuckToRight={isStuckToRight}\n metricCalculator={metricCalculator}\n model={model}\n keyHandlers={keyHandlers}\n mouseHandlers={mouseHandlers}\n movedColumns={movedColumns}\n movedRows={movedRows}\n onError={this.handleGridError}\n onViewChanged={this.handleViewChanged}\n onSelectionChanged={this.handleSelectionChanged}\n onMovedColumnsChanged={this.handleMovedColumnsChanged}\n renderer={this.renderer}\n stateOverride={stateOverride}\n theme={theme}\n />\n <IrisGridCellOverflowModal\n isOpen={showOverflowModal}\n text={overflowText}\n onClose={this.handleOverflowClose}\n />\n {isVisible && (\n <IrisGridModelUpdater\n model={model}\n modelColumns={model.columns}\n top={top}\n bottom={bottom}\n left={left}\n right={right}\n filter={filter}\n formatter={formatter}\n sorts={sorts}\n reverseType={reverseType}\n movedColumns={movedColumns}\n customColumns={customColumns}\n hiddenColumns={hiddenColumns}\n alwaysFetchColumns={this.getAlwaysFetchColumns(\n alwaysFetchColumns,\n model.columns,\n movedColumns,\n model.floatingLeftColumnCount,\n model.floatingRightColumnCount,\n this.grid?.state.draggingColumn?.range\n )}\n formatColumns={this.getCachedPreviewFormatColumns(\n this.getCachedModelColumns(model, customColumns),\n conditionalFormats,\n conditionalFormatPreview,\n // Disable the preview format when we press Back on the format edit page\n openOptions[openOptions.length - 1]?.type ===\n OptionType.CONDITIONAL_FORMATTING_EDIT\n ? conditionalFormatEditIndex ?? undefined\n : undefined\n )}\n rollupConfig={this.getModelRollupConfig(\n model.originalColumns,\n rollupConfig,\n aggregationSettings\n )}\n totalsConfig={this.getModelTotalsConfig(\n model.columns,\n rollupConfig,\n aggregationSettings\n )}\n selectDistinctColumns={selectDistinctColumns}\n pendingRowCount={pendingRowCount}\n pendingDataMap={pendingDataMap}\n frozenColumns={frozenColumns}\n />\n )}\n {!isMenuShown && (\n <div className=\"grid-settings-button\">\n <Button\n kind=\"ghost\"\n data-testid={`btn-iris-grid-settings-button-${name}`}\n onClick={this.handleMenu}\n icon={<FontAwesomeIcon icon={vsMenu} transform=\"up-1\" />}\n tooltip=\"Table Options\"\n />\n </div>\n )}\n {focusField}\n {loadingElement}\n {filterBar}\n {columnTooltip}\n {advancedFilterMenus}\n {overflowButtonTooltipProps &&\n this.getOverflowButtonTooltip(overflowButtonTooltipProps)}\n </div>\n <GotoRow\n model={model}\n isShown={isGotoRowShown}\n gotoRow={gotoRow}\n gotoRowError={gotoRowError}\n onSubmit={this.handleGotoRowSelectedRowNumberSubmit}\n onGotoRowNumberChanged={this.handleGotoRowSelectedRowNumberChanged}\n onClose={this.handleGotoRowClosed}\n onEntering={this.handleAnimationStart}\n onEntered={this.handleAnimationEnd}\n onExiting={() => {\n this.handleAnimationStart();\n this.focus();\n }}\n onExited={this.handleAnimationEnd}\n />\n\n <PendingDataBottomBar\n error={pendingSaveError}\n isSaving={pendingSavePromise != null}\n saveTooltip={`Commit (${this.commitAction.shortcut.getDisplayText()})`}\n discardTooltip={`Discard (${this.discardAction.shortcut.getDisplayText()})`}\n pendingDataErrors={pendingDataErrors}\n pendingDataMap={pendingDataMap}\n onEntering={this.handleAnimationStart}\n onEntered={this.handleAnimationEnd}\n onExiting={this.handleAnimationStart}\n onExited={this.handleAnimationEnd}\n onSave={this.handlePendingCommitClicked}\n onDiscard={this.handlePendingDiscardClicked}\n />\n <ToastBottomBar>{toastMessage}</ToastBottomBar>\n <IrisGridCopyHandler\n model={model}\n copyOperation={copyOperation ?? undefined}\n onEntering={this.handleAnimationStart}\n onEntered={this.handleAnimationEnd}\n onExiting={this.handleAnimationStart}\n onExited={this.handleAnimationEnd}\n />\n <TableSaver\n ref={tableSaver => {\n this.tableSaver = tableSaver;\n }}\n getDownloadWorker={getDownloadWorker}\n onDownloadCompleted={this.handleDownloadCompleted}\n onDownloadCanceled={this.handleDownloadCanceled}\n onDownloadProgressUpdate={this.handleDownloadProgressUpdate}\n isDownloading={\n tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING\n }\n formatter={formatter}\n />\n </div>\n <CSSTransition\n in={isMenuShown}\n timeout={ThemeExport.transitionMidMs}\n classNames=\"slide-left\"\n onEntering={this.handleAnimationStart}\n onEntered={this.handleAnimationEnd}\n onExiting={this.handleAnimationStart}\n onExited={this.handleAnimationEnd}\n mountOnEnter\n unmountOnExit\n >\n <div className=\"table-sidebar\">\n <Stack>\n <Page title=\"Table Options\" onClose={this.handleMenuClose}>\n <Menu\n onSelect={i => this.handleMenuSelect(optionItems[i])}\n items={optionItems}\n />\n </Page>\n {openOptionsStack.map((option, i) => (\n <Page\n title={openOptions[i].title}\n onBack={this.handleMenuBack}\n onClose={this.handleMenuClose}\n key={openOptions[i].type}\n >\n {option}\n </Page>\n ))}\n </Stack>\n </div>\n </CSSTransition>\n <ContextActions actions={this.contextActions} />\n </div>\n );\n }\n}\n\nexport default IrisGrid;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"IrisGrid.js","names":["React","Component","memoize","classNames","CSSTransition","PropTypes","deepEqual","Log","FontAwesomeIcon","ContextActionUtils","ContextActions","Stack","Menu","Page","Popper","ThemeExport","Tooltip","Button","Grid","GridRange","GridUtils","isEditableGridModel","isExpandableGridModel","dhEye","dhFilterFilled","dhGraphLineUp","dhTriangleDownSquare","vsClose","vsCloudDownload","vsEdit","vsFilter","vsMenu","vsReply","vsRuby","vsSearch","vsSplitHorizontal","vsSymbolOperator","vsTools","dh","DateUtils","Formatter","FormatterUtils","TableUtils","assertNotNull","Pending","PromiseUtils","ValidationError","throttle","debounce","clamp","getFormatColumns","PendingDataBottomBar","IrisGridCopyHandler","FilterInputField","ClearFilterKeyHandler","CopyKeyHandler","ReverseKeyHandler","IrisGridCellOverflowMouseHandler","IrisGridColumnSelectMouseHandler","IrisGridColumnTooltipMouseHandler","IrisGridContextMenuHandler","IrisGridDataSelectMouseHandler","IrisGridFilterMouseHandler","IrisGridSortMouseHandler","PendingMouseHandler","ToastBottomBar","IrisGridMetricCalculator","IrisGridModelUpdater","IrisGridRenderer","IrisGridTheme","ColumnStatistics","AdvancedFilterCreator","Aggregations","AggregationEdit","AggregationUtils","ChartBuilder","CustomColumnBuilder","OptionType","RollupRows","TableCsvExporter","TableSaver","VisibilityOrderingBuilder","IrisGridUtils","CrossColumnSearch","IrisGridModel","IrisGridPartitionSelector","SelectDistinctBuilder","AdvancedSettingsType","AdvancedSettingsMenu","SHORTCUTS","ConditionalFormattingMenu","ConditionalFormatEditor","IrisGridCellOverflowModal","GotoRow","log","module","UPDATE_DOWNLOAD_THROTTLE","SET_FILTER_DEBOUNCE","SET_CONDITIONAL_FORMAT_DEBOUNCE","DEFAULT_AGGREGATION_SETTINGS","Object","freeze","aggregations","showOnTop","UNFORMATTED_DATE_PATTERN","isEmptyConfig","advancedFilters","aggregationSettings","customColumns","quickFilters","reverseType","rollupConfig","searchFilter","selectDistinctColumns","sorts","size","length","REVERSE_TYPE","NONE","IrisGrid","makeQuickFilter","column","text","timeZone","err","error","constructor","props","handleAdvancedMenuOpened","bind","max","model","advancedFilterOptions","sortDirection","formatter","handleAdvancedFilterChange","handleAdvancedFilterSortChange","handleAdvancedFilterDone","isChartBuilderAvailable","isCustomColumnsAvailable","isFormatColumnsAvailable","isRollupAvailable","isTotalsAvailable","isSelectDistinctAvailable","isExportAvailable","toggleFilterBarAction","toggleSearchBarAction","toggleGotoRowAction","isFilterBarShown","showSearchBar","canDownloadCsv","canToggleSearch","showGotoRow","hasAdvancedSettings","optionItems","push","type","CHART_BUILDER","title","icon","VISIBILITY_ORDERING_BUILDER","CONDITIONAL_FORMATTING","CUSTOM_COLUMN_BUILDER","ROLLUP_ROWS","AGGREGATIONS","SELECT_DISTINCT","TABLE_EXPORTER","ADVANCED_SETTINGS","QUICK_FILTERS","subtitle","shortcut","getDisplayText","isOn","onChange","action","SEARCH_BAR","GOTO","hiddenColumns","normalizer","join","columns","aggregationMap","forEach","operation","selected","invert","getOperationColumnNames","operationMap","filter","a","isRollupOperation","name","newOperations","map","o","rules","rulesParam","preview","editIndex","debug","undefined","getCachedFormatColumns","originalColumns","config","getModelRollupConfig","getOperationMap","operationOrder","getOperationOrder","hoverSelectColumn","isSelectingColumn","loadingScrimProgress","isMenuShown","customFilters","partitionFilters","getFiltersFromFilterMap","theme","isEditable","floatingRowCount","autoSelectRow","rowFooterWidth","alwaysFetchColumns","movedColumns","floatingLeftColumnCount","floatingRightColumnCount","draggingRange","floatingColumns","i","getModelIndex","columnSet","Set","searchValue","selectedSearchColumns","invertSearchColumns","createSearchFilter","setState","conditionalFormatPreview","tableDownloadProgress","tableDownloadEstimatedTime","tableDownloadStatus","state","DOWNLOAD_STATUS","DOWNLOADING","overflowButtonTooltipProps","wrapperStyle","position","pointerEvents","popperOptions","placement","modifiers","flip","behavior","Date","now","handleTooltipRef","handleGotoRowOpened","handleGotoRowClosed","handleAdvancedMenuClosed","handleAggregationChange","handleAggregationsChange","handleAggregationEdit","handleAnimationLoop","handleAnimationStart","handleAnimationEnd","handleChartChange","handleChartCreate","handleGridError","handleFilterBarChange","handleFilterBarDone","handleFilterBarTab","handleCancel","handleMenu","handleMenuClose","handleMenuSelect","handleMenuBack","handleRequestFailed","handleSelectionChanged","handleMovedColumnsChanged","handleUpdate","handleViewChanged","handleFormatSelection","handleConditionalFormatCreate","handleConditionalFormatEdit","handleConditionalFormatsChange","handleConditionalFormatEditorSave","handleConditionalFormatEditorCancel","handleUpdateCustomColumns","handleCustomColumnsChanged","handleSelectDistinctChanged","handlePendingDataUpdated","handlePendingCommitClicked","handlePendingDiscardClicked","handleGotoRowSelectedRowNumberSubmit","focusRowInGrid","handleDownloadTable","handleDownloadTableStart","handleCancelDownloadTable","handleDownloadCanceled","handleDownloadCompleted","handlePartitionAppend","handlePartitionChange","handlePartitionFetchAll","handlePartitionDone","handleColumnVisibilityChanged","handleCrossColumnSearch","handleRollupChange","handleOverflowClose","getColumnBoundingRect","handleGotoRowSelectedRowNumberChanged","grid","gridWrapper","lastLoadedConfig","pending","globalColumnFormats","decimalFormatOptions","integerFormatOptions","truncateNumbersWithPound","renderer","tableSaver","crossColumnRef","createRef","isAnimating","filterInputRef","toggleFilterBar","TABLE","TOGGLE_QUICK_FILTER","toggleSearchBar","TOGGLE_SEARCH","toggleGotoRow","GOTO_ROW","discardAction","pendingDataMap","discardPending","catch","INPUT_TABLE","DISCARD","commitAction","pendingDataErrors","commitPending","COMMIT","contextActions","conditionalFormats","customColumnFormatMap","isSelectingPartition","movedColumnsProp","movedRows","movedRowsProp","partition","partitionColumn","userColumnWidths","userRowHeights","canCopy","frozenColumns","keyHandlers","mouseHandlers","metricCalculator","Map","searchColumns","focusedFilterBarColumn","metrics","partitionTable","shownAdvancedFilter","hoverAdvancedFilter","selectedRanges","copyOperation","loadingText","loadingSpinnerShown","shownColumnTooltip","conditionalFormatEditIndex","isTableDownloading","isReady","rollupSelectedColumns","selectedAggregation","openOptions","pendingRowCount","pendingSavePromise","pendingSaveError","toastMessage","showOverflowModal","overflowText","isGotoRowShown","gotoRow","gotoRowError","componentDidMount","find","c","isPartitionColumn","isFilterRequired","isValuesTableAvailable","loadPartitionsTable","initState","startListening","componentDidUpdate","prevProps","inputFilters","settings","stopListening","changedInputFilters","inputFilter","includes","advancedSettings","replaceExistingFilters","get","FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS","clearGridInputField","clearCrossColumSearch","startLoading","applyInputFilters","resetColumnSelection","updateFormatterSettings","updateSorts","loadingScrimStartTime","loadingScrimFinishTime","window","requestAnimationFrame","currentTime","totalTime","Math","min","debug2","sendStateChange","componentWillUnmount","cancel","updateSearchFilter","loadingTimer","clearTimeout","handleDownloadProgressUpdate","animationFrame","cancelAnimationFrame","getValueForCell","columnIndex","rowIndex","rawValue","modelColumn","getModelColumn","modelRow","getModelRow","value","valueForCell","isDateType","i18n","DateTimeFormat","format","TimeZone","getTimeZone","textForCell","modelColumns","modelRows","getTheme","getCachedTheme","floatingTopRowCount","floatingBottomRowCount","getVisibleColumn","modelIndex","getVisibleIndex","replaceExisting","newAdvancedFilters","newQuickFilters","isChanged","findIndex","columnName","columnType","delete","applyQuickFilter","trim","quickFilter","set","setAdvancedFilterMap","setAdvancedFilter","options","setQuickFilter","setFilterMap","filterMap","clearFiltersOnLinkerFilterUpdate","LINK_CHANGE_CLEARS_ALL_FILTERS","clearAllFilters","getColumnIndexByName","removeQuickFilter","isNull","filterValue","isTextType","FilterValue","ofString","ofNumber","eq","removeColumnFilter","current","setValue","rebuildFilters","key","makeAdvancedFilter","setFilters","forceUpdate","getColumnFormats","dateTimeFormatterOptions","getDateTimeFormatterOptions","defaultDecimalFormatOptions","defaultIntegerFormatOptions","isColumnFormatChanged","isDateFormattingChanged","isDecimalFormattingChanged","isIntegerFormattingChanged","isTruncateNumbersChanged","updateFormatter","updatedFormats","update","mergedColumnFormats","values","initFormatter","applyInputFiltersOnInit","inputFiltersWithValues","add","valuesTable","resolved","close","sort","desc","applySort","setViewport","data","getViewportData","rows","row","updatePartition","info","handleTableLoadError","partitionFilter","copyCell","String","copyToClipboard","e","copyRanges","ranges","includeHeaders","formatValues","getUserColumnWidths","boundedRanges","columnCount","rowCount","resetRanges","clearSelectedRanges","setViewState","top","minScrimTransitionTime","maxScrimTransitionTime","height","getBoundingClientRect","scrimTransitionTime","setTimeout","loadingSpinnerDelay","stopLoading","rollback","canRollback","addEventListener","EVENT","UPDATED","REQUEST_FAILED","COLUMNS_CHANGED","PENDING_DATA_UPDATED","removeEventListener","focus","focusFilterBar","isFilterable","left","rightVisible","lastLeft","metricState","getMetricState","newLeft","getLastLeft","leftOffset","lastFocusedFilterBarColumn","hideColumnByVisibleIndex","columnVisibleIndex","setColumnWidth","freezeColumnByColumnName","allFrozenColumns","visibleIndex","newMovedColumns","moveItem","unFreezeColumnByColumnName","frontColumns","modelIndexes","visibilityOption","VISIBILITY_OPTIONS","SHOW","resetColumnWidth","updateCanvasScale","updateCanvas","onPartitionAppend","isCanceled","onError","showAllColumns","entries","columnWidth","toggleSort","addToExisting","currentSorts","toggleSortForColumn","sortColumn","direction","none","isAbs","reverse","isReversible","focusIndex","isTableSearchAvailable","searchDisplayMode","layoutHints","SearchDisplayMode","SEARCH_DISPLAY_HIDE","SEARCH_DISPLAY_SHOW","Error","containsGridCellInputField","document","activeElement","classList","contains","newPendingSavePromise","then","selectColumn","onColumnSelected","selectData","groupedColumns","dataMap","isExpandable","isRowExpandable","isGrouped","onDataSelected","index","oldSort","getSortForColumn","newSort","descending","asc","setSortForColumn","onCreateChart","warn","setGridFocus","defocusInput","backward","selectedFormat","prevCustomColumnFormatMap","normalizedType","getNormalizedType","columnFormattingRule","makeColumnFormattingRule","stopPropagation","newOptions","pop","option","event","customEvent","detail","selectionEndRow","bottomViewport","bottomNonFloating","onSelectionChanged","onChangeApplied","tooltip","startTimer","CONDITIONAL_FORMATTING_EDIT","oldCustomColumns","customColumn","removedColumnNames","getRemovedCustomColumnNames","newSorts","removeSortsInColumns","removeFiltersInColumns","removeColumnFromMovedColumns","newSelectDistinctColumns","removeColumnsFromSelectDistinctColumns","aggregation","AGGREGATION_EDIT","resetGridViewState","columnNames","INITIATING","fileName","frozenTable","tableSubscription","gridRanges","startDownload","cancelDownload","FINISHED","CANCELED","deleteRanges","columnAllowedCursor","cursor","topOffset","irisGridState","gridState","onStateChange","gridRect","popperMargin","columnHeaderHeight","visibleColumnXs","visibleColumnWidths","width","columnHeaderMaxDepth","columnX","bottom","right","x","y","toJSON","rowNumber","rowInt","parseInt","setFocusRow","target","getColumnTooltip","boundedLeft","boundedWidth","abs","virtualReference","clientWidth","clientHeight","render","children","getDownloadWorker","isStuckToBottom","isStuckToRight","onlyFetchVisibleColumns","onAdvancedSettingsChange","getCachedFilter","stateOverride","getCachedStateOverride","isVisible","isRollup","focusField","debounceMs","minDebounce","round","maxDebounce","gridX","gridY","filterBarHeight","fieldWidth","fieldHeight","style","minWidth","isValid","advancedFilter","isBarFiltered","active","handleContextMenu","loadingElement","loadingStatus","show","columnTooltip","filterBar","visibleColumns","isFilterSet","isFilterVisible","element","hidden","advancedFilterMenus","xColumnHeader","xFilterBar","getAdvancedMenuOpenedHandler","positionFixed","getCachedAdvancedFilterMenuActions","getCachedOptionItems","openOptionsStack","handleConditionalFormatEditorUpdate","getCachedHiddenColumns","getHiddenColumns","transitionSlowMs","stringName","displayString","getAlwaysFetchColumns","draggingColumn","range","getCachedPreviewFormatColumns","getCachedModelColumns","getModelTotalsConfig","getOverflowButtonTooltip","transitionMidMs","columnSelectionValidator","columnNotAllowedCursor","onContextMenu","defaultDateTimeFormat","FULL_DATE_FORMAT","showTimeZone","showTSeparator","shape","defaultFormatString","string"],"sources":["../src/IrisGrid.tsx"],"sourcesContent":["import React, {\n ChangeEvent,\n Component,\n CSSProperties,\n ReactElement,\n ReactNode,\n} from 'react';\nimport memoize from 'memoizee';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport PropTypes from 'prop-types';\nimport deepEqual from 'deep-equal';\nimport Log from '@deephaven/log';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n ContextActionUtils,\n ContextActions,\n Stack,\n Menu,\n Page,\n Popper,\n ThemeExport,\n Tooltip,\n ContextAction,\n PopperOptions,\n ReferenceObject,\n Button,\n} from '@deephaven/components';\nimport {\n Grid,\n GridMetrics,\n GridMouseHandler,\n GridRange,\n GridRangeIndex,\n GridThemeType,\n GridUtils,\n KeyHandler,\n ModelIndex,\n ModelSizeMap,\n MoveOperation,\n VisibleIndex,\n GridState,\n isEditableGridModel,\n BoundedAxisRange,\n isExpandableGridModel,\n} from '@deephaven/grid';\nimport {\n dhEye,\n dhFilterFilled,\n dhGraphLineUp,\n dhTriangleDownSquare,\n vsClose,\n vsCloudDownload,\n vsEdit,\n vsFilter,\n vsMenu,\n vsReply,\n vsRuby,\n vsSearch,\n vsSplitHorizontal,\n vsSymbolOperator,\n vsTools,\n} from '@deephaven/icons';\nimport dh, {\n Column,\n CustomColumn,\n DateWrapper,\n FilterCondition,\n Sort,\n Table,\n TableViewportSubscription,\n} from '@deephaven/jsapi-shim';\nimport {\n DateUtils,\n Formatter,\n FormatterUtils,\n TableUtils,\n FormattingRule,\n ReverseType,\n RowDataMap,\n SortDirection,\n DateTimeColumnFormatterOptions,\n TableColumnFormat,\n Settings,\n} from '@deephaven/jsapi-utils';\nimport {\n assertNotNull,\n Pending,\n PromiseUtils,\n ValidationError,\n} from '@deephaven/utils';\nimport throttle from 'lodash.throttle';\nimport debounce from 'lodash.debounce';\nimport clamp from 'lodash.clamp';\nimport {\n FormattingRule as SidebarFormattingRule,\n getFormatColumns,\n} from './sidebar/conditional-formatting/ConditionalFormattingUtils';\nimport PendingDataBottomBar from './PendingDataBottomBar';\nimport IrisGridCopyHandler, { CopyOperation } from './IrisGridCopyHandler';\nimport FilterInputField from './FilterInputField';\nimport {\n ClearFilterKeyHandler,\n CopyKeyHandler,\n ReverseKeyHandler,\n} from './key-handlers';\nimport {\n IrisGridCellOverflowMouseHandler,\n IrisGridColumnSelectMouseHandler,\n IrisGridColumnTooltipMouseHandler,\n IrisGridContextMenuHandler,\n IrisGridDataSelectMouseHandler,\n IrisGridFilterMouseHandler,\n IrisGridSortMouseHandler,\n PendingMouseHandler,\n} from './mousehandlers';\nimport ToastBottomBar from './ToastBottomBar';\nimport IrisGridMetricCalculator from './IrisGridMetricCalculator';\nimport IrisGridModelUpdater from './IrisGridModelUpdater';\nimport IrisGridRenderer from './IrisGridRenderer';\nimport IrisGridTheme, { IrisGridThemeType } from './IrisGridTheme';\nimport ColumnStatistics from './ColumnStatistics';\nimport './IrisGrid.scss';\nimport AdvancedFilterCreator from './AdvancedFilterCreator';\nimport {\n Aggregations,\n AggregationEdit,\n AggregationUtils,\n ChartBuilder,\n CustomColumnBuilder,\n OptionType,\n RollupRows,\n TableCsvExporter,\n TableSaver,\n VisibilityOrderingBuilder,\n} from './sidebar';\nimport IrisGridUtils from './IrisGridUtils';\nimport CrossColumnSearch from './CrossColumnSearch';\nimport IrisGridModel from './IrisGridModel';\nimport IrisGridPartitionSelector from './IrisGridPartitionSelector';\nimport SelectDistinctBuilder from './sidebar/SelectDistinctBuilder';\nimport AdvancedSettingsType from './sidebar/AdvancedSettingsType';\nimport AdvancedSettingsMenu, {\n AdvancedSettingsMenuCallback,\n} from './sidebar/AdvancedSettingsMenu';\nimport SHORTCUTS from './IrisGridShortcuts';\nimport ConditionalFormattingMenu from './sidebar/conditional-formatting/ConditionalFormattingMenu';\n\nimport ConditionalFormatEditor from './sidebar/conditional-formatting/ConditionalFormatEditor';\nimport IrisGridCellOverflowModal from './IrisGridCellOverflowModal';\nimport GotoRow from './GotoRow';\nimport {\n Aggregation,\n AggregationSettings,\n} from './sidebar/aggregations/Aggregations';\nimport { ChartBuilderSettings } from './sidebar/ChartBuilder';\nimport AggregationOperation from './sidebar/aggregations/AggregationOperation';\nimport { UIRollupConfig } from './sidebar/RollupRows';\nimport { VisibilityOptionType } from './sidebar/VisibilityOrderingBuilder';\nimport {\n AdvancedFilterMap,\n ColumnName,\n QuickFilterMap,\n AggregationMap,\n OperationMap,\n Action,\n OptionItem,\n UITotalsTableConfig,\n InputFilter,\n PendingDataMap,\n AdvancedFilterOptions,\n} from './CommonTypes';\n\nconst log = Log.module('IrisGrid');\n\nconst UPDATE_DOWNLOAD_THROTTLE = 500;\n\nconst SET_FILTER_DEBOUNCE = 250;\n\nconst SET_CONDITIONAL_FORMAT_DEBOUNCE = 250;\n\nconst DEFAULT_AGGREGATION_SETTINGS = Object.freeze({\n aggregations: [],\n showOnTop: false,\n});\n\nconst UNFORMATTED_DATE_PATTERN = `yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS z`;\n\nfunction isEmptyConfig({\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverseType,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts,\n}: {\n advancedFilters: AdvancedFilterMap;\n aggregationSettings: AggregationSettings;\n customColumns: ColumnName[];\n quickFilters: QuickFilterMap;\n reverseType: ReverseType;\n rollupConfig?: UIRollupConfig;\n searchFilter?: FilterCondition;\n selectDistinctColumns: ColumnName[];\n sorts: Sort[];\n}) {\n return (\n advancedFilters.size === 0 &&\n aggregationSettings.aggregations.length === 0 &&\n customColumns.length === 0 &&\n quickFilters.size === 0 &&\n reverseType === TableUtils.REVERSE_TYPE.NONE &&\n rollupConfig == null &&\n searchFilter == null &&\n selectDistinctColumns.length === 0 &&\n sorts.length === 0\n );\n}\n\nexport type FilterMap = Map<\n ColumnName,\n { columnType: string; text: string; value: unknown }\n>;\nexport interface IrisGridProps {\n children: React.ReactNode;\n advancedFilters: AdvancedFilterMap;\n advancedSettings: Map<AdvancedSettingsType, boolean>;\n alwaysFetchColumns: ColumnName[];\n isFilterBarShown: boolean;\n applyInputFiltersOnInit: boolean;\n conditionalFormats: SidebarFormattingRule[];\n customColumnFormatMap: Map<ColumnName, FormattingRule>;\n movedColumns: MoveOperation[];\n movedRows: MoveOperation[];\n inputFilters: InputFilter[];\n customFilters: FilterCondition[];\n model: IrisGridModel;\n onCreateChart: (settings: ChartBuilderSettings, model: IrisGridModel) => void;\n onColumnSelected: (column: Column) => void;\n onError: (error: unknown) => void;\n onDataSelected: (index: ModelIndex, map: Record<ColumnName, unknown>) => void;\n onStateChange: (irisGridState: IrisGridState, gridState: GridState) => void;\n onPartitionAppend: (partitionColumn: Column, value: string) => void;\n onAdvancedSettingsChange: AdvancedSettingsMenuCallback;\n partition: string;\n partitionColumn: Column;\n sorts: Sort[];\n reverseType: ReverseType;\n quickFilters: QuickFilterMap | null;\n customColumns: ColumnName[];\n selectDistinctColumns: ColumnName[];\n settings?: Settings;\n userColumnWidths: ModelSizeMap;\n userRowHeights: ModelSizeMap;\n onSelectionChanged: (gridRanges: GridRange[]) => void;\n rollupConfig?: UIRollupConfig;\n aggregationSettings: AggregationSettings;\n\n isSelectingColumn: boolean;\n isSelectingPartition: boolean;\n isStuckToBottom: boolean;\n isStuckToRight: boolean;\n\n // eslint-disable-next-line react/no-unused-prop-types\n columnSelectionValidator: (value: Column | null) => boolean;\n columnAllowedCursor: string;\n\n // eslint-disable-next-line react/no-unused-prop-types\n columnNotAllowedCursor: string;\n name: string;\n onlyFetchVisibleColumns: boolean;\n\n showSearchBar: boolean;\n searchValue: string;\n selectedSearchColumns: ColumnName[];\n invertSearchColumns: boolean;\n\n onContextMenu: (obj: {\n model: IrisGridModel;\n value: unknown;\n valueText: string | null;\n column: Column;\n rowIndex: GridRangeIndex;\n columnIndex: GridRangeIndex;\n modelRow: GridRangeIndex;\n modelColumn: GridRangeIndex;\n }) => ContextAction;\n\n pendingDataMap?: PendingDataMap;\n getDownloadWorker: () => Promise<ServiceWorker>;\n\n canCopy: boolean;\n canDownloadCsv: boolean;\n frozenColumns: ColumnName[];\n\n // Theme override for IrisGridTheme\n theme: GridThemeType;\n\n canToggleSearch: boolean;\n}\n\nexport interface IrisGridState {\n isFilterBarShown: boolean;\n isSelectingPartition: boolean;\n focusedFilterBarColumn: number | null;\n metricCalculator: IrisGridMetricCalculator;\n metrics?: GridMetrics;\n keyHandlers: KeyHandler[];\n mouseHandlers: GridMouseHandler[];\n\n partition: string;\n partitionColumn: Column;\n partitionTable: Table | null;\n partitionFilters: FilterCondition[];\n // setAdvancedFilter and setQuickFilter mutate the arguments\n // so we want to always use map copies from the state instead of props\n quickFilters: QuickFilterMap;\n advancedFilters: AdvancedFilterMap;\n shownAdvancedFilter: number | null;\n hoverAdvancedFilter: number | null;\n\n sorts: Sort[];\n reverseType: ReverseType;\n customColumns: ColumnName[];\n selectDistinctColumns: ColumnName[];\n\n // selected range in table\n selectedRanges: GridRange[];\n\n // Current ongoing copy operation\n copyOperation: CopyOperation | null;\n\n // The filter that is currently being applied. Reset after update is received\n loadingText: string | null;\n loadingScrimProgress: number | null;\n loadingSpinnerShown: boolean;\n\n movedColumns: MoveOperation[];\n movedRows: MoveOperation[];\n\n shownColumnTooltip: number | null;\n\n formatter: Formatter;\n isMenuShown: boolean;\n customColumnFormatMap: Map<ColumnName, FormattingRule>;\n\n conditionalFormats: SidebarFormattingRule[];\n conditionalFormatEditIndex: number | null;\n conditionalFormatPreview?: SidebarFormattingRule;\n\n // Column user is hovering over for selection\n hoverSelectColumn: GridRangeIndex;\n\n isTableDownloading: boolean;\n isReady: boolean;\n tableDownloadStatus: string;\n tableDownloadProgress: number;\n tableDownloadEstimatedTime: number | null;\n\n showSearchBar: boolean;\n searchFilter?: FilterCondition;\n searchValue: string;\n selectedSearchColumns: ColumnName[];\n invertSearchColumns: boolean;\n\n rollupConfig?: UIRollupConfig;\n rollupSelectedColumns: [];\n aggregationSettings: AggregationSettings;\n selectedAggregation: Aggregation | null;\n\n openOptions: OptionItem[];\n\n pendingRowCount: number;\n pendingDataMap: PendingDataMap;\n pendingDataErrors: Map<number, Error[]>;\n pendingSavePromise: Promise<void> | null;\n pendingSaveError: string | null;\n\n toastMessage: JSX.Element | null;\n frozenColumns: ColumnName[];\n showOverflowModal: boolean;\n overflowText: string;\n overflowButtonTooltipProps: CSSProperties | null;\n\n gotoRow: string;\n gotoRowError: string;\n isGotoRowShown: boolean;\n}\n\nexport class IrisGrid extends Component<IrisGridProps, IrisGridState> {\n static minDebounce = 150;\n\n static maxDebounce = 500;\n\n static loadingSpinnerDelay = 800;\n\n static defaultProps = {\n children: null,\n advancedFilters: new Map(),\n advancedSettings: new Map(),\n alwaysFetchColumns: [],\n conditionalFormats: [],\n customColumnFormatMap: new Map(),\n isFilterBarShown: false,\n applyInputFiltersOnInit: false,\n movedColumns: [],\n movedRows: [],\n inputFilters: [],\n customFilters: [],\n onCreateChart: undefined,\n onColumnSelected: (): void => undefined,\n onDataSelected: (): void => undefined,\n onError: (): void => undefined,\n onStateChange: (): void => undefined,\n onPartitionAppend: (): void => undefined,\n onAdvancedSettingsChange: (): void => undefined,\n partition: null,\n partitionColumn: null,\n quickFilters: new Map(),\n selectDistinctColumns: [],\n sorts: [],\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n customColumns: [],\n aggregationSettings: DEFAULT_AGGREGATION_SETTINGS,\n rollupConfig: undefined,\n userColumnWidths: new Map(),\n userRowHeights: new Map(),\n onSelectionChanged: (): void => undefined,\n isSelectingColumn: false,\n isSelectingPartition: false,\n isStuckToBottom: false,\n isStuckToRight: false,\n columnSelectionValidator: null,\n columnAllowedCursor: null,\n columnNotAllowedCursor: null,\n name: 'table',\n onlyFetchVisibleColumns: true,\n showSearchBar: false,\n searchValue: '',\n selectedSearchColumns: null,\n invertSearchColumns: true,\n onContextMenu: (): void => undefined,\n pendingDataMap: new Map(),\n getDownloadWorker: undefined,\n settings: {\n timeZone: 'America/New_York',\n defaultDateTimeFormat: DateUtils.FULL_DATE_FORMAT,\n showTimeZone: false,\n showTSeparator: true,\n truncateNumbersWithPound: false,\n formatter: [],\n decimalFormatOptions: PropTypes.shape({\n defaultFormatString: PropTypes.string,\n }),\n integerFormatOptions: PropTypes.shape({\n defaultFormatString: PropTypes.string,\n }),\n },\n canCopy: true,\n canDownloadCsv: true,\n frozenColumns: null,\n theme: IrisGridTheme,\n canToggleSearch: true,\n };\n\n static makeQuickFilter(\n column: Column,\n text: string,\n timeZone: string\n ): FilterCondition | null {\n try {\n return TableUtils.makeQuickFilter(column, text, timeZone);\n } catch (err) {\n log.error('Error creating quick filter', err);\n }\n return null;\n }\n\n constructor(props: IrisGridProps) {\n super(props);\n\n this.handleAdvancedFilterChange = this.handleAdvancedFilterChange.bind(\n this\n );\n this.handleAdvancedFilterSortChange = this.handleAdvancedFilterSortChange.bind(\n this\n );\n this.handleAdvancedFilterDone = this.handleAdvancedFilterDone.bind(this);\n this.handleAdvancedMenuOpened = this.handleAdvancedMenuOpened.bind(this);\n this.handleGotoRowOpened = this.handleGotoRowOpened.bind(this);\n this.handleGotoRowClosed = this.handleGotoRowClosed.bind(this);\n this.handleAdvancedMenuClosed = this.handleAdvancedMenuClosed.bind(this);\n this.handleAggregationChange = this.handleAggregationChange.bind(this);\n this.handleAggregationsChange = this.handleAggregationsChange.bind(this);\n this.handleAggregationEdit = this.handleAggregationEdit.bind(this);\n this.handleAnimationLoop = this.handleAnimationLoop.bind(this);\n this.handleAnimationStart = this.handleAnimationStart.bind(this);\n this.handleAnimationEnd = this.handleAnimationEnd.bind(this);\n this.handleChartChange = this.handleChartChange.bind(this);\n this.handleChartCreate = this.handleChartCreate.bind(this);\n this.handleGridError = this.handleGridError.bind(this);\n this.handleFilterBarChange = this.handleFilterBarChange.bind(this);\n this.handleFilterBarDone = this.handleFilterBarDone.bind(this);\n this.handleFilterBarTab = this.handleFilterBarTab.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleMenu = this.handleMenu.bind(this);\n this.handleMenuClose = this.handleMenuClose.bind(this);\n this.handleMenuSelect = this.handleMenuSelect.bind(this);\n this.handleMenuBack = this.handleMenuBack.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.handleSelectionChanged = this.handleSelectionChanged.bind(this);\n this.handleMovedColumnsChanged = this.handleMovedColumnsChanged.bind(this);\n this.handleUpdate = this.handleUpdate.bind(this);\n this.handleTooltipRef = this.handleTooltipRef.bind(this);\n this.handleViewChanged = this.handleViewChanged.bind(this);\n this.handleFormatSelection = this.handleFormatSelection.bind(this);\n this.handleConditionalFormatCreate = this.handleConditionalFormatCreate.bind(\n this\n );\n this.handleConditionalFormatEdit = this.handleConditionalFormatEdit.bind(\n this\n );\n this.handleConditionalFormatsChange = this.handleConditionalFormatsChange.bind(\n this\n );\n this.handleConditionalFormatEditorSave = this.handleConditionalFormatEditorSave.bind(\n this\n );\n this.handleConditionalFormatEditorCancel = this.handleConditionalFormatEditorCancel.bind(\n this\n );\n this.handleUpdateCustomColumns = this.handleUpdateCustomColumns.bind(this);\n this.handleCustomColumnsChanged = this.handleCustomColumnsChanged.bind(\n this\n );\n this.handleSelectDistinctChanged = this.handleSelectDistinctChanged.bind(\n this\n );\n this.handlePendingDataUpdated = this.handlePendingDataUpdated.bind(this);\n this.handlePendingCommitClicked = this.handlePendingCommitClicked.bind(\n this\n );\n this.handlePendingDiscardClicked = this.handlePendingDiscardClicked.bind(\n this\n );\n this.handleGotoRowSelectedRowNumberSubmit = this.handleGotoRowSelectedRowNumberSubmit.bind(\n this\n );\n this.focusRowInGrid = this.focusRowInGrid.bind(this);\n this.handleDownloadTable = this.handleDownloadTable.bind(this);\n this.handleDownloadTableStart = this.handleDownloadTableStart.bind(this);\n this.handleCancelDownloadTable = this.handleCancelDownloadTable.bind(this);\n this.handleDownloadCanceled = this.handleDownloadCanceled.bind(this);\n this.handleDownloadCompleted = this.handleDownloadCompleted.bind(this);\n this.handlePartitionAppend = this.handlePartitionAppend.bind(this);\n this.handlePartitionChange = this.handlePartitionChange.bind(this);\n this.handlePartitionFetchAll = this.handlePartitionFetchAll.bind(this);\n this.handlePartitionDone = this.handlePartitionDone.bind(this);\n this.handleColumnVisibilityChanged = this.handleColumnVisibilityChanged.bind(\n this\n );\n this.handleCrossColumnSearch = this.handleCrossColumnSearch.bind(this);\n this.handleRollupChange = this.handleRollupChange.bind(this);\n this.handleOverflowClose = this.handleOverflowClose.bind(this);\n this.getColumnBoundingRect = this.getColumnBoundingRect.bind(this);\n this.handleGotoRowSelectedRowNumberChanged = this.handleGotoRowSelectedRowNumberChanged.bind(\n this\n );\n\n this.grid = null;\n this.gridWrapper = null;\n this.lastLoadedConfig = null;\n this.pending = new Pending();\n this.globalColumnFormats = [];\n this.decimalFormatOptions = {};\n this.integerFormatOptions = {};\n this.truncateNumbersWithPound = false;\n\n // When the loading scrim started/when it should extend to the end of the screen.\n this.renderer = new IrisGridRenderer();\n this.tableSaver = null;\n this.crossColumnRef = React.createRef();\n this.isAnimating = false;\n this.filterInputRef = React.createRef();\n\n this.toggleFilterBarAction = {\n action: () => this.toggleFilterBar(),\n shortcut: SHORTCUTS.TABLE.TOGGLE_QUICK_FILTER,\n };\n\n this.toggleSearchBarAction = {\n action: () => this.toggleSearchBar(),\n shortcut: SHORTCUTS.TABLE.TOGGLE_SEARCH,\n };\n\n this.toggleGotoRowAction = {\n action: () => this.toggleGotoRow(),\n shortcut: SHORTCUTS.TABLE.GOTO_ROW,\n };\n\n this.discardAction = {\n action: () => {\n const { model } = this.props;\n if (\n isEditableGridModel(model) &&\n model.isEditable &&\n model.pendingDataMap.size > 0\n ) {\n this.discardPending().catch(log.error);\n }\n },\n shortcut: SHORTCUTS.INPUT_TABLE.DISCARD,\n };\n this.commitAction = {\n action: () => {\n const { model } = this.props;\n if (\n isEditableGridModel(model) &&\n model.isEditable &&\n model.pendingDataMap.size > 0 &&\n model.pendingDataErrors.size === 0\n ) {\n this.commitPending().catch(log.error);\n }\n },\n shortcut: SHORTCUTS.INPUT_TABLE.COMMIT,\n };\n this.contextActions = [\n this.toggleFilterBarAction,\n this.toggleSearchBarAction,\n this.toggleGotoRowAction,\n this.discardAction,\n this.commitAction,\n ];\n\n const {\n aggregationSettings,\n conditionalFormats,\n customColumnFormatMap,\n isFilterBarShown,\n isSelectingPartition,\n model,\n movedColumns: movedColumnsProp,\n movedRows: movedRowsProp,\n partition,\n partitionColumn,\n rollupConfig,\n userColumnWidths,\n userRowHeights,\n showSearchBar,\n searchValue,\n selectedSearchColumns,\n invertSearchColumns,\n advancedFilters,\n quickFilters,\n selectDistinctColumns,\n pendingDataMap,\n canCopy,\n frozenColumns,\n } = props;\n\n const keyHandlers: KeyHandler[] = [\n new ReverseKeyHandler(this),\n new ClearFilterKeyHandler(this),\n ];\n if (canCopy) {\n keyHandlers.push(new CopyKeyHandler(this));\n }\n const mouseHandlers = [\n new IrisGridCellOverflowMouseHandler(this),\n new IrisGridColumnSelectMouseHandler(this),\n new IrisGridColumnTooltipMouseHandler(this),\n new IrisGridSortMouseHandler(this),\n new IrisGridFilterMouseHandler(this),\n new IrisGridContextMenuHandler(this),\n new IrisGridDataSelectMouseHandler(this),\n new PendingMouseHandler(this),\n ];\n\n const movedColumns =\n movedColumnsProp.length > 0 ? movedColumnsProp : model.movedColumns;\n const movedRows =\n movedRowsProp.length > 0 ? movedRowsProp : model.movedRows;\n\n const metricCalculator = new IrisGridMetricCalculator({\n userColumnWidths: new Map(userColumnWidths),\n userRowHeights: new Map(userRowHeights),\n movedColumns,\n });\n const searchColumns = selectedSearchColumns ?? [];\n const searchFilter = CrossColumnSearch.createSearchFilter(\n searchValue,\n searchColumns,\n model.columns,\n invertSearchColumns\n );\n\n this.state = {\n isFilterBarShown,\n isSelectingPartition,\n focusedFilterBarColumn: null,\n metricCalculator,\n metrics: undefined,\n keyHandlers,\n mouseHandlers,\n\n partition,\n partitionColumn,\n partitionTable: null,\n partitionFilters: [],\n // setAdvancedFilter and setQuickFilter mutate the arguments\n // so we want to always use map copies from the state instead of props\n quickFilters: quickFilters ? new Map(quickFilters) : new Map(),\n advancedFilters: new Map(advancedFilters),\n shownAdvancedFilter: null,\n hoverAdvancedFilter: null,\n sorts: [],\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n customColumns: [],\n selectDistinctColumns,\n\n // selected range in table\n selectedRanges: [],\n\n // Current ongoing copy operation\n copyOperation: null,\n\n // The filter that is currently being applied. Reset after update is received\n loadingText: null,\n loadingScrimProgress: null,\n loadingSpinnerShown: false,\n\n movedColumns,\n movedRows,\n\n shownColumnTooltip: null,\n\n formatter: new Formatter(),\n isMenuShown: false,\n customColumnFormatMap: new Map(customColumnFormatMap),\n\n conditionalFormats,\n conditionalFormatEditIndex: null,\n conditionalFormatPreview: undefined,\n\n // Column user is hovering over for selection\n hoverSelectColumn: null,\n\n isTableDownloading: false,\n isReady: false,\n tableDownloadStatus: '',\n tableDownloadProgress: 0,\n tableDownloadEstimatedTime: 0,\n\n showSearchBar,\n searchFilter,\n searchValue,\n selectedSearchColumns: searchColumns,\n invertSearchColumns,\n\n rollupConfig,\n rollupSelectedColumns: [],\n aggregationSettings,\n selectedAggregation: null,\n\n openOptions: [],\n\n pendingRowCount: 0,\n pendingDataMap: pendingDataMap ?? new Map(),\n pendingDataErrors: new Map(),\n pendingSavePromise: null,\n pendingSaveError: null,\n\n toastMessage: null,\n frozenColumns,\n showOverflowModal: false,\n overflowText: '',\n overflowButtonTooltipProps: null,\n isGotoRowShown: false,\n gotoRow: '',\n gotoRowError: '',\n };\n }\n\n componentDidMount(): void {\n const { partitionColumn, model } = this.props;\n const column =\n partitionColumn ?? model.columns.find(c => c.isPartitionColumn);\n if (\n model.isFilterRequired &&\n model.isValuesTableAvailable &&\n column != null\n ) {\n this.loadPartitionsTable(column);\n } else {\n this.initState();\n }\n this.startListening(model);\n }\n\n componentDidUpdate(prevProps: IrisGridProps): void {\n const {\n inputFilters,\n isSelectingColumn,\n settings,\n model,\n customFilters,\n sorts,\n } = this.props;\n\n if (model !== prevProps.model) {\n this.stopListening(prevProps.model);\n this.startListening(model);\n }\n\n const changedInputFilters =\n inputFilters !== prevProps.inputFilters\n ? inputFilters.filter(\n inputFilter => !prevProps.inputFilters.includes(inputFilter)\n )\n : [];\n if (changedInputFilters.length > 0) {\n const { advancedSettings } = this.props;\n const replaceExistingFilters =\n advancedSettings.get(\n AdvancedSettingsType.FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS\n ) ?? false;\n if (replaceExistingFilters) {\n this.clearGridInputField();\n this.clearCrossColumSearch();\n }\n this.startLoading('Filtering...', true);\n this.applyInputFilters(changedInputFilters, replaceExistingFilters);\n }\n\n if (isSelectingColumn !== prevProps.isSelectingColumn) {\n this.resetColumnSelection();\n }\n if (settings !== prevProps.settings) {\n this.updateFormatterSettings(settings);\n }\n if (customFilters !== prevProps.customFilters) {\n this.startLoading('Filtering...', true);\n }\n if (sorts !== prevProps.sorts) {\n this.updateSorts(sorts);\n }\n const { loadingScrimStartTime, loadingScrimFinishTime } = this;\n if (loadingScrimStartTime != null && loadingScrimFinishTime != null) {\n window.requestAnimationFrame(() => {\n const now = Date.now();\n const currentTime = now - loadingScrimStartTime;\n const totalTime = loadingScrimFinishTime - loadingScrimStartTime;\n const loadingScrimProgress = Math.min(currentTime / totalTime, 1);\n if (loadingScrimFinishTime < now) {\n this.loadingScrimStartTime = undefined;\n this.loadingScrimFinishTime = undefined;\n }\n\n this.setState(state => {\n if (state.loadingScrimProgress == null) {\n log.debug2('Ignoring scrim update because loading cancelled.');\n return null;\n }\n\n return { loadingScrimProgress };\n });\n });\n }\n\n this.sendStateChange();\n }\n\n componentWillUnmount(): void {\n const { model } = this.props;\n this.stopListening(model);\n this.pending.cancel();\n this.updateSearchFilter.cancel();\n\n if (this.loadingTimer) {\n clearTimeout(this.loadingTimer);\n }\n this.handleDownloadProgressUpdate.cancel();\n if (this.animationFrame !== undefined) {\n cancelAnimationFrame(this.animationFrame);\n }\n }\n\n grid: Grid | null;\n\n gridWrapper: HTMLDivElement | null;\n\n lastFocusedFilterBarColumn?: number;\n\n lastLoadedConfig: Pick<\n IrisGridState,\n | 'advancedFilters'\n | 'aggregationSettings'\n | 'customColumns'\n | 'quickFilters'\n | 'reverseType'\n | 'rollupConfig'\n | 'searchFilter'\n | 'selectDistinctColumns'\n | 'sorts'\n > | null;\n\n tooltip?: Tooltip;\n\n pending: Pending;\n\n globalColumnFormats?: FormattingRule[];\n\n dateTimeFormatterOptions?: DateTimeColumnFormatterOptions;\n\n decimalFormatOptions: { defaultFormatString?: string };\n\n integerFormatOptions: { defaultFormatString?: string };\n\n truncateNumbersWithPound: boolean;\n\n // When the loading scrim started/when it should extend to the end of the screen.\n loadingScrimStartTime?: number;\n\n loadingScrimFinishTime?: number;\n\n animationFrame?: number;\n\n loadingTimer?: ReturnType<typeof setTimeout>;\n\n renderer: IrisGridRenderer;\n\n tableSaver: TableSaver | null;\n\n crossColumnRef: React.RefObject<CrossColumnSearch>;\n\n isAnimating: boolean;\n\n filterInputRef: React.RefObject<FilterInputField>;\n\n toggleFilterBarAction: Action;\n\n toggleSearchBarAction: Action;\n\n toggleGotoRowAction: Action;\n\n discardAction: Action;\n\n commitAction: Action;\n\n contextActions: ContextAction[];\n\n getAdvancedMenuOpenedHandler = memoize(\n column => this.handleAdvancedMenuOpened.bind(this, column),\n { max: 100 }\n );\n\n getCachedAdvancedFilterMenuActions = memoize(\n (\n model,\n column,\n advancedFilterOptions,\n sortDirection?: SortDirection,\n formatter?\n ) => (\n <AdvancedFilterCreator\n model={model}\n column={column}\n onFilterChange={this.handleAdvancedFilterChange}\n onSortChange={this.handleAdvancedFilterSortChange}\n onDone={this.handleAdvancedFilterDone}\n options={advancedFilterOptions}\n sortDirection={sortDirection}\n formatter={formatter}\n />\n ),\n { max: 50 }\n );\n\n getCachedOptionItems = memoize(\n (\n isChartBuilderAvailable: boolean,\n isCustomColumnsAvailable: boolean,\n isFormatColumnsAvailable: boolean,\n isRollupAvailable: boolean,\n isTotalsAvailable: boolean,\n isSelectDistinctAvailable: boolean,\n isExportAvailable: boolean,\n toggleFilterBarAction,\n toggleSearchBarAction,\n toggleGotoRowAction,\n isFilterBarShown: boolean,\n showSearchBar: boolean,\n canDownloadCsv: boolean,\n canToggleSearch: boolean,\n showGotoRow: boolean,\n hasAdvancedSettings: boolean\n ) => {\n const optionItems: OptionItem[] = [];\n if (isChartBuilderAvailable) {\n optionItems.push({\n type: OptionType.CHART_BUILDER,\n title: 'Chart Builder',\n icon: dhGraphLineUp,\n });\n }\n optionItems.push({\n type: OptionType.VISIBILITY_ORDERING_BUILDER,\n title: 'Column Visibility & Ordering',\n icon: dhEye,\n });\n if (isFormatColumnsAvailable) {\n optionItems.push({\n type: OptionType.CONDITIONAL_FORMATTING,\n title: 'Conditional Formatting',\n icon: vsEdit,\n });\n }\n if (isCustomColumnsAvailable) {\n optionItems.push({\n type: OptionType.CUSTOM_COLUMN_BUILDER,\n title: 'Manage Custom Columns',\n icon: vsSplitHorizontal,\n });\n }\n if (isRollupAvailable) {\n optionItems.push({\n type: OptionType.ROLLUP_ROWS,\n title: 'Rollup Rows',\n icon: dhTriangleDownSquare,\n });\n }\n if (isTotalsAvailable) {\n optionItems.push({\n type: OptionType.AGGREGATIONS,\n title: 'Aggregate Columns',\n icon: vsSymbolOperator,\n });\n }\n if (isSelectDistinctAvailable) {\n optionItems.push({\n type: OptionType.SELECT_DISTINCT,\n title: 'Select Distinct Values',\n icon: vsRuby,\n });\n }\n if (isExportAvailable && canDownloadCsv) {\n optionItems.push({\n type: OptionType.TABLE_EXPORTER,\n title: 'Download CSV',\n icon: vsCloudDownload,\n });\n }\n if (hasAdvancedSettings) {\n optionItems.push({\n type: OptionType.ADVANCED_SETTINGS,\n title: 'Advanced Settings',\n icon: vsTools,\n });\n }\n optionItems.push({\n type: OptionType.QUICK_FILTERS,\n title: 'Quick Filters',\n subtitle: toggleFilterBarAction.shortcut.getDisplayText(),\n icon: vsFilter,\n isOn: isFilterBarShown,\n onChange: toggleFilterBarAction.action,\n });\n if (canToggleSearch) {\n optionItems.push({\n type: OptionType.SEARCH_BAR,\n title: 'Search Bar',\n subtitle: toggleSearchBarAction.shortcut.getDisplayText(),\n icon: vsSearch,\n isOn: showSearchBar,\n onChange: toggleSearchBarAction.action,\n });\n }\n optionItems.push({\n type: OptionType.GOTO,\n title: 'Go to',\n subtitle: toggleGotoRowAction.shortcut.getDisplayText(),\n icon: vsReply,\n isOn: showGotoRow,\n onChange: toggleGotoRowAction.action,\n });\n\n return optionItems;\n },\n { max: 1 }\n );\n\n getCachedHiddenColumns = memoize(hiddenColumns => hiddenColumns, {\n max: 1,\n normalizer: ([hiddenColumns]) => hiddenColumns.join(),\n });\n\n getAggregationMap = memoize(\n (columns: Column[], aggregations: Aggregation[]): AggregationMap => {\n const aggregationMap = {} as Record<AggregationOperation, string[]>;\n aggregations.forEach(({ operation, selected, invert }) => {\n aggregationMap[operation] = AggregationUtils.getOperationColumnNames(\n columns,\n operation,\n selected,\n invert\n );\n });\n return aggregationMap;\n }\n );\n\n getOperationMap = memoize(\n (columns: Column[], aggregations: Aggregation[]): OperationMap => {\n const operationMap: Record<string, AggregationOperation[]> = {};\n aggregations\n .filter(\n (a: Aggregation) => !AggregationUtils.isRollupOperation(a.operation)\n )\n .forEach(({ operation, selected, invert }) => {\n AggregationUtils.getOperationColumnNames(\n columns,\n operation,\n selected,\n invert\n ).forEach(name => {\n const newOperations = [...(operationMap[name] ?? []), operation];\n operationMap[name] = newOperations;\n });\n });\n return operationMap;\n }\n );\n\n getOperationOrder = memoize(\n (aggregations: Aggregation[]): AggregationOperation[] =>\n aggregations\n .map((a: Aggregation) => a.operation)\n .filter(\n (o: AggregationOperation) => !AggregationUtils.isRollupOperation(o)\n )\n );\n\n getCachedFormatColumns = memoize((columns, rules) =>\n getFormatColumns(columns, rules)\n );\n\n // customColumns arg is needed to invalidate the cache\n // eslint-disable-next-line no-unused-vars\n getCachedModelColumns = memoize((model, customColumns) => model.columns);\n\n /**\n * Builds formatColumns array based on the provided formatting rules with optional preview\n * @param columns Array of columns\n * @param rulesParam Array of formatting rules\n * @param preview Optional temporary formatting rule for previewing live changes\n * @param editIndex Index in the rulesParam array to replace with the preview, null if preview not applicable\n * @returns Format columns array\n */\n getCachedPreviewFormatColumns = memoize(\n (\n columns: Column[],\n rulesParam: SidebarFormattingRule[],\n preview?: SidebarFormattingRule,\n editIndex?: number\n ): CustomColumn[] => {\n log.debug(\n 'getCachedPreviewFormatColumns',\n rulesParam,\n preview,\n editIndex\n );\n if (preview !== undefined && editIndex !== undefined) {\n const rules = [...rulesParam];\n rules[editIndex] = preview;\n return this.getCachedFormatColumns(columns, rules);\n }\n\n return this.getCachedFormatColumns(columns, rulesParam);\n }\n );\n\n getModelRollupConfig = memoize(\n (originalColumns, config, aggregationSettings) =>\n IrisGridUtils.getModelRollupConfig(\n originalColumns,\n config,\n aggregationSettings\n )\n );\n\n getModelTotalsConfig = memoize(\n (columns, config, aggregationSettings): UITotalsTableConfig | null => {\n const { aggregations, showOnTop } = aggregationSettings;\n // If we've got rollups, then aggregations are applied as part of that...\n if (\n (config?.columns?.length ?? 0) > 0 ||\n (aggregations?.length ?? 0) === 0\n ) {\n return null;\n }\n\n const operationMap = this.getOperationMap(columns, aggregations);\n const operationOrder = this.getOperationOrder(aggregations);\n\n return { operationMap, operationOrder, showOnTop };\n }\n );\n\n getCachedStateOverride = memoize(\n (\n hoverSelectColumn,\n isFilterBarShown,\n isSelectingColumn,\n loadingScrimProgress,\n quickFilters,\n advancedFilters,\n sorts,\n reverseType,\n rollupConfig,\n isMenuShown\n ) => ({\n hoverSelectColumn,\n isFilterBarShown,\n isSelectingColumn,\n loadingScrimProgress,\n quickFilters,\n advancedFilters,\n sorts,\n reverseType,\n rollupConfig,\n isMenuShown,\n }),\n { max: 1 }\n );\n\n getCachedFilter = memoize(\n (\n customFilters: FilterCondition[],\n quickFilters: QuickFilterMap,\n advancedFilters: AdvancedFilterMap,\n partitionFilters: FilterCondition[],\n searchFilter: FilterCondition | undefined\n ) => [\n ...(customFilters ?? []),\n ...(partitionFilters ?? []),\n ...IrisGridUtils.getFiltersFromFilterMap(quickFilters),\n ...IrisGridUtils.getFiltersFromFilterMap(advancedFilters),\n ...(searchFilter !== undefined ? [searchFilter] : []),\n ],\n { max: 1 }\n );\n\n getCachedTheme = memoize(\n (\n theme: GridThemeType,\n isEditable: boolean,\n floatingRowCount: number\n ): Partial<IrisGridThemeType> => ({\n ...IrisGridTheme,\n ...theme,\n autoSelectRow: !isEditable,\n // We only show the row footers when we have floating rows for aggregations\n rowFooterWidth: floatingRowCount > 0 ? theme.rowFooterWidth : 0,\n }),\n { max: 1 }\n );\n\n getValueForCell(\n columnIndex: GridRangeIndex,\n rowIndex: GridRangeIndex,\n rawValue = false\n ): string | unknown {\n const { model } = this.props;\n const modelColumn = this.getModelColumn(columnIndex);\n const modelRow = this.getModelRow(rowIndex);\n if (rawValue && modelColumn != null && modelRow != null) {\n const value = model.valueForCell(modelColumn, modelRow);\n if (TableUtils.isDateType(model.columns[modelColumn].type)) {\n // The returned value is just a long value, we should return the value fromatted as a full date string\n const { formatter } = model;\n return dh.i18n.DateTimeFormat.format(\n UNFORMATTED_DATE_PATTERN,\n value as number | Date | DateWrapper,\n dh.i18n.TimeZone.getTimeZone(formatter.timeZone)\n );\n }\n return value;\n }\n if (rawValue) {\n return null;\n }\n if (modelColumn != null && modelRow != null) {\n return model.textForCell(modelColumn, modelRow);\n }\n return '';\n }\n\n getModelColumn(columnIndex: GridRangeIndex): ModelIndex | null | undefined {\n const { metrics } = this.state;\n assertNotNull(metrics);\n const { modelColumns } = metrics;\n if (modelColumns == null) {\n return null;\n }\n\n return columnIndex != null ? modelColumns.get(columnIndex) : null;\n }\n\n getModelRow(rowIndex: GridRangeIndex): ModelIndex | null | undefined {\n const { metrics } = this.state;\n assertNotNull(metrics);\n const { modelRows } = metrics;\n if (modelRows == null) {\n return null;\n }\n\n return rowIndex != null ? modelRows.get(rowIndex) : null;\n }\n\n getTheme(): Partial<IrisGridThemeType> {\n const { model, theme } = this.props;\n return this.getCachedTheme(\n theme,\n (isEditableGridModel(model) && model.isEditable) ?? false,\n model.floatingTopRowCount + model.floatingBottomRowCount\n );\n }\n\n getVisibleColumn(modelIndex: ModelIndex): VisibleIndex {\n const { movedColumns } = this.state;\n return GridUtils.getVisibleIndex(modelIndex, movedColumns);\n }\n\n /**\n * Applies the provided input filters as quick filters,\n * and clears any existing quickFilters or advancedFilters on that column\n * @param inputFilters Array of input filters to apply\n * @param replaceExisting If true, new filters will replace the existing ones, instead of merging\n */\n applyInputFilters(\n inputFilters: InputFilter[],\n replaceExisting = false\n ): void {\n const { model } = this.props;\n const { advancedFilters, quickFilters } = this.state;\n const newAdvancedFilters = replaceExisting\n ? new Map()\n : new Map(advancedFilters);\n const newQuickFilters = replaceExisting ? new Map() : new Map(quickFilters);\n\n let isChanged = replaceExisting && advancedFilters.size > 0;\n inputFilters.forEach(({ name, type, value }) => {\n const modelIndex = model.columns.findIndex(\n ({ name: columnName, type: columnType }) =>\n columnName === name && columnType === type\n );\n if (modelIndex >= 0) {\n isChanged = newAdvancedFilters.delete(modelIndex) || isChanged;\n isChanged =\n this.applyQuickFilter(modelIndex, value, newQuickFilters) ||\n isChanged;\n } else {\n log.error('Unable to find column for inputFilter', name, type, value);\n }\n });\n if (isChanged) {\n this.setState({\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters,\n });\n }\n }\n\n /**\n * Applies a quick filter\n * @param modelIndex The index in the model of the column to set\n * @param value The string value to set to the quick filter\n * @param quickFilters The quick filters map\n * @returns True if the filters have changed because this quick filter was applied\n */\n applyQuickFilter(\n modelIndex: ModelIndex,\n value: string | null,\n quickFilters: QuickFilterMap\n ): boolean {\n const { model } = this.props;\n const { formatter } = model;\n const column = model.columns[modelIndex];\n\n if (value != null && `${value}`.trim().length > 0) {\n const quickFilter = quickFilters.get(modelIndex);\n if (quickFilter != null) {\n const { text } = quickFilter;\n if (text === value) {\n log.debug2('Ignoring change to existing filter');\n return false;\n }\n }\n quickFilters.set(modelIndex, {\n text: value,\n filter: IrisGrid.makeQuickFilter(column, value, formatter.timeZone),\n });\n return true;\n }\n return quickFilters.delete(modelIndex);\n }\n\n setAdvancedFilterMap(advancedFilters: AdvancedFilterMap): void {\n this.setState({ advancedFilters });\n }\n\n setAdvancedFilter(\n modelIndex: ModelIndex,\n filter: FilterCondition | null,\n options: AdvancedFilterOptions\n ): void {\n log.debug('Setting advanced filter', modelIndex, filter);\n\n this.startLoading('Filtering...', true);\n\n this.setState(({ advancedFilters }) => {\n const newAdvancedFilters = new Map(advancedFilters);\n if (filter == null) {\n newAdvancedFilters.delete(modelIndex);\n } else {\n newAdvancedFilters.set(modelIndex, {\n filter,\n options,\n });\n }\n return { advancedFilters: newAdvancedFilters };\n });\n }\n\n /**\n * Sets a quick filter against the provided column\n * @param modelIndex The index in the model for the column this filter is applied to\n * @param filter A filter to apply to the column, or null if there was an error\n * @param text The original text the filter was created with\n */\n setQuickFilter(\n modelIndex: ModelIndex,\n filter: FilterCondition,\n text: string\n ): void {\n log.debug('Setting quick filter', modelIndex, filter, text);\n\n this.startLoading('Filtering...', true);\n\n this.setState(({ quickFilters }) => {\n const newQuickFilters = new Map(quickFilters);\n newQuickFilters.set(modelIndex, { filter, text });\n return { quickFilters: newQuickFilters };\n });\n }\n\n /**\n * Set grid filters based on the filter map\n * @param filterMap Filter map\n */\n setFilterMap(filterMap: FilterMap): void {\n log.debug('setFilterMap', filterMap);\n\n const { advancedSettings } = this.props;\n const clearFiltersOnLinkerFilterUpdate =\n advancedSettings.get(\n AdvancedSettingsType.LINK_CHANGE_CLEARS_ALL_FILTERS\n ) ?? false;\n if (clearFiltersOnLinkerFilterUpdate) {\n this.clearAllFilters();\n }\n\n const { model } = this.props;\n filterMap.forEach(({ columnType, text, value }, columnName) => {\n const column = model.columns.find(\n c => c.name === columnName && c.type === columnType\n );\n if (column == null) {\n return;\n }\n const columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n if (value === undefined) {\n this.removeQuickFilter(columnIndex);\n } else if (value === null) {\n this.setQuickFilter(columnIndex, column.filter().isNull(), '=null');\n } else {\n const filterValue = TableUtils.isTextType(columnType)\n ? dh.FilterValue.ofString(value)\n : dh.FilterValue.ofNumber(value);\n this.setQuickFilter(\n columnIndex,\n column.filter().eq(filterValue),\n `${text}`\n );\n }\n });\n }\n\n removeColumnFilter(modelColumn: ModelIndex): void {\n this.startLoading('Filtering...', true);\n\n this.setState(\n ({ advancedFilters, quickFilters }: Partial<IrisGridState>) => {\n const newAdvancedFilters = advancedFilters\n ? new Map(advancedFilters)\n : new Map();\n const newQuickFilters = quickFilters\n ? new Map(quickFilters)\n : new Map();\n newQuickFilters.delete(modelColumn);\n newAdvancedFilters.delete(modelColumn);\n\n return {\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters,\n };\n }\n );\n }\n\n removeQuickFilter(modelColumn: ModelIndex): void {\n this.startLoading('Clearing Filter...', true);\n\n this.setState(({ quickFilters }) => {\n const newQuickFilters = new Map(quickFilters);\n newQuickFilters.delete(modelColumn);\n\n return { quickFilters: newQuickFilters };\n });\n }\n\n clearAllFilters(): void {\n log.debug('Clearing all filters');\n\n const { advancedFilters, quickFilters, searchFilter } = this.state;\n if (\n quickFilters.size === 0 &&\n advancedFilters.size === 0 &&\n searchFilter === null\n ) {\n return;\n }\n\n // if there is an active quick filter input field, reset it as well\n this.clearGridInputField();\n\n this.startLoading('Clearing Filters...', true);\n this.setState({\n quickFilters: new Map(),\n advancedFilters: new Map(),\n searchValue: '',\n searchFilter: undefined,\n });\n }\n\n clearCrossColumSearch(): void {\n log.debug('Clearing cross-column search');\n\n this.setState({\n searchValue: '',\n searchFilter: undefined,\n });\n }\n\n clearGridInputField(): void {\n if (this.filterInputRef.current != null) {\n this.filterInputRef.current.setValue('');\n }\n }\n\n /**\n * Rebuilds all the current filters. Necessary if something like the time zone has changed.\n */\n rebuildFilters(): void {\n log.debug('Rebuilding filters');\n\n const { model } = this.props;\n const { advancedFilters, quickFilters } = this.state;\n const { columns, formatter } = model;\n\n const newAdvancedFilters = new Map();\n const newQuickFilters = new Map();\n\n advancedFilters.forEach((value, key) => {\n const { options } = value;\n const column = columns[key];\n const filter = TableUtils.makeAdvancedFilter(\n column,\n options,\n formatter.timeZone\n );\n newAdvancedFilters.set(key, {\n options,\n filter,\n });\n });\n\n quickFilters.forEach((value, key) => {\n const { text } = value;\n const column = columns[key];\n newQuickFilters.set(key, {\n text,\n filter: IrisGrid.makeQuickFilter(column, text, formatter.timeZone),\n });\n });\n\n this.startLoading('Rebuilding filters...', true);\n this.setState({\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters,\n });\n }\n\n setFilters({\n quickFilters,\n advancedFilters,\n }: Pick<IrisGridState, 'quickFilters' | 'advancedFilters'>): void {\n this.setState({\n quickFilters,\n advancedFilters,\n });\n }\n\n updateFormatterSettings(settings?: Settings, forceUpdate = true): void {\n const globalColumnFormats = FormatterUtils.getColumnFormats(settings);\n const dateTimeFormatterOptions = FormatterUtils.getDateTimeFormatterOptions(\n settings\n );\n\n const defaultDecimalFormatOptions =\n settings?.defaultDecimalFormatOptions ?? {};\n const defaultIntegerFormatOptions =\n settings?.defaultIntegerFormatOptions ?? {};\n const truncateNumbersWithPound =\n settings?.truncateNumbersWithPound ?? false;\n\n const isColumnFormatChanged = !deepEqual(\n this.globalColumnFormats,\n globalColumnFormats\n );\n const isDateFormattingChanged = !deepEqual(\n this.dateTimeFormatterOptions,\n dateTimeFormatterOptions\n );\n const isDecimalFormattingChanged = !deepEqual(\n this.decimalFormatOptions,\n settings?.defaultDecimalFormatOptions\n );\n const isIntegerFormattingChanged = !deepEqual(\n this.integerFormatOptions,\n defaultIntegerFormatOptions\n );\n const isTruncateNumbersChanged =\n this.truncateNumbersWithPound !== truncateNumbersWithPound;\n if (\n isColumnFormatChanged ||\n isDateFormattingChanged ||\n isDecimalFormattingChanged ||\n isIntegerFormattingChanged ||\n isTruncateNumbersChanged\n ) {\n this.globalColumnFormats = globalColumnFormats;\n this.dateTimeFormatterOptions = dateTimeFormatterOptions;\n this.decimalFormatOptions = defaultDecimalFormatOptions;\n this.integerFormatOptions = defaultIntegerFormatOptions;\n this.truncateNumbersWithPound = truncateNumbersWithPound;\n this.updateFormatter({}, forceUpdate);\n\n if (isDateFormattingChanged && forceUpdate) {\n this.rebuildFilters();\n }\n }\n }\n\n getAlwaysFetchColumns = memoize(\n (\n alwaysFetchColumns: ColumnName[],\n columns: Column[],\n movedColumns: MoveOperation[],\n floatingLeftColumnCount: number,\n floatingRightColumnCount: number,\n draggingRange?: BoundedAxisRange\n ) => {\n const floatingColumns: ColumnName[] = [];\n\n for (let i = 0; i < floatingLeftColumnCount; i += 1) {\n floatingColumns.push(\n columns[GridUtils.getModelIndex(i, movedColumns)].name\n );\n }\n\n for (let i = 0; i < floatingRightColumnCount; i += 1) {\n floatingColumns.push(\n columns[GridUtils.getModelIndex(columns.length - 1 - i, movedColumns)]\n .name\n );\n }\n\n if (draggingRange) {\n for (let i = draggingRange[0]; i <= draggingRange[1]; i += 1) {\n floatingColumns.push(\n columns[GridUtils.getModelIndex(i, movedColumns)].name\n );\n }\n }\n\n const columnSet = new Set([...alwaysFetchColumns, ...floatingColumns]);\n\n return [...columnSet];\n }\n );\n\n updateFormatter(\n updatedFormats: { customColumnFormatMap?: Map<ColumnName, FormattingRule> },\n forceUpdate = true\n ): void {\n const { customColumnFormatMap } = this.state;\n const update = {\n customColumnFormatMap,\n ...updatedFormats,\n };\n const mergedColumnFormats = [\n ...(this.globalColumnFormats ?? []),\n ...update.customColumnFormatMap.values(),\n ];\n const formatter = new Formatter(\n mergedColumnFormats,\n this.dateTimeFormatterOptions,\n this.decimalFormatOptions,\n this.integerFormatOptions,\n this.truncateNumbersWithPound\n );\n\n log.debug('updateFormatter', this.globalColumnFormats, mergedColumnFormats);\n\n this.setState({ ...update, formatter }, () => {\n if (forceUpdate && this.grid) {\n this.grid.forceUpdate();\n }\n });\n }\n\n initFormatter(): void {\n const { settings } = this.props;\n this.updateFormatterSettings(settings);\n }\n\n initState(): void {\n const {\n applyInputFiltersOnInit,\n inputFilters,\n sorts,\n model,\n reverseType,\n customColumns,\n searchValue,\n selectedSearchColumns,\n invertSearchColumns,\n } = this.props;\n\n const searchColumns = selectedSearchColumns ?? [];\n const searchFilter = CrossColumnSearch.createSearchFilter(\n searchValue,\n searchColumns,\n model.columns,\n invertSearchColumns\n );\n\n if (applyInputFiltersOnInit) {\n // There may be more than one input filter on the same column with value === '' applied last\n // We don't want to skip it here, so only excluding the ones that were never applied (null)\n const inputFiltersWithValues = inputFilters.filter(\n inputFilter => inputFilter.value != null\n );\n this.applyInputFilters(inputFiltersWithValues);\n }\n\n this.setState({\n sorts,\n reverseType,\n customColumns,\n isReady: true,\n searchFilter,\n });\n this.initFormatter();\n }\n\n async loadPartitionsTable(partitionColumn: Column): Promise<void> {\n const { model } = this.props;\n this.setState({ isSelectingPartition: true });\n\n try {\n const partitionTable = await this.pending.add(\n model.valuesTable(partitionColumn),\n resolved => resolved.close()\n );\n\n const column = partitionTable.columns[0];\n const sort = column.sort().desc();\n partitionTable.applySort([sort]);\n partitionTable.setViewport(0, 0, [column]);\n\n const data = await this.pending.add(partitionTable.getViewportData());\n if (data.rows.length > 0) {\n const row = data.rows[0];\n const value = row.get(column);\n\n this.updatePartition(value, partitionColumn);\n\n this.setState({ isSelectingPartition: true });\n } else {\n log.info('Table does not have any data, just fetching all');\n this.setState({ isSelectingPartition: false });\n this.handlePartitionFetchAll();\n }\n this.setState({ partitionTable, partitionColumn }, () => {\n this.initState();\n });\n } catch (error) {\n this.handleTableLoadError(error);\n }\n }\n\n updatePartition(partition: string, partitionColumn: Column): void {\n const partitionFilter = partitionColumn\n .filter()\n .eq(dh.FilterValue.ofString(partition));\n const partitionFilters = [partitionFilter];\n this.setState({\n partition,\n partitionFilters,\n });\n }\n\n copyCell(\n columnIndex: GridRangeIndex,\n rowIndex: GridRangeIndex,\n rawValue = false\n ): void {\n const { canCopy } = this.props;\n if (canCopy) {\n const value = String(\n this.getValueForCell(columnIndex, rowIndex, rawValue)\n );\n ContextActionUtils.copyToClipboard(value).catch(e =>\n log.error('Unable to copy cell', e)\n );\n } else {\n log.error('Attempted to copyCell for user without copy permission.');\n }\n }\n\n /**\n * Copy the provided ranges to the clipboard\n * @paramranges The ranges to copy\n * @param includeHeaders Include the headers or not\n * @param formatValues Whether to format values or not\n * @param error Error message if one occurred\n */\n copyRanges(\n ranges: GridRange[],\n includeHeaders = false,\n formatValues = true,\n error?: string\n ): void {\n const { model, canCopy } = this.props;\n const { metricCalculator, movedColumns } = this.state;\n const userColumnWidths = metricCalculator.getUserColumnWidths();\n\n if (canCopy) {\n const copyOperation = {\n ranges: GridRange.boundedRanges(\n ranges,\n model.columnCount,\n model.rowCount\n ),\n includeHeaders,\n formatValues,\n movedColumns,\n userColumnWidths,\n error,\n };\n\n this.setState({ copyOperation });\n } else {\n log.error('Attempted copyRanges for user without copy permission.');\n }\n }\n\n startLoading(loadingText: string, resetRanges = false): void {\n this.setState({ loadingText });\n\n const theme = this.getTheme();\n\n if (resetRanges && this.grid) {\n this.grid.clearSelectedRanges();\n this.grid.setViewState({ top: 0 }, true);\n }\n\n if (this.loadingScrimStartTime == null) {\n const { minScrimTransitionTime, maxScrimTransitionTime } = theme;\n assertNotNull(minScrimTransitionTime);\n assertNotNull(maxScrimTransitionTime);\n const height = this.gridWrapper?.getBoundingClientRect().height ?? 0;\n const scrimTransitionTime = Math.max(\n minScrimTransitionTime,\n Math.min(height / 2, maxScrimTransitionTime)\n );\n this.loadingScrimStartTime = Date.now();\n this.loadingScrimFinishTime =\n this.loadingScrimStartTime + scrimTransitionTime;\n this.setState({\n loadingScrimProgress: 0,\n });\n this.loadingTimer = setTimeout(() => {\n this.setState({\n loadingSpinnerShown: true,\n });\n }, IrisGrid.loadingSpinnerDelay);\n }\n }\n\n stopLoading(): void {\n this.loadingScrimStartTime = undefined;\n this.loadingScrimFinishTime = undefined;\n this.setState({\n loadingText: null,\n loadingScrimProgress: null,\n loadingSpinnerShown: false,\n });\n\n if (this.loadingTimer != null) {\n clearTimeout(this.loadingTimer);\n this.loadingTimer = undefined;\n }\n }\n\n /**\n * Rolls back the table state to the last known safe state, or if that's not available then clears all sorts/filters/custom columns.\n */\n rollback(): void {\n if (this.lastLoadedConfig) {\n log.debug('loading last loading config', this.lastLoadedConfig);\n const {\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverseType,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts,\n } = this.lastLoadedConfig;\n\n this.lastLoadedConfig = null;\n this.setState({\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverseType,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts,\n });\n } else {\n log.debug('remove all sorts, filters, and custom columns');\n this.setState({\n advancedFilters: new Map(),\n aggregationSettings: DEFAULT_AGGREGATION_SETTINGS,\n customColumns: [],\n quickFilters: new Map(),\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n rollupConfig: undefined,\n selectDistinctColumns: [],\n sorts: [],\n });\n }\n }\n\n /**\n * Check if we can rollback the current state to a safe state.\n * @returns true if there's a previously known safe state or if some of the current state isn't empty.\n */\n canRollback(): boolean {\n return this.lastLoadedConfig != null || !isEmptyConfig(this.state);\n }\n\n startListening(model: IrisGridModel): void {\n model.addEventListener(IrisGridModel.EVENT.UPDATED, this.handleUpdate);\n model.addEventListener(\n IrisGridModel.EVENT.REQUEST_FAILED,\n this.handleRequestFailed\n );\n model.addEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleCustomColumnsChanged\n );\n model.addEventListener(\n IrisGridModel.EVENT.PENDING_DATA_UPDATED,\n this.handlePendingDataUpdated\n );\n }\n\n stopListening(model: IrisGridModel): void {\n model.removeEventListener(IrisGridModel.EVENT.UPDATED, this.handleUpdate);\n model.removeEventListener(\n IrisGridModel.EVENT.REQUEST_FAILED,\n this.handleRequestFailed\n );\n model.removeEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleCustomColumnsChanged\n );\n model.removeEventListener(\n IrisGridModel.EVENT.PENDING_DATA_UPDATED,\n this.handlePendingDataUpdated\n );\n }\n\n focus(): void {\n this.grid?.focus();\n }\n\n focusFilterBar(column: VisibleIndex): void {\n const { movedColumns } = this.state;\n const { model } = this.props;\n const { columnCount } = model;\n const modelColumn = GridUtils.getModelIndex(column, movedColumns);\n\n if (\n column == null ||\n column < 0 ||\n columnCount <= column ||\n !model.isFilterable(modelColumn)\n ) {\n this.setState({ focusedFilterBarColumn: null });\n return;\n }\n\n const { metricCalculator, metrics } = this.state;\n assertNotNull(metrics);\n const { left, rightVisible, lastLeft } = metrics;\n if (column < left) {\n this.grid?.setViewState({ left: column }, true);\n } else if (rightVisible < column) {\n const metricState = this.grid?.getMetricState();\n assertNotNull(metricState);\n const newLeft = metricCalculator.getLastLeft(metricState, column);\n this.grid?.setViewState(\n { left: Math.min(newLeft, lastLeft), leftOffset: 0 },\n true\n );\n }\n this.lastFocusedFilterBarColumn = column;\n this.setState({ focusedFilterBarColumn: column, isFilterBarShown: true });\n }\n\n hideColumnByVisibleIndex(columnVisibleIndex: VisibleIndex): void {\n const { metricCalculator, movedColumns } = this.state;\n metricCalculator.setColumnWidth(\n GridUtils.getModelIndex(columnVisibleIndex, movedColumns),\n 0\n );\n\n this.grid?.forceUpdate();\n }\n\n freezeColumnByColumnName(columnName: ColumnName): void {\n const { frozenColumns, movedColumns } = this.state;\n const { model } = this.props;\n log.debug2('freezing column', columnName);\n\n const allFrozenColumns =\n frozenColumns == null\n ? new Set(model.frozenColumns)\n : new Set(frozenColumns);\n\n allFrozenColumns.add(columnName);\n\n const modelIndex = model.getColumnIndexByName(columnName);\n assertNotNull(modelIndex);\n const visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);\n const newMovedColumns = GridUtils.moveItem(\n visibleIndex,\n allFrozenColumns.size - 1,\n movedColumns\n );\n\n this.setState({\n frozenColumns: [...allFrozenColumns],\n movedColumns: newMovedColumns,\n });\n }\n\n unFreezeColumnByColumnName(columnName: ColumnName): void {\n const { frozenColumns, movedColumns } = this.state;\n const { model } = this.props;\n log.debug2('unfreezing column', columnName);\n\n const allFrozenColumns =\n frozenColumns == null\n ? new Set(model.frozenColumns)\n : new Set(frozenColumns);\n\n allFrozenColumns.delete(columnName);\n\n const modelIndex = model.getColumnIndexByName(columnName);\n assertNotNull(modelIndex);\n const visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);\n\n // Move to after remaining frozen columns and front columns\n const newMovedColumns = GridUtils.moveItem(\n visibleIndex,\n allFrozenColumns.size + model.frontColumns.length,\n movedColumns\n );\n\n this.setState({\n frozenColumns: [...allFrozenColumns],\n movedColumns: newMovedColumns,\n });\n }\n\n handleColumnVisibilityChanged(\n modelIndexes: ModelIndex[],\n visibilityOption?: VisibilityOptionType\n ): void {\n const { metricCalculator } = this.state;\n if (\n visibilityOption === VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW\n ) {\n modelIndexes.forEach(modelIndex => {\n metricCalculator.resetColumnWidth(modelIndex);\n });\n } else {\n modelIndexes.forEach(modelIndex => {\n metricCalculator.setColumnWidth(modelIndex, 0);\n });\n }\n this.grid?.forceUpdate();\n }\n\n handleCrossColumnSearch(\n searchValue: string,\n selectedSearchColumns: ColumnName[],\n invertSearchColumns: boolean\n ): void {\n const { model } = this.props;\n\n this.updateSearchFilter(\n searchValue,\n selectedSearchColumns,\n model.columns,\n invertSearchColumns\n );\n\n this.setState({\n searchValue,\n selectedSearchColumns,\n invertSearchColumns,\n });\n }\n\n updateSearchFilter = debounce(\n (\n searchValue: string,\n selectedSearchColumns: ColumnName[],\n columns: Column[],\n invertSearchColumns: boolean\n ): void => {\n const searchFilter = CrossColumnSearch.createSearchFilter(\n searchValue,\n selectedSearchColumns,\n columns,\n invertSearchColumns\n );\n this.setState({ searchFilter });\n },\n SET_FILTER_DEBOUNCE\n );\n\n handleAnimationLoop(): void {\n this.grid?.updateCanvasScale();\n this.grid?.updateCanvas();\n\n if (this.isAnimating) {\n this.animationFrame = requestAnimationFrame(this.handleAnimationLoop);\n }\n }\n\n handleAnimationStart(): void {\n log.debug2('handleAnimationStart');\n\n this.isAnimating = true;\n\n this.animationFrame = requestAnimationFrame(this.handleAnimationLoop);\n }\n\n handleAnimationEnd(): void {\n log.debug2('handleAnimationEnd');\n\n this.isAnimating = false;\n }\n\n handlePartitionAppend(value: string): void {\n const { onPartitionAppend } = this.props;\n const { partitionColumn } = this.state;\n onPartitionAppend(partitionColumn, value);\n }\n\n handlePartitionChange(partition: string): void {\n const { partitionColumn } = this.state;\n this.updatePartition(partition, partitionColumn);\n }\n\n handlePartitionFetchAll(): void {\n this.setState({\n partitionFilters: [],\n isSelectingPartition: false,\n });\n }\n\n handlePartitionDone(): void {\n this.setState({ isSelectingPartition: false });\n }\n\n handleTableLoadError(error: unknown): void {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n\n log.error(error);\n\n const { onError } = this.props;\n onError(error);\n }\n\n showAllColumns(): void {\n const { metricCalculator } = this.state;\n const userColumnWidths = metricCalculator.getUserColumnWidths();\n const entries = [...userColumnWidths.entries()];\n for (let i = 0; i < entries.length; i += 1) {\n const [modelIndex, columnWidth] = entries[i];\n if (columnWidth === 0) {\n metricCalculator.resetColumnWidth(modelIndex);\n }\n }\n this.grid?.forceUpdate();\n }\n\n toggleSort(columnIndex: VisibleIndex, addToExisting: boolean): void {\n log.info('Toggling sort for column', columnIndex);\n\n const { model } = this.props;\n const { sorts: currentSorts } = this.state;\n const modelColumn = this.getModelColumn(columnIndex);\n assertNotNull(modelColumn);\n const sorts = TableUtils.toggleSortForColumn(\n currentSorts,\n model.columns,\n modelColumn,\n addToExisting\n );\n this.updateSorts(sorts);\n }\n\n updateSorts(sorts: Sort[]): void {\n this.startLoading('Sorting...');\n this.setState({ sorts });\n this.grid?.forceUpdate();\n }\n\n sortColumn(\n modelColumn: ModelIndex,\n direction: SortDirection = TableUtils.sortDirection.none,\n isAbs = false,\n addToExisting = false\n ): void {\n assertNotNull(modelColumn);\n const { model } = this.props;\n const sorts = TableUtils.sortColumn(\n model.sort,\n model.columns,\n modelColumn,\n direction,\n isAbs,\n addToExisting\n );\n this.startLoading('Sorting...');\n this.setState({ sorts });\n this.grid?.forceUpdate();\n }\n\n reverse(reverseType: ReverseType): void {\n this.startLoading('Reversing...');\n this.setState({ reverseType });\n this.grid?.forceUpdate();\n }\n\n isReversible(): boolean {\n const { model } = this.props;\n return model.isReversible;\n }\n\n toggleFilterBar(focusIndex = this.lastFocusedFilterBarColumn): void {\n let { isFilterBarShown } = this.state;\n isFilterBarShown = !isFilterBarShown;\n this.setState({ isFilterBarShown });\n\n if (isFilterBarShown) {\n if (focusIndex != null) {\n this.focusFilterBar(focusIndex);\n } else {\n let columnIndex = 0;\n const { model } = this.props;\n const { columnCount } = model;\n for (let i = 0; i < columnCount; i += 1) {\n const modelColumn = this.getModelColumn(i);\n if (modelColumn != null) {\n const column = model.columns[modelColumn];\n if (column != null && TableUtils.isTextType(column.type)) {\n columnIndex = i;\n break;\n }\n }\n }\n this.focusFilterBar(columnIndex);\n }\n } else {\n this.grid?.focus();\n }\n }\n\n isTableSearchAvailable(): boolean {\n const { model, canToggleSearch } = this.props;\n const searchDisplayMode = model?.layoutHints?.searchDisplayMode;\n\n if (searchDisplayMode === dh.SearchDisplayMode?.SEARCH_DISPLAY_HIDE) {\n return false;\n }\n if (searchDisplayMode === dh.SearchDisplayMode?.SEARCH_DISPLAY_SHOW) {\n return true;\n }\n\n return canToggleSearch;\n }\n\n toggleSearchBar(): void {\n const { showSearchBar } = this.state;\n if (!this.isTableSearchAvailable()) {\n return;\n }\n\n const update = !showSearchBar;\n this.setState(\n {\n showSearchBar: update,\n },\n () => {\n if (update && this.crossColumnRef?.current) {\n this.crossColumnRef?.current.focus();\n } else {\n this.grid?.focus();\n }\n }\n );\n }\n\n toggleGotoRow(row = ''): void {\n const { isGotoRowShown } = this.state;\n if (row) {\n // if invoked with a row, keep open instead of toggle\n this.setState({\n isGotoRowShown: true,\n gotoRow: row,\n gotoRowError: '',\n });\n return;\n }\n this.setState({\n isGotoRowShown: !isGotoRowShown,\n gotoRow: '',\n gotoRowError: '',\n });\n }\n\n async commitPending(): Promise<void> {\n const { model } = this.props;\n if (!isEditableGridModel(model) || !model.isEditable) {\n throw new Error('Cannot save, table is not editable');\n }\n\n const { pendingSavePromise } = this.state;\n if (pendingSavePromise != null) {\n throw new Error('Save already in progress');\n }\n\n const containsGridCellInputField = document?.activeElement?.classList.contains(\n 'grid-cell-input-field'\n );\n if (containsGridCellInputField != null && containsGridCellInputField) {\n if (\n document.activeElement != null &&\n document.activeElement.classList.contains('error')\n ) {\n throw new ValidationError('Current input is invalid');\n }\n\n // Focus the grid again to commit any pending input changes\n this.grid?.focus();\n }\n\n const newPendingSavePromise = this.pending\n .add(model.commitPending())\n .then(() => {\n this.setState({ pendingSaveError: null, pendingSavePromise: null });\n })\n .catch(err => {\n if (!PromiseUtils.isCanceled(err)) {\n this.setState({ pendingSaveError: err, pendingSavePromise: null });\n }\n });\n this.setState({ pendingSavePromise: newPendingSavePromise });\n return newPendingSavePromise;\n }\n\n async discardPending(): Promise<void> {\n const { pendingSavePromise } = this.state;\n if (pendingSavePromise != null) {\n throw new Error('Cannot cancel a save in progress');\n }\n\n this.setState({\n pendingSavePromise: null,\n pendingSaveError: null,\n pendingDataMap: new Map(),\n pendingDataErrors: new Map(),\n });\n }\n\n /**\n * Select the passed in column and notify listener\n * @param column The column in this table to link\n */\n selectColumn(column: Column): void {\n const { onColumnSelected } = this.props;\n onColumnSelected(column);\n }\n\n /**\n * Select all the data for a given row and notify listener\n */\n selectData(columnIndex: ModelIndex, rowIndex: ModelIndex): void {\n const { model } = this.props;\n const { columns, groupedColumns } = model;\n const dataMap: RowDataMap = {};\n for (let i = 0; i < columns.length; i += 1) {\n const column = columns[i];\n const { name, type } = column;\n const value = model.valueForCell(i, rowIndex);\n const text = model.textForCell(i, rowIndex);\n const isExpandable =\n isExpandableGridModel(model) && model.isRowExpandable(rowIndex);\n const isGrouped = groupedColumns.find(c => c.name === name) != null;\n dataMap[name] = { value, text, type, isGrouped, isExpandable };\n }\n const { onDataSelected } = this.props;\n onDataSelected(rowIndex, dataMap);\n }\n\n handleAdvancedFilterChange(\n column: Column,\n filter: FilterCondition | null,\n options: AdvancedFilterOptions\n ): void {\n const { model } = this.props;\n const index = model.getColumnIndexByName(column.name);\n assertNotNull(index);\n this.setAdvancedFilter(index, filter, options);\n }\n\n handleAdvancedFilterSortChange(\n column: Column,\n direction: SortDirection,\n addToExisting = false\n ): void {\n const { model } = this.props;\n const columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n const oldSort = TableUtils.getSortForColumn(model.sort, columnIndex);\n let newSort = null;\n\n if (oldSort == null || oldSort.direction !== direction) {\n if (direction === TableUtils.sortDirection.descending) {\n newSort = column.sort().desc();\n } else {\n newSort = column.sort().asc();\n }\n }\n\n const sorts = TableUtils.setSortForColumn(\n model.sort,\n columnIndex,\n newSort,\n addToExisting\n );\n log.info('Setting table sorts', sorts);\n\n this.startLoading('Sorting...');\n this.setState({ sorts });\n\n this.grid?.forceUpdate();\n }\n\n handleAdvancedFilterDone(): void {\n this.grid?.focus();\n }\n\n handleAdvancedMenuOpened(column: GridRangeIndex): void {\n this.setState({ shownAdvancedFilter: column });\n }\n\n handleGotoRowOpened(): void {\n this.setState({ isGotoRowShown: true });\n }\n\n handleGotoRowClosed(): void {\n this.setState({ isGotoRowShown: false });\n }\n\n handleAdvancedMenuClosed(columnIndex: number): void {\n const { focusedFilterBarColumn, isFilterBarShown } = this.state;\n if (\n isFilterBarShown &&\n focusedFilterBarColumn === columnIndex &&\n this.filterInputRef?.current !== null\n ) {\n this.filterInputRef?.current.focus();\n this.setState({ shownAdvancedFilter: null });\n } else {\n this.setState({\n focusedFilterBarColumn: null,\n shownAdvancedFilter: null,\n });\n }\n }\n\n handleCancel(): void {\n this.rollback();\n }\n\n // eslint-disable-next-line class-methods-use-this\n handleChartChange(): void {\n // TODO: IDS-4242 Update Chart Preview\n }\n\n handleChartCreate(settings: ChartBuilderSettings): void {\n const { model, onCreateChart } = this.props;\n onCreateChart(settings, model);\n }\n\n handleGridError(error?: Error): void {\n log.warn('Grid Error', error);\n this.setState({\n toastMessage: <div className=\"error-message\">{`${error}`}</div>,\n });\n }\n\n handleFilterBarChange(value: string): void {\n this.startLoading('Filtering...', true);\n\n this.setState(({ focusedFilterBarColumn, quickFilters }) => {\n const newQuickFilters = new Map(quickFilters);\n if (focusedFilterBarColumn != null) {\n const modelIndex = this.getModelColumn(focusedFilterBarColumn);\n assertNotNull(modelIndex);\n this.applyQuickFilter(modelIndex, value, newQuickFilters);\n }\n return { quickFilters: newQuickFilters };\n });\n }\n\n handleFilterBarDone(setGridFocus = true, defocusInput = true): void {\n if (setGridFocus) {\n this.grid?.focus();\n }\n if (defocusInput) {\n this.setState({ focusedFilterBarColumn: null });\n }\n }\n\n handleFilterBarTab(backward: boolean): void {\n const { focusedFilterBarColumn } = this.state;\n assertNotNull(focusedFilterBarColumn);\n if (backward) {\n this.focusFilterBar(focusedFilterBarColumn - 1);\n } else {\n this.focusFilterBar(focusedFilterBarColumn + 1);\n }\n }\n\n handleFormatSelection(\n modelIndex: ModelIndex,\n selectedFormat: TableColumnFormat | null\n ): void {\n const { model } = this.props;\n const column = model.columns[modelIndex];\n const { customColumnFormatMap: prevCustomColumnFormatMap } = this.state;\n const customColumnFormatMap = new Map(prevCustomColumnFormatMap);\n\n if (selectedFormat != null) {\n const normalizedType = TableUtils.getNormalizedType(column.type);\n assertNotNull(normalizedType);\n const columnFormattingRule = Formatter.makeColumnFormattingRule(\n normalizedType,\n column.name,\n selectedFormat\n );\n\n customColumnFormatMap.set(column.name, columnFormattingRule);\n } else {\n customColumnFormatMap.delete(column.name);\n }\n\n this.updateFormatter({ customColumnFormatMap });\n }\n\n handleMenu(e: React.MouseEvent<HTMLButtonElement>): void {\n e.stopPropagation();\n this.setState({ isMenuShown: true });\n }\n\n handleMenuClose(): void {\n this.setState({ isMenuShown: false, openOptions: [] });\n }\n\n handleMenuBack(): void {\n this.setState(({ openOptions }) => {\n const newOptions = [...openOptions];\n newOptions.pop();\n return { openOptions: newOptions };\n });\n }\n\n handleMenuSelect(option: OptionItem): void {\n this.setState(({ openOptions }) => ({\n openOptions: [...openOptions, option],\n }));\n }\n\n handleRequestFailed(event: Event): void {\n const customEvent = event as CustomEvent;\n log.error('request failed:', customEvent.detail);\n this.stopLoading();\n if (this.canRollback()) {\n this.startLoading('Rolling back changes...', true);\n this.rollback();\n } else {\n log.error('Table failed and unable to rollback');\n const { onError } = this.props;\n onError(new Error(`Error displaying table: ${customEvent.detail}`));\n }\n }\n\n handleUpdate(): void {\n this.stopLoading();\n log.debug2('Received model update');\n\n const {\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverseType,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts,\n } = this.state;\n\n const config = {\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverseType,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts,\n };\n\n if (!isEmptyConfig(config)) {\n this.lastLoadedConfig = config;\n } else {\n this.lastLoadedConfig = null;\n }\n\n this.grid?.forceUpdate();\n }\n\n handleViewChanged(metrics?: GridMetrics): void {\n const { model } = this.props;\n const { selectionEndRow = 0 } = this.grid?.state ?? {};\n let pendingRowCount = 0;\n if (isEditableGridModel(model) && model.isEditable) {\n assertNotNull(metrics);\n const { bottomViewport } = metrics;\n\n // We have an editable table that we can add new rows to\n // Display empty rows beneath the table rows that user can fill in\n const bottomNonFloating = model.rowCount - model.floatingBottomRowCount;\n if (selectionEndRow === bottomNonFloating - 1) {\n // Selection is in the last row, add another blank row\n pendingRowCount = model.pendingRowCount + 1;\n } else if (selectionEndRow === bottomNonFloating - 2) {\n // We may have just added a row based on selection moving, so just leave it as is\n pendingRowCount = model.pendingRowCount;\n } else {\n // Otherwise fill up the viewport with empty cells\n pendingRowCount = Math.max(\n 0,\n bottomViewport -\n (model.rowCount - model.pendingRowCount) -\n model.floatingTopRowCount -\n model.floatingBottomRowCount -\n 1\n );\n }\n }\n\n this.setState({ metrics, pendingRowCount });\n }\n\n handleSelectionChanged(selectedRanges?: GridRange[]): void {\n assertNotNull(selectedRanges);\n const { onSelectionChanged } = this.props;\n const { copyOperation } = this.state;\n this.setState({ selectedRanges });\n if (copyOperation != null) {\n this.setState({ copyOperation: null });\n }\n onSelectionChanged(selectedRanges);\n }\n\n handleMovedColumnsChanged(\n movedColumns: MoveOperation[],\n onChangeApplied: (() => void) | undefined = () => null\n ): void {\n this.setState({ movedColumns }, onChangeApplied);\n }\n\n handleTooltipRef(tooltip: Tooltip): void {\n // Need to start the timer right away, since we're creating the tooltip when we want the timer to start\n if (tooltip != null) {\n tooltip.startTimer();\n }\n\n this.tooltip = tooltip;\n }\n\n handleConditionalFormatsChange(\n conditionalFormats: SidebarFormattingRule[]\n ): void {\n log.debug('Updated conditional formats', conditionalFormats);\n this.setState({ conditionalFormats });\n }\n\n handleConditionalFormatCreate(): void {\n log.debug('Create new conditional format');\n const { openOptions, conditionalFormats } = this.state;\n this.setState({\n openOptions: [\n ...openOptions,\n {\n type: OptionType.CONDITIONAL_FORMATTING_EDIT,\n title: `Create Formatting Rule`,\n },\n ],\n conditionalFormatEditIndex: conditionalFormats.length,\n // Start with a blank rule\n conditionalFormatPreview: undefined,\n });\n }\n\n handleConditionalFormatEdit(index: number): void {\n log.debug('Edit conditional format', index);\n const { openOptions, conditionalFormats } = this.state;\n this.setState({\n openOptions: [\n ...openOptions,\n {\n type: OptionType.CONDITIONAL_FORMATTING_EDIT,\n title: `Edit Formatting Rule`,\n },\n ],\n conditionalFormatEditIndex: index,\n // Clone rule to preview temporary changes\n conditionalFormatPreview: { ...conditionalFormats[index] },\n });\n }\n\n // Apply live changes\n handleConditionalFormatEditorUpdate = debounce(\n (conditionalFormatPreview?: SidebarFormattingRule): void => {\n this.setState({ conditionalFormatPreview });\n },\n SET_CONDITIONAL_FORMAT_DEBOUNCE\n );\n\n handleConditionalFormatEditorSave(config: SidebarFormattingRule): void {\n log.debug('Save conditional format changes', config);\n this.setState(\n state => {\n if (state.conditionalFormatEditIndex === null) {\n log.debug('Invalid format index');\n return null;\n }\n const conditionalFormats = [...state.conditionalFormats];\n conditionalFormats[state.conditionalFormatEditIndex] = config;\n return { conditionalFormats };\n },\n () => {\n this.handleMenuBack();\n }\n );\n }\n\n handleConditionalFormatEditorCancel(): void {\n this.handleMenuBack();\n // Not resetting conditionalFormatPreview here\n // to prevent editor fields change during the menu transition\n this.setState({ conditionalFormatEditIndex: null });\n }\n\n handleUpdateCustomColumns(customColumns: string[]): void {\n log.info(`handleUpdateCustomColumns:`, customColumns);\n\n const { model } = this.props;\n const {\n movedColumns,\n sorts,\n quickFilters,\n advancedFilters,\n selectDistinctColumns,\n } = this.state;\n\n const { columns } = model;\n const oldCustomColumns = model.customColumns.map(\n customColumn => `${customColumn}`\n );\n\n const removedColumnNames = IrisGridUtils.getRemovedCustomColumnNames(\n oldCustomColumns,\n customColumns\n );\n if (removedColumnNames.length > 0) {\n const newSorts = IrisGridUtils.removeSortsInColumns(\n sorts,\n removedColumnNames\n );\n const newQuickFilters = IrisGridUtils.removeFiltersInColumns(\n columns,\n quickFilters,\n removedColumnNames\n );\n const newAdvancedFilters = IrisGridUtils.removeFiltersInColumns(\n columns,\n advancedFilters,\n removedColumnNames\n );\n const newMovedColumns = IrisGridUtils.removeColumnFromMovedColumns(\n columns,\n movedColumns,\n removedColumnNames\n );\n const newSelectDistinctColumns = IrisGridUtils.removeColumnsFromSelectDistinctColumns(\n selectDistinctColumns,\n removedColumnNames\n );\n if (newSorts.length !== sorts.length) {\n log.debug('removing sorts from removed custom columns...');\n this.setState({ sorts: newSorts });\n }\n if (\n newQuickFilters.size !== quickFilters.size ||\n newAdvancedFilters.size !== advancedFilters.size\n ) {\n log.debug(`removing filters from removed custom columns...`);\n this.setState({\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters,\n });\n }\n if (!deepEqual(movedColumns, newMovedColumns)) {\n log.debug(\n `change moved columns for removed custom columns`,\n newMovedColumns\n );\n this.setState({ movedColumns: newMovedColumns });\n }\n if (!deepEqual(selectDistinctColumns, newSelectDistinctColumns)) {\n log.debug(\n `change selectDistinct columns for removed custom columns`,\n newMovedColumns\n );\n this.setState({ selectDistinctColumns: newSelectDistinctColumns });\n }\n }\n\n this.setState({ customColumns });\n this.startLoading('Applying custom columns...');\n }\n\n handleCustomColumnsChanged(): void {\n log.debug('custom columns changed');\n const { isReady } = this.state;\n if (isReady) {\n this.stopLoading();\n this.grid?.forceUpdate();\n } else {\n this.initState();\n }\n }\n\n handlePendingCommitClicked(): Promise<void> {\n return this.commitPending();\n }\n\n handlePendingDiscardClicked(): Promise<void> {\n return this.discardPending();\n }\n\n handlePendingDataUpdated(): void {\n log.debug('pending data updated');\n const { model } = this.props;\n const { pendingDataMap, pendingDataErrors } = model;\n this.setState({\n pendingDataMap,\n pendingDataErrors,\n pendingSaveError: null,\n });\n this.grid?.forceUpdate();\n }\n\n /**\n * User added, removed, or changed the order of aggregations, or position\n * @param aggregationSettings The new aggregation settings\n */\n handleAggregationsChange(aggregationSettings: AggregationSettings): void {\n log.debug('handleAggregationsChange', aggregationSettings);\n\n this.startLoading(\n `Aggregating ${aggregationSettings.aggregations\n .map(a => a.operation)\n .join(', ')}...`\n );\n this.setState({ aggregationSettings });\n }\n\n /**\n * A specific aggregation has been modified\n * @param aggregation The new aggregation\n */\n handleAggregationChange(aggregation: Aggregation): void {\n log.debug('handleAggregationChange', aggregation);\n\n this.startLoading(`Aggregating ${aggregation.operation}...`);\n this.setState(({ aggregationSettings }) => ({\n selectedAggregation: aggregation,\n aggregationSettings: {\n ...aggregationSettings,\n aggregations: aggregationSettings.aggregations.map(a =>\n a.operation === aggregation.operation ? aggregation : a\n ),\n },\n }));\n }\n\n /**\n * An aggregations has been selected for editing\n * @param aggregation The aggregation to edit\n */\n handleAggregationEdit(aggregation: Aggregation): void {\n log.debug('handleAggregationEdit', aggregation);\n\n const { openOptions } = this.state;\n\n this.setState({\n openOptions: [\n ...openOptions,\n {\n type: OptionType.AGGREGATION_EDIT,\n title: `Edit Columns to ${aggregation.operation}`,\n },\n ],\n selectedAggregation: aggregation,\n });\n }\n\n handleRollupChange(rollupConfig: UIRollupConfig): void {\n log.info('Rollup change', rollupConfig);\n\n this.resetGridViewState();\n this.showAllColumns();\n this.clearAllFilters();\n\n this.startLoading(\n `Grouping by columns ${rollupConfig?.columns?.join(', ') ?? ''}...`\n );\n\n // Have to clear select distinct since rollup uses the original columns, not the current ones.\n // IrisGridProxyModel has a check to prevent model update\n // when selectDistinctModel is cleared and the rollupConfig is set on the model.\n this.setState({\n rollupConfig,\n movedColumns: [],\n sorts: [],\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n selectDistinctColumns: [],\n });\n }\n\n handleSelectDistinctChanged(columnNames: ColumnName[]): void {\n log.debug('SelectDistinct change', columnNames);\n\n this.resetGridViewState();\n\n this.showAllColumns();\n this.clearAllFilters();\n\n this.startLoading(\n `Selecting distinct values in ${\n columnNames.length > 0 ? columnNames.join(', ') : ''\n }...`\n );\n\n this.setState({\n selectDistinctColumns: columnNames,\n movedColumns: [],\n sorts: [],\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n });\n }\n\n handleDownloadTableStart(): void {\n const { canDownloadCsv } = this.props;\n if (canDownloadCsv) {\n this.setState({\n isTableDownloading: true,\n tableDownloadProgress: 0,\n tableDownloadEstimatedTime: null,\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.INITIATING,\n });\n } else {\n log.error(\n 'Attempted to handleDownloadTableStart for user without download CSV permission.'\n );\n }\n }\n\n handleDownloadTable(\n fileName: string,\n frozenTable: Table,\n tableSubscription: TableViewportSubscription,\n gridRanges: GridRange[]\n ): void {\n const { canDownloadCsv } = this.props;\n if (canDownloadCsv) {\n log.info(\n 'start table downloading',\n fileName,\n frozenTable,\n tableSubscription,\n gridRanges\n );\n this.setState(() => {\n if (this.tableSaver) {\n this.tableSaver.startDownload(\n fileName,\n frozenTable,\n tableSubscription,\n gridRanges\n );\n }\n return {\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING,\n };\n });\n } else {\n log.error(\n 'Attempted to handleDownloadTable for user without download CSV permission.'\n );\n }\n }\n\n handleCancelDownloadTable(): void {\n this.tableSaver?.cancelDownload();\n this.setState({ isTableDownloading: false });\n }\n\n handleDownloadProgressUpdate = throttle(\n (\n tableDownloadProgress: number,\n tableDownloadEstimatedTime: number | null\n ) => {\n const { tableDownloadStatus } = this.state;\n if (\n tableDownloadStatus === TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING\n ) {\n this.setState({\n tableDownloadProgress,\n tableDownloadEstimatedTime,\n });\n }\n },\n UPDATE_DOWNLOAD_THROTTLE\n );\n\n handleDownloadCompleted(): void {\n this.setState({\n isTableDownloading: false,\n tableDownloadProgress: 100,\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.FINISHED,\n });\n }\n\n handleDownloadCanceled(): void {\n this.setState({\n isTableDownloading: false,\n tableDownloadProgress: 0,\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.CANCELED,\n });\n }\n\n /**\n * Delete the specified ranges from the table.\n * @param ranges The ranges to delete\n */\n deleteRanges(ranges: GridRange[]): void {\n const { model } = this.props;\n this.pending.add(model.delete(ranges)).catch(e => {\n if (!PromiseUtils.isCanceled(e)) {\n log.error('Unable to delete ranges', ranges, e);\n }\n });\n }\n\n resetColumnSelection(): void {\n if (this.grid == null) {\n return;\n }\n const { isSelectingColumn } = this.props;\n if (isSelectingColumn) {\n const { columnAllowedCursor } = this.props;\n this.grid.setState({ cursor: columnAllowedCursor });\n } else {\n this.grid.setState({ cursor: null });\n this.setState({ hoverSelectColumn: null });\n }\n }\n\n resetGridViewState(forceUpdate = true): void {\n if (!this.grid) {\n return;\n }\n\n this.grid.clearSelectedRanges();\n this.grid.setViewState(\n { left: 0, top: 0, topOffset: 0, leftOffset: 0 },\n forceUpdate\n );\n }\n\n sendStateChange(): void {\n if (!this.grid) {\n return;\n }\n const { state: irisGridState } = this;\n const { state: gridState } = this.grid;\n const { onStateChange } = this.props;\n\n onStateChange(irisGridState, gridState);\n }\n\n handleOverflowClose(): void {\n this.setState({\n showOverflowModal: false,\n });\n }\n\n getColumnBoundingRect(): DOMRect {\n const { metrics, shownColumnTooltip } = this.state;\n assertNotNull(metrics);\n assertNotNull(shownColumnTooltip);\n const gridRect = this.gridWrapper?.getBoundingClientRect();\n const popperMargin = 20;\n assertNotNull(gridRect);\n const {\n columnHeaderHeight,\n visibleColumnXs,\n visibleColumnWidths,\n width,\n columnHeaderMaxDepth,\n } = metrics;\n const columnX = visibleColumnXs.get(shownColumnTooltip);\n const columnWidth = visibleColumnWidths.get(shownColumnTooltip);\n\n assertNotNull(columnX);\n assertNotNull(columnWidth);\n\n const left =\n gridRect.left +\n clamp(columnX + columnWidth / 2, popperMargin, width - popperMargin);\n\n return {\n top: gridRect.top + (columnHeaderMaxDepth - 1) * columnHeaderHeight,\n left:\n gridRect.left +\n clamp(columnX + columnWidth / 2, popperMargin, width - popperMargin),\n bottom: gridRect.top + columnHeaderMaxDepth * columnHeaderHeight,\n right:\n gridRect.left +\n clamp(columnX + columnWidth / 2, popperMargin, width - popperMargin) +\n 1,\n width: 1,\n height: columnHeaderHeight,\n x: left,\n y: gridRect.top,\n toJSON: () => {\n throw new Error('not implemented');\n },\n };\n }\n\n getOverflowButtonTooltip = memoize(\n (overflowButtonTooltipProps: CSSProperties): ReactNode => {\n if (overflowButtonTooltipProps == null) {\n return null;\n }\n\n const wrapperStyle: CSSProperties = {\n position: 'absolute',\n ...overflowButtonTooltipProps,\n pointerEvents: 'none',\n };\n\n const popperOptions: PopperOptions = {\n placement: 'left',\n modifiers: {\n flip: {\n behavior: ['left', 'right'],\n },\n },\n };\n\n return (\n <div style={wrapperStyle}>\n <Tooltip\n key={Date.now()}\n options={popperOptions}\n ref={this.handleTooltipRef}\n >\n View full contents\n </Tooltip>\n </div>\n );\n }\n );\n\n handleGotoRowSelectedRowNumberSubmit(): void {\n const { gotoRow: rowNumber } = this.state;\n this.focusRowInGrid(rowNumber);\n }\n\n focusRowInGrid(rowNumber: string): void {\n const { model } = this.props;\n const { rowCount } = model;\n this.setState({ gotoRow: rowNumber });\n if (rowNumber === '') {\n this.setState({ gotoRowError: '' });\n return;\n }\n const rowInt = parseInt(rowNumber, 10);\n if (rowInt > rowCount || rowInt < -rowCount) {\n this.setState({ gotoRowError: 'Invalid row index' });\n } else if (rowInt === 0) {\n this.setState({ gotoRowError: '' });\n this.grid?.setFocusRow(0);\n } else if (rowInt < 0) {\n this.setState({ gotoRowError: '' });\n this.grid?.setFocusRow(rowInt + rowCount);\n } else {\n this.grid?.setFocusRow(rowInt - 1);\n this.setState({ gotoRowError: '' });\n }\n }\n\n handleGotoRowSelectedRowNumberChanged(\n event: ChangeEvent<HTMLInputElement>\n ): void {\n const rowNumber = event.target.value;\n this.focusRowInGrid(rowNumber);\n }\n\n getColumnTooltip(\n visibleIndex: VisibleIndex,\n metrics: GridMetrics,\n model: IrisGridModel\n ): ReactNode {\n const {\n columnHeaderHeight,\n columnHeaderMaxDepth,\n visibleColumnXs,\n visibleColumnWidths,\n width,\n } = metrics;\n const columnX = visibleColumnXs.get(visibleIndex);\n const columnWidth = visibleColumnWidths.get(visibleIndex);\n\n if (columnX == null || columnWidth == null) {\n return null;\n }\n\n /**\n * Create a wrapper dom element, the size of the column header.\n * The wrapper acts as tooltip parent, the tooltip component\n * will trigger hide on mouseleave of wrapper or tooltip.\n * The wrapper should be bound to within the grid dimensions,\n * so popper only remains triggered while mouse is inside the panel.\n */\n const boundedLeft = Math.max(0, columnX);\n let boundedWidth = columnWidth;\n if (columnX + columnWidth > width) {\n // column is extending past right edge\n boundedWidth = width - columnX;\n } else if (columnX < 0) {\n // column is extending past left edge\n boundedWidth = columnWidth - Math.abs(columnX);\n }\n\n const wrapperStyle: CSSProperties = {\n position: 'absolute',\n top: (columnHeaderMaxDepth - 1) * columnHeaderHeight,\n left: boundedLeft,\n width: boundedWidth,\n height: columnHeaderHeight,\n pointerEvents: 'none',\n };\n\n /**\n * Because the popper parent wrapper center is no longer the same as\n * the column label center, we create a popper virtual ref, to handle\n * positioning and keep the popper centered on the label. Creates a\n * 1px x headerHeight virtual object, placed centered on the column\n * label, clamped to 0 + margin to width - margin. We add a margin,\n * otherwise the arrow wants to escape the boundary.\n */\n const virtualReference: ReferenceObject = {\n clientWidth: 1,\n clientHeight: columnHeaderHeight,\n getBoundingClientRect: this.getColumnBoundingRect,\n };\n\n const popperOptions: PopperOptions = {\n placement: 'bottom',\n modifiers: {\n flip: {\n behavior: ['bottom', 'top'],\n },\n },\n };\n\n const modelColumn = this.getModelColumn(visibleIndex);\n if (modelColumn == null) return null;\n\n const column = model.columns[modelColumn];\n if (column == null) return null;\n\n return (\n <div style={wrapperStyle}>\n <Tooltip\n key={column.name}\n timeout={400}\n interactive\n options={popperOptions}\n ref={this.handleTooltipRef}\n referenceObject={virtualReference}\n onExited={() => {\n this.setState({ shownColumnTooltip: null });\n }}\n >\n <ColumnStatistics\n model={model}\n column={column}\n onStatistics={() => {\n this.tooltip?.update();\n }}\n />\n </Tooltip>\n </div>\n );\n }\n\n render(): ReactElement | null {\n const {\n children,\n customFilters,\n getDownloadWorker,\n isSelectingColumn,\n isStuckToBottom,\n isStuckToRight,\n model,\n name,\n onlyFetchVisibleColumns,\n alwaysFetchColumns,\n advancedSettings,\n onAdvancedSettingsChange,\n canDownloadCsv,\n onCreateChart,\n } = this.props;\n const {\n metricCalculator,\n metrics,\n isFilterBarShown,\n isSelectingPartition,\n isMenuShown,\n isReady,\n copyOperation,\n focusedFilterBarColumn,\n loadingText,\n loadingScrimProgress,\n loadingSpinnerShown,\n keyHandlers,\n mouseHandlers,\n shownColumnTooltip,\n hoverAdvancedFilter,\n shownAdvancedFilter,\n hoverSelectColumn,\n quickFilters,\n advancedFilters,\n partition,\n partitionFilters,\n partitionTable,\n partitionColumn,\n searchFilter,\n selectDistinctColumns,\n\n movedColumns,\n movedRows,\n\n formatter,\n conditionalFormats,\n conditionalFormatPreview,\n conditionalFormatEditIndex,\n\n sorts,\n reverseType,\n customColumns,\n\n selectedRanges,\n isTableDownloading,\n tableDownloadStatus,\n tableDownloadProgress,\n tableDownloadEstimatedTime,\n\n showSearchBar,\n searchValue,\n selectedSearchColumns,\n invertSearchColumns,\n\n aggregationSettings,\n selectedAggregation,\n rollupConfig,\n openOptions,\n pendingSavePromise,\n pendingSaveError,\n pendingRowCount,\n pendingDataErrors,\n pendingDataMap,\n toastMessage,\n frozenColumns,\n showOverflowModal,\n overflowText,\n overflowButtonTooltipProps,\n isGotoRowShown,\n gotoRow,\n gotoRowError,\n } = this.state;\n if (!isReady) {\n return null;\n }\n\n const theme = this.getTheme();\n\n const filter = this.getCachedFilter(\n customFilters,\n quickFilters,\n advancedFilters,\n partitionFilters,\n searchFilter\n );\n\n const userColumnWidths = metricCalculator.getUserColumnWidths();\n const stateOverride = this.getCachedStateOverride(\n hoverSelectColumn,\n isFilterBarShown,\n isSelectingColumn,\n loadingScrimProgress,\n quickFilters,\n advancedFilters,\n sorts,\n reverseType,\n rollupConfig,\n isMenuShown\n );\n const top = metrics ? metrics.top : 0;\n const bottom = metrics ? metrics.bottomViewport : 0;\n let left = null;\n let right = null;\n if (onlyFetchVisibleColumns) {\n left = metrics ? metrics.left : 0;\n right = metrics ? metrics.right : 0;\n }\n const isVisible =\n metrics != null && metrics.width > 0 && metrics.height > 0;\n const isRollup = (rollupConfig?.columns?.length ?? 0) > 0;\n\n let focusField = null;\n\n const debounceMs = metrics\n ? Math.min(\n Math.max(IrisGrid.minDebounce, Math.round(metrics.rowCount / 200)),\n IrisGrid.maxDebounce\n )\n : IrisGrid.maxDebounce;\n\n if (isFilterBarShown && focusedFilterBarColumn != null && metrics != null) {\n const {\n gridX,\n gridY,\n visibleColumnXs,\n visibleColumnWidths,\n width,\n } = metrics;\n const columnX = visibleColumnXs.get(focusedFilterBarColumn);\n const columnWidth = visibleColumnWidths.get(focusedFilterBarColumn);\n if (columnX != null && columnWidth != null) {\n const x = gridX + columnX;\n const y = gridY - (theme.filterBarHeight ?? 0);\n const fieldWidth = columnWidth + 1; // cover right border\n const fieldHeight = (theme.filterBarHeight ?? 0) - 1; // remove bottom border\n const style = {\n top: y,\n left: x,\n minWidth: Math.min(fieldWidth, width - x), // Don't cause overflow\n height: fieldHeight,\n };\n let value = '';\n let isValid = true;\n const modelColumn = this.getModelColumn(focusedFilterBarColumn);\n assertNotNull(modelColumn);\n const quickFilter = quickFilters.get(modelColumn);\n const advancedFilter = advancedFilters.get(modelColumn);\n if (quickFilter != null) {\n value = quickFilter.text;\n isValid = quickFilter.filter != null;\n }\n const isBarFiltered =\n quickFilters.size !== 0 || advancedFilters.size !== 0;\n focusField = (\n <FilterInputField\n ref={this.filterInputRef}\n style={style}\n className={classNames({\n error: !isValid,\n active: value !== '' || advancedFilter != null,\n 'iris-grid-has-filter': isBarFiltered,\n })}\n isAdvancedFilterSet={advancedFilter != null}\n onAdvancedFiltersTriggered={() => {\n this.setState({ shownAdvancedFilter: focusedFilterBarColumn });\n }}\n key={focusedFilterBarColumn}\n onChange={this.handleFilterBarChange}\n onDone={this.handleFilterBarDone}\n onTab={this.handleFilterBarTab}\n onContextMenu={this.grid?.handleContextMenu}\n debounceMs={debounceMs}\n value={value}\n />\n );\n }\n }\n\n let loadingElement = null;\n if (loadingText != null) {\n const loadingStatus = (\n <div className=\"iris-grid-loading-status\">\n <div\n className={classNames('iris-grid-loading-status-bar', {\n show: loadingSpinnerShown,\n })}\n >\n {loadingText}\n </div>\n <button\n type=\"button\"\n onClick={this.handleCancel}\n className={classNames('iris-grid-btn-cancel', {\n show: loadingSpinnerShown,\n })}\n >\n <FontAwesomeIcon icon={vsClose} transform=\"down-1\" />\n Cancel\n </button>\n </div>\n );\n const gridY = metrics ? metrics.gridY : 0;\n loadingElement = (\n <div className=\"iris-grid-loading\" style={{ top: gridY }}>\n {loadingStatus}\n </div>\n );\n }\n\n let columnTooltip: React.ReactNode = null;\n if (shownColumnTooltip != null && metrics) {\n columnTooltip = this.getColumnTooltip(shownColumnTooltip, metrics, model);\n // #510 We may need to update the position of the tooltip if it's already opened and columns are resized\n this.tooltip?.update();\n }\n\n const filterBar = [];\n if (metrics && isFilterBarShown) {\n const {\n gridX,\n gridY,\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths,\n } = metrics;\n const { filterBarHeight } = theme;\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const columnIndex = visibleColumns[i];\n\n const columnX = visibleColumnXs.get(columnIndex);\n const columnWidth = visibleColumnWidths.get(columnIndex);\n const modelColumn = this.getModelColumn(columnIndex);\n if (modelColumn != null) {\n const isFilterable = model.isFilterable(modelColumn);\n if (\n isFilterable &&\n columnX != null &&\n columnWidth != null &&\n columnWidth > 0\n ) {\n const x = gridX + columnX + columnWidth - 24;\n const y = gridY - (filterBarHeight ?? 0) + 2; // 2 acts as top margin for the button\n const style: CSSProperties = {\n position: 'absolute',\n top: y,\n left: x,\n };\n const advancedFilter = advancedFilters.get(modelColumn);\n const isFilterSet = advancedFilter != null;\n const isFilterVisible =\n columnIndex === hoverAdvancedFilter ||\n columnIndex === focusedFilterBarColumn ||\n isFilterSet;\n const element = (\n <div\n className={classNames('advanced-filter-button-container', {\n hidden: !isFilterVisible,\n })}\n key={columnIndex}\n style={style}\n >\n {isFilterVisible && (\n <Button\n kind=\"ghost\"\n className={classNames(\n 'btn-link-icon advanced-filter-button',\n {\n 'filter-set': isFilterSet,\n }\n )}\n onClick={() => {\n this.setState({ shownAdvancedFilter: columnIndex });\n }}\n onContextMenu={event => {\n this.grid?.handleContextMenu(event);\n }}\n onMouseEnter={() => {\n this.setState({ hoverAdvancedFilter: columnIndex });\n }}\n onMouseLeave={() => {\n this.setState({ hoverAdvancedFilter: null });\n }}\n >\n <div className=\"fa-layers\">\n <FontAwesomeIcon\n icon={dhFilterFilled}\n className=\"filter-solid\"\n />\n <FontAwesomeIcon\n icon={vsFilter}\n className=\"filter-light\"\n />\n </div>\n </Button>\n )}\n </div>\n );\n filterBar.push(element);\n }\n }\n }\n }\n const advancedFilterMenus = [];\n if (metrics) {\n const {\n gridX,\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths,\n columnHeaderHeight,\n } = metrics;\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const columnIndex = visibleColumns[i];\n const columnX = visibleColumnXs.get(columnIndex);\n const columnWidth = visibleColumnWidths.get(columnIndex);\n if (columnX != null && columnWidth != null && columnWidth > 0) {\n const xColumnHeader = gridX + columnX;\n const xFilterBar = gridX + columnX + columnWidth - 20;\n const style: CSSProperties = isFilterBarShown\n ? {\n position: 'absolute',\n top: columnHeaderHeight,\n left: xFilterBar,\n width: 20,\n height: theme.filterBarHeight,\n }\n : {\n position: 'absolute',\n top: 0,\n left: xColumnHeader,\n width: columnWidth,\n height: columnHeaderHeight,\n };\n const modelColumn = this.getModelColumn(columnIndex);\n if (modelColumn != null) {\n const column = model.columns[modelColumn];\n const advancedFilter = advancedFilters.get(modelColumn);\n const { options: advancedFilterOptions } = advancedFilter || {};\n const sort = TableUtils.getSortForColumn(model.sort, modelColumn);\n const sortDirection = sort ? sort.direction : null;\n const element = (\n <div\n key={columnIndex}\n className=\"advanced-filter-menu-container\"\n style={style}\n >\n <Popper\n className=\"advanced-filter-menu-popper\"\n onEntered={this.getAdvancedMenuOpenedHandler(columnIndex)}\n onExited={() => {\n this.handleAdvancedMenuClosed(columnIndex);\n }}\n isShown={shownAdvancedFilter === columnIndex}\n interactive\n closeOnBlur\n options={{\n positionFixed: true,\n }}\n >\n {this.getCachedAdvancedFilterMenuActions(\n model,\n column,\n advancedFilterOptions,\n sortDirection,\n formatter\n )}\n </Popper>\n </div>\n );\n advancedFilterMenus.push(element);\n }\n }\n }\n }\n\n const optionItems = this.getCachedOptionItems(\n onCreateChart !== undefined && model.isChartBuilderAvailable,\n model.isCustomColumnsAvailable,\n model.isFormatColumnsAvailable,\n model.isRollupAvailable,\n model.isTotalsAvailable,\n model.isSelectDistinctAvailable,\n model.isExportAvailable,\n this.toggleFilterBarAction,\n this.toggleSearchBarAction,\n this.toggleGotoRowAction,\n isFilterBarShown,\n showSearchBar,\n canDownloadCsv,\n this.isTableSearchAvailable(),\n isGotoRowShown,\n advancedSettings.size > 0\n );\n\n const openOptionsStack = openOptions.map(option => {\n switch (option.type) {\n case OptionType.CHART_BUILDER:\n return (\n <ChartBuilder\n model={model}\n onChange={this.handleChartChange}\n onSubmit={this.handleChartCreate}\n key={OptionType.CHART_BUILDER}\n />\n );\n case OptionType.VISIBILITY_ORDERING_BUILDER:\n return (\n <VisibilityOrderingBuilder\n model={model}\n movedColumns={movedColumns}\n userColumnWidths={userColumnWidths}\n onColumnVisibilityChanged={this.handleColumnVisibilityChanged}\n onMovedColumnsChanged={this.handleMovedColumnsChanged}\n key={OptionType.VISIBILITY_ORDERING_BUILDER}\n />\n );\n case OptionType.CONDITIONAL_FORMATTING:\n return (\n <ConditionalFormattingMenu\n rules={conditionalFormats}\n onChange={this.handleConditionalFormatsChange}\n onCreate={this.handleConditionalFormatCreate}\n onSelect={this.handleConditionalFormatEdit}\n />\n );\n case OptionType.CONDITIONAL_FORMATTING_EDIT:\n assertNotNull(model.columns);\n assertNotNull(this.handleConditionalFormatEditorUpdate);\n return (\n <ConditionalFormatEditor\n columns={model.columns}\n rule={conditionalFormatPreview}\n onUpdate={this.handleConditionalFormatEditorUpdate}\n onSave={this.handleConditionalFormatEditorSave}\n onCancel={this.handleConditionalFormatEditorCancel}\n />\n );\n case OptionType.CUSTOM_COLUMN_BUILDER:\n return (\n <CustomColumnBuilder\n model={model}\n customColumns={customColumns}\n onSave={this.handleUpdateCustomColumns}\n onCancel={this.handleMenuBack}\n key={OptionType.CUSTOM_COLUMN_BUILDER}\n />\n );\n case OptionType.ROLLUP_ROWS:\n return (\n <RollupRows\n model={model}\n onChange={this.handleRollupChange}\n config={rollupConfig}\n key={OptionType.ROLLUP_ROWS}\n />\n );\n case OptionType.AGGREGATIONS:\n return (\n <Aggregations\n settings={aggregationSettings}\n isRollup={isRollup}\n onChange={this.handleAggregationsChange}\n onEdit={this.handleAggregationEdit}\n />\n );\n case OptionType.AGGREGATION_EDIT:\n return (\n selectedAggregation && (\n <AggregationEdit\n aggregation={selectedAggregation}\n columns={model.originalColumns}\n onChange={this.handleAggregationChange}\n />\n )\n );\n case OptionType.TABLE_EXPORTER:\n return (\n <TableCsvExporter\n model={model}\n name={name}\n isDownloading={isTableDownloading}\n tableDownloadStatus={tableDownloadStatus}\n tableDownloadProgress={tableDownloadProgress}\n tableDownloadEstimatedTime={\n tableDownloadEstimatedTime ?? undefined\n }\n onDownload={this.handleDownloadTable}\n onDownloadStart={this.handleDownloadTableStart}\n onCancel={this.handleCancelDownloadTable}\n selectedRanges={selectedRanges}\n key={OptionType.TABLE_EXPORTER}\n />\n );\n case OptionType.SELECT_DISTINCT:\n return (\n <SelectDistinctBuilder\n model={model}\n selectDistinctColumns={selectDistinctColumns}\n onChange={this.handleSelectDistinctChanged}\n />\n );\n case OptionType.ADVANCED_SETTINGS:\n return (\n <AdvancedSettingsMenu\n items={advancedSettings}\n onChange={onAdvancedSettingsChange}\n />\n );\n\n default:\n throw Error(`Unexpected option type ${option.type}`);\n }\n });\n\n const hiddenColumns = this.getCachedHiddenColumns(\n IrisGridUtils.getHiddenColumns(userColumnWidths)\n );\n\n return (\n <div className=\"iris-grid\" role=\"presentation\">\n <div className=\"iris-grid-column\">\n {children != null && <div className=\"iris-grid-bar\">{children}</div>}\n <CSSTransition\n in={isSelectingPartition}\n timeout={ThemeExport.transitionSlowMs}\n classNames=\"iris-grid-bar-horizontal\"\n onEnter={this.handleAnimationStart}\n onEntered={this.handleAnimationEnd}\n onExit={this.handleAnimationStart}\n onExited={this.handleAnimationEnd}\n mountOnEnter\n unmountOnExit\n >\n <div className=\"iris-grid-partition-selector-wrapper iris-grid-bar iris-grid-bar-primary\">\n {partitionTable && partitionColumn && (\n <IrisGridPartitionSelector\n table={partitionTable}\n getFormattedString={(\n value: unknown,\n type: string,\n stringName: string\n ) => model.displayString(value, type, stringName)}\n columnName={partitionColumn.name}\n partition={partition}\n onChange={this.handlePartitionChange}\n onFetchAll={this.handlePartitionFetchAll}\n onAppend={this.handlePartitionAppend}\n onDone={this.handlePartitionDone}\n />\n )}\n </div>\n </CSSTransition>\n <CSSTransition\n in={showSearchBar}\n timeout={ThemeExport.transitionSlowMs}\n classNames=\"iris-grid-bar-horizontal\"\n onEnter={this.handleAnimationStart}\n onEntered={this.handleAnimationEnd}\n onExit={this.handleAnimationStart}\n onExited={this.handleAnimationEnd}\n mountOnEnter\n unmountOnExit\n >\n <div className=\"iris-grid-bar\">\n <CrossColumnSearch\n value={searchValue}\n selectedColumns={selectedSearchColumns}\n invertSelection={invertSearchColumns}\n onChange={this.handleCrossColumnSearch}\n columns={model.columns}\n ref={this.crossColumnRef}\n />\n </div>\n </CSSTransition>\n <div\n className=\"grid-wrapper\"\n ref={gridWrapper => {\n this.gridWrapper = gridWrapper;\n }}\n >\n <Grid\n ref={grid => {\n this.grid = grid;\n }}\n isStickyBottom={!isEditableGridModel(model) || !model.isEditable}\n isStuckToBottom={isStuckToBottom}\n isStuckToRight={isStuckToRight}\n metricCalculator={metricCalculator}\n model={model}\n keyHandlers={keyHandlers}\n mouseHandlers={mouseHandlers}\n movedColumns={movedColumns}\n movedRows={movedRows}\n onError={this.handleGridError}\n onViewChanged={this.handleViewChanged}\n onSelectionChanged={this.handleSelectionChanged}\n onMovedColumnsChanged={this.handleMovedColumnsChanged}\n renderer={this.renderer}\n stateOverride={stateOverride}\n theme={theme}\n />\n <IrisGridCellOverflowModal\n isOpen={showOverflowModal}\n text={overflowText}\n onClose={this.handleOverflowClose}\n />\n {isVisible && (\n <IrisGridModelUpdater\n model={model}\n modelColumns={model.columns}\n top={top}\n bottom={bottom}\n left={left}\n right={right}\n filter={filter}\n formatter={formatter}\n sorts={sorts}\n reverseType={reverseType}\n movedColumns={movedColumns}\n customColumns={customColumns}\n hiddenColumns={hiddenColumns}\n alwaysFetchColumns={this.getAlwaysFetchColumns(\n alwaysFetchColumns,\n model.columns,\n movedColumns,\n model.floatingLeftColumnCount,\n model.floatingRightColumnCount,\n this.grid?.state.draggingColumn?.range\n )}\n formatColumns={this.getCachedPreviewFormatColumns(\n this.getCachedModelColumns(model, customColumns),\n conditionalFormats,\n conditionalFormatPreview,\n // Disable the preview format when we press Back on the format edit page\n openOptions[openOptions.length - 1]?.type ===\n OptionType.CONDITIONAL_FORMATTING_EDIT\n ? conditionalFormatEditIndex ?? undefined\n : undefined\n )}\n rollupConfig={this.getModelRollupConfig(\n model.originalColumns,\n rollupConfig,\n aggregationSettings\n )}\n totalsConfig={this.getModelTotalsConfig(\n model.columns,\n rollupConfig,\n aggregationSettings\n )}\n selectDistinctColumns={selectDistinctColumns}\n pendingRowCount={pendingRowCount}\n pendingDataMap={pendingDataMap}\n frozenColumns={frozenColumns}\n />\n )}\n {!isMenuShown && (\n <div className=\"grid-settings-button\">\n <Button\n kind=\"ghost\"\n data-testid={`btn-iris-grid-settings-button-${name}`}\n onClick={this.handleMenu}\n icon={<FontAwesomeIcon icon={vsMenu} transform=\"up-1\" />}\n tooltip=\"Table Options\"\n />\n </div>\n )}\n {focusField}\n {loadingElement}\n {filterBar}\n {columnTooltip}\n {advancedFilterMenus}\n {overflowButtonTooltipProps &&\n this.getOverflowButtonTooltip(overflowButtonTooltipProps)}\n </div>\n <GotoRow\n model={model}\n isShown={isGotoRowShown}\n gotoRow={gotoRow}\n gotoRowError={gotoRowError}\n onSubmit={this.handleGotoRowSelectedRowNumberSubmit}\n onGotoRowNumberChanged={this.handleGotoRowSelectedRowNumberChanged}\n onClose={this.handleGotoRowClosed}\n onEntering={this.handleAnimationStart}\n onEntered={this.handleAnimationEnd}\n onExiting={() => {\n this.handleAnimationStart();\n this.focus();\n }}\n onExited={this.handleAnimationEnd}\n />\n\n <PendingDataBottomBar\n error={pendingSaveError}\n isSaving={pendingSavePromise != null}\n saveTooltip={`Commit (${this.commitAction.shortcut.getDisplayText()})`}\n discardTooltip={`Discard (${this.discardAction.shortcut.getDisplayText()})`}\n pendingDataErrors={pendingDataErrors}\n pendingDataMap={pendingDataMap}\n onEntering={this.handleAnimationStart}\n onEntered={this.handleAnimationEnd}\n onExiting={this.handleAnimationStart}\n onExited={this.handleAnimationEnd}\n onSave={this.handlePendingCommitClicked}\n onDiscard={this.handlePendingDiscardClicked}\n />\n <ToastBottomBar>{toastMessage}</ToastBottomBar>\n <IrisGridCopyHandler\n model={model}\n copyOperation={copyOperation ?? undefined}\n onEntering={this.handleAnimationStart}\n onEntered={this.handleAnimationEnd}\n onExiting={this.handleAnimationStart}\n onExited={this.handleAnimationEnd}\n />\n <TableSaver\n ref={tableSaver => {\n this.tableSaver = tableSaver;\n }}\n getDownloadWorker={getDownloadWorker}\n onDownloadCompleted={this.handleDownloadCompleted}\n onDownloadCanceled={this.handleDownloadCanceled}\n onDownloadProgressUpdate={this.handleDownloadProgressUpdate}\n isDownloading={\n tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING\n }\n formatter={formatter}\n />\n </div>\n <CSSTransition\n in={isMenuShown}\n timeout={ThemeExport.transitionMidMs}\n classNames=\"slide-left\"\n onEntering={this.handleAnimationStart}\n onEntered={this.handleAnimationEnd}\n onExiting={this.handleAnimationStart}\n onExited={this.handleAnimationEnd}\n mountOnEnter\n unmountOnExit\n >\n <div className=\"table-sidebar\">\n <Stack>\n <Page title=\"Table Options\" onClose={this.handleMenuClose}>\n <Menu\n onSelect={i => this.handleMenuSelect(optionItems[i])}\n items={optionItems}\n />\n </Page>\n {openOptionsStack.map((option, i) => (\n <Page\n title={openOptions[i].title}\n onBack={this.handleMenuBack}\n onClose={this.handleMenuClose}\n key={openOptions[i].type}\n >\n {option}\n </Page>\n ))}\n </Stack>\n </div>\n </CSSTransition>\n <ContextActions actions={this.contextActions} />\n </div>\n );\n }\n}\n\nexport default IrisGrid;\n"],"mappings":";;;;;;;;;;AAAA,OAAOA,KAAP,IAEEC,SAFF,QAMO,OANP;AAOA,OAAOC,OAAP,MAAoB,UAApB;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,SAASC,aAAT,QAA8B,wBAA9B;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,OAAOC,GAAP,MAAgB,gBAAhB;AACA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SACEC,kBADF,EAEEC,cAFF,EAGEC,KAHF,EAIEC,IAJF,EAKEC,IALF,EAMEC,MANF,EAOEC,WAPF,EAQEC,OARF,EAYEC,MAZF,QAaO,uBAbP;AAcA,SACEC,IADF,EAIEC,SAJF,EAOEC,SAPF,EAcEC,mBAdF,EAgBEC,qBAhBF,QAiBO,iBAjBP;AAkBA,SACEC,KADF,EAEEC,cAFF,EAGEC,aAHF,EAIEC,oBAJF,EAKEC,OALF,EAMEC,eANF,EAOEC,MAPF,EAQEC,QARF,EASEC,MATF,EAUEC,OAVF,EAWEC,MAXF,EAYEC,QAZF,EAaEC,iBAbF,EAcEC,gBAdF,EAeEC,OAfF,QAgBO,kBAhBP;AAiBA,OAAOC,EAAP,MAQO,uBARP;AASA,SACEC,SADF,EAEEC,SAFF,EAGEC,cAHF,EAIEC,UAJF,QAYO,wBAZP;AAaA,SACEC,aADF,EAEEC,OAFF,EAGEC,YAHF,EAIEC,eAJF,QAKO,kBALP;AAMA,OAAOC,QAAP,MAAqB,iBAArB;AACA,OAAOC,QAAP,MAAqB,iBAArB;AACA,OAAOC,KAAP,MAAkB,cAAlB;SAGEC,gB;OAEKC,oB;OACAC,mB;OACAC,gB;SAELC,qB,EACAC,c,EACAC,iB;SAGAC,gC,EACAC,gC,EACAC,iC,EACAC,0B,EACAC,8B,EACAC,0B,EACAC,wB,EACAC,mB;OAEKC,c;OACAC,wB;OACAC,oB;OACAC,gB;OACAC,a;OACAC,gB;;OAEAC,qB;SAELC,Y,EACAC,e,EACAC,gB,EACAC,Y,EACAC,mB,EACAC,U,EACAC,U,EACAC,gB,EACAC,U,EACAC,yB;OAEKC,a;OACAC,iB;OACAC,a;OACAC,yB;OACAC,qB;OACAC,oB;OACAC,oB;OAGAC,S;OACAC,yB;OAEAC,uB;OACAC,yB;OACAC,O;AAuBP,IAAMC,GAAG,GAAGvF,GAAG,CAACwF,MAAJ,CAAW,UAAX,CAAZ;AAEA,IAAMC,wBAAwB,GAAG,GAAjC;AAEA,IAAMC,mBAAmB,GAAG,GAA5B;AAEA,IAAMC,+BAA+B,GAAG,GAAxC;AAEA,IAAMC,4BAA4B,GAAGC,MAAM,CAACC,MAAP,CAAc;EACjDC,YAAY,EAAE,EADmC;EAEjDC,SAAS,EAAE;AAFsC,CAAd,CAArC;AAKA,IAAMC,wBAAwB,sCAA9B;;AAEA,SAASC,aAAT,OAoBG;EAAA,IApBoB;IACrBC,eADqB;IAErBC,mBAFqB;IAGrBC,aAHqB;IAIrBC,YAJqB;IAKrBC,WALqB;IAMrBC,YANqB;IAOrBC,YAPqB;IAQrBC,qBARqB;IASrBC;EATqB,CAoBpB;EACD,OACER,eAAe,CAACS,IAAhB,KAAyB,CAAzB,IACAR,mBAAmB,CAACL,YAApB,CAAiCc,MAAjC,KAA4C,CAD5C,IAEAR,aAAa,CAACQ,MAAd,KAAyB,CAFzB,IAGAP,YAAY,CAACM,IAAb,KAAsB,CAHtB,IAIAL,WAAW,KAAKpE,UAAU,CAAC2E,YAAX,CAAwBC,IAJxC,IAKAP,YAAY,IAAI,IALhB,IAMAC,YAAY,IAAI,IANhB,IAOAC,qBAAqB,CAACG,MAAtB,KAAiC,CAPjC,IAQAF,KAAK,CAACE,MAAN,KAAiB,CATnB;AAWD;;AA4KD,OAAO,MAAMG,QAAN,SAAuBtH,SAAvB,CAA+D;EA4E9C,OAAfuH,eAAe,CACpBC,MADoB,EAEpBC,IAFoB,EAGpBC,QAHoB,EAII;IACxB,IAAI;MACF,OAAOjF,UAAU,CAAC8E,eAAX,CAA2BC,MAA3B,EAAmCC,IAAnC,EAAyCC,QAAzC,CAAP;IACD,CAFD,CAEE,OAAOC,GAAP,EAAY;MACZ9B,GAAG,CAAC+B,KAAJ,CAAU,6BAAV,EAAyCD,GAAzC;IACD;;IACD,OAAO,IAAP;EACD;;EAEDE,WAAW,CAACC,KAAD,EAAuB;IAChC,MAAMA,KAAN;;IADgC;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA,sDA0dH7H,OAAO,CACpCuH,MAAM,IAAI,KAAKO,wBAAL,CAA8BC,IAA9B,CAAmC,IAAnC,EAAyCR,MAAzC,CAD0B,EAEpC;MAAES,GAAG,EAAE;IAAP,CAFoC,CA1dJ;;IAAA,4DA+dGhI,OAAO,CAC1C,CACEiI,KADF,EAEEV,MAFF,EAGEW,qBAHF,EAIEC,aAJF,EAKEC,SALF,kBAOE,oBAAC,qBAAD;MACE,KAAK,EAAEH,KADT;MAEE,MAAM,EAAEV,MAFV;MAGE,cAAc,EAAE,KAAKc,0BAHvB;MAIE,YAAY,EAAE,KAAKC,8BAJrB;MAKE,MAAM,EAAE,KAAKC,wBALf;MAME,OAAO,EAAEL,qBANX;MAOE,aAAa,EAAEC,aAPjB;MAQE,SAAS,EAAEC;IARb,EARwC,EAmB1C;MAAEJ,GAAG,EAAE;IAAP,CAnB0C,CA/dV;;IAAA,8CAqfXhI,OAAO,CAC5B,CACEwI,uBADF,EAEEC,wBAFF,EAGEC,wBAHF,EAIEC,iBAJF,EAKEC,iBALF,EAMEC,yBANF,EAOEC,iBAPF,EAQEC,qBARF,EASEC,qBATF,EAUEC,mBAVF,EAWEC,gBAXF,EAYEC,aAZF,EAaEC,cAbF,EAcEC,eAdF,EAeEC,WAfF,EAgBEC,mBAhBF,KAiBK;MACH,IAAMC,WAAyB,GAAG,EAAlC;;MACA,IAAIhB,uBAAJ,EAA6B;QAC3BgB,WAAW,CAACC,IAAZ,CAAiB;UACfC,IAAI,EAAE/E,UAAU,CAACgF,aADF;UAEfC,KAAK,EAAE,eAFQ;UAGfC,IAAI,EAAEtI;QAHS,CAAjB;MAKD;;MACDiI,WAAW,CAACC,IAAZ,CAAiB;QACfC,IAAI,EAAE/E,UAAU,CAACmF,2BADF;QAEfF,KAAK,EAAE,8BAFQ;QAGfC,IAAI,EAAExI;MAHS,CAAjB;;MAKA,IAAIqH,wBAAJ,EAA8B;QAC5Bc,WAAW,CAACC,IAAZ,CAAiB;UACfC,IAAI,EAAE/E,UAAU,CAACoF,sBADF;UAEfH,KAAK,EAAE,wBAFQ;UAGfC,IAAI,EAAElI;QAHS,CAAjB;MAKD;;MACD,IAAI8G,wBAAJ,EAA8B;QAC5Be,WAAW,CAACC,IAAZ,CAAiB;UACfC,IAAI,EAAE/E,UAAU,CAACqF,qBADF;UAEfJ,KAAK,EAAE,uBAFQ;UAGfC,IAAI,EAAE5H;QAHS,CAAjB;MAKD;;MACD,IAAI0G,iBAAJ,EAAuB;QACrBa,WAAW,CAACC,IAAZ,CAAiB;UACfC,IAAI,EAAE/E,UAAU,CAACsF,WADF;UAEfL,KAAK,EAAE,aAFQ;UAGfC,IAAI,EAAErI;QAHS,CAAjB;MAKD;;MACD,IAAIoH,iBAAJ,EAAuB;QACrBY,WAAW,CAACC,IAAZ,CAAiB;UACfC,IAAI,EAAE/E,UAAU,CAACuF,YADF;UAEfN,KAAK,EAAE,mBAFQ;UAGfC,IAAI,EAAE3H;QAHS,CAAjB;MAKD;;MACD,IAAI2G,yBAAJ,EAA+B;QAC7BW,WAAW,CAACC,IAAZ,CAAiB;UACfC,IAAI,EAAE/E,UAAU,CAACwF,eADF;UAEfP,KAAK,EAAE,wBAFQ;UAGfC,IAAI,EAAE9H;QAHS,CAAjB;MAKD;;MACD,IAAI+G,iBAAiB,IAAIM,cAAzB,EAAyC;QACvCI,WAAW,CAACC,IAAZ,CAAiB;UACfC,IAAI,EAAE/E,UAAU,CAACyF,cADF;UAEfR,KAAK,EAAE,cAFQ;UAGfC,IAAI,EAAEnI;QAHS,CAAjB;MAKD;;MACD,IAAI6H,mBAAJ,EAAyB;QACvBC,WAAW,CAACC,IAAZ,CAAiB;UACfC,IAAI,EAAE/E,UAAU,CAAC0F,iBADF;UAEfT,KAAK,EAAE,mBAFQ;UAGfC,IAAI,EAAE1H;QAHS,CAAjB;MAKD;;MACDqH,WAAW,CAACC,IAAZ,CAAiB;QACfC,IAAI,EAAE/E,UAAU,CAAC2F,aADF;QAEfV,KAAK,EAAE,eAFQ;QAGfW,QAAQ,EAAExB,qBAAqB,CAACyB,QAAtB,CAA+BC,cAA/B,EAHK;QAIfZ,IAAI,EAAEjI,QAJS;QAKf8I,IAAI,EAAExB,gBALS;QAMfyB,QAAQ,EAAE5B,qBAAqB,CAAC6B;MANjB,CAAjB;;MAQA,IAAIvB,eAAJ,EAAqB;QACnBG,WAAW,CAACC,IAAZ,CAAiB;UACfC,IAAI,EAAE/E,UAAU,CAACkG,UADF;UAEfjB,KAAK,EAAE,YAFQ;UAGfW,QAAQ,EAAEvB,qBAAqB,CAACwB,QAAtB,CAA+BC,cAA/B,EAHK;UAIfZ,IAAI,EAAE7H,QAJS;UAKf0I,IAAI,EAAEvB,aALS;UAMfwB,QAAQ,EAAE3B,qBAAqB,CAAC4B;QANjB,CAAjB;MAQD;;MACDpB,WAAW,CAACC,IAAZ,CAAiB;QACfC,IAAI,EAAE/E,UAAU,CAACmG,IADF;QAEflB,KAAK,EAAE,OAFQ;QAGfW,QAAQ,EAAEtB,mBAAmB,CAACuB,QAApB,CAA6BC,cAA7B,EAHK;QAIfZ,IAAI,EAAE/H,OAJS;QAKf4I,IAAI,EAAEpB,WALS;QAMfqB,QAAQ,EAAE1B,mBAAmB,CAAC2B;MANf,CAAjB;MASA,OAAOpB,WAAP;IACD,CA7G2B,EA8G5B;MAAExB,GAAG,EAAE;IAAP,CA9G4B,CArfI;;IAAA,gDAsmBThI,OAAO,CAAC+K,aAAa,IAAIA,aAAlB,EAAiC;MAC/D/C,GAAG,EAAE,CAD0D;MAE/DgD,UAAU,EAAE;QAAA,IAAC,CAACD,aAAD,CAAD;QAAA,OAAqBA,aAAa,CAACE,IAAd,EAArB;MAAA;IAFmD,CAAjC,CAtmBE;;IAAA,2CA2mBdjL,OAAO,CACzB,CAACkL,OAAD,EAAoB9E,YAApB,KAAoE;MAClE,IAAM+E,cAAc,GAAG,EAAvB;MACA/E,YAAY,CAACgF,OAAb,CAAqB,SAAqC;QAAA,IAApC;UAAEC,SAAF;UAAaC,QAAb;UAAuBC;QAAvB,CAAoC;QACxDJ,cAAc,CAACE,SAAD,CAAd,GAA4B7G,gBAAgB,CAACgH,uBAAjB,CAC1BN,OAD0B,EAE1BG,SAF0B,EAG1BC,QAH0B,EAI1BC,MAJ0B,CAA5B;MAMD,CAPD;MAQA,OAAOJ,cAAP;IACD,CAZwB,CA3mBO;;IAAA,yCA0nBhBnL,OAAO,CACvB,CAACkL,OAAD,EAAoB9E,YAApB,KAAkE;MAChE,IAAMqF,YAAoD,GAAG,EAA7D;MACArF,YAAY,CACTsF,MADH,CAEKC,CAAD,IAAoB,CAACnH,gBAAgB,CAACoH,iBAAjB,CAAmCD,CAAC,CAACN,SAArC,CAFzB,EAIGD,OAJH,CAIW,SAAqC;QAAA,IAApC;UAAEC,SAAF;UAAaC,QAAb;UAAuBC;QAAvB,CAAoC;QAC5C/G,gBAAgB,CAACgH,uBAAjB,CACEN,OADF,EAEEG,SAFF,EAGEC,QAHF,EAIEC,MAJF,EAKEH,OALF,CAKUS,IAAI,IAAI;UAAA;;UAChB,IAAMC,aAAa,GAAG,CAAC,0BAAIL,YAAY,CAACI,IAAD,CAAhB,mEAA0B,EAA1B,CAAD,EAAgCR,SAAhC,CAAtB;UACAI,YAAY,CAACI,IAAD,CAAZ,GAAqBC,aAArB;QACD,CARD;MASD,CAdH;MAeA,OAAOL,YAAP;IACD,CAnBsB,CA1nBS;;IAAA,2CAgpBdzL,OAAO,CACxBoG,YAAD,IACEA,YAAY,CACT2F,GADH,CACQJ,CAAD,IAAoBA,CAAC,CAACN,SAD7B,EAEGK,MAFH,CAGKM,CAAD,IAA6B,CAACxH,gBAAgB,CAACoH,iBAAjB,CAAmCI,CAAnC,CAHlC,CAFuB,CAhpBO;;IAAA,gDAypBThM,OAAO,CAAC,CAACkL,OAAD,EAAUe,KAAV,KAC/BjJ,gBAAgB,CAACkI,OAAD,EAAUe,KAAV,CADc,CAzpBE;;IAAA,+CA+pBVjM,OAAO,CAAC,CAACiI,KAAD,EAAQvB,aAAR,KAA0BuB,KAAK,CAACiD,OAAjC,CA/pBG;;IAAA,uDAyqBFlL,OAAO,CACrC,CACEkL,OADF,EAEEgB,UAFF,EAGEC,OAHF,EAIEC,SAJF,KAKqB;MACnBxG,GAAG,CAACyG,KAAJ,CACE,+BADF,EAEEH,UAFF,EAGEC,OAHF,EAIEC,SAJF;;MAMA,IAAID,OAAO,KAAKG,SAAZ,IAAyBF,SAAS,KAAKE,SAA3C,EAAsD;QACpD,IAAML,KAAK,GAAG,CAAC,GAAGC,UAAJ,CAAd;QACAD,KAAK,CAACG,SAAD,CAAL,GAAmBD,OAAnB;QACA,OAAO,KAAKI,sBAAL,CAA4BrB,OAA5B,EAAqCe,KAArC,CAAP;MACD;;MAED,OAAO,KAAKM,sBAAL,CAA4BrB,OAA5B,EAAqCgB,UAArC,CAAP;IACD,CApBoC,CAzqBL;;IAAA,8CAgsBXlM,OAAO,CAC5B,CAACwM,eAAD,EAAkBC,MAAlB,EAA0BhG,mBAA1B,KACEzB,aAAa,CAAC0H,oBAAd,CACEF,eADF,EAEEC,MAFF,EAGEhG,mBAHF,CAF0B,CAhsBI;;IAAA,8CAysBXzG,OAAO,CAC5B,CAACkL,OAAD,EAAUuB,MAAV,EAAkBhG,mBAAlB,KAAsE;MAAA;;MACpE,IAAM;QAAEL,YAAF;QAAgBC;MAAhB,IAA8BI,mBAApC,CADoE,CAEpE;;MACA,IACE,0BAACgG,MAAD,aAACA,MAAD,0CAACA,MAAM,CAAEvB,OAAT,oDAAC,gBAAiBhE,MAAlB,yEAA4B,CAA5B,IAAiC,CAAjC,IACA,yBAACd,YAAD,aAACA,YAAD,uBAACA,YAAY,CAAEc,MAAf,uEAAyB,CAAzB,MAAgC,CAFlC,EAGE;QACA,OAAO,IAAP;MACD;;MAED,IAAMuE,YAAY,GAAG,KAAKkB,eAAL,CAAqBzB,OAArB,EAA8B9E,YAA9B,CAArB;MACA,IAAMwG,cAAc,GAAG,KAAKC,iBAAL,CAAuBzG,YAAvB,CAAvB;MAEA,OAAO;QAAEqF,YAAF;QAAgBmB,cAAhB;QAAgCvG;MAAhC,CAAP;IACD,CAf2B,CAzsBI;;IAAA,gDA2tBTrG,OAAO,CAC9B,CACE8M,iBADF,EAEE5D,gBAFF,EAGE6D,iBAHF,EAIEC,oBAJF,EAKErG,YALF,EAMEH,eANF,EAOEQ,KAPF,EAQEJ,WARF,EASEC,YATF,EAUEoG,WAVF,MAWM;MACJH,iBADI;MAEJ5D,gBAFI;MAGJ6D,iBAHI;MAIJC,oBAJI;MAKJrG,YALI;MAMJH,eANI;MAOJQ,KAPI;MAQJJ,WARI;MASJC,YATI;MAUJoG;IAVI,CAXN,CAD8B,EAwB9B;MAAEjF,GAAG,EAAE;IAAP,CAxB8B,CA3tBE;;IAAA,yCAsvBhBhI,OAAO,CACvB,CACEkN,aADF,EAEEvG,YAFF,EAGEH,eAHF,EAIE2G,gBAJF,EAKErG,YALF,KAMK,CACH,IAAIoG,aAAJ,aAAIA,aAAJ,cAAIA,aAAJ,GAAqB,EAArB,CADG,EAEH,IAAIC,gBAAJ,aAAIA,gBAAJ,cAAIA,gBAAJ,GAAwB,EAAxB,CAFG,EAGH,GAAGnI,aAAa,CAACoI,uBAAd,CAAsCzG,YAAtC,CAHA,EAIH,GAAG3B,aAAa,CAACoI,uBAAd,CAAsC5G,eAAtC,CAJA,EAKH,IAAIM,YAAY,KAAKwF,SAAjB,GAA6B,CAACxF,YAAD,CAA7B,GAA8C,EAAlD,CALG,CAPkB,EAcvB;MAAEkB,GAAG,EAAE;IAAP,CAduB,CAtvBS;;IAAA,wCAuwBjBhI,OAAO,CACtB,CACEqN,KADF,EAEEC,UAFF,EAGEC,gBAHF,mDAKKpJ,aALL,GAMKkJ,KANL;MAOEG,aAAa,EAAE,CAACF,UAPlB;MAQE;MACAG,cAAc,EAAEF,gBAAgB,GAAG,CAAnB,GAAuBF,KAAK,CAACI,cAA7B,GAA8C;IAThE,EADsB,EAYtB;MAAEzF,GAAG,EAAE;IAAP,CAZsB,CAvwBU;;IAAA,+CA8qCVhI,OAAO,CAC7B,CACE0N,kBADF,EAEExC,OAFF,EAGEyC,YAHF,EAIEC,uBAJF,EAKEC,wBALF,EAMEC,aANF,KAOK;MACH,IAAMC,eAA6B,GAAG,EAAtC;;MAEA,KAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGJ,uBAApB,EAA6CI,CAAC,IAAI,CAAlD,EAAqD;QACnDD,eAAe,CAACtE,IAAhB,CACEyB,OAAO,CAAChK,SAAS,CAAC+M,aAAV,CAAwBD,CAAxB,EAA2BL,YAA3B,CAAD,CAAP,CAAkD9B,IADpD;MAGD;;MAED,KAAK,IAAImC,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGH,wBAApB,EAA8CG,EAAC,IAAI,CAAnD,EAAsD;QACpDD,eAAe,CAACtE,IAAhB,CACEyB,OAAO,CAAChK,SAAS,CAAC+M,aAAV,CAAwB/C,OAAO,CAAChE,MAAR,GAAiB,CAAjB,GAAqB8G,EAA7C,EAAgDL,YAAhD,CAAD,CAAP,CACG9B,IAFL;MAID;;MAED,IAAIiC,aAAJ,EAAmB;QACjB,KAAK,IAAIE,GAAC,GAAGF,aAAa,CAAC,CAAD,CAA1B,EAA+BE,GAAC,IAAIF,aAAa,CAAC,CAAD,CAAjD,EAAsDE,GAAC,IAAI,CAA3D,EAA8D;UAC5DD,eAAe,CAACtE,IAAhB,CACEyB,OAAO,CAAChK,SAAS,CAAC+M,aAAV,CAAwBD,GAAxB,EAA2BL,YAA3B,CAAD,CAAP,CAAkD9B,IADpD;QAGD;MACF;;MAED,IAAMqC,SAAS,GAAG,IAAIC,GAAJ,CAAQ,CAAC,GAAGT,kBAAJ,EAAwB,GAAGK,eAA3B,CAAR,CAAlB;MAEA,OAAO,CAAC,GAAGG,SAAJ,CAAP;IACD,CAnC4B,CA9qCG;;IAAA,4CA0pDbpL,QAAQ,CAC3B,CACEsL,WADF,EAEEC,qBAFF,EAGEnD,OAHF,EAIEoD,mBAJF,KAKW;MACT,IAAMxH,YAAY,GAAG7B,iBAAiB,CAACsJ,kBAAlB,CACnBH,WADmB,EAEnBC,qBAFmB,EAGnBnD,OAHmB,EAInBoD,mBAJmB,CAArB;MAMA,KAAKE,QAAL,CAAc;QAAE1H;MAAF,CAAd;IACD,CAd0B,EAe3Bf,mBAf2B,CA1pDK;;IAAA,6DA0xEIjD,QAAQ,CAC3C2L,wBAAD,IAA4D;MAC1D,KAAKD,QAAL,CAAc;QAAEC;MAAF,CAAd;IACD,CAH2C,EAI5CzI,+BAJ4C,CA1xEZ;;IAAA,sDAokFHnD,QAAQ,CACrC,CACE6L,qBADF,EAEEC,0BAFF,KAGK;MACH,IAAM;QAAEC;MAAF,IAA0B,KAAKC,KAArC;;MACA,IACED,mBAAmB,KAAK/J,gBAAgB,CAACiK,eAAjB,CAAiCC,WAD3D,EAEE;QACA,KAAKP,QAAL,CAAc;UACZE,qBADY;UAEZC;QAFY,CAAd;MAID;IACF,CAdoC,EAerC7I,wBAfqC,CApkFL;;IAAA,kDA0sFP9F,OAAO,CAC/BgP,0BAAD,IAA0D;MACxD,IAAIA,0BAA0B,IAAI,IAAlC,EAAwC;QACtC,OAAO,IAAP;MACD;;MAED,IAAMC,YAA2B;QAC/BC,QAAQ,EAAE;MADqB,GAE5BF,0BAF4B;QAG/BG,aAAa,EAAE;MAHgB,EAAjC;;MAMA,IAAMC,aAA4B,GAAG;QACnCC,SAAS,EAAE,MADwB;QAEnCC,SAAS,EAAE;UACTC,IAAI,EAAE;YACJC,QAAQ,EAAE,CAAC,MAAD,EAAS,OAAT;UADN;QADG;MAFwB,CAArC;MASA,oBACE;QAAK,KAAK,EAAEP;MAAZ,gBACE,oBAAC,OAAD;QACE,GAAG,EAAEQ,IAAI,CAACC,GAAL,EADP;QAEE,OAAO,EAAEN,aAFX;QAGE,GAAG,EAAE,KAAKO;MAHZ,wBADF,CADF;IAWD,CAhC+B,CA1sFA;;IAGhC,KAAKtH,0BAAL,GAAkC,KAAKA,0BAAL,CAAgCN,IAAhC,CAChC,IADgC,CAAlC;IAGA,KAAKO,8BAAL,GAAsC,KAAKA,8BAAL,CAAoCP,IAApC,CACpC,IADoC,CAAtC;IAGA,KAAKQ,wBAAL,GAAgC,KAAKA,wBAAL,CAA8BR,IAA9B,CAAmC,IAAnC,CAAhC;IACA,KAAKD,wBAAL,GAAgC,KAAKA,wBAAL,CAA8BC,IAA9B,CAAmC,IAAnC,CAAhC;IACA,KAAK6H,mBAAL,GAA2B,KAAKA,mBAAL,CAAyB7H,IAAzB,CAA8B,IAA9B,CAA3B;IACA,KAAK8H,mBAAL,GAA2B,KAAKA,mBAAL,CAAyB9H,IAAzB,CAA8B,IAA9B,CAA3B;IACA,KAAK+H,wBAAL,GAAgC,KAAKA,wBAAL,CAA8B/H,IAA9B,CAAmC,IAAnC,CAAhC;IACA,KAAKgI,uBAAL,GAA+B,KAAKA,uBAAL,CAA6BhI,IAA7B,CAAkC,IAAlC,CAA/B;IACA,KAAKiI,wBAAL,GAAgC,KAAKA,wBAAL,CAA8BjI,IAA9B,CAAmC,IAAnC,CAAhC;IACA,KAAKkI,qBAAL,GAA6B,KAAKA,qBAAL,CAA2BlI,IAA3B,CAAgC,IAAhC,CAA7B;IACA,KAAKmI,mBAAL,GAA2B,KAAKA,mBAAL,CAAyBnI,IAAzB,CAA8B,IAA9B,CAA3B;IACA,KAAKoI,oBAAL,GAA4B,KAAKA,oBAAL,CAA0BpI,IAA1B,CAA+B,IAA/B,CAA5B;IACA,KAAKqI,kBAAL,GAA0B,KAAKA,kBAAL,CAAwBrI,IAAxB,CAA6B,IAA7B,CAA1B;IACA,KAAKsI,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBtI,IAAvB,CAA4B,IAA5B,CAAzB;IACA,KAAKuI,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBvI,IAAvB,CAA4B,IAA5B,CAAzB;IACA,KAAKwI,eAAL,GAAuB,KAAKA,eAAL,CAAqBxI,IAArB,CAA0B,IAA1B,CAAvB;IACA,KAAKyI,qBAAL,GAA6B,KAAKA,qBAAL,CAA2BzI,IAA3B,CAAgC,IAAhC,CAA7B;IACA,KAAK0I,mBAAL,GAA2B,KAAKA,mBAAL,CAAyB1I,IAAzB,CAA8B,IAA9B,CAA3B;IACA,KAAK2I,kBAAL,GAA0B,KAAKA,kBAAL,CAAwB3I,IAAxB,CAA6B,IAA7B,CAA1B;IACA,KAAK4I,YAAL,GAAoB,KAAKA,YAAL,CAAkB5I,IAAlB,CAAuB,IAAvB,CAApB;IACA,KAAK6I,UAAL,GAAkB,KAAKA,UAAL,CAAgB7I,IAAhB,CAAqB,IAArB,CAAlB;IACA,KAAK8I,eAAL,GAAuB,KAAKA,eAAL,CAAqB9I,IAArB,CAA0B,IAA1B,CAAvB;IACA,KAAK+I,gBAAL,GAAwB,KAAKA,gBAAL,CAAsB/I,IAAtB,CAA2B,IAA3B,CAAxB;IACA,KAAKgJ,cAAL,GAAsB,KAAKA,cAAL,CAAoBhJ,IAApB,CAAyB,IAAzB,CAAtB;IACA,KAAKiJ,mBAAL,GAA2B,KAAKA,mBAAL,CAAyBjJ,IAAzB,CAA8B,IAA9B,CAA3B;IACA,KAAKkJ,sBAAL,GAA8B,KAAKA,sBAAL,CAA4BlJ,IAA5B,CAAiC,IAAjC,CAA9B;IACA,KAAKmJ,yBAAL,GAAiC,KAAKA,yBAAL,CAA+BnJ,IAA/B,CAAoC,IAApC,CAAjC;IACA,KAAKoJ,YAAL,GAAoB,KAAKA,YAAL,CAAkBpJ,IAAlB,CAAuB,IAAvB,CAApB;IACA,KAAK4H,gBAAL,GAAwB,KAAKA,gBAAL,CAAsB5H,IAAtB,CAA2B,IAA3B,CAAxB;IACA,KAAKqJ,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBrJ,IAAvB,CAA4B,IAA5B,CAAzB;IACA,KAAKsJ,qBAAL,GAA6B,KAAKA,qBAAL,CAA2BtJ,IAA3B,CAAgC,IAAhC,CAA7B;IACA,KAAKuJ,6BAAL,GAAqC,KAAKA,6BAAL,CAAmCvJ,IAAnC,CACnC,IADmC,CAArC;IAGA,KAAKwJ,2BAAL,GAAmC,KAAKA,2BAAL,CAAiCxJ,IAAjC,CACjC,IADiC,CAAnC;IAGA,KAAKyJ,8BAAL,GAAsC,KAAKA,8BAAL,CAAoCzJ,IAApC,CACpC,IADoC,CAAtC;IAGA,KAAK0J,iCAAL,GAAyC,KAAKA,iCAAL,CAAuC1J,IAAvC,CACvC,IADuC,CAAzC;IAGA,KAAK2J,mCAAL,GAA2C,KAAKA,mCAAL,CAAyC3J,IAAzC,CACzC,IADyC,CAA3C;IAGA,KAAK4J,yBAAL,GAAiC,KAAKA,yBAAL,CAA+B5J,IAA/B,CAAoC,IAApC,CAAjC;IACA,KAAK6J,0BAAL,GAAkC,KAAKA,0BAAL,CAAgC7J,IAAhC,CAChC,IADgC,CAAlC;IAGA,KAAK8J,2BAAL,GAAmC,KAAKA,2BAAL,CAAiC9J,IAAjC,CACjC,IADiC,CAAnC;IAGA,KAAK+J,wBAAL,GAAgC,KAAKA,wBAAL,CAA8B/J,IAA9B,CAAmC,IAAnC,CAAhC;IACA,KAAKgK,0BAAL,GAAkC,KAAKA,0BAAL,CAAgChK,IAAhC,CAChC,IADgC,CAAlC;IAGA,KAAKiK,2BAAL,GAAmC,KAAKA,2BAAL,CAAiCjK,IAAjC,CACjC,IADiC,CAAnC;IAGA,KAAKkK,oCAAL,GAA4C,KAAKA,oCAAL,CAA0ClK,IAA1C,CAC1C,IAD0C,CAA5C;IAGA,KAAKmK,cAAL,GAAsB,KAAKA,cAAL,CAAoBnK,IAApB,CAAyB,IAAzB,CAAtB;IACA,KAAKoK,mBAAL,GAA2B,KAAKA,mBAAL,CAAyBpK,IAAzB,CAA8B,IAA9B,CAA3B;IACA,KAAKqK,wBAAL,GAAgC,KAAKA,wBAAL,CAA8BrK,IAA9B,CAAmC,IAAnC,CAAhC;IACA,KAAKsK,yBAAL,GAAiC,KAAKA,yBAAL,CAA+BtK,IAA/B,CAAoC,IAApC,CAAjC;IACA,KAAKuK,sBAAL,GAA8B,KAAKA,sBAAL,CAA4BvK,IAA5B,CAAiC,IAAjC,CAA9B;IACA,KAAKwK,uBAAL,GAA+B,KAAKA,uBAAL,CAA6BxK,IAA7B,CAAkC,IAAlC,CAA/B;IACA,KAAKyK,qBAAL,GAA6B,KAAKA,qBAAL,CAA2BzK,IAA3B,CAAgC,IAAhC,CAA7B;IACA,KAAK0K,qBAAL,GAA6B,KAAKA,qBAAL,CAA2B1K,IAA3B,CAAgC,IAAhC,CAA7B;IACA,KAAK2K,uBAAL,GAA+B,KAAKA,uBAAL,CAA6B3K,IAA7B,CAAkC,IAAlC,CAA/B;IACA,KAAK4K,mBAAL,GAA2B,KAAKA,mBAAL,CAAyB5K,IAAzB,CAA8B,IAA9B,CAA3B;IACA,KAAK6K,6BAAL,GAAqC,KAAKA,6BAAL,CAAmC7K,IAAnC,CACnC,IADmC,CAArC;IAGA,KAAK8K,uBAAL,GAA+B,KAAKA,uBAAL,CAA6B9K,IAA7B,CAAkC,IAAlC,CAA/B;IACA,KAAK+K,kBAAL,GAA0B,KAAKA,kBAAL,CAAwB/K,IAAxB,CAA6B,IAA7B,CAA1B;IACA,KAAKgL,mBAAL,GAA2B,KAAKA,mBAAL,CAAyBhL,IAAzB,CAA8B,IAA9B,CAA3B;IACA,KAAKiL,qBAAL,GAA6B,KAAKA,qBAAL,CAA2BjL,IAA3B,CAAgC,IAAhC,CAA7B;IACA,KAAKkL,qCAAL,GAA6C,KAAKA,qCAAL,CAA2ClL,IAA3C,CAC3C,IAD2C,CAA7C;IAIA,KAAKmL,IAAL,GAAY,IAAZ;IACA,KAAKC,WAAL,GAAmB,IAAnB;IACA,KAAKC,gBAAL,GAAwB,IAAxB;IACA,KAAKC,OAAL,GAAe,IAAI3Q,OAAJ,EAAf;IACA,KAAK4Q,mBAAL,GAA2B,EAA3B;IACA,KAAKC,oBAAL,GAA4B,EAA5B;IACA,KAAKC,oBAAL,GAA4B,EAA5B;IACA,KAAKC,wBAAL,GAAgC,KAAhC,CAlGgC,CAoGhC;;IACA,KAAKC,QAAL,GAAgB,IAAIxP,gBAAJ,EAAhB;IACA,KAAKyP,UAAL,GAAkB,IAAlB;IACA,KAAKC,cAAL,gBAAsB9T,KAAK,CAAC+T,SAAN,EAAtB;IACA,KAAKC,WAAL,GAAmB,KAAnB;IACA,KAAKC,cAAL,gBAAsBjU,KAAK,CAAC+T,SAAN,EAAtB;IAEA,KAAK9K,qBAAL,GAA6B;MAC3B6B,MAAM,EAAE,MAAM,KAAKoJ,eAAL,EADa;MAE3BxJ,QAAQ,EAAEjF,SAAS,CAAC0O,KAAV,CAAgBC;IAFC,CAA7B;IAKA,KAAKlL,qBAAL,GAA6B;MAC3B4B,MAAM,EAAE,MAAM,KAAKuJ,eAAL,EADa;MAE3B3J,QAAQ,EAAEjF,SAAS,CAAC0O,KAAV,CAAgBG;IAFC,CAA7B;IAKA,KAAKnL,mBAAL,GAA2B;MACzB2B,MAAM,EAAE,MAAM,KAAKyJ,aAAL,EADW;MAEzB7J,QAAQ,EAAEjF,SAAS,CAAC0O,KAAV,CAAgBK;IAFD,CAA3B;IAKA,KAAKC,aAAL,GAAqB;MACnB3J,MAAM,EAAE,MAAM;QACZ,IAAM;UAAE3C;QAAF,IAAY,KAAKJ,KAAvB;;QACA,IACE1G,mBAAmB,CAAC8G,KAAD,CAAnB,IACAA,KAAK,CAACqF,UADN,IAEArF,KAAK,CAACuM,cAAN,CAAqBvN,IAArB,GAA4B,CAH9B,EAIE;UACA,KAAKwN,cAAL,GAAsBC,KAAtB,CAA4B9O,GAAG,CAAC+B,KAAhC;QACD;MACF,CAVkB;MAWnB6C,QAAQ,EAAEjF,SAAS,CAACoP,WAAV,CAAsBC;IAXb,CAArB;IAaA,KAAKC,YAAL,GAAoB;MAClBjK,MAAM,EAAE,MAAM;QACZ,IAAM;UAAE3C;QAAF,IAAY,KAAKJ,KAAvB;;QACA,IACE1G,mBAAmB,CAAC8G,KAAD,CAAnB,IACAA,KAAK,CAACqF,UADN,IAEArF,KAAK,CAACuM,cAAN,CAAqBvN,IAArB,GAA4B,CAF5B,IAGAgB,KAAK,CAAC6M,iBAAN,CAAwB7N,IAAxB,KAAiC,CAJnC,EAKE;UACA,KAAK8N,aAAL,GAAqBL,KAArB,CAA2B9O,GAAG,CAAC+B,KAA/B;QACD;MACF,CAXiB;MAYlB6C,QAAQ,EAAEjF,SAAS,CAACoP,WAAV,CAAsBK;IAZd,CAApB;IAcA,KAAKC,cAAL,GAAsB,CACpB,KAAKlM,qBADe,EAEpB,KAAKC,qBAFe,EAGpB,KAAKC,mBAHe,EAIpB,KAAKsL,aAJe,EAKpB,KAAKM,YALe,CAAtB;IAQA,IAAM;MACJpO,mBAAmB,EAAnBA,oBADI;MAEJyO,kBAFI;MAGJC,qBAHI;MAIJjM,gBAAgB,EAAhBA,iBAJI;MAKJkM,oBALI;MAMJnN,KAAK,EAALA,MANI;MAOJ0F,YAAY,EAAE0H,gBAPV;MAQJC,SAAS,EAAEC,aARP;MASJC,SATI;MAUJC,eAVI;MAWJ5O,YAAY,EAAZA,aAXI;MAYJ6O,gBAZI;MAaJC,cAbI;MAcJxM,aAAa,EAAbA,cAdI;MAeJiF,WAAW,EAAXA,YAfI;MAgBJC,qBAAqB,EAArBA,sBAhBI;MAiBJC,mBAAmB,EAAnBA,oBAjBI;MAkBJ9H,eAAe,EAAfA,gBAlBI;MAmBJG,YAAY,EAAZA,aAnBI;MAoBJI,qBApBI;MAqBJyN,cArBI;MAsBJoB,OAtBI;MAuBJC;IAvBI,IAwBFhO,KAxBJ;IA0BA,IAAMiO,WAAyB,GAAG,CAChC,IAAIxS,iBAAJ,CAAsB,IAAtB,CADgC,EAEhC,IAAIF,qBAAJ,CAA0B,IAA1B,CAFgC,CAAlC;;IAIA,IAAIwS,OAAJ,EAAa;MACXE,WAAW,CAACrM,IAAZ,CAAiB,IAAIpG,cAAJ,CAAmB,IAAnB,CAAjB;IACD;;IACD,IAAM0S,aAAa,GAAG,CACpB,IAAIxS,gCAAJ,CAAqC,IAArC,CADoB,EAEpB,IAAIC,gCAAJ,CAAqC,IAArC,CAFoB,EAGpB,IAAIC,iCAAJ,CAAsC,IAAtC,CAHoB,EAIpB,IAAII,wBAAJ,CAA6B,IAA7B,CAJoB,EAKpB,IAAID,0BAAJ,CAA+B,IAA/B,CALoB,EAMpB,IAAIF,0BAAJ,CAA+B,IAA/B,CANoB,EAOpB,IAAIC,8BAAJ,CAAmC,IAAnC,CAPoB,EAQpB,IAAIG,mBAAJ,CAAwB,IAAxB,CARoB,CAAtB;;IAWA,IAAM6J,aAAY,GAChB0H,gBAAgB,CAACnO,MAAjB,GAA0B,CAA1B,GAA8BmO,gBAA9B,GAAiDpN,MAAK,CAAC0F,YADzD;;IAEA,IAAM2H,SAAS,GACbC,aAAa,CAACrO,MAAd,GAAuB,CAAvB,GAA2BqO,aAA3B,GAA2CtN,MAAK,CAACqN,SADnD;IAGA,IAAMU,gBAAgB,GAAG,IAAIhS,wBAAJ,CAA6B;MACpD0R,gBAAgB,EAAE,IAAIO,GAAJ,CAAQP,gBAAR,CADkC;MAEpDC,cAAc,EAAE,IAAIM,GAAJ,CAAQN,cAAR,CAFoC;MAGpDhI,YAAY,EAAZA;IAHoD,CAA7B,CAAzB;IAKA,IAAMuI,aAAa,GAAG7H,sBAAH,aAAGA,sBAAH,cAAGA,sBAAH,GAA4B,EAA/C;;IACA,IAAMvH,aAAY,GAAG7B,iBAAiB,CAACsJ,kBAAlB,CACnBH,YADmB,EAEnB8H,aAFmB,EAGnBjO,MAAK,CAACiD,OAHa,EAInBoD,oBAJmB,CAArB;;IAOA,KAAKO,KAAL,GAAa;MACX3F,gBAAgB,EAAhBA,iBADW;MAEXkM,oBAFW;MAGXe,sBAAsB,EAAE,IAHb;MAIXH,gBAJW;MAKXI,OAAO,EAAE9J,SALE;MAMXwJ,WANW;MAOXC,aAPW;MASXP,SATW;MAUXC,eAVW;MAWXY,cAAc,EAAE,IAXL;MAYXlJ,gBAAgB,EAAE,EAZP;MAaX;MACA;MACAxG,YAAY,EAAEA,aAAY,GAAG,IAAIsP,GAAJ,CAAQtP,aAAR,CAAH,GAA2B,IAAIsP,GAAJ,EAf1C;MAgBXzP,eAAe,EAAE,IAAIyP,GAAJ,CAAQzP,gBAAR,CAhBN;MAiBX8P,mBAAmB,EAAE,IAjBV;MAkBXC,mBAAmB,EAAE,IAlBV;MAmBXvP,KAAK,EAAE,EAnBI;MAoBXJ,WAAW,EAAEpE,UAAU,CAAC2E,YAAX,CAAwBC,IApB1B;MAqBXV,aAAa,EAAE,EArBJ;MAsBXK,qBAtBW;MAwBX;MACAyP,cAAc,EAAE,EAzBL;MA2BX;MACAC,aAAa,EAAE,IA5BJ;MA8BX;MACAC,WAAW,EAAE,IA/BF;MAgCX1J,oBAAoB,EAAE,IAhCX;MAiCX2J,mBAAmB,EAAE,KAjCV;MAmCXhJ,YAAY,EAAZA,aAnCW;MAoCX2H,SApCW;MAsCXsB,kBAAkB,EAAE,IAtCT;MAwCXxO,SAAS,EAAE,IAAI9F,SAAJ,EAxCA;MAyCX2K,WAAW,EAAE,KAzCF;MA0CXkI,qBAAqB,EAAE,IAAIc,GAAJ,CAAQd,qBAAR,CA1CZ;MA4CXD,kBA5CW;MA6CX2B,0BAA0B,EAAE,IA7CjB;MA8CXpI,wBAAwB,EAAEnC,SA9Cf;MAgDX;MACAQ,iBAAiB,EAAE,IAjDR;MAmDXgK,kBAAkB,EAAE,KAnDT;MAoDXC,OAAO,EAAE,KApDE;MAqDXnI,mBAAmB,EAAE,EArDV;MAsDXF,qBAAqB,EAAE,CAtDZ;MAuDXC,0BAA0B,EAAE,CAvDjB;MAyDXxF,aAAa,EAAbA,cAzDW;MA0DXrC,YAAY,EAAZA,aA1DW;MA2DXsH,WAAW,EAAXA,YA3DW;MA4DXC,qBAAqB,EAAE6H,aA5DZ;MA6DX5H,mBAAmB,EAAnBA,oBA7DW;MA+DXzH,YAAY,EAAZA,aA/DW;MAgEXmQ,qBAAqB,EAAE,EAhEZ;MAiEXvQ,mBAAmB,EAAnBA,oBAjEW;MAkEXwQ,mBAAmB,EAAE,IAlEV;MAoEXC,WAAW,EAAE,EApEF;MAsEXC,eAAe,EAAE,CAtEN;MAuEX3C,cAAc,EAAEA,cAAF,aAAEA,cAAF,cAAEA,cAAF,GAAoB,IAAIyB,GAAJ,EAvEvB;MAwEXnB,iBAAiB,EAAE,IAAImB,GAAJ,EAxER;MAyEXmB,kBAAkB,EAAE,IAzET;MA0EXC,gBAAgB,EAAE,IA1EP;MA4EXC,YAAY,EAAE,IA5EH;MA6EXzB,aA7EW;MA8EX0B,iBAAiB,EAAE,KA9ER;MA+EXC,YAAY,EAAE,EA/EH;MAgFXxI,0BAA0B,EAAE,IAhFjB;MAiFXyI,cAAc,EAAE,KAjFL;MAkFXC,OAAO,EAAE,EAlFE;MAmFXC,YAAY,EAAE;IAnFH,CAAb;EAqFD;;EAEDC,iBAAiB,GAAS;IACxB,IAAM;MAAEnC,eAAF;MAAmBxN;IAAnB,IAA6B,KAAKJ,KAAxC;IACA,IAAMN,MAAM,GACVkO,eADU,aACVA,eADU,cACVA,eADU,GACSxN,KAAK,CAACiD,OAAN,CAAc2M,IAAd,CAAmBC,CAAC,IAAIA,CAAC,CAACC,iBAA1B,CADrB;;IAEA,IACE9P,KAAK,CAAC+P,gBAAN,IACA/P,KAAK,CAACgQ,sBADN,IAEA1Q,MAAM,IAAI,IAHZ,EAIE;MACA,KAAK2Q,mBAAL,CAAyB3Q,MAAzB;IACD,CAND,MAMO;MACL,KAAK4Q,SAAL;IACD;;IACD,KAAKC,cAAL,CAAoBnQ,KAApB;EACD;;EAEDoQ,kBAAkB,CAACC,SAAD,EAAiC;IACjD,IAAM;MACJC,YADI;MAEJxL,iBAFI;MAGJyL,QAHI;MAIJvQ,KAJI;MAKJiF,aALI;MAMJlG;IANI,IAOF,KAAKa,KAPT;;IASA,IAAII,KAAK,KAAKqQ,SAAS,CAACrQ,KAAxB,EAA+B;MAC7B,KAAKwQ,aAAL,CAAmBH,SAAS,CAACrQ,KAA7B;MACA,KAAKmQ,cAAL,CAAoBnQ,KAApB;IACD;;IAED,IAAMyQ,mBAAmB,GACvBH,YAAY,KAAKD,SAAS,CAACC,YAA3B,GACIA,YAAY,CAAC7M,MAAb,CACEiN,WAAW,IAAI,CAACL,SAAS,CAACC,YAAV,CAAuBK,QAAvB,CAAgCD,WAAhC,CADlB,CADJ,GAII,EALN;;IAMA,IAAID,mBAAmB,CAACxR,MAApB,GAA6B,CAAjC,EAAoC;MAAA;;MAClC,IAAM;QAAE2R;MAAF,IAAuB,KAAKhR,KAAlC;MACA,IAAMiR,sBAAsB,4BAC1BD,gBAAgB,CAACE,GAAjB,CACE1T,oBAAoB,CAAC2T,wCADvB,CAD0B,yEAGrB,KAHP;;MAIA,IAAIF,sBAAJ,EAA4B;QAC1B,KAAKG,mBAAL;QACA,KAAKC,qBAAL;MACD;;MACD,KAAKC,YAAL,CAAkB,cAAlB,EAAkC,IAAlC;MACA,KAAKC,iBAAL,CAAuBV,mBAAvB,EAA4CI,sBAA5C;IACD;;IAED,IAAI/L,iBAAiB,KAAKuL,SAAS,CAACvL,iBAApC,EAAuD;MACrD,KAAKsM,oBAAL;IACD;;IACD,IAAIb,QAAQ,KAAKF,SAAS,CAACE,QAA3B,EAAqC;MACnC,KAAKc,uBAAL,CAA6Bd,QAA7B;IACD;;IACD,IAAItL,aAAa,KAAKoL,SAAS,CAACpL,aAAhC,EAA+C;MAC7C,KAAKiM,YAAL,CAAkB,cAAlB,EAAkC,IAAlC;IACD;;IACD,IAAInS,KAAK,KAAKsR,SAAS,CAACtR,KAAxB,EAA+B;MAC7B,KAAKuS,WAAL,CAAiBvS,KAAjB;IACD;;IACD,IAAM;MAAEwS,qBAAF;MAAyBC;IAAzB,IAAoD,IAA1D;;IACA,IAAID,qBAAqB,IAAI,IAAzB,IAAiCC,sBAAsB,IAAI,IAA/D,EAAqE;MACnEC,MAAM,CAACC,qBAAP,CAA6B,MAAM;QACjC,IAAMjK,GAAG,GAAGD,IAAI,CAACC,GAAL,EAAZ;QACA,IAAMkK,WAAW,GAAGlK,GAAG,GAAG8J,qBAA1B;QACA,IAAMK,SAAS,GAAGJ,sBAAsB,GAAGD,qBAA3C;QACA,IAAMxM,oBAAoB,GAAG8M,IAAI,CAACC,GAAL,CAASH,WAAW,GAAGC,SAAvB,EAAkC,CAAlC,CAA7B;;QACA,IAAIJ,sBAAsB,GAAG/J,GAA7B,EAAkC;UAChC,KAAK8J,qBAAL,GAA6BlN,SAA7B;UACA,KAAKmN,sBAAL,GAA8BnN,SAA9B;QACD;;QAED,KAAKkC,QAAL,CAAcK,KAAK,IAAI;UACrB,IAAIA,KAAK,CAAC7B,oBAAN,IAA8B,IAAlC,EAAwC;YACtCpH,GAAG,CAACoU,MAAJ,CAAW,kDAAX;YACA,OAAO,IAAP;UACD;;UAED,OAAO;YAAEhN;UAAF,CAAP;QACD,CAPD;MAQD,CAlBD;IAmBD;;IAED,KAAKiN,eAAL;EACD;;EAEDC,oBAAoB,GAAS;IAC3B,IAAM;MAAEjS;IAAF,IAAY,KAAKJ,KAAvB;IACA,KAAK4Q,aAAL,CAAmBxQ,KAAnB;IACA,KAAKoL,OAAL,CAAa8G,MAAb;IACA,KAAKC,kBAAL,CAAwBD,MAAxB;;IAEA,IAAI,KAAKE,YAAT,EAAuB;MACrBC,YAAY,CAAC,KAAKD,YAAN,CAAZ;IACD;;IACD,KAAKE,4BAAL,CAAkCJ,MAAlC;;IACA,IAAI,KAAKK,cAAL,KAAwBlO,SAA5B,EAAuC;MACrCmO,oBAAoB,CAAC,KAAKD,cAAN,CAApB;IACD;EACF;;EA8XDE,eAAe,CACbC,WADa,EAEbC,QAFa,EAIK;IAAA,IADlBC,QACkB,uEADP,KACO;IAClB,IAAM;MAAE5S;IAAF,IAAY,KAAKJ,KAAvB;IACA,IAAMiT,WAAW,GAAG,KAAKC,cAAL,CAAoBJ,WAApB,CAApB;IACA,IAAMK,QAAQ,GAAG,KAAKC,WAAL,CAAiBL,QAAjB,CAAjB;;IACA,IAAIC,QAAQ,IAAIC,WAAW,IAAI,IAA3B,IAAmCE,QAAQ,IAAI,IAAnD,EAAyD;MACvD,IAAME,MAAK,GAAGjT,KAAK,CAACkT,YAAN,CAAmBL,WAAnB,EAAgCE,QAAhC,CAAd;;MACA,IAAIxY,UAAU,CAAC4Y,UAAX,CAAsBnT,KAAK,CAACiD,OAAN,CAAc4P,WAAd,EAA2BpR,IAAjD,CAAJ,EAA4D;QAC1D;QACA,IAAM;UAAEtB;QAAF,IAAgBH,KAAtB;QACA,OAAO7F,EAAE,CAACiZ,IAAH,CAAQC,cAAR,CAAuBC,MAAvB,CACLjV,wBADK,EAEL4U,MAFK,EAGL9Y,EAAE,CAACiZ,IAAH,CAAQG,QAAR,CAAiBC,WAAjB,CAA6BrT,SAAS,CAACX,QAAvC,CAHK,CAAP;MAKD;;MACD,OAAOyT,MAAP;IACD;;IACD,IAAIL,QAAJ,EAAc;MACZ,OAAO,IAAP;IACD;;IACD,IAAIC,WAAW,IAAI,IAAf,IAAuBE,QAAQ,IAAI,IAAvC,EAA6C;MAC3C,OAAO/S,KAAK,CAACyT,WAAN,CAAkBZ,WAAlB,EAA+BE,QAA/B,CAAP;IACD;;IACD,OAAO,EAAP;EACD;;EAEDD,cAAc,CAACJ,WAAD,EAA6D;IACzE,IAAM;MAAEvE;IAAF,IAAc,KAAKvH,KAAzB;IACApM,aAAa,CAAC2T,OAAD,CAAb;IACA,IAAM;MAAEuF;IAAF,IAAmBvF,OAAzB;;IACA,IAAIuF,YAAY,IAAI,IAApB,EAA0B;MACxB,OAAO,IAAP;IACD;;IAED,OAAOhB,WAAW,IAAI,IAAf,GAAsBgB,YAAY,CAAC5C,GAAb,CAAiB4B,WAAjB,CAAtB,GAAsD,IAA7D;EACD;;EAEDM,WAAW,CAACL,QAAD,EAA0D;IACnE,IAAM;MAAExE;IAAF,IAAc,KAAKvH,KAAzB;IACApM,aAAa,CAAC2T,OAAD,CAAb;IACA,IAAM;MAAEwF;IAAF,IAAgBxF,OAAtB;;IACA,IAAIwF,SAAS,IAAI,IAAjB,EAAuB;MACrB,OAAO,IAAP;IACD;;IAED,OAAOhB,QAAQ,IAAI,IAAZ,GAAmBgB,SAAS,CAAC7C,GAAV,CAAc6B,QAAd,CAAnB,GAA6C,IAApD;EACD;;EAEDiB,QAAQ,GAA+B;IAAA;;IACrC,IAAM;MAAE5T,KAAF;MAASoF;IAAT,IAAmB,KAAKxF,KAA9B;IACA,OAAO,KAAKiU,cAAL,CACLzO,KADK,WAEJlM,mBAAmB,CAAC8G,KAAD,CAAnB,IAA8BA,KAAK,CAACqF,UAFhC,yCAE+C,KAF/C,EAGLrF,KAAK,CAAC8T,mBAAN,GAA4B9T,KAAK,CAAC+T,sBAH7B,CAAP;EAKD;;EAEDC,gBAAgB,CAACC,UAAD,EAAuC;IACrD,IAAM;MAAEvO;IAAF,IAAmB,KAAKkB,KAA9B;IACA,OAAO3N,SAAS,CAACib,eAAV,CAA0BD,UAA1B,EAAsCvO,YAAtC,CAAP;EACD;EAED;AACF;AACA;AACA;AACA;AACA;;;EACEyL,iBAAiB,CACfb,YADe,EAGT;IAAA,IADN6D,eACM,uEADY,KACZ;IACN,IAAM;MAAEnU;IAAF,IAAY,KAAKJ,KAAvB;IACA,IAAM;MAAErB,eAAF;MAAmBG;IAAnB,IAAoC,KAAKkI,KAA/C;IACA,IAAMwN,kBAAkB,GAAGD,eAAe,GACtC,IAAInG,GAAJ,EADsC,GAEtC,IAAIA,GAAJ,CAAQzP,eAAR,CAFJ;IAGA,IAAM8V,eAAe,GAAGF,eAAe,GAAG,IAAInG,GAAJ,EAAH,GAAe,IAAIA,GAAJ,CAAQtP,YAAR,CAAtD;IAEA,IAAI4V,SAAS,GAAGH,eAAe,IAAI5V,eAAe,CAACS,IAAhB,GAAuB,CAA1D;IACAsR,YAAY,CAACnN,OAAb,CAAqB,SAA2B;MAAA,IAA1B;QAAES,IAAF;QAAQnC,IAAR;QAAcwR;MAAd,CAA0B;MAC9C,IAAMgB,UAAU,GAAGjU,KAAK,CAACiD,OAAN,CAAcsR,SAAd,CACjB;QAAA,IAAC;UAAE3Q,IAAI,EAAE4Q,UAAR;UAAoB/S,IAAI,EAAEgT;QAA1B,CAAD;QAAA,OACED,UAAU,KAAK5Q,IAAf,IAAuB6Q,UAAU,KAAKhT,IADxC;MAAA,CADiB,CAAnB;;MAIA,IAAIwS,UAAU,IAAI,CAAlB,EAAqB;QACnBK,SAAS,GAAGF,kBAAkB,CAACM,MAAnB,CAA0BT,UAA1B,KAAyCK,SAArD;QACAA,SAAS,GACP,KAAKK,gBAAL,CAAsBV,UAAtB,EAAkChB,KAAlC,EAAyCoB,eAAzC,KACAC,SAFF;MAGD,CALD,MAKO;QACL3W,GAAG,CAAC+B,KAAJ,CAAU,uCAAV,EAAmDkE,IAAnD,EAAyDnC,IAAzD,EAA+DwR,KAA/D;MACD;IACF,CAbD;;IAcA,IAAIqB,SAAJ,EAAe;MACb,KAAK/N,QAAL,CAAc;QACZ7H,YAAY,EAAE2V,eADF;QAEZ9V,eAAe,EAAE6V;MAFL,CAAd;IAID;EACF;EAED;AACF;AACA;AACA;AACA;AACA;AACA;;;EACEO,gBAAgB,CACdV,UADc,EAEdhB,KAFc,EAGdvU,YAHc,EAIL;IACT,IAAM;MAAEsB;IAAF,IAAY,KAAKJ,KAAvB;IACA,IAAM;MAAEO;IAAF,IAAgBH,KAAtB;IACA,IAAMV,MAAM,GAAGU,KAAK,CAACiD,OAAN,CAAcgR,UAAd,CAAf;;IAEA,IAAIhB,KAAK,IAAI,IAAT,IAAiB,UAAGA,KAAH,EAAW2B,IAAX,GAAkB3V,MAAlB,GAA2B,CAAhD,EAAmD;MACjD,IAAM4V,WAAW,GAAGnW,YAAY,CAACoS,GAAb,CAAiBmD,UAAjB,CAApB;;MACA,IAAIY,WAAW,IAAI,IAAnB,EAAyB;QACvB,IAAM;UAAEtV;QAAF,IAAWsV,WAAjB;;QACA,IAAItV,IAAI,KAAK0T,KAAb,EAAoB;UAClBtV,GAAG,CAACoU,MAAJ,CAAW,oCAAX;UACA,OAAO,KAAP;QACD;MACF;;MACDrT,YAAY,CAACoW,GAAb,CAAiBb,UAAjB,EAA6B;QAC3B1U,IAAI,EAAE0T,KADqB;QAE3BxP,MAAM,EAAErE,QAAQ,CAACC,eAAT,CAAyBC,MAAzB,EAAiC2T,KAAjC,EAAwC9S,SAAS,CAACX,QAAlD;MAFmB,CAA7B;MAIA,OAAO,IAAP;IACD;;IACD,OAAOd,YAAY,CAACgW,MAAb,CAAoBT,UAApB,CAAP;EACD;;EAEDc,oBAAoB,CAACxW,eAAD,EAA2C;IAC7D,KAAKgI,QAAL,CAAc;MAAEhI;IAAF,CAAd;EACD;;EAEDyW,iBAAiB,CACff,UADe,EAEfxQ,MAFe,EAGfwR,OAHe,EAIT;IACNtX,GAAG,CAACyG,KAAJ,CAAU,yBAAV,EAAqC6P,UAArC,EAAiDxQ,MAAjD;IAEA,KAAKyN,YAAL,CAAkB,cAAlB,EAAkC,IAAlC;IAEA,KAAK3K,QAAL,CAAc,SAAyB;MAAA,IAAxB;QAAEhI;MAAF,CAAwB;MACrC,IAAM6V,kBAAkB,GAAG,IAAIpG,GAAJ,CAAQzP,eAAR,CAA3B;;MACA,IAAIkF,MAAM,IAAI,IAAd,EAAoB;QAClB2Q,kBAAkB,CAACM,MAAnB,CAA0BT,UAA1B;MACD,CAFD,MAEO;QACLG,kBAAkB,CAACU,GAAnB,CAAuBb,UAAvB,EAAmC;UACjCxQ,MADiC;UAEjCwR;QAFiC,CAAnC;MAID;;MACD,OAAO;QAAE1W,eAAe,EAAE6V;MAAnB,CAAP;IACD,CAXD;EAYD;EAED;AACF;AACA;AACA;AACA;AACA;;;EACEc,cAAc,CACZjB,UADY,EAEZxQ,MAFY,EAGZlE,IAHY,EAIN;IACN5B,GAAG,CAACyG,KAAJ,CAAU,sBAAV,EAAkC6P,UAAlC,EAA8CxQ,MAA9C,EAAsDlE,IAAtD;IAEA,KAAK2R,YAAL,CAAkB,cAAlB,EAAkC,IAAlC;IAEA,KAAK3K,QAAL,CAAc,SAAsB;MAAA,IAArB;QAAE7H;MAAF,CAAqB;MAClC,IAAM2V,eAAe,GAAG,IAAIrG,GAAJ,CAAQtP,YAAR,CAAxB;MACA2V,eAAe,CAACS,GAAhB,CAAoBb,UAApB,EAAgC;QAAExQ,MAAF;QAAUlE;MAAV,CAAhC;MACA,OAAO;QAAEb,YAAY,EAAE2V;MAAhB,CAAP;IACD,CAJD;EAKD;EAED;AACF;AACA;AACA;;;EACEc,YAAY,CAACC,SAAD,EAA6B;IAAA;;IACvCzX,GAAG,CAACyG,KAAJ,CAAU,cAAV,EAA0BgR,SAA1B;IAEA,IAAM;MAAExE;IAAF,IAAuB,KAAKhR,KAAlC;IACA,IAAMyV,gCAAgC,6BACpCzE,gBAAgB,CAACE,GAAjB,CACE1T,oBAAoB,CAACkY,8BADvB,CADoC,2EAG/B,KAHP;;IAIA,IAAID,gCAAJ,EAAsC;MACpC,KAAKE,eAAL;IACD;;IAED,IAAM;MAAEvV;IAAF,IAAY,KAAKJ,KAAvB;IACAwV,SAAS,CAACjS,OAAV,CAAkB,SAA8BqR,UAA9B,KAA6C;MAAA,IAA5C;QAAEC,UAAF;QAAclV,IAAd;QAAoB0T;MAApB,CAA4C;MAC7D,IAAM3T,MAAM,GAAGU,KAAK,CAACiD,OAAN,CAAc2M,IAAd,CACbC,CAAC,IAAIA,CAAC,CAACjM,IAAF,KAAW4Q,UAAX,IAAyB3E,CAAC,CAACpO,IAAF,KAAWgT,UAD5B,CAAf;;MAGA,IAAInV,MAAM,IAAI,IAAd,EAAoB;QAClB;MACD;;MACD,IAAMoT,WAAW,GAAG1S,KAAK,CAACwV,oBAAN,CAA2BlW,MAAM,CAACsE,IAAlC,CAApB;MACApJ,aAAa,CAACkY,WAAD,CAAb;;MACA,IAAIO,KAAK,KAAK5O,SAAd,EAAyB;QACvB,KAAKoR,iBAAL,CAAuB/C,WAAvB;MACD,CAFD,MAEO,IAAIO,KAAK,KAAK,IAAd,EAAoB;QACzB,KAAKiC,cAAL,CAAoBxC,WAApB,EAAiCpT,MAAM,CAACmE,MAAP,GAAgBiS,MAAhB,EAAjC,EAA2D,OAA3D;MACD,CAFM,MAEA;QACL,IAAMC,WAAW,GAAGpb,UAAU,CAACqb,UAAX,CAAsBnB,UAAtB,IAChBta,EAAE,CAAC0b,WAAH,CAAeC,QAAf,CAAwB7C,KAAxB,CADgB,GAEhB9Y,EAAE,CAAC0b,WAAH,CAAeE,QAAf,CAAwB9C,KAAxB,CAFJ;QAGA,KAAKiC,cAAL,CACExC,WADF,EAEEpT,MAAM,CAACmE,MAAP,GAAgBuS,EAAhB,CAAmBL,WAAnB,CAFF,YAGKpW,IAHL;MAKD;IACF,CAvBD;EAwBD;;EAED0W,kBAAkB,CAACpD,WAAD,EAAgC;IAChD,KAAK3B,YAAL,CAAkB,cAAlB,EAAkC,IAAlC;IAEA,KAAK3K,QAAL,CACE,UAA+D;MAAA,IAA9D;QAAEhI,eAAF;QAAmBG;MAAnB,CAA8D;MAC7D,IAAM0V,kBAAkB,GAAG7V,eAAe,GACtC,IAAIyP,GAAJ,CAAQzP,eAAR,CADsC,GAEtC,IAAIyP,GAAJ,EAFJ;MAGA,IAAMqG,eAAe,GAAG3V,YAAY,GAChC,IAAIsP,GAAJ,CAAQtP,YAAR,CADgC,GAEhC,IAAIsP,GAAJ,EAFJ;MAGAqG,eAAe,CAACK,MAAhB,CAAuB7B,WAAvB;MACAuB,kBAAkB,CAACM,MAAnB,CAA0B7B,WAA1B;MAEA,OAAO;QACLnU,YAAY,EAAE2V,eADT;QAEL9V,eAAe,EAAE6V;MAFZ,CAAP;IAID,CAfH;EAiBD;;EAEDqB,iBAAiB,CAAC5C,WAAD,EAAgC;IAC/C,KAAK3B,YAAL,CAAkB,oBAAlB,EAAwC,IAAxC;IAEA,KAAK3K,QAAL,CAAc,UAAsB;MAAA,IAArB;QAAE7H;MAAF,CAAqB;MAClC,IAAM2V,eAAe,GAAG,IAAIrG,GAAJ,CAAQtP,YAAR,CAAxB;MACA2V,eAAe,CAACK,MAAhB,CAAuB7B,WAAvB;MAEA,OAAO;QAAEnU,YAAY,EAAE2V;MAAhB,CAAP;IACD,CALD;EAMD;;EAEDkB,eAAe,GAAS;IACtB5X,GAAG,CAACyG,KAAJ,CAAU,sBAAV;IAEA,IAAM;MAAE7F,eAAF;MAAmBG,YAAnB;MAAiCG;IAAjC,IAAkD,KAAK+H,KAA7D;;IACA,IACElI,YAAY,CAACM,IAAb,KAAsB,CAAtB,IACAT,eAAe,CAACS,IAAhB,KAAyB,CADzB,IAEAH,YAAY,KAAK,IAHnB,EAIE;MACA;IACD,CAVqB,CAYtB;;;IACA,KAAKmS,mBAAL;IAEA,KAAKE,YAAL,CAAkB,qBAAlB,EAAyC,IAAzC;IACA,KAAK3K,QAAL,CAAc;MACZ7H,YAAY,EAAE,IAAIsP,GAAJ,EADF;MAEZzP,eAAe,EAAE,IAAIyP,GAAJ,EAFL;MAGZ7H,WAAW,EAAE,EAHD;MAIZtH,YAAY,EAAEwF;IAJF,CAAd;EAMD;;EAED4M,qBAAqB,GAAS;IAC5BtT,GAAG,CAACyG,KAAJ,CAAU,8BAAV;IAEA,KAAKmC,QAAL,CAAc;MACZJ,WAAW,EAAE,EADD;MAEZtH,YAAY,EAAEwF;IAFF,CAAd;EAID;;EAED2M,mBAAmB,GAAS;IAC1B,IAAI,KAAKlF,cAAL,CAAoBoK,OAApB,IAA+B,IAAnC,EAAyC;MACvC,KAAKpK,cAAL,CAAoBoK,OAApB,CAA4BC,QAA5B,CAAqC,EAArC;IACD;EACF;EAED;AACF;AACA;;;EACEC,cAAc,GAAS;IACrBzY,GAAG,CAACyG,KAAJ,CAAU,oBAAV;IAEA,IAAM;MAAEpE;IAAF,IAAY,KAAKJ,KAAvB;IACA,IAAM;MAAErB,eAAF;MAAmBG;IAAnB,IAAoC,KAAKkI,KAA/C;IACA,IAAM;MAAE3D,OAAF;MAAW9C;IAAX,IAAyBH,KAA/B;IAEA,IAAMoU,kBAAkB,GAAG,IAAIpG,GAAJ,EAA3B;IACA,IAAMqG,eAAe,GAAG,IAAIrG,GAAJ,EAAxB;IAEAzP,eAAe,CAAC4E,OAAhB,CAAwB,CAAC8P,KAAD,EAAQoD,GAAR,KAAgB;MACtC,IAAM;QAAEpB;MAAF,IAAchC,KAApB;MACA,IAAM3T,MAAM,GAAG2D,OAAO,CAACoT,GAAD,CAAtB;MACA,IAAM5S,MAAM,GAAGlJ,UAAU,CAAC+b,kBAAX,CACbhX,MADa,EAEb2V,OAFa,EAGb9U,SAAS,CAACX,QAHG,CAAf;MAKA4U,kBAAkB,CAACU,GAAnB,CAAuBuB,GAAvB,EAA4B;QAC1BpB,OAD0B;QAE1BxR;MAF0B,CAA5B;IAID,CAZD;IAcA/E,YAAY,CAACyE,OAAb,CAAqB,CAAC8P,KAAD,EAAQoD,GAAR,KAAgB;MACnC,IAAM;QAAE9W;MAAF,IAAW0T,KAAjB;MACA,IAAM3T,MAAM,GAAG2D,OAAO,CAACoT,GAAD,CAAtB;MACAhC,eAAe,CAACS,GAAhB,CAAoBuB,GAApB,EAAyB;QACvB9W,IADuB;QAEvBkE,MAAM,EAAErE,QAAQ,CAACC,eAAT,CAAyBC,MAAzB,EAAiCC,IAAjC,EAAuCY,SAAS,CAACX,QAAjD;MAFe,CAAzB;IAID,CAPD;IASA,KAAK0R,YAAL,CAAkB,uBAAlB,EAA2C,IAA3C;IACA,KAAK3K,QAAL,CAAc;MACZ7H,YAAY,EAAE2V,eADF;MAEZ9V,eAAe,EAAE6V;IAFL,CAAd;EAID;;EAEDmC,UAAU,SAGwD;IAAA,IAHvD;MACT7X,YADS;MAETH;IAFS,CAGuD;IAChE,KAAKgI,QAAL,CAAc;MACZ7H,YADY;MAEZH;IAFY,CAAd;EAID;;EAED8S,uBAAuB,CAACd,QAAD,EAAgD;IAAA;;IAAA,IAA1BiG,WAA0B,uEAAZ,IAAY;IACrE,IAAMnL,mBAAmB,GAAG/Q,cAAc,CAACmc,gBAAf,CAAgClG,QAAhC,CAA5B;IACA,IAAMmG,wBAAwB,GAAGpc,cAAc,CAACqc,2BAAf,CAC/BpG,QAD+B,CAAjC;IAIA,IAAMqG,2BAA2B,4BAC/BrG,QAD+B,aAC/BA,QAD+B,uBAC/BA,QAAQ,CAAEqG,2BADqB,yEACU,EAD3C;IAEA,IAAMC,2BAA2B,4BAC/BtG,QAD+B,aAC/BA,QAD+B,uBAC/BA,QAAQ,CAAEsG,2BADqB,yEACU,EAD3C;IAEA,IAAMrL,wBAAwB,4BAC5B+E,QAD4B,aAC5BA,QAD4B,uBAC5BA,QAAQ,CAAE/E,wBADkB,yEACU,KADxC;IAGA,IAAMsL,qBAAqB,GAAG,CAAC3e,SAAS,CACtC,KAAKkT,mBADiC,EAEtCA,mBAFsC,CAAxC;IAIA,IAAM0L,uBAAuB,GAAG,CAAC5e,SAAS,CACxC,KAAKue,wBADmC,EAExCA,wBAFwC,CAA1C;IAIA,IAAMM,0BAA0B,GAAG,CAAC7e,SAAS,CAC3C,KAAKmT,oBADsC,EAE3CiF,QAF2C,aAE3CA,QAF2C,uBAE3CA,QAAQ,CAAEqG,2BAFiC,CAA7C;IAIA,IAAMK,0BAA0B,GAAG,CAAC9e,SAAS,CAC3C,KAAKoT,oBADsC,EAE3CsL,2BAF2C,CAA7C;IAIA,IAAMK,wBAAwB,GAC5B,KAAK1L,wBAAL,KAAkCA,wBADpC;;IAEA,IACEsL,qBAAqB,IACrBC,uBADA,IAEAC,0BAFA,IAGAC,0BAHA,IAIAC,wBALF,EAME;MACA,KAAK7L,mBAAL,GAA2BA,mBAA3B;MACA,KAAKqL,wBAAL,GAAgCA,wBAAhC;MACA,KAAKpL,oBAAL,GAA4BsL,2BAA5B;MACA,KAAKrL,oBAAL,GAA4BsL,2BAA5B;MACA,KAAKrL,wBAAL,GAAgCA,wBAAhC;MACA,KAAK2L,eAAL,CAAqB,EAArB,EAAyBX,WAAzB;;MAEA,IAAIO,uBAAuB,IAAIP,WAA/B,EAA4C;QAC1C,KAAKJ,cAAL;MACD;IACF;EACF;;EAwCDe,eAAe,CACbC,cADa,EAGP;IAAA;;IAAA,IADNZ,WACM,uEADQ,IACR;IACN,IAAM;MAAEtJ;IAAF,IAA4B,KAAKtG,KAAvC;;IACA,IAAMyQ,MAAM;MACVnK;IADU,GAEPkK,cAFO,CAAZ;;IAIA,IAAME,mBAAmB,GAAG,CAC1B,6BAAI,KAAKjM,mBAAT,yEAAgC,EAAhC,CAD0B,EAE1B,GAAGgM,MAAM,CAACnK,qBAAP,CAA6BqK,MAA7B,EAFuB,CAA5B;IAIA,IAAMpX,SAAS,GAAG,IAAI9F,SAAJ,CAChBid,mBADgB,EAEhB,KAAKZ,wBAFW,EAGhB,KAAKpL,oBAHW,EAIhB,KAAKC,oBAJW,EAKhB,KAAKC,wBALW,CAAlB;IAQA7N,GAAG,CAACyG,KAAJ,CAAU,iBAAV,EAA6B,KAAKiH,mBAAlC,EAAuDiM,mBAAvD;IAEA,KAAK/Q,QAAL,iCAAmB8Q,MAAnB;MAA2BlX;IAA3B,IAAwC,MAAM;MAC5C,IAAIqW,WAAW,IAAI,KAAKvL,IAAxB,EAA8B;QAC5B,KAAKA,IAAL,CAAUuL,WAAV;MACD;IACF,CAJD;EAKD;;EAEDgB,aAAa,GAAS;IACpB,IAAM;MAAEjH;IAAF,IAAe,KAAK3Q,KAA1B;IACA,KAAKyR,uBAAL,CAA6Bd,QAA7B;EACD;;EAEDL,SAAS,GAAS;IAChB,IAAM;MACJuH,uBADI;MAEJnH,YAFI;MAGJvR,KAHI;MAIJiB,KAJI;MAKJrB,WALI;MAMJF,aANI;MAOJ0H,WAPI;MAQJC,qBARI;MASJC;IATI,IAUF,KAAKzG,KAVT;IAYA,IAAMqO,aAAa,GAAG7H,qBAAH,aAAGA,qBAAH,cAAGA,qBAAH,GAA4B,EAA/C;IACA,IAAMvH,YAAY,GAAG7B,iBAAiB,CAACsJ,kBAAlB,CACnBH,WADmB,EAEnB8H,aAFmB,EAGnBjO,KAAK,CAACiD,OAHa,EAInBoD,mBAJmB,CAArB;;IAOA,IAAIoR,uBAAJ,EAA6B;MAC3B;MACA;MACA,IAAMC,sBAAsB,GAAGpH,YAAY,CAAC7M,MAAb,CAC7BiN,WAAW,IAAIA,WAAW,CAACuC,KAAZ,IAAqB,IADP,CAA/B;MAGA,KAAK9B,iBAAL,CAAuBuG,sBAAvB;IACD;;IAED,KAAKnR,QAAL,CAAc;MACZxH,KADY;MAEZJ,WAFY;MAGZF,aAHY;MAIZqQ,OAAO,EAAE,IAJG;MAKZjQ;IALY,CAAd;IAOA,KAAK2Y,aAAL;EACD;;EAEKvH,mBAAmB,CAACzC,eAAD,EAAyC;IAAA;;IAAA;MAChE,IAAM;QAAExN;MAAF,IAAY,KAAI,CAACJ,KAAvB;;MACA,KAAI,CAAC2G,QAAL,CAAc;QAAE4G,oBAAoB,EAAE;MAAxB,CAAd;;MAEA,IAAI;QACF,IAAMiB,cAAc,SAAS,KAAI,CAAChD,OAAL,CAAauM,GAAb,CAC3B3X,KAAK,CAAC4X,WAAN,CAAkBpK,eAAlB,CAD2B,EAE3BqK,QAAQ,IAAIA,QAAQ,CAACC,KAAT,EAFe,CAA7B;QAKA,IAAMxY,OAAM,GAAG8O,cAAc,CAACnL,OAAf,CAAuB,CAAvB,CAAf;;QACA,IAAM8U,IAAI,GAAGzY,OAAM,CAACyY,IAAP,GAAcC,IAAd,EAAb;;QACA5J,cAAc,CAAC6J,SAAf,CAAyB,CAACF,IAAD,CAAzB;QACA3J,cAAc,CAAC8J,WAAf,CAA2B,CAA3B,EAA8B,CAA9B,EAAiC,CAAC5Y,OAAD,CAAjC;QAEA,IAAM6Y,IAAI,SAAS,KAAI,CAAC/M,OAAL,CAAauM,GAAb,CAAiBvJ,cAAc,CAACgK,eAAf,EAAjB,CAAnB;;QACA,IAAID,IAAI,CAACE,IAAL,CAAUpZ,MAAV,GAAmB,CAAvB,EAA0B;UACxB,IAAMqZ,GAAG,GAAGH,IAAI,CAACE,IAAL,CAAU,CAAV,CAAZ;;UACA,IAAMpF,OAAK,GAAGqF,GAAG,CAACxH,GAAJ,CAAQxR,OAAR,CAAd;;UAEA,KAAI,CAACiZ,eAAL,CAAqBtF,OAArB,EAA4BzF,eAA5B;;UAEA,KAAI,CAACjH,QAAL,CAAc;YAAE4G,oBAAoB,EAAE;UAAxB,CAAd;QACD,CAPD,MAOO;UACLxP,GAAG,CAAC6a,IAAJ,CAAS,iDAAT;;UACA,KAAI,CAACjS,QAAL,CAAc;YAAE4G,oBAAoB,EAAE;UAAxB,CAAd;;UACA,KAAI,CAAC1C,uBAAL;QACD;;QACD,KAAI,CAAClE,QAAL,CAAc;UAAE6H,cAAF;UAAkBZ;QAAlB,CAAd,EAAmD,MAAM;UACvD,KAAI,CAAC0C,SAAL;QACD,CAFD;MAGD,CA3BD,CA2BE,OAAOxQ,KAAP,EAAc;QACd,KAAI,CAAC+Y,oBAAL,CAA0B/Y,KAA1B;MACD;IAjC+D;EAkCjE;;EAED6Y,eAAe,CAAChL,SAAD,EAAoBC,eAApB,EAAmD;IAChE,IAAMkL,eAAe,GAAGlL,eAAe,CACpC/J,MADqB,GAErBuS,EAFqB,CAElB7b,EAAE,CAAC0b,WAAH,CAAeC,QAAf,CAAwBvI,SAAxB,CAFkB,CAAxB;IAGA,IAAMrI,gBAAgB,GAAG,CAACwT,eAAD,CAAzB;IACA,KAAKnS,QAAL,CAAc;MACZgH,SADY;MAEZrI;IAFY,CAAd;EAID;;EAEDyT,QAAQ,CACNjG,WADM,EAENC,QAFM,EAIA;IAAA,IADNC,QACM,uEADK,KACL;IACN,IAAM;MAAEjF;IAAF,IAAc,KAAK/N,KAAzB;;IACA,IAAI+N,OAAJ,EAAa;MACX,IAAMsF,OAAK,GAAG2F,MAAM,CAClB,KAAKnG,eAAL,CAAqBC,WAArB,EAAkCC,QAAlC,EAA4CC,QAA5C,CADkB,CAApB;;MAGAta,kBAAkB,CAACugB,eAAnB,CAAmC5F,OAAnC,EAA0CxG,KAA1C,CAAgDqM,CAAC,IAC/Cnb,GAAG,CAAC+B,KAAJ,CAAU,qBAAV,EAAiCoZ,CAAjC,CADF;IAGD,CAPD,MAOO;MACLnb,GAAG,CAAC+B,KAAJ,CAAU,yDAAV;IACD;EACF;EAED;AACF;AACA;AACA;AACA;AACA;AACA;;;EACEqZ,UAAU,CACRC,MADQ,EAKF;IAAA,IAHNC,cAGM,uEAHW,KAGX;IAAA,IAFNC,YAEM,uEAFS,IAET;IAAA,IADNxZ,KACM;IACN,IAAM;MAAEM,KAAF;MAAS2N;IAAT,IAAqB,KAAK/N,KAAhC;IACA,IAAM;MAAEmO,gBAAF;MAAoBrI;IAApB,IAAqC,KAAKkB,KAAhD;IACA,IAAM6G,gBAAgB,GAAGM,gBAAgB,CAACoL,mBAAjB,EAAzB;;IAEA,IAAIxL,OAAJ,EAAa;MACX,IAAMa,aAAa,GAAG;QACpBwK,MAAM,EAAEhgB,SAAS,CAACogB,aAAV,CACNJ,MADM,EAENhZ,KAAK,CAACqZ,WAFA,EAGNrZ,KAAK,CAACsZ,QAHA,CADY;QAMpBL,cANoB;QAOpBC,YAPoB;QAQpBxT,YARoB;QASpB+H,gBAToB;QAUpB/N;MAVoB,CAAtB;MAaA,KAAK6G,QAAL,CAAc;QAAEiI;MAAF,CAAd;IACD,CAfD,MAeO;MACL7Q,GAAG,CAAC+B,KAAJ,CAAU,wDAAV;IACD;EACF;;EAEDwR,YAAY,CAACzC,WAAD,EAAiD;IAAA,IAA3B8K,WAA2B,uEAAb,KAAa;IAC3D,KAAKhT,QAAL,CAAc;MAAEkI;IAAF,CAAd;IAEA,IAAMrJ,KAAK,GAAG,KAAKwO,QAAL,EAAd;;IAEA,IAAI2F,WAAW,IAAI,KAAKtO,IAAxB,EAA8B;MAC5B,KAAKA,IAAL,CAAUuO,mBAAV;MACA,KAAKvO,IAAL,CAAUwO,YAAV,CAAuB;QAAEC,GAAG,EAAE;MAAP,CAAvB,EAAmC,IAAnC;IACD;;IAED,IAAI,KAAKnI,qBAAL,IAA8B,IAAlC,EAAwC;MAAA;;MACtC,IAAM;QAAEoI,sBAAF;QAA0BC;MAA1B,IAAqDxU,KAA3D;MACA5K,aAAa,CAACmf,sBAAD,CAAb;MACAnf,aAAa,CAACof,sBAAD,CAAb;MACA,IAAMC,MAAM,iDAAG,KAAK3O,WAAR,sDAAG,kBAAkB4O,qBAAlB,GAA0CD,MAA7C,yEAAuD,CAAnE;MACA,IAAME,mBAAmB,GAAGlI,IAAI,CAAC9R,GAAL,CAC1B4Z,sBAD0B,EAE1B9H,IAAI,CAACC,GAAL,CAAS+H,MAAM,GAAG,CAAlB,EAAqBD,sBAArB,CAF0B,CAA5B;MAIA,KAAKrI,qBAAL,GAA6B/J,IAAI,CAACC,GAAL,EAA7B;MACA,KAAK+J,sBAAL,GACE,KAAKD,qBAAL,GAA6BwI,mBAD/B;MAEA,KAAKxT,QAAL,CAAc;QACZxB,oBAAoB,EAAE;MADV,CAAd;MAGA,KAAKqN,YAAL,GAAoB4H,UAAU,CAAC,MAAM;QACnC,KAAKzT,QAAL,CAAc;UACZmI,mBAAmB,EAAE;QADT,CAAd;MAGD,CAJ6B,EAI3BtP,QAAQ,CAAC6a,mBAJkB,CAA9B;IAKD;EACF;;EAEDC,WAAW,GAAS;IAClB,KAAK3I,qBAAL,GAA6BlN,SAA7B;IACA,KAAKmN,sBAAL,GAA8BnN,SAA9B;IACA,KAAKkC,QAAL,CAAc;MACZkI,WAAW,EAAE,IADD;MAEZ1J,oBAAoB,EAAE,IAFV;MAGZ2J,mBAAmB,EAAE;IAHT,CAAd;;IAMA,IAAI,KAAK0D,YAAL,IAAqB,IAAzB,EAA+B;MAC7BC,YAAY,CAAC,KAAKD,YAAN,CAAZ;MACA,KAAKA,YAAL,GAAoB/N,SAApB;IACD;EACF;EAED;AACF;AACA;;;EACE8V,QAAQ,GAAS;IACf,IAAI,KAAKhP,gBAAT,EAA2B;MACzBxN,GAAG,CAACyG,KAAJ,CAAU,6BAAV,EAAyC,KAAK+G,gBAA9C;MACA,IAAM;QACJ5M,eADI;QAEJC,mBAFI;QAGJC,aAHI;QAIJC,YAJI;QAKJC,WALI;QAMJC,YANI;QAOJC,YAPI;QAQJC,qBARI;QASJC;MATI,IAUF,KAAKoM,gBAVT;MAYA,KAAKA,gBAAL,GAAwB,IAAxB;MACA,KAAK5E,QAAL,CAAc;QACZhI,eADY;QAEZC,mBAFY;QAGZC,aAHY;QAIZC,YAJY;QAKZC,WALY;QAMZC,YANY;QAOZC,YAPY;QAQZC,qBARY;QASZC;MATY,CAAd;IAWD,CA1BD,MA0BO;MACLpB,GAAG,CAACyG,KAAJ,CAAU,+CAAV;MACA,KAAKmC,QAAL,CAAc;QACZhI,eAAe,EAAE,IAAIyP,GAAJ,EADL;QAEZxP,mBAAmB,EAAER,4BAFT;QAGZS,aAAa,EAAE,EAHH;QAIZC,YAAY,EAAE,IAAIsP,GAAJ,EAJF;QAKZrP,WAAW,EAAEpE,UAAU,CAAC2E,YAAX,CAAwBC,IALzB;QAMZP,YAAY,EAAEyF,SANF;QAOZvF,qBAAqB,EAAE,EAPX;QAQZC,KAAK,EAAE;MARK,CAAd;IAUD;EACF;EAED;AACF;AACA;AACA;;;EACEqb,WAAW,GAAY;IACrB,OAAO,KAAKjP,gBAAL,IAAyB,IAAzB,IAAiC,CAAC7M,aAAa,CAAC,KAAKsI,KAAN,CAAtD;EACD;;EAEDuJ,cAAc,CAACnQ,KAAD,EAA6B;IACzCA,KAAK,CAACqa,gBAAN,CAAuBpd,aAAa,CAACqd,KAAd,CAAoBC,OAA3C,EAAoD,KAAKrR,YAAzD;IACAlJ,KAAK,CAACqa,gBAAN,CACEpd,aAAa,CAACqd,KAAd,CAAoBE,cADtB,EAEE,KAAKzR,mBAFP;IAIA/I,KAAK,CAACqa,gBAAN,CACEpd,aAAa,CAACqd,KAAd,CAAoBG,eADtB,EAEE,KAAK9Q,0BAFP;IAIA3J,KAAK,CAACqa,gBAAN,CACEpd,aAAa,CAACqd,KAAd,CAAoBI,oBADtB,EAEE,KAAK7Q,wBAFP;EAID;;EAED2G,aAAa,CAACxQ,KAAD,EAA6B;IACxCA,KAAK,CAAC2a,mBAAN,CAA0B1d,aAAa,CAACqd,KAAd,CAAoBC,OAA9C,EAAuD,KAAKrR,YAA5D;IACAlJ,KAAK,CAAC2a,mBAAN,CACE1d,aAAa,CAACqd,KAAd,CAAoBE,cADtB,EAEE,KAAKzR,mBAFP;IAIA/I,KAAK,CAAC2a,mBAAN,CACE1d,aAAa,CAACqd,KAAd,CAAoBG,eADtB,EAEE,KAAK9Q,0BAFP;IAIA3J,KAAK,CAAC2a,mBAAN,CACE1d,aAAa,CAACqd,KAAd,CAAoBI,oBADtB,EAEE,KAAK7Q,wBAFP;EAID;;EAED+Q,KAAK,GAAS;IAAA;;IACZ,mBAAK3P,IAAL,0DAAW2P,KAAX;EACD;;EAEDC,cAAc,CAACvb,MAAD,EAA6B;IACzC,IAAM;MAAEoG;IAAF,IAAmB,KAAKkB,KAA9B;IACA,IAAM;MAAE5G;IAAF,IAAY,KAAKJ,KAAvB;IACA,IAAM;MAAEyZ;IAAF,IAAkBrZ,KAAxB;IACA,IAAM6S,WAAW,GAAG5Z,SAAS,CAAC+M,aAAV,CAAwB1G,MAAxB,EAAgCoG,YAAhC,CAApB;;IAEA,IACEpG,MAAM,IAAI,IAAV,IACAA,MAAM,GAAG,CADT,IAEA+Z,WAAW,IAAI/Z,MAFf,IAGA,CAACU,KAAK,CAAC8a,YAAN,CAAmBjI,WAAnB,CAJH,EAKE;MACA,KAAKtM,QAAL,CAAc;QAAE2H,sBAAsB,EAAE;MAA1B,CAAd;MACA;IACD;;IAED,IAAM;MAAEH,gBAAF;MAAoBI;IAApB,IAAgC,KAAKvH,KAA3C;IACApM,aAAa,CAAC2T,OAAD,CAAb;IACA,IAAM;MAAE4M,IAAF;MAAQC,YAAR;MAAsBC;IAAtB,IAAmC9M,OAAzC;;IACA,IAAI7O,MAAM,GAAGyb,IAAb,EAAmB;MAAA;;MACjB,oBAAK9P,IAAL,4DAAWwO,YAAX,CAAwB;QAAEsB,IAAI,EAAEzb;MAAR,CAAxB,EAA0C,IAA1C;IACD,CAFD,MAEO,IAAI0b,YAAY,GAAG1b,MAAnB,EAA2B;MAAA;;MAChC,IAAM4b,WAAW,kBAAG,KAAKjQ,IAAR,gDAAG,YAAWkQ,cAAX,EAApB;MACA3gB,aAAa,CAAC0gB,WAAD,CAAb;MACA,IAAME,OAAO,GAAGrN,gBAAgB,CAACsN,WAAjB,CAA6BH,WAA7B,EAA0C5b,MAA1C,CAAhB;MACA,oBAAK2L,IAAL,4DAAWwO,YAAX,CACE;QAAEsB,IAAI,EAAElJ,IAAI,CAACC,GAAL,CAASsJ,OAAT,EAAkBH,QAAlB,CAAR;QAAqCK,UAAU,EAAE;MAAjD,CADF,EAEE,IAFF;IAID;;IACD,KAAKC,0BAAL,GAAkCjc,MAAlC;IACA,KAAKiH,QAAL,CAAc;MAAE2H,sBAAsB,EAAE5O,MAA1B;MAAkC2B,gBAAgB,EAAE;IAApD,CAAd;EACD;;EAEDua,wBAAwB,CAACC,kBAAD,EAAyC;IAAA;;IAC/D,IAAM;MAAE1N,gBAAF;MAAoBrI;IAApB,IAAqC,KAAKkB,KAAhD;IACAmH,gBAAgB,CAAC2N,cAAjB,CACEziB,SAAS,CAAC+M,aAAV,CAAwByV,kBAAxB,EAA4C/V,YAA5C,CADF,EAEE,CAFF;IAKA,oBAAKuF,IAAL,4DAAWuL,WAAX;EACD;;EAEDmF,wBAAwB,CAACnH,UAAD,EAA+B;IACrD,IAAM;MAAE5G,aAAF;MAAiBlI;IAAjB,IAAkC,KAAKkB,KAA7C;IACA,IAAM;MAAE5G;IAAF,IAAY,KAAKJ,KAAvB;IACAjC,GAAG,CAACoU,MAAJ,CAAW,iBAAX,EAA8ByC,UAA9B;IAEA,IAAMoH,gBAAgB,GACpBhO,aAAa,IAAI,IAAjB,GACI,IAAI1H,GAAJ,CAAQlG,KAAK,CAAC4N,aAAd,CADJ,GAEI,IAAI1H,GAAJ,CAAQ0H,aAAR,CAHN;IAKAgO,gBAAgB,CAACjE,GAAjB,CAAqBnD,UAArB;IAEA,IAAMP,UAAU,GAAGjU,KAAK,CAACwV,oBAAN,CAA2BhB,UAA3B,CAAnB;IACAha,aAAa,CAACyZ,UAAD,CAAb;IACA,IAAM4H,YAAY,GAAG5iB,SAAS,CAACib,eAAV,CAA0BD,UAA1B,EAAsCvO,YAAtC,CAArB;IACA,IAAMoW,eAAe,GAAG7iB,SAAS,CAAC8iB,QAAV,CACtBF,YADsB,EAEtBD,gBAAgB,CAAC5c,IAAjB,GAAwB,CAFF,EAGtB0G,YAHsB,CAAxB;IAMA,KAAKa,QAAL,CAAc;MACZqH,aAAa,EAAE,CAAC,GAAGgO,gBAAJ,CADH;MAEZlW,YAAY,EAAEoW;IAFF,CAAd;EAID;;EAEDE,0BAA0B,CAACxH,UAAD,EAA+B;IACvD,IAAM;MAAE5G,aAAF;MAAiBlI;IAAjB,IAAkC,KAAKkB,KAA7C;IACA,IAAM;MAAE5G;IAAF,IAAY,KAAKJ,KAAvB;IACAjC,GAAG,CAACoU,MAAJ,CAAW,mBAAX,EAAgCyC,UAAhC;IAEA,IAAMoH,gBAAgB,GACpBhO,aAAa,IAAI,IAAjB,GACI,IAAI1H,GAAJ,CAAQlG,KAAK,CAAC4N,aAAd,CADJ,GAEI,IAAI1H,GAAJ,CAAQ0H,aAAR,CAHN;IAKAgO,gBAAgB,CAAClH,MAAjB,CAAwBF,UAAxB;IAEA,IAAMP,UAAU,GAAGjU,KAAK,CAACwV,oBAAN,CAA2BhB,UAA3B,CAAnB;IACAha,aAAa,CAACyZ,UAAD,CAAb;IACA,IAAM4H,YAAY,GAAG5iB,SAAS,CAACib,eAAV,CAA0BD,UAA1B,EAAsCvO,YAAtC,CAArB,CAduD,CAgBvD;;IACA,IAAMoW,eAAe,GAAG7iB,SAAS,CAAC8iB,QAAV,CACtBF,YADsB,EAEtBD,gBAAgB,CAAC5c,IAAjB,GAAwBgB,KAAK,CAACic,YAAN,CAAmBhd,MAFrB,EAGtByG,YAHsB,CAAxB;IAMA,KAAKa,QAAL,CAAc;MACZqH,aAAa,EAAE,CAAC,GAAGgO,gBAAJ,CADH;MAEZlW,YAAY,EAAEoW;IAFF,CAAd;EAID;;EAEDnR,6BAA6B,CAC3BuR,YAD2B,EAE3BC,gBAF2B,EAGrB;IAAA;;IACN,IAAM;MAAEpO;IAAF,IAAuB,KAAKnH,KAAlC;;IACA,IACEuV,gBAAgB,KAAKrf,yBAAyB,CAACsf,kBAA1B,CAA6CC,IADpE,EAEE;MACAH,YAAY,CAAC/Y,OAAb,CAAqB8Q,UAAU,IAAI;QACjClG,gBAAgB,CAACuO,gBAAjB,CAAkCrI,UAAlC;MACD,CAFD;IAGD,CAND,MAMO;MACLiI,YAAY,CAAC/Y,OAAb,CAAqB8Q,UAAU,IAAI;QACjClG,gBAAgB,CAAC2N,cAAjB,CAAgCzH,UAAhC,EAA4C,CAA5C;MACD,CAFD;IAGD;;IACD,oBAAKhJ,IAAL,4DAAWuL,WAAX;EACD;;EAED5L,uBAAuB,CACrBzE,WADqB,EAErBC,qBAFqB,EAGrBC,mBAHqB,EAIf;IACN,IAAM;MAAErG;IAAF,IAAY,KAAKJ,KAAvB;IAEA,KAAKuS,kBAAL,CACEhM,WADF,EAEEC,qBAFF,EAGEpG,KAAK,CAACiD,OAHR,EAIEoD,mBAJF;IAOA,KAAKE,QAAL,CAAc;MACZJ,WADY;MAEZC,qBAFY;MAGZC;IAHY,CAAd;EAKD;;EAoBD4B,mBAAmB,GAAS;IAAA;;IAC1B,oBAAKgD,IAAL,4DAAWsR,iBAAX;IACA,oBAAKtR,IAAL,4DAAWuR,YAAX;;IAEA,IAAI,KAAK3Q,WAAT,EAAsB;MACpB,KAAK0G,cAAL,GAAsBb,qBAAqB,CAAC,KAAKzJ,mBAAN,CAA3C;IACD;EACF;;EAEDC,oBAAoB,GAAS;IAC3BvK,GAAG,CAACoU,MAAJ,CAAW,sBAAX;IAEA,KAAKlG,WAAL,GAAmB,IAAnB;IAEA,KAAK0G,cAAL,GAAsBb,qBAAqB,CAAC,KAAKzJ,mBAAN,CAA3C;EACD;;EAEDE,kBAAkB,GAAS;IACzBxK,GAAG,CAACoU,MAAJ,CAAW,oBAAX;IAEA,KAAKlG,WAAL,GAAmB,KAAnB;EACD;;EAEDtB,qBAAqB,CAAC0I,KAAD,EAAsB;IACzC,IAAM;MAAEwJ;IAAF,IAAwB,KAAK7c,KAAnC;IACA,IAAM;MAAE4N;IAAF,IAAsB,KAAK5G,KAAjC;IACA6V,iBAAiB,CAACjP,eAAD,EAAkByF,KAAlB,CAAjB;EACD;;EAEDzI,qBAAqB,CAAC+C,SAAD,EAA0B;IAC7C,IAAM;MAAEC;IAAF,IAAsB,KAAK5G,KAAjC;IACA,KAAK2R,eAAL,CAAqBhL,SAArB,EAAgCC,eAAhC;EACD;;EAED/C,uBAAuB,GAAS;IAC9B,KAAKlE,QAAL,CAAc;MACZrB,gBAAgB,EAAE,EADN;MAEZiI,oBAAoB,EAAE;IAFV,CAAd;EAID;;EAEDzC,mBAAmB,GAAS;IAC1B,KAAKnE,QAAL,CAAc;MAAE4G,oBAAoB,EAAE;IAAxB,CAAd;EACD;;EAEDsL,oBAAoB,CAAC/Y,KAAD,EAAuB;IACzC,IAAIhF,YAAY,CAACgiB,UAAb,CAAwBhd,KAAxB,CAAJ,EAAoC;MAClC;IACD;;IAED/B,GAAG,CAAC+B,KAAJ,CAAUA,KAAV;IAEA,IAAM;MAAEid;IAAF,IAAc,KAAK/c,KAAzB;IACA+c,OAAO,CAACjd,KAAD,CAAP;EACD;;EAEDkd,cAAc,GAAS;IAAA;;IACrB,IAAM;MAAE7O;IAAF,IAAuB,KAAKnH,KAAlC;IACA,IAAM6G,gBAAgB,GAAGM,gBAAgB,CAACoL,mBAAjB,EAAzB;IACA,IAAM0D,OAAO,GAAG,CAAC,GAAGpP,gBAAgB,CAACoP,OAAjB,EAAJ,CAAhB;;IACA,KAAK,IAAI9W,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8W,OAAO,CAAC5d,MAA5B,EAAoC8G,CAAC,IAAI,CAAzC,EAA4C;MAC1C,IAAM,CAACkO,UAAD,EAAa6I,WAAb,IAA4BD,OAAO,CAAC9W,CAAD,CAAzC;;MACA,IAAI+W,WAAW,KAAK,CAApB,EAAuB;QACrB/O,gBAAgB,CAACuO,gBAAjB,CAAkCrI,UAAlC;MACD;IACF;;IACD,oBAAKhJ,IAAL,4DAAWuL,WAAX;EACD;;EAEDuG,UAAU,CAACrK,WAAD,EAA4BsK,aAA5B,EAA0D;IAClErf,GAAG,CAAC6a,IAAJ,CAAS,0BAAT,EAAqC9F,WAArC;IAEA,IAAM;MAAE1S;IAAF,IAAY,KAAKJ,KAAvB;IACA,IAAM;MAAEb,KAAK,EAAEke;IAAT,IAA0B,KAAKrW,KAArC;IACA,IAAMiM,WAAW,GAAG,KAAKC,cAAL,CAAoBJ,WAApB,CAApB;IACAlY,aAAa,CAACqY,WAAD,CAAb;IACA,IAAM9T,KAAK,GAAGxE,UAAU,CAAC2iB,mBAAX,CACZD,YADY,EAEZjd,KAAK,CAACiD,OAFM,EAGZ4P,WAHY,EAIZmK,aAJY,CAAd;IAMA,KAAK1L,WAAL,CAAiBvS,KAAjB;EACD;;EAEDuS,WAAW,CAACvS,KAAD,EAAsB;IAAA;;IAC/B,KAAKmS,YAAL,CAAkB,YAAlB;IACA,KAAK3K,QAAL,CAAc;MAAExH;IAAF,CAAd;IACA,qBAAKkM,IAAL,8DAAWuL,WAAX;EACD;;EAED2G,UAAU,CACRtK,WADQ,EAKF;IAAA;;IAAA,IAHNuK,SAGM,uEAHqB7iB,UAAU,CAAC2F,aAAX,CAAyBmd,IAG9C;IAAA,IAFNC,KAEM,uEAFE,KAEF;IAAA,IADNN,aACM,uEADU,KACV;IACNxiB,aAAa,CAACqY,WAAD,CAAb;IACA,IAAM;MAAE7S;IAAF,IAAY,KAAKJ,KAAvB;IACA,IAAMb,KAAK,GAAGxE,UAAU,CAAC4iB,UAAX,CACZnd,KAAK,CAAC+X,IADM,EAEZ/X,KAAK,CAACiD,OAFM,EAGZ4P,WAHY,EAIZuK,SAJY,EAKZE,KALY,EAMZN,aANY,CAAd;IAQA,KAAK9L,YAAL,CAAkB,YAAlB;IACA,KAAK3K,QAAL,CAAc;MAAExH;IAAF,CAAd;IACA,qBAAKkM,IAAL,8DAAWuL,WAAX;EACD;;EAED+G,OAAO,CAAC5e,WAAD,EAAiC;IAAA;;IACtC,KAAKuS,YAAL,CAAkB,cAAlB;IACA,KAAK3K,QAAL,CAAc;MAAE5H;IAAF,CAAd;IACA,qBAAKsM,IAAL,8DAAWuL,WAAX;EACD;;EAEDgH,YAAY,GAAY;IACtB,IAAM;MAAExd;IAAF,IAAY,KAAKJ,KAAvB;IACA,OAAOI,KAAK,CAACwd,YAAb;EACD;;EAEDzR,eAAe,GAAqD;IAAA,IAApD0R,UAAoD,uEAAvC,KAAKlC,0BAAkC;IAClE,IAAI;MAAEta;IAAF,IAAuB,KAAK2F,KAAhC;IACA3F,gBAAgB,GAAG,CAACA,gBAApB;IACA,KAAKsF,QAAL,CAAc;MAAEtF;IAAF,CAAd;;IAEA,IAAIA,gBAAJ,EAAsB;MACpB,IAAIwc,UAAU,IAAI,IAAlB,EAAwB;QACtB,KAAK5C,cAAL,CAAoB4C,UAApB;MACD,CAFD,MAEO;QACL,IAAI/K,WAAW,GAAG,CAAlB;QACA,IAAM;UAAE1S,KAAK,EAALA;QAAF,IAAY,KAAKJ,KAAvB;QACA,IAAM;UAAEyZ;QAAF,IAAkBrZ,OAAxB;;QACA,KAAK,IAAI+F,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsT,WAApB,EAAiCtT,CAAC,IAAI,CAAtC,EAAyC;UACvC,IAAM8M,WAAW,GAAG,KAAKC,cAAL,CAAoB/M,CAApB,CAApB;;UACA,IAAI8M,WAAW,IAAI,IAAnB,EAAyB;YACvB,IAAMvT,QAAM,GAAGU,OAAK,CAACiD,OAAN,CAAc4P,WAAd,CAAf;;YACA,IAAIvT,QAAM,IAAI,IAAV,IAAkB/E,UAAU,CAACqb,UAAX,CAAsBtW,QAAM,CAACmC,IAA7B,CAAtB,EAA0D;cACxDiR,WAAW,GAAG3M,CAAd;cACA;YACD;UACF;QACF;;QACD,KAAK8U,cAAL,CAAoBnI,WAApB;MACD;IACF,CAnBD,MAmBO;MAAA;;MACL,qBAAKzH,IAAL,8DAAW2P,KAAX;IACD;EACF;;EAED8C,sBAAsB,GAAY;IAAA;;IAChC,IAAM;MAAE1d,KAAF;MAASoB;IAAT,IAA6B,KAAKxB,KAAxC;IACA,IAAM+d,iBAAiB,GAAG3d,KAAH,aAAGA,KAAH,6CAAGA,KAAK,CAAE4d,WAAV,uDAAG,mBAAoBD,iBAA9C;;IAEA,IAAIA,iBAAiB,+BAAKxjB,EAAE,CAAC0jB,iBAAR,0DAAK,sBAAsBC,mBAA3B,CAArB,EAAqE;MACnE,OAAO,KAAP;IACD;;IACD,IAAIH,iBAAiB,gCAAKxjB,EAAE,CAAC0jB,iBAAR,2DAAK,uBAAsBE,mBAA3B,CAArB,EAAqE;MACnE,OAAO,IAAP;IACD;;IAED,OAAO3c,eAAP;EACD;;EAED8K,eAAe,GAAS;IACtB,IAAM;MAAEhL;IAAF,IAAoB,KAAK0F,KAA/B;;IACA,IAAI,CAAC,KAAK8W,sBAAL,EAAL,EAAoC;MAClC;IACD;;IAED,IAAMrG,MAAM,GAAG,CAACnW,aAAhB;IACA,KAAKqF,QAAL,CACE;MACErF,aAAa,EAAEmW;IADjB,CADF,EAIE,MAAM;MAAA;;MACJ,IAAIA,MAAM,4BAAI,KAAK1L,cAAT,iDAAI,qBAAqBuK,OAAnC,EAA4C;QAAA;;QAC1C,8BAAKvK,cAAL,gFAAqBuK,OAArB,CAA6B0E,KAA7B;MACD,CAFD,MAEO;QAAA;;QACL,qBAAK3P,IAAL,8DAAW2P,KAAX;MACD;IACF,CAVH;EAYD;;EAEDxO,aAAa,GAAiB;IAAA,IAAhBkM,GAAgB,uEAAV,EAAU;IAC5B,IAAM;MAAE9I;IAAF,IAAqB,KAAK5I,KAAhC;;IACA,IAAI0R,GAAJ,EAAS;MACP;MACA,KAAK/R,QAAL,CAAc;QACZiJ,cAAc,EAAE,IADJ;QAEZC,OAAO,EAAE6I,GAFG;QAGZ5I,YAAY,EAAE;MAHF,CAAd;MAKA;IACD;;IACD,KAAKnJ,QAAL,CAAc;MACZiJ,cAAc,EAAE,CAACA,cADL;MAEZC,OAAO,EAAE,EAFG;MAGZC,YAAY,EAAE;IAHF,CAAd;EAKD;;EAEK5C,aAAa,GAAkB;IAAA;;IAAA;MAAA;;MACnC,IAAM;QAAE9M;MAAF,IAAY,MAAI,CAACJ,KAAvB;;MACA,IAAI,CAAC1G,mBAAmB,CAAC8G,KAAD,CAApB,IAA+B,CAACA,KAAK,CAACqF,UAA1C,EAAsD;QACpD,MAAM,IAAI2Y,KAAJ,CAAU,oCAAV,CAAN;MACD;;MAED,IAAM;QAAE7O;MAAF,IAAyB,MAAI,CAACvI,KAApC;;MACA,IAAIuI,kBAAkB,IAAI,IAA1B,EAAgC;QAC9B,MAAM,IAAI6O,KAAJ,CAAU,0BAAV,CAAN;MACD;;MAED,IAAMC,0BAA0B,gBAAGC,QAAH,uEAAG,UAAUC,aAAb,0DAAG,sBAAyBC,SAAzB,CAAmCC,QAAnC,CACjC,uBADiC,CAAnC;;MAGA,IAAIJ,0BAA0B,IAAI,IAA9B,IAAsCA,0BAA1C,EAAsE;QAAA;;QACpE,IACEC,QAAQ,CAACC,aAAT,IAA0B,IAA1B,IACAD,QAAQ,CAACC,aAAT,CAAuBC,SAAvB,CAAiCC,QAAjC,CAA0C,OAA1C,CAFF,EAGE;UACA,MAAM,IAAI1jB,eAAJ,CAAoB,0BAApB,CAAN;QACD,CANmE,CAQpE;;;QACA,qBAAI,CAACsQ,IAAL,4DAAW2P,KAAX;MACD;;MAED,IAAM0D,qBAAqB,GAAG,MAAI,CAAClT,OAAL,CAC3BuM,GAD2B,CACvB3X,KAAK,CAAC8M,aAAN,EADuB,EAE3ByR,IAF2B,CAEtB,MAAM;QACV,MAAI,CAAChY,QAAL,CAAc;UAAE6I,gBAAgB,EAAE,IAApB;UAA0BD,kBAAkB,EAAE;QAA9C,CAAd;MACD,CAJ2B,EAK3B1C,KAL2B,CAKrBhN,GAAG,IAAI;QACZ,IAAI,CAAC/E,YAAY,CAACgiB,UAAb,CAAwBjd,GAAxB,CAAL,EAAmC;UACjC,MAAI,CAAC8G,QAAL,CAAc;YAAE6I,gBAAgB,EAAE3P,GAApB;YAAyB0P,kBAAkB,EAAE;UAA7C,CAAd;QACD;MACF,CAT2B,CAA9B;;MAUA,MAAI,CAAC5I,QAAL,CAAc;QAAE4I,kBAAkB,EAAEmP;MAAtB,CAAd;;MACA,OAAOA,qBAAP;IArCmC;EAsCpC;;EAEK9R,cAAc,GAAkB;IAAA;;IAAA;MACpC,IAAM;QAAE2C;MAAF,IAAyB,MAAI,CAACvI,KAApC;;MACA,IAAIuI,kBAAkB,IAAI,IAA1B,EAAgC;QAC9B,MAAM,IAAI6O,KAAJ,CAAU,kCAAV,CAAN;MACD;;MAED,MAAI,CAACzX,QAAL,CAAc;QACZ4I,kBAAkB,EAAE,IADR;QAEZC,gBAAgB,EAAE,IAFN;QAGZ7C,cAAc,EAAE,IAAIyB,GAAJ,EAHJ;QAIZnB,iBAAiB,EAAE,IAAImB,GAAJ;MAJP,CAAd;IANoC;EAYrC;EAED;AACF;AACA;AACA;;;EACEwQ,YAAY,CAAClf,MAAD,EAAuB;IACjC,IAAM;MAAEmf;IAAF,IAAuB,KAAK7e,KAAlC;IACA6e,gBAAgB,CAACnf,MAAD,CAAhB;EACD;EAED;AACF;AACA;;;EACEof,UAAU,CAAChM,WAAD,EAA0BC,QAA1B,EAAsD;IAC9D,IAAM;MAAE3S;IAAF,IAAY,KAAKJ,KAAvB;IACA,IAAM;MAAEqD,OAAF;MAAW0b;IAAX,IAA8B3e,KAApC;IACA,IAAM4e,OAAmB,GAAG,EAA5B;;IAH8D,2BAIrD7Y,CAJqD;MAK5D,IAAMzG,MAAM,GAAG2D,OAAO,CAAC8C,CAAD,CAAtB;MACA,IAAM;QAAEnC,IAAF;QAAQnC;MAAR,IAAiBnC,MAAvB;MACA,IAAM2T,KAAK,GAAGjT,KAAK,CAACkT,YAAN,CAAmBnN,CAAnB,EAAsB4M,QAAtB,CAAd;MACA,IAAMpT,IAAI,GAAGS,KAAK,CAACyT,WAAN,CAAkB1N,CAAlB,EAAqB4M,QAArB,CAAb;MACA,IAAMkM,YAAY,GAChB1lB,qBAAqB,CAAC6G,KAAD,CAArB,IAAgCA,KAAK,CAAC8e,eAAN,CAAsBnM,QAAtB,CADlC;MAEA,IAAMoM,SAAS,GAAGJ,cAAc,CAAC/O,IAAf,CAAoBC,CAAC,IAAIA,CAAC,CAACjM,IAAF,KAAWA,IAApC,KAA6C,IAA/D;MACAgb,OAAO,CAAChb,IAAD,CAAP,GAAgB;QAAEqP,KAAF;QAAS1T,IAAT;QAAekC,IAAf;QAAqBsd,SAArB;QAAgCF;MAAhC,CAAhB;IAZ4D;;IAI9D,KAAK,IAAI9Y,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG9C,OAAO,CAAChE,MAA5B,EAAoC8G,CAAC,IAAI,CAAzC,EAA4C;MAAA,MAAnCA,CAAmC;IAS3C;;IACD,IAAM;MAAEiZ;IAAF,IAAqB,KAAKpf,KAAhC;IACAof,cAAc,CAACrM,QAAD,EAAWiM,OAAX,CAAd;EACD;;EAEDxe,0BAA0B,CACxBd,MADwB,EAExBmE,MAFwB,EAGxBwR,OAHwB,EAIlB;IACN,IAAM;MAAEjV;IAAF,IAAY,KAAKJ,KAAvB;IACA,IAAMqf,KAAK,GAAGjf,KAAK,CAACwV,oBAAN,CAA2BlW,MAAM,CAACsE,IAAlC,CAAd;IACApJ,aAAa,CAACykB,KAAD,CAAb;IACA,KAAKjK,iBAAL,CAAuBiK,KAAvB,EAA8Bxb,MAA9B,EAAsCwR,OAAtC;EACD;;EAED5U,8BAA8B,CAC5Bf,MAD4B,EAE5B8d,SAF4B,EAItB;IAAA;;IAAA,IADNJ,aACM,uEADU,KACV;IACN,IAAM;MAAEhd;IAAF,IAAY,KAAKJ,KAAvB;IACA,IAAM8S,WAAW,GAAG1S,KAAK,CAACwV,oBAAN,CAA2BlW,MAAM,CAACsE,IAAlC,CAApB;IACApJ,aAAa,CAACkY,WAAD,CAAb;IACA,IAAMwM,OAAO,GAAG3kB,UAAU,CAAC4kB,gBAAX,CAA4Bnf,KAAK,CAAC+X,IAAlC,EAAwCrF,WAAxC,CAAhB;IACA,IAAI0M,OAAO,GAAG,IAAd;;IAEA,IAAIF,OAAO,IAAI,IAAX,IAAmBA,OAAO,CAAC9B,SAAR,KAAsBA,SAA7C,EAAwD;MACtD,IAAIA,SAAS,KAAK7iB,UAAU,CAAC2F,aAAX,CAAyBmf,UAA3C,EAAuD;QACrDD,OAAO,GAAG9f,MAAM,CAACyY,IAAP,GAAcC,IAAd,EAAV;MACD,CAFD,MAEO;QACLoH,OAAO,GAAG9f,MAAM,CAACyY,IAAP,GAAcuH,GAAd,EAAV;MACD;IACF;;IAED,IAAMvgB,KAAK,GAAGxE,UAAU,CAACglB,gBAAX,CACZvf,KAAK,CAAC+X,IADM,EAEZrF,WAFY,EAGZ0M,OAHY,EAIZpC,aAJY,CAAd;IAMArf,GAAG,CAAC6a,IAAJ,CAAS,qBAAT,EAAgCzZ,KAAhC;IAEA,KAAKmS,YAAL,CAAkB,YAAlB;IACA,KAAK3K,QAAL,CAAc;MAAExH;IAAF,CAAd;IAEA,qBAAKkM,IAAL,8DAAWuL,WAAX;EACD;;EAEDlW,wBAAwB,GAAS;IAAA;;IAC/B,qBAAK2K,IAAL,8DAAW2P,KAAX;EACD;;EAED/a,wBAAwB,CAACP,MAAD,EAA+B;IACrD,KAAKiH,QAAL,CAAc;MAAE8H,mBAAmB,EAAE/O;IAAvB,CAAd;EACD;;EAEDqI,mBAAmB,GAAS;IAC1B,KAAKpB,QAAL,CAAc;MAAEiJ,cAAc,EAAE;IAAlB,CAAd;EACD;;EAED5H,mBAAmB,GAAS;IAC1B,KAAKrB,QAAL,CAAc;MAAEiJ,cAAc,EAAE;IAAlB,CAAd;EACD;;EAED3H,wBAAwB,CAAC6K,WAAD,EAA4B;IAAA;;IAClD,IAAM;MAAExE,sBAAF;MAA0BjN;IAA1B,IAA+C,KAAK2F,KAA1D;;IACA,IACE3F,gBAAgB,IAChBiN,sBAAsB,KAAKwE,WAD3B,IAEA,8BAAK5G,cAAL,8EAAqBoK,OAArB,MAAiC,IAHnC,EAIE;MAAA;;MACA,8BAAKpK,cAAL,gFAAqBoK,OAArB,CAA6B0E,KAA7B;MACA,KAAKrU,QAAL,CAAc;QAAE8H,mBAAmB,EAAE;MAAvB,CAAd;IACD,CAPD,MAOO;MACL,KAAK9H,QAAL,CAAc;QACZ2H,sBAAsB,EAAE,IADZ;QAEZG,mBAAmB,EAAE;MAFT,CAAd;IAID;EACF;;EAED3F,YAAY,GAAS;IACnB,KAAKyR,QAAL;EACD,CArnEmE,CAunEpE;;;EACA/R,iBAAiB,GAAS,CACxB;EACD;;EAEDC,iBAAiB,CAACkI,QAAD,EAAuC;IACtD,IAAM;MAAEvQ,KAAF;MAASwf;IAAT,IAA2B,KAAK5f,KAAtC;IACA4f,aAAa,CAACjP,QAAD,EAAWvQ,KAAX,CAAb;EACD;;EAEDsI,eAAe,CAAC5I,KAAD,EAAsB;IACnC/B,GAAG,CAAC8hB,IAAJ,CAAS,YAAT,EAAuB/f,KAAvB;IACA,KAAK6G,QAAL,CAAc;MACZ8I,YAAY,eAAE;QAAK,SAAS,EAAC;MAAf,aAAmC3P,KAAnC;IADF,CAAd;EAGD;;EAED6I,qBAAqB,CAAC0K,KAAD,EAAsB;IACzC,KAAK/B,YAAL,CAAkB,cAAlB,EAAkC,IAAlC;IAEA,KAAK3K,QAAL,CAAc,UAA8C;MAAA,IAA7C;QAAE2H,sBAAF;QAA0BxP;MAA1B,CAA6C;MAC1D,IAAM2V,eAAe,GAAG,IAAIrG,GAAJ,CAAQtP,YAAR,CAAxB;;MACA,IAAIwP,sBAAsB,IAAI,IAA9B,EAAoC;QAClC,IAAM+F,UAAU,GAAG,KAAKnB,cAAL,CAAoB5E,sBAApB,CAAnB;QACA1T,aAAa,CAACyZ,UAAD,CAAb;QACA,KAAKU,gBAAL,CAAsBV,UAAtB,EAAkChB,KAAlC,EAAyCoB,eAAzC;MACD;;MACD,OAAO;QAAE3V,YAAY,EAAE2V;MAAhB,CAAP;IACD,CARD;EASD;;EAED7L,mBAAmB,GAAiD;IAAA,IAAhDkX,YAAgD,uEAAjC,IAAiC;IAAA,IAA3BC,YAA2B,uEAAZ,IAAY;;IAClE,IAAID,YAAJ,EAAkB;MAAA;;MAChB,qBAAKzU,IAAL,8DAAW2P,KAAX;IACD;;IACD,IAAI+E,YAAJ,EAAkB;MAChB,KAAKpZ,QAAL,CAAc;QAAE2H,sBAAsB,EAAE;MAA1B,CAAd;IACD;EACF;;EAEDzF,kBAAkB,CAACmX,QAAD,EAA0B;IAC1C,IAAM;MAAE1R;IAAF,IAA6B,KAAKtH,KAAxC;IACApM,aAAa,CAAC0T,sBAAD,CAAb;;IACA,IAAI0R,QAAJ,EAAc;MACZ,KAAK/E,cAAL,CAAoB3M,sBAAsB,GAAG,CAA7C;IACD,CAFD,MAEO;MACL,KAAK2M,cAAL,CAAoB3M,sBAAsB,GAAG,CAA7C;IACD;EACF;;EAED9E,qBAAqB,CACnB6K,UADmB,EAEnB4L,cAFmB,EAGb;IACN,IAAM;MAAE7f;IAAF,IAAY,KAAKJ,KAAvB;IACA,IAAMN,MAAM,GAAGU,KAAK,CAACiD,OAAN,CAAcgR,UAAd,CAAf;IACA,IAAM;MAAE/G,qBAAqB,EAAE4S;IAAzB,IAAuD,KAAKlZ,KAAlE;IACA,IAAMsG,qBAAqB,GAAG,IAAIc,GAAJ,CAAQ8R,yBAAR,CAA9B;;IAEA,IAAID,cAAc,IAAI,IAAtB,EAA4B;MAC1B,IAAME,cAAc,GAAGxlB,UAAU,CAACylB,iBAAX,CAA6B1gB,MAAM,CAACmC,IAApC,CAAvB;MACAjH,aAAa,CAACulB,cAAD,CAAb;MACA,IAAME,oBAAoB,GAAG5lB,SAAS,CAAC6lB,wBAAV,CAC3BH,cAD2B,EAE3BzgB,MAAM,CAACsE,IAFoB,EAG3Bic,cAH2B,CAA7B;MAMA3S,qBAAqB,CAAC4H,GAAtB,CAA0BxV,MAAM,CAACsE,IAAjC,EAAuCqc,oBAAvC;IACD,CAVD,MAUO;MACL/S,qBAAqB,CAACwH,MAAtB,CAA6BpV,MAAM,CAACsE,IAApC;IACD;;IAED,KAAKuT,eAAL,CAAqB;MAAEjK;IAAF,CAArB;EACD;;EAEDvE,UAAU,CAACmQ,CAAD,EAA+C;IACvDA,CAAC,CAACqH,eAAF;IACA,KAAK5Z,QAAL,CAAc;MAAEvB,WAAW,EAAE;IAAf,CAAd;EACD;;EAED4D,eAAe,GAAS;IACtB,KAAKrC,QAAL,CAAc;MAAEvB,WAAW,EAAE,KAAf;MAAsBiK,WAAW,EAAE;IAAnC,CAAd;EACD;;EAEDnG,cAAc,GAAS;IACrB,KAAKvC,QAAL,CAAc,UAAqB;MAAA,IAApB;QAAE0I;MAAF,CAAoB;MACjC,IAAMmR,UAAU,GAAG,CAAC,GAAGnR,WAAJ,CAAnB;MACAmR,UAAU,CAACC,GAAX;MACA,OAAO;QAAEpR,WAAW,EAAEmR;MAAf,CAAP;IACD,CAJD;EAKD;;EAEDvX,gBAAgB,CAACyX,MAAD,EAA2B;IACzC,KAAK/Z,QAAL,CAAc;MAAA,IAAC;QAAE0I;MAAF,CAAD;MAAA,OAAsB;QAClCA,WAAW,EAAE,CAAC,GAAGA,WAAJ,EAAiBqR,MAAjB;MADqB,CAAtB;IAAA,CAAd;EAGD;;EAEDvX,mBAAmB,CAACwX,KAAD,EAAqB;IACtC,IAAMC,WAAW,GAAGD,KAApB;IACA5iB,GAAG,CAAC+B,KAAJ,CAAU,iBAAV,EAA6B8gB,WAAW,CAACC,MAAzC;IACA,KAAKvG,WAAL;;IACA,IAAI,KAAKE,WAAL,EAAJ,EAAwB;MACtB,KAAKlJ,YAAL,CAAkB,yBAAlB,EAA6C,IAA7C;MACA,KAAKiJ,QAAL;IACD,CAHD,MAGO;MACLxc,GAAG,CAAC+B,KAAJ,CAAU,qCAAV;MACA,IAAM;QAAEid;MAAF,IAAc,KAAK/c,KAAzB;MACA+c,OAAO,CAAC,IAAIqB,KAAJ,mCAAqCwC,WAAW,CAACC,MAAjD,EAAD,CAAP;IACD;EACF;;EAEDvX,YAAY,GAAS;IAAA;;IACnB,KAAKgR,WAAL;IACAvc,GAAG,CAACoU,MAAJ,CAAW,uBAAX;IAEA,IAAM;MACJxT,eADI;MAEJC,mBAFI;MAGJC,aAHI;MAIJC,YAJI;MAKJC,WALI;MAMJC,YANI;MAOJC,YAPI;MAQJC,qBARI;MASJC;IATI,IAUF,KAAK6H,KAVT;IAYA,IAAMpC,MAAM,GAAG;MACbjG,eADa;MAEbC,mBAFa;MAGbC,aAHa;MAIbC,YAJa;MAKbC,WALa;MAMbC,YANa;MAObC,YAPa;MAQbC,qBARa;MASbC;IATa,CAAf;;IAYA,IAAI,CAACT,aAAa,CAACkG,MAAD,CAAlB,EAA4B;MAC1B,KAAK2G,gBAAL,GAAwB3G,MAAxB;IACD,CAFD,MAEO;MACL,KAAK2G,gBAAL,GAAwB,IAAxB;IACD;;IAED,qBAAKF,IAAL,8DAAWuL,WAAX;EACD;;EAEDrN,iBAAiB,CAACgF,OAAD,EAA8B;IAAA;;IAC7C,IAAM;MAAEnO;IAAF,IAAY,KAAKJ,KAAvB;IACA,IAAM;MAAE8gB,eAAe,GAAG;IAApB,wCAA0B,KAAKzV,IAA/B,iDAA0B,aAAWrE,KAArC,+DAA8C,EAApD;IACA,IAAIsI,eAAe,GAAG,CAAtB;;IACA,IAAIhW,mBAAmB,CAAC8G,KAAD,CAAnB,IAA8BA,KAAK,CAACqF,UAAxC,EAAoD;MAClD7K,aAAa,CAAC2T,OAAD,CAAb;MACA,IAAM;QAAEwS;MAAF,IAAqBxS,OAA3B,CAFkD,CAIlD;MACA;;MACA,IAAMyS,iBAAiB,GAAG5gB,KAAK,CAACsZ,QAAN,GAAiBtZ,KAAK,CAAC+T,sBAAjD;;MACA,IAAI2M,eAAe,KAAKE,iBAAiB,GAAG,CAA5C,EAA+C;QAC7C;QACA1R,eAAe,GAAGlP,KAAK,CAACkP,eAAN,GAAwB,CAA1C;MACD,CAHD,MAGO,IAAIwR,eAAe,KAAKE,iBAAiB,GAAG,CAA5C,EAA+C;QACpD;QACA1R,eAAe,GAAGlP,KAAK,CAACkP,eAAxB;MACD,CAHM,MAGA;QACL;QACAA,eAAe,GAAG2C,IAAI,CAAC9R,GAAL,CAChB,CADgB,EAEhB4gB,cAAc,IACX3gB,KAAK,CAACsZ,QAAN,GAAiBtZ,KAAK,CAACkP,eADZ,CAAd,GAEElP,KAAK,CAAC8T,mBAFR,GAGE9T,KAAK,CAAC+T,sBAHR,GAIE,CANc,CAAlB;MAQD;IACF;;IAED,KAAKxN,QAAL,CAAc;MAAE4H,OAAF;MAAWe;IAAX,CAAd;EACD;;EAEDlG,sBAAsB,CAACuF,cAAD,EAAqC;IACzD/T,aAAa,CAAC+T,cAAD,CAAb;IACA,IAAM;MAAEsS;IAAF,IAAyB,KAAKjhB,KAApC;IACA,IAAM;MAAE4O;IAAF,IAAoB,KAAK5H,KAA/B;IACA,KAAKL,QAAL,CAAc;MAAEgI;IAAF,CAAd;;IACA,IAAIC,aAAa,IAAI,IAArB,EAA2B;MACzB,KAAKjI,QAAL,CAAc;QAAEiI,aAAa,EAAE;MAAjB,CAAd;IACD;;IACDqS,kBAAkB,CAACtS,cAAD,CAAlB;EACD;;EAEDtF,yBAAyB,CACvBvD,YADuB,EAGjB;IAAA,IADNob,eACM,uEADsC,MAAM,IAC5C;IACN,KAAKva,QAAL,CAAc;MAAEb;IAAF,CAAd,EAAgCob,eAAhC;EACD;;EAEDpZ,gBAAgB,CAACqZ,OAAD,EAAyB;IACvC;IACA,IAAIA,OAAO,IAAI,IAAf,EAAqB;MACnBA,OAAO,CAACC,UAAR;IACD;;IAED,KAAKD,OAAL,GAAeA,OAAf;EACD;;EAEDxX,8BAA8B,CAC5B0D,kBAD4B,EAEtB;IACNtP,GAAG,CAACyG,KAAJ,CAAU,6BAAV,EAAyC6I,kBAAzC;IACA,KAAK1G,QAAL,CAAc;MAAE0G;IAAF,CAAd;EACD;;EAED5D,6BAA6B,GAAS;IACpC1L,GAAG,CAACyG,KAAJ,CAAU,+BAAV;IACA,IAAM;MAAE6K,WAAF;MAAehC;IAAf,IAAsC,KAAKrG,KAAjD;IACA,KAAKL,QAAL,CAAc;MACZ0I,WAAW,EAAE,CACX,GAAGA,WADQ,EAEX;QACExN,IAAI,EAAE/E,UAAU,CAACukB,2BADnB;QAEEtf,KAAK;MAFP,CAFW,CADD;MAQZiN,0BAA0B,EAAE3B,kBAAkB,CAAChO,MARnC;MASZ;MACAuH,wBAAwB,EAAEnC;IAVd,CAAd;EAYD;;EAEDiF,2BAA2B,CAAC2V,KAAD,EAAsB;IAC/CthB,GAAG,CAACyG,KAAJ,CAAU,yBAAV,EAAqC6a,KAArC;IACA,IAAM;MAAEhQ,WAAF;MAAehC;IAAf,IAAsC,KAAKrG,KAAjD;IACA,KAAKL,QAAL,CAAc;MACZ0I,WAAW,EAAE,CACX,GAAGA,WADQ,EAEX;QACExN,IAAI,EAAE/E,UAAU,CAACukB,2BADnB;QAEEtf,KAAK;MAFP,CAFW,CADD;MAQZiN,0BAA0B,EAAEqQ,KARhB;MASZ;MACAzY,wBAAwB,oBAAOyG,kBAAkB,CAACgS,KAAD,CAAzB;IAVZ,CAAd;EAYD,CAh3EmE,CAk3EpE;;;EAQAzV,iCAAiC,CAAChF,MAAD,EAAsC;IACrE7G,GAAG,CAACyG,KAAJ,CAAU,iCAAV,EAA6CI,MAA7C;IACA,KAAK+B,QAAL,CACEK,KAAK,IAAI;MACP,IAAIA,KAAK,CAACgI,0BAAN,KAAqC,IAAzC,EAA+C;QAC7CjR,GAAG,CAACyG,KAAJ,CAAU,sBAAV;QACA,OAAO,IAAP;MACD;;MACD,IAAM6I,kBAAkB,GAAG,CAAC,GAAGrG,KAAK,CAACqG,kBAAV,CAA3B;MACAA,kBAAkB,CAACrG,KAAK,CAACgI,0BAAP,CAAlB,GAAuDpK,MAAvD;MACA,OAAO;QAAEyI;MAAF,CAAP;IACD,CATH,EAUE,MAAM;MACJ,KAAKnE,cAAL;IACD,CAZH;EAcD;;EAEDW,mCAAmC,GAAS;IAC1C,KAAKX,cAAL,GAD0C,CAE1C;IACA;;IACA,KAAKvC,QAAL,CAAc;MAAEqI,0BAA0B,EAAE;IAA9B,CAAd;EACD;;EAEDlF,yBAAyB,CAACjL,aAAD,EAAgC;IACvDd,GAAG,CAAC6a,IAAJ,+BAAuC/Z,aAAvC;IAEA,IAAM;MAAEuB;IAAF,IAAY,KAAKJ,KAAvB;IACA,IAAM;MACJ8F,YADI;MAEJ3G,KAFI;MAGJL,YAHI;MAIJH,eAJI;MAKJO;IALI,IAMF,KAAK8H,KANT;IAQA,IAAM;MAAE3D;IAAF,IAAcjD,KAApB;IACA,IAAMkhB,gBAAgB,GAAGlhB,KAAK,CAACvB,aAAN,CAAoBqF,GAApB,CACvBqd,YAAY,cAAOA,YAAP,CADW,CAAzB;IAIA,IAAMC,kBAAkB,GAAGrkB,aAAa,CAACskB,2BAAd,CACzBH,gBADyB,EAEzBziB,aAFyB,CAA3B;;IAIA,IAAI2iB,kBAAkB,CAACniB,MAAnB,GAA4B,CAAhC,EAAmC;MACjC,IAAMqiB,QAAQ,GAAGvkB,aAAa,CAACwkB,oBAAd,CACfxiB,KADe,EAEfqiB,kBAFe,CAAjB;MAIA,IAAM/M,eAAe,GAAGtX,aAAa,CAACykB,sBAAd,CACtBve,OADsB,EAEtBvE,YAFsB,EAGtB0iB,kBAHsB,CAAxB;MAKA,IAAMhN,kBAAkB,GAAGrX,aAAa,CAACykB,sBAAd,CACzBve,OADyB,EAEzB1E,eAFyB,EAGzB6iB,kBAHyB,CAA3B;MAKA,IAAMtF,eAAe,GAAG/e,aAAa,CAAC0kB,4BAAd,CACtBxe,OADsB,EAEtByC,YAFsB,EAGtB0b,kBAHsB,CAAxB;MAKA,IAAMM,wBAAwB,GAAG3kB,aAAa,CAAC4kB,sCAAd,CAC/B7iB,qBAD+B,EAE/BsiB,kBAF+B,CAAjC;;MAIA,IAAIE,QAAQ,CAACriB,MAAT,KAAoBF,KAAK,CAACE,MAA9B,EAAsC;QACpCtB,GAAG,CAACyG,KAAJ,CAAU,+CAAV;QACA,KAAKmC,QAAL,CAAc;UAAExH,KAAK,EAAEuiB;QAAT,CAAd;MACD;;MACD,IACEjN,eAAe,CAACrV,IAAhB,KAAyBN,YAAY,CAACM,IAAtC,IACAoV,kBAAkB,CAACpV,IAAnB,KAA4BT,eAAe,CAACS,IAF9C,EAGE;QACArB,GAAG,CAACyG,KAAJ;QACA,KAAKmC,QAAL,CAAc;UACZ7H,YAAY,EAAE2V,eADF;UAEZ9V,eAAe,EAAE6V;QAFL,CAAd;MAID;;MACD,IAAI,CAACjc,SAAS,CAACuN,YAAD,EAAeoW,eAAf,CAAd,EAA+C;QAC7Cne,GAAG,CAACyG,KAAJ,oDAEE0X,eAFF;QAIA,KAAKvV,QAAL,CAAc;UAAEb,YAAY,EAAEoW;QAAhB,CAAd;MACD;;MACD,IAAI,CAAC3jB,SAAS,CAAC2G,qBAAD,EAAwB4iB,wBAAxB,CAAd,EAAiE;QAC/D/jB,GAAG,CAACyG,KAAJ,6DAEE0X,eAFF;QAIA,KAAKvV,QAAL,CAAc;UAAEzH,qBAAqB,EAAE4iB;QAAzB,CAAd;MACD;IACF;;IAED,KAAKnb,QAAL,CAAc;MAAE9H;IAAF,CAAd;IACA,KAAKyS,YAAL,CAAkB,4BAAlB;EACD;;EAEDvH,0BAA0B,GAAS;IACjChM,GAAG,CAACyG,KAAJ,CAAU,wBAAV;IACA,IAAM;MAAE0K;IAAF,IAAc,KAAKlI,KAAzB;;IACA,IAAIkI,OAAJ,EAAa;MAAA;;MACX,KAAKoL,WAAL;MACA,qBAAKjP,IAAL,8DAAWuL,WAAX;IACD,CAHD,MAGO;MACL,KAAKtG,SAAL;IACD;EACF;;EAEDpG,0BAA0B,GAAkB;IAC1C,OAAO,KAAKgD,aAAL,EAAP;EACD;;EAED/C,2BAA2B,GAAkB;IAC3C,OAAO,KAAKyC,cAAL,EAAP;EACD;;EAED3C,wBAAwB,GAAS;IAAA;;IAC/BlM,GAAG,CAACyG,KAAJ,CAAU,sBAAV;IACA,IAAM;MAAEpE;IAAF,IAAY,KAAKJ,KAAvB;IACA,IAAM;MAAE2M,cAAF;MAAkBM;IAAlB,IAAwC7M,KAA9C;IACA,KAAKuG,QAAL,CAAc;MACZgG,cADY;MAEZM,iBAFY;MAGZuC,gBAAgB,EAAE;IAHN,CAAd;IAKA,qBAAKnE,IAAL,8DAAWuL,WAAX;EACD;EAED;AACF;AACA;AACA;;;EACEzO,wBAAwB,CAACvJ,mBAAD,EAAiD;IACvEb,GAAG,CAACyG,KAAJ,CAAU,0BAAV,EAAsC5F,mBAAtC;IAEA,KAAK0S,YAAL,uBACiB1S,mBAAmB,CAACL,YAApB,CACZ2F,GADY,CACRJ,CAAC,IAAIA,CAAC,CAACN,SADC,EAEZJ,IAFY,CAEP,IAFO,CADjB;IAKA,KAAKuD,QAAL,CAAc;MAAE/H;IAAF,CAAd;EACD;EAED;AACF;AACA;AACA;;;EACEsJ,uBAAuB,CAAC8Z,WAAD,EAAiC;IACtDjkB,GAAG,CAACyG,KAAJ,CAAU,yBAAV,EAAqCwd,WAArC;IAEA,KAAK1Q,YAAL,uBAAiC0Q,WAAW,CAACxe,SAA7C;IACA,KAAKmD,QAAL,CAAc;MAAA,IAAC;QAAE/H;MAAF,CAAD;MAAA,OAA8B;QAC1CwQ,mBAAmB,EAAE4S,WADqB;QAE1CpjB,mBAAmB,kCACdA,mBADc;UAEjBL,YAAY,EAAEK,mBAAmB,CAACL,YAApB,CAAiC2F,GAAjC,CAAqCJ,CAAC,IAClDA,CAAC,CAACN,SAAF,KAAgBwe,WAAW,CAACxe,SAA5B,GAAwCwe,WAAxC,GAAsDle,CAD1C;QAFG;MAFuB,CAA9B;IAAA,CAAd;EASD;EAED;AACF;AACA;AACA;;;EACEsE,qBAAqB,CAAC4Z,WAAD,EAAiC;IACpDjkB,GAAG,CAACyG,KAAJ,CAAU,uBAAV,EAAmCwd,WAAnC;IAEA,IAAM;MAAE3S;IAAF,IAAkB,KAAKrI,KAA7B;IAEA,KAAKL,QAAL,CAAc;MACZ0I,WAAW,EAAE,CACX,GAAGA,WADQ,EAEX;QACExN,IAAI,EAAE/E,UAAU,CAACmlB,gBADnB;QAEElgB,KAAK,4BAAqBigB,WAAW,CAACxe,SAAjC;MAFP,CAFW,CADD;MAQZ4L,mBAAmB,EAAE4S;IART,CAAd;EAUD;;EAED/W,kBAAkB,CAACjM,YAAD,EAAqC;IAAA;;IACrDjB,GAAG,CAAC6a,IAAJ,CAAS,eAAT,EAA0B5Z,YAA1B;IAEA,KAAKkjB,kBAAL;IACA,KAAKlF,cAAL;IACA,KAAKrH,eAAL;IAEA,KAAKrE,YAAL,wDACyBtS,YADzB,aACyBA,YADzB,iDACyBA,YAAY,CAAEqE,OADvC,2DACyB,uBAAuBD,IAAvB,CAA4B,IAA5B,CADzB,yEAC8D,EAD9D,UAPqD,CAWrD;IACA;IACA;;IACA,KAAKuD,QAAL,CAAc;MACZ3H,YADY;MAEZ8G,YAAY,EAAE,EAFF;MAGZ3G,KAAK,EAAE,EAHK;MAIZJ,WAAW,EAAEpE,UAAU,CAAC2E,YAAX,CAAwBC,IAJzB;MAKZL,qBAAqB,EAAE;IALX,CAAd;EAOD;;EAED8K,2BAA2B,CAACmY,WAAD,EAAkC;IAC3DpkB,GAAG,CAACyG,KAAJ,CAAU,uBAAV,EAAmC2d,WAAnC;IAEA,KAAKD,kBAAL;IAEA,KAAKlF,cAAL;IACA,KAAKrH,eAAL;IAEA,KAAKrE,YAAL,wCAEI6Q,WAAW,CAAC9iB,MAAZ,GAAqB,CAArB,GAAyB8iB,WAAW,CAAC/e,IAAZ,CAAiB,IAAjB,CAAzB,GAAkD,EAFtD;IAMA,KAAKuD,QAAL,CAAc;MACZzH,qBAAqB,EAAEijB,WADX;MAEZrc,YAAY,EAAE,EAFF;MAGZ3G,KAAK,EAAE,EAHK;MAIZJ,WAAW,EAAEpE,UAAU,CAAC2E,YAAX,CAAwBC;IAJzB,CAAd;EAMD;;EAEDgL,wBAAwB,GAAS;IAC/B,IAAM;MAAEhJ;IAAF,IAAqB,KAAKvB,KAAhC;;IACA,IAAIuB,cAAJ,EAAoB;MAClB,KAAKoF,QAAL,CAAc;QACZsI,kBAAkB,EAAE,IADR;QAEZpI,qBAAqB,EAAE,CAFX;QAGZC,0BAA0B,EAAE,IAHhB;QAIZC,mBAAmB,EAAE/J,gBAAgB,CAACiK,eAAjB,CAAiCmb;MAJ1C,CAAd;IAMD,CAPD,MAOO;MACLrkB,GAAG,CAAC+B,KAAJ,CACE,iFADF;IAGD;EACF;;EAEDwK,mBAAmB,CACjB+X,QADiB,EAEjBC,WAFiB,EAGjBC,iBAHiB,EAIjBC,UAJiB,EAKX;IACN,IAAM;MAAEjhB;IAAF,IAAqB,KAAKvB,KAAhC;;IACA,IAAIuB,cAAJ,EAAoB;MAClBxD,GAAG,CAAC6a,IAAJ,CACE,yBADF,EAEEyJ,QAFF,EAGEC,WAHF,EAIEC,iBAJF,EAKEC,UALF;MAOA,KAAK7b,QAAL,CAAc,MAAM;QAClB,IAAI,KAAKmF,UAAT,EAAqB;UACnB,KAAKA,UAAL,CAAgB2W,aAAhB,CACEJ,QADF,EAEEC,WAFF,EAGEC,iBAHF,EAIEC,UAJF;QAMD;;QACD,OAAO;UACLzb,mBAAmB,EAAE/J,gBAAgB,CAACiK,eAAjB,CAAiCC;QADjD,CAAP;MAGD,CAZD;IAaD,CArBD,MAqBO;MACLnJ,GAAG,CAAC+B,KAAJ,CACE,4EADF;IAGD;EACF;;EAED0K,yBAAyB,GAAS;IAAA;;IAChC,yBAAKsB,UAAL,sEAAiB4W,cAAjB;IACA,KAAK/b,QAAL,CAAc;MAAEsI,kBAAkB,EAAE;IAAtB,CAAd;EACD;;EAoBDvE,uBAAuB,GAAS;IAC9B,KAAK/D,QAAL,CAAc;MACZsI,kBAAkB,EAAE,KADR;MAEZpI,qBAAqB,EAAE,GAFX;MAGZE,mBAAmB,EAAE/J,gBAAgB,CAACiK,eAAjB,CAAiC0b;IAH1C,CAAd;EAKD;;EAEDlY,sBAAsB,GAAS;IAC7B,KAAK9D,QAAL,CAAc;MACZsI,kBAAkB,EAAE,KADR;MAEZpI,qBAAqB,EAAE,CAFX;MAGZE,mBAAmB,EAAE/J,gBAAgB,CAACiK,eAAjB,CAAiC2b;IAH1C,CAAd;EAKD;EAED;AACF;AACA;AACA;;;EACEC,YAAY,CAACzJ,MAAD,EAA4B;IACtC,IAAM;MAAEhZ;IAAF,IAAY,KAAKJ,KAAvB;IACA,KAAKwL,OAAL,CAAauM,GAAb,CAAiB3X,KAAK,CAAC0U,MAAN,CAAasE,MAAb,CAAjB,EAAuCvM,KAAvC,CAA6CqM,CAAC,IAAI;MAChD,IAAI,CAACpe,YAAY,CAACgiB,UAAb,CAAwB5D,CAAxB,CAAL,EAAiC;QAC/Bnb,GAAG,CAAC+B,KAAJ,CAAU,yBAAV,EAAqCsZ,MAArC,EAA6CF,CAA7C;MACD;IACF,CAJD;EAKD;;EAED1H,oBAAoB,GAAS;IAC3B,IAAI,KAAKnG,IAAL,IAAa,IAAjB,EAAuB;MACrB;IACD;;IACD,IAAM;MAAEnG;IAAF,IAAwB,KAAKlF,KAAnC;;IACA,IAAIkF,iBAAJ,EAAuB;MACrB,IAAM;QAAE4d;MAAF,IAA0B,KAAK9iB,KAArC;MACA,KAAKqL,IAAL,CAAU1E,QAAV,CAAmB;QAAEoc,MAAM,EAAED;MAAV,CAAnB;IACD,CAHD,MAGO;MACL,KAAKzX,IAAL,CAAU1E,QAAV,CAAmB;QAAEoc,MAAM,EAAE;MAAV,CAAnB;MACA,KAAKpc,QAAL,CAAc;QAAE1B,iBAAiB,EAAE;MAArB,CAAd;IACD;EACF;;EAEDid,kBAAkB,GAA2B;IAAA,IAA1BtL,WAA0B,uEAAZ,IAAY;;IAC3C,IAAI,CAAC,KAAKvL,IAAV,EAAgB;MACd;IACD;;IAED,KAAKA,IAAL,CAAUuO,mBAAV;IACA,KAAKvO,IAAL,CAAUwO,YAAV,CACE;MAAEsB,IAAI,EAAE,CAAR;MAAWrB,GAAG,EAAE,CAAhB;MAAmBkJ,SAAS,EAAE,CAA9B;MAAiCtH,UAAU,EAAE;IAA7C,CADF,EAEE9E,WAFF;EAID;;EAEDxE,eAAe,GAAS;IACtB,IAAI,CAAC,KAAK/G,IAAV,EAAgB;MACd;IACD;;IACD,IAAM;MAAErE,KAAK,EAAEic;IAAT,IAA2B,IAAjC;IACA,IAAM;MAAEjc,KAAK,EAAEkc;IAAT,IAAuB,KAAK7X,IAAlC;IACA,IAAM;MAAE8X;IAAF,IAAoB,KAAKnjB,KAA/B;IAEAmjB,aAAa,CAACF,aAAD,EAAgBC,SAAhB,CAAb;EACD;;EAEDhY,mBAAmB,GAAS;IAC1B,KAAKvE,QAAL,CAAc;MACZ+I,iBAAiB,EAAE;IADP,CAAd;EAGD;;EAEDvE,qBAAqB,GAAY;IAAA;;IAC/B,IAAM;MAAEoD,OAAF;MAAWQ;IAAX,IAAkC,KAAK/H,KAA7C;IACApM,aAAa,CAAC2T,OAAD,CAAb;IACA3T,aAAa,CAACmU,kBAAD,CAAb;IACA,IAAMqU,QAAQ,yBAAG,KAAK9X,WAAR,uDAAG,mBAAkB4O,qBAAlB,EAAjB;IACA,IAAMmJ,YAAY,GAAG,EAArB;IACAzoB,aAAa,CAACwoB,QAAD,CAAb;IACA,IAAM;MACJE,kBADI;MAEJC,eAFI;MAGJC,mBAHI;MAIJC,KAJI;MAKJC;IALI,IAMFnV,OANJ;IAOA,IAAMoV,OAAO,GAAGJ,eAAe,CAACrS,GAAhB,CAAoBnC,kBAApB,CAAhB;IACA,IAAMmO,WAAW,GAAGsG,mBAAmB,CAACtS,GAApB,CAAwBnC,kBAAxB,CAApB;IAEAnU,aAAa,CAAC+oB,OAAD,CAAb;IACA/oB,aAAa,CAACsiB,WAAD,CAAb;IAEA,IAAM/B,IAAI,GACRiI,QAAQ,CAACjI,IAAT,GACAjgB,KAAK,CAACyoB,OAAO,GAAGzG,WAAW,GAAG,CAAzB,EAA4BmG,YAA5B,EAA0CI,KAAK,GAAGJ,YAAlD,CAFP;IAIA,OAAO;MACLvJ,GAAG,EAAEsJ,QAAQ,CAACtJ,GAAT,GAAe,CAAC4J,oBAAoB,GAAG,CAAxB,IAA6BJ,kBAD5C;MAELnI,IAAI,EACFiI,QAAQ,CAACjI,IAAT,GACAjgB,KAAK,CAACyoB,OAAO,GAAGzG,WAAW,GAAG,CAAzB,EAA4BmG,YAA5B,EAA0CI,KAAK,GAAGJ,YAAlD,CAJF;MAKLO,MAAM,EAAER,QAAQ,CAACtJ,GAAT,GAAe4J,oBAAoB,GAAGJ,kBALzC;MAMLO,KAAK,EACHT,QAAQ,CAACjI,IAAT,GACAjgB,KAAK,CAACyoB,OAAO,GAAGzG,WAAW,GAAG,CAAzB,EAA4BmG,YAA5B,EAA0CI,KAAK,GAAGJ,YAAlD,CADL,GAEA,CATG;MAULI,KAAK,EAAE,CAVF;MAWLxJ,MAAM,EAAEqJ,kBAXH;MAYLQ,CAAC,EAAE3I,IAZE;MAaL4I,CAAC,EAAEX,QAAQ,CAACtJ,GAbP;MAcLkK,MAAM,EAAE,MAAM;QACZ,MAAM,IAAI5F,KAAJ,CAAU,iBAAV,CAAN;MACD;IAhBI,CAAP;EAkBD;;EAqCDhU,oCAAoC,GAAS;IAC3C,IAAM;MAAEyF,OAAO,EAAEoU;IAAX,IAAyB,KAAKjd,KAApC;IACA,KAAKqD,cAAL,CAAoB4Z,SAApB;EACD;;EAED5Z,cAAc,CAAC4Z,SAAD,EAA0B;IACtC,IAAM;MAAE7jB;IAAF,IAAY,KAAKJ,KAAvB;IACA,IAAM;MAAE0Z;IAAF,IAAetZ,KAArB;IACA,KAAKuG,QAAL,CAAc;MAAEkJ,OAAO,EAAEoU;IAAX,CAAd;;IACA,IAAIA,SAAS,KAAK,EAAlB,EAAsB;MACpB,KAAKtd,QAAL,CAAc;QAAEmJ,YAAY,EAAE;MAAhB,CAAd;MACA;IACD;;IACD,IAAMoU,MAAM,GAAGC,QAAQ,CAACF,SAAD,EAAY,EAAZ,CAAvB;;IACA,IAAIC,MAAM,GAAGxK,QAAT,IAAqBwK,MAAM,GAAG,CAACxK,QAAnC,EAA6C;MAC3C,KAAK/S,QAAL,CAAc;QAAEmJ,YAAY,EAAE;MAAhB,CAAd;IACD,CAFD,MAEO,IAAIoU,MAAM,KAAK,CAAf,EAAkB;MAAA;;MACvB,KAAKvd,QAAL,CAAc;QAAEmJ,YAAY,EAAE;MAAhB,CAAd;MACA,qBAAKzE,IAAL,8DAAW+Y,WAAX,CAAuB,CAAvB;IACD,CAHM,MAGA,IAAIF,MAAM,GAAG,CAAb,EAAgB;MAAA;;MACrB,KAAKvd,QAAL,CAAc;QAAEmJ,YAAY,EAAE;MAAhB,CAAd;MACA,qBAAKzE,IAAL,8DAAW+Y,WAAX,CAAuBF,MAAM,GAAGxK,QAAhC;IACD,CAHM,MAGA;MAAA;;MACL,qBAAKrO,IAAL,8DAAW+Y,WAAX,CAAuBF,MAAM,GAAG,CAAhC;MACA,KAAKvd,QAAL,CAAc;QAAEmJ,YAAY,EAAE;MAAhB,CAAd;IACD;EACF;;EAED1E,qCAAqC,CACnCuV,KADmC,EAE7B;IACN,IAAMsD,SAAS,GAAGtD,KAAK,CAAC0D,MAAN,CAAahR,KAA/B;IACA,KAAKhJ,cAAL,CAAoB4Z,SAApB;EACD;;EAEDK,gBAAgB,CACdrI,YADc,EAEd1N,OAFc,EAGdnO,KAHc,EAIH;IACX,IAAM;MACJkjB,kBADI;MAEJI,oBAFI;MAGJH,eAHI;MAIJC,mBAJI;MAKJC;IALI,IAMFlV,OANJ;IAOA,IAAMoV,OAAO,GAAGJ,eAAe,CAACrS,GAAhB,CAAoB+K,YAApB,CAAhB;IACA,IAAMiB,WAAW,GAAGsG,mBAAmB,CAACtS,GAApB,CAAwB+K,YAAxB,CAApB;;IAEA,IAAI0H,OAAO,IAAI,IAAX,IAAmBzG,WAAW,IAAI,IAAtC,EAA4C;MAC1C,OAAO,IAAP;IACD;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;;;IACI,IAAMqH,WAAW,GAAGtS,IAAI,CAAC9R,GAAL,CAAS,CAAT,EAAYwjB,OAAZ,CAApB;IACA,IAAIa,YAAY,GAAGtH,WAAnB;;IACA,IAAIyG,OAAO,GAAGzG,WAAV,GAAwBuG,KAA5B,EAAmC;MACjC;MACAe,YAAY,GAAGf,KAAK,GAAGE,OAAvB;IACD,CAHD,MAGO,IAAIA,OAAO,GAAG,CAAd,EAAiB;MACtB;MACAa,YAAY,GAAGtH,WAAW,GAAGjL,IAAI,CAACwS,GAAL,CAASd,OAAT,CAA7B;IACD;;IAED,IAAMvc,YAA2B,GAAG;MAClCC,QAAQ,EAAE,UADwB;MAElCyS,GAAG,EAAE,CAAC4J,oBAAoB,GAAG,CAAxB,IAA6BJ,kBAFA;MAGlCnI,IAAI,EAAEoJ,WAH4B;MAIlCd,KAAK,EAAEe,YAJ2B;MAKlCvK,MAAM,EAAEqJ,kBAL0B;MAMlChc,aAAa,EAAE;IANmB,CAApC;IASA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;IACI,IAAMod,gBAAiC,GAAG;MACxCC,WAAW,EAAE,CAD2B;MAExCC,YAAY,EAAEtB,kBAF0B;MAGxCpJ,qBAAqB,EAAE,KAAK/O;IAHY,CAA1C;IAMA,IAAM5D,aAA4B,GAAG;MACnCC,SAAS,EAAE,QADwB;MAEnCC,SAAS,EAAE;QACTC,IAAI,EAAE;UACJC,QAAQ,EAAE,CAAC,QAAD,EAAW,KAAX;QADN;MADG;IAFwB,CAArC;IASA,IAAMsL,WAAW,GAAG,KAAKC,cAAL,CAAoB+I,YAApB,CAApB;IACA,IAAIhJ,WAAW,IAAI,IAAnB,EAAyB,OAAO,IAAP;IAEzB,IAAMvT,MAAM,GAAGU,KAAK,CAACiD,OAAN,CAAc4P,WAAd,CAAf;IACA,IAAIvT,MAAM,IAAI,IAAd,EAAoB,OAAO,IAAP;IAEpB,oBACE;MAAK,KAAK,EAAE0H;IAAZ,gBACE,oBAAC,OAAD;MACE,GAAG,EAAE1H,MAAM,CAACsE,IADd;MAEE,OAAO,EAAE,GAFX;MAGE,WAAW,MAHb;MAIE,OAAO,EAAEuD,aAJX;MAKE,GAAG,EAAE,KAAKO,gBALZ;MAME,eAAe,EAAE4c,gBANnB;MAOE,QAAQ,EAAE,MAAM;QACd,KAAK/d,QAAL,CAAc;UAAEoI,kBAAkB,EAAE;QAAtB,CAAd;MACD;IATH,gBAWE,oBAAC,gBAAD;MACE,KAAK,EAAE3O,KADT;MAEE,MAAM,EAAEV,MAFV;MAGE,YAAY,EAAE,MAAM;QAAA;;QAClB,sBAAKyhB,OAAL,gEAAc1J,MAAd;MACD;IALH,EAXF,CADF,CADF;EAuBD;;EAEDoN,MAAM,GAAwB;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;;IAC5B,IAAM;MACJC,QADI;MAEJzf,aAFI;MAGJ0f,iBAHI;MAIJ7f,iBAJI;MAKJ8f,eALI;MAMJC,cANI;MAOJ7kB,KAPI;MAQJ4D,IARI;MASJkhB,uBATI;MAUJrf,kBAVI;MAWJmL,gBAXI;MAYJmU,wBAZI;MAaJ5jB,cAbI;MAcJqe;IAdI,IAeF,KAAK5f,KAfT;IAgBA,IAAM;MACJmO,gBADI;MAEJI,OAFI;MAGJlN,gBAHI;MAIJkM,oBAJI;MAKJnI,WALI;MAMJ8J,OANI;MAOJN,aAPI;MAQJN,sBARI;MASJO,WATI;MAUJ1J,oBAVI;MAWJ2J,mBAXI;MAYJb,WAZI;MAaJC,aAbI;MAcJa,kBAdI;MAeJL,mBAfI;MAgBJD,mBAhBI;MAiBJxJ,iBAjBI;MAkBJnG,YAlBI;MAmBJH,eAnBI;MAoBJgP,SApBI;MAqBJrI,gBArBI;MAsBJkJ,cAtBI;MAuBJZ,eAvBI;MAwBJ3O,YAxBI;MAyBJC,qBAzBI;MA2BJ4G,YA3BI;MA4BJ2H,SA5BI;MA8BJlN,SA9BI;MA+BJ8M,kBA/BI;MAgCJzG,wBAhCI;MAiCJoI,0BAjCI;MAmCJ7P,KAnCI;MAoCJJ,WApCI;MAqCJF,aArCI;MAuCJ8P,cAvCI;MAwCJM,kBAxCI;MAyCJlI,mBAzCI;MA0CJF,qBA1CI;MA2CJC,0BA3CI;MA6CJxF,aA7CI;MA8CJiF,WA9CI;MA+CJC,qBA/CI;MAgDJC,mBAhDI;MAkDJ7H,mBAlDI;MAmDJwQ,mBAnDI;MAoDJpQ,YApDI;MAqDJqQ,WArDI;MAsDJE,kBAtDI;MAuDJC,gBAvDI;MAwDJF,eAxDI;MAyDJrC,iBAzDI;MA0DJN,cA1DI;MA2DJ8C,YA3DI;MA4DJzB,aA5DI;MA6DJ0B,iBA7DI;MA8DJC,YA9DI;MA+DJxI,0BA/DI;MAgEJyI,cAhEI;MAiEJC,OAjEI;MAkEJC;IAlEI,IAmEF,KAAK9I,KAnET;;IAoEA,IAAI,CAACkI,OAAL,EAAc;MACZ,OAAO,IAAP;IACD;;IAED,IAAM1J,KAAK,GAAG,KAAKwO,QAAL,EAAd;IAEA,IAAMnQ,MAAM,GAAG,KAAKuhB,eAAL,CACb/f,aADa,EAEbvG,YAFa,EAGbH,eAHa,EAIb2G,gBAJa,EAKbrG,YALa,CAAf;IAQA,IAAM4O,gBAAgB,GAAGM,gBAAgB,CAACoL,mBAAjB,EAAzB;IACA,IAAM8L,aAAa,GAAG,KAAKC,sBAAL,CACpBrgB,iBADoB,EAEpB5D,gBAFoB,EAGpB6D,iBAHoB,EAIpBC,oBAJoB,EAKpBrG,YALoB,EAMpBH,eANoB,EAOpBQ,KAPoB,EAQpBJ,WARoB,EASpBC,YAToB,EAUpBoG,WAVoB,CAAtB;IAYA,IAAM0U,GAAG,GAAGvL,OAAO,GAAGA,OAAO,CAACuL,GAAX,GAAiB,CAApC;IACA,IAAM8J,MAAM,GAAGrV,OAAO,GAAGA,OAAO,CAACwS,cAAX,GAA4B,CAAlD;IACA,IAAI5F,IAAI,GAAG,IAAX;IACA,IAAI0I,KAAK,GAAG,IAAZ;;IACA,IAAIqB,uBAAJ,EAA6B;MAC3B/J,IAAI,GAAG5M,OAAO,GAAGA,OAAO,CAAC4M,IAAX,GAAkB,CAAhC;MACA0I,KAAK,GAAGtV,OAAO,GAAGA,OAAO,CAACsV,KAAX,GAAmB,CAAlC;IACD;;IACD,IAAM0B,SAAS,GACbhX,OAAO,IAAI,IAAX,IAAmBA,OAAO,CAACkV,KAAR,GAAgB,CAAnC,IAAwClV,OAAO,CAAC0L,MAAR,GAAiB,CAD3D;IAEA,IAAMuL,QAAQ,GAAG,2BAACxmB,YAAD,aAACA,YAAD,iDAACA,YAAY,CAAEqE,OAAf,2DAAC,uBAAuBhE,MAAxB,2EAAkC,CAAlC,IAAuC,CAAxD;IAEA,IAAIomB,UAAU,GAAG,IAAjB;IAEA,IAAMC,UAAU,GAAGnX,OAAO,GACtB0D,IAAI,CAACC,GAAL,CACED,IAAI,CAAC9R,GAAL,CAASX,QAAQ,CAACmmB,WAAlB,EAA+B1T,IAAI,CAAC2T,KAAL,CAAWrX,OAAO,CAACmL,QAAR,GAAmB,GAA9B,CAA/B,CADF,EAEEla,QAAQ,CAACqmB,WAFX,CADsB,GAKtBrmB,QAAQ,CAACqmB,WALb;;IAOA,IAAIxkB,gBAAgB,IAAIiN,sBAAsB,IAAI,IAA9C,IAAsDC,OAAO,IAAI,IAArE,EAA2E;MACzE,IAAM;QACJuX,KADI;QAEJC,KAFI;QAGJxC,eAHI;QAIJC,mBAJI;QAKJC;MALI,IAMFlV,OANJ;MAOA,IAAMoV,OAAO,GAAGJ,eAAe,CAACrS,GAAhB,CAAoB5C,sBAApB,CAAhB;MACA,IAAM4O,WAAW,GAAGsG,mBAAmB,CAACtS,GAApB,CAAwB5C,sBAAxB,CAApB;;MACA,IAAIqV,OAAO,IAAI,IAAX,IAAmBzG,WAAW,IAAI,IAAtC,EAA4C;QAAA;;QAC1C,IAAM4G,CAAC,GAAGgC,KAAK,GAAGnC,OAAlB;QACA,IAAMI,CAAC,GAAGgC,KAAK,6BAAIvgB,KAAK,CAACwgB,eAAV,yEAA6B,CAA7B,CAAf;QACA,IAAMC,UAAU,GAAG/I,WAAW,GAAG,CAAjC,CAH0C,CAGN;;QACpC,IAAMgJ,WAAW,GAAG,2BAAC1gB,KAAK,CAACwgB,eAAP,2EAA0B,CAA1B,IAA+B,CAAnD,CAJ0C,CAIY;;QACtD,IAAMG,KAAK,GAAG;UACZrM,GAAG,EAAEiK,CADO;UAEZ5I,IAAI,EAAE2I,CAFM;UAGZsC,QAAQ,EAAEnU,IAAI,CAACC,GAAL,CAAS+T,UAAT,EAAqBxC,KAAK,GAAGK,CAA7B,CAHE;UAG+B;UAC3C7J,MAAM,EAAEiM;QAJI,CAAd;QAMA,IAAI7S,OAAK,GAAG,EAAZ;QACA,IAAIgT,OAAO,GAAG,IAAd;QACA,IAAMpT,WAAW,GAAG,KAAKC,cAAL,CAAoB5E,sBAApB,CAApB;QACA1T,aAAa,CAACqY,WAAD,CAAb;QACA,IAAMgC,WAAW,GAAGnW,YAAY,CAACoS,GAAb,CAAiB+B,WAAjB,CAApB;QACA,IAAMqT,cAAc,GAAG3nB,eAAe,CAACuS,GAAhB,CAAoB+B,WAApB,CAAvB;;QACA,IAAIgC,WAAW,IAAI,IAAnB,EAAyB;UACvB5B,OAAK,GAAG4B,WAAW,CAACtV,IAApB;UACA0mB,OAAO,GAAGpR,WAAW,CAACpR,MAAZ,IAAsB,IAAhC;QACD;;QACD,IAAM0iB,aAAa,GACjBznB,YAAY,CAACM,IAAb,KAAsB,CAAtB,IAA2BT,eAAe,CAACS,IAAhB,KAAyB,CADtD;QAEAqmB,UAAU,gBACR,oBAAC,gBAAD;UACE,GAAG,EAAE,KAAKvZ,cADZ;UAEE,KAAK,EAAEia,KAFT;UAGE,SAAS,EAAE/tB,UAAU,CAAC;YACpB0H,KAAK,EAAE,CAACumB,OADY;YAEpBG,MAAM,EAAEnT,OAAK,KAAK,EAAV,IAAgBiT,cAAc,IAAI,IAFtB;YAGpB,wBAAwBC;UAHJ,CAAD,CAHvB;UAQE,mBAAmB,EAAED,cAAc,IAAI,IARzC;UASE,0BAA0B,EAAE,MAAM;YAChC,KAAK3f,QAAL,CAAc;cAAE8H,mBAAmB,EAAEH;YAAvB,CAAd;UACD,CAXH;UAYE,GAAG,EAAEA,sBAZP;UAaE,QAAQ,EAAE,KAAK3F,qBAbjB;UAcE,MAAM,EAAE,KAAKC,mBAdf;UAeE,KAAK,EAAE,KAAKC,kBAfd;UAgBE,aAAa,kBAAE,KAAKwC,IAAP,iDAAE,aAAWob,iBAhB5B;UAiBE,UAAU,EAAEf,UAjBd;UAkBE,KAAK,EAAErS;QAlBT,EADF;MAsBD;IACF;;IAED,IAAIqT,cAAc,GAAG,IAArB;;IACA,IAAI7X,WAAW,IAAI,IAAnB,EAAyB;MACvB,IAAM8X,aAAa,gBACjB;QAAK,SAAS,EAAC;MAAf,gBACE;QACE,SAAS,EAAEvuB,UAAU,CAAC,8BAAD,EAAiC;UACpDwuB,IAAI,EAAE9X;QAD8C,CAAjC;MADvB,GAKGD,WALH,CADF,eAQE;QACE,IAAI,EAAC,QADP;QAEE,OAAO,EAAE,KAAK/F,YAFhB;QAGE,SAAS,EAAE1Q,UAAU,CAAC,sBAAD,EAAyB;UAC5CwuB,IAAI,EAAE9X;QADsC,CAAzB;MAHvB,gBAOE,oBAAC,eAAD;QAAiB,IAAI,EAAElV,OAAvB;QAAgC,SAAS,EAAC;MAA1C,EAPF,WARF,CADF;;MAqBA,IAAMmsB,MAAK,GAAGxX,OAAO,GAAGA,OAAO,CAACwX,KAAX,GAAmB,CAAxC;;MACAW,cAAc,gBACZ;QAAK,SAAS,EAAC,mBAAf;QAAmC,KAAK,EAAE;UAAE5M,GAAG,EAAEiM;QAAP;MAA1C,GACGY,aADH,CADF;IAKD;;IAED,IAAIE,aAA8B,GAAG,IAArC;;IACA,IAAI9X,kBAAkB,IAAI,IAAtB,IAA8BR,OAAlC,EAA2C;MAAA;;MACzCsY,aAAa,GAAG,KAAKvC,gBAAL,CAAsBvV,kBAAtB,EAA0CR,OAA1C,EAAmDnO,KAAnD,CAAhB,CADyC,CAEzC;;MACA,uBAAK+gB,OAAL,kEAAc1J,MAAd;IACD;;IAED,IAAMqP,SAAS,GAAG,EAAlB;;IACA,IAAIvY,OAAO,IAAIlN,gBAAf,EAAiC;MAC/B,IAAM;QACJykB,KAAK,EAALA,MADI;QAEJC,KAAK,EAALA,OAFI;QAGJgB,cAHI;QAIJxD,eAAe,EAAfA,gBAJI;QAKJC,mBAAmB,EAAnBA;MALI,IAMFjV,OANJ;MAOA,IAAM;QAAEyX;MAAF,IAAsBxgB,KAA5B;;MAR+B,6BAUtBW,CAVsB;QAW7B,IAAM2M,WAAW,GAAGiU,cAAc,CAAC5gB,CAAD,CAAlC;;QAEA,IAAMwd,OAAO,GAAGJ,gBAAe,CAACrS,GAAhB,CAAoB4B,WAApB,CAAhB;;QACA,IAAMoK,WAAW,GAAGsG,oBAAmB,CAACtS,GAApB,CAAwB4B,WAAxB,CAApB;;QACA,IAAMG,WAAW,GAAG,MAAI,CAACC,cAAL,CAAoBJ,WAApB,CAApB;;QACA,IAAIG,WAAW,IAAI,IAAnB,EAAyB;UACvB,IAAMiI,YAAY,GAAG9a,KAAK,CAAC8a,YAAN,CAAmBjI,WAAnB,CAArB;;UACA,IACEiI,YAAY,IACZyI,OAAO,IAAI,IADX,IAEAzG,WAAW,IAAI,IAFf,IAGAA,WAAW,GAAG,CAJhB,EAKE;YACA,IAAM4G,EAAC,GAAGgC,MAAK,GAAGnC,OAAR,GAAkBzG,WAAlB,GAAgC,EAA1C;;YACA,IAAM6G,EAAC,GAAGgC,OAAK,IAAIC,eAAJ,aAAIA,eAAJ,cAAIA,eAAJ,GAAuB,CAAvB,CAAL,GAAiC,CAA3C,CAFA,CAE8C;;;YAC9C,IAAMG,MAAoB,GAAG;cAC3B9e,QAAQ,EAAE,UADiB;cAE3ByS,GAAG,EAAEiK,EAFsB;cAG3B5I,IAAI,EAAE2I;YAHqB,CAA7B;;YAKA,IAAMwC,eAAc,GAAG3nB,eAAe,CAACuS,GAAhB,CAAoB+B,WAApB,CAAvB;;YACA,IAAM+T,WAAW,GAAGV,eAAc,IAAI,IAAtC;YACA,IAAMW,eAAe,GACnBnU,WAAW,KAAKpE,mBAAhB,IACAoE,WAAW,KAAKxE,sBADhB,IAEA0Y,WAHF;YAIA,IAAME,OAAO,gBACX;cACE,SAAS,EAAE9uB,UAAU,CAAC,kCAAD,EAAqC;gBACxD+uB,MAAM,EAAE,CAACF;cAD+C,CAArC,CADvB;cAIE,GAAG,EAAEnU,WAJP;cAKE,KAAK,EAAEqT;YALT,GAOGc,eAAe,iBACd,oBAAC,MAAD;cACE,IAAI,EAAC,OADP;cAEE,SAAS,EAAE7uB,UAAU,CACnB,sCADmB,EAEnB;gBACE,cAAc4uB;cADhB,CAFmB,CAFvB;cAQE,OAAO,EAAE,MAAM;gBACb,MAAI,CAACrgB,QAAL,CAAc;kBAAE8H,mBAAmB,EAAEqE;gBAAvB,CAAd;cACD,CAVH;cAWE,aAAa,EAAE6N,KAAK,IAAI;gBAAA;;gBACtB,qBAAI,CAACtV,IAAL,4DAAWob,iBAAX,CAA6B9F,KAA7B;cACD,CAbH;cAcE,YAAY,EAAE,MAAM;gBAClB,MAAI,CAACha,QAAL,CAAc;kBAAE+H,mBAAmB,EAAEoE;gBAAvB,CAAd;cACD,CAhBH;cAiBE,YAAY,EAAE,MAAM;gBAClB,MAAI,CAACnM,QAAL,CAAc;kBAAE+H,mBAAmB,EAAE;gBAAvB,CAAd;cACD;YAnBH,gBAqBE;cAAK,SAAS,EAAC;YAAf,gBACE,oBAAC,eAAD;cACE,IAAI,EAAEjV,cADR;cAEE,SAAS,EAAC;YAFZ,EADF,eAKE,oBAAC,eAAD;cACE,IAAI,EAAEM,QADR;cAEE,SAAS,EAAC;YAFZ,EALF,CArBF,CARJ,CADF;YA4CA+sB,SAAS,CAACllB,IAAV,CAAeslB,OAAf;UACD;QACF;MAnF4B;;MAU/B,KAAK,IAAI/gB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4gB,cAAc,CAAC1nB,MAAnC,EAA2C8G,CAAC,IAAI,CAAhD,EAAmD;QAAA,OAA1CA,CAA0C;MA0ElD;IACF;;IACD,IAAMihB,mBAAmB,GAAG,EAA5B;;IACA,IAAI7Y,OAAJ,EAAa;MACX,IAAM;QACJuX,KAAK,EAALA,OADI;QAEJiB,cAAc,EAAdA,eAFI;QAGJxD,eAAe,EAAfA,iBAHI;QAIJC,mBAAmB,EAAnBA,qBAJI;QAKJF;MALI,IAMF/U,OANJ;;MADW,6BAQFpI,GARE;QAST,IAAM2M,WAAW,GAAGiU,eAAc,CAAC5gB,GAAD,CAAlC;;QACA,IAAMwd,OAAO,GAAGJ,iBAAe,CAACrS,GAAhB,CAAoB4B,WAApB,CAAhB;;QACA,IAAMoK,WAAW,GAAGsG,qBAAmB,CAACtS,GAApB,CAAwB4B,WAAxB,CAApB;;QACA,IAAI6Q,OAAO,IAAI,IAAX,IAAmBzG,WAAW,IAAI,IAAlC,IAA0CA,WAAW,GAAG,CAA5D,EAA+D;UAC7D,IAAMmK,aAAa,GAAGvB,OAAK,GAAGnC,OAA9B;UACA,IAAM2D,UAAU,GAAGxB,OAAK,GAAGnC,OAAR,GAAkBzG,WAAlB,GAAgC,EAAnD;;UACA,IAAMiJ,OAAoB,GAAG9kB,gBAAgB,GACzC;YACEgG,QAAQ,EAAE,UADZ;YAEEyS,GAAG,EAAEwJ,kBAFP;YAGEnI,IAAI,EAAEmM,UAHR;YAIE7D,KAAK,EAAE,EAJT;YAKExJ,MAAM,EAAEzU,KAAK,CAACwgB;UALhB,CADyC,GAQzC;YACE3e,QAAQ,EAAE,UADZ;YAEEyS,GAAG,EAAE,CAFP;YAGEqB,IAAI,EAAEkM,aAHR;YAIE5D,KAAK,EAAEvG,WAJT;YAKEjD,MAAM,EAAEqJ;UALV,CARJ;;UAeA,IAAMrQ,YAAW,GAAG,MAAI,CAACC,cAAL,CAAoBJ,WAApB,CAApB;;UACA,IAAIG,YAAW,IAAI,IAAnB,EAAyB;YACvB,IAAMvT,QAAM,GAAGU,KAAK,CAACiD,OAAN,CAAc4P,YAAd,CAAf;;YACA,IAAMqT,gBAAc,GAAG3nB,eAAe,CAACuS,GAAhB,CAAoB+B,YAApB,CAAvB;;YACA,IAAM;cAAEoC,OAAO,EAAEhV;YAAX,IAAqCimB,gBAAc,IAAI,EAA7D;YACA,IAAMnO,IAAI,GAAGxd,UAAU,CAAC4kB,gBAAX,CAA4Bnf,KAAK,CAAC+X,IAAlC,EAAwClF,YAAxC,CAAb;YACA,IAAM3S,aAAa,GAAG6X,IAAI,GAAGA,IAAI,CAACqF,SAAR,GAAoB,IAA9C;YACA,IAAM0J,OAAO,gBACX;cACE,GAAG,EAAEpU,WADP;cAEE,SAAS,EAAC,gCAFZ;cAGE,KAAK,EAAEqT;YAHT,gBAKE,oBAAC,MAAD;cACE,SAAS,EAAC,6BADZ;cAEE,SAAS,EAAE,MAAI,CAACoB,4BAAL,CAAkCzU,WAAlC,CAFb;cAGE,QAAQ,EAAE,MAAM;gBACd,MAAI,CAAC7K,wBAAL,CAA8B6K,WAA9B;cACD,CALH;cAME,OAAO,EAAErE,mBAAmB,KAAKqE,WANnC;cAOE,WAAW,MAPb;cAQE,WAAW,MARb;cASE,OAAO,EAAE;gBACP0U,aAAa,EAAE;cADR;YATX,GAaG,MAAI,CAACC,kCAAL,CACCrnB,KADD,EAECV,QAFD,EAGCW,qBAHD,EAICC,aAJD,EAKCC,SALD,CAbH,CALF,CADF;YA6BA6mB,mBAAmB,CAACxlB,IAApB,CAAyBslB,OAAzB;UACD;QACF;MApEQ;;MAQX,KAAK,IAAI/gB,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAG4gB,eAAc,CAAC1nB,MAAnC,EAA2C8G,GAAC,IAAI,CAAhD,EAAmD;QAAA,OAA1CA,GAA0C;MA6DlD;IACF;;IAED,IAAMxE,WAAW,GAAG,KAAK+lB,oBAAL,CAClB9H,aAAa,KAAKnb,SAAlB,IAA+BrE,KAAK,CAACO,uBADnB,EAElBP,KAAK,CAACQ,wBAFY,EAGlBR,KAAK,CAACS,wBAHY,EAIlBT,KAAK,CAACU,iBAJY,EAKlBV,KAAK,CAACW,iBALY,EAMlBX,KAAK,CAACY,yBANY,EAOlBZ,KAAK,CAACa,iBAPY,EAQlB,KAAKC,qBARa,EASlB,KAAKC,qBATa,EAUlB,KAAKC,mBAVa,EAWlBC,gBAXkB,EAYlBC,aAZkB,EAalBC,cAbkB,EAclB,KAAKuc,sBAAL,EAdkB,EAelBlO,cAfkB,EAgBlBoB,gBAAgB,CAAC5R,IAAjB,GAAwB,CAhBN,CAApB;IAmBA,IAAMuoB,gBAAgB,GAAGtY,WAAW,CAACnL,GAAZ,CAAgBwc,MAAM,IAAI;MACjD,QAAQA,MAAM,CAAC7e,IAAf;QACE,KAAK/E,UAAU,CAACgF,aAAhB;UACE,oBACE,oBAAC,YAAD;YACE,KAAK,EAAE1B,KADT;YAEE,QAAQ,EAAE,KAAKoI,iBAFjB;YAGE,QAAQ,EAAE,KAAKC,iBAHjB;YAIE,GAAG,EAAE3L,UAAU,CAACgF;UAJlB,EADF;;QAQF,KAAKhF,UAAU,CAACmF,2BAAhB;UACE,oBACE,oBAAC,yBAAD;YACE,KAAK,EAAE7B,KADT;YAEE,YAAY,EAAE0F,YAFhB;YAGE,gBAAgB,EAAE+H,gBAHpB;YAIE,yBAAyB,EAAE,KAAK9C,6BAJlC;YAKE,qBAAqB,EAAE,KAAK1B,yBAL9B;YAME,GAAG,EAAEvM,UAAU,CAACmF;UANlB,EADF;;QAUF,KAAKnF,UAAU,CAACoF,sBAAhB;UACE,oBACE,oBAAC,yBAAD;YACE,KAAK,EAAEmL,kBADT;YAEE,QAAQ,EAAE,KAAK1D,8BAFjB;YAGE,QAAQ,EAAE,KAAKF,6BAHjB;YAIE,QAAQ,EAAE,KAAKC;UAJjB,EADF;;QAQF,KAAK5M,UAAU,CAACukB,2BAAhB;UACEzmB,aAAa,CAACwF,KAAK,CAACiD,OAAP,CAAb;UACAzI,aAAa,CAAC,KAAKgtB,mCAAN,CAAb;UACA,oBACE,oBAAC,uBAAD;YACE,OAAO,EAAExnB,KAAK,CAACiD,OADjB;YAEE,IAAI,EAAEuD,wBAFR;YAGE,QAAQ,EAAE,KAAKghB,mCAHjB;YAIE,MAAM,EAAE,KAAKhe,iCAJf;YAKE,QAAQ,EAAE,KAAKC;UALjB,EADF;;QASF,KAAK/M,UAAU,CAACqF,qBAAhB;UACE,oBACE,oBAAC,mBAAD;YACE,KAAK,EAAE/B,KADT;YAEE,aAAa,EAAEvB,aAFjB;YAGE,MAAM,EAAE,KAAKiL,yBAHf;YAIE,QAAQ,EAAE,KAAKZ,cAJjB;YAKE,GAAG,EAAEpM,UAAU,CAACqF;UALlB,EADF;;QASF,KAAKrF,UAAU,CAACsF,WAAhB;UACE,oBACE,oBAAC,UAAD;YACE,KAAK,EAAEhC,KADT;YAEE,QAAQ,EAAE,KAAK6K,kBAFjB;YAGE,MAAM,EAAEjM,YAHV;YAIE,GAAG,EAAElC,UAAU,CAACsF;UAJlB,EADF;;QAQF,KAAKtF,UAAU,CAACuF,YAAhB;UACE,oBACE,oBAAC,YAAD;YACE,QAAQ,EAAEzD,mBADZ;YAEE,QAAQ,EAAE4mB,QAFZ;YAGE,QAAQ,EAAE,KAAKrd,wBAHjB;YAIE,MAAM,EAAE,KAAKC;UAJf,EADF;;QAQF,KAAKtL,UAAU,CAACmlB,gBAAhB;UACE,OACE7S,mBAAmB,iBACjB,oBAAC,eAAD;YACE,WAAW,EAAEA,mBADf;YAEE,OAAO,EAAEhP,KAAK,CAACuE,eAFjB;YAGE,QAAQ,EAAE,KAAKuD;UAHjB,EAFJ;;QASF,KAAKpL,UAAU,CAACyF,cAAhB;UACE,oBACE,oBAAC,gBAAD;YACE,KAAK,EAAEnC,KADT;YAEE,IAAI,EAAE4D,IAFR;YAGE,aAAa,EAAEiL,kBAHjB;YAIE,mBAAmB,EAAElI,mBAJvB;YAKE,qBAAqB,EAAEF,qBALzB;YAME,0BAA0B,EACxBC,0BADwB,aACxBA,0BADwB,cACxBA,0BADwB,GACMrC,SAPlC;YASE,UAAU,EAAE,KAAK6F,mBATnB;YAUE,eAAe,EAAE,KAAKC,wBAVxB;YAWE,QAAQ,EAAE,KAAKC,yBAXjB;YAYE,cAAc,EAAEmE,cAZlB;YAaE,GAAG,EAAE7R,UAAU,CAACyF;UAblB,EADF;;QAiBF,KAAKzF,UAAU,CAACwF,eAAhB;UACE,oBACE,oBAAC,qBAAD;YACE,KAAK,EAAElC,KADT;YAEE,qBAAqB,EAAElB,qBAFzB;YAGE,QAAQ,EAAE,KAAK8K;UAHjB,EADF;;QAOF,KAAKlN,UAAU,CAAC0F,iBAAhB;UACE,oBACE,oBAAC,oBAAD;YACE,KAAK,EAAEwO,gBADT;YAEE,QAAQ,EAAEmU;UAFZ,EADF;;QAOF;UACE,MAAM/G,KAAK,kCAA2BsC,MAAM,CAAC7e,IAAlC,EAAX;MAnHJ;IAqHD,CAtHwB,CAAzB;IAwHA,IAAMqB,aAAa,GAAG,KAAK2kB,sBAAL,CACpB1qB,aAAa,CAAC2qB,gBAAd,CAA+Bja,gBAA/B,CADoB,CAAtB;IAIA,oBACE;MAAK,SAAS,EAAC,WAAf;MAA2B,IAAI,EAAC;IAAhC,gBACE;MAAK,SAAS,EAAC;IAAf,GACGiX,QAAQ,IAAI,IAAZ,iBAAoB;MAAK,SAAS,EAAC;IAAf,GAAgCA,QAAhC,CADvB,eAEE,oBAAC,aAAD;MACE,EAAE,EAAEvX,oBADN;MAEE,OAAO,EAAEvU,WAAW,CAAC+uB,gBAFvB;MAGE,UAAU,EAAC,0BAHb;MAIE,OAAO,EAAE,KAAKzf,oBAJhB;MAKE,SAAS,EAAE,KAAKC,kBALlB;MAME,MAAM,EAAE,KAAKD,oBANf;MAOE,QAAQ,EAAE,KAAKC,kBAPjB;MAQE,YAAY,MARd;MASE,aAAa;IATf,gBAWE;MAAK,SAAS,EAAC;IAAf,GACGiG,cAAc,IAAIZ,eAAlB,iBACC,oBAAC,yBAAD;MACE,KAAK,EAAEY,cADT;MAEE,kBAAkB,EAAE,CAClB6E,KADkB,EAElBxR,IAFkB,EAGlBmmB,UAHkB,KAIf5nB,KAAK,CAAC6nB,aAAN,CAAoB5U,KAApB,EAA2BxR,IAA3B,EAAiCmmB,UAAjC,CANP;MAOE,UAAU,EAAEpa,eAAe,CAAC5J,IAP9B;MAQE,SAAS,EAAE2J,SARb;MASE,QAAQ,EAAE,KAAK/C,qBATjB;MAUE,UAAU,EAAE,KAAKC,uBAVnB;MAWE,QAAQ,EAAE,KAAKF,qBAXjB;MAYE,MAAM,EAAE,KAAKG;IAZf,EAFJ,CAXF,CAFF,eAgCE,oBAAC,aAAD;MACE,EAAE,EAAExJ,aADN;MAEE,OAAO,EAAEtI,WAAW,CAAC+uB,gBAFvB;MAGE,UAAU,EAAC,0BAHb;MAIE,OAAO,EAAE,KAAKzf,oBAJhB;MAKE,SAAS,EAAE,KAAKC,kBALlB;MAME,MAAM,EAAE,KAAKD,oBANf;MAOE,QAAQ,EAAE,KAAKC,kBAPjB;MAQE,YAAY,MARd;MASE,aAAa;IATf,gBAWE;MAAK,SAAS,EAAC;IAAf,gBACE,oBAAC,iBAAD;MACE,KAAK,EAAEhC,WADT;MAEE,eAAe,EAAEC,qBAFnB;MAGE,eAAe,EAAEC,mBAHnB;MAIE,QAAQ,EAAE,KAAKuE,uBAJjB;MAKE,OAAO,EAAE5K,KAAK,CAACiD,OALjB;MAME,GAAG,EAAE,KAAK0I;IANZ,EADF,CAXF,CAhCF,eAsDE;MACE,SAAS,EAAC,cADZ;MAEE,GAAG,EAAET,WAAW,IAAI;QAClB,KAAKA,WAAL,GAAmBA,WAAnB;MACD;IAJH,gBAME,oBAAC,IAAD;MACE,GAAG,EAAED,IAAI,IAAI;QACX,KAAKA,IAAL,GAAYA,IAAZ;MACD,CAHH;MAIE,cAAc,EAAE,CAAC/R,mBAAmB,CAAC8G,KAAD,CAApB,IAA+B,CAACA,KAAK,CAACqF,UAJxD;MAKE,eAAe,EAAEuf,eALnB;MAME,cAAc,EAAEC,cANlB;MAOE,gBAAgB,EAAE9W,gBAPpB;MAQE,KAAK,EAAE/N,KART;MASE,WAAW,EAAE6N,WATf;MAUE,aAAa,EAAEC,aAVjB;MAWE,YAAY,EAAEpI,YAXhB;MAYE,SAAS,EAAE2H,SAZb;MAaE,OAAO,EAAE,KAAK/E,eAbhB;MAcE,aAAa,EAAE,KAAKa,iBAdtB;MAeE,kBAAkB,EAAE,KAAKH,sBAf3B;MAgBE,qBAAqB,EAAE,KAAKC,yBAhB9B;MAiBE,QAAQ,EAAE,KAAKwC,QAjBjB;MAkBE,aAAa,EAAEwZ,aAlBjB;MAmBE,KAAK,EAAE7f;IAnBT,EANF,eA2BE,oBAAC,yBAAD;MACE,MAAM,EAAEkK,iBADV;MAEE,IAAI,EAAEC,YAFR;MAGE,OAAO,EAAE,KAAKzE;IAHhB,EA3BF,EAgCGqa,SAAS,iBACR,oBAAC,oBAAD;MACE,KAAK,EAAEnlB,KADT;MAEE,YAAY,EAAEA,KAAK,CAACiD,OAFtB;MAGE,GAAG,EAAEyW,GAHP;MAIE,MAAM,EAAE8J,MAJV;MAKE,IAAI,EAAEzI,IALR;MAME,KAAK,EAAE0I,KANT;MAOE,MAAM,EAAEhgB,MAPV;MAQE,SAAS,EAAEtD,SARb;MASE,KAAK,EAAEpB,KATT;MAUE,WAAW,EAAEJ,WAVf;MAWE,YAAY,EAAE+G,YAXhB;MAYE,aAAa,EAAEjH,aAZjB;MAaE,aAAa,EAAEqE,aAbjB;MAcE,kBAAkB,EAAE,KAAKglB,qBAAL,CAClBriB,kBADkB,EAElBzF,KAAK,CAACiD,OAFY,EAGlByC,YAHkB,EAIlB1F,KAAK,CAAC2F,uBAJY,EAKlB3F,KAAK,CAAC4F,wBALY,kBAMlB,KAAKqF,IANa,0EAMlB,aAAWrE,KAAX,CAAiBmhB,cANC,0DAMlB,sBAAiCC,KANf,CAdtB;MAsBE,aAAa,EAAE,KAAKC,6BAAL,CACb,KAAKC,qBAAL,CAA2BloB,KAA3B,EAAkCvB,aAAlC,CADa,EAEbwO,kBAFa,EAGbzG,wBAHa,EAIb;MACA,iBAAAyI,WAAW,CAACA,WAAW,CAAChQ,MAAZ,GAAqB,CAAtB,CAAX,8DAAqCwC,IAArC,MACE/E,UAAU,CAACukB,2BADb,GAEIrS,0BAFJ,aAEIA,0BAFJ,cAEIA,0BAFJ,GAEkCvK,SAFlC,GAGIA,SARS,CAtBjB;MAgCE,YAAY,EAAE,KAAKI,oBAAL,CACZzE,KAAK,CAACuE,eADM,EAEZ3F,YAFY,EAGZJ,mBAHY,CAhChB;MAqCE,YAAY,EAAE,KAAK2pB,oBAAL,CACZnoB,KAAK,CAACiD,OADM,EAEZrE,YAFY,EAGZJ,mBAHY,CArChB;MA0CE,qBAAqB,EAAEM,qBA1CzB;MA2CE,eAAe,EAAEoQ,eA3CnB;MA4CE,cAAc,EAAE3C,cA5ClB;MA6CE,aAAa,EAAEqB;IA7CjB,EAjCJ,EAiFG,CAAC5I,WAAD,iBACC;MAAK,SAAS,EAAC;IAAf,gBACE,oBAAC,MAAD;MACE,IAAI,EAAC,OADP;MAEE,uDAA8CpB,IAA9C,CAFF;MAGE,OAAO,EAAE,KAAK+E,UAHhB;MAIE,IAAI,eAAE,oBAAC,eAAD;QAAiB,IAAI,EAAE/O,MAAvB;QAA+B,SAAS,EAAC;MAAzC,EAJR;MAKE,OAAO,EAAC;IALV,EADF,CAlFJ,EA4FGyrB,UA5FH,EA6FGiB,cA7FH,EA8FGI,SA9FH,EA+FGD,aA/FH,EAgGGO,mBAhGH,EAiGGjgB,0BAA0B,IACzB,KAAKqhB,wBAAL,CAA8BrhB,0BAA9B,CAlGJ,CAtDF,eA0JE,oBAAC,OAAD;MACE,KAAK,EAAE/G,KADT;MAEE,OAAO,EAAEwP,cAFX;MAGE,OAAO,EAAEC,OAHX;MAIE,YAAY,EAAEC,YAJhB;MAKE,QAAQ,EAAE,KAAK1F,oCALjB;MAME,sBAAsB,EAAE,KAAKgB,qCAN/B;MAOE,OAAO,EAAE,KAAKpD,mBAPhB;MAQE,UAAU,EAAE,KAAKM,oBARnB;MASE,SAAS,EAAE,KAAKC,kBATlB;MAUE,SAAS,EAAE,MAAM;QACf,KAAKD,oBAAL;QACA,KAAK0S,KAAL;MACD,CAbH;MAcE,QAAQ,EAAE,KAAKzS;IAdjB,EA1JF,eA2KE,oBAAC,oBAAD;MACE,KAAK,EAAEiH,gBADT;MAEE,QAAQ,EAAED,kBAAkB,IAAI,IAFlC;MAGE,WAAW,oBAAa,KAAKvC,YAAL,CAAkBrK,QAAlB,CAA2BC,cAA3B,EAAb,MAHb;MAIE,cAAc,qBAAc,KAAK8J,aAAL,CAAmB/J,QAAnB,CAA4BC,cAA5B,EAAd,MAJhB;MAKE,iBAAiB,EAAEqK,iBALrB;MAME,cAAc,EAAEN,cANlB;MAOE,UAAU,EAAE,KAAKrE,oBAPnB;MAQE,SAAS,EAAE,KAAKC,kBARlB;MASE,SAAS,EAAE,KAAKD,oBATlB;MAUE,QAAQ,EAAE,KAAKC,kBAVjB;MAWE,MAAM,EAAE,KAAK2B,0BAXf;MAYE,SAAS,EAAE,KAAKC;IAZlB,EA3KF,eAyLE,oBAAC,cAAD,QAAiBsF,YAAjB,CAzLF,eA0LE,oBAAC,mBAAD;MACE,KAAK,EAAErP,KADT;MAEE,aAAa,EAAEwO,aAAF,aAAEA,aAAF,cAAEA,aAAF,GAAmBnK,SAFlC;MAGE,UAAU,EAAE,KAAK6D,oBAHnB;MAIE,SAAS,EAAE,KAAKC,kBAJlB;MAKE,SAAS,EAAE,KAAKD,oBALlB;MAME,QAAQ,EAAE,KAAKC;IANjB,EA1LF,eAkME,oBAAC,UAAD;MACE,GAAG,EAAEuD,UAAU,IAAI;QACjB,KAAKA,UAAL,GAAkBA,UAAlB;MACD,CAHH;MAIE,iBAAiB,EAAEiZ,iBAJrB;MAKE,mBAAmB,EAAE,KAAKra,uBAL5B;MAME,kBAAkB,EAAE,KAAKD,sBAN3B;MAOE,wBAAwB,EAAE,KAAKiI,4BAPjC;MAQE,aAAa,EACX3L,mBAAmB,KACnB/J,gBAAgB,CAACiK,eAAjB,CAAiCC,WAVrC;MAYE,SAAS,EAAE3G;IAZb,EAlMF,CADF,eAkNE,oBAAC,aAAD;MACE,EAAE,EAAE6E,WADN;MAEE,OAAO,EAAEpM,WAAW,CAACyvB,eAFvB;MAGE,UAAU,EAAC,YAHb;MAIE,UAAU,EAAE,KAAKngB,oBAJnB;MAKE,SAAS,EAAE,KAAKC,kBALlB;MAME,SAAS,EAAE,KAAKD,oBANlB;MAOE,QAAQ,EAAE,KAAKC,kBAPjB;MAQE,YAAY,MARd;MASE,aAAa;IATf,gBAWE;MAAK,SAAS,EAAC;IAAf,gBACE,oBAAC,KAAD,qBACE,oBAAC,IAAD;MAAM,KAAK,EAAC,eAAZ;MAA4B,OAAO,EAAE,KAAKS;IAA1C,gBACE,oBAAC,IAAD;MACE,QAAQ,EAAE7C,CAAC,IAAI,KAAK8C,gBAAL,CAAsBtH,WAAW,CAACwE,CAAD,CAAjC,CADjB;MAEE,KAAK,EAAExE;IAFT,EADF,CADF,EAOGgmB,gBAAgB,CAACzjB,GAAjB,CAAqB,CAACwc,MAAD,EAASva,CAAT,kBACpB,oBAAC,IAAD;MACE,KAAK,EAAEkJ,WAAW,CAAClJ,CAAD,CAAX,CAAepE,KADxB;MAEE,MAAM,EAAE,KAAKmH,cAFf;MAGE,OAAO,EAAE,KAAKF,eAHhB;MAIE,GAAG,EAAEqG,WAAW,CAAClJ,CAAD,CAAX,CAAetE;IAJtB,GAMG6e,MANH,CADD,CAPH,CADF,CAXF,CAlNF,eAkPE,oBAAC,cAAD;MAAgB,OAAO,EAAE,KAAKtT;IAA9B,EAlPF,CADF;EAsPD;;AAttHmE;;gBAAzD5N,Q,iBACU,G;;gBADVA,Q,iBAGU,G;;gBAHVA,Q,yBAKkB,G;;gBALlBA,Q,kBAOW;EACpBslB,QAAQ,EAAE,IADU;EAEpBnmB,eAAe,EAAE,IAAIyP,GAAJ,EAFG;EAGpB4C,gBAAgB,EAAE,IAAI5C,GAAJ,EAHE;EAIpBvI,kBAAkB,EAAE,EAJA;EAKpBwH,kBAAkB,EAAE,EALA;EAMpBC,qBAAqB,EAAE,IAAIc,GAAJ,EANH;EAOpB/M,gBAAgB,EAAE,KAPE;EAQpBwW,uBAAuB,EAAE,KARL;EASpB/R,YAAY,EAAE,EATM;EAUpB2H,SAAS,EAAE,EAVS;EAWpBiD,YAAY,EAAE,EAXM;EAYpBrL,aAAa,EAAE,EAZK;EAapBua,aAAa,EAAEnb,SAbK;EAcpBoa,gBAAgB,EAAE,MAAYpa,SAdV;EAepB2a,cAAc,EAAE,MAAY3a,SAfR;EAgBpBsY,OAAO,EAAE,MAAYtY,SAhBD;EAiBpB0e,aAAa,EAAE,MAAY1e,SAjBP;EAkBpBoY,iBAAiB,EAAE,MAAYpY,SAlBX;EAmBpB0gB,wBAAwB,EAAE,MAAY1gB,SAnBlB;EAoBpBkJ,SAAS,EAAE,IApBS;EAqBpBC,eAAe,EAAE,IArBG;EAsBpB9O,YAAY,EAAE,IAAIsP,GAAJ,EAtBM;EAuBpBlP,qBAAqB,EAAE,EAvBH;EAwBpBC,KAAK,EAAE,EAxBa;EAyBpBJ,WAAW,EAAEpE,UAAU,CAAC2E,YAAX,CAAwBC,IAzBjB;EA0BpBV,aAAa,EAAE,EA1BK;EA2BpBD,mBAAmB,EAAER,4BA3BD;EA4BpBY,YAAY,EAAEyF,SA5BM;EA6BpBoJ,gBAAgB,EAAE,IAAIO,GAAJ,EA7BE;EA8BpBN,cAAc,EAAE,IAAIM,GAAJ,EA9BI;EA+BpB6S,kBAAkB,EAAE,MAAYxc,SA/BZ;EAgCpBS,iBAAiB,EAAE,KAhCC;EAiCpBqI,oBAAoB,EAAE,KAjCF;EAkCpByX,eAAe,EAAE,KAlCG;EAmCpBC,cAAc,EAAE,KAnCI;EAoCpByD,wBAAwB,EAAE,IApCN;EAqCpB5F,mBAAmB,EAAE,IArCD;EAsCpB6F,sBAAsB,EAAE,IAtCJ;EAuCpB3kB,IAAI,EAAE,OAvCc;EAwCpBkhB,uBAAuB,EAAE,IAxCL;EAyCpB5jB,aAAa,EAAE,KAzCK;EA0CpBiF,WAAW,EAAE,EA1CO;EA2CpBC,qBAAqB,EAAE,IA3CH;EA4CpBC,mBAAmB,EAAE,IA5CD;EA6CpBmiB,aAAa,EAAE,MAAYnkB,SA7CP;EA8CpBkI,cAAc,EAAE,IAAIyB,GAAJ,EA9CI;EA+CpB2W,iBAAiB,EAAEtgB,SA/CC;EAgDpBkM,QAAQ,EAAE;IACR/Q,QAAQ,EAAE,kBADF;IAERipB,qBAAqB,EAAEruB,SAAS,CAACsuB,gBAFzB;IAGRC,YAAY,EAAE,KAHN;IAIRC,cAAc,EAAE,IAJR;IAKRpd,wBAAwB,EAAE,KALlB;IAMRrL,SAAS,EAAE,EANH;IAORmL,oBAAoB,EAAEpT,SAAS,CAAC2wB,KAAV,CAAgB;MACpCC,mBAAmB,EAAE5wB,SAAS,CAAC6wB;IADK,CAAhB,CAPd;IAURxd,oBAAoB,EAAErT,SAAS,CAAC2wB,KAAV,CAAgB;MACpCC,mBAAmB,EAAE5wB,SAAS,CAAC6wB;IADK,CAAhB;EAVd,CAhDU;EA8DpBpb,OAAO,EAAE,IA9DW;EA+DpBxM,cAAc,EAAE,IA/DI;EAgEpByM,aAAa,EAAE,IAhEK;EAiEpBxI,KAAK,EAAElJ,aAjEa;EAkEpBkF,eAAe,EAAE;AAlEG,C;;AAktHxB,eAAehC,QAAf"}
|