@deephaven/iris-grid 0.47.0 → 0.47.1-beta.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGrid.js","names":["React","Component","memoize","classNames","CSSTransition","PropTypes","deepEqual","Log","FontAwesomeIcon","ContextActions","Stack","Menu","Page","Popper","ThemeExport","Tooltip","Button","ContextActionUtils","Grid","GridRange","GridUtils","isEditableGridModel","isExpandableGridModel","dhEye","dhFilterFilled","dhGraphLineUp","dhTriangleDownSquare","vsClose","vsCloudDownload","vsEdit","vsFilter","vsMenu","vsReply","vsRuby","vsSearch","vsSplitHorizontal","vsSymbolOperator","vsTools","DateUtils","Formatter","FormatterUtils","TableUtils","assertNotNull","copyToClipboard","EMPTY_ARRAY","EMPTY_MAP","Pending","PromiseUtils","ValidationError","getOrThrow","Type","FilterType","throttle","debounce","clamp","getFormatColumns","PendingDataBottomBar","IrisGridCopyHandler","FilterInputField","ClearFilterKeyHandler","CopyKeyHandler","ReverseKeyHandler","IrisGridCellOverflowMouseHandler","IrisGridColumnSelectMouseHandler","IrisGridColumnTooltipMouseHandler","IrisGridContextMenuHandler","IrisGridDataSelectMouseHandler","IrisGridFilterMouseHandler","IrisGridRowTreeMouseHandler","IrisGridSortMouseHandler","IrisGridTokenMouseHandler","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","SEEK_ROW_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","constructor","props","column","handleAdvancedMenuOpened","bind","max","model","advancedFilterOptions","sortDirection","formatter","handleAdvancedFilterChange","handleAdvancedFilterSortChange","handleAdvancedFilterDone","tableUtils","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","metricCalculator","userColumnWidths","getHiddenColumns","Map","initialColumnWidths","columns","aggregationMap","forEach","operation","selected","invert","getOperationColumnNames","operationMap","filter","a","isRollupOperation","name","newOperations","map","o","dh","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","handleTooltipRef","Date","now","expandCellTooltipProps","expandTooltipDisplayValue","textAlign","isMacPlatform","linkHoverTooltipProps","linkHoverDisplayValue","input","gotoValue","debouncedSeekRow","seekRow","handleGotoRowOpened","handleGotoRowClosed","handleAdvancedMenuClosed","handleAggregationChange","handleAggregationsChange","handleAggregationEdit","handleAnimationLoop","handleAnimationStart","handleAnimationEnd","handleChartChange","handleChartCreate","handleGridError","handleFilterBarChange","handleFilterBarDone","handleFilterBarTab","handleCancel","handleMenu","handleMenuClose","handleMenuSelect","handleMenuBack","handleRequestFailed","handleSelectionChanged","handleMovedColumnsChanged","handleHeaderGroupsChanged","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","handleColumnVisibilityReset","handleCrossColumnSearch","handleRollupChange","handleOverflowClose","getColumnBoundingRect","handleGotoRowSelectedRowNumberChanged","handleGotoValueSelectedColumnNameChanged","handleGotoValueSelectedFilterChanged","handleGotoValueChanged","handleGotoValueSubmitted","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","error","INPUT_TABLE","DISCARD","commitAction","pendingDataErrors","commitPending","COMMIT","contextActions","conditionalFormats","customColumnFormatMap","isSelectingPartition","movedColumnsProp","movedRows","movedRowsProp","partition","partitionColumn","userRowHeights","canCopy","frozenColumns","columnHeaderGroups","keyHandlers","mouseHandlers","initialMovedColumns","initialMovedRows","layoutHints","hiddenColumns","getColumnIndexByName","searchColumns","focusedFilterBarColumn","metrics","partitionTable","shownAdvancedFilter","hoverAdvancedFilter","selectedRanges","copyOperation","loadingText","loadingSpinnerShown","shownColumnTooltip","conditionalFormatEditIndex","isTableDownloading","isReady","rollupSelectedColumns","selectedAggregation","openOptions","pendingRowCount","pendingSavePromise","pendingSaveError","toastMessage","showOverflowModal","overflowText","isGotoShown","gotoRow","gotoRowError","gotoValueError","gotoValueSelectedColumnName","gotoValueSelectedFilter","eqIgnoreCase","initialColumnHeaderGroups","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","timeZone","textForCell","modelColumns","modelRows","getTheme","getCachedTheme","floatingTopRowCount","floatingBottomRowCount","getVisibleColumn","modelIndex","getVisibleIndex","makeQuickFilter","text","err","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","filterList","combinedText","combineFiltersFromList","removeQuickFilter","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","eq","FilterValue","ofString","copyCell","String","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","getVisibleWidth","leftOffset","lastFocusedFilterBarColumn","hideColumnByVisibleIndex","columnVisibleIndex","setColumnWidth","freezeColumnByColumnName","allFrozenColumns","visibleIndex","newMovedColumns","moveItem","unFreezeColumnByColumnName","frontColumns","modelIndexes","isVisible","defaultWidth","calculatedWidth","calculatedColumnWidths","resetColumnWidth","updateCanvas","onPartitionAppend","isCanceled","onError","showAllColumns","entries","columnWidth","toggleSort","addToExisting","isColumnSortable","currentSorts","toggleSortForColumn","sortColumn","direction","none","isAbs","reverse","isReversible","focusIndex","isTextType","isTableSearchAvailable","searchDisplayMode","SearchDisplayMode","SEARCH_DISPLAY_HIDE","SEARCH_DISPLAY_SHOW","cursorRow","cursorColumn","cellValue","convertValueToText","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","parseColumnHeaderGroups","groups","tooltip","startTimer","CONDITIONAL_FORMATTING_EDIT","oldCustomColumns","customColumn","removedColumnNames","getRemovedCustomColumnNames","newSorts","removeSortsInColumns","removeFiltersInColumns","removeColumnFromMovedColumns","newSelectDistinctColumns","removeColumnsFromSelectDistinctColumns","join","aggregation","AGGREGATION_EDIT","resetGridViewState","columnNames","INITIATING","fileName","frozenTable","tableSubscription","snapshotRanges","modelRanges","includeColumnHeaders","useUnformattedValues","startDownload","inputString","isBackwards","selectedColumnName","isSeekRowAvailable","selectedColumn","getColumnByName","searchFromRow","isContains","containsIgnoreCase","isIgnoreCase","columnDataType","dataType","CHAR","STRING","ValueType","DATETIME","startDate","parseDateRange","DECIMAL","INT","isBigDecimalType","isBigIntegerType","inputValue","parseInt","Number","NEGATIVE_INFINITY","POSITIVE_INFINITY","NUMBER","makeValue","setFocusRow","cancelDownload","FINISHED","CANCELED","deleteRanges","columnAllowedCursor","cursor","topOffset","irisGridState","gridState","onStateChange","gridRect","popperMargin","columnHeaderHeight","allColumnXs","allColumnWidths","width","columnHeaderMaxDepth","columnX","bottom","right","x","y","toJSON","rowNumber","rowInt","target","getColumnTooltip","boundedLeft","boundedWidth","abs","virtualReference","clientWidth","clientHeight","render","children","getDownloadWorker","isStuckToBottom","isStuckToRight","onlyFetchVisibleColumns","onAdvancedSettingsChange","getCachedFilter","stateOverride","getCachedStateOverride","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","getCachedHiddenColumns","openOptionsStack","handleConditionalFormatEditorUpdate","transitionSlowMs","stringName","displayString","getAlwaysFetchColumns","draggingColumn","range","getCachedPreviewFormatColumns","getModelTotalsConfig","getOverflowButtonTooltip","getExpandCellTooltip","getLinkHoverTooltip","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 ContextActions,\n Stack,\n Menu,\n Page,\n Popper,\n ThemeExport,\n Tooltip,\n ContextAction,\n PopperOptions,\n ReferenceObject,\n Button,\n ContextActionUtils,\n ResolvableContextAction,\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 type {\n Column,\n ColumnGroup,\n CustomColumn,\n DateWrapper,\n dh as DhType,\n FilterCondition,\n Sort,\n Table,\n TableViewportSubscription,\n} from '@deephaven/jsapi-types';\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 copyToClipboard,\n EMPTY_ARRAY,\n EMPTY_MAP,\n Pending,\n PromiseUtils,\n ValidationError,\n getOrThrow,\n} from '@deephaven/utils';\nimport {\n Type as FilterType,\n TypeValue as FilterTypeValue,\n} from '@deephaven/filters';\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 IrisGridRowTreeMouseHandler,\n IrisGridSortMouseHandler,\n IrisGridTokenMouseHandler,\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 {\n ReadonlyAdvancedFilterMap,\n ColumnName,\n ReadonlyQuickFilterMap,\n ReadonlyAggregationMap,\n ReadonlyOperationMap,\n Action,\n OptionItem,\n UITotalsTableConfig,\n InputFilter,\n PendingDataMap,\n AdvancedFilterOptions,\n PendingDataErrorMap,\n QuickFilterMap,\n OperationMap,\n} from './CommonTypes';\nimport ColumnHeaderGroup from './ColumnHeaderGroup';\n\nconst log = Log.module('IrisGrid');\n\nconst UPDATE_DOWNLOAD_THROTTLE = 500;\n\nconst SET_FILTER_DEBOUNCE = 250;\n\nconst SEEK_ROW_DEBOUNCE = 250;\n\nconst SET_CONDITIONAL_FORMAT_DEBOUNCE = 250;\n\nconst DEFAULT_AGGREGATION_SETTINGS = Object.freeze({\n aggregations: EMPTY_ARRAY,\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: ReadonlyAdvancedFilterMap;\n aggregationSettings: AggregationSettings;\n customColumns: readonly ColumnName[];\n quickFilters: ReadonlyQuickFilterMap;\n reverseType: ReverseType;\n rollupConfig?: UIRollupConfig;\n searchFilter?: FilterCondition;\n selectDistinctColumns: readonly ColumnName[];\n sorts: readonly 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}\nexport type FilterData = {\n operator: FilterTypeValue;\n text: string;\n value: unknown;\n startColumnIndex: number;\n};\n\nexport type FilterMap = Map<\n ColumnName,\n {\n columnType: string;\n filterList: FilterData[];\n }\n>;\n\nexport interface IrisGridContextMenuData {\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}\n\nexport interface IrisGridProps {\n children: React.ReactNode;\n advancedFilters: ReadonlyAdvancedFilterMap;\n advancedSettings: Map<AdvancedSettingsType, boolean>;\n alwaysFetchColumns: readonly ColumnName[];\n isFilterBarShown: boolean;\n applyInputFiltersOnInit: boolean;\n conditionalFormats: readonly SidebarFormattingRule[];\n customColumnFormatMap: Map<ColumnName, FormattingRule>;\n movedColumns: readonly MoveOperation[];\n movedRows: readonly MoveOperation[];\n inputFilters: readonly InputFilter[];\n customFilters: readonly 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 | null;\n partitionColumn: Column | null;\n sorts: readonly Sort[];\n reverseType: ReverseType;\n quickFilters: ReadonlyQuickFilterMap | null;\n customColumns: readonly ColumnName[];\n selectDistinctColumns: readonly ColumnName[];\n settings?: Settings;\n userColumnWidths: ModelSizeMap;\n userRowHeights: ModelSizeMap;\n onSelectionChanged: (gridRanges: readonly 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: readonly ColumnName[];\n invertSearchColumns: boolean;\n\n // eslint-disable-next-line react/no-unused-prop-types\n onContextMenu: (data: IrisGridContextMenuData) => ResolvableContextAction[];\n\n pendingDataMap?: PendingDataMap;\n getDownloadWorker: () => Promise<ServiceWorker>;\n\n canCopy: boolean;\n canDownloadCsv: boolean;\n frozenColumns: readonly ColumnName[];\n\n // Theme override for IrisGridTheme\n theme: GridThemeType;\n\n canToggleSearch: boolean;\n\n columnHeaderGroups?: readonly ColumnHeaderGroup[];\n}\n\nexport interface IrisGridState {\n isFilterBarShown: boolean;\n isSelectingPartition: boolean;\n focusedFilterBarColumn: number | null;\n metricCalculator: IrisGridMetricCalculator;\n metrics?: GridMetrics;\n keyHandlers: readonly KeyHandler[];\n mouseHandlers: readonly GridMouseHandler[];\n\n partition: string | null;\n partitionColumn: Column | null;\n partitionTable: Table | null;\n partitionFilters: readonly 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: ReadonlyQuickFilterMap;\n advancedFilters: ReadonlyAdvancedFilterMap;\n shownAdvancedFilter: number | null;\n hoverAdvancedFilter: number | null;\n\n sorts: readonly Sort[];\n reverseType: ReverseType;\n customColumns: readonly ColumnName[];\n selectDistinctColumns: readonly ColumnName[];\n\n // selected range in table\n selectedRanges: readonly 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: readonly MoveOperation[];\n movedRows: readonly MoveOperation[];\n\n shownColumnTooltip: number | null;\n\n formatter: Formatter;\n isMenuShown: boolean;\n customColumnFormatMap: Map<ColumnName, FormattingRule>;\n\n conditionalFormats: readonly 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: readonly ColumnName[];\n invertSearchColumns: boolean;\n\n rollupConfig?: UIRollupConfig;\n rollupSelectedColumns: readonly ColumnName[];\n aggregationSettings: AggregationSettings;\n selectedAggregation: Aggregation | null;\n\n openOptions: readonly OptionItem[];\n\n pendingRowCount: number;\n pendingDataMap: PendingDataMap;\n pendingDataErrors: PendingDataErrorMap;\n pendingSavePromise: Promise<void> | null;\n pendingSaveError: string | null;\n\n toastMessage: JSX.Element | null;\n frozenColumns: readonly ColumnName[];\n showOverflowModal: boolean;\n overflowText: string;\n overflowButtonTooltipProps: CSSProperties | null;\n expandCellTooltipProps: CSSProperties | null;\n expandTooltipDisplayValue: string;\n linkHoverTooltipProps: CSSProperties | null;\n linkHoverDisplayValue: string;\n\n gotoRow: string;\n gotoRowError: string;\n gotoValueError: string;\n isGotoShown: boolean;\n\n gotoValueSelectedColumnName: ColumnName;\n gotoValueSelectedFilter: FilterTypeValue;\n gotoValue: string;\n\n columnHeaderGroups: readonly ColumnHeaderGroup[];\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: EMPTY_MAP,\n advancedSettings: EMPTY_MAP,\n alwaysFetchColumns: EMPTY_ARRAY,\n conditionalFormats: EMPTY_ARRAY,\n customColumnFormatMap: EMPTY_MAP,\n isFilterBarShown: false,\n applyInputFiltersOnInit: false,\n movedColumns: EMPTY_ARRAY,\n movedRows: EMPTY_ARRAY,\n inputFilters: EMPTY_ARRAY,\n customFilters: EMPTY_ARRAY,\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: EMPTY_MAP,\n selectDistinctColumns: EMPTY_ARRAY,\n sorts: EMPTY_ARRAY,\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n customColumns: EMPTY_ARRAY,\n aggregationSettings: DEFAULT_AGGREGATION_SETTINGS,\n rollupConfig: undefined,\n userColumnWidths: EMPTY_MAP,\n userRowHeights: EMPTY_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: EMPTY_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: EMPTY_ARRAY,\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 constructor(props: IrisGridProps) {\n super(props);\n\n this.handleAdvancedFilterChange =\n this.handleAdvancedFilterChange.bind(this);\n this.handleAdvancedFilterSortChange =\n this.handleAdvancedFilterSortChange.bind(this);\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.handleHeaderGroupsChanged = this.handleHeaderGroupsChanged.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 =\n this.handleConditionalFormatCreate.bind(this);\n this.handleConditionalFormatEdit =\n this.handleConditionalFormatEdit.bind(this);\n this.handleConditionalFormatsChange =\n this.handleConditionalFormatsChange.bind(this);\n this.handleConditionalFormatEditorSave =\n this.handleConditionalFormatEditorSave.bind(this);\n this.handleConditionalFormatEditorCancel =\n this.handleConditionalFormatEditorCancel.bind(this);\n this.handleUpdateCustomColumns = this.handleUpdateCustomColumns.bind(this);\n this.handleCustomColumnsChanged =\n this.handleCustomColumnsChanged.bind(this);\n this.handleSelectDistinctChanged =\n this.handleSelectDistinctChanged.bind(this);\n this.handlePendingDataUpdated = this.handlePendingDataUpdated.bind(this);\n this.handlePendingCommitClicked =\n this.handlePendingCommitClicked.bind(this);\n this.handlePendingDiscardClicked =\n this.handlePendingDiscardClicked.bind(this);\n this.handleGotoRowSelectedRowNumberSubmit =\n this.handleGotoRowSelectedRowNumberSubmit.bind(this);\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 =\n this.handleColumnVisibilityChanged.bind(this);\n this.handleColumnVisibilityReset =\n this.handleColumnVisibilityReset.bind(this);\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 =\n this.handleGotoRowSelectedRowNumberChanged.bind(this);\n this.handleGotoValueSelectedColumnNameChanged =\n this.handleGotoValueSelectedColumnNameChanged.bind(this);\n this.handleGotoValueSelectedFilterChanged =\n this.handleGotoValueSelectedFilterChanged.bind(this);\n this.handleGotoValueChanged = this.handleGotoValueChanged.bind(this);\n this.handleGotoValueSubmitted = this.handleGotoValueSubmitted.bind(this);\n\n this.grid = null;\n this.gridWrapper = null;\n this.lastLoadedConfig = null;\n this.pending = new Pending();\n this.globalColumnFormats = EMPTY_ARRAY;\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 columnHeaderGroups,\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 { dh } = model;\n const mouseHandlers = [\n new IrisGridCellOverflowMouseHandler(this),\n new IrisGridRowTreeMouseHandler(this),\n new IrisGridTokenMouseHandler(this),\n new IrisGridColumnSelectMouseHandler(this),\n new IrisGridColumnTooltipMouseHandler(this),\n new IrisGridSortMouseHandler(this),\n new IrisGridFilterMouseHandler(this),\n new IrisGridContextMenuHandler(this, dh),\n new IrisGridDataSelectMouseHandler(this),\n new PendingMouseHandler(this),\n ];\n\n const movedColumns =\n movedColumnsProp.length > 0\n ? movedColumnsProp\n : model.initialMovedColumns;\n const movedRows =\n movedRowsProp.length > 0 ? movedRowsProp : model.initialMovedRows;\n\n const metricCalculator = new IrisGridMetricCalculator({\n userColumnWidths: new Map(userColumnWidths),\n userRowHeights: new Map(userRowHeights),\n movedColumns,\n initialColumnWidths: new Map(\n model?.layoutHints?.hiddenColumns?.map(name => [\n model.getColumnIndexByName(name),\n 0,\n ])\n ),\n });\n const searchColumns = selectedSearchColumns ?? [];\n const searchFilter = CrossColumnSearch.createSearchFilter(\n dh,\n searchValue,\n searchColumns,\n model.columns,\n invertSearchColumns\n );\n\n this.tableUtils = new TableUtils(dh);\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(dh),\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 expandCellTooltipProps: null,\n expandTooltipDisplayValue: 'expand',\n linkHoverTooltipProps: null,\n linkHoverDisplayValue: '',\n isGotoShown: false,\n gotoRow: '',\n gotoRowError: '',\n gotoValueError: '',\n\n gotoValueSelectedColumnName: model.columns[0]?.name ?? '',\n gotoValueSelectedFilter: FilterType.eqIgnoreCase,\n gotoValue: '',\n columnHeaderGroups: columnHeaderGroups ?? model.initialColumnHeaderGroups,\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?: readonly 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 tableUtils: TableUtils;\n\n getAdvancedMenuOpenedHandler = memoize(\n (column: ModelIndex) => this.handleAdvancedMenuOpened.bind(this, column),\n { max: 100 }\n );\n\n getCachedAdvancedFilterMenuActions = memoize(\n (\n model: IrisGridModel,\n column: Column,\n advancedFilterOptions: AdvancedFilterOptions | undefined,\n sortDirection: SortDirection | undefined,\n formatter: 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 tableUtils={this.tableUtils}\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: Action,\n toggleSearchBarAction: Action,\n toggleGotoRowAction: Action,\n isFilterBarShown: boolean,\n showSearchBar: boolean,\n canDownloadCsv: boolean,\n canToggleSearch: boolean,\n showGotoRow: boolean,\n hasAdvancedSettings: boolean\n ): readonly OptionItem[] => {\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: 'Organize Columns',\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: '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 Object.freeze(optionItems);\n },\n { max: 1 }\n );\n\n getCachedHiddenColumns = memoize(\n (\n metricCalculator: IrisGridMetricCalculator,\n userColumnWidths: ModelSizeMap\n ): readonly ModelIndex[] =>\n IrisGridUtils.getHiddenColumns(\n new Map([...metricCalculator.initialColumnWidths, ...userColumnWidths])\n ),\n { max: 1 }\n );\n\n getAggregationMap = memoize(\n (\n columns: readonly Column[],\n aggregations: readonly Aggregation[]\n ): ReadonlyAggregationMap => {\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 (\n columns: readonly Column[],\n aggregations: readonly Aggregation[]\n ): ReadonlyOperationMap => {\n const operationMap: OperationMap = {};\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] = Object.freeze(newOperations);\n });\n });\n return operationMap;\n }\n );\n\n getOperationOrder = memoize(\n (aggregations: readonly Aggregation[]): AggregationOperation[] =>\n aggregations\n .map((a: Aggregation) => a.operation)\n .filter(\n (o: AggregationOperation) => !AggregationUtils.isRollupOperation(o)\n )\n );\n\n getCachedFormatColumns = memoize(\n (\n dh: DhType,\n columns: readonly Column[],\n rules: readonly SidebarFormattingRule[]\n ) => getFormatColumns(dh, columns, rules)\n );\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 dh: DhType,\n columns: readonly Column[],\n rulesParam: readonly 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(dh, columns, rules);\n }\n\n return this.getCachedFormatColumns(dh, columns, rulesParam);\n }\n );\n\n getModelRollupConfig = memoize(\n (\n originalColumns: readonly Column[],\n config: UIRollupConfig | undefined,\n aggregationSettings: AggregationSettings\n ) =>\n IrisGridUtils.getModelRollupConfig(\n originalColumns,\n config,\n aggregationSettings\n )\n );\n\n getModelTotalsConfig = memoize(\n (\n columns: readonly Column[],\n config: UIRollupConfig | undefined,\n aggregationSettings: AggregationSettings\n ): 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: GridRangeIndex,\n isFilterBarShown: boolean,\n isSelectingColumn: boolean,\n loadingScrimProgress: number | null,\n quickFilters: ReadonlyQuickFilterMap,\n advancedFilters: ReadonlyAdvancedFilterMap,\n sorts: readonly Sort[],\n reverseType: ReverseType,\n rollupConfig: UIRollupConfig | undefined,\n isMenuShown: boolean\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: readonly FilterCondition[],\n quickFilters: ReadonlyQuickFilterMap,\n advancedFilters: ReadonlyAdvancedFilterMap,\n partitionFilters: readonly 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 { dh } = model;\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 formatted 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 makeQuickFilter(\n column: Column,\n text: string,\n timeZone: string\n ): FilterCondition | null {\n try {\n return this.tableUtils.makeQuickFilter(column, text, timeZone);\n } catch (err) {\n log.error('Error creating quick filter', err);\n }\n return null;\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: this.makeQuickFilter(column, value, formatter.timeZone),\n });\n return true;\n }\n return quickFilters.delete(modelIndex);\n }\n\n setAdvancedFilterMap(advancedFilters: ReadonlyAdvancedFilterMap): 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 | null,\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, filterList }, 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 const combinedText = IrisGridUtils.combineFiltersFromList(\n columnType,\n filterList\n );\n if (combinedText.length === 0) {\n this.removeQuickFilter(columnIndex);\n } else {\n const { formatter } = model;\n this.setQuickFilter(\n columnIndex,\n this.makeQuickFilter(column, combinedText, formatter.timeZone),\n `${combinedText}`\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 = this.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: this.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 =\n FormatterUtils.getDateTimeFormatterOptions(settings);\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: readonly ColumnName[],\n columns: readonly Column[],\n movedColumns: readonly MoveOperation[],\n floatingLeftColumnCount: number,\n floatingRightColumnCount: number,\n draggingRange?: BoundedAxisRange\n ): readonly ColumnName[] => {\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 Object.freeze([...columnSet]);\n }\n );\n\n updateFormatter(\n updatedFormats: { customColumnFormatMap?: Map<ColumnName, FormattingRule> },\n forceUpdate = true\n ): void {\n const { customColumnFormatMap } = this.state;\n const { model } = this.props;\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 model.dh,\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 model.dh,\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 { model } = this.props;\n const partitionFilter = partitionColumn\n .filter()\n .eq(model.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 copyToClipboard(value).catch(e => log.error('Unable to copy cell', e));\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: readonly 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(\n metricState,\n column,\n metricCalculator.getVisibleWidth(metricState)\n );\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: readonly ModelIndex[],\n isVisible: boolean\n ): void {\n const { metricCalculator, metrics } = this.state;\n assertNotNull(metrics);\n if (isVisible) {\n modelIndexes.forEach(modelIndex => {\n const defaultWidth =\n metricCalculator.initialColumnWidths.get(modelIndex);\n const calculatedWidth = getOrThrow(\n metrics.calculatedColumnWidths,\n modelIndex\n );\n\n if (defaultWidth !== calculatedWidth) {\n metricCalculator.setColumnWidth(modelIndex, calculatedWidth);\n } else {\n metricCalculator.resetColumnWidth(modelIndex);\n }\n });\n } else {\n modelIndexes.forEach(modelIndex => {\n metricCalculator.setColumnWidth(modelIndex, 0);\n });\n }\n this.grid?.forceUpdate();\n }\n\n handleColumnVisibilityReset(): void {\n const { metricCalculator, metrics } = this.state;\n const { model } = this.props;\n assertNotNull(metrics);\n for (let i = 0; i < metrics.columnCount; i += 1) {\n metricCalculator.resetColumnWidth(i);\n }\n this.handleMovedColumnsChanged(model.initialMovedColumns);\n this.handleHeaderGroupsChanged(model.initialColumnHeaderGroups);\n this.setState({\n frozenColumns: model.layoutHints?.frozenColumns ?? [],\n });\n }\n\n handleCrossColumnSearch(\n searchValue: string,\n selectedSearchColumns: readonly ColumnName[],\n invertSearchColumns: boolean\n ): void {\n const { model } = this.props;\n this.startLoading('Searching...');\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: readonly ColumnName[],\n columns: readonly Column[],\n invertSearchColumns: boolean\n ): void => {\n const { model } = this.props;\n const searchFilter = CrossColumnSearch.createSearchFilter(\n model.dh,\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?.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 if (partitionColumn == null) {\n return;\n }\n onPartitionAppend(partitionColumn, value);\n }\n\n handlePartitionChange(partition: string): void {\n const { partitionColumn } = this.state;\n if (partitionColumn == null) {\n return;\n }\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 modelColumn = this.getModelColumn(columnIndex);\n assertNotNull(modelColumn);\n if (model.isColumnSortable(columnIndex)) {\n const { sorts: currentSorts } = this.state;\n const sorts = TableUtils.toggleSortForColumn(\n currentSorts,\n model.columns,\n modelColumn,\n addToExisting\n );\n\n this.updateSorts(sorts);\n } else {\n log.debug('Column type was not sortable', model.columns[columnIndex]);\n }\n }\n\n updateSorts(sorts: readonly 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 { dh } = model;\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 = '', value = '', columnName = ''): void {\n const { isGotoShown } = this.state;\n if (row || value) {\n // if invoked with a row, keep open instead of toggle\n this.setState({\n isGotoShown: true,\n gotoRow: row,\n gotoValue: value,\n gotoValueSelectedColumnName: columnName,\n gotoRowError: '',\n gotoValueError: '',\n });\n this.focusRowInGrid(row);\n return;\n }\n\n const cursorRow = this.grid?.state.cursorRow;\n const cursorColumn = this.grid?.state.cursorColumn;\n\n if (cursorRow == null || cursorColumn == null) {\n // if a cell is not selected / grid is not rendered\n this.setState({\n isGotoShown: !isGotoShown,\n gotoRow: '',\n gotoValue: '',\n gotoRowError: '',\n gotoValueError: '',\n });\n return;\n }\n // if a row is selected\n const { model } = this.props;\n const { name, type } = model.columns[cursorColumn];\n\n const cellValue = model.valueForCell(cursorColumn, cursorRow);\n const text = IrisGridUtils.convertValueToText(cellValue, type);\n this.setState({\n isGotoShown: !isGotoShown,\n gotoRow: `${cursorRow}`,\n gotoValue: text,\n gotoValueSelectedColumnName: name,\n gotoRowError: '',\n gotoValueError: '',\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 =\n document?.activeElement?.classList.contains('grid-cell-input-field');\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 visibleIndex = this.getVisibleColumn(i);\n const isExpandable =\n isExpandableGridModel(model) && model.isRowExpandable(rowIndex);\n const isGrouped = groupedColumns.find(c => c.name === name) != null;\n dataMap[name] = {\n value,\n text,\n type,\n isGrouped,\n isExpandable,\n visibleIndex,\n };\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 columnName = model.columns[columnIndex].name;\n const oldSort = TableUtils.getSortForColumn(model.sort, columnName);\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 columnName,\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({ isGotoShown: true });\n }\n\n handleGotoRowClosed(): void {\n this.setState({ isGotoShown: 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 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 this.stopLoading();\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?: readonly 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: readonly MoveOperation[],\n onChangeApplied?: () => void\n ): void {\n this.setState({ movedColumns }, onChangeApplied);\n }\n\n handleHeaderGroupsChanged(columnHeaderGroups: readonly ColumnGroup[]): void {\n const { model } = this.props;\n this.setState(\n {\n columnHeaderGroups: IrisGridUtils.parseColumnHeaderGroups(\n model,\n columnHeaderGroups\n ).groups,\n },\n () => this.grid?.forceUpdate()\n );\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: readonly 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: readonly 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 =\n 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 if (customColumns.length > 0) {\n // If there are no custom columns, the change handler never fires\n // This causes the loader to stay until canceled by the user\n this.startLoading('Applying custom columns...');\n }\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 frozenColumns: [],\n sorts: [],\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n selectDistinctColumns: [],\n });\n }\n\n handleSelectDistinctChanged(columnNames: readonly 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 snapshotRanges: readonly GridRange[],\n modelRanges: readonly GridRange[],\n includeColumnHeaders: boolean,\n useUnformattedValues: boolean\n ): void {\n const { canDownloadCsv } = this.props;\n if (canDownloadCsv) {\n log.info(\n 'start table downloading',\n fileName,\n frozenTable,\n tableSubscription,\n snapshotRanges,\n modelRanges,\n includeColumnHeaders,\n useUnformattedValues\n );\n this.setState(() => {\n if (this.tableSaver) {\n this.tableSaver.startDownload(\n fileName,\n frozenTable,\n tableSubscription,\n snapshotRanges,\n modelRanges,\n includeColumnHeaders,\n useUnformattedValues\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 async seekRow(inputString: string, isBackwards = false): Promise<void> {\n const {\n gotoValueSelectedColumnName: selectedColumnName,\n gotoValueSelectedFilter,\n } = this.state;\n const { model } = this.props;\n const { dh } = model;\n if (!model.isSeekRowAvailable) {\n return;\n }\n\n if (inputString === '') {\n return;\n }\n const selectedColumn = IrisGridUtils.getColumnByName(\n model.columns,\n selectedColumnName\n );\n\n if (selectedColumn === undefined) {\n return;\n }\n\n let searchFromRow = this.grid?.state.cursorRow;\n\n if (searchFromRow == null) {\n searchFromRow = 0;\n }\n\n const isContains =\n gotoValueSelectedFilter === FilterType.contains ||\n gotoValueSelectedFilter === FilterType.containsIgnoreCase;\n const isIgnoreCase =\n gotoValueSelectedFilter === FilterType.eqIgnoreCase ||\n gotoValueSelectedFilter === FilterType.containsIgnoreCase;\n\n try {\n const { formatter } = model;\n const columnDataType = TableUtils.getNormalizedType(selectedColumn.type);\n\n let rowIndex;\n\n switch (columnDataType) {\n case TableUtils.dataType.CHAR:\n case TableUtils.dataType.STRING: {\n rowIndex = await model.seekRow(\n searchFromRow,\n selectedColumn,\n dh.ValueType.STRING,\n inputString,\n isIgnoreCase,\n isContains,\n isBackwards ?? false\n );\n break;\n }\n case TableUtils.dataType.DATETIME: {\n const [startDate] = DateUtils.parseDateRange(\n dh,\n inputString,\n formatter.timeZone\n );\n rowIndex = await model.seekRow(\n searchFromRow,\n selectedColumn,\n dh.ValueType.DATETIME,\n startDate,\n undefined,\n undefined,\n isBackwards ?? false\n );\n break;\n }\n case TableUtils.dataType.DECIMAL:\n case TableUtils.dataType.INT: {\n if (\n !TableUtils.isBigDecimalType(selectedColumn.type) &&\n !TableUtils.isBigIntegerType(selectedColumn.type)\n ) {\n let inputValue = parseInt(inputString, 10);\n if (inputString === '-Infinity') {\n inputValue = Number.NEGATIVE_INFINITY;\n } else if (inputString === 'Infinity') {\n inputValue = Number.POSITIVE_INFINITY;\n }\n\n rowIndex = await model.seekRow(\n searchFromRow,\n selectedColumn,\n dh.ValueType.NUMBER,\n inputValue,\n undefined,\n undefined,\n isBackwards ?? false\n );\n } else {\n rowIndex = await model.seekRow(\n searchFromRow,\n selectedColumn,\n dh.ValueType.STRING,\n inputString,\n undefined,\n undefined,\n isBackwards ?? false\n );\n }\n break;\n }\n default: {\n rowIndex = await model.seekRow(\n searchFromRow,\n selectedColumn,\n dh.ValueType.STRING,\n this.tableUtils.makeValue(\n selectedColumn.type,\n inputString,\n formatter.timeZone\n ),\n undefined,\n undefined,\n isBackwards ?? false\n );\n }\n }\n\n this.grid?.setFocusRow(rowIndex);\n this.setState({ gotoValueError: '' });\n } catch (e: unknown) {\n this.setState({ gotoValueError: 'invalid input' });\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: readonly 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 allColumnXs,\n allColumnWidths,\n width,\n columnHeaderMaxDepth,\n } = metrics;\n const columnX = allColumnXs.get(shownColumnTooltip);\n const columnWidth = allColumnWidths.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 getExpandCellTooltip = memoize(\n (expandCellTooltipProps: CSSProperties): ReactNode => {\n if (expandCellTooltipProps == null) {\n return null;\n }\n\n const { expandTooltipDisplayValue } = this.state;\n\n const wrapperStyle: CSSProperties = {\n position: 'absolute',\n ...expandCellTooltipProps,\n pointerEvents: 'none',\n };\n\n const popperOptions: PopperOptions = {\n placement: 'bottom-start',\n };\n\n return (\n <div style={wrapperStyle}>\n <Tooltip\n key={Date.now()}\n options={popperOptions}\n ref={this.handleTooltipRef}\n >\n <div style={{ textAlign: 'left' }}>\n Click to {expandTooltipDisplayValue} row\n <br />\n {ContextActionUtils.isMacPlatform() ? '⌘' : 'Ctrl+'}Click to\n expand row and all children\n </div>\n </Tooltip>\n </div>\n );\n }\n );\n\n getLinkHoverTooltip = memoize(\n (linkHoverTooltipProps: CSSProperties): ReactNode => {\n if (linkHoverTooltipProps == null) {\n return null;\n }\n\n const { linkHoverDisplayValue } = this.state;\n\n const wrapperStyle: CSSProperties = {\n position: 'absolute',\n ...linkHoverTooltipProps,\n pointerEvents: 'none',\n };\n\n const popperOptions: PopperOptions = {\n placement: 'bottom',\n };\n\n return (\n <div style={wrapperStyle}>\n <Tooltip options={popperOptions} ref={this.handleTooltipRef}>\n <div className=\"link-hover-tooltip\">\n {linkHoverDisplayValue} - Click once to follow.\n <br />\n Click and hold to select this cell.\n </div>\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: '', gotoValueError: '' });\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: '', gotoValueError: '' });\n this.grid?.setFocusRow(0);\n } else if (rowInt < 0) {\n this.setState({ gotoRowError: '', gotoValueError: '' });\n this.grid?.setFocusRow(rowInt + rowCount);\n } else {\n this.grid?.setFocusRow(rowInt - 1);\n this.setState({ gotoRowError: '', gotoValueError: '' });\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 allColumnXs,\n allColumnWidths,\n width,\n } = metrics;\n const columnX = allColumnXs.get(visibleIndex);\n const columnWidth = allColumnWidths.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 handleGotoValueSelectedColumnNameChanged(columnName: ColumnName): void {\n const { model } = this.props;\n const cursorRow = this.grid?.state.cursorRow;\n\n if (cursorRow != null) {\n const index = model.getColumnIndexByName(columnName);\n const column = IrisGridUtils.getColumnByName(model.columns, columnName);\n if (index == null || column == null) {\n return;\n }\n const value = model.valueForCell(index, cursorRow);\n const text = IrisGridUtils.convertValueToText(value, column.type);\n this.setState({\n gotoValueSelectedColumnName: columnName,\n gotoValue: text,\n gotoValueError: '',\n });\n }\n this.setState({\n gotoValueSelectedColumnName: columnName,\n gotoValueError: '',\n });\n }\n\n handleGotoValueSelectedFilterChanged(value: FilterTypeValue): void {\n this.setState({ gotoValueSelectedFilter: value, gotoValueError: '' });\n }\n\n handleGotoValueChanged = (input: string): void => {\n this.setState({ gotoValue: input });\n this.debouncedSeekRow(input);\n };\n\n debouncedSeekRow = debounce((input: string): void => {\n this.seekRow(input);\n }, SEEK_ROW_DEBOUNCE);\n\n handleGotoValueSubmitted(isBackwards?: boolean): void {\n const { gotoValue } = this.state;\n this.seekRow(gotoValue, isBackwards);\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 columnHeaderGroups,\n showOverflowModal,\n overflowText,\n overflowButtonTooltipProps,\n expandCellTooltipProps,\n linkHoverTooltipProps,\n isGotoShown,\n gotoRow,\n gotoRowError,\n gotoValueError,\n gotoValueSelectedColumnName,\n gotoValue,\n gotoValueSelectedFilter,\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 { gridX, gridY, allColumnXs, allColumnWidths, width } = metrics;\n const columnX = allColumnXs.get(focusedFilterBarColumn);\n const columnWidth = allColumnWidths.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 { gridX, gridY, visibleColumns, allColumnXs, allColumnWidths } =\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 = allColumnXs.get(columnIndex);\n const columnWidth = allColumnWidths.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 allColumnXs,\n allColumnWidths,\n columnHeaderHeight,\n } = metrics;\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const columnIndex = visibleColumns[i];\n const columnX = allColumnXs.get(columnIndex);\n const columnWidth = allColumnWidths.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 if (column == null) {\n // Grid metrics is likely out of sync with model\n log.warn(\n `Column does not exist at index ${modelColumn} for column array of length ${model.columns.length}`\n );\n // eslint-disable-next-line no-continue\n continue;\n }\n const advancedFilter = advancedFilters.get(modelColumn);\n const { options: advancedFilterOptions } = advancedFilter || {};\n const sort = TableUtils.getSortForColumn(model.sort, column.name);\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 || isRollup,\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 isGotoShown,\n advancedSettings.size > 0\n );\n\n const hiddenColumns = this.getCachedHiddenColumns(\n metricCalculator,\n userColumnWidths\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 hiddenColumns={hiddenColumns}\n columnHeaderGroups={columnHeaderGroups}\n onColumnVisibilityChanged={this.handleColumnVisibilityChanged}\n onReset={this.handleColumnVisibilityReset}\n onMovedColumnsChanged={this.handleMovedColumnsChanged}\n onColumnHeaderGroupChanged={this.handleHeaderGroupsChanged}\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 dh={model.dh}\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 userColumnWidths={userColumnWidths}\n movedColumns={movedColumns}\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 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 && partition != null && (\n <IrisGridPartitionSelector\n dh={model.dh}\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 model.dh,\n model.columns,\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 columnHeaderGroups={columnHeaderGroups}\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 {expandCellTooltipProps &&\n this.getExpandCellTooltip(expandCellTooltipProps)}\n {linkHoverTooltipProps &&\n this.getLinkHoverTooltip(linkHoverTooltipProps)}\n </div>\n <GotoRow\n model={model}\n isShown={isGotoShown}\n gotoRow={gotoRow}\n gotoRowError={gotoRowError}\n gotoValueError={gotoValueError}\n onGotoRowSubmit={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 gotoValueSelectedColumnName={gotoValueSelectedColumnName}\n gotoValue={gotoValue}\n gotoValueFilter={gotoValueSelectedFilter}\n onGotoValueSelectedColumnNameChanged={\n this.handleGotoValueSelectedColumnNameChanged\n }\n onGotoValueSelectedFilterChanged={\n this.handleGotoValueSelectedFilterChanged\n }\n onGotoValueChanged={this.handleGotoValueChanged}\n onGotoValueSubmit={this.handleGotoValueSubmitted}\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 dh={model.dh}\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,KAAK,IAEVC,SAAS,QAIJ,OAAO;AACd,OAAOC,OAAO,MAAM,UAAU;AAC9B,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,aAAa,QAAQ,wBAAwB;AACtD,OAAOC,SAAS,MAAM,YAAY;AAClC,OAAOC,SAAS,MAAM,YAAY;AAClC,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SACEC,cAAc,EACdC,KAAK,EACLC,IAAI,EACJC,IAAI,EACJC,MAAM,EACNC,WAAW,EACXC,OAAO,EAIPC,MAAM,EACNC,kBAAkB,QAEb,uBAAuB;AAC9B,SACEC,IAAI,EAGJC,SAAS,EAGTC,SAAS,EAOTC,mBAAmB,EAEnBC,qBAAqB,QAChB,iBAAiB;AACxB,SACEC,KAAK,EACLC,cAAc,EACdC,aAAa,EACbC,oBAAoB,EACpBC,OAAO,EACPC,eAAe,EACfC,MAAM,EACNC,QAAQ,EACRC,MAAM,EACNC,OAAO,EACPC,MAAM,EACNC,QAAQ,EACRC,iBAAiB,EACjBC,gBAAgB,EAChBC,OAAO,QACF,kBAAkB;AAYzB,SACEC,SAAS,EACTC,SAAS,EACTC,cAAc,EACdC,UAAU,QAQL,wBAAwB;AAC/B,SACEC,aAAa,EACbC,eAAe,EACfC,WAAW,EACXC,SAAS,EACTC,OAAO,EACPC,YAAY,EACZC,eAAe,EACfC,UAAU,QACL,kBAAkB;AACzB,SACEC,IAAI,IAAIC,UAAU,QAEb,oBAAoB;AAC3B,OAAOC,QAAQ,MAAM,iBAAiB;AACtC,OAAOC,QAAQ,MAAM,iBAAiB;AACtC,OAAOC,KAAK,MAAM,cAAc;AAAC,SAG/BC,gBAAgB;AAAA,OAEXC,oBAAoB;AAAA,OACpBC,mBAAmB;AAAA,OACnBC,gBAAgB;AAAA,SAErBC,qBAAqB,EACrBC,cAAc,EACdC,iBAAiB;AAAA,SAGjBC,gCAAgC,EAChCC,gCAAgC,EAChCC,iCAAiC,EACjCC,0BAA0B,EAC1BC,8BAA8B,EAC9BC,0BAA0B,EAC1BC,2BAA2B,EAC3BC,wBAAwB,EACxBC,yBAAyB,EACzBC,mBAAmB;AAAA,OAEdC,cAAc;AAAA,OACdC,wBAAwB;AAAA,OACxBC,oBAAoB;AAAA,OACpBC,gBAAgB;AAAA,OAChBC,aAAa;AAAA,OACbC,gBAAgB;AAAA;AAAA,OAEhBC,qBAAqB;AAAA,SAE1BC,YAAY,EACZC,eAAe,EACfC,gBAAgB,EAChBC,YAAY,EACZC,mBAAmB,EACnBC,UAAU,EACVC,UAAU,EACVC,gBAAgB,EAChBC,UAAU,EACVC,yBAAyB;AAAA,OAEpBC,aAAa;AAAA,OACbC,iBAAiB;AAAA,OACjBC,aAAa;AAAA,OACbC,yBAAyB;AAAA,OACzBC,qBAAqB;AAAA,OACrBC,oBAAoB;AAAA,OACpBC,oBAAoB;AAAA,OAGpBC,SAAS;AAAA,OACTC,yBAAyB;AAAA,OAEzBC,uBAAuB;AAAA,OACvBC,yBAAyB;AAAA,OACzBC,OAAO;AAAA;AAAA;AA0Bd,IAAMC,GAAG,GAAG9F,GAAG,CAAC+F,MAAM,CAAC,UAAU,CAAC;AAElC,IAAMC,wBAAwB,GAAG,GAAG;AAEpC,IAAMC,mBAAmB,GAAG,GAAG;AAE/B,IAAMC,iBAAiB,GAAG,GAAG;AAE7B,IAAMC,+BAA+B,GAAG,GAAG;AAE3C,IAAMC,4BAA4B,GAAGC,MAAM,CAACC,MAAM,CAAC;EACjDC,YAAY,EAAElE,WAAW;EACzBmE,SAAS,EAAE;AACb,CAAC,CAAC;AAEF,IAAMC,wBAAwB,sCAAsC;AAEpE,SAASC,aAAa,OAoBnB;EAAA,IApBoB;IACrBC,eAAe;IACfC,mBAAmB;IACnBC,aAAa;IACbC,YAAY;IACZC,WAAW;IACXC,YAAY;IACZC,YAAY;IACZC,qBAAqB;IACrBC;EAWF,CAAC;EACC,OACER,eAAe,CAACS,IAAI,KAAK,CAAC,IAC1BR,mBAAmB,CAACL,YAAY,CAACc,MAAM,KAAK,CAAC,IAC7CR,aAAa,CAACQ,MAAM,KAAK,CAAC,IAC1BP,YAAY,CAACM,IAAI,KAAK,CAAC,IACvBL,WAAW,KAAK7E,UAAU,CAACoF,YAAY,CAACC,IAAI,IAC5CP,YAAY,IAAI,IAAI,IACpBC,YAAY,IAAI,IAAI,IACpBC,qBAAqB,CAACG,MAAM,KAAK,CAAC,IAClCF,KAAK,CAACE,MAAM,KAAK,CAAC;AAEtB;AAsMA,OAAO,MAAMG,QAAQ,SAAS9H,SAAS,CAA+B;EA4EpE+H,WAAW,CAACC,KAAoB,EAAE;IAAA;IAChC,KAAK,CAACA,KAAK,CAAC;IAAC;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;IAAA,sDA+egB/H,OAAO,CACnCgI,MAAkB,IAAK,IAAI,CAACC,wBAAwB,CAACC,IAAI,CAAC,IAAI,EAAEF,MAAM,CAAC,EACxE;MAAEG,GAAG,EAAE;IAAI,CAAC,CACb;IAAA,4DAEoCnI,OAAO,CAC1C,CACEoI,KAAoB,EACpBJ,MAAc,EACdK,qBAAwD,EACxDC,aAAwC,EACxCC,SAAoB,kBAEpB,KAAC,qBAAqB;MACpB,KAAK,EAAEH,KAAM;MACb,MAAM,EAAEJ,MAAO;MACf,cAAc,EAAE,IAAI,CAACQ,0BAA2B;MAChD,YAAY,EAAE,IAAI,CAACC,8BAA+B;MAClD,MAAM,EAAE,IAAI,CAACC,wBAAyB;MACtC,OAAO,EAAEL,qBAAsB;MAC/B,aAAa,EAAEC,aAAc;MAC7B,SAAS,EAAEC,SAAU;MACrB,UAAU,EAAE,IAAI,CAACI;IAAW,EAE/B,EACD;MAAER,GAAG,EAAE;IAAG,CAAC,CACZ;IAAA,8CAEsBnI,OAAO,CAC5B,CACE4I,uBAAgC,EAChCC,wBAAiC,EACjCC,wBAAiC,EACjCC,iBAA0B,EAC1BC,iBAA0B,EAC1BC,yBAAkC,EAClCC,iBAA0B,EAC1BC,qBAA6B,EAC7BC,qBAA6B,EAC7BC,mBAA2B,EAC3BC,gBAAyB,EACzBC,aAAsB,EACtBC,cAAuB,EACvBC,eAAwB,EACxBC,WAAoB,EACpBC,mBAA4B,KACF;MAC1B,IAAMC,WAAyB,GAAG,EAAE;MACpC,IAAIhB,uBAAuB,EAAE;QAC3BgB,WAAW,CAACC,IAAI,CAAC;UACfC,IAAI,EAAE5E,UAAU,CAAC6E,aAAa;UAC9BC,KAAK,EAAE,eAAe;UACtBC,IAAI,EAAE1I;QACR,CAAC,CAAC;MACJ;MACAqI,WAAW,CAACC,IAAI,CAAC;QACfC,IAAI,EAAE5E,UAAU,CAACgF,2BAA2B;QAC5CF,KAAK,EAAE,kBAAkB;QACzBC,IAAI,EAAE5I;MACR,CAAC,CAAC;MACF,IAAIyH,wBAAwB,EAAE;QAC5Bc,WAAW,CAACC,IAAI,CAAC;UACfC,IAAI,EAAE5E,UAAU,CAACiF,sBAAsB;UACvCH,KAAK,EAAE,wBAAwB;UAC/BC,IAAI,EAAEtI;QACR,CAAC,CAAC;MACJ;MACA,IAAIkH,wBAAwB,EAAE;QAC5Be,WAAW,CAACC,IAAI,CAAC;UACfC,IAAI,EAAE5E,UAAU,CAACkF,qBAAqB;UACtCJ,KAAK,EAAE,gBAAgB;UACvBC,IAAI,EAAEhI;QACR,CAAC,CAAC;MACJ;MACA,IAAI8G,iBAAiB,EAAE;QACrBa,WAAW,CAACC,IAAI,CAAC;UACfC,IAAI,EAAE5E,UAAU,CAACmF,WAAW;UAC5BL,KAAK,EAAE,aAAa;UACpBC,IAAI,EAAEzI;QACR,CAAC,CAAC;MACJ;MACA,IAAIwH,iBAAiB,EAAE;QACrBY,WAAW,CAACC,IAAI,CAAC;UACfC,IAAI,EAAE5E,UAAU,CAACoF,YAAY;UAC7BN,KAAK,EAAE,mBAAmB;UAC1BC,IAAI,EAAE/H;QACR,CAAC,CAAC;MACJ;MACA,IAAI+G,yBAAyB,EAAE;QAC7BW,WAAW,CAACC,IAAI,CAAC;UACfC,IAAI,EAAE5E,UAAU,CAACqF,eAAe;UAChCP,KAAK,EAAE,wBAAwB;UAC/BC,IAAI,EAAElI;QACR,CAAC,CAAC;MACJ;MACA,IAAImH,iBAAiB,IAAIM,cAAc,EAAE;QACvCI,WAAW,CAACC,IAAI,CAAC;UACfC,IAAI,EAAE5E,UAAU,CAACsF,cAAc;UAC/BR,KAAK,EAAE,cAAc;UACrBC,IAAI,EAAEvI;QACR,CAAC,CAAC;MACJ;MACA,IAAIiI,mBAAmB,EAAE;QACvBC,WAAW,CAACC,IAAI,CAAC;UACfC,IAAI,EAAE5E,UAAU,CAACuF,iBAAiB;UAClCT,KAAK,EAAE,mBAAmB;UAC1BC,IAAI,EAAE9H;QACR,CAAC,CAAC;MACJ;MACAyH,WAAW,CAACC,IAAI,CAAC;QACfC,IAAI,EAAE5E,UAAU,CAACwF,aAAa;QAC9BV,KAAK,EAAE,eAAe;QACtBW,QAAQ,EAAExB,qBAAqB,CAACyB,QAAQ,CAACC,cAAc,EAAE;QACzDZ,IAAI,EAAErI,QAAQ;QACdkJ,IAAI,EAAExB,gBAAgB;QACtByB,QAAQ,EAAE5B,qBAAqB,CAAC6B;MAClC,CAAC,CAAC;MACF,IAAIvB,eAAe,EAAE;QACnBG,WAAW,CAACC,IAAI,CAAC;UACfC,IAAI,EAAE5E,UAAU,CAAC+F,UAAU;UAC3BjB,KAAK,EAAE,YAAY;UACnBW,QAAQ,EAAEvB,qBAAqB,CAACwB,QAAQ,CAACC,cAAc,EAAE;UACzDZ,IAAI,EAAEjI,QAAQ;UACd8I,IAAI,EAAEvB,aAAa;UACnBwB,QAAQ,EAAE3B,qBAAqB,CAAC4B;QAClC,CAAC,CAAC;MACJ;MACApB,WAAW,CAACC,IAAI,CAAC;QACfC,IAAI,EAAE5E,UAAU,CAACgG,IAAI;QACrBlB,KAAK,EAAE,OAAO;QACdW,QAAQ,EAAEtB,mBAAmB,CAACuB,QAAQ,CAACC,cAAc,EAAE;QACvDZ,IAAI,EAAEnI,OAAO;QACbgJ,IAAI,EAAEpB,WAAW;QACjBqB,QAAQ,EAAE1B,mBAAmB,CAAC2B;MAChC,CAAC,CAAC;MAEF,OAAOtE,MAAM,CAACC,MAAM,CAACiD,WAAW,CAAC;IACnC,CAAC,EACD;MAAEzB,GAAG,EAAE;IAAE,CAAC,CACX;IAAA,gDAEwBnI,OAAO,CAC9B,CACEmL,gBAA0C,EAC1CC,gBAA8B,KAE9B7F,aAAa,CAAC8F,gBAAgB,CAC5B,IAAIC,GAAG,CAAC,CAAC,GAAGH,gBAAgB,CAACI,mBAAmB,EAAE,GAAGH,gBAAgB,CAAC,CAAC,CACxE,EACH;MAAEjD,GAAG,EAAE;IAAE,CAAC,CACX;IAAA,2CAEmBnI,OAAO,CACzB,CACEwL,OAA0B,EAC1B5E,YAAoC,KACT;MAC3B,IAAM6E,cAAc,GAAG,CAAC,CAA2C;MACnE7E,YAAY,CAAC8E,OAAO,CAAC,SAAqC;QAAA,IAApC;UAAEC,SAAS;UAAEC,QAAQ;UAAEC;QAAO,CAAC;QACnDJ,cAAc,CAACE,SAAS,CAAC,GAAG5G,gBAAgB,CAAC+G,uBAAuB,CAClEN,OAAO,EACPG,SAAS,EACTC,QAAQ,EACRC,MAAM,CACP;MACH,CAAC,CAAC;MACF,OAAOJ,cAAc;IACvB,CAAC,CACF;IAAA,yCAEiBzL,OAAO,CACvB,CACEwL,OAA0B,EAC1B5E,YAAoC,KACX;MACzB,IAAMmF,YAA0B,GAAG,CAAC,CAAC;MACrCnF,YAAY,CACToF,MAAM,CACJC,CAAc,IAAK,CAAClH,gBAAgB,CAACmH,iBAAiB,CAACD,CAAC,CAACN,SAAS,CAAC,CACrE,CACAD,OAAO,CAAC,SAAqC;QAAA,IAApC;UAAEC,SAAS;UAAEC,QAAQ;UAAEC;QAAO,CAAC;QACvC9G,gBAAgB,CAAC+G,uBAAuB,CACtCN,OAAO,EACPG,SAAS,EACTC,QAAQ,EACRC,MAAM,CACP,CAACH,OAAO,CAACS,IAAI,IAAI;UAAA;UAChB,IAAMC,aAAa,GAAG,CAAC,0BAAIL,YAAY,CAACI,IAAI,CAAC,mEAAI,EAAE,CAAC,EAAER,SAAS,CAAC;UAChEI,YAAY,CAACI,IAAI,CAAC,GAAGzF,MAAM,CAACC,MAAM,CAACyF,aAAa,CAAC;QACnD,CAAC,CAAC;MACJ,CAAC,CAAC;MACJ,OAAOL,YAAY;IACrB,CAAC,CACF;IAAA,2CAEmB/L,OAAO,CACxB4G,YAAoC,IACnCA,YAAY,CACTyF,GAAG,CAAEJ,CAAc,IAAKA,CAAC,CAACN,SAAS,CAAC,CACpCK,MAAM,CACJM,CAAuB,IAAK,CAACvH,gBAAgB,CAACmH,iBAAiB,CAACI,CAAC,CAAC,CACpE,CACN;IAAA,gDAEwBtM,OAAO,CAC9B,CACEuM,EAAU,EACVf,OAA0B,EAC1BgB,KAAuC,KACpCnJ,gBAAgB,CAACkJ,EAAE,EAAEf,OAAO,EAAEgB,KAAK,CAAC,CAC1C;IAAA,uDAU+BxM,OAAO,CACrC,CACEuM,EAAU,EACVf,OAA0B,EAC1BiB,UAA4C,EAC5CC,OAA+B,EAC/BC,SAAkB,KACC;MACnBxG,GAAG,CAACyG,KAAK,CACP,+BAA+B,EAC/BH,UAAU,EACVC,OAAO,EACPC,SAAS,CACV;MACD,IAAID,OAAO,KAAKG,SAAS,IAAIF,SAAS,KAAKE,SAAS,EAAE;QACpD,IAAML,KAAK,GAAG,CAAC,GAAGC,UAAU,CAAC;QAC7BD,KAAK,CAACG,SAAS,CAAC,GAAGD,OAAO;QAC1B,OAAO,IAAI,CAACI,sBAAsB,CAACP,EAAE,EAAEf,OAAO,EAAEgB,KAAK,CAAC;MACxD;MAEA,OAAO,IAAI,CAACM,sBAAsB,CAACP,EAAE,EAAEf,OAAO,EAAEiB,UAAU,CAAC;IAC7D,CAAC,CACF;IAAA,8CAEsBzM,OAAO,CAC5B,CACE+M,eAAkC,EAClCC,MAAkC,EAClC/F,mBAAwC,KAExC1B,aAAa,CAAC0H,oBAAoB,CAChCF,eAAe,EACfC,MAAM,EACN/F,mBAAmB,CACpB,CACJ;IAAA,8CAEsBjH,OAAO,CAC5B,CACEwL,OAA0B,EAC1BwB,MAAkC,EAClC/F,mBAAwC,KACT;MAAA;MAC/B,IAAM;QAAEL,YAAY;QAAEC;MAAU,CAAC,GAAGI,mBAAmB;MACvD;MACA,IACE,0BAAC+F,MAAM,aAANA,MAAM,0CAANA,MAAM,CAAExB,OAAO,oDAAf,gBAAiB9D,MAAM,yEAAI,CAAC,IAAI,CAAC,IAClC,yBAACd,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEc,MAAM,uEAAI,CAAC,MAAM,CAAC,EACjC;QACA,OAAO,IAAI;MACb;MAEA,IAAMqE,YAAY,GAAG,IAAI,CAACmB,eAAe,CAAC1B,OAAO,EAAE5E,YAAY,CAAC;MAChE,IAAMuG,cAAc,GAAG,IAAI,CAACC,iBAAiB,CAACxG,YAAY,CAAC;MAE3D,OAAO;QAAEmF,YAAY;QAAEoB,cAAc;QAAEtG;MAAU,CAAC;IACpD,CAAC,CACF;IAAA,gDAEwB7G,OAAO,CAC9B,CACEqN,iBAAiC,EACjC/D,gBAAyB,EACzBgE,iBAA0B,EAC1BC,oBAAmC,EACnCpG,YAAoC,EACpCH,eAA0C,EAC1CQ,KAAsB,EACtBJ,WAAwB,EACxBC,YAAwC,EACxCmG,WAAoB,MAChB;MACJH,iBAAiB;MACjB/D,gBAAgB;MAChBgE,iBAAiB;MACjBC,oBAAoB;MACpBpG,YAAY;MACZH,eAAe;MACfQ,KAAK;MACLJ,WAAW;MACXC,YAAY;MACZmG;IACF,CAAC,CAAC,EACF;MAAErF,GAAG,EAAE;IAAE,CAAC,CACX;IAAA,yCAEiBnI,OAAO,CACvB,CACEyN,aAAyC,EACzCtG,YAAoC,EACpCH,eAA0C,EAC1C0G,gBAA4C,EAC5CpG,YAAyC,KACtC,CACH,IAAImG,aAAa,aAAbA,aAAa,cAAbA,aAAa,GAAI,EAAE,CAAC,EACxB,IAAIC,gBAAgB,aAAhBA,gBAAgB,cAAhBA,gBAAgB,GAAI,EAAE,CAAC,EAC3B,GAAGnI,aAAa,CAACoI,uBAAuB,CAACxG,YAAY,CAAC,EACtD,GAAG5B,aAAa,CAACoI,uBAAuB,CAAC3G,eAAe,CAAC,EACzD,IAAIM,YAAY,KAAKuF,SAAS,GAAG,CAACvF,YAAY,CAAC,GAAG,EAAE,CAAC,CACtD,EACD;MAAEa,GAAG,EAAE;IAAE,CAAC,CACX;IAAA,wCAEgBnI,OAAO,CACtB,CACE4N,KAAoB,EACpBC,UAAmB,EACnBC,gBAAwB,mDAErBpJ,aAAa,GACbkJ,KAAK;MACRG,aAAa,EAAE,CAACF,UAAU;MAC1B;MACAG,cAAc,EAAEF,gBAAgB,GAAG,CAAC,GAAGF,KAAK,CAACI,cAAc,GAAG;IAAC,EAC/D,EACF;MAAE7F,GAAG,EAAE;IAAE,CAAC,CACX;IAAA,+CAuauBnI,OAAO,CAC7B,CACEiO,kBAAyC,EACzCzC,OAA0B,EAC1B0C,YAAsC,EACtCC,uBAA+B,EAC/BC,wBAAgC,EAChCC,aAAgC,KACN;MAC1B,IAAMC,eAA6B,GAAG,EAAE;MAExC,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGJ,uBAAuB,EAAEI,CAAC,IAAI,CAAC,EAAE;QACnDD,eAAe,CAACzE,IAAI,CAClB2B,OAAO,CAACtK,SAAS,CAACsN,aAAa,CAACD,CAAC,EAAEL,YAAY,CAAC,CAAC,CAAC/B,IAAI,CACvD;MACH;MAEA,KAAK,IAAIoC,EAAC,GAAG,CAAC,EAAEA,EAAC,GAAGH,wBAAwB,EAAEG,EAAC,IAAI,CAAC,EAAE;QACpDD,eAAe,CAACzE,IAAI,CAClB2B,OAAO,CAACtK,SAAS,CAACsN,aAAa,CAAChD,OAAO,CAAC9D,MAAM,GAAG,CAAC,GAAG6G,EAAC,EAAEL,YAAY,CAAC,CAAC,CACnE/B,IAAI,CACR;MACH;MAEA,IAAIkC,aAAa,EAAE;QACjB,KAAK,IAAIE,GAAC,GAAGF,aAAa,CAAC,CAAC,CAAC,EAAEE,GAAC,IAAIF,aAAa,CAAC,CAAC,CAAC,EAAEE,GAAC,IAAI,CAAC,EAAE;UAC5DD,eAAe,CAACzE,IAAI,CAClB2B,OAAO,CAACtK,SAAS,CAACsN,aAAa,CAACD,GAAC,EAAEL,YAAY,CAAC,CAAC,CAAC/B,IAAI,CACvD;QACH;MACF;MAEA,IAAMsC,SAAS,GAAG,IAAIC,GAAG,CAAC,CAAC,GAAGT,kBAAkB,EAAE,GAAGK,eAAe,CAAC,CAAC;MAEtE,OAAO5H,MAAM,CAACC,MAAM,CAAC,CAAC,GAAG8H,SAAS,CAAC,CAAC;IACtC,CAAC,CACF;IAAA,4CAueoBtL,QAAQ,CAC3B,CACEwL,WAAmB,EACnBC,qBAA4C,EAC5CpD,OAA0B,EAC1BqD,mBAA4B,KACnB;MACT,IAAM;QAAEzG;MAAM,CAAC,GAAG,IAAI,CAACL,KAAK;MAC5B,IAAMT,YAAY,GAAG9B,iBAAiB,CAACsJ,kBAAkB,CACvD1G,KAAK,CAACmE,EAAE,EACRoC,WAAW,EACXC,qBAAqB,EACrBpD,OAAO,EACPqD,mBAAmB,CACpB;MACD,IAAI,CAACE,QAAQ,CAAC;QAAEzH;MAAa,CAAC,CAAC;IACjC,CAAC,EACDhB,mBAAmB,CACpB;IAAA,6DA4qBqCnD,QAAQ,CAC3C6L,wBAAgD,IAAW;MAC1D,IAAI,CAACD,QAAQ,CAAC;QAAEC;MAAyB,CAAC,CAAC;IAC7C,CAAC,EACDxI,+BAA+B,CAChC;IAAA,sDAwb8BtD,QAAQ,CACrC,CACE+L,qBAA6B,EAC7BC,0BAAyC,KACtC;MACH,IAAM;QAAEC;MAAoB,CAAC,GAAG,IAAI,CAACC,KAAK;MAC1C,IACED,mBAAmB,KAAK/J,gBAAgB,CAACiK,eAAe,CAACC,WAAW,EACpE;QACA,IAAI,CAACP,QAAQ,CAAC;UACZE,qBAAqB;UACrBC;QACF,CAAC,CAAC;MACJ;IACF,CAAC,EACD7I,wBAAwB,CACzB;IAAA,kDAsH0BrG,OAAO,CAC/BuP,0BAAyC,IAAgB;MACxD,IAAIA,0BAA0B,IAAI,IAAI,EAAE;QACtC,OAAO,IAAI;MACb;MAEA,IAAMC,YAA2B;QAC/BC,QAAQ,EAAE;MAAU,GACjBF,0BAA0B;QAC7BG,aAAa,EAAE;MAAM,EACtB;MAED,IAAMC,aAA4B,GAAG;QACnCC,SAAS,EAAE,MAAM;QACjBC,SAAS,EAAE;UACTC,IAAI,EAAE;YACJC,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO;UAC5B;QACF;MACF,CAAC;MAED,oBACE;QAAK,KAAK,EAAEP,YAAa;QAAA,uBACvB,KAAC,OAAO;UAEN,OAAO,EAAEG,aAAc;UACvB,GAAG,EAAE,IAAI,CAACK,gBAAiB;UAAA,UAC5B;QAED,GALOC,IAAI,CAACC,GAAG,EAAE;MAKP,EACN;IAEV,CAAC,CACF;IAAA,8CAEsBlQ,OAAO,CAC3BmQ,sBAAqC,IAAgB;MACpD,IAAIA,sBAAsB,IAAI,IAAI,EAAE;QAClC,OAAO,IAAI;MACb;MAEA,IAAM;QAAEC;MAA0B,CAAC,GAAG,IAAI,CAAChB,KAAK;MAEhD,IAAMI,YAA2B;QAC/BC,QAAQ,EAAE;MAAU,GACjBU,sBAAsB;QACzBT,aAAa,EAAE;MAAM,EACtB;MAED,IAAMC,aAA4B,GAAG;QACnCC,SAAS,EAAE;MACb,CAAC;MAED,oBACE;QAAK,KAAK,EAAEJ,YAAa;QAAA,uBACvB,KAAC,OAAO;UAEN,OAAO,EAAEG,aAAc;UACvB,GAAG,EAAE,IAAI,CAACK,gBAAiB;UAAA,uBAE3B;YAAK,KAAK,EAAE;cAAEK,SAAS,EAAE;YAAO,CAAE;YAAA,WAAC,WACxB,EAACD,yBAAyB,EAAC,MACpC,6BAAM,EACLrP,kBAAkB,CAACuP,aAAa,EAAE,GAAG,GAAG,GAAG,OAAO,EAAC,sCAEtD;UAAA;QAAM,GATDL,IAAI,CAACC,GAAG,EAAE;MAUP,EACN;IAEV,CAAC,CACF;IAAA,6CAEqBlQ,OAAO,CAC1BuQ,qBAAoC,IAAgB;MACnD,IAAIA,qBAAqB,IAAI,IAAI,EAAE;QACjC,OAAO,IAAI;MACb;MAEA,IAAM;QAAEC;MAAsB,CAAC,GAAG,IAAI,CAACpB,KAAK;MAE5C,IAAMI,YAA2B;QAC/BC,QAAQ,EAAE;MAAU,GACjBc,qBAAqB;QACxBb,aAAa,EAAE;MAAM,EACtB;MAED,IAAMC,aAA4B,GAAG;QACnCC,SAAS,EAAE;MACb,CAAC;MAED,oBACE;QAAK,KAAK,EAAEJ,YAAa;QAAA,uBACvB,KAAC,OAAO;UAAC,OAAO,EAAEG,aAAc;UAAC,GAAG,EAAE,IAAI,CAACK,gBAAiB;UAAA,uBAC1D;YAAK,SAAS,EAAC,oBAAoB;YAAA,WAChCQ,qBAAqB,EAAC,0BACvB,6BAAM,uCAER;UAAA;QAAM;MACE,EACN;IAEV,CAAC,CACF;IAAA,gDAoKyBC,KAAa,IAAW;MAChD,IAAI,CAAC1B,QAAQ,CAAC;QAAE2B,SAAS,EAAED;MAAM,CAAC,CAAC;MACnC,IAAI,CAACE,gBAAgB,CAACF,KAAK,CAAC;IAC9B,CAAC;IAAA,0CAEkBtN,QAAQ,CAAEsN,KAAa,IAAW;MACnD,IAAI,CAACG,OAAO,CAACH,KAAK,CAAC;IACrB,CAAC,EAAElK,iBAAiB,CAAC;IAjwGnB,IAAI,CAACiC,0BAA0B,GAC7B,IAAI,CAACA,0BAA0B,CAACN,IAAI,CAAC,IAAI,CAAC;IAC5C,IAAI,CAACO,8BAA8B,GACjC,IAAI,CAACA,8BAA8B,CAACP,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACQ,wBAAwB,GAAG,IAAI,CAACA,wBAAwB,CAACR,IAAI,CAAC,IAAI,CAAC;IACxE,IAAI,CAACD,wBAAwB,GAAG,IAAI,CAACA,wBAAwB,CAACC,IAAI,CAAC,IAAI,CAAC;IACxE,IAAI,CAAC2I,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAAC3I,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAAC4I,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAAC5I,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAAC6I,wBAAwB,GAAG,IAAI,CAACA,wBAAwB,CAAC7I,IAAI,CAAC,IAAI,CAAC;IACxE,IAAI,CAAC8I,uBAAuB,GAAG,IAAI,CAACA,uBAAuB,CAAC9I,IAAI,CAAC,IAAI,CAAC;IACtE,IAAI,CAAC+I,wBAAwB,GAAG,IAAI,CAACA,wBAAwB,CAAC/I,IAAI,CAAC,IAAI,CAAC;IACxE,IAAI,CAACgJ,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAAChJ,IAAI,CAAC,IAAI,CAAC;IAClE,IAAI,CAACiJ,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAACjJ,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAACkJ,oBAAoB,GAAG,IAAI,CAACA,oBAAoB,CAAClJ,IAAI,CAAC,IAAI,CAAC;IAChE,IAAI,CAACmJ,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAACnJ,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAACoJ,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACpJ,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAACqJ,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACrJ,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAACsJ,eAAe,GAAG,IAAI,CAACA,eAAe,CAACtJ,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAACuJ,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAACvJ,IAAI,CAAC,IAAI,CAAC;IAClE,IAAI,CAACwJ,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAACxJ,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAACyJ,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAACzJ,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAAC0J,YAAY,GAAG,IAAI,CAACA,YAAY,CAAC1J,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAAC2J,UAAU,GAAG,IAAI,CAACA,UAAU,CAAC3J,IAAI,CAAC,IAAI,CAAC;IAC5C,IAAI,CAAC4J,eAAe,GAAG,IAAI,CAACA,eAAe,CAAC5J,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAAC6J,gBAAgB,GAAG,IAAI,CAACA,gBAAgB,CAAC7J,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAAC8J,cAAc,GAAG,IAAI,CAACA,cAAc,CAAC9J,IAAI,CAAC,IAAI,CAAC;IACpD,IAAI,CAAC+J,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAAC/J,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAACgK,sBAAsB,GAAG,IAAI,CAACA,sBAAsB,CAAChK,IAAI,CAAC,IAAI,CAAC;IACpE,IAAI,CAACiK,yBAAyB,GAAG,IAAI,CAACA,yBAAyB,CAACjK,IAAI,CAAC,IAAI,CAAC;IAC1E,IAAI,CAACkK,yBAAyB,GAAG,IAAI,CAACA,yBAAyB,CAAClK,IAAI,CAAC,IAAI,CAAC;IAC1E,IAAI,CAACmK,YAAY,GAAG,IAAI,CAACA,YAAY,CAACnK,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAAC8H,gBAAgB,GAAG,IAAI,CAACA,gBAAgB,CAAC9H,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAACoK,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACpK,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAACqK,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAACrK,IAAI,CAAC,IAAI,CAAC;IAClE,IAAI,CAACsK,6BAA6B,GAChC,IAAI,CAACA,6BAA6B,CAACtK,IAAI,CAAC,IAAI,CAAC;IAC/C,IAAI,CAACuK,2BAA2B,GAC9B,IAAI,CAACA,2BAA2B,CAACvK,IAAI,CAAC,IAAI,CAAC;IAC7C,IAAI,CAACwK,8BAA8B,GACjC,IAAI,CAACA,8BAA8B,CAACxK,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACyK,iCAAiC,GACpC,IAAI,CAACA,iCAAiC,CAACzK,IAAI,CAAC,IAAI,CAAC;IACnD,IAAI,CAAC0K,mCAAmC,GACtC,IAAI,CAACA,mCAAmC,CAAC1K,IAAI,CAAC,IAAI,CAAC;IACrD,IAAI,CAAC2K,yBAAyB,GAAG,IAAI,CAACA,yBAAyB,CAAC3K,IAAI,CAAC,IAAI,CAAC;IAC1E,IAAI,CAAC4K,0BAA0B,GAC7B,IAAI,CAACA,0BAA0B,CAAC5K,IAAI,CAAC,IAAI,CAAC;IAC5C,IAAI,CAAC6K,2BAA2B,GAC9B,IAAI,CAACA,2BAA2B,CAAC7K,IAAI,CAAC,IAAI,CAAC;IAC7C,IAAI,CAAC8K,wBAAwB,GAAG,IAAI,CAACA,wBAAwB,CAAC9K,IAAI,CAAC,IAAI,CAAC;IACxE,IAAI,CAAC+K,0BAA0B,GAC7B,IAAI,CAACA,0BAA0B,CAAC/K,IAAI,CAAC,IAAI,CAAC;IAC5C,IAAI,CAACgL,2BAA2B,GAC9B,IAAI,CAACA,2BAA2B,CAAChL,IAAI,CAAC,IAAI,CAAC;IAC7C,IAAI,CAACiL,oCAAoC,GACvC,IAAI,CAACA,oCAAoC,CAACjL,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAACkL,cAAc,GAAG,IAAI,CAACA,cAAc,CAAClL,IAAI,CAAC,IAAI,CAAC;IACpD,IAAI,CAACmL,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAACnL,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAACoL,wBAAwB,GAAG,IAAI,CAACA,wBAAwB,CAACpL,IAAI,CAAC,IAAI,CAAC;IACxE,IAAI,CAACqL,yBAAyB,GAAG,IAAI,CAACA,yBAAyB,CAACrL,IAAI,CAAC,IAAI,CAAC;IAC1E,IAAI,CAACsL,sBAAsB,GAAG,IAAI,CAACA,sBAAsB,CAACtL,IAAI,CAAC,IAAI,CAAC;IACpE,IAAI,CAACuL,uBAAuB,GAAG,IAAI,CAACA,uBAAuB,CAACvL,IAAI,CAAC,IAAI,CAAC;IACtE,IAAI,CAACwL,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAACxL,IAAI,CAAC,IAAI,CAAC;IAClE,IAAI,CAACyL,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAACzL,IAAI,CAAC,IAAI,CAAC;IAClE,IAAI,CAAC0L,uBAAuB,GAAG,IAAI,CAACA,uBAAuB,CAAC1L,IAAI,CAAC,IAAI,CAAC;IACtE,IAAI,CAAC2L,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAAC3L,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAAC4L,6BAA6B,GAChC,IAAI,CAACA,6BAA6B,CAAC5L,IAAI,CAAC,IAAI,CAAC;IAC/C,IAAI,CAAC6L,2BAA2B,GAC9B,IAAI,CAACA,2BAA2B,CAAC7L,IAAI,CAAC,IAAI,CAAC;IAC7C,IAAI,CAAC8L,uBAAuB,GAAG,IAAI,CAACA,uBAAuB,CAAC9L,IAAI,CAAC,IAAI,CAAC;IACtE,IAAI,CAAC+L,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAAC/L,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAACgM,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAAChM,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAACiM,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAACjM,IAAI,CAAC,IAAI,CAAC;IAClE,IAAI,CAACkM,qCAAqC,GACxC,IAAI,CAACA,qCAAqC,CAAClM,IAAI,CAAC,IAAI,CAAC;IACvD,IAAI,CAACmM,wCAAwC,GAC3C,IAAI,CAACA,wCAAwC,CAACnM,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAACoM,oCAAoC,GACvC,IAAI,CAACA,oCAAoC,CAACpM,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAACqM,sBAAsB,GAAG,IAAI,CAACA,sBAAsB,CAACrM,IAAI,CAAC,IAAI,CAAC;IACpE,IAAI,CAACsM,wBAAwB,GAAG,IAAI,CAACA,wBAAwB,CAACtM,IAAI,CAAC,IAAI,CAAC;IAExE,IAAI,CAACuM,IAAI,GAAG,IAAI;IAChB,IAAI,CAACC,WAAW,GAAG,IAAI;IACvB,IAAI,CAACC,gBAAgB,GAAG,IAAI;IAC5B,IAAI,CAACC,OAAO,GAAG,IAAIhS,OAAO,EAAE;IAC5B,IAAI,CAACiS,mBAAmB,GAAGnS,WAAW;IACtC,IAAI,CAACoS,oBAAoB,GAAG,CAAC,CAAC;IAC9B,IAAI,CAACC,oBAAoB,GAAG,CAAC,CAAC;IAC9B,IAAI,CAACC,wBAAwB,GAAG,KAAK;;IAErC;IACA,IAAI,CAACC,QAAQ,GAAG,IAAIxQ,gBAAgB,EAAE;IACtC,IAAI,CAACyQ,UAAU,GAAG,IAAI;IACtB,IAAI,CAACC,cAAc,gBAAGrV,KAAK,CAACsV,SAAS,EAAE;IACvC,IAAI,CAACC,WAAW,GAAG,KAAK;IACxB,IAAI,CAACC,cAAc,gBAAGxV,KAAK,CAACsV,SAAS,EAAE;IAEvC,IAAI,CAACjM,qBAAqB,GAAG;MAC3B6B,MAAM,EAAE,MAAM,IAAI,CAACuK,eAAe,EAAE;MACpC3K,QAAQ,EAAE9E,SAAS,CAAC0P,KAAK,CAACC;IAC5B,CAAC;IAED,IAAI,CAACrM,qBAAqB,GAAG;MAC3B4B,MAAM,EAAE,MAAM,IAAI,CAAC0K,eAAe,EAAE;MACpC9K,QAAQ,EAAE9E,SAAS,CAAC0P,KAAK,CAACG;IAC5B,CAAC;IAED,IAAI,CAACtM,mBAAmB,GAAG;MACzB2B,MAAM,EAAE,MAAM,IAAI,CAAC4K,aAAa,EAAE;MAClChL,QAAQ,EAAE9E,SAAS,CAAC0P,KAAK,CAACK;IAC5B,CAAC;IAED,IAAI,CAACC,aAAa,GAAG;MACnB9K,MAAM,EAAE,MAAM;QACZ,IAAM;UAAE5C;QAAM,CAAC,GAAG,IAAI,CAACL,KAAK;QAC5B,IACE5G,mBAAmB,CAACiH,KAAK,CAAC,IAC1BA,KAAK,CAACyF,UAAU,IAChBzF,KAAK,CAAC2N,cAAc,CAACtO,IAAI,GAAG,CAAC,EAC7B;UACA,IAAI,CAACuO,cAAc,EAAE,CAACC,KAAK,CAAC9P,GAAG,CAAC+P,KAAK,CAAC;QACxC;MACF,CAAC;MACDtL,QAAQ,EAAE9E,SAAS,CAACqQ,WAAW,CAACC;IAClC,CAAC;IACD,IAAI,CAACC,YAAY,GAAG;MAClBrL,MAAM,EAAE,MAAM;QACZ,IAAM;UAAE5C;QAAM,CAAC,GAAG,IAAI,CAACL,KAAK;QAC5B,IACE5G,mBAAmB,CAACiH,KAAK,CAAC,IAC1BA,KAAK,CAACyF,UAAU,IAChBzF,KAAK,CAAC2N,cAAc,CAACtO,IAAI,GAAG,CAAC,IAC7BW,KAAK,CAACkO,iBAAiB,CAAC7O,IAAI,KAAK,CAAC,EAClC;UACA,IAAI,CAAC8O,aAAa,EAAE,CAACN,KAAK,CAAC9P,GAAG,CAAC+P,KAAK,CAAC;QACvC;MACF,CAAC;MACDtL,QAAQ,EAAE9E,SAAS,CAACqQ,WAAW,CAACK;IAClC,CAAC;IACD,IAAI,CAACC,cAAc,GAAG,CACpB,IAAI,CAACtN,qBAAqB,EAC1B,IAAI,CAACC,qBAAqB,EAC1B,IAAI,CAACC,mBAAmB,EACxB,IAAI,CAACyM,aAAa,EAClB,IAAI,CAACO,YAAY,CAClB;IAED,IAAM;MACJpP,mBAAmB,EAAnBA,oBAAmB;MACnByP,kBAAkB;MAClBC,qBAAqB;MACrBrN,gBAAgB,EAAhBA,iBAAgB;MAChBsN,oBAAoB;MACpBxO,KAAK,EAALA,MAAK;MACL8F,YAAY,EAAE2I,gBAAgB;MAC9BC,SAAS,EAAEC,aAAa;MACxBC,SAAS;MACTC,eAAe;MACf5P,YAAY,EAAZA,aAAY;MACZ+D,gBAAgB,EAAhBA,iBAAgB;MAChB8L,cAAc;MACd3N,aAAa,EAAbA,cAAa;MACboF,WAAW,EAAXA,YAAW;MACXC,qBAAqB,EAArBA,sBAAqB;MACrBC,mBAAmB,EAAnBA,oBAAmB;MACnB7H,eAAe,EAAfA,gBAAe;MACfG,YAAY,EAAZA,aAAY;MACZI,qBAAqB;MACrBwO,cAAc;MACdoB,OAAO;MACPC,aAAa;MACbC;IACF,CAAC,GAAGtP,KAAK;IAET,IAAMuP,WAAyB,GAAG,CAChC,IAAI3T,iBAAiB,CAAC,IAAI,CAAC,EAC3B,IAAIF,qBAAqB,CAAC,IAAI,CAAC,CAChC;IACD,IAAI0T,OAAO,EAAE;MACXG,WAAW,CAACzN,IAAI,CAAC,IAAInG,cAAc,CAAC,IAAI,CAAC,CAAC;IAC5C;IACA,IAAM;MAAE6I,EAAE,EAAFA;IAAG,CAAC,GAAGnE,MAAK;IACpB,IAAMmP,aAAa,GAAG,CACpB,IAAI3T,gCAAgC,CAAC,IAAI,CAAC,EAC1C,IAAIM,2BAA2B,CAAC,IAAI,CAAC,EACrC,IAAIE,yBAAyB,CAAC,IAAI,CAAC,EACnC,IAAIP,gCAAgC,CAAC,IAAI,CAAC,EAC1C,IAAIC,iCAAiC,CAAC,IAAI,CAAC,EAC3C,IAAIK,wBAAwB,CAAC,IAAI,CAAC,EAClC,IAAIF,0BAA0B,CAAC,IAAI,CAAC,EACpC,IAAIF,0BAA0B,CAAC,IAAI,EAAEwI,GAAE,CAAC,EACxC,IAAIvI,8BAA8B,CAAC,IAAI,CAAC,EACxC,IAAIK,mBAAmB,CAAC,IAAI,CAAC,CAC9B;IAED,IAAM6J,aAAY,GAChB2I,gBAAgB,CAACnP,MAAM,GAAG,CAAC,GACvBmP,gBAAgB,GAChBzO,MAAK,CAACoP,mBAAmB;IAC/B,IAAMV,SAAS,GACbC,aAAa,CAACrP,MAAM,GAAG,CAAC,GAAGqP,aAAa,GAAG3O,MAAK,CAACqP,gBAAgB;IAEnE,IAAMtM,iBAAgB,GAAG,IAAI5G,wBAAwB,CAAC;MACpD6G,gBAAgB,EAAE,IAAIE,GAAG,CAACF,iBAAgB,CAAC;MAC3C8L,cAAc,EAAE,IAAI5L,GAAG,CAAC4L,cAAc,CAAC;MACvChJ,YAAY,EAAZA,aAAY;MACZ3C,mBAAmB,EAAE,IAAID,GAAG,CAC1BlD,MAAK,aAALA,MAAK,6CAALA,MAAK,CAAEsP,WAAW,gFAAlB,mBAAoBC,aAAa,0DAAjC,sBAAmCtL,GAAG,CAACF,IAAI,IAAI,CAC7C/D,MAAK,CAACwP,oBAAoB,CAACzL,IAAI,CAAC,EAChC,CAAC,CACF,CAAC;IAEN,CAAC,CAAC;IACF,IAAM0L,aAAa,GAAGjJ,sBAAqB,aAArBA,sBAAqB,cAArBA,sBAAqB,GAAI,EAAE;IACjD,IAAMtH,aAAY,GAAG9B,iBAAiB,CAACsJ,kBAAkB,CACvDvC,GAAE,EACFoC,YAAW,EACXkJ,aAAa,EACbzP,MAAK,CAACoD,OAAO,EACbqD,oBAAmB,CACpB;IAED,IAAI,CAAClG,UAAU,GAAG,IAAIpG,UAAU,CAACgK,GAAE,CAAC;IAEpC,IAAI,CAAC6C,KAAK,GAAG;MACX9F,gBAAgB,EAAhBA,iBAAgB;MAChBsN,oBAAoB;MACpBkB,sBAAsB,EAAE,IAAI;MAC5B3M,gBAAgB,EAAhBA,iBAAgB;MAChB4M,OAAO,EAAElL,SAAS;MAClByK,WAAW;MACXC,aAAa;MAEbP,SAAS;MACTC,eAAe;MACfe,cAAc,EAAE,IAAI;MACpBtK,gBAAgB,EAAE,EAAE;MACpB;MACA;MACAvG,YAAY,EAAEA,aAAY,GAAG,IAAImE,GAAG,CAACnE,aAAY,CAAC,GAAG,IAAImE,GAAG,EAAE;MAC9DtE,eAAe,EAAE,IAAIsE,GAAG,CAACtE,gBAAe,CAAC;MACzCiR,mBAAmB,EAAE,IAAI;MACzBC,mBAAmB,EAAE,IAAI;MACzB1Q,KAAK,EAAE,EAAE;MACTJ,WAAW,EAAE7E,UAAU,CAACoF,YAAY,CAACC,IAAI;MACzCV,aAAa,EAAE,EAAE;MACjBK,qBAAqB;MAErB;MACA4Q,cAAc,EAAE,EAAE;MAElB;MACAC,aAAa,EAAE,IAAI;MAEnB;MACAC,WAAW,EAAE,IAAI;MACjB9K,oBAAoB,EAAE,IAAI;MAC1B+K,mBAAmB,EAAE,KAAK;MAE1BpK,YAAY,EAAZA,aAAY;MACZ4I,SAAS;MAETyB,kBAAkB,EAAE,IAAI;MAExBhQ,SAAS,EAAE,IAAIlG,SAAS,CAACkK,GAAE,CAAC;MAC5BiB,WAAW,EAAE,KAAK;MAClBmJ,qBAAqB,EAAE,IAAIrL,GAAG,CAACqL,qBAAqB,CAAC;MAErDD,kBAAkB;MAClB8B,0BAA0B,EAAE,IAAI;MAChCxJ,wBAAwB,EAAEnC,SAAS;MAEnC;MACAQ,iBAAiB,EAAE,IAAI;MAEvBoL,kBAAkB,EAAE,KAAK;MACzBC,OAAO,EAAE,KAAK;MACdvJ,mBAAmB,EAAE,EAAE;MACvBF,qBAAqB,EAAE,CAAC;MACxBC,0BAA0B,EAAE,CAAC;MAE7B3F,aAAa,EAAbA,cAAa;MACbjC,YAAY,EAAZA,aAAY;MACZqH,WAAW,EAAXA,YAAW;MACXC,qBAAqB,EAAEiJ,aAAa;MACpChJ,mBAAmB,EAAnBA,oBAAmB;MAEnBxH,YAAY,EAAZA,aAAY;MACZsR,qBAAqB,EAAE,EAAE;MACzB1R,mBAAmB,EAAnBA,oBAAmB;MACnB2R,mBAAmB,EAAE,IAAI;MAEzBC,WAAW,EAAE,EAAE;MAEfC,eAAe,EAAE,CAAC;MAClB/C,cAAc,EAAEA,cAAc,aAAdA,cAAc,cAAdA,cAAc,GAAI,IAAIzK,GAAG,EAAE;MAC3CgL,iBAAiB,EAAE,IAAIhL,GAAG,EAAE;MAC5ByN,kBAAkB,EAAE,IAAI;MACxBC,gBAAgB,EAAE,IAAI;MAEtBC,YAAY,EAAE,IAAI;MAClB7B,aAAa;MACb8B,iBAAiB,EAAE,KAAK;MACxBC,YAAY,EAAE,EAAE;MAChB5J,0BAA0B,EAAE,IAAI;MAChCY,sBAAsB,EAAE,IAAI;MAC5BC,yBAAyB,EAAE,QAAQ;MACnCG,qBAAqB,EAAE,IAAI;MAC3BC,qBAAqB,EAAE,EAAE;MACzB4I,WAAW,EAAE,KAAK;MAClBC,OAAO,EAAE,EAAE;MACXC,YAAY,EAAE,EAAE;MAChBC,cAAc,EAAE,EAAE;MAElBC,2BAA2B,8CAAEpR,MAAK,CAACoD,OAAO,CAAC,CAAC,CAAC,oDAAhB,gBAAkBW,IAAI,yEAAI,EAAE;MACzDsN,uBAAuB,EAAExW,UAAU,CAACyW,YAAY;MAChDhJ,SAAS,EAAE,EAAE;MACb2G,kBAAkB,EAAEA,kBAAkB,aAAlBA,kBAAkB,cAAlBA,kBAAkB,GAAIjP,MAAK,CAACuR;IAClD,CAAC;EACH;EAEAC,iBAAiB,GAAS;IACxB,IAAM;MAAE3C,eAAe;MAAE7O;IAAM,CAAC,GAAG,IAAI,CAACL,KAAK;IAC7C,IAAMC,MAAM,GACViP,eAAe,aAAfA,eAAe,cAAfA,eAAe,GAAI7O,KAAK,CAACoD,OAAO,CAACqO,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACC,iBAAiB,CAAC;IACjE,IACE3R,KAAK,CAAC4R,gBAAgB,IACtB5R,KAAK,CAAC6R,sBAAsB,IAC5BjS,MAAM,IAAI,IAAI,EACd;MACA,IAAI,CAACkS,mBAAmB,CAAClS,MAAM,CAAC;IAClC,CAAC,MAAM;MACL,IAAI,CAACmS,SAAS,EAAE;IAClB;IACA,IAAI,CAACC,cAAc,CAAChS,KAAK,CAAC;EAC5B;EAEAiS,kBAAkB,CAACC,SAAwB,EAAQ;IACjD,IAAM;MACJC,YAAY;MACZjN,iBAAiB;MACjBkN,QAAQ;MACRpS,KAAK;MACLqF,aAAa;MACbjG;IACF,CAAC,GAAG,IAAI,CAACO,KAAK;IAEd,IAAIK,KAAK,KAAKkS,SAAS,CAAClS,KAAK,EAAE;MAC7B,IAAI,CAACqS,aAAa,CAACH,SAAS,CAAClS,KAAK,CAAC;MACnC,IAAI,CAACgS,cAAc,CAAChS,KAAK,CAAC;IAC5B;IAEA,IAAMsS,mBAAmB,GACvBH,YAAY,KAAKD,SAAS,CAACC,YAAY,GACnCA,YAAY,CAACvO,MAAM,CACjB2O,WAAW,IAAI,CAACL,SAAS,CAACC,YAAY,CAACK,QAAQ,CAACD,WAAW,CAAC,CAC7D,GACD,EAAE;IACR,IAAID,mBAAmB,CAAChT,MAAM,GAAG,CAAC,EAAE;MAAA;MAClC,IAAM;QAAEmT;MAAiB,CAAC,GAAG,IAAI,CAAC9S,KAAK;MACvC,IAAM+S,sBAAsB,4BAC1BD,gBAAgB,CAACE,GAAG,CAClBnV,oBAAoB,CAACoV,wCAAwC,CAC9D,yEAAI,KAAK;MACZ,IAAIF,sBAAsB,EAAE;QAC1B,IAAI,CAACG,mBAAmB,EAAE;QAC1B,IAAI,CAACC,qBAAqB,EAAE;MAC9B;MACA,IAAI,CAACC,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC;MACvC,IAAI,CAACC,iBAAiB,CAACV,mBAAmB,EAAEI,sBAAsB,CAAC;IACrE;IAEA,IAAIxN,iBAAiB,KAAKgN,SAAS,CAAChN,iBAAiB,EAAE;MACrD,IAAI,CAAC+N,oBAAoB,EAAE;IAC7B;IACA,IAAIb,QAAQ,KAAKF,SAAS,CAACE,QAAQ,EAAE;MACnC,IAAI,CAACc,uBAAuB,CAACd,QAAQ,CAAC;IACxC;IACA,IAAI/M,aAAa,KAAK6M,SAAS,CAAC7M,aAAa,EAAE;MAC7C,IAAI,CAAC0N,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC;IACzC;IACA,IAAI3T,KAAK,KAAK8S,SAAS,CAAC9S,KAAK,EAAE;MAC7B,IAAI,CAAC+T,WAAW,CAAC/T,KAAK,CAAC;IACzB;IACA,IAAM;MAAEgU,qBAAqB;MAAEC;IAAuB,CAAC,GAAG,IAAI;IAC9D,IAAID,qBAAqB,IAAI,IAAI,IAAIC,sBAAsB,IAAI,IAAI,EAAE;MACnEC,MAAM,CAACC,qBAAqB,CAAC,MAAM;QACjC,IAAMzL,GAAG,GAAGD,IAAI,CAACC,GAAG,EAAE;QACtB,IAAM0L,WAAW,GAAG1L,GAAG,GAAGsL,qBAAqB;QAC/C,IAAMK,SAAS,GAAGJ,sBAAsB,GAAGD,qBAAqB;QAChE,IAAMjO,oBAAoB,GAAGuO,IAAI,CAACC,GAAG,CAACH,WAAW,GAAGC,SAAS,EAAE,CAAC,CAAC;QACjE,IAAIJ,sBAAsB,GAAGvL,GAAG,EAAE;UAChC,IAAI,CAACsL,qBAAqB,GAAG3O,SAAS;UACtC,IAAI,CAAC4O,sBAAsB,GAAG5O,SAAS;QACzC;QAEA,IAAI,CAACkC,QAAQ,CAACK,KAAK,IAAI;UACrB,IAAIA,KAAK,CAAC7B,oBAAoB,IAAI,IAAI,EAAE;YACtCpH,GAAG,CAAC6V,MAAM,CAAC,kDAAkD,CAAC;YAC9D,OAAO,IAAI;UACb;UAEA,OAAO;YAAEzO;UAAqB,CAAC;QACjC,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ;IAEA,IAAI,CAAC0O,eAAe,EAAE;EACxB;EAEAC,oBAAoB,GAAS;IAC3B,IAAM;MAAE9T;IAAM,CAAC,GAAG,IAAI,CAACL,KAAK;IAC5B,IAAI,CAAC0S,aAAa,CAACrS,KAAK,CAAC;IACzB,IAAI,CAACwM,OAAO,CAACuH,MAAM,EAAE;IACrB,IAAI,CAACC,kBAAkB,CAACD,MAAM,EAAE;IAEhC,IAAI,IAAI,CAACE,YAAY,EAAE;MACrBC,YAAY,CAAC,IAAI,CAACD,YAAY,CAAC;IACjC;IACA,IAAI,CAACE,4BAA4B,CAACJ,MAAM,EAAE;IAC1C,IAAI,IAAI,CAACK,cAAc,KAAK3P,SAAS,EAAE;MACrC4P,oBAAoB,CAAC,IAAI,CAACD,cAAc,CAAC;IAC3C;EACF;EAsZAE,eAAe,CACbC,WAA2B,EAC3BC,QAAwB,EAEN;IAAA,IADlBC,QAAQ,uEAAG,KAAK;IAEhB,IAAM;MAAEzU;IAAM,CAAC,GAAG,IAAI,CAACL,KAAK;IAC5B,IAAM;MAAEwE;IAAG,CAAC,GAAGnE,KAAK;IACpB,IAAM0U,WAAW,GAAG,IAAI,CAACC,cAAc,CAACJ,WAAW,CAAC;IACpD,IAAMK,QAAQ,GAAG,IAAI,CAACC,WAAW,CAACL,QAAQ,CAAC;IAC3C,IAAIC,QAAQ,IAAIC,WAAW,IAAI,IAAI,IAAIE,QAAQ,IAAI,IAAI,EAAE;MACvD,IAAME,MAAK,GAAG9U,KAAK,CAAC+U,YAAY,CAACL,WAAW,EAAEE,QAAQ,CAAC;MACvD,IAAIza,UAAU,CAAC6a,UAAU,CAAChV,KAAK,CAACoD,OAAO,CAACsR,WAAW,CAAC,CAAChT,IAAI,CAAC,EAAE;QAC1D;QACA,IAAM;UAAEvB;QAAU,CAAC,GAAGH,KAAK;QAC3B,OAAOmE,EAAE,CAAC8Q,IAAI,CAACC,cAAc,CAACC,MAAM,CAClCzW,wBAAwB,EACxBoW,MAAK,EACL3Q,EAAE,CAAC8Q,IAAI,CAACG,QAAQ,CAACC,WAAW,CAAClV,SAAS,CAACmV,QAAQ,CAAC,CACjD;MACH;MACA,OAAOR,MAAK;IACd;IACA,IAAIL,QAAQ,EAAE;MACZ,OAAO,IAAI;IACb;IACA,IAAIC,WAAW,IAAI,IAAI,IAAIE,QAAQ,IAAI,IAAI,EAAE;MAC3C,OAAO5U,KAAK,CAACuV,WAAW,CAACb,WAAW,EAAEE,QAAQ,CAAC;IACjD;IACA,OAAO,EAAE;EACX;EAEAD,cAAc,CAACJ,WAA2B,EAAiC;IACzE,IAAM;MAAE5E;IAAQ,CAAC,GAAG,IAAI,CAAC3I,KAAK;IAC9B5M,aAAa,CAACuV,OAAO,CAAC;IACtB,IAAM;MAAE6F;IAAa,CAAC,GAAG7F,OAAO;IAChC,IAAI6F,YAAY,IAAI,IAAI,EAAE;MACxB,OAAO,IAAI;IACb;IAEA,OAAOjB,WAAW,IAAI,IAAI,GAAGiB,YAAY,CAAC7C,GAAG,CAAC4B,WAAW,CAAC,GAAG,IAAI;EACnE;EAEAM,WAAW,CAACL,QAAwB,EAAiC;IACnE,IAAM;MAAE7E;IAAQ,CAAC,GAAG,IAAI,CAAC3I,KAAK;IAC9B5M,aAAa,CAACuV,OAAO,CAAC;IACtB,IAAM;MAAE8F;IAAU,CAAC,GAAG9F,OAAO;IAC7B,IAAI8F,SAAS,IAAI,IAAI,EAAE;MACrB,OAAO,IAAI;IACb;IAEA,OAAOjB,QAAQ,IAAI,IAAI,GAAGiB,SAAS,CAAC9C,GAAG,CAAC6B,QAAQ,CAAC,GAAG,IAAI;EAC1D;EAEAkB,QAAQ,GAA+B;IAAA;IACrC,IAAM;MAAE1V,KAAK;MAAEwF;IAAM,CAAC,GAAG,IAAI,CAAC7F,KAAK;IACnC,OAAO,IAAI,CAACgW,cAAc,CACxBnQ,KAAK,WACJzM,mBAAmB,CAACiH,KAAK,CAAC,IAAIA,KAAK,CAACyF,UAAU,yCAAK,KAAK,EACzDzF,KAAK,CAAC4V,mBAAmB,GAAG5V,KAAK,CAAC6V,sBAAsB,CACzD;EACH;EAEAC,gBAAgB,CAACC,UAAsB,EAAgB;IACrD,IAAM;MAAEjQ;IAAa,CAAC,GAAG,IAAI,CAACkB,KAAK;IACnC,OAAOlO,SAAS,CAACkd,eAAe,CAACD,UAAU,EAAEjQ,YAAY,CAAC;EAC5D;EAEAmQ,eAAe,CACbrW,MAAc,EACdsW,IAAY,EACZZ,QAAgB,EACQ;IACxB,IAAI;MACF,OAAO,IAAI,CAAC/U,UAAU,CAAC0V,eAAe,CAACrW,MAAM,EAAEsW,IAAI,EAAEZ,QAAQ,CAAC;IAChE,CAAC,CAAC,OAAOa,GAAG,EAAE;MACZpY,GAAG,CAAC+P,KAAK,CAAC,6BAA6B,EAAEqI,GAAG,CAAC;IAC/C;IACA,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEnD,iBAAiB,CACfb,YAA2B,EAErB;IAAA,IADNiE,eAAe,uEAAG,KAAK;IAEvB,IAAM;MAAEpW;IAAM,CAAC,GAAG,IAAI,CAACL,KAAK;IAC5B,IAAM;MAAEf,eAAe;MAAEG;IAAa,CAAC,GAAG,IAAI,CAACiI,KAAK;IACpD,IAAMqP,kBAAkB,GAAGD,eAAe,GACtC,IAAIlT,GAAG,EAAE,GACT,IAAIA,GAAG,CAACtE,eAAe,CAAC;IAC5B,IAAM0X,eAAe,GAAGF,eAAe,GAAG,IAAIlT,GAAG,EAAE,GAAG,IAAIA,GAAG,CAACnE,YAAY,CAAC;IAE3E,IAAIwX,SAAS,GAAGH,eAAe,IAAIxX,eAAe,CAACS,IAAI,GAAG,CAAC;IAC3D8S,YAAY,CAAC7O,OAAO,CAAC,SAA2B;MAAA,IAA1B;QAAES,IAAI;QAAErC,IAAI;QAAEoT;MAAM,CAAC;MACzC,IAAMiB,UAAU,GAAG/V,KAAK,CAACoD,OAAO,CAACoT,SAAS,CACxC;QAAA,IAAC;UAAEzS,IAAI,EAAE0S,UAAU;UAAE/U,IAAI,EAAEgV;QAAW,CAAC;QAAA,OACrCD,UAAU,KAAK1S,IAAI,IAAI2S,UAAU,KAAKhV,IAAI;MAAA,EAC7C;MACD,IAAIqU,UAAU,IAAI,CAAC,EAAE;QACnBQ,SAAS,GAAGF,kBAAkB,CAACM,MAAM,CAACZ,UAAU,CAAC,IAAIQ,SAAS;QAC9DA,SAAS,GACP,IAAI,CAACK,gBAAgB,CAACb,UAAU,EAAEjB,KAAK,EAAEwB,eAAe,CAAC,IACzDC,SAAS;MACb,CAAC,MAAM;QACLxY,GAAG,CAAC+P,KAAK,CAAC,uCAAuC,EAAE/J,IAAI,EAAErC,IAAI,EAAEoT,KAAK,CAAC;MACvE;IACF,CAAC,CAAC;IACF,IAAIyB,SAAS,EAAE;MACb,IAAI,CAAC5P,QAAQ,CAAC;QACZ5H,YAAY,EAAEuX,eAAe;QAC7B1X,eAAe,EAAEyX;MACnB,CAAC,CAAC;IACJ;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEO,gBAAgB,CACdb,UAAsB,EACtBjB,KAAoB,EACpB/V,YAA4B,EACnB;IACT,IAAM;MAAEiB;IAAM,CAAC,GAAG,IAAI,CAACL,KAAK;IAC5B,IAAM;MAAEQ;IAAU,CAAC,GAAGH,KAAK;IAC3B,IAAMJ,MAAM,GAAGI,KAAK,CAACoD,OAAO,CAAC2S,UAAU,CAAC;IAExC,IAAIjB,KAAK,IAAI,IAAI,IAAI,UAAGA,KAAK,EAAG+B,IAAI,EAAE,CAACvX,MAAM,GAAG,CAAC,EAAE;MACjD,IAAMwX,WAAW,GAAG/X,YAAY,CAAC4T,GAAG,CAACoD,UAAU,CAAC;MAChD,IAAIe,WAAW,IAAI,IAAI,EAAE;QACvB,IAAM;UAAEZ;QAAK,CAAC,GAAGY,WAAW;QAC5B,IAAIZ,IAAI,KAAKpB,KAAK,EAAE;UAClB/W,GAAG,CAAC6V,MAAM,CAAC,oCAAoC,CAAC;UAChD,OAAO,KAAK;QACd;MACF;MACA7U,YAAY,CAACgY,GAAG,CAAChB,UAAU,EAAE;QAC3BG,IAAI,EAAEpB,KAAK;QACXlR,MAAM,EAAE,IAAI,CAACqS,eAAe,CAACrW,MAAM,EAAEkV,KAAK,EAAE3U,SAAS,CAACmV,QAAQ;MAChE,CAAC,CAAC;MACF,OAAO,IAAI;IACb;IACA,OAAOvW,YAAY,CAAC4X,MAAM,CAACZ,UAAU,CAAC;EACxC;EAEAiB,oBAAoB,CAACpY,eAA0C,EAAQ;IACrE,IAAI,CAAC+H,QAAQ,CAAC;MAAE/H;IAAgB,CAAC,CAAC;EACpC;EAEAqY,iBAAiB,CACflB,UAAsB,EACtBnS,MAA8B,EAC9BsT,OAA8B,EACxB;IACNnZ,GAAG,CAACyG,KAAK,CAAC,yBAAyB,EAAEuR,UAAU,EAAEnS,MAAM,CAAC;IAExD,IAAI,CAACmP,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC;IAEvC,IAAI,CAACpM,QAAQ,CAAC,SAAyB;MAAA,IAAxB;QAAE/H;MAAgB,CAAC;MAChC,IAAMyX,kBAAkB,GAAG,IAAInT,GAAG,CAACtE,eAAe,CAAC;MACnD,IAAIgF,MAAM,IAAI,IAAI,EAAE;QAClByS,kBAAkB,CAACM,MAAM,CAACZ,UAAU,CAAC;MACvC,CAAC,MAAM;QACLM,kBAAkB,CAACU,GAAG,CAAChB,UAAU,EAAE;UACjCnS,MAAM;UACNsT;QACF,CAAC,CAAC;MACJ;MACA,OAAO;QAAEtY,eAAe,EAAEyX;MAAmB,CAAC;IAChD,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEc,cAAc,CACZpB,UAAsB,EACtBnS,MAA8B,EAC9BsS,IAAY,EACN;IACNnY,GAAG,CAACyG,KAAK,CAAC,sBAAsB,EAAEuR,UAAU,EAAEnS,MAAM,EAAEsS,IAAI,CAAC;IAE3D,IAAI,CAACnD,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC;IAEvC,IAAI,CAACpM,QAAQ,CAAC,SAAsB;MAAA,IAArB;QAAE5H;MAAa,CAAC;MAC7B,IAAMuX,eAAe,GAAG,IAAIpT,GAAG,CAACnE,YAAY,CAAC;MAC7CuX,eAAe,CAACS,GAAG,CAAChB,UAAU,EAAE;QAAEnS,MAAM;QAAEsS;MAAK,CAAC,CAAC;MACjD,OAAO;QAAEnX,YAAY,EAAEuX;MAAgB,CAAC;IAC1C,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;EACEc,YAAY,CAACC,SAAoB,EAAQ;IAAA;IACvCtZ,GAAG,CAACyG,KAAK,CAAC,cAAc,EAAE6S,SAAS,CAAC;IAEpC,IAAM;MAAE5E;IAAiB,CAAC,GAAG,IAAI,CAAC9S,KAAK;IACvC,IAAM2X,gCAAgC,6BACpC7E,gBAAgB,CAACE,GAAG,CAClBnV,oBAAoB,CAAC+Z,8BAA8B,CACpD,2EAAI,KAAK;IACZ,IAAID,gCAAgC,EAAE;MACpC,IAAI,CAACE,eAAe,EAAE;IACxB;IAEA,IAAM;MAAExX;IAAM,CAAC,GAAG,IAAI,CAACL,KAAK;IAC5B0X,SAAS,CAAC/T,OAAO,CAAC,QAA6BmT,UAAU,KAAK;MAAA,IAA3C;QAAEC,UAAU;QAAEe;MAAW,CAAC;MAC3C,IAAM7X,MAAM,GAAGI,KAAK,CAACoD,OAAO,CAACqO,IAAI,CAC/BC,CAAC,IAAIA,CAAC,CAAC3N,IAAI,KAAK0S,UAAU,IAAI/E,CAAC,CAAChQ,IAAI,KAAKgV,UAAU,CACpD;MACD,IAAI9W,MAAM,IAAI,IAAI,EAAE;QAClB;MACF;MACA,IAAM2U,WAAW,GAAGvU,KAAK,CAACwP,oBAAoB,CAAC5P,MAAM,CAACmE,IAAI,CAAC;MAC3D3J,aAAa,CAACma,WAAW,CAAC;MAC1B,IAAMmD,YAAY,GAAGva,aAAa,CAACwa,sBAAsB,CACvDjB,UAAU,EACVe,UAAU,CACX;MACD,IAAIC,YAAY,CAACpY,MAAM,KAAK,CAAC,EAAE;QAC7B,IAAI,CAACsY,iBAAiB,CAACrD,WAAW,CAAC;MACrC,CAAC,MAAM;QACL,IAAM;UAAEpU;QAAU,CAAC,GAAGH,KAAK;QAC3B,IAAI,CAACmX,cAAc,CACjB5C,WAAW,EACX,IAAI,CAAC0B,eAAe,CAACrW,MAAM,EAAE8X,YAAY,EAAEvX,SAAS,CAACmV,QAAQ,CAAC,YAC3DoC,YAAY,EAChB;MACH;IACF,CAAC,CAAC;EACJ;EAEAG,kBAAkB,CAACnD,WAAuB,EAAQ;IAChD,IAAI,CAAC3B,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC;IAEvC,IAAI,CAACpM,QAAQ,CACX,UAA+D;MAAA,IAA9D;QAAE/H,eAAe;QAAEG;MAAqC,CAAC;MACxD,IAAMsX,kBAAkB,GAAGzX,eAAe,GACtC,IAAIsE,GAAG,CAACtE,eAAe,CAAC,GACxB,IAAIsE,GAAG,EAAE;MACb,IAAMoT,eAAe,GAAGvX,YAAY,GAChC,IAAImE,GAAG,CAACnE,YAAY,CAAC,GACrB,IAAImE,GAAG,EAAE;MACboT,eAAe,CAACK,MAAM,CAACjC,WAAW,CAAC;MACnC2B,kBAAkB,CAACM,MAAM,CAACjC,WAAW,CAAC;MAEtC,OAAO;QACL3V,YAAY,EAAEuX,eAAe;QAC7B1X,eAAe,EAAEyX;MACnB,CAAC;IACH,CAAC,CACF;EACH;EAEAuB,iBAAiB,CAAClD,WAAuB,EAAQ;IAC/C,IAAI,CAAC3B,YAAY,CAAC,oBAAoB,EAAE,IAAI,CAAC;IAE7C,IAAI,CAACpM,QAAQ,CAAC,UAAsB;MAAA,IAArB;QAAE5H;MAAa,CAAC;MAC7B,IAAMuX,eAAe,GAAG,IAAIpT,GAAG,CAACnE,YAAY,CAAC;MAC7CuX,eAAe,CAACK,MAAM,CAACjC,WAAW,CAAC;MAEnC,OAAO;QAAE3V,YAAY,EAAEuX;MAAgB,CAAC;IAC1C,CAAC,CAAC;EACJ;EAEAkB,eAAe,GAAS;IACtBzZ,GAAG,CAACyG,KAAK,CAAC,sBAAsB,CAAC;IAEjC,IAAM;MAAE5F,eAAe;MAAEG,YAAY;MAAEG;IAAa,CAAC,GAAG,IAAI,CAAC8H,KAAK;IAClE,IACEjI,YAAY,CAACM,IAAI,KAAK,CAAC,IACvBT,eAAe,CAACS,IAAI,KAAK,CAAC,IAC1BH,YAAY,KAAK,IAAI,EACrB;MACA;IACF;;IAEA;IACA,IAAI,CAAC2T,mBAAmB,EAAE;IAE1B,IAAI,CAACE,YAAY,CAAC,qBAAqB,EAAE,IAAI,CAAC;IAC9C,IAAI,CAACpM,QAAQ,CAAC;MACZ5H,YAAY,EAAE,IAAImE,GAAG,EAAE;MACvBtE,eAAe,EAAE,IAAIsE,GAAG,EAAE;MAC1BqD,WAAW,EAAE,EAAE;MACfrH,YAAY,EAAEuF;IAChB,CAAC,CAAC;EACJ;EAEAqO,qBAAqB,GAAS;IAC5B/U,GAAG,CAACyG,KAAK,CAAC,8BAA8B,CAAC;IAEzC,IAAI,CAACmC,QAAQ,CAAC;MACZJ,WAAW,EAAE,EAAE;MACfrH,YAAY,EAAEuF;IAChB,CAAC,CAAC;EACJ;EAEAoO,mBAAmB,GAAS;IAC1B,IAAI,IAAI,CAAC3F,cAAc,CAAC4K,OAAO,IAAI,IAAI,EAAE;MACvC,IAAI,CAAC5K,cAAc,CAAC4K,OAAO,CAACC,QAAQ,CAAC,EAAE,CAAC;IAC1C;EACF;;EAEA;AACF;AACA;EACEC,cAAc,GAAS;IACrBja,GAAG,CAACyG,KAAK,CAAC,oBAAoB,CAAC;IAE/B,IAAM;MAAExE;IAAM,CAAC,GAAG,IAAI,CAACL,KAAK;IAC5B,IAAM;MAAEf,eAAe;MAAEG;IAAa,CAAC,GAAG,IAAI,CAACiI,KAAK;IACpD,IAAM;MAAE5D,OAAO;MAAEjD;IAAU,CAAC,GAAGH,KAAK;IAEpC,IAAMqW,kBAAkB,GAAG,IAAInT,GAAG,EAAE;IACpC,IAAMoT,eAAe,GAAG,IAAIpT,GAAG,EAAE;IAEjCtE,eAAe,CAAC0E,OAAO,CAAC,CAACwR,KAAK,EAAEmD,GAAG,KAAK;MACtC,IAAM;QAAEf;MAAQ,CAAC,GAAGpC,KAAK;MACzB,IAAMlV,MAAM,GAAGwD,OAAO,CAAC6U,GAAG,CAAC;MAC3B,IAAMrU,MAAM,GAAG,IAAI,CAACrD,UAAU,CAAC2X,kBAAkB,CAC/CtY,MAAM,EACNsX,OAAO,EACP/W,SAAS,CAACmV,QAAQ,CACnB;MACDe,kBAAkB,CAACU,GAAG,CAACkB,GAAG,EAAE;QAC1Bf,OAAO;QACPtT;MACF,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF7E,YAAY,CAACuE,OAAO,CAAC,CAACwR,KAAK,EAAEmD,GAAG,KAAK;MACnC,IAAM;QAAE/B;MAAK,CAAC,GAAGpB,KAAK;MACtB,IAAMlV,MAAM,GAAGwD,OAAO,CAAC6U,GAAG,CAAC;MAC3B3B,eAAe,CAACS,GAAG,CAACkB,GAAG,EAAE;QACvB/B,IAAI;QACJtS,MAAM,EAAE,IAAI,CAACqS,eAAe,CAACrW,MAAM,EAAEsW,IAAI,EAAE/V,SAAS,CAACmV,QAAQ;MAC/D,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,IAAI,CAACvC,YAAY,CAAC,uBAAuB,EAAE,IAAI,CAAC;IAChD,IAAI,CAACpM,QAAQ,CAAC;MACZ5H,YAAY,EAAEuX,eAAe;MAC7B1X,eAAe,EAAEyX;IACnB,CAAC,CAAC;EACJ;EAEA8B,UAAU,SAGwD;IAAA,IAHvD;MACTpZ,YAAY;MACZH;IACuD,CAAC;IACxD,IAAI,CAAC+H,QAAQ,CAAC;MACZ5H,YAAY;MACZH;IACF,CAAC,CAAC;EACJ;EAEAsU,uBAAuB,CAACd,QAAmB,EAA4B;IAAA;IAAA,IAA1BgG,WAAW,uEAAG,IAAI;IAC7D,IAAM3L,mBAAmB,GAAGvS,cAAc,CAACme,gBAAgB,CAACjG,QAAQ,CAAC;IACrE,IAAMkG,wBAAwB,GAC5Bpe,cAAc,CAACqe,2BAA2B,CAACnG,QAAQ,CAAC;IAEtD,IAAMoG,2BAA2B,4BAC/BpG,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEoG,2BAA2B,yEAAI,CAAC,CAAC;IAC7C,IAAMC,2BAA2B,4BAC/BrG,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEqG,2BAA2B,yEAAI,CAAC,CAAC;IAC7C,IAAM7L,wBAAwB,4BAC5BwF,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAExF,wBAAwB,yEAAI,KAAK;IAE7C,IAAM8L,qBAAqB,GAAG,CAAC1gB,SAAS,CACtC,IAAI,CAACyU,mBAAmB,EACxBA,mBAAmB,CACpB;IACD,IAAMkM,uBAAuB,GAAG,CAAC3gB,SAAS,CACxC,IAAI,CAACsgB,wBAAwB,EAC7BA,wBAAwB,CACzB;IACD,IAAMM,0BAA0B,GAAG,CAAC5gB,SAAS,CAC3C,IAAI,CAAC0U,oBAAoB,EACzB0F,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEoG,2BAA2B,CACtC;IACD,IAAMK,0BAA0B,GAAG,CAAC7gB,SAAS,CAC3C,IAAI,CAAC2U,oBAAoB,EACzB8L,2BAA2B,CAC5B;IACD,IAAMK,wBAAwB,GAC5B,IAAI,CAAClM,wBAAwB,KAAKA,wBAAwB;IAC5D,IACE8L,qBAAqB,IACrBC,uBAAuB,IACvBC,0BAA0B,IAC1BC,0BAA0B,IAC1BC,wBAAwB,EACxB;MACA,IAAI,CAACrM,mBAAmB,GAAGA,mBAAmB;MAC9C,IAAI,CAAC6L,wBAAwB,GAAGA,wBAAwB;MACxD,IAAI,CAAC5L,oBAAoB,GAAG8L,2BAA2B;MACvD,IAAI,CAAC7L,oBAAoB,GAAG8L,2BAA2B;MACvD,IAAI,CAAC7L,wBAAwB,GAAGA,wBAAwB;MACxD,IAAI,CAACmM,eAAe,CAAC,CAAC,CAAC,EAAEX,WAAW,CAAC;MAErC,IAAIO,uBAAuB,IAAIP,WAAW,EAAE;QAC1C,IAAI,CAACJ,cAAc,EAAE;MACvB;IACF;EACF;EAwCAe,eAAe,CACbC,cAA2E,EAErE;IAAA;IAAA,IADNZ,WAAW,uEAAG,IAAI;IAElB,IAAM;MAAE7J;IAAsB,CAAC,GAAG,IAAI,CAACvH,KAAK;IAC5C,IAAM;MAAEhH;IAAM,CAAC,GAAG,IAAI,CAACL,KAAK;IAC5B,IAAMsZ,MAAM;MACV1K;IAAqB,GAClByK,cAAc,CAClB;IACD,IAAME,mBAAmB,GAAG,CAC1B,6BAAI,IAAI,CAACzM,mBAAmB,yEAAI,EAAE,CAAC,EACnC,GAAGwM,MAAM,CAAC1K,qBAAqB,CAAC4K,MAAM,EAAE,CACzC;IACD,IAAMhZ,SAAS,GAAG,IAAIlG,SAAS,CAC7B+F,KAAK,CAACmE,EAAE,EACR+U,mBAAmB,EACnB,IAAI,CAACZ,wBAAwB,EAC7B,IAAI,CAAC5L,oBAAoB,EACzB,IAAI,CAACC,oBAAoB,EACzB,IAAI,CAACC,wBAAwB,CAC9B;IAED7O,GAAG,CAACyG,KAAK,CAAC,iBAAiB,EAAE,IAAI,CAACiI,mBAAmB,EAAEyM,mBAAmB,CAAC;IAE3E,IAAI,CAACvS,QAAQ,iCAAMsS,MAAM;MAAE9Y;IAAS,IAAI,MAAM;MAC5C,IAAIiY,WAAW,IAAI,IAAI,CAAC/L,IAAI,EAAE;QAC5B,IAAI,CAACA,IAAI,CAAC+L,WAAW,EAAE;MACzB;IACF,CAAC,CAAC;EACJ;EAEAgB,aAAa,GAAS;IACpB,IAAM;MAAEhH;IAAS,CAAC,GAAG,IAAI,CAACzS,KAAK;IAC/B,IAAI,CAACuT,uBAAuB,CAACd,QAAQ,CAAC;EACxC;EAEAL,SAAS,GAAS;IAChB,IAAM;MACJsH,uBAAuB;MACvBlH,YAAY;MACZ/S,KAAK;MACLY,KAAK;MACLhB,WAAW;MACXF,aAAa;MACbyH,WAAW;MACXC,qBAAqB;MACrBC;IACF,CAAC,GAAG,IAAI,CAAC9G,KAAK;IAEd,IAAM8P,aAAa,GAAGjJ,qBAAqB,aAArBA,qBAAqB,cAArBA,qBAAqB,GAAI,EAAE;IACjD,IAAMtH,YAAY,GAAG9B,iBAAiB,CAACsJ,kBAAkB,CACvD1G,KAAK,CAACmE,EAAE,EACRoC,WAAW,EACXkJ,aAAa,EACbzP,KAAK,CAACoD,OAAO,EACbqD,mBAAmB,CACpB;IAED,IAAI4S,uBAAuB,EAAE;MAC3B;MACA;MACA,IAAMC,sBAAsB,GAAGnH,YAAY,CAACvO,MAAM,CAChD2O,WAAW,IAAIA,WAAW,CAACuC,KAAK,IAAI,IAAI,CACzC;MACD,IAAI,CAAC9B,iBAAiB,CAACsG,sBAAsB,CAAC;IAChD;IAEA,IAAI,CAAC3S,QAAQ,CAAC;MACZvH,KAAK;MACLJ,WAAW;MACXF,aAAa;MACbwR,OAAO,EAAE,IAAI;MACbpR;IACF,CAAC,CAAC;IACF,IAAI,CAACka,aAAa,EAAE;EACtB;EAEMtH,mBAAmB,CAACjD,eAAuB,EAAiB;IAAA;IAAA;MAChE,IAAM;QAAE7O;MAAM,CAAC,GAAG,KAAI,CAACL,KAAK;MAC5B,KAAI,CAACgH,QAAQ,CAAC;QAAE6H,oBAAoB,EAAE;MAAK,CAAC,CAAC;MAE7C,IAAI;QACF,IAAMoB,cAAc,SAAS,KAAI,CAACpD,OAAO,CAAC+M,GAAG,CAC3CvZ,KAAK,CAACwZ,WAAW,CAAC3K,eAAe,CAAC,EAClC4K,QAAQ,IAAIA,QAAQ,CAACC,KAAK,EAAE,CAC7B;QAED,IAAM9Z,OAAM,GAAGgQ,cAAc,CAACxM,OAAO,CAAC,CAAC,CAAC;QACxC,IAAMuW,IAAI,GAAG/Z,OAAM,CAAC+Z,IAAI,EAAE,CAACC,IAAI,EAAE;QACjChK,cAAc,CAACiK,SAAS,CAAC,CAACF,IAAI,CAAC,CAAC;QAChC/J,cAAc,CAACkK,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAACla,OAAM,CAAC,CAAC;QAE1C,IAAMma,KAAI,SAAS,KAAI,CAACvN,OAAO,CAAC+M,GAAG,CAAC3J,cAAc,CAACoK,eAAe,EAAE,CAAC;QACrE,IAAID,KAAI,CAACE,IAAI,CAAC3a,MAAM,GAAG,CAAC,EAAE;UACxB,IAAM4a,GAAG,GAAGH,KAAI,CAACE,IAAI,CAAC,CAAC,CAAC;UACxB,IAAMnF,OAAK,GAAGoF,GAAG,CAACvH,GAAG,CAAC/S,OAAM,CAAC;UAE7B,KAAI,CAACua,eAAe,CAACrF,OAAK,EAAEjG,eAAe,CAAC;UAE5C,KAAI,CAAClI,QAAQ,CAAC;YAAE6H,oBAAoB,EAAE;UAAK,CAAC,CAAC;QAC/C,CAAC,MAAM;UACLzQ,GAAG,CAACqc,IAAI,CAAC,iDAAiD,CAAC;UAC3D,KAAI,CAACzT,QAAQ,CAAC;YAAE6H,oBAAoB,EAAE;UAAM,CAAC,CAAC;UAC9C,KAAI,CAAChD,uBAAuB,EAAE;QAChC;QACA,KAAI,CAAC7E,QAAQ,CAAC;UAAEiJ,cAAc;UAAEf;QAAgB,CAAC,EAAE,MAAM;UACvD,KAAI,CAACkD,SAAS,EAAE;QAClB,CAAC,CAAC;MACJ,CAAC,CAAC,OAAOjE,KAAK,EAAE;QACd,KAAI,CAACuM,oBAAoB,CAACvM,KAAK,CAAC;MAClC;IAAC;EACH;EAEAqM,eAAe,CAACvL,SAAiB,EAAEC,eAAuB,EAAQ;IAChE,IAAM;MAAE7O;IAAM,CAAC,GAAG,IAAI,CAACL,KAAK;IAC5B,IAAM2a,eAAe,GAAGzL,eAAe,CACpCjL,MAAM,EAAE,CACR2W,EAAE,CAACva,KAAK,CAACmE,EAAE,CAACqW,WAAW,CAACC,QAAQ,CAAC7L,SAAS,CAAC,CAAC;IAC/C,IAAMtJ,gBAAgB,GAAG,CAACgV,eAAe,CAAC;IAC1C,IAAI,CAAC3T,QAAQ,CAAC;MACZiI,SAAS;MACTtJ;IACF,CAAC,CAAC;EACJ;EAEAoV,QAAQ,CACNnG,WAA2B,EAC3BC,QAAwB,EAElB;IAAA,IADNC,QAAQ,uEAAG,KAAK;IAEhB,IAAM;MAAE1F;IAAQ,CAAC,GAAG,IAAI,CAACpP,KAAK;IAC9B,IAAIoP,OAAO,EAAE;MACX,IAAM+F,OAAK,GAAG6F,MAAM,CAClB,IAAI,CAACrG,eAAe,CAACC,WAAW,EAAEC,QAAQ,EAAEC,QAAQ,CAAC,CACtD;MACDpa,eAAe,CAACya,OAAK,CAAC,CAACjH,KAAK,CAAC+M,CAAC,IAAI7c,GAAG,CAAC+P,KAAK,CAAC,qBAAqB,EAAE8M,CAAC,CAAC,CAAC;IACxE,CAAC,MAAM;MACL7c,GAAG,CAAC+P,KAAK,CAAC,yDAAyD,CAAC;IACtE;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE+M,UAAU,CACRC,MAA4B,EAItB;IAAA,IAHNC,cAAc,uEAAG,KAAK;IAAA,IACtBC,YAAY,uEAAG,IAAI;IAAA,IACnBlN,KAAc;IAEd,IAAM;MAAE9N,KAAK;MAAE+O;IAAQ,CAAC,GAAG,IAAI,CAACpP,KAAK;IACrC,IAAM;MAAEoD,gBAAgB;MAAE+C;IAAa,CAAC,GAAG,IAAI,CAACkB,KAAK;IACrD,IAAMhE,gBAAgB,GAAGD,gBAAgB,CAACkY,mBAAmB,EAAE;IAE/D,IAAIlM,OAAO,EAAE;MACX,IAAMiB,aAAa,GAAG;QACpB8K,MAAM,EAAEjiB,SAAS,CAACqiB,aAAa,CAC7BJ,MAAM,EACN9a,KAAK,CAACmb,WAAW,EACjBnb,KAAK,CAACob,QAAQ,CACf;QACDL,cAAc;QACdC,YAAY;QACZlV,YAAY;QACZ9C,gBAAgB;QAChB8K;MACF,CAAC;MAED,IAAI,CAACnH,QAAQ,CAAC;QAAEqJ;MAAc,CAAC,CAAC;IAClC,CAAC,MAAM;MACLjS,GAAG,CAAC+P,KAAK,CAAC,wDAAwD,CAAC;IACrE;EACF;EAEAiF,YAAY,CAAC9C,WAAmB,EAA6B;IAAA,IAA3BoL,WAAW,uEAAG,KAAK;IACnD,IAAI,CAAC1U,QAAQ,CAAC;MAAEsJ;IAAY,CAAC,CAAC;IAE9B,IAAMzK,KAAK,GAAG,IAAI,CAACkQ,QAAQ,EAAE;IAE7B,IAAI2F,WAAW,IAAI,IAAI,CAAChP,IAAI,EAAE;MAC5B,IAAI,CAACA,IAAI,CAACiP,mBAAmB,EAAE;MAC/B,IAAI,CAACjP,IAAI,CAACkP,YAAY,CAAC;QAAEC,GAAG,EAAE;MAAE,CAAC,EAAE,IAAI,CAAC;IAC1C;IAEA,IAAI,IAAI,CAACpI,qBAAqB,IAAI,IAAI,EAAE;MAAA;MACtC,IAAM;QAAEqI,sBAAsB;QAAEC;MAAuB,CAAC,GAAGlW,KAAK;MAChEpL,aAAa,CAACqhB,sBAAsB,CAAC;MACrCrhB,aAAa,CAACshB,sBAAsB,CAAC;MACrC,IAAMC,MAAM,iDAAG,IAAI,CAACrP,WAAW,sDAAhB,kBAAkBsP,qBAAqB,EAAE,CAACD,MAAM,yEAAI,CAAC;MACpE,IAAME,mBAAmB,GAAGnI,IAAI,CAAC3T,GAAG,CAClC0b,sBAAsB,EACtB/H,IAAI,CAACC,GAAG,CAACgI,MAAM,GAAG,CAAC,EAAED,sBAAsB,CAAC,CAC7C;MACD,IAAI,CAACtI,qBAAqB,GAAGvL,IAAI,CAACC,GAAG,EAAE;MACvC,IAAI,CAACuL,sBAAsB,GACzB,IAAI,CAACD,qBAAqB,GAAGyI,mBAAmB;MAClD,IAAI,CAAClV,QAAQ,CAAC;QACZxB,oBAAoB,EAAE;MACxB,CAAC,CAAC;MACF,IAAI,CAAC8O,YAAY,GAAG6H,UAAU,CAAC,MAAM;QACnC,IAAI,CAACnV,QAAQ,CAAC;UACZuJ,mBAAmB,EAAE;QACvB,CAAC,CAAC;MACJ,CAAC,EAAEzQ,QAAQ,CAACsc,mBAAmB,CAAC;IAClC;EACF;EAEAC,WAAW,GAAS;IAClB,IAAI,CAAC5I,qBAAqB,GAAG3O,SAAS;IACtC,IAAI,CAAC4O,sBAAsB,GAAG5O,SAAS;IACvC,IAAI,CAACkC,QAAQ,CAAC;MACZsJ,WAAW,EAAE,IAAI;MACjB9K,oBAAoB,EAAE,IAAI;MAC1B+K,mBAAmB,EAAE;IACvB,CAAC,CAAC;IAEF,IAAI,IAAI,CAAC+D,YAAY,IAAI,IAAI,EAAE;MAC7BC,YAAY,CAAC,IAAI,CAACD,YAAY,CAAC;MAC/B,IAAI,CAACA,YAAY,GAAGxP,SAAS;IAC/B;EACF;;EAEA;AACF;AACA;EACEwX,QAAQ,GAAS;IACf,IAAI,IAAI,CAAC1P,gBAAgB,EAAE;MACzBxO,GAAG,CAACyG,KAAK,CAAC,6BAA6B,EAAE,IAAI,CAAC+H,gBAAgB,CAAC;MAC/D,IAAM;QACJ3N,eAAe;QACfC,mBAAmB;QACnBC,aAAa;QACbC,YAAY;QACZC,WAAW;QACXC,YAAY;QACZC,YAAY;QACZC,qBAAqB;QACrBC;MACF,CAAC,GAAG,IAAI,CAACmN,gBAAgB;MAEzB,IAAI,CAACA,gBAAgB,GAAG,IAAI;MAC5B,IAAI,CAAC5F,QAAQ,CAAC;QACZ/H,eAAe;QACfC,mBAAmB;QACnBC,aAAa;QACbC,YAAY;QACZC,WAAW;QACXC,YAAY;QACZC,YAAY;QACZC,qBAAqB;QACrBC;MACF,CAAC,CAAC;IACJ,CAAC,MAAM;MACLrB,GAAG,CAACyG,KAAK,CAAC,+CAA+C,CAAC;MAC1D,IAAI,CAACmC,QAAQ,CAAC;QACZ/H,eAAe,EAAE,IAAIsE,GAAG,EAAE;QAC1BrE,mBAAmB,EAAER,4BAA4B;QACjDS,aAAa,EAAE,EAAE;QACjBC,YAAY,EAAE,IAAImE,GAAG,EAAE;QACvBlE,WAAW,EAAE7E,UAAU,CAACoF,YAAY,CAACC,IAAI;QACzCP,YAAY,EAAEwF,SAAS;QACvBtF,qBAAqB,EAAE,EAAE;QACzBC,KAAK,EAAE;MACT,CAAC,CAAC;IACJ;EACF;;EAEA;AACF;AACA;AACA;EACE8c,WAAW,GAAY;IACrB,OAAO,IAAI,CAAC3P,gBAAgB,IAAI,IAAI,IAAI,CAAC5N,aAAa,CAAC,IAAI,CAACqI,KAAK,CAAC;EACpE;EAEAgL,cAAc,CAAChS,KAAoB,EAAQ;IACzCA,KAAK,CAACmc,gBAAgB,CAAC9e,aAAa,CAAC+e,KAAK,CAACC,OAAO,EAAE,IAAI,CAACpS,YAAY,CAAC;IACtEjK,KAAK,CAACmc,gBAAgB,CACpB9e,aAAa,CAAC+e,KAAK,CAACE,cAAc,EAClC,IAAI,CAACzS,mBAAmB,CACzB;IACD7J,KAAK,CAACmc,gBAAgB,CACpB9e,aAAa,CAAC+e,KAAK,CAACG,eAAe,EACnC,IAAI,CAAC7R,0BAA0B,CAChC;IACD1K,KAAK,CAACmc,gBAAgB,CACpB9e,aAAa,CAAC+e,KAAK,CAACI,oBAAoB,EACxC,IAAI,CAAC5R,wBAAwB,CAC9B;EACH;EAEAyH,aAAa,CAACrS,KAAoB,EAAQ;IACxCA,KAAK,CAACyc,mBAAmB,CAACpf,aAAa,CAAC+e,KAAK,CAACC,OAAO,EAAE,IAAI,CAACpS,YAAY,CAAC;IACzEjK,KAAK,CAACyc,mBAAmB,CACvBpf,aAAa,CAAC+e,KAAK,CAACE,cAAc,EAClC,IAAI,CAACzS,mBAAmB,CACzB;IACD7J,KAAK,CAACyc,mBAAmB,CACvBpf,aAAa,CAAC+e,KAAK,CAACG,eAAe,EACnC,IAAI,CAAC7R,0BAA0B,CAChC;IACD1K,KAAK,CAACyc,mBAAmB,CACvBpf,aAAa,CAAC+e,KAAK,CAACI,oBAAoB,EACxC,IAAI,CAAC5R,wBAAwB,CAC9B;EACH;EAEA8R,KAAK,GAAS;IAAA;IACZ,kBAAI,CAACrQ,IAAI,+CAAT,WAAWqQ,KAAK,EAAE;EACpB;EAEAC,cAAc,CAAC/c,MAAoB,EAAQ;IACzC,IAAM;MAAEkG;IAAa,CAAC,GAAG,IAAI,CAACkB,KAAK;IACnC,IAAM;MAAEhH;IAAM,CAAC,GAAG,IAAI,CAACL,KAAK;IAC5B,IAAM;MAAEwb;IAAY,CAAC,GAAGnb,KAAK;IAC7B,IAAM0U,WAAW,GAAG5b,SAAS,CAACsN,aAAa,CAACxG,MAAM,EAAEkG,YAAY,CAAC;IAEjE,IACElG,MAAM,IAAI,IAAI,IACdA,MAAM,GAAG,CAAC,IACVub,WAAW,IAAIvb,MAAM,IACrB,CAACI,KAAK,CAAC4c,YAAY,CAAClI,WAAW,CAAC,EAChC;MACA,IAAI,CAAC/N,QAAQ,CAAC;QAAE+I,sBAAsB,EAAE;MAAK,CAAC,CAAC;MAC/C;IACF;IAEA,IAAM;MAAE3M,gBAAgB;MAAE4M;IAAQ,CAAC,GAAG,IAAI,CAAC3I,KAAK;IAChD5M,aAAa,CAACuV,OAAO,CAAC;IACtB,IAAM;MAAEkN,IAAI;MAAEC,YAAY;MAAEC;IAAS,CAAC,GAAGpN,OAAO;IAChD,IAAI/P,MAAM,GAAGid,IAAI,EAAE;MAAA;MACjB,mBAAI,CAACxQ,IAAI,gDAAT,YAAWkP,YAAY,CAAC;QAAEsB,IAAI,EAAEjd;MAAO,CAAC,EAAE,IAAI,CAAC;IACjD,CAAC,MAAM,IAAIkd,YAAY,GAAGld,MAAM,EAAE;MAAA;MAChC,IAAMod,WAAW,kBAAG,IAAI,CAAC3Q,IAAI,gDAAT,YAAW4Q,cAAc,EAAE;MAC/C7iB,aAAa,CAAC4iB,WAAW,CAAC;MAC1B,IAAME,OAAO,GAAGna,gBAAgB,CAACoa,WAAW,CAC1CH,WAAW,EACXpd,MAAM,EACNmD,gBAAgB,CAACqa,eAAe,CAACJ,WAAW,CAAC,CAC9C;MACD,mBAAI,CAAC3Q,IAAI,gDAAT,YAAWkP,YAAY,CACrB;QAAEsB,IAAI,EAAEnJ,IAAI,CAACC,GAAG,CAACuJ,OAAO,EAAEH,QAAQ,CAAC;QAAEM,UAAU,EAAE;MAAE,CAAC,EACpD,IAAI,CACL;IACH;IACA,IAAI,CAACC,0BAA0B,GAAG1d,MAAM;IACxC,IAAI,CAAC+G,QAAQ,CAAC;MAAE+I,sBAAsB,EAAE9P,MAAM;MAAEsB,gBAAgB,EAAE;IAAK,CAAC,CAAC;EAC3E;EAEAqc,wBAAwB,CAACC,kBAAgC,EAAQ;IAAA;IAC/D,IAAM;MAAEza,gBAAgB;MAAE+C;IAAa,CAAC,GAAG,IAAI,CAACkB,KAAK;IACrDjE,gBAAgB,CAAC0a,cAAc,CAC7B3kB,SAAS,CAACsN,aAAa,CAACoX,kBAAkB,EAAE1X,YAAY,CAAC,EACzD,CAAC,CACF;IAED,mBAAI,CAACuG,IAAI,gDAAT,YAAW+L,WAAW,EAAE;EAC1B;EAEAsF,wBAAwB,CAACjH,UAAsB,EAAQ;IACrD,IAAM;MAAEzH,aAAa;MAAElJ;IAAa,CAAC,GAAG,IAAI,CAACkB,KAAK;IAClD,IAAM;MAAEhH;IAAM,CAAC,GAAG,IAAI,CAACL,KAAK;IAC5B5B,GAAG,CAAC6V,MAAM,CAAC,iBAAiB,EAAE6C,UAAU,CAAC;IAEzC,IAAMkH,gBAAgB,GACpB3O,aAAa,IAAI,IAAI,GACjB,IAAI1I,GAAG,CAACtG,KAAK,CAACgP,aAAa,CAAC,GAC5B,IAAI1I,GAAG,CAAC0I,aAAa,CAAC;IAE5B2O,gBAAgB,CAACpE,GAAG,CAAC9C,UAAU,CAAC;IAEhC,IAAMV,UAAU,GAAG/V,KAAK,CAACwP,oBAAoB,CAACiH,UAAU,CAAC;IACzDrc,aAAa,CAAC2b,UAAU,CAAC;IACzB,IAAM6H,YAAY,GAAG9kB,SAAS,CAACkd,eAAe,CAACD,UAAU,EAAEjQ,YAAY,CAAC;IACxE,IAAM+X,eAAe,GAAG/kB,SAAS,CAACglB,QAAQ,CACxCF,YAAY,EACZD,gBAAgB,CAACte,IAAI,GAAG,CAAC,EACzByG,YAAY,CACb;IAED,IAAI,CAACa,QAAQ,CAAC;MACZqI,aAAa,EAAE,CAAC,GAAG2O,gBAAgB,CAAC;MACpC7X,YAAY,EAAE+X;IAChB,CAAC,CAAC;EACJ;EAEAE,0BAA0B,CAACtH,UAAsB,EAAQ;IACvD,IAAM;MAAEzH,aAAa;MAAElJ;IAAa,CAAC,GAAG,IAAI,CAACkB,KAAK;IAClD,IAAM;MAAEhH;IAAM,CAAC,GAAG,IAAI,CAACL,KAAK;IAC5B5B,GAAG,CAAC6V,MAAM,CAAC,mBAAmB,EAAE6C,UAAU,CAAC;IAE3C,IAAMkH,gBAAgB,GACpB3O,aAAa,IAAI,IAAI,GACjB,IAAI1I,GAAG,CAACtG,KAAK,CAACgP,aAAa,CAAC,GAC5B,IAAI1I,GAAG,CAAC0I,aAAa,CAAC;IAE5B2O,gBAAgB,CAAChH,MAAM,CAACF,UAAU,CAAC;IAEnC,IAAMV,UAAU,GAAG/V,KAAK,CAACwP,oBAAoB,CAACiH,UAAU,CAAC;IACzDrc,aAAa,CAAC2b,UAAU,CAAC;IACzB,IAAM6H,YAAY,GAAG9kB,SAAS,CAACkd,eAAe,CAACD,UAAU,EAAEjQ,YAAY,CAAC;;IAExE;IACA,IAAM+X,eAAe,GAAG/kB,SAAS,CAACglB,QAAQ,CACxCF,YAAY,EACZD,gBAAgB,CAACte,IAAI,GAAGW,KAAK,CAACge,YAAY,CAAC1e,MAAM,EACjDwG,YAAY,CACb;IAED,IAAI,CAACa,QAAQ,CAAC;MACZqI,aAAa,EAAE,CAAC,GAAG2O,gBAAgB,CAAC;MACpC7X,YAAY,EAAE+X;IAChB,CAAC,CAAC;EACJ;EAEAnS,6BAA6B,CAC3BuS,YAAmC,EACnCC,SAAkB,EACZ;IAAA;IACN,IAAM;MAAEnb,gBAAgB;MAAE4M;IAAQ,CAAC,GAAG,IAAI,CAAC3I,KAAK;IAChD5M,aAAa,CAACuV,OAAO,CAAC;IACtB,IAAIuO,SAAS,EAAE;MACbD,YAAY,CAAC3a,OAAO,CAACyS,UAAU,IAAI;QACjC,IAAMoI,YAAY,GAChBpb,gBAAgB,CAACI,mBAAmB,CAACwP,GAAG,CAACoD,UAAU,CAAC;QACtD,IAAMqI,eAAe,GAAGzjB,UAAU,CAChCgV,OAAO,CAAC0O,sBAAsB,EAC9BtI,UAAU,CACX;QAED,IAAIoI,YAAY,KAAKC,eAAe,EAAE;UACpCrb,gBAAgB,CAAC0a,cAAc,CAAC1H,UAAU,EAAEqI,eAAe,CAAC;QAC9D,CAAC,MAAM;UACLrb,gBAAgB,CAACub,gBAAgB,CAACvI,UAAU,CAAC;QAC/C;MACF,CAAC,CAAC;IACJ,CAAC,MAAM;MACLkI,YAAY,CAAC3a,OAAO,CAACyS,UAAU,IAAI;QACjChT,gBAAgB,CAAC0a,cAAc,CAAC1H,UAAU,EAAE,CAAC,CAAC;MAChD,CAAC,CAAC;IACJ;IACA,mBAAI,CAAC1J,IAAI,gDAAT,YAAW+L,WAAW,EAAE;EAC1B;EAEAzM,2BAA2B,GAAS;IAAA;IAClC,IAAM;MAAE5I,gBAAgB;MAAE4M;IAAQ,CAAC,GAAG,IAAI,CAAC3I,KAAK;IAChD,IAAM;MAAEhH;IAAM,CAAC,GAAG,IAAI,CAACL,KAAK;IAC5BvF,aAAa,CAACuV,OAAO,CAAC;IACtB,KAAK,IAAIxJ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGwJ,OAAO,CAACwL,WAAW,EAAEhV,CAAC,IAAI,CAAC,EAAE;MAC/CpD,gBAAgB,CAACub,gBAAgB,CAACnY,CAAC,CAAC;IACtC;IACA,IAAI,CAAC4D,yBAAyB,CAAC/J,KAAK,CAACoP,mBAAmB,CAAC;IACzD,IAAI,CAACpF,yBAAyB,CAAChK,KAAK,CAACuR,yBAAyB,CAAC;IAC/D,IAAI,CAAC5K,QAAQ,CAAC;MACZqI,aAAa,kDAAEhP,KAAK,CAACsP,WAAW,wDAAjB,oBAAmBN,aAAa,yEAAI;IACrD,CAAC,CAAC;EACJ;EAEApD,uBAAuB,CACrBrF,WAAmB,EACnBC,qBAA4C,EAC5CC,mBAA4B,EACtB;IACN,IAAM;MAAEzG;IAAM,CAAC,GAAG,IAAI,CAACL,KAAK;IAC5B,IAAI,CAACoT,YAAY,CAAC,cAAc,CAAC;IAEjC,IAAI,CAACiB,kBAAkB,CACrBzN,WAAW,EACXC,qBAAqB,EACrBxG,KAAK,CAACoD,OAAO,EACbqD,mBAAmB,CACpB;IAED,IAAI,CAACE,QAAQ,CAAC;MACZJ,WAAW;MACXC,qBAAqB;MACrBC;IACF,CAAC,CAAC;EACJ;EAsBAsC,mBAAmB,GAAS;IAAA;IAC1B,mBAAI,CAACsD,IAAI,gDAAT,YAAWkS,YAAY,EAAE;IAEzB,IAAI,IAAI,CAACtR,WAAW,EAAE;MACpB,IAAI,CAACmH,cAAc,GAAGb,qBAAqB,CAAC,IAAI,CAACxK,mBAAmB,CAAC;IACvE;EACF;EAEAC,oBAAoB,GAAS;IAC3BjL,GAAG,CAAC6V,MAAM,CAAC,sBAAsB,CAAC;IAElC,IAAI,CAAC3G,WAAW,GAAG,IAAI;IAEvB,IAAI,CAACmH,cAAc,GAAGb,qBAAqB,CAAC,IAAI,CAACxK,mBAAmB,CAAC;EACvE;EAEAE,kBAAkB,GAAS;IACzBlL,GAAG,CAAC6V,MAAM,CAAC,oBAAoB,CAAC;IAEhC,IAAI,CAAC3G,WAAW,GAAG,KAAK;EAC1B;EAEA3B,qBAAqB,CAACwJ,KAAa,EAAQ;IACzC,IAAM;MAAE0J;IAAkB,CAAC,GAAG,IAAI,CAAC7e,KAAK;IACxC,IAAM;MAAEkP;IAAgB,CAAC,GAAG,IAAI,CAAC7H,KAAK;IACtC,IAAI6H,eAAe,IAAI,IAAI,EAAE;MAC3B;IACF;IACA2P,iBAAiB,CAAC3P,eAAe,EAAEiG,KAAK,CAAC;EAC3C;EAEAvJ,qBAAqB,CAACqD,SAAiB,EAAQ;IAC7C,IAAM;MAAEC;IAAgB,CAAC,GAAG,IAAI,CAAC7H,KAAK;IACtC,IAAI6H,eAAe,IAAI,IAAI,EAAE;MAC3B;IACF;IACA,IAAI,CAACsL,eAAe,CAACvL,SAAS,EAAEC,eAAe,CAAC;EAClD;EAEArD,uBAAuB,GAAS;IAC9B,IAAI,CAAC7E,QAAQ,CAAC;MACZrB,gBAAgB,EAAE,EAAE;MACpBkJ,oBAAoB,EAAE;IACxB,CAAC,CAAC;EACJ;EAEA/C,mBAAmB,GAAS;IAC1B,IAAI,CAAC9E,QAAQ,CAAC;MAAE6H,oBAAoB,EAAE;IAAM,CAAC,CAAC;EAChD;EAEA6L,oBAAoB,CAACvM,KAAc,EAAQ;IACzC,IAAIrT,YAAY,CAACgkB,UAAU,CAAC3Q,KAAK,CAAC,EAAE;MAClC;IACF;IAEA/P,GAAG,CAAC+P,KAAK,CAACA,KAAK,CAAC;IAEhB,IAAM;MAAE4Q;IAAQ,CAAC,GAAG,IAAI,CAAC/e,KAAK;IAC9B+e,OAAO,CAAC5Q,KAAK,CAAC;EAChB;EAEA6Q,cAAc,GAAS;IAAA;IACrB,IAAM;MAAE5b;IAAiB,CAAC,GAAG,IAAI,CAACiE,KAAK;IACvC,IAAMhE,gBAAgB,GAAGD,gBAAgB,CAACkY,mBAAmB,EAAE;IAC/D,IAAM2D,OAAO,GAAG,CAAC,GAAG5b,gBAAgB,CAAC4b,OAAO,EAAE,CAAC;IAC/C,KAAK,IAAIzY,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGyY,OAAO,CAACtf,MAAM,EAAE6G,CAAC,IAAI,CAAC,EAAE;MAC1C,IAAM,CAAC4P,UAAU,EAAE8I,WAAW,CAAC,GAAGD,OAAO,CAACzY,CAAC,CAAC;MAC5C,IAAI0Y,WAAW,KAAK,CAAC,EAAE;QACrB9b,gBAAgB,CAACub,gBAAgB,CAACvI,UAAU,CAAC;MAC/C;IACF;IACA,mBAAI,CAAC1J,IAAI,gDAAT,YAAW+L,WAAW,EAAE;EAC1B;EAEA0G,UAAU,CAACvK,WAAyB,EAAEwK,aAAsB,EAAQ;IAClEhhB,GAAG,CAACqc,IAAI,CAAC,0BAA0B,EAAE7F,WAAW,CAAC;IAEjD,IAAM;MAAEvU;IAAM,CAAC,GAAG,IAAI,CAACL,KAAK;IAC5B,IAAM+U,WAAW,GAAG,IAAI,CAACC,cAAc,CAACJ,WAAW,CAAC;IACpDna,aAAa,CAACsa,WAAW,CAAC;IAC1B,IAAI1U,KAAK,CAACgf,gBAAgB,CAACzK,WAAW,CAAC,EAAE;MACvC,IAAM;QAAEnV,KAAK,EAAE6f;MAAa,CAAC,GAAG,IAAI,CAACjY,KAAK;MAC1C,IAAM5H,KAAK,GAAGjF,UAAU,CAAC+kB,mBAAmB,CAC1CD,YAAY,EACZjf,KAAK,CAACoD,OAAO,EACbsR,WAAW,EACXqK,aAAa,CACd;MAED,IAAI,CAAC5L,WAAW,CAAC/T,KAAK,CAAC;IACzB,CAAC,MAAM;MACLrB,GAAG,CAACyG,KAAK,CAAC,8BAA8B,EAAExE,KAAK,CAACoD,OAAO,CAACmR,WAAW,CAAC,CAAC;IACvE;EACF;EAEApB,WAAW,CAAC/T,KAAsB,EAAQ;IAAA;IACxC,IAAI,CAAC2T,YAAY,CAAC,YAAY,CAAC;IAC/B,IAAI,CAACpM,QAAQ,CAAC;MAAEvH;IAAM,CAAC,CAAC;IACxB,mBAAI,CAACiN,IAAI,gDAAT,YAAW+L,WAAW,EAAE;EAC1B;EAEA+G,UAAU,CACRzK,WAAuB,EAIjB;IAAA;IAAA,IAHN0K,SAAwB,uEAAGjlB,UAAU,CAAC+F,aAAa,CAACmf,IAAI;IAAA,IACxDC,KAAK,uEAAG,KAAK;IAAA,IACbP,aAAa,uEAAG,KAAK;IAErB3kB,aAAa,CAACsa,WAAW,CAAC;IAC1B,IAAM;MAAE1U;IAAM,CAAC,GAAG,IAAI,CAACL,KAAK;IAC5B,IAAMP,KAAK,GAAGjF,UAAU,CAACglB,UAAU,CACjCnf,KAAK,CAAC2Z,IAAI,EACV3Z,KAAK,CAACoD,OAAO,EACbsR,WAAW,EACX0K,SAAS,EACTE,KAAK,EACLP,aAAa,CACd;IACD,IAAI,CAAChM,YAAY,CAAC,YAAY,CAAC;IAC/B,IAAI,CAACpM,QAAQ,CAAC;MAAEvH;IAAM,CAAC,CAAC;IACxB,oBAAI,CAACiN,IAAI,iDAAT,aAAW+L,WAAW,EAAE;EAC1B;EAEAmH,OAAO,CAACvgB,WAAwB,EAAQ;IAAA;IACtC,IAAI,CAAC+T,YAAY,CAAC,cAAc,CAAC;IACjC,IAAI,CAACpM,QAAQ,CAAC;MAAE3H;IAAY,CAAC,CAAC;IAC9B,oBAAI,CAACqN,IAAI,iDAAT,aAAW+L,WAAW,EAAE;EAC1B;EAEAoH,YAAY,GAAY;IACtB,IAAM;MAAExf;IAAM,CAAC,GAAG,IAAI,CAACL,KAAK;IAC5B,OAAOK,KAAK,CAACwf,YAAY;EAC3B;EAEArS,eAAe,GAAqD;IAAA,IAApDsS,UAAU,uEAAG,IAAI,CAACnC,0BAA0B;IAC1D,IAAI;MAAEpc;IAAiB,CAAC,GAAG,IAAI,CAAC8F,KAAK;IACrC9F,gBAAgB,GAAG,CAACA,gBAAgB;IACpC,IAAI,CAACyF,QAAQ,CAAC;MAAEzF;IAAiB,CAAC,CAAC;IAEnC,IAAIA,gBAAgB,EAAE;MACpB,IAAIue,UAAU,IAAI,IAAI,EAAE;QACtB,IAAI,CAAC9C,cAAc,CAAC8C,UAAU,CAAC;MACjC,CAAC,MAAM;QACL,IAAIlL,WAAW,GAAG,CAAC;QACnB,IAAM;UAAEvU,KAAK,EAALA;QAAM,CAAC,GAAG,IAAI,CAACL,KAAK;QAC5B,IAAM;UAAEwb;QAAY,CAAC,GAAGnb,OAAK;QAC7B,KAAK,IAAImG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGgV,WAAW,EAAEhV,CAAC,IAAI,CAAC,EAAE;UACvC,IAAMuO,WAAW,GAAG,IAAI,CAACC,cAAc,CAACxO,CAAC,CAAC;UAC1C,IAAIuO,WAAW,IAAI,IAAI,EAAE;YACvB,IAAM9U,QAAM,GAAGI,OAAK,CAACoD,OAAO,CAACsR,WAAW,CAAC;YACzC,IAAI9U,QAAM,IAAI,IAAI,IAAIzF,UAAU,CAACulB,UAAU,CAAC9f,QAAM,CAAC8B,IAAI,CAAC,EAAE;cACxD6S,WAAW,GAAGpO,CAAC;cACf;YACF;UACF;QACF;QACA,IAAI,CAACwW,cAAc,CAACpI,WAAW,CAAC;MAClC;IACF,CAAC,MAAM;MAAA;MACL,oBAAI,CAAClI,IAAI,iDAAT,aAAWqQ,KAAK,EAAE;IACpB;EACF;EAEAiD,sBAAsB,GAAY;IAAA;IAChC,IAAM;MAAE3f,KAAK;MAAEqB;IAAgB,CAAC,GAAG,IAAI,CAAC1B,KAAK;IAC7C,IAAM;MAAEwE;IAAG,CAAC,GAAGnE,KAAK;IACpB,IAAM4f,iBAAiB,GAAG5f,KAAK,aAALA,KAAK,8CAALA,KAAK,CAAEsP,WAAW,wDAAlB,oBAAoBsQ,iBAAiB;IAE/D,IAAIA,iBAAiB,+BAAKzb,EAAE,CAAC0b,iBAAiB,0DAApB,sBAAsBC,mBAAmB,GAAE;MACnE,OAAO,KAAK;IACd;IACA,IAAIF,iBAAiB,gCAAKzb,EAAE,CAAC0b,iBAAiB,2DAApB,uBAAsBE,mBAAmB,GAAE;MACnE,OAAO,IAAI;IACb;IAEA,OAAO1e,eAAe;EACxB;EAEAiM,eAAe,GAAS;IACtB,IAAM;MAAEnM;IAAc,CAAC,GAAG,IAAI,CAAC6F,KAAK;IACpC,IAAI,CAAC,IAAI,CAAC2Y,sBAAsB,EAAE,EAAE;MAClC;IACF;IAEA,IAAM1G,MAAM,GAAG,CAAC9X,aAAa;IAC7B,IAAI,CAACwF,QAAQ,CACX;MACExF,aAAa,EAAE8X;IACjB,CAAC,EACD,MAAM;MAAA;MACJ,IAAIA,MAAM,4BAAI,IAAI,CAAClM,cAAc,iDAAnB,qBAAqB+K,OAAO,EAAE;QAAA;QAC1C,6BAAI,CAAC/K,cAAc,0DAAnB,sBAAqB+K,OAAO,CAAC4E,KAAK,EAAE;MACtC,CAAC,MAAM;QAAA;QACL,oBAAI,CAACrQ,IAAI,iDAAT,aAAWqQ,KAAK,EAAE;MACpB;IACF,CAAC,CACF;EACH;EAEAlP,aAAa,GAA8C;IAAA;IAAA,IAA7C0M,GAAG,uEAAG,EAAE;IAAA,IAAEpF,KAAK,uEAAG,EAAE;IAAA,IAAE2B,UAAU,uEAAG,EAAE;IACjD,IAAM;MAAEzF;IAAY,CAAC,GAAG,IAAI,CAAChK,KAAK;IAClC,IAAIkT,GAAG,IAAIpF,KAAK,EAAE;MAChB;MACA,IAAI,CAACnO,QAAQ,CAAC;QACZqK,WAAW,EAAE,IAAI;QACjBC,OAAO,EAAEiJ,GAAG;QACZ5R,SAAS,EAAEwM,KAAK;QAChB1D,2BAA2B,EAAEqF,UAAU;QACvCvF,YAAY,EAAE,EAAE;QAChBC,cAAc,EAAE;MAClB,CAAC,CAAC;MACF,IAAI,CAACnG,cAAc,CAACkP,GAAG,CAAC;MACxB;IACF;IAEA,IAAM8F,SAAS,mBAAG,IAAI,CAAC3T,IAAI,iDAAT,aAAWrF,KAAK,CAACgZ,SAAS;IAC5C,IAAMC,YAAY,mBAAG,IAAI,CAAC5T,IAAI,iDAAT,aAAWrF,KAAK,CAACiZ,YAAY;IAElD,IAAID,SAAS,IAAI,IAAI,IAAIC,YAAY,IAAI,IAAI,EAAE;MAC7C;MACA,IAAI,CAACtZ,QAAQ,CAAC;QACZqK,WAAW,EAAE,CAACA,WAAW;QACzBC,OAAO,EAAE,EAAE;QACX3I,SAAS,EAAE,EAAE;QACb4I,YAAY,EAAE,EAAE;QAChBC,cAAc,EAAE;MAClB,CAAC,CAAC;MACF;IACF;IACA;IACA,IAAM;MAAEnR;IAAM,CAAC,GAAG,IAAI,CAACL,KAAK;IAC5B,IAAM;MAAEoE,IAAI;MAAErC;IAAK,CAAC,GAAG1B,KAAK,CAACoD,OAAO,CAAC6c,YAAY,CAAC;IAElD,IAAMC,SAAS,GAAGlgB,KAAK,CAAC+U,YAAY,CAACkL,YAAY,EAAED,SAAS,CAAC;IAC7D,IAAM9J,IAAI,GAAG/Y,aAAa,CAACgjB,kBAAkB,CAACD,SAAS,EAAExe,IAAI,CAAC;IAC9D,IAAI,CAACiF,QAAQ,CAAC;MACZqK,WAAW,EAAE,CAACA,WAAW;MACzBC,OAAO,YAAK+O,SAAS,CAAE;MACvB1X,SAAS,EAAE4N,IAAI;MACf9E,2BAA2B,EAAErN,IAAI;MACjCmN,YAAY,EAAE,EAAE;MAChBC,cAAc,EAAE;IAClB,CAAC,CAAC;EACJ;EAEMhD,aAAa,GAAkB;IAAA;IAAA;MAAA;MACnC,IAAM;QAAEnO;MAAM,CAAC,GAAG,MAAI,CAACL,KAAK;MAC5B,IAAI,CAAC5G,mBAAmB,CAACiH,KAAK,CAAC,IAAI,CAACA,KAAK,CAACyF,UAAU,EAAE;QACpD,MAAM,IAAI2a,KAAK,CAAC,oCAAoC,CAAC;MACvD;MAEA,IAAM;QAAEzP;MAAmB,CAAC,GAAG,MAAI,CAAC3J,KAAK;MACzC,IAAI2J,kBAAkB,IAAI,IAAI,EAAE;QAC9B,MAAM,IAAIyP,KAAK,CAAC,0BAA0B,CAAC;MAC7C;MAEA,IAAMC,0BAA0B,gBAC9BC,QAAQ,uEAAR,UAAUC,aAAa,0DAAvB,sBAAyBC,SAAS,CAACC,QAAQ,CAAC,uBAAuB,CAAC;MACtE,IAAIJ,0BAA0B,IAAI,IAAI,IAAIA,0BAA0B,EAAE;QAAA;QACpE,IACEC,QAAQ,CAACC,aAAa,IAAI,IAAI,IAC9BD,QAAQ,CAACC,aAAa,CAACC,SAAS,CAACC,QAAQ,CAAC,OAAO,CAAC,EAClD;UACA,MAAM,IAAI/lB,eAAe,CAAC,0BAA0B,CAAC;QACvD;;QAEA;QACA,qBAAI,CAAC2R,IAAI,gDAAT,YAAWqQ,KAAK,EAAE;MACpB;MAEA,IAAMgE,qBAAqB,GAAG,MAAI,CAAClU,OAAO,CACvC+M,GAAG,CAACvZ,KAAK,CAACmO,aAAa,EAAE,CAAC,CAC1BwS,IAAI,CAAC,MAAM;QACV,MAAI,CAACha,QAAQ,CAAC;UAAEiK,gBAAgB,EAAE,IAAI;UAAED,kBAAkB,EAAE;QAAK,CAAC,CAAC;MACrE,CAAC,CAAC,CACD9C,KAAK,CAACsI,GAAG,IAAI;QACZ,IAAI,CAAC1b,YAAY,CAACgkB,UAAU,CAACtI,GAAG,CAAC,EAAE;UACjC,MAAI,CAACxP,QAAQ,CAAC;YAAEiK,gBAAgB,EAAEuF,GAAG;YAAExF,kBAAkB,EAAE;UAAK,CAAC,CAAC;QACpE;MACF,CAAC,CAAC;MACJ,MAAI,CAAChK,QAAQ,CAAC;QAAEgK,kBAAkB,EAAE+P;MAAsB,CAAC,CAAC;MAC5D,OAAOA,qBAAqB;IAAC;EAC/B;EAEM9S,cAAc,GAAkB;IAAA;IAAA;MACpC,IAAM;QAAE+C;MAAmB,CAAC,GAAG,MAAI,CAAC3J,KAAK;MACzC,IAAI2J,kBAAkB,IAAI,IAAI,EAAE;QAC9B,MAAM,IAAIyP,KAAK,CAAC,kCAAkC,CAAC;MACrD;MAEA,MAAI,CAACzZ,QAAQ,CAAC;QACZgK,kBAAkB,EAAE,IAAI;QACxBC,gBAAgB,EAAE,IAAI;QACtBjD,cAAc,EAAE,IAAIzK,GAAG,EAAE;QACzBgL,iBAAiB,EAAE,IAAIhL,GAAG;MAC5B,CAAC,CAAC;IAAC;EACL;;EAEA;AACF;AACA;AACA;EACE0d,YAAY,CAAChhB,MAAc,EAAQ;IACjC,IAAM;MAAEihB;IAAiB,CAAC,GAAG,IAAI,CAAClhB,KAAK;IACvCkhB,gBAAgB,CAACjhB,MAAM,CAAC;EAC1B;;EAEA;AACF;AACA;EACEkhB,UAAU,CAACvM,WAAuB,EAAEC,QAAoB,EAAQ;IAAA;IAC9D,IAAM;MAAExU;IAAM,CAAC,GAAG,IAAI,CAACL,KAAK;IAC5B,IAAM;MAAEyD,OAAO;MAAE2d;IAAe,CAAC,GAAG/gB,KAAK;IACzC,IAAMghB,OAAmB,GAAG,CAAC,CAAC;IAAC,6BACa;MAC1C,IAAMphB,MAAM,GAAGwD,OAAO,CAAC+C,CAAC,CAAC;MACzB,IAAM;QAAEpC,IAAI;QAAErC;MAAK,CAAC,GAAG9B,MAAM;MAC7B,IAAMkV,KAAK,GAAG9U,KAAK,CAAC+U,YAAY,CAAC5O,CAAC,EAAEqO,QAAQ,CAAC;MAC7C,IAAM0B,IAAI,GAAGlW,KAAK,CAACuV,WAAW,CAACpP,CAAC,EAAEqO,QAAQ,CAAC;MAC3C,IAAMoJ,YAAY,GAAG,MAAI,CAAC9H,gBAAgB,CAAC3P,CAAC,CAAC;MAC7C,IAAM8a,YAAY,GAChBjoB,qBAAqB,CAACgH,KAAK,CAAC,IAAIA,KAAK,CAACkhB,eAAe,CAAC1M,QAAQ,CAAC;MACjE,IAAM2M,SAAS,GAAGJ,cAAc,CAACtP,IAAI,CAACC,CAAC,IAAIA,CAAC,CAAC3N,IAAI,KAAKA,IAAI,CAAC,IAAI,IAAI;MACnEid,OAAO,CAACjd,IAAI,CAAC,GAAG;QACd+Q,KAAK;QACLoB,IAAI;QACJxU,IAAI;QACJyf,SAAS;QACTF,YAAY;QACZrD;MACF,CAAC;IACH,CAAC;IAjBD,KAAK,IAAIzX,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG/C,OAAO,CAAC9D,MAAM,EAAE6G,CAAC,IAAI,CAAC;MAAA;IAAA;IAkB1C,IAAM;MAAEib;IAAe,CAAC,GAAG,IAAI,CAACzhB,KAAK;IACrCyhB,cAAc,CAAC5M,QAAQ,EAAEwM,OAAO,CAAC;EACnC;EAEA5gB,0BAA0B,CACxBR,MAAc,EACdgE,MAA8B,EAC9BsT,OAA8B,EACxB;IACN,IAAM;MAAElX;IAAM,CAAC,GAAG,IAAI,CAACL,KAAK;IAC5B,IAAM0hB,KAAK,GAAGrhB,KAAK,CAACwP,oBAAoB,CAAC5P,MAAM,CAACmE,IAAI,CAAC;IACrD3J,aAAa,CAACinB,KAAK,CAAC;IACpB,IAAI,CAACpK,iBAAiB,CAACoK,KAAK,EAAEzd,MAAM,EAAEsT,OAAO,CAAC;EAChD;EAEA7W,8BAA8B,CAC5BT,MAAc,EACdwf,SAAwB,EAElB;IAAA;IAAA,IADNL,aAAa,uEAAG,KAAK;IAErB,IAAM;MAAE/e;IAAM,CAAC,GAAG,IAAI,CAACL,KAAK;IAC5B,IAAM4U,WAAW,GAAGvU,KAAK,CAACwP,oBAAoB,CAAC5P,MAAM,CAACmE,IAAI,CAAC;IAC3D3J,aAAa,CAACma,WAAW,CAAC;IAC1B,IAAMkC,UAAU,GAAGzW,KAAK,CAACoD,OAAO,CAACmR,WAAW,CAAC,CAACxQ,IAAI;IAClD,IAAMud,OAAO,GAAGnnB,UAAU,CAAConB,gBAAgB,CAACvhB,KAAK,CAAC2Z,IAAI,EAAElD,UAAU,CAAC;IACnE,IAAI+K,OAAO,GAAG,IAAI;IAElB,IAAIF,OAAO,IAAI,IAAI,IAAIA,OAAO,CAAClC,SAAS,KAAKA,SAAS,EAAE;MACtD,IAAIA,SAAS,KAAKjlB,UAAU,CAAC+F,aAAa,CAACuhB,UAAU,EAAE;QACrDD,OAAO,GAAG5hB,MAAM,CAAC+Z,IAAI,EAAE,CAACC,IAAI,EAAE;MAChC,CAAC,MAAM;QACL4H,OAAO,GAAG5hB,MAAM,CAAC+Z,IAAI,EAAE,CAAC+H,GAAG,EAAE;MAC/B;IACF;IAEA,IAAMtiB,KAAK,GAAGjF,UAAU,CAACwnB,gBAAgB,CACvC3hB,KAAK,CAAC2Z,IAAI,EACVlD,UAAU,EACV+K,OAAO,EACPzC,aAAa,CACd;IACDhhB,GAAG,CAACqc,IAAI,CAAC,qBAAqB,EAAEhb,KAAK,CAAC;IAEtC,IAAI,CAAC2T,YAAY,CAAC,YAAY,CAAC;IAC/B,IAAI,CAACpM,QAAQ,CAAC;MAAEvH;IAAM,CAAC,CAAC;IAExB,oBAAI,CAACiN,IAAI,iDAAT,aAAW+L,WAAW,EAAE;EAC1B;EAEA9X,wBAAwB,GAAS;IAAA;IAC/B,oBAAI,CAAC+L,IAAI,iDAAT,aAAWqQ,KAAK,EAAE;EACpB;EAEA7c,wBAAwB,CAACD,MAAsB,EAAQ;IACrD,IAAI,CAAC+G,QAAQ,CAAC;MAAEkJ,mBAAmB,EAAEjQ;IAAO,CAAC,CAAC;EAChD;EAEA6I,mBAAmB,GAAS;IAC1B,IAAI,CAAC9B,QAAQ,CAAC;MAAEqK,WAAW,EAAE;IAAK,CAAC,CAAC;EACtC;EAEAtI,mBAAmB,GAAS;IAC1B,IAAI,CAAC/B,QAAQ,CAAC;MAAEqK,WAAW,EAAE;IAAM,CAAC,CAAC;EACvC;EAEArI,wBAAwB,CAAC4L,WAAmB,EAAQ;IAAA;IAClD,IAAM;MAAE7E,sBAAsB;MAAExO;IAAiB,CAAC,GAAG,IAAI,CAAC8F,KAAK;IAC/D,IACE9F,gBAAgB,IAChBwO,sBAAsB,KAAK6E,WAAW,IACtC,6BAAI,CAACrH,cAAc,yDAAnB,qBAAqB4K,OAAO,MAAK,IAAI,EACrC;MAAA;MACA,6BAAI,CAAC5K,cAAc,0DAAnB,sBAAqB4K,OAAO,CAAC4E,KAAK,EAAE;MACpC,IAAI,CAAC/V,QAAQ,CAAC;QAAEkJ,mBAAmB,EAAE;MAAK,CAAC,CAAC;IAC9C,CAAC,MAAM;MACL,IAAI,CAAClJ,QAAQ,CAAC;QACZ+I,sBAAsB,EAAE,IAAI;QAC5BG,mBAAmB,EAAE;MACvB,CAAC,CAAC;IACJ;EACF;EAEArG,YAAY,GAAS;IACnB,IAAI,CAACyS,QAAQ,EAAE;EACjB;;EAEA;EACA/S,iBAAiB,GAAS;IACxB;EAAA;EAGFC,iBAAiB,CAACiJ,QAA8B,EAAQ;IACtD,IAAM;MAAEpS,KAAK;MAAE4hB;IAAc,CAAC,GAAG,IAAI,CAACjiB,KAAK;IAC3CiiB,aAAa,CAACxP,QAAQ,EAAEpS,KAAK,CAAC;EAChC;EAEAoJ,eAAe,CAAC0E,KAAa,EAAQ;IACnC/P,GAAG,CAAC8jB,IAAI,CAAC,YAAY,EAAE/T,KAAK,CAAC;IAC7B,IAAI,CAACnH,QAAQ,CAAC;MACZkK,YAAY,eAAE;QAAK,SAAS,EAAC,eAAe;QAAA,oBAAK/C,KAAK;MAAA;IACxD,CAAC,CAAC;EACJ;EAEAzE,qBAAqB,CAACyL,KAAa,EAAQ;IACzC,IAAI,CAAC/B,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC;IAEvC,IAAI,CAACpM,QAAQ,CAAC,UAA8C;MAAA,IAA7C;QAAE+I,sBAAsB;QAAE3Q;MAAa,CAAC;MACrD,IAAMuX,eAAe,GAAG,IAAIpT,GAAG,CAACnE,YAAY,CAAC;MAC7C,IAAI2Q,sBAAsB,IAAI,IAAI,EAAE;QAClC,IAAMqG,UAAU,GAAG,IAAI,CAACpB,cAAc,CAACjF,sBAAsB,CAAC;QAC9DtV,aAAa,CAAC2b,UAAU,CAAC;QACzB,IAAI,CAACa,gBAAgB,CAACb,UAAU,EAAEjB,KAAK,EAAEwB,eAAe,CAAC;MAC3D;MACA,OAAO;QAAEvX,YAAY,EAAEuX;MAAgB,CAAC;IAC1C,CAAC,CAAC;EACJ;EAEAhN,mBAAmB,GAAiD;IAAA,IAAhDwY,YAAY,uEAAG,IAAI;IAAA,IAAEC,YAAY,uEAAG,IAAI;IAC1D,IAAID,YAAY,EAAE;MAAA;MAChB,oBAAI,CAACzV,IAAI,iDAAT,aAAWqQ,KAAK,EAAE;IACpB;IACA,IAAIqF,YAAY,EAAE;MAChB,IAAI,CAACpb,QAAQ,CAAC;QAAE+I,sBAAsB,EAAE;MAAK,CAAC,CAAC;IACjD;EACF;EAEAnG,kBAAkB,CAACyY,QAAiB,EAAQ;IAC1C,IAAM;MAAEtS;IAAuB,CAAC,GAAG,IAAI,CAAC1I,KAAK;IAC7C5M,aAAa,CAACsV,sBAAsB,CAAC;IACrC,IAAIsS,QAAQ,EAAE;MACZ,IAAI,CAACrF,cAAc,CAACjN,sBAAsB,GAAG,CAAC,CAAC;IACjD,CAAC,MAAM;MACL,IAAI,CAACiN,cAAc,CAACjN,sBAAsB,GAAG,CAAC,CAAC;IACjD;EACF;EAEAvF,qBAAqB,CACnB4L,UAAsB,EACtBkM,cAAwC,EAClC;IACN,IAAM;MAAEjiB;IAAM,CAAC,GAAG,IAAI,CAACL,KAAK;IAC5B,IAAMC,MAAM,GAAGI,KAAK,CAACoD,OAAO,CAAC2S,UAAU,CAAC;IACxC,IAAM;MAAExH,qBAAqB,EAAE2T;IAA0B,CAAC,GAAG,IAAI,CAAClb,KAAK;IACvE,IAAMuH,qBAAqB,GAAG,IAAIrL,GAAG,CAACgf,yBAAyB,CAAC;IAEhE,IAAID,cAAc,IAAI,IAAI,EAAE;MAC1B,IAAME,cAAc,GAAGhoB,UAAU,CAACioB,iBAAiB,CAACxiB,MAAM,CAAC8B,IAAI,CAAC;MAChEtH,aAAa,CAAC+nB,cAAc,CAAC;MAC7B,IAAME,oBAAoB,GAAGpoB,SAAS,CAACqoB,wBAAwB,CAC7DH,cAAc,EACdviB,MAAM,CAACmE,IAAI,EACXke,cAAc,CACf;MAED1T,qBAAqB,CAACwI,GAAG,CAACnX,MAAM,CAACmE,IAAI,EAAEse,oBAAoB,CAAC;IAC9D,CAAC,MAAM;MACL9T,qBAAqB,CAACoI,MAAM,CAAC/W,MAAM,CAACmE,IAAI,CAAC;IAC3C;IAEA,IAAI,CAACgV,eAAe,CAAC;MAAExK;IAAsB,CAAC,CAAC;EACjD;EAEA9E,UAAU,CAACmR,CAAsC,EAAQ;IACvDA,CAAC,CAAC2H,eAAe,EAAE;IACnB,IAAI,CAAC5b,QAAQ,CAAC;MAAEvB,WAAW,EAAE;IAAK,CAAC,CAAC;EACtC;EAEAsE,eAAe,GAAS;IACtB,IAAI,CAAC/C,QAAQ,CAAC;MAAEvB,WAAW,EAAE,KAAK;MAAEqL,WAAW,EAAE;IAAG,CAAC,CAAC;EACxD;EAEA7G,cAAc,GAAS;IACrB,IAAI,CAACjD,QAAQ,CAAC,UAAqB;MAAA,IAApB;QAAE8J;MAAY,CAAC;MAC5B,IAAM+R,UAAU,GAAG,CAAC,GAAG/R,WAAW,CAAC;MACnC+R,UAAU,CAACC,GAAG,EAAE;MAChB,OAAO;QAAEhS,WAAW,EAAE+R;MAAW,CAAC;IACpC,CAAC,CAAC;EACJ;EAEA7Y,gBAAgB,CAAC+Y,MAAkB,EAAQ;IACzC,IAAI,CAAC/b,QAAQ,CAAC;MAAA,IAAC;QAAE8J;MAAY,CAAC;MAAA,OAAM;QAClCA,WAAW,EAAE,CAAC,GAAGA,WAAW,EAAEiS,MAAM;MACtC,CAAC;IAAA,CAAC,CAAC;EACL;EAEA7Y,mBAAmB,CAAC8Y,KAAY,EAAQ;IACtC,IAAMC,WAAW,GAAGD,KAAoB;IACxC5kB,GAAG,CAAC+P,KAAK,CAAC,iBAAiB,EAAE8U,WAAW,CAACC,MAAM,CAAC;IAChD,IAAI,CAAC7G,WAAW,EAAE;IAClB,IAAI,IAAI,CAACE,WAAW,EAAE,EAAE;MACtB,IAAI,CAACnJ,YAAY,CAAC,yBAAyB,EAAE,IAAI,CAAC;MAClD,IAAI,CAACkJ,QAAQ,EAAE;IACjB,CAAC,MAAM;MACLle,GAAG,CAAC+P,KAAK,CAAC,qCAAqC,CAAC;MAChD,IAAM;QAAE4Q;MAAQ,CAAC,GAAG,IAAI,CAAC/e,KAAK;MAC9B+e,OAAO,CAAC,IAAI0B,KAAK,mCAA4BwC,WAAW,CAACC,MAAM,EAAG,CAAC;IACrE;EACF;EAEA5Y,YAAY,GAAS;IAAA;IACnBlM,GAAG,CAAC6V,MAAM,CAAC,uBAAuB,CAAC;IAEnC,IAAM;MACJhV,eAAe;MACfC,mBAAmB;MACnBC,aAAa;MACbC,YAAY;MACZC,WAAW;MACXC,YAAY;MACZC,YAAY;MACZC,qBAAqB;MACrBC;IACF,CAAC,GAAG,IAAI,CAAC4H,KAAK;IAEd,IAAMpC,MAAM,GAAG;MACbhG,eAAe;MACfC,mBAAmB;MACnBC,aAAa;MACbC,YAAY;MACZC,WAAW;MACXC,YAAY;MACZC,YAAY;MACZC,qBAAqB;MACrBC;IACF,CAAC;IAED,IAAI,CAACT,aAAa,CAACiG,MAAM,CAAC,EAAE;MAC1B,IAAI,CAAC2H,gBAAgB,GAAG3H,MAAM;IAChC,CAAC,MAAM;MACL,IAAI,CAAC2H,gBAAgB,GAAG,IAAI;IAC9B;IAEA,oBAAI,CAACF,IAAI,iDAAT,aAAW+L,WAAW,EAAE;IACxB,IAAI,CAAC4D,WAAW,EAAE;EACpB;EAEA9R,iBAAiB,CAACyF,OAAqB,EAAQ;IAAA;IAC7C,IAAM;MAAE3P;IAAM,CAAC,GAAG,IAAI,CAACL,KAAK;IAC5B,IAAM;MAAEmjB,eAAe,GAAG;IAAE,CAAC,uCAAG,IAAI,CAACzW,IAAI,iDAAT,aAAWrF,KAAK,+DAAI,CAAC,CAAC;IACtD,IAAI0J,eAAe,GAAG,CAAC;IACvB,IAAI3X,mBAAmB,CAACiH,KAAK,CAAC,IAAIA,KAAK,CAACyF,UAAU,EAAE;MAClDrL,aAAa,CAACuV,OAAO,CAAC;MACtB,IAAM;QAAEoT;MAAe,CAAC,GAAGpT,OAAO;;MAElC;MACA;MACA,IAAMqT,iBAAiB,GAAGhjB,KAAK,CAACob,QAAQ,GAAGpb,KAAK,CAAC6V,sBAAsB;MACvE,IAAIiN,eAAe,KAAKE,iBAAiB,GAAG,CAAC,EAAE;QAC7C;QACAtS,eAAe,GAAG1Q,KAAK,CAAC0Q,eAAe,GAAG,CAAC;MAC7C,CAAC,MAAM,IAAIoS,eAAe,KAAKE,iBAAiB,GAAG,CAAC,EAAE;QACpD;QACAtS,eAAe,GAAG1Q,KAAK,CAAC0Q,eAAe;MACzC,CAAC,MAAM;QACL;QACAA,eAAe,GAAGgD,IAAI,CAAC3T,GAAG,CACxB,CAAC,EACDgjB,cAAc,IACX/iB,KAAK,CAACob,QAAQ,GAAGpb,KAAK,CAAC0Q,eAAe,CAAC,GACxC1Q,KAAK,CAAC4V,mBAAmB,GACzB5V,KAAK,CAAC6V,sBAAsB,GAC5B,CAAC,CACJ;MACH;IACF;IAEA,IAAI,CAAClP,QAAQ,CAAC;MAAEgJ,OAAO;MAAEe;IAAgB,CAAC,CAAC;EAC7C;EAEA5G,sBAAsB,CAACiG,cAAqC,EAAQ;IAClE3V,aAAa,CAAC2V,cAAc,CAAC;IAC7B,IAAM;MAAEkT;IAAmB,CAAC,GAAG,IAAI,CAACtjB,KAAK;IACzC,IAAM;MAAEqQ;IAAc,CAAC,GAAG,IAAI,CAAChJ,KAAK;IACpC,IAAI,CAACL,QAAQ,CAAC;MAAEoJ;IAAe,CAAC,CAAC;IACjC,IAAIC,aAAa,IAAI,IAAI,EAAE;MACzB,IAAI,CAACrJ,QAAQ,CAAC;QAAEqJ,aAAa,EAAE;MAAK,CAAC,CAAC;IACxC;IACAiT,kBAAkB,CAAClT,cAAc,CAAC;EACpC;EAEAhG,yBAAyB,CACvBjE,YAAsC,EACtCod,eAA4B,EACtB;IACN,IAAI,CAACvc,QAAQ,CAAC;MAAEb;IAAa,CAAC,EAAEod,eAAe,CAAC;EAClD;EAEAlZ,yBAAyB,CAACiF,kBAA0C,EAAQ;IAC1E,IAAM;MAAEjP;IAAM,CAAC,GAAG,IAAI,CAACL,KAAK;IAC5B,IAAI,CAACgH,QAAQ,CACX;MACEsI,kBAAkB,EAAE9R,aAAa,CAACgmB,uBAAuB,CACvDnjB,KAAK,EACLiP,kBAAkB,CACnB,CAACmU;IACJ,CAAC,EACD;MAAA;MAAA,uBAAM,IAAI,CAAC/W,IAAI,iDAAT,aAAW+L,WAAW,EAAE;IAAA,EAC/B;EACH;EAEAxQ,gBAAgB,CAACyb,OAAgB,EAAQ;IACvC;IACA,IAAIA,OAAO,IAAI,IAAI,EAAE;MACnBA,OAAO,CAACC,UAAU,EAAE;IACtB;IAEA,IAAI,CAACD,OAAO,GAAGA,OAAO;EACxB;EAEA/Y,8BAA8B,CAC5BgE,kBAAoD,EAC9C;IACNvQ,GAAG,CAACyG,KAAK,CAAC,6BAA6B,EAAE8J,kBAAkB,CAAC;IAC5D,IAAI,CAAC3H,QAAQ,CAAC;MAAE2H;IAAmB,CAAC,CAAC;EACvC;EAEAlE,6BAA6B,GAAS;IACpCrM,GAAG,CAACyG,KAAK,CAAC,+BAA+B,CAAC;IAC1C,IAAM;MAAEiM,WAAW;MAAEnC;IAAmB,CAAC,GAAG,IAAI,CAACtH,KAAK;IACtD,IAAI,CAACL,QAAQ,CAAC;MACZ8J,WAAW,EAAE,CACX,GAAGA,WAAW,EACd;QACE/O,IAAI,EAAE5E,UAAU,CAACymB,2BAA2B;QAC5C3hB,KAAK;MACP,CAAC,CACF;MACDwO,0BAA0B,EAAE9B,kBAAkB,CAAChP,MAAM;MACrD;MACAsH,wBAAwB,EAAEnC;IAC5B,CAAC,CAAC;EACJ;EAEA4F,2BAA2B,CAACgX,KAAa,EAAQ;IAC/CtjB,GAAG,CAACyG,KAAK,CAAC,yBAAyB,EAAE6c,KAAK,CAAC;IAC3C,IAAM;MAAE5Q,WAAW;MAAEnC;IAAmB,CAAC,GAAG,IAAI,CAACtH,KAAK;IACtD,IAAI,CAACL,QAAQ,CAAC;MACZ8J,WAAW,EAAE,CACX,GAAGA,WAAW,EACd;QACE/O,IAAI,EAAE5E,UAAU,CAACymB,2BAA2B;QAC5C3hB,KAAK;MACP,CAAC,CACF;MACDwO,0BAA0B,EAAEiR,KAAK;MACjC;MACAza,wBAAwB,oBAAO0H,kBAAkB,CAAC+S,KAAK,CAAC;IAC1D,CAAC,CAAC;EACJ;;EAEA;;EAQA9W,iCAAiC,CAAC3F,MAA6B,EAAQ;IACrE7G,GAAG,CAACyG,KAAK,CAAC,iCAAiC,EAAEI,MAAM,CAAC;IACpD,IAAI,CAAC+B,QAAQ,CACXK,KAAK,IAAI;MACP,IAAIA,KAAK,CAACoJ,0BAA0B,KAAK,IAAI,EAAE;QAC7CrS,GAAG,CAACyG,KAAK,CAAC,sBAAsB,CAAC;QACjC,OAAO,IAAI;MACb;MACA,IAAM8J,kBAAkB,GAAG,CAAC,GAAGtH,KAAK,CAACsH,kBAAkB,CAAC;MACxDA,kBAAkB,CAACtH,KAAK,CAACoJ,0BAA0B,CAAC,GAAGxL,MAAM;MAC7D,OAAO;QAAE0J;MAAmB,CAAC;IAC/B,CAAC,EACD,MAAM;MACJ,IAAI,CAAC1E,cAAc,EAAE;IACvB,CAAC,CACF;EACH;EAEAY,mCAAmC,GAAS;IAC1C,IAAI,CAACZ,cAAc,EAAE;IACrB;IACA;IACA,IAAI,CAACjD,QAAQ,CAAC;MAAEyJ,0BAA0B,EAAE;IAAK,CAAC,CAAC;EACrD;EAEA3F,yBAAyB,CAAC3L,aAAgC,EAAQ;IAChEf,GAAG,CAACqc,IAAI,+BAA+Btb,aAAa,CAAC;IAErD,IAAM;MAAEkB;IAAM,CAAC,GAAG,IAAI,CAACL,KAAK;IAC5B,IAAM;MACJmG,YAAY;MACZ1G,KAAK;MACLL,YAAY;MACZH,eAAe;MACfO;IACF,CAAC,GAAG,IAAI,CAAC6H,KAAK;IAEd,IAAM;MAAE5D;IAAQ,CAAC,GAAGpD,KAAK;IACzB,IAAMwjB,gBAAgB,GAAGxjB,KAAK,CAAClB,aAAa,CAACmF,GAAG,CAC9Cwf,YAAY,cAAOA,YAAY,CAAE,CAClC;IAED,IAAMC,kBAAkB,GAAGvmB,aAAa,CAACwmB,2BAA2B,CAClEH,gBAAgB,EAChB1kB,aAAa,CACd;IACD,IAAI4kB,kBAAkB,CAACpkB,MAAM,GAAG,CAAC,EAAE;MACjC,IAAMskB,QAAQ,GAAGzmB,aAAa,CAAC0mB,oBAAoB,CACjDzkB,KAAK,EACLskB,kBAAkB,CACnB;MACD,IAAMpN,eAAe,GAAGnZ,aAAa,CAAC2mB,sBAAsB,CAC1D1gB,OAAO,EACPrE,YAAY,EACZ2kB,kBAAkB,CACnB;MACD,IAAMrN,kBAAkB,GAAGlZ,aAAa,CAAC2mB,sBAAsB,CAC7D1gB,OAAO,EACPxE,eAAe,EACf8kB,kBAAkB,CACnB;MACD,IAAM7F,eAAe,GAAG1gB,aAAa,CAAC4mB,4BAA4B,CAChE3gB,OAAO,EACP0C,YAAY,EACZ4d,kBAAkB,CACnB;MACD,IAAMM,wBAAwB,GAC5B7mB,aAAa,CAAC8mB,sCAAsC,CAClD9kB,qBAAqB,EACrBukB,kBAAkB,CACnB;MACH,IAAIE,QAAQ,CAACtkB,MAAM,KAAKF,KAAK,CAACE,MAAM,EAAE;QACpCvB,GAAG,CAACyG,KAAK,CAAC,+CAA+C,CAAC;QAC1D,IAAI,CAACmC,QAAQ,CAAC;UAAEvH,KAAK,EAAEwkB;QAAS,CAAC,CAAC;MACpC;MACA,IACEtN,eAAe,CAACjX,IAAI,KAAKN,YAAY,CAACM,IAAI,IAC1CgX,kBAAkB,CAAChX,IAAI,KAAKT,eAAe,CAACS,IAAI,EAChD;QACAtB,GAAG,CAACyG,KAAK,mDAAmD;QAC5D,IAAI,CAACmC,QAAQ,CAAC;UACZ5H,YAAY,EAAEuX,eAAe;UAC7B1X,eAAe,EAAEyX;QACnB,CAAC,CAAC;MACJ;MACA,IAAI,CAACre,SAAS,CAAC8N,YAAY,EAAE+X,eAAe,CAAC,EAAE;QAC7C9f,GAAG,CAACyG,KAAK,oDAEPqZ,eAAe,CAChB;QACD,IAAI,CAAClX,QAAQ,CAAC;UAAEb,YAAY,EAAE+X;QAAgB,CAAC,CAAC;MAClD;MACA,IAAI,CAAC7lB,SAAS,CAACmH,qBAAqB,EAAE6kB,wBAAwB,CAAC,EAAE;QAC/DjmB,GAAG,CAACyG,KAAK,6DAEPqZ,eAAe,CAChB;QACD,IAAI,CAAClX,QAAQ,CAAC;UAAExH,qBAAqB,EAAE6kB;QAAyB,CAAC,CAAC;MACpE;IACF;IAEA,IAAI,CAACrd,QAAQ,CAAC;MAAE7H;IAAc,CAAC,CAAC;IAChC,IAAIA,aAAa,CAACQ,MAAM,GAAG,CAAC,EAAE;MAC5B;MACA;MACA,IAAI,CAACyT,YAAY,CAAC,4BAA4B,CAAC;IACjD;EACF;EAEArI,0BAA0B,GAAS;IACjC3M,GAAG,CAACyG,KAAK,CAAC,wBAAwB,CAAC;IACnC,IAAM;MAAE8L;IAAQ,CAAC,GAAG,IAAI,CAACtJ,KAAK;IAC9B,IAAIsJ,OAAO,EAAE;MAAA;MACX,IAAI,CAAC0L,WAAW,EAAE;MAClB,oBAAI,CAAC3P,IAAI,iDAAT,aAAW+L,WAAW,EAAE;IAC1B,CAAC,MAAM;MACL,IAAI,CAACrG,SAAS,EAAE;IAClB;EACF;EAEAlH,0BAA0B,GAAkB;IAC1C,OAAO,IAAI,CAACsD,aAAa,EAAE;EAC7B;EAEArD,2BAA2B,GAAkB;IAC3C,OAAO,IAAI,CAAC8C,cAAc,EAAE;EAC9B;EAEAhD,wBAAwB,GAAS;IAAA;IAC/B7M,GAAG,CAACyG,KAAK,CAAC,sBAAsB,CAAC;IACjC,IAAM;MAAExE;IAAM,CAAC,GAAG,IAAI,CAACL,KAAK;IAC5B,IAAM;MAAEgO,cAAc;MAAEO;IAAkB,CAAC,GAAGlO,KAAK;IACnD,IAAI,CAAC2G,QAAQ,CAAC;MACZgH,cAAc;MACdO,iBAAiB;MACjB0C,gBAAgB,EAAE;IACpB,CAAC,CAAC;IACF,oBAAI,CAACvE,IAAI,iDAAT,aAAW+L,WAAW,EAAE;EAC1B;;EAEA;AACF;AACA;AACA;EACEvP,wBAAwB,CAAChK,mBAAwC,EAAQ;IACvEd,GAAG,CAACyG,KAAK,CAAC,0BAA0B,EAAE3F,mBAAmB,CAAC;IAE1D,IAAI,CAACkU,YAAY,uBACAlU,mBAAmB,CAACL,YAAY,CAC5CyF,GAAG,CAACJ,CAAC,IAAIA,CAAC,CAACN,SAAS,CAAC,CACrB2gB,IAAI,CAAC,IAAI,CAAC,SACd;IACD,IAAI,CAACvd,QAAQ,CAAC;MAAE9H;IAAoB,CAAC,CAAC;EACxC;;EAEA;AACF;AACA;AACA;EACE+J,uBAAuB,CAACub,WAAwB,EAAQ;IACtDpmB,GAAG,CAACyG,KAAK,CAAC,yBAAyB,EAAE2f,WAAW,CAAC;IAEjD,IAAI,CAACpR,YAAY,uBAAgBoR,WAAW,CAAC5gB,SAAS,SAAM;IAC5D,IAAI,CAACoD,QAAQ,CAAC;MAAA,IAAC;QAAE9H;MAAoB,CAAC;MAAA,OAAM;QAC1C2R,mBAAmB,EAAE2T,WAAW;QAChCtlB,mBAAmB,kCACdA,mBAAmB;UACtBL,YAAY,EAAEK,mBAAmB,CAACL,YAAY,CAACyF,GAAG,CAACJ,CAAC,IAClDA,CAAC,CAACN,SAAS,KAAK4gB,WAAW,CAAC5gB,SAAS,GAAG4gB,WAAW,GAAGtgB,CAAC;QACxD;MAEL,CAAC;IAAA,CAAC,CAAC;EACL;;EAEA;AACF;AACA;AACA;EACEiF,qBAAqB,CAACqb,WAAwB,EAAQ;IACpDpmB,GAAG,CAACyG,KAAK,CAAC,uBAAuB,EAAE2f,WAAW,CAAC;IAE/C,IAAM;MAAE1T;IAAY,CAAC,GAAG,IAAI,CAACzJ,KAAK;IAElC,IAAI,CAACL,QAAQ,CAAC;MACZ8J,WAAW,EAAE,CACX,GAAGA,WAAW,EACd;QACE/O,IAAI,EAAE5E,UAAU,CAACsnB,gBAAgB;QACjCxiB,KAAK,4BAAqBuiB,WAAW,CAAC5gB,SAAS;MACjD,CAAC,CACF;MACDiN,mBAAmB,EAAE2T;IACvB,CAAC,CAAC;EACJ;EAEAtY,kBAAkB,CAAC5M,YAA4B,EAAQ;IAAA;IACrDlB,GAAG,CAACqc,IAAI,CAAC,eAAe,EAAEnb,YAAY,CAAC;IAEvC,IAAI,CAAColB,kBAAkB,EAAE;IACzB,IAAI,CAAC1F,cAAc,EAAE;IACrB,IAAI,CAACnH,eAAe,EAAE;IAEtB,IAAI,CAACzE,YAAY,wDACQ9T,YAAY,aAAZA,YAAY,iDAAZA,YAAY,CAAEmE,OAAO,2DAArB,uBAAuB8gB,IAAI,CAAC,IAAI,CAAC,yEAAI,EAAE,SAC/D;;IAED;IACA;IACA;IACA,IAAI,CAACvd,QAAQ,CAAC;MACZ1H,YAAY;MACZ6G,YAAY,EAAE,EAAE;MAChBkJ,aAAa,EAAE,EAAE;MACjB5P,KAAK,EAAE,EAAE;MACTJ,WAAW,EAAE7E,UAAU,CAACoF,YAAY,CAACC,IAAI;MACzCL,qBAAqB,EAAE;IACzB,CAAC,CAAC;EACJ;EAEAwL,2BAA2B,CAAC2Z,WAAkC,EAAQ;IACpEvmB,GAAG,CAACyG,KAAK,CAAC,uBAAuB,EAAE8f,WAAW,CAAC;IAE/C,IAAI,CAACD,kBAAkB,EAAE;IAEzB,IAAI,CAAC1F,cAAc,EAAE;IACrB,IAAI,CAACnH,eAAe,EAAE;IAEtB,IAAI,CAACzE,YAAY,wCAEbuR,WAAW,CAAChlB,MAAM,GAAG,CAAC,GAAGglB,WAAW,CAACJ,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAEvD;IAED,IAAI,CAACvd,QAAQ,CAAC;MACZxH,qBAAqB,EAAEmlB,WAAW;MAClCxe,YAAY,EAAE,EAAE;MAChB1G,KAAK,EAAE,EAAE;MACTJ,WAAW,EAAE7E,UAAU,CAACoF,YAAY,CAACC;IACvC,CAAC,CAAC;EACJ;EAEA0L,wBAAwB,GAAS;IAC/B,IAAM;MAAE9J;IAAe,CAAC,GAAG,IAAI,CAACzB,KAAK;IACrC,IAAIyB,cAAc,EAAE;MAClB,IAAI,CAACuF,QAAQ,CAAC;QACZ0J,kBAAkB,EAAE,IAAI;QACxBxJ,qBAAqB,EAAE,CAAC;QACxBC,0BAA0B,EAAE,IAAI;QAChCC,mBAAmB,EAAE/J,gBAAgB,CAACiK,eAAe,CAACsd;MACxD,CAAC,CAAC;IACJ,CAAC,MAAM;MACLxmB,GAAG,CAAC+P,KAAK,CACP,iFAAiF,CAClF;IACH;EACF;EAEA7C,mBAAmB,CACjBuZ,QAAgB,EAChBC,WAAkB,EAClBC,iBAA4C,EAC5CC,cAAoC,EACpCC,WAAiC,EACjCC,oBAA6B,EAC7BC,oBAA6B,EACvB;IACN,IAAM;MAAE1jB;IAAe,CAAC,GAAG,IAAI,CAACzB,KAAK;IACrC,IAAIyB,cAAc,EAAE;MAClBrD,GAAG,CAACqc,IAAI,CACN,yBAAyB,EACzBoK,QAAQ,EACRC,WAAW,EACXC,iBAAiB,EACjBC,cAAc,EACdC,WAAW,EACXC,oBAAoB,EACpBC,oBAAoB,CACrB;MACD,IAAI,CAACne,QAAQ,CAAC,MAAM;QAClB,IAAI,IAAI,CAACmG,UAAU,EAAE;UACnB,IAAI,CAACA,UAAU,CAACiY,aAAa,CAC3BP,QAAQ,EACRC,WAAW,EACXC,iBAAiB,EACjBC,cAAc,EACdC,WAAW,EACXC,oBAAoB,EACpBC,oBAAoB,CACrB;QACH;QACA,OAAO;UACL/d,mBAAmB,EAAE/J,gBAAgB,CAACiK,eAAe,CAACC;QACxD,CAAC;MACH,CAAC,CAAC;IACJ,CAAC,MAAM;MACLnJ,GAAG,CAAC+P,KAAK,CACP,4EAA4E,CAC7E;IACH;EACF;EAEMtF,OAAO,CAACwc,WAAmB,EAAsC;IAAA;MAAA;IAAA;MAAA;MAAA,IAApCC,WAAW,0EAAG,KAAK;MACpD,IAAM;QACJ7T,2BAA2B,EAAE8T,kBAAkB;QAC/C7T;MACF,CAAC,GAAG,MAAI,CAACrK,KAAK;MACd,IAAM;QAAEhH;MAAM,CAAC,GAAG,MAAI,CAACL,KAAK;MAC5B,IAAM;QAAEwE;MAAG,CAAC,GAAGnE,KAAK;MACpB,IAAI,CAACA,KAAK,CAACmlB,kBAAkB,EAAE;QAC7B;MACF;MAEA,IAAIH,WAAW,KAAK,EAAE,EAAE;QACtB;MACF;MACA,IAAMI,cAAc,GAAGjoB,aAAa,CAACkoB,eAAe,CAClDrlB,KAAK,CAACoD,OAAO,EACb8hB,kBAAkB,CACnB;MAED,IAAIE,cAAc,KAAK3gB,SAAS,EAAE;QAChC;MACF;MAEA,IAAI6gB,aAAa,kBAAG,MAAI,CAACjZ,IAAI,gDAAT,YAAWrF,KAAK,CAACgZ,SAAS;MAE9C,IAAIsF,aAAa,IAAI,IAAI,EAAE;QACzBA,aAAa,GAAG,CAAC;MACnB;MAEA,IAAMC,UAAU,GACdlU,uBAAuB,KAAKxW,UAAU,CAAC4lB,QAAQ,IAC/CpP,uBAAuB,KAAKxW,UAAU,CAAC2qB,kBAAkB;MAC3D,IAAMC,YAAY,GAChBpU,uBAAuB,KAAKxW,UAAU,CAACyW,YAAY,IACnDD,uBAAuB,KAAKxW,UAAU,CAAC2qB,kBAAkB;MAE3D,IAAI;QAAA;QACF,IAAM;UAAErlB;QAAU,CAAC,GAAGH,KAAK;QAC3B,IAAM0lB,cAAc,GAAGvrB,UAAU,CAACioB,iBAAiB,CAACgD,cAAc,CAAC1jB,IAAI,CAAC;QAExE,IAAI8S,QAAQ;QAEZ,QAAQkR,cAAc;UACpB,KAAKvrB,UAAU,CAACwrB,QAAQ,CAACC,IAAI;UAC7B,KAAKzrB,UAAU,CAACwrB,QAAQ,CAACE,MAAM;YAAE;cAC/BrR,QAAQ,SAASxU,KAAK,CAACwI,OAAO,CAC5B8c,aAAa,EACbF,cAAc,EACdjhB,EAAE,CAAC2hB,SAAS,CAACD,MAAM,EACnBb,WAAW,EACXS,YAAY,EACZF,UAAU,EACVN,WAAW,aAAXA,WAAW,cAAXA,WAAW,GAAI,KAAK,CACrB;cACD;YACF;UACA,KAAK9qB,UAAU,CAACwrB,QAAQ,CAACI,QAAQ;YAAE;cACjC,IAAM,CAACC,SAAS,CAAC,GAAGhsB,SAAS,CAACisB,cAAc,CAC1C9hB,EAAE,EACF6gB,WAAW,EACX7kB,SAAS,CAACmV,QAAQ,CACnB;cACDd,QAAQ,SAASxU,KAAK,CAACwI,OAAO,CAC5B8c,aAAa,EACbF,cAAc,EACdjhB,EAAE,CAAC2hB,SAAS,CAACC,QAAQ,EACrBC,SAAS,EACTvhB,SAAS,EACTA,SAAS,EACTwgB,WAAW,aAAXA,WAAW,cAAXA,WAAW,GAAI,KAAK,CACrB;cACD;YACF;UACA,KAAK9qB,UAAU,CAACwrB,QAAQ,CAACO,OAAO;UAChC,KAAK/rB,UAAU,CAACwrB,QAAQ,CAACQ,GAAG;YAAE;cAC5B,IACE,CAAChsB,UAAU,CAACisB,gBAAgB,CAAChB,cAAc,CAAC1jB,IAAI,CAAC,IACjD,CAACvH,UAAU,CAACksB,gBAAgB,CAACjB,cAAc,CAAC1jB,IAAI,CAAC,EACjD;gBACA,IAAI4kB,UAAU,GAAGC,QAAQ,CAACvB,WAAW,EAAE,EAAE,CAAC;gBAC1C,IAAIA,WAAW,KAAK,WAAW,EAAE;kBAC/BsB,UAAU,GAAGE,MAAM,CAACC,iBAAiB;gBACvC,CAAC,MAAM,IAAIzB,WAAW,KAAK,UAAU,EAAE;kBACrCsB,UAAU,GAAGE,MAAM,CAACE,iBAAiB;gBACvC;gBAEAlS,QAAQ,SAASxU,KAAK,CAACwI,OAAO,CAC5B8c,aAAa,EACbF,cAAc,EACdjhB,EAAE,CAAC2hB,SAAS,CAACa,MAAM,EACnBL,UAAU,EACV7hB,SAAS,EACTA,SAAS,EACTwgB,WAAW,aAAXA,WAAW,cAAXA,WAAW,GAAI,KAAK,CACrB;cACH,CAAC,MAAM;gBACLzQ,QAAQ,SAASxU,KAAK,CAACwI,OAAO,CAC5B8c,aAAa,EACbF,cAAc,EACdjhB,EAAE,CAAC2hB,SAAS,CAACD,MAAM,EACnBb,WAAW,EACXvgB,SAAS,EACTA,SAAS,EACTwgB,WAAW,aAAXA,WAAW,cAAXA,WAAW,GAAI,KAAK,CACrB;cACH;cACA;YACF;UACA;YAAS;cACPzQ,QAAQ,SAASxU,KAAK,CAACwI,OAAO,CAC5B8c,aAAa,EACbF,cAAc,EACdjhB,EAAE,CAAC2hB,SAAS,CAACD,MAAM,EACnB,MAAI,CAACtlB,UAAU,CAACqmB,SAAS,CACvBxB,cAAc,CAAC1jB,IAAI,EACnBsjB,WAAW,EACX7kB,SAAS,CAACmV,QAAQ,CACnB,EACD7Q,SAAS,EACTA,SAAS,EACTwgB,WAAW,aAAXA,WAAW,cAAXA,WAAW,GAAI,KAAK,CACrB;YACH;QAAC;QAGH,sBAAI,CAAC5Y,IAAI,iDAAT,aAAWwa,WAAW,CAACrS,QAAQ,CAAC;QAChC,MAAI,CAAC7N,QAAQ,CAAC;UAAEwK,cAAc,EAAE;QAAG,CAAC,CAAC;MACvC,CAAC,CAAC,OAAOyJ,CAAU,EAAE;QACnB,MAAI,CAACjU,QAAQ,CAAC;UAAEwK,cAAc,EAAE;QAAgB,CAAC,CAAC;MACpD;IAAC;EACH;EAEAhG,yBAAyB,GAAS;IAAA;IAChC,wBAAI,CAAC2B,UAAU,qDAAf,iBAAiBga,cAAc,EAAE;IACjC,IAAI,CAACngB,QAAQ,CAAC;MAAE0J,kBAAkB,EAAE;IAAM,CAAC,CAAC;EAC9C;EAoBAhF,uBAAuB,GAAS;IAC9B,IAAI,CAAC1E,QAAQ,CAAC;MACZ0J,kBAAkB,EAAE,KAAK;MACzBxJ,qBAAqB,EAAE,GAAG;MAC1BE,mBAAmB,EAAE/J,gBAAgB,CAACiK,eAAe,CAAC8f;IACxD,CAAC,CAAC;EACJ;EAEA3b,sBAAsB,GAAS;IAC7B,IAAI,CAACzE,QAAQ,CAAC;MACZ0J,kBAAkB,EAAE,KAAK;MACzBxJ,qBAAqB,EAAE,CAAC;MACxBE,mBAAmB,EAAE/J,gBAAgB,CAACiK,eAAe,CAAC+f;IACxD,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;EACEC,YAAY,CAACnM,MAA4B,EAAQ;IAC/C,IAAM;MAAE9a;IAAM,CAAC,GAAG,IAAI,CAACL,KAAK;IAC5B,IAAI,CAAC6M,OAAO,CAAC+M,GAAG,CAACvZ,KAAK,CAAC2W,MAAM,CAACmE,MAAM,CAAC,CAAC,CAACjN,KAAK,CAAC+M,CAAC,IAAI;MAChD,IAAI,CAACngB,YAAY,CAACgkB,UAAU,CAAC7D,CAAC,CAAC,EAAE;QAC/B7c,GAAG,CAAC+P,KAAK,CAAC,yBAAyB,EAAEgN,MAAM,EAAEF,CAAC,CAAC;MACjD;IACF,CAAC,CAAC;EACJ;EAEA3H,oBAAoB,GAAS;IAC3B,IAAI,IAAI,CAAC5G,IAAI,IAAI,IAAI,EAAE;MACrB;IACF;IACA,IAAM;MAAEnH;IAAkB,CAAC,GAAG,IAAI,CAACvF,KAAK;IACxC,IAAIuF,iBAAiB,EAAE;MACrB,IAAM;QAAEgiB;MAAoB,CAAC,GAAG,IAAI,CAACvnB,KAAK;MAC1C,IAAI,CAAC0M,IAAI,CAAC1F,QAAQ,CAAC;QAAEwgB,MAAM,EAAED;MAAoB,CAAC,CAAC;IACrD,CAAC,MAAM;MACL,IAAI,CAAC7a,IAAI,CAAC1F,QAAQ,CAAC;QAAEwgB,MAAM,EAAE;MAAK,CAAC,CAAC;MACpC,IAAI,CAACxgB,QAAQ,CAAC;QAAE1B,iBAAiB,EAAE;MAAK,CAAC,CAAC;IAC5C;EACF;EAEAof,kBAAkB,GAA2B;IAAA,IAA1BjM,WAAW,uEAAG,IAAI;IACnC,IAAI,CAAC,IAAI,CAAC/L,IAAI,EAAE;MACd;IACF;IAEA,IAAI,CAACA,IAAI,CAACiP,mBAAmB,EAAE;IAC/B,IAAI,CAACjP,IAAI,CAACkP,YAAY,CACpB;MAAEsB,IAAI,EAAE,CAAC;MAAErB,GAAG,EAAE,CAAC;MAAE4L,SAAS,EAAE,CAAC;MAAE/J,UAAU,EAAE;IAAE,CAAC,EAChDjF,WAAW,CACZ;EACH;EAEAvE,eAAe,GAAS;IACtB,IAAI,CAAC,IAAI,CAACxH,IAAI,EAAE;MACd;IACF;IACA,IAAM;MAAErF,KAAK,EAAEqgB;IAAc,CAAC,GAAG,IAAI;IACrC,IAAM;MAAErgB,KAAK,EAAEsgB;IAAU,CAAC,GAAG,IAAI,CAACjb,IAAI;IACtC,IAAM;MAAEkb;IAAc,CAAC,GAAG,IAAI,CAAC5nB,KAAK;IAEpC4nB,aAAa,CAACF,aAAa,EAAEC,SAAS,CAAC;EACzC;EAEAxb,mBAAmB,GAAS;IAC1B,IAAI,CAACnF,QAAQ,CAAC;MACZmK,iBAAiB,EAAE;IACrB,CAAC,CAAC;EACJ;EAEA/E,qBAAqB,GAAY;IAAA;IAC/B,IAAM;MAAE4D,OAAO;MAAEQ;IAAmB,CAAC,GAAG,IAAI,CAACnJ,KAAK;IAClD5M,aAAa,CAACuV,OAAO,CAAC;IACtBvV,aAAa,CAAC+V,kBAAkB,CAAC;IACjC,IAAMqX,QAAQ,yBAAG,IAAI,CAAClb,WAAW,uDAAhB,mBAAkBsP,qBAAqB,EAAE;IAC1D,IAAM6L,YAAY,GAAG,EAAE;IACvBrtB,aAAa,CAACotB,QAAQ,CAAC;IACvB,IAAM;MACJE,kBAAkB;MAClBC,WAAW;MACXC,eAAe;MACfC,KAAK;MACLC;IACF,CAAC,GAAGnY,OAAO;IACX,IAAMoY,OAAO,GAAGJ,WAAW,CAAChV,GAAG,CAACxC,kBAAkB,CAAC;IACnD,IAAM0O,WAAW,GAAG+I,eAAe,CAACjV,GAAG,CAACxC,kBAAkB,CAAC;IAE3D/V,aAAa,CAAC2tB,OAAO,CAAC;IACtB3tB,aAAa,CAACykB,WAAW,CAAC;IAE1B,IAAMhC,IAAI,GACR2K,QAAQ,CAAC3K,IAAI,GACb7hB,KAAK,CAAC+sB,OAAO,GAAGlJ,WAAW,GAAG,CAAC,EAAE4I,YAAY,EAAEI,KAAK,GAAGJ,YAAY,CAAC;IAEtE,OAAO;MACLjM,GAAG,EAAEgM,QAAQ,CAAChM,GAAG,GAAG,CAACsM,oBAAoB,GAAG,CAAC,IAAIJ,kBAAkB;MACnE7K,IAAI,EACF2K,QAAQ,CAAC3K,IAAI,GACb7hB,KAAK,CAAC+sB,OAAO,GAAGlJ,WAAW,GAAG,CAAC,EAAE4I,YAAY,EAAEI,KAAK,GAAGJ,YAAY,CAAC;MACtEO,MAAM,EAAER,QAAQ,CAAChM,GAAG,GAAGsM,oBAAoB,GAAGJ,kBAAkB;MAChEO,KAAK,EACHT,QAAQ,CAAC3K,IAAI,GACb7hB,KAAK,CAAC+sB,OAAO,GAAGlJ,WAAW,GAAG,CAAC,EAAE4I,YAAY,EAAEI,KAAK,GAAGJ,YAAY,CAAC,GACpE,CAAC;MACHI,KAAK,EAAE,CAAC;MACRlM,MAAM,EAAE+L,kBAAkB;MAC1BQ,CAAC,EAAErL,IAAI;MACPsL,CAAC,EAAEX,QAAQ,CAAChM,GAAG;MACf4M,MAAM,EAAE,MAAM;QACZ,MAAM,IAAIhI,KAAK,CAAC,iBAAiB,CAAC;MACpC;IACF,CAAC;EACH;EA0GArV,oCAAoC,GAAS;IAC3C,IAAM;MAAEkG,OAAO,EAAEoX;IAAU,CAAC,GAAG,IAAI,CAACrhB,KAAK;IACzC,IAAI,CAACgE,cAAc,CAACqd,SAAS,CAAC;EAChC;EAEArd,cAAc,CAACqd,SAAiB,EAAQ;IACtC,IAAM;MAAEroB;IAAM,CAAC,GAAG,IAAI,CAACL,KAAK;IAC5B,IAAM;MAAEyb;IAAS,CAAC,GAAGpb,KAAK;IAC1B,IAAI,CAAC2G,QAAQ,CAAC;MAAEsK,OAAO,EAAEoX;IAAU,CAAC,CAAC;IACrC,IAAIA,SAAS,KAAK,EAAE,EAAE;MACpB,IAAI,CAAC1hB,QAAQ,CAAC;QAAEuK,YAAY,EAAE,EAAE;QAAEC,cAAc,EAAE;MAAG,CAAC,CAAC;MACvD;IACF;IACA,IAAMmX,MAAM,GAAG/B,QAAQ,CAAC8B,SAAS,EAAE,EAAE,CAAC;IACtC,IAAIC,MAAM,GAAGlN,QAAQ,IAAIkN,MAAM,GAAG,CAAClN,QAAQ,EAAE;MAC3C,IAAI,CAACzU,QAAQ,CAAC;QAAEuK,YAAY,EAAE;MAAoB,CAAC,CAAC;IACtD,CAAC,MAAM,IAAIoX,MAAM,KAAK,CAAC,EAAE;MAAA;MACvB,IAAI,CAAC3hB,QAAQ,CAAC;QAAEuK,YAAY,EAAE,EAAE;QAAEC,cAAc,EAAE;MAAG,CAAC,CAAC;MACvD,oBAAI,CAAC9E,IAAI,iDAAT,aAAWwa,WAAW,CAAC,CAAC,CAAC;IAC3B,CAAC,MAAM,IAAIyB,MAAM,GAAG,CAAC,EAAE;MAAA;MACrB,IAAI,CAAC3hB,QAAQ,CAAC;QAAEuK,YAAY,EAAE,EAAE;QAAEC,cAAc,EAAE;MAAG,CAAC,CAAC;MACvD,oBAAI,CAAC9E,IAAI,iDAAT,aAAWwa,WAAW,CAACyB,MAAM,GAAGlN,QAAQ,CAAC;IAC3C,CAAC,MAAM;MAAA;MACL,oBAAI,CAAC/O,IAAI,iDAAT,aAAWwa,WAAW,CAACyB,MAAM,GAAG,CAAC,CAAC;MAClC,IAAI,CAAC3hB,QAAQ,CAAC;QAAEuK,YAAY,EAAE,EAAE;QAAEC,cAAc,EAAE;MAAG,CAAC,CAAC;IACzD;EACF;EAEAnF,qCAAqC,CACnC2W,KAAoC,EAC9B;IACN,IAAM0F,SAAS,GAAG1F,KAAK,CAAC4F,MAAM,CAACzT,KAAK;IACpC,IAAI,CAAC9J,cAAc,CAACqd,SAAS,CAAC;EAChC;EAEAG,gBAAgB,CACd5K,YAA0B,EAC1BjO,OAAoB,EACpB3P,KAAoB,EACT;IACX,IAAM;MACJ0nB,kBAAkB;MAClBI,oBAAoB;MACpBH,WAAW;MACXC,eAAe;MACfC;IACF,CAAC,GAAGlY,OAAO;IACX,IAAMoY,OAAO,GAAGJ,WAAW,CAAChV,GAAG,CAACiL,YAAY,CAAC;IAC7C,IAAMiB,WAAW,GAAG+I,eAAe,CAACjV,GAAG,CAACiL,YAAY,CAAC;IAErD,IAAImK,OAAO,IAAI,IAAI,IAAIlJ,WAAW,IAAI,IAAI,EAAE;MAC1C,OAAO,IAAI;IACb;;IAEA;AACJ;AACA;AACA;AACA;AACA;AACA;IACI,IAAM4J,WAAW,GAAG/U,IAAI,CAAC3T,GAAG,CAAC,CAAC,EAAEgoB,OAAO,CAAC;IACxC,IAAIW,YAAY,GAAG7J,WAAW;IAC9B,IAAIkJ,OAAO,GAAGlJ,WAAW,GAAGgJ,KAAK,EAAE;MACjC;MACAa,YAAY,GAAGb,KAAK,GAAGE,OAAO;IAChC,CAAC,MAAM,IAAIA,OAAO,GAAG,CAAC,EAAE;MACtB;MACAW,YAAY,GAAG7J,WAAW,GAAGnL,IAAI,CAACiV,GAAG,CAACZ,OAAO,CAAC;IAChD;IAEA,IAAM3gB,YAA2B,GAAG;MAClCC,QAAQ,EAAE,UAAU;MACpBmU,GAAG,EAAE,CAACsM,oBAAoB,GAAG,CAAC,IAAIJ,kBAAkB;MACpD7K,IAAI,EAAE4L,WAAW;MACjBZ,KAAK,EAAEa,YAAY;MACnB/M,MAAM,EAAE+L,kBAAkB;MAC1BpgB,aAAa,EAAE;IACjB,CAAC;;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;IACI,IAAMshB,gBAAiC,GAAG;MACxCC,WAAW,EAAE,CAAC;MACdC,YAAY,EAAEpB,kBAAkB;MAChC9L,qBAAqB,EAAE,IAAI,CAAC7P;IAC9B,CAAC;IAED,IAAMxE,aAA4B,GAAG;MACnCC,SAAS,EAAE,QAAQ;MACnBC,SAAS,EAAE;QACTC,IAAI,EAAE;UACJC,QAAQ,EAAE,CAAC,QAAQ,EAAE,KAAK;QAC5B;MACF;IACF,CAAC;IAED,IAAM+M,WAAW,GAAG,IAAI,CAACC,cAAc,CAACiJ,YAAY,CAAC;IACrD,IAAIlJ,WAAW,IAAI,IAAI,EAAE,OAAO,IAAI;IAEpC,IAAM9U,MAAM,GAAGI,KAAK,CAACoD,OAAO,CAACsR,WAAW,CAAC;IACzC,IAAI9U,MAAM,IAAI,IAAI,EAAE,OAAO,IAAI;IAE/B,oBACE;MAAK,KAAK,EAAEwH,YAAa;MAAA,uBACvB,KAAC,OAAO;QAEN,OAAO,EAAE,GAAI;QACb,WAAW;QACX,OAAO,EAAEG,aAAc;QACvB,GAAG,EAAE,IAAI,CAACK,gBAAiB;QAC3B,eAAe,EAAEghB,gBAAiB;QAClC,QAAQ,EAAE,MAAM;UACd,IAAI,CAACjiB,QAAQ,CAAC;YAAEwJ,kBAAkB,EAAE;UAAK,CAAC,CAAC;QAC7C,CAAE;QAAA,uBAEF,KAAC,gBAAgB;UACf,KAAK,EAAEnQ,KAAM;UACb,MAAM,EAAEJ,MAAO;UACf,YAAY,EAAE,MAAM;YAAA;YAClB,qBAAI,CAACyjB,OAAO,kDAAZ,cAAcpK,MAAM,EAAE;UACxB;QAAE;MACF,GAhBGrZ,MAAM,CAACmE,IAAI;IAiBR,EACN;EAEV;EAEAkI,wCAAwC,CAACwK,UAAsB,EAAQ;IAAA;IACrE,IAAM;MAAEzW;IAAM,CAAC,GAAG,IAAI,CAACL,KAAK;IAC5B,IAAMqgB,SAAS,mBAAG,IAAI,CAAC3T,IAAI,iDAAT,aAAWrF,KAAK,CAACgZ,SAAS;IAE5C,IAAIA,SAAS,IAAI,IAAI,EAAE;MACrB,IAAMqB,MAAK,GAAGrhB,KAAK,CAACwP,oBAAoB,CAACiH,UAAU,CAAC;MACpD,IAAM7W,QAAM,GAAGzC,aAAa,CAACkoB,eAAe,CAACrlB,KAAK,CAACoD,OAAO,EAAEqT,UAAU,CAAC;MACvE,IAAI4K,MAAK,IAAI,IAAI,IAAIzhB,QAAM,IAAI,IAAI,EAAE;QACnC;MACF;MACA,IAAMkV,OAAK,GAAG9U,KAAK,CAAC+U,YAAY,CAACsM,MAAK,EAAErB,SAAS,CAAC;MAClD,IAAM9J,IAAI,GAAG/Y,aAAa,CAACgjB,kBAAkB,CAACrL,OAAK,EAAElV,QAAM,CAAC8B,IAAI,CAAC;MACjE,IAAI,CAACiF,QAAQ,CAAC;QACZyK,2BAA2B,EAAEqF,UAAU;QACvCnO,SAAS,EAAE4N,IAAI;QACf/E,cAAc,EAAE;MAClB,CAAC,CAAC;IACJ;IACA,IAAI,CAACxK,QAAQ,CAAC;MACZyK,2BAA2B,EAAEqF,UAAU;MACvCtF,cAAc,EAAE;IAClB,CAAC,CAAC;EACJ;EAEAjF,oCAAoC,CAAC4I,KAAsB,EAAQ;IACjE,IAAI,CAACnO,QAAQ,CAAC;MAAE0K,uBAAuB,EAAEyD,KAAK;MAAE3D,cAAc,EAAE;IAAG,CAAC,CAAC;EACvE;EAWA/E,wBAAwB,CAAC6Y,WAAqB,EAAQ;IACpD,IAAM;MAAE3c;IAAU,CAAC,GAAG,IAAI,CAACtB,KAAK;IAChC,IAAI,CAACwB,OAAO,CAACF,SAAS,EAAE2c,WAAW,CAAC;EACtC;EAEA8D,MAAM,GAAwB;IAAA;MAAA;MAAA;MAAA;MAAA;MAAA;IAC5B,IAAM;MACJC,QAAQ;MACR3jB,aAAa;MACb4jB,iBAAiB;MACjB/jB,iBAAiB;MACjBgkB,eAAe;MACfC,cAAc;MACdnpB,KAAK;MACL+D,IAAI;MACJqlB,uBAAuB;MACvBvjB,kBAAkB;MAClB4M,gBAAgB;MAChB4W,wBAAwB;MACxBjoB,cAAc;MACdwgB;IACF,CAAC,GAAG,IAAI,CAACjiB,KAAK;IACd,IAAM;MACJoD,gBAAgB;MAChB4M,OAAO;MACPzO,gBAAgB;MAChBsN,oBAAoB;MACpBpJ,WAAW;MACXkL,OAAO;MACPN,aAAa;MACbN,sBAAsB;MACtBO,WAAW;MACX9K,oBAAoB;MACpB+K,mBAAmB;MACnBhB,WAAW;MACXC,aAAa;MACbgB,kBAAkB;MAClBL,mBAAmB;MACnBD,mBAAmB;MACnB5K,iBAAiB;MACjBlG,YAAY;MACZH,eAAe;MACfgQ,SAAS;MACTtJ,gBAAgB;MAChBsK,cAAc;MACdf,eAAe;MACf3P,YAAY;MACZC,qBAAqB;MAErB2G,YAAY;MACZ4I,SAAS;MAETvO,SAAS;MACTmO,kBAAkB;MAClB1H,wBAAwB;MACxBwJ,0BAA0B;MAE1BhR,KAAK;MACLJ,WAAW;MACXF,aAAa;MAEbiR,cAAc;MACdM,kBAAkB;MAClBtJ,mBAAmB;MACnBF,qBAAqB;MACrBC,0BAA0B;MAE1B3F,aAAa;MACboF,WAAW;MACXC,qBAAqB;MACrBC,mBAAmB;MAEnB5H,mBAAmB;MACnB2R,mBAAmB;MACnBvR,YAAY;MACZwR,WAAW;MACXE,kBAAkB;MAClBC,gBAAgB;MAChBF,eAAe;MACfxC,iBAAiB;MACjBP,cAAc;MACdkD,YAAY;MACZ7B,aAAa;MACbC,kBAAkB;MAClB6B,iBAAiB;MACjBC,YAAY;MACZ5J,0BAA0B;MAC1BY,sBAAsB;MACtBI,qBAAqB;MACrB6I,WAAW;MACXC,OAAO;MACPC,YAAY;MACZC,cAAc;MACdC,2BAA2B;MAC3B9I,SAAS;MACT+I;IACF,CAAC,GAAG,IAAI,CAACrK,KAAK;IACd,IAAI,CAACsJ,OAAO,EAAE;MACZ,OAAO,IAAI;IACb;IAEA,IAAM9K,KAAK,GAAG,IAAI,CAACkQ,QAAQ,EAAE;IAE7B,IAAM9R,MAAM,GAAG,IAAI,CAAC0lB,eAAe,CACjCjkB,aAAa,EACbtG,YAAY,EACZH,eAAe,EACf0G,gBAAgB,EAChBpG,YAAY,CACb;IAED,IAAM8D,gBAAgB,GAAGD,gBAAgB,CAACkY,mBAAmB,EAAE;IAC/D,IAAMsO,aAAa,GAAG,IAAI,CAACC,sBAAsB,CAC/CvkB,iBAAiB,EACjB/D,gBAAgB,EAChBgE,iBAAiB,EACjBC,oBAAoB,EACpBpG,YAAY,EACZH,eAAe,EACfQ,KAAK,EACLJ,WAAW,EACXC,YAAY,EACZmG,WAAW,CACZ;IACD,IAAMoW,GAAG,GAAG7L,OAAO,GAAGA,OAAO,CAAC6L,GAAG,GAAG,CAAC;IACrC,IAAMwM,MAAM,GAAGrY,OAAO,GAAGA,OAAO,CAACoT,cAAc,GAAG,CAAC;IACnD,IAAIlG,IAAI,GAAG,IAAI;IACf,IAAIoL,KAAK,GAAG,IAAI;IAChB,IAAImB,uBAAuB,EAAE;MAC3BvM,IAAI,GAAGlN,OAAO,GAAGA,OAAO,CAACkN,IAAI,GAAG,CAAC;MACjCoL,KAAK,GAAGtY,OAAO,GAAGA,OAAO,CAACsY,KAAK,GAAG,CAAC;IACrC;IACA,IAAM/J,SAAS,GACbvO,OAAO,IAAI,IAAI,IAAIA,OAAO,CAACkY,KAAK,GAAG,CAAC,IAAIlY,OAAO,CAACgM,MAAM,GAAG,CAAC;IAC5D,IAAM8N,QAAQ,GAAG,2BAACxqB,YAAY,aAAZA,YAAY,iDAAZA,YAAY,CAAEmE,OAAO,2DAArB,uBAAuB9D,MAAM,2EAAI,CAAC,IAAI,CAAC;IAEzD,IAAIoqB,UAAU,GAAG,IAAI;IAErB,IAAMC,UAAU,GAAGha,OAAO,GACtB+D,IAAI,CAACC,GAAG,CACND,IAAI,CAAC3T,GAAG,CAACN,QAAQ,CAACmqB,WAAW,EAAElW,IAAI,CAACmW,KAAK,CAACla,OAAO,CAACyL,QAAQ,GAAG,GAAG,CAAC,CAAC,EAClE3b,QAAQ,CAACqqB,WAAW,CACrB,GACDrqB,QAAQ,CAACqqB,WAAW;IAExB,IAAI5oB,gBAAgB,IAAIwO,sBAAsB,IAAI,IAAI,IAAIC,OAAO,IAAI,IAAI,EAAE;MACzE,IAAM;QAAEoa,KAAK;QAAEC,KAAK;QAAErC,WAAW;QAAEC,eAAe;QAAEC;MAAM,CAAC,GAAGlY,OAAO;MACrE,IAAMoY,OAAO,GAAGJ,WAAW,CAAChV,GAAG,CAACjD,sBAAsB,CAAC;MACvD,IAAMmP,WAAW,GAAG+I,eAAe,CAACjV,GAAG,CAACjD,sBAAsB,CAAC;MAC/D,IAAIqY,OAAO,IAAI,IAAI,IAAIlJ,WAAW,IAAI,IAAI,EAAE;QAAA;QAC1C,IAAMqJ,CAAC,GAAG6B,KAAK,GAAGhC,OAAO;QACzB,IAAMI,CAAC,GAAG6B,KAAK,6BAAIxkB,KAAK,CAACykB,eAAe,yEAAI,CAAC,CAAC;QAC9C,IAAMC,UAAU,GAAGrL,WAAW,GAAG,CAAC,CAAC,CAAC;QACpC,IAAMsL,WAAW,GAAG,2BAAC3kB,KAAK,CAACykB,eAAe,2EAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACtD,IAAMG,KAAK,GAAG;UACZ5O,GAAG,EAAE2M,CAAC;UACNtL,IAAI,EAAEqL,CAAC;UACPmC,QAAQ,EAAE3W,IAAI,CAACC,GAAG,CAACuW,UAAU,EAAErC,KAAK,GAAGK,CAAC,CAAC;UAAE;UAC3CvM,MAAM,EAAEwO;QACV,CAAC;QACD,IAAIrV,OAAK,GAAG,EAAE;QACd,IAAIwV,OAAO,GAAG,IAAI;QAClB,IAAM5V,WAAW,GAAG,IAAI,CAACC,cAAc,CAACjF,sBAAsB,CAAC;QAC/DtV,aAAa,CAACsa,WAAW,CAAC;QAC1B,IAAMoC,WAAW,GAAG/X,YAAY,CAAC4T,GAAG,CAAC+B,WAAW,CAAC;QACjD,IAAM6V,cAAc,GAAG3rB,eAAe,CAAC+T,GAAG,CAAC+B,WAAW,CAAC;QACvD,IAAIoC,WAAW,IAAI,IAAI,EAAE;UACvBhC,OAAK,GAAGgC,WAAW,CAACZ,IAAI;UACxBoU,OAAO,GAAGxT,WAAW,CAAClT,MAAM,IAAI,IAAI;QACtC;QACA,IAAM4mB,aAAa,GACjBzrB,YAAY,CAACM,IAAI,KAAK,CAAC,IAAIT,eAAe,CAACS,IAAI,KAAK,CAAC;QACvDqqB,UAAU,gBACR,KAAC,gBAAgB;UACf,GAAG,EAAE,IAAI,CAACxc,cAAe;UACzB,KAAK,EAAEkd,KAAM;UACb,SAAS,EAAEvyB,UAAU,CAAC;YACpBiW,KAAK,EAAE,CAACwc,OAAO;YACfG,MAAM,EAAE3V,OAAK,KAAK,EAAE,IAAIyV,cAAc,IAAI,IAAI;YAC9C,sBAAsB,EAAEC;UAC1B,CAAC,CAAE;UACH,mBAAmB,EAAED,cAAc,IAAI,IAAK;UAC5C,0BAA0B,EAAE,MAAM;YAChC,IAAI,CAAC5jB,QAAQ,CAAC;cAAEkJ,mBAAmB,EAAEH;YAAuB,CAAC,CAAC;UAChE,CAAE;UAEF,QAAQ,EAAE,IAAI,CAACrG,qBAAsB;UACrC,MAAM,EAAE,IAAI,CAACC,mBAAoB;UACjC,KAAK,EAAE,IAAI,CAACC,kBAAmB;UAC/B,aAAa,kBAAE,IAAI,CAAC8C,IAAI,iDAAT,aAAWqe,iBAAkB;UAC5C,UAAU,EAAEf,UAAW;UACvB,KAAK,EAAE7U;QAAM,GANRpF,sBAAsB,CAQ9B;MACH;IACF;IAEA,IAAIib,cAAc,GAAG,IAAI;IACzB,IAAI1a,WAAW,IAAI,IAAI,EAAE;MACvB,IAAM2a,aAAa,gBACjB;QAAK,SAAS,EAAC,0BAA0B;QAAA,wBACvC;UACE,SAAS,EAAE/yB,UAAU,CAAC,8BAA8B,EAAE;YACpDgzB,IAAI,EAAE3a;UACR,CAAC,CAAE;UAAA,UAEFD;QAAW,EACR,eACN;UACE,IAAI,EAAC,QAAQ;UACb,OAAO,EAAE,IAAI,CAACzG,YAAa;UAC3B,SAAS,EAAE3R,UAAU,CAAC,sBAAsB,EAAE;YAC5CgzB,IAAI,EAAE3a;UACR,CAAC,CAAE;UAAA,wBAEH,KAAC,eAAe;YAAC,IAAI,EAAE7W,OAAQ;YAAC,SAAS,EAAC;UAAQ,EAAG,UAEvD;QAAA,EAAS;MAAA,EAEZ;MACD,IAAM2wB,MAAK,GAAGra,OAAO,GAAGA,OAAO,CAACqa,KAAK,GAAG,CAAC;MACzCW,cAAc,gBACZ;QAAK,SAAS,EAAC,mBAAmB;QAAC,KAAK,EAAE;UAAEnP,GAAG,EAAEwO;QAAM,CAAE;QAAA,UACtDY;MAAa,EAEjB;IACH;IAEA,IAAIE,aAA8B,GAAG,IAAI;IACzC,IAAI3a,kBAAkB,IAAI,IAAI,IAAIR,OAAO,EAAE;MAAA;MACzCmb,aAAa,GAAG,IAAI,CAACtC,gBAAgB,CAACrY,kBAAkB,EAAER,OAAO,EAAE3P,KAAK,CAAC;MACzE;MACA,sBAAI,CAACqjB,OAAO,mDAAZ,eAAcpK,MAAM,EAAE;IACxB;IAEA,IAAM8R,SAAS,GAAG,EAAE;IACpB,IAAIpb,OAAO,IAAIzO,gBAAgB,EAAE;MAC/B,IAAM;QAAE6oB,KAAK,EAALA,MAAK;QAAEC,KAAK,EAALA,OAAK;QAAEgB,cAAc;QAAErD,WAAW,EAAXA,YAAW;QAAEC,eAAe,EAAfA;MAAgB,CAAC,GAClEjY,OAAO;MACT,IAAM;QAAEsa;MAAgB,CAAC,GAAGzkB,KAAK;MAAC,+BAEiB;QACjD,IAAM+O,WAAW,GAAGyW,cAAc,CAAC7kB,CAAC,CAAC;QAErC,IAAM4hB,OAAO,GAAGJ,YAAW,CAAChV,GAAG,CAAC4B,WAAW,CAAC;QAC5C,IAAMsK,WAAW,GAAG+I,gBAAe,CAACjV,GAAG,CAAC4B,WAAW,CAAC;QACpD,IAAMG,WAAW,GAAG,MAAI,CAACC,cAAc,CAACJ,WAAW,CAAC;QACpD,IAAIG,WAAW,IAAI,IAAI,EAAE;UACvB,IAAMkI,YAAY,GAAG5c,KAAK,CAAC4c,YAAY,CAAClI,WAAW,CAAC;UACpD,IACEkI,YAAY,IACZmL,OAAO,IAAI,IAAI,IACflJ,WAAW,IAAI,IAAI,IACnBA,WAAW,GAAG,CAAC,EACf;YACA,IAAMqJ,EAAC,GAAG6B,MAAK,GAAGhC,OAAO,GAAGlJ,WAAW,GAAG,EAAE;YAC5C,IAAMsJ,EAAC,GAAG6B,OAAK,IAAIC,eAAe,aAAfA,eAAe,cAAfA,eAAe,GAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9C,IAAMG,MAAoB,GAAG;cAC3B/iB,QAAQ,EAAE,UAAU;cACpBmU,GAAG,EAAE2M,EAAC;cACNtL,IAAI,EAAEqL;YACR,CAAC;YACD,IAAMqC,eAAc,GAAG3rB,eAAe,CAAC+T,GAAG,CAAC+B,WAAW,CAAC;YACvD,IAAMuW,WAAW,GAAGV,eAAc,IAAI,IAAI;YAC1C,IAAMW,eAAe,GACnB3W,WAAW,KAAKzE,mBAAmB,IACnCyE,WAAW,KAAK7E,sBAAsB,IACtCub,WAAW;YACb,IAAME,OAAO,gBACX;cACE,SAAS,EAAEtzB,UAAU,CAAC,kCAAkC,EAAE;gBACxDuzB,MAAM,EAAE,CAACF;cACX,CAAC,CAAE;cAEH,KAAK,EAAEd,MAAM;cAAA,UAEZc,eAAe,iBACd,KAAC,MAAM;gBACL,IAAI,EAAC,OAAO;gBACZ,SAAS,EAAErzB,UAAU,CACnB,sCAAsC,EACtC;kBACE,YAAY,EAAEozB;gBAChB,CAAC,CACD;gBACF,OAAO,EAAE,MAAM;kBACb,MAAI,CAACtkB,QAAQ,CAAC;oBAAEkJ,mBAAmB,EAAE0E;kBAAY,CAAC,CAAC;gBACrD,CAAE;gBACF,aAAa,EAAEoO,KAAK,IAAI;kBAAA;kBACtB,qBAAI,CAACtW,IAAI,gDAAT,YAAWqe,iBAAiB,CAAC/H,KAAK,CAAC;gBACrC,CAAE;gBACF,YAAY,EAAE,MAAM;kBAClB,MAAI,CAAChc,QAAQ,CAAC;oBAAEmJ,mBAAmB,EAAEyE;kBAAY,CAAC,CAAC;gBACrD,CAAE;gBACF,YAAY,EAAE,MAAM;kBAClB,MAAI,CAAC5N,QAAQ,CAAC;oBAAEmJ,mBAAmB,EAAE;kBAAK,CAAC,CAAC;gBAC9C,CAAE;gBAAA,uBAEF;kBAAK,SAAS,EAAC,WAAW;kBAAA,wBACxB,KAAC,eAAe;oBACd,IAAI,EAAE5W,cAAe;oBACrB,SAAS,EAAC;kBAAc,EACxB,eACF,KAAC,eAAe;oBACd,IAAI,EAAEM,QAAS;oBACf,SAAS,EAAC;kBAAc,EACxB;gBAAA;cACE;YAET,GApCI+a,WAAW,CAsCnB;YACDwW,SAAS,CAACtpB,IAAI,CAAC0pB,OAAO,CAAC;UACzB;QACF;MACF,CAAC;MA1ED,KAAK,IAAIhlB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG6kB,cAAc,CAAC1rB,MAAM,EAAE6G,CAAC,IAAI,CAAC;QAAA;MAAA;IA2EnD;IACA,IAAMklB,mBAAmB,GAAG,EAAE;IAC9B,IAAI1b,OAAO,EAAE;MACX,IAAM;QACJoa,KAAK,EAALA,OAAK;QACLiB,cAAc,EAAdA,eAAc;QACdrD,WAAW,EAAXA,aAAW;QACXC,eAAe,EAAfA,iBAAe;QACfF;MACF,CAAC,GAAG/X,OAAO;MAAC,+BACuC;QACjD,IAAM4E,WAAW,GAAGyW,eAAc,CAAC7kB,GAAC,CAAC;QACrC,IAAM4hB,OAAO,GAAGJ,aAAW,CAAChV,GAAG,CAAC4B,WAAW,CAAC;QAC5C,IAAMsK,WAAW,GAAG+I,iBAAe,CAACjV,GAAG,CAAC4B,WAAW,CAAC;QACpD,IAAIwT,OAAO,IAAI,IAAI,IAAIlJ,WAAW,IAAI,IAAI,IAAIA,WAAW,GAAG,CAAC,EAAE;UAC7D,IAAMyM,aAAa,GAAGvB,OAAK,GAAGhC,OAAO;UACrC,IAAMwD,UAAU,GAAGxB,OAAK,GAAGhC,OAAO,GAAGlJ,WAAW,GAAG,EAAE;UACrD,IAAMuL,OAAoB,GAAGlpB,gBAAgB,GACzC;YACEmG,QAAQ,EAAE,UAAU;YACpBmU,GAAG,EAAEkM,kBAAkB;YACvB7K,IAAI,EAAE0O,UAAU;YAChB1D,KAAK,EAAE,EAAE;YACTlM,MAAM,EAAEnW,KAAK,CAACykB;UAChB,CAAC,GACD;YACE5iB,QAAQ,EAAE,UAAU;YACpBmU,GAAG,EAAE,CAAC;YACNqB,IAAI,EAAEyO,aAAa;YACnBzD,KAAK,EAAEhJ,WAAW;YAClBlD,MAAM,EAAE+L;UACV,CAAC;UACL,IAAMhT,YAAW,GAAG,MAAI,CAACC,cAAc,CAACJ,WAAW,CAAC;UACpD,IAAIG,YAAW,IAAI,IAAI,EAAE;YACvB,IAAM9U,QAAM,GAAGI,KAAK,CAACoD,OAAO,CAACsR,YAAW,CAAC;YACzC,IAAI9U,QAAM,IAAI,IAAI,EAAE;cAClB;cACA7B,GAAG,CAAC8jB,IAAI,0CAC4BnN,YAAW,yCAA+B1U,KAAK,CAACoD,OAAO,CAAC9D,MAAM,EACjG;cACD;cAAA;YAEF;YACA,IAAMirB,gBAAc,GAAG3rB,eAAe,CAAC+T,GAAG,CAAC+B,YAAW,CAAC;YACvD,IAAM;cAAEwC,OAAO,EAAEjX;YAAsB,CAAC,GAAGsqB,gBAAc,IAAI,CAAC,CAAC;YAC/D,IAAM5Q,IAAI,GAAGxf,UAAU,CAAConB,gBAAgB,CAACvhB,KAAK,CAAC2Z,IAAI,EAAE/Z,QAAM,CAACmE,IAAI,CAAC;YACjE,IAAM7D,aAAa,GAAGyZ,IAAI,GAAGA,IAAI,CAACyF,SAAS,GAAG,IAAI;YAClD,IAAM+L,OAAO,gBACX;cAEE,SAAS,EAAC,gCAAgC;cAC1C,KAAK,EAAEf,OAAM;cAAA,uBAEb,KAAC,MAAM;gBACL,SAAS,EAAC,6BAA6B;gBACvC,SAAS,EAAE,MAAI,CAACoB,4BAA4B,CAACjX,WAAW,CAAE;gBAC1D,QAAQ,EAAE,MAAM;kBACd,MAAI,CAAC5L,wBAAwB,CAAC4L,WAAW,CAAC;gBAC5C,CAAE;gBACF,OAAO,EAAE1E,mBAAmB,KAAK0E,WAAY;gBAC7C,WAAW;gBACX,WAAW;gBACX,OAAO,EAAE;kBACPkX,aAAa,EAAE;gBACjB,CAAE;gBAAA,UAED,MAAI,CAACC,kCAAkC,CACtC1rB,KAAK,EACLJ,QAAM,EACNK,qBAAqB,EACrBC,aAAa,EACbC,SAAS;cACV;YACM,GAxBJoU,WAAW,CA0BnB;YACD8W,mBAAmB,CAAC5pB,IAAI,CAAC0pB,OAAO,CAAC;UACnC;QACF;MACF,CAAC;MArED,KAAK,IAAIhlB,GAAC,GAAG,CAAC,EAAEA,GAAC,GAAG6kB,eAAc,CAAC1rB,MAAM,EAAE6G,GAAC,IAAI,CAAC;QAAA;QAAA,yBA+BzC;MAAS;IAuCnB;IAEA,IAAM3E,WAAW,GAAG,IAAI,CAACmqB,oBAAoB,CAC3C/J,aAAa,KAAKnd,SAAS,IAAIzE,KAAK,CAACQ,uBAAuB,EAC5DR,KAAK,CAACS,wBAAwB,EAC9BT,KAAK,CAACU,wBAAwB,EAC9BV,KAAK,CAACW,iBAAiB,EACvBX,KAAK,CAACY,iBAAiB,IAAI6oB,QAAQ,EACnCzpB,KAAK,CAACa,yBAAyB,EAC/Bb,KAAK,CAACc,iBAAiB,EACvB,IAAI,CAACC,qBAAqB,EAC1B,IAAI,CAACC,qBAAqB,EAC1B,IAAI,CAACC,mBAAmB,EACxBC,gBAAgB,EAChBC,aAAa,EACbC,cAAc,EACd,IAAI,CAACue,sBAAsB,EAAE,EAC7B3O,WAAW,EACXyB,gBAAgB,CAACpT,IAAI,GAAG,CAAC,CAC1B;IAED,IAAMkQ,aAAa,GAAG,IAAI,CAACqc,sBAAsB,CAC/C7oB,gBAAgB,EAChBC,gBAAgB,CACjB;IAED,IAAM6oB,gBAAgB,GAAGpb,WAAW,CAACxM,GAAG,CAACye,MAAM,IAAI;MACjD,QAAQA,MAAM,CAAChhB,IAAI;QACjB,KAAK5E,UAAU,CAAC6E,aAAa;UAC3B,oBACE,KAAC,YAAY;YACX,KAAK,EAAE3B,KAAM;YACb,QAAQ,EAAE,IAAI,CAACkJ,iBAAkB;YACjC,QAAQ,EAAE,IAAI,CAACC;UAAkB,GAC5BrM,UAAU,CAAC6E,aAAa,CAC7B;QAEN,KAAK7E,UAAU,CAACgF,2BAA2B;UACzC,oBACE,KAAC,yBAAyB;YACxB,KAAK,EAAE9B,KAAM;YACb,YAAY,EAAE8F,YAAa;YAC3B,aAAa,EAAEyJ,aAAc;YAC7B,kBAAkB,EAAEN,kBAAmB;YACvC,yBAAyB,EAAE,IAAI,CAACvD,6BAA8B;YAC9D,OAAO,EAAE,IAAI,CAACC,2BAA4B;YAC1C,qBAAqB,EAAE,IAAI,CAAC5B,yBAA0B;YACtD,0BAA0B,EAAE,IAAI,CAACC;UAA0B,GACtDlN,UAAU,CAACgF,2BAA2B,CAC3C;QAEN,KAAKhF,UAAU,CAACiF,sBAAsB;UACpC,oBACE,KAAC,yBAAyB;YACxB,KAAK,EAAEuM,kBAAmB;YAC1B,QAAQ,EAAE,IAAI,CAAChE,8BAA+B;YAC9C,QAAQ,EAAE,IAAI,CAACF,6BAA8B;YAC7C,QAAQ,EAAE,IAAI,CAACC;UAA4B,EAC3C;QAEN,KAAKvN,UAAU,CAACymB,2BAA2B;UACzCnpB,aAAa,CAAC4F,KAAK,CAACoD,OAAO,CAAC;UAC5BhJ,aAAa,CAAC,IAAI,CAAC0xB,mCAAmC,CAAC;UACvD,oBACE,KAAC,uBAAuB;YACtB,EAAE,EAAE9rB,KAAK,CAACmE,EAAG;YACb,OAAO,EAAEnE,KAAK,CAACoD,OAAQ;YACvB,IAAI,EAAEwD,wBAAyB;YAC/B,QAAQ,EAAE,IAAI,CAACklB,mCAAoC;YACnD,MAAM,EAAE,IAAI,CAACvhB,iCAAkC;YAC/C,QAAQ,EAAE,IAAI,CAACC;UAAoC,EACnD;QAEN,KAAK1N,UAAU,CAACkF,qBAAqB;UACnC,oBACE,KAAC,mBAAmB;YAClB,KAAK,EAAEhC,KAAM;YACb,aAAa,EAAElB,aAAc;YAC7B,MAAM,EAAE,IAAI,CAAC2L,yBAA0B;YACvC,QAAQ,EAAE,IAAI,CAACb;UAAe,GACzB9M,UAAU,CAACkF,qBAAqB,CACrC;QAEN,KAAKlF,UAAU,CAACmF,WAAW;UACzB,oBACE,KAAC,UAAU;YACT,KAAK,EAAEjC,KAAM;YACb,QAAQ,EAAE,IAAI,CAAC6L,kBAAmB;YAClC,MAAM,EAAE5M;UAAa,GAChBnC,UAAU,CAACmF,WAAW,CAC3B;QAEN,KAAKnF,UAAU,CAACoF,YAAY;UAC1B,oBACE,KAAC,YAAY;YACX,QAAQ,EAAErD,mBAAoB;YAC9B,QAAQ,EAAE4qB,QAAS;YACnB,QAAQ,EAAE,IAAI,CAAC5gB,wBAAyB;YACxC,MAAM,EAAE,IAAI,CAACC;UAAsB,EACnC;QAEN,KAAKhM,UAAU,CAACsnB,gBAAgB;UAC9B,OACE5T,mBAAmB,iBACjB,KAAC,eAAe;YACd,WAAW,EAAEA,mBAAoB;YACjC,OAAO,EAAExQ,KAAK,CAAC2E,eAAgB;YAC/B,QAAQ,EAAE,IAAI,CAACiE;UAAwB,EAE1C;QAEL,KAAK9L,UAAU,CAACsF,cAAc;UAC5B,oBACE,KAAC,gBAAgB;YACf,KAAK,EAAEpC,KAAM;YACb,IAAI,EAAE+D,IAAK;YACX,gBAAgB,EAAEf,gBAAiB;YACnC,YAAY,EAAE8C,YAAa;YAC3B,aAAa,EAAEuK,kBAAmB;YAClC,mBAAmB,EAAEtJ,mBAAoB;YACzC,qBAAqB,EAAEF,qBAAsB;YAC7C,0BAA0B,EACxBC,0BAA0B,aAA1BA,0BAA0B,cAA1BA,0BAA0B,GAAIrC,SAC/B;YACD,UAAU,EAAE,IAAI,CAACwG,mBAAoB;YACrC,eAAe,EAAE,IAAI,CAACC,wBAAyB;YAC/C,QAAQ,EAAE,IAAI,CAACC,yBAA0B;YACzC,cAAc,EAAE4E;UAAe,GAC1BjT,UAAU,CAACsF,cAAc,CAC9B;QAEN,KAAKtF,UAAU,CAACqF,eAAe;UAC7B,oBACE,KAAC,qBAAqB;YACpB,KAAK,EAAEnC,KAAM;YACb,qBAAqB,EAAEb,qBAAsB;YAC7C,QAAQ,EAAE,IAAI,CAACwL;UAA4B,EAC3C;QAEN,KAAK7N,UAAU,CAACuF,iBAAiB;UAC/B,oBACE,KAAC,oBAAoB;YACnB,KAAK,EAAEoQ,gBAAiB;YACxB,QAAQ,EAAE4W;UAAyB,EACnC;QAGN;UACE,MAAMjJ,KAAK,kCAA2BsC,MAAM,CAAChhB,IAAI,EAAG;MAAC;IAE3D,CAAC,CAAC;IAEF,oBACE;MAAK,SAAS,EAAC,WAAW;MAAC,IAAI,EAAC,cAAc;MAAA,wBAC5C;QAAK,SAAS,EAAC,kBAAkB;QAAA,WAC9BsnB,QAAQ,IAAI,IAAI,iBAAI;UAAK,SAAS,EAAC,eAAe;UAAA,UAAEA;QAAQ,EAAO,eACpE,KAAC,aAAa;UACZ,EAAE,EAAExa,oBAAqB;UACzB,OAAO,EAAEhW,WAAW,CAACuzB,gBAAiB;UACtC,UAAU,EAAC,0BAA0B;UACrC,OAAO,EAAE,IAAI,CAAC/iB,oBAAqB;UACnC,SAAS,EAAE,IAAI,CAACC,kBAAmB;UACnC,MAAM,EAAE,IAAI,CAACD,oBAAqB;UAClC,QAAQ,EAAE,IAAI,CAACC,kBAAmB;UAClC,YAAY;UACZ,aAAa;UAAA,uBAEb;YAAK,SAAS,EAAC,0EAA0E;YAAA,UACtF2G,cAAc,IAAIf,eAAe,IAAID,SAAS,IAAI,IAAI,iBACrD,KAAC,yBAAyB;cACxB,EAAE,EAAE5O,KAAK,CAACmE,EAAG;cACb,KAAK,EAAEyL,cAAe;cACtB,kBAAkB,EAAE,CAClBkF,KAAc,EACdpT,IAAY,EACZsqB,UAAkB,KACfhsB,KAAK,CAACisB,aAAa,CAACnX,KAAK,EAAEpT,IAAI,EAAEsqB,UAAU,CAAE;cAClD,UAAU,EAAEnd,eAAe,CAAC9K,IAAK;cACjC,SAAS,EAAE6K,SAAU;cACrB,QAAQ,EAAE,IAAI,CAACrD,qBAAsB;cACrC,UAAU,EAAE,IAAI,CAACC,uBAAwB;cACzC,QAAQ,EAAE,IAAI,CAACF,qBAAsB;cACrC,MAAM,EAAE,IAAI,CAACG;YAAoB;UAEpC;QACG,EACQ,eAChB,KAAC,aAAa;UACZ,EAAE,EAAEtK,aAAc;UAClB,OAAO,EAAE3I,WAAW,CAACuzB,gBAAiB;UACtC,UAAU,EAAC,0BAA0B;UACrC,OAAO,EAAE,IAAI,CAAC/iB,oBAAqB;UACnC,SAAS,EAAE,IAAI,CAACC,kBAAmB;UACnC,MAAM,EAAE,IAAI,CAACD,oBAAqB;UAClC,QAAQ,EAAE,IAAI,CAACC,kBAAmB;UAClC,YAAY;UACZ,aAAa;UAAA,uBAEb;YAAK,SAAS,EAAC,eAAe;YAAA,uBAC5B,KAAC,iBAAiB;cAChB,KAAK,EAAE1C,WAAY;cACnB,eAAe,EAAEC,qBAAsB;cACvC,eAAe,EAAEC,mBAAoB;cACrC,QAAQ,EAAE,IAAI,CAACmF,uBAAwB;cACvC,OAAO,EAAE5L,KAAK,CAACoD,OAAQ;cACvB,GAAG,EAAE,IAAI,CAAC2J;YAAe;UACzB;QACE,EACQ,eAChB;UACE,SAAS,EAAC,cAAc;UACxB,GAAG,EAAET,WAAW,IAAI;YAClB,IAAI,CAACA,WAAW,GAAGA,WAAW;UAChC,CAAE;UAAA,wBAEF,KAAC,IAAI;YACH,GAAG,EAAED,IAAI,IAAI;cACX,IAAI,CAACA,IAAI,GAAGA,IAAI;YAClB,CAAE;YACF,cAAc,EAAE,CAACtT,mBAAmB,CAACiH,KAAK,CAAC,IAAI,CAACA,KAAK,CAACyF,UAAW;YACjE,eAAe,EAAEyjB,eAAgB;YACjC,cAAc,EAAEC,cAAe;YAC/B,gBAAgB,EAAEpmB,gBAAiB;YACnC,KAAK,EAAE/C,KAAM;YACb,WAAW,EAAEkP,WAAY;YACzB,aAAa,EAAEC,aAAc;YAC7B,YAAY,EAAErJ,YAAa;YAC3B,SAAS,EAAE4I,SAAU;YACrB,OAAO,EAAE,IAAI,CAACtF,eAAgB;YAC9B,aAAa,EAAE,IAAI,CAACc,iBAAkB;YACtC,kBAAkB,EAAE,IAAI,CAACJ,sBAAuB;YAChD,qBAAqB,EAAE,IAAI,CAACC,yBAA0B;YACtD,QAAQ,EAAE,IAAI,CAAC8C,QAAS;YACxB,aAAa,EAAE0c,aAAc;YAC7B,KAAK,EAAE/jB;UAAM,EACb,eACF,KAAC,yBAAyB;YACxB,MAAM,EAAEsL,iBAAkB;YAC1B,IAAI,EAAEC,YAAa;YACnB,OAAO,EAAE,IAAI,CAACjF;UAAoB,EAClC,EACDoS,SAAS,iBACR,KAAC,oBAAoB;YACnB,KAAK,EAAEle,KAAM;YACb,YAAY,EAAEA,KAAK,CAACoD,OAAQ;YAC5B,GAAG,EAAEoY,GAAI;YACT,MAAM,EAAEwM,MAAO;YACf,IAAI,EAAEnL,IAAK;YACX,KAAK,EAAEoL,KAAM;YACb,MAAM,EAAErkB,MAAO;YACf,SAAS,EAAEzD,SAAU;YACrB,KAAK,EAAEf,KAAM;YACb,WAAW,EAAEJ,WAAY;YACzB,YAAY,EAAE8G,YAAa;YAC3B,aAAa,EAAEhH,aAAc;YAC7B,aAAa,EAAEyQ,aAAc;YAC7B,kBAAkB,EAAE,IAAI,CAAC2c,qBAAqB,CAC5CrmB,kBAAkB,EAClB7F,KAAK,CAACoD,OAAO,EACb0C,YAAY,EACZ9F,KAAK,CAAC+F,uBAAuB,EAC7B/F,KAAK,CAACgG,wBAAwB,kBAC9B,IAAI,CAACqG,IAAI,0EAAT,aAAWrF,KAAK,CAACmlB,cAAc,0DAA/B,sBAAiCC,KAAK,CACtC;YACF,aAAa,EAAE,IAAI,CAACC,6BAA6B,CAC/CrsB,KAAK,CAACmE,EAAE,EACRnE,KAAK,CAACoD,OAAO,EACbkL,kBAAkB,EAClB1H,wBAAwB;YACxB;YACA,iBAAA6J,WAAW,CAACA,WAAW,CAACnR,MAAM,GAAG,CAAC,CAAC,iDAAnC,aAAqCoC,IAAI,MACvC5E,UAAU,CAACymB,2BAA2B,GACpCnT,0BAA0B,aAA1BA,0BAA0B,cAA1BA,0BAA0B,GAAI3L,SAAS,GACvCA,SAAS,CACb;YACF,YAAY,EAAE,IAAI,CAACI,oBAAoB,CACrC7E,KAAK,CAAC2E,eAAe,EACrB1F,YAAY,EACZJ,mBAAmB,CACnB;YACF,YAAY,EAAE,IAAI,CAACytB,oBAAoB,CACrCtsB,KAAK,CAACoD,OAAO,EACbnE,YAAY,EACZJ,mBAAmB,CACnB;YACF,qBAAqB,EAAEM,qBAAsB;YAC7C,eAAe,EAAEuR,eAAgB;YACjC,cAAc,EAAE/C,cAAe;YAC/B,aAAa,EAAEqB,aAAc;YAC7B,kBAAkB,EAAEC;UAAmB,EAE1C,EACA,CAAC7J,WAAW,iBACX;YAAK,SAAS,EAAC,sBAAsB;YAAA,uBACnC,KAAC,MAAM;cACL,IAAI,EAAC,OAAO;cACZ,uDAA8CrB,IAAI,CAAG;cACrD,OAAO,EAAE,IAAI,CAAC0F,UAAW;cACzB,IAAI,eAAE,KAAC,eAAe;gBAAC,IAAI,EAAEhQ,MAAO;gBAAC,SAAS,EAAC;cAAM,EAAI;cACzD,OAAO,EAAC;YAAe;UACvB,EAEL,EACAiwB,UAAU,EACViB,cAAc,EACdI,SAAS,EACTD,aAAa,EACbO,mBAAmB,EACnBlkB,0BAA0B,IACzB,IAAI,CAAColB,wBAAwB,CAACplB,0BAA0B,CAAC,EAC1DY,sBAAsB,IACrB,IAAI,CAACykB,oBAAoB,CAACzkB,sBAAsB,CAAC,EAClDI,qBAAqB,IACpB,IAAI,CAACskB,mBAAmB,CAACtkB,qBAAqB,CAAC;QAAA,EAC7C,eACN,KAAC,OAAO;UACN,KAAK,EAAEnI,KAAM;UACb,OAAO,EAAEgR,WAAY;UACrB,OAAO,EAAEC,OAAQ;UACjB,YAAY,EAAEC,YAAa;UAC3B,cAAc,EAAEC,cAAe;UAC/B,eAAe,EAAE,IAAI,CAACpG,oCAAqC;UAC3D,sBAAsB,EAAE,IAAI,CAACiB,qCAAsC;UACnE,OAAO,EAAE,IAAI,CAACtD,mBAAoB;UAClC,UAAU,EAAE,IAAI,CAACM,oBAAqB;UACtC,SAAS,EAAE,IAAI,CAACC,kBAAmB;UACnC,SAAS,EAAE,MAAM;YACf,IAAI,CAACD,oBAAoB,EAAE;YAC3B,IAAI,CAAC0T,KAAK,EAAE;UACd,CAAE;UACF,QAAQ,EAAE,IAAI,CAACzT,kBAAmB;UAClC,2BAA2B,EAAEmI,2BAA4B;UACzD,SAAS,EAAE9I,SAAU;UACrB,eAAe,EAAE+I,uBAAwB;UACzC,oCAAoC,EAClC,IAAI,CAACpF,wCACN;UACD,gCAAgC,EAC9B,IAAI,CAACC,oCACN;UACD,kBAAkB,EAAE,IAAI,CAACC,sBAAuB;UAChD,iBAAiB,EAAE,IAAI,CAACC;QAAyB,EACjD,eAEF,KAAC,oBAAoB;UACnB,KAAK,EAAEwE,gBAAiB;UACxB,QAAQ,EAAED,kBAAkB,IAAI,IAAK;UACrC,WAAW,oBAAa,IAAI,CAAC1C,YAAY,CAACzL,QAAQ,CAACC,cAAc,EAAE,MAAI;UACvE,cAAc,qBAAc,IAAI,CAACiL,aAAa,CAAClL,QAAQ,CAACC,cAAc,EAAE,MAAI;UAC5E,iBAAiB,EAAEyL,iBAAkB;UACrC,cAAc,EAAEP,cAAe;UAC/B,UAAU,EAAE,IAAI,CAAC3E,oBAAqB;UACtC,SAAS,EAAE,IAAI,CAACC,kBAAmB;UACnC,SAAS,EAAE,IAAI,CAACD,oBAAqB;UACrC,QAAQ,EAAE,IAAI,CAACC,kBAAmB;UAClC,MAAM,EAAE,IAAI,CAAC4B,0BAA2B;UACxC,SAAS,EAAE,IAAI,CAACC;QAA4B,EAC5C,eACF,KAAC,cAAc;UAAA,UAAE+F;QAAY,EAAkB,eAC/C,KAAC,mBAAmB;UAClB,KAAK,EAAE7Q,KAAM;UACb,aAAa,EAAEgQ,aAAa,aAAbA,aAAa,cAAbA,aAAa,GAAIvL,SAAU;UAC1C,UAAU,EAAE,IAAI,CAACuE,oBAAqB;UACtC,SAAS,EAAE,IAAI,CAACC,kBAAmB;UACnC,SAAS,EAAE,IAAI,CAACD,oBAAqB;UACrC,QAAQ,EAAE,IAAI,CAACC;QAAmB,EAClC,eACF,KAAC,UAAU;UACT,EAAE,EAAEjJ,KAAK,CAACmE,EAAG;UACb,GAAG,EAAE2I,UAAU,IAAI;YACjB,IAAI,CAACA,UAAU,GAAGA,UAAU;UAC9B,CAAE;UACF,iBAAiB,EAAEmc,iBAAkB;UACrC,mBAAmB,EAAE,IAAI,CAAC5d,uBAAwB;UAClD,kBAAkB,EAAE,IAAI,CAACD,sBAAuB;UAChD,wBAAwB,EAAE,IAAI,CAAC+I,4BAA6B;UAC5D,aAAa,EACXpN,mBAAmB,KACnB/J,gBAAgB,CAACiK,eAAe,CAACC,WAClC;UACD,SAAS,EAAE/G;QAAU,EACrB;MAAA,EACE,eACN,KAAC,aAAa;QACZ,EAAE,EAAEiF,WAAY;QAChB,OAAO,EAAE5M,WAAW,CAACk0B,eAAgB;QACrC,UAAU,EAAC,YAAY;QACvB,UAAU,EAAE,IAAI,CAAC1jB,oBAAqB;QACtC,SAAS,EAAE,IAAI,CAACC,kBAAmB;QACnC,SAAS,EAAE,IAAI,CAACD,oBAAqB;QACrC,QAAQ,EAAE,IAAI,CAACC,kBAAmB;QAClC,YAAY;QACZ,aAAa;QAAA,uBAEb;UAAK,SAAS,EAAC,eAAe;UAAA,uBAC5B,MAAC,KAAK;YAAA,wBACJ,KAAC,IAAI;cAAC,KAAK,EAAC,eAAe;cAAC,OAAO,EAAE,IAAI,CAACS,eAAgB;cAAA,uBACxD,KAAC,IAAI;gBACH,QAAQ,EAAEvD,CAAC,IAAI,IAAI,CAACwD,gBAAgB,CAACnI,WAAW,CAAC2E,CAAC,CAAC,CAAE;gBACrD,KAAK,EAAE3E;cAAY;YACnB,EACG,EACNqqB,gBAAgB,CAAC5nB,GAAG,CAAC,CAACye,MAAM,EAAEvc,CAAC,kBAC9B,KAAC,IAAI;cACH,KAAK,EAAEsK,WAAW,CAACtK,CAAC,CAAC,CAACvE,KAAM;cAC5B,MAAM,EAAE,IAAI,CAACgI,cAAe;cAC5B,OAAO,EAAE,IAAI,CAACF,eAAgB;cAAA,UAG7BgZ;YAAM,GAFFjS,WAAW,CAACtK,CAAC,CAAC,CAACzE,IAAI,CAI3B,CAAC;UAAA;QACI;MACJ,EACQ,eAChB,KAAC,cAAc;QAAC,OAAO,EAAE,IAAI,CAAC2M;MAAe,EAAG;IAAA,EAC5C;EAEV;AACF;AAAC,gBAjoIY5O,QAAQ,iBACE,GAAG;AAAA,gBADbA,QAAQ,iBAGE,GAAG;AAAA,gBAHbA,QAAQ,yBAKU,GAAG;AAAA,gBALrBA,QAAQ,kBAOG;EACpBupB,QAAQ,EAAE,IAAI;EACdpqB,eAAe,EAAErE,SAAS;EAC1BkY,gBAAgB,EAAElY,SAAS;EAC3BsL,kBAAkB,EAAEvL,WAAW;EAC/BgU,kBAAkB,EAAEhU,WAAW;EAC/BiU,qBAAqB,EAAEhU,SAAS;EAChC2G,gBAAgB,EAAE,KAAK;EACvBmY,uBAAuB,EAAE,KAAK;EAC9BvT,YAAY,EAAExL,WAAW;EACzBoU,SAAS,EAAEpU,WAAW;EACtB6X,YAAY,EAAE7X,WAAW;EACzB+K,aAAa,EAAE/K,WAAW;EAC1BsnB,aAAa,EAAEnd,SAAS;EACxBoc,gBAAgB,EAAE,MAAYpc,SAAS;EACvC2c,cAAc,EAAE,MAAY3c,SAAS;EACrCia,OAAO,EAAE,MAAYja,SAAS;EAC9B8iB,aAAa,EAAE,MAAY9iB,SAAS;EACpC+Z,iBAAiB,EAAE,MAAY/Z,SAAS;EACxC4kB,wBAAwB,EAAE,MAAY5kB,SAAS;EAC/CmK,SAAS,EAAE,IAAI;EACfC,eAAe,EAAE,IAAI;EACrB9P,YAAY,EAAExE,SAAS;EACvB4E,qBAAqB,EAAE7E,WAAW;EAClC8E,KAAK,EAAE9E,WAAW;EAClB0E,WAAW,EAAE7E,UAAU,CAACoF,YAAY,CAACC,IAAI;EACzCV,aAAa,EAAExE,WAAW;EAC1BuE,mBAAmB,EAAER,4BAA4B;EACjDY,YAAY,EAAEwF,SAAS;EACvBzB,gBAAgB,EAAEzI,SAAS;EAC3BuU,cAAc,EAAEvU,SAAS;EACzB0oB,kBAAkB,EAAE,MAAYxe,SAAS;EACzCS,iBAAiB,EAAE,KAAK;EACxBsJ,oBAAoB,EAAE,KAAK;EAC3B0a,eAAe,EAAE,KAAK;EACtBC,cAAc,EAAE,KAAK;EACrBwD,wBAAwB,EAAE,IAAI;EAC9BzF,mBAAmB,EAAE,IAAI;EACzB0F,sBAAsB,EAAE,IAAI;EAC5B7oB,IAAI,EAAE,OAAO;EACbqlB,uBAAuB,EAAE,IAAI;EAC7BjoB,aAAa,EAAE,KAAK;EACpBoF,WAAW,EAAE,EAAE;EACfC,qBAAqB,EAAE,IAAI;EAC3BC,mBAAmB,EAAE,IAAI;EACzBomB,aAAa,EAAE,MAAYpoB,SAAS;EACpCkJ,cAAc,EAAEpT,SAAS;EACzB0uB,iBAAiB,EAAExkB,SAAS;EAC5B2N,QAAQ,EAAE;IACRkD,QAAQ,EAAE,kBAAkB;IAC5BwX,qBAAqB,EAAE9yB,SAAS,CAAC+yB,gBAAgB;IACjDC,YAAY,EAAE,KAAK;IACnBC,cAAc,EAAE,IAAI;IACpBrgB,wBAAwB,EAAE,KAAK;IAC/BzM,SAAS,EAAE7F,WAAW;IACtBoS,oBAAoB,EAAE3U,SAAS,CAACm1B,KAAK,CAAC;MACpCC,mBAAmB,EAAEp1B,SAAS,CAACq1B;IACjC,CAAC,CAAC;IACFzgB,oBAAoB,EAAE5U,SAAS,CAACm1B,KAAK,CAAC;MACpCC,mBAAmB,EAAEp1B,SAAS,CAACq1B;IACjC,CAAC;EACH,CAAC;EACDre,OAAO,EAAE,IAAI;EACb3N,cAAc,EAAE,IAAI;EACpB4N,aAAa,EAAE,IAAI;EACnBxJ,KAAK,EAAElJ,aAAa;EACpB+E,eAAe,EAAE;AACnB,CAAC;AAyjIH,eAAe5B,QAAQ"}
1
+ {"version":3,"file":"IrisGrid.js","names":["React","Component","memoize","classNames","CSSTransition","PropTypes","deepEqual","Log","FontAwesomeIcon","ContextActions","Stack","Menu","Page","Popper","ThemeExport","Tooltip","Button","ContextActionUtils","Grid","GridRange","GridUtils","isEditableGridModel","isExpandableGridModel","dhEye","dhFilterFilled","dhGraphLineUp","dhTriangleDownSquare","vsClose","vsCloudDownload","vsEdit","vsFilter","vsMenu","vsReply","vsRuby","vsSearch","vsSplitHorizontal","vsSymbolOperator","vsTools","DateUtils","Formatter","FormatterUtils","TableUtils","assertNotNull","copyToClipboard","EMPTY_ARRAY","EMPTY_MAP","Pending","PromiseUtils","ValidationError","getOrThrow","Type","FilterType","throttle","debounce","clamp","getFormatColumns","PendingDataBottomBar","IrisGridCopyHandler","FilterInputField","ClearFilterKeyHandler","CopyKeyHandler","ReverseKeyHandler","IrisGridCellOverflowMouseHandler","IrisGridColumnSelectMouseHandler","IrisGridColumnTooltipMouseHandler","IrisGridContextMenuHandler","IrisGridDataSelectMouseHandler","IrisGridFilterMouseHandler","IrisGridRowTreeMouseHandler","IrisGridSortMouseHandler","IrisGridTokenMouseHandler","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","SEEK_ROW_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","constructor","props","column","handleAdvancedMenuOpened","bind","max","model","advancedFilterOptions","sortDirection","formatter","handleAdvancedFilterChange","handleAdvancedFilterSortChange","handleAdvancedFilterDone","tableUtils","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","metricCalculator","userColumnWidths","getHiddenColumns","Map","initialColumnWidths","columns","aggregationMap","forEach","operation","selected","invert","getOperationColumnNames","operationMap","filter","a","isRollupOperation","name","newOperations","map","o","dh","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","handleTooltipRef","Date","now","expandCellTooltipProps","expandTooltipDisplayValue","textAlign","isMacPlatform","linkHoverTooltipProps","linkHoverDisplayValue","input","gotoValue","debouncedSeekRow","seekRow","handleGotoRowOpened","handleGotoRowClosed","handleAdvancedMenuClosed","handleAggregationChange","handleAggregationsChange","handleAggregationEdit","handleAnimationLoop","handleAnimationStart","handleAnimationEnd","handleChartChange","handleChartCreate","handleGridError","handleFilterBarChange","handleFilterBarDone","handleFilterBarTab","handleCancel","handleMenu","handleMenuClose","handleMenuSelect","handleMenuBack","handleRequestFailed","handleSelectionChanged","handleMovedColumnsChanged","handleHeaderGroupsChanged","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","handleColumnVisibilityReset","handleCrossColumnSearch","handleRollupChange","handleOverflowClose","getColumnBoundingRect","handleGotoRowSelectedRowNumberChanged","handleGotoValueSelectedColumnNameChanged","handleGotoValueSelectedFilterChanged","handleGotoValueChanged","handleGotoValueSubmitted","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","error","INPUT_TABLE","DISCARD","commitAction","pendingDataErrors","commitPending","COMMIT","contextActions","conditionalFormats","customColumnFormatMap","isSelectingPartition","movedColumnsProp","movedRows","movedRowsProp","partition","partitionColumn","userRowHeights","canCopy","frozenColumns","columnHeaderGroups","keyHandlers","mouseHandlers","initialMovedColumns","initialMovedRows","layoutHints","hiddenColumns","getColumnIndexByName","searchColumns","focusedFilterBarColumn","metrics","partitionTable","shownAdvancedFilter","hoverAdvancedFilter","selectedRanges","copyOperation","loadingText","loadingSpinnerShown","shownColumnTooltip","conditionalFormatEditIndex","isTableDownloading","isReady","rollupSelectedColumns","selectedAggregation","openOptions","pendingRowCount","pendingSavePromise","pendingSaveError","toastMessage","showOverflowModal","overflowText","isGotoShown","gotoRow","gotoRowError","gotoValueError","gotoValueSelectedColumnName","gotoValueSelectedFilter","eqIgnoreCase","initialColumnHeaderGroups","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","timeZone","textForCell","modelColumns","modelRows","getTheme","getCachedTheme","floatingTopRowCount","floatingBottomRowCount","getVisibleColumn","modelIndex","getVisibleIndex","makeQuickFilter","text","err","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","filterList","combinedText","combineFiltersFromList","removeQuickFilter","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","eq","FilterValue","ofString","copyCell","String","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","getVisibleWidth","leftOffset","lastFocusedFilterBarColumn","hideColumnByVisibleIndex","columnVisibleIndex","setColumnWidth","freezeColumnByColumnName","allFrozenColumns","visibleIndex","newMovedColumns","moveItem","unFreezeColumnByColumnName","frontColumns","modelIndexes","isVisible","defaultWidth","calculatedWidth","calculatedColumnWidths","resetColumnWidth","updateCanvas","onPartitionAppend","isCanceled","onError","showAllColumns","entries","columnWidth","toggleSort","addToExisting","isColumnSortable","currentSorts","toggleSortForColumn","sortColumn","direction","none","isAbs","reverse","isReversible","focusIndex","isTextType","isTableSearchAvailable","searchDisplayMode","SearchDisplayMode","SEARCH_DISPLAY_HIDE","SEARCH_DISPLAY_SHOW","cursorRow","cursorColumn","cellValue","convertValueToText","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","parseColumnHeaderGroups","groups","tooltip","startTimer","CONDITIONAL_FORMATTING_EDIT","oldCustomColumns","customColumn","removedColumnNames","getRemovedCustomColumnNames","newSorts","removeSortsInColumns","removeFiltersInColumns","removeColumnFromMovedColumns","newSelectDistinctColumns","removeColumnsFromSelectDistinctColumns","join","aggregation","AGGREGATION_EDIT","resetGridViewState","columnNames","INITIATING","fileName","frozenTable","tableSubscription","snapshotRanges","modelRanges","includeColumnHeaders","useUnformattedValues","startDownload","inputString","isBackwards","selectedColumnName","isSeekRowAvailable","selectedColumn","getColumnByName","searchFromRow","isContains","containsIgnoreCase","isIgnoreCase","columnDataType","dataType","CHAR","STRING","ValueType","DATETIME","startDate","parseDateRange","DECIMAL","INT","isBigDecimalType","isBigIntegerType","inputValue","parseInt","Number","NEGATIVE_INFINITY","POSITIVE_INFINITY","NUMBER","makeValue","setFocusRow","cancelDownload","FINISHED","CANCELED","deleteRanges","columnAllowedCursor","cursor","topOffset","irisGridState","gridState","onStateChange","gridRect","popperMargin","columnHeaderHeight","allColumnXs","allColumnWidths","width","columnHeaderMaxDepth","columnX","bottom","right","x","y","toJSON","rowNumber","rowInt","target","getColumnTooltip","boundedLeft","boundedWidth","abs","virtualReference","clientWidth","clientHeight","render","children","getDownloadWorker","isStuckToBottom","isStuckToRight","onlyFetchVisibleColumns","onAdvancedSettingsChange","getCachedFilter","stateOverride","getCachedStateOverride","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","getCachedHiddenColumns","openOptionsStack","handleConditionalFormatEditorUpdate","transitionSlowMs","stringName","displayString","getAlwaysFetchColumns","draggingColumn","range","getCachedPreviewFormatColumns","getModelTotalsConfig","getOverflowButtonTooltip","getExpandCellTooltip","getLinkHoverTooltip","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 ContextActions,\n Stack,\n Menu,\n Page,\n Popper,\n ThemeExport,\n Tooltip,\n ContextAction,\n PopperOptions,\n ReferenceObject,\n Button,\n ContextActionUtils,\n ResolvableContextAction,\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 type {\n Column,\n ColumnGroup,\n CustomColumn,\n DateWrapper,\n dh as DhType,\n FilterCondition,\n Sort,\n Table,\n TableViewportSubscription,\n} from '@deephaven/jsapi-types';\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 copyToClipboard,\n EMPTY_ARRAY,\n EMPTY_MAP,\n Pending,\n PromiseUtils,\n ValidationError,\n getOrThrow,\n} from '@deephaven/utils';\nimport {\n Type as FilterType,\n TypeValue as FilterTypeValue,\n} from '@deephaven/filters';\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 IrisGridRowTreeMouseHandler,\n IrisGridSortMouseHandler,\n IrisGridTokenMouseHandler,\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 {\n ReadonlyAdvancedFilterMap,\n ColumnName,\n ReadonlyQuickFilterMap,\n ReadonlyAggregationMap,\n ReadonlyOperationMap,\n Action,\n OptionItem,\n UITotalsTableConfig,\n InputFilter,\n PendingDataMap,\n AdvancedFilterOptions,\n PendingDataErrorMap,\n QuickFilterMap,\n OperationMap,\n} from './CommonTypes';\nimport ColumnHeaderGroup from './ColumnHeaderGroup';\n\nconst log = Log.module('IrisGrid');\n\nconst UPDATE_DOWNLOAD_THROTTLE = 500;\n\nconst SET_FILTER_DEBOUNCE = 250;\n\nconst SEEK_ROW_DEBOUNCE = 250;\n\nconst SET_CONDITIONAL_FORMAT_DEBOUNCE = 250;\n\nconst DEFAULT_AGGREGATION_SETTINGS = Object.freeze({\n aggregations: EMPTY_ARRAY,\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: ReadonlyAdvancedFilterMap;\n aggregationSettings: AggregationSettings;\n customColumns: readonly ColumnName[];\n quickFilters: ReadonlyQuickFilterMap;\n reverseType: ReverseType;\n rollupConfig?: UIRollupConfig;\n searchFilter?: FilterCondition;\n selectDistinctColumns: readonly ColumnName[];\n sorts: readonly 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}\nexport type FilterData = {\n operator: FilterTypeValue;\n text: string;\n value: unknown;\n startColumnIndex: number;\n};\n\nexport type FilterMap = Map<\n ColumnName,\n {\n columnType: string;\n filterList: FilterData[];\n }\n>;\n\nexport interface IrisGridContextMenuData {\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}\n\nexport interface IrisGridProps {\n children: React.ReactNode;\n advancedFilters: ReadonlyAdvancedFilterMap;\n advancedSettings: Map<AdvancedSettingsType, boolean>;\n alwaysFetchColumns: readonly ColumnName[];\n isFilterBarShown: boolean;\n applyInputFiltersOnInit: boolean;\n conditionalFormats: readonly SidebarFormattingRule[];\n customColumnFormatMap: Map<ColumnName, FormattingRule>;\n movedColumns: readonly MoveOperation[];\n movedRows: readonly MoveOperation[];\n inputFilters: readonly InputFilter[];\n customFilters: readonly 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 | null;\n partitionColumn: Column | null;\n sorts: readonly Sort[];\n reverseType: ReverseType;\n quickFilters: ReadonlyQuickFilterMap | null;\n customColumns: readonly ColumnName[];\n selectDistinctColumns: readonly ColumnName[];\n settings?: Settings;\n userColumnWidths: ModelSizeMap;\n userRowHeights: ModelSizeMap;\n onSelectionChanged: (gridRanges: readonly 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: readonly ColumnName[];\n invertSearchColumns: boolean;\n\n // eslint-disable-next-line react/no-unused-prop-types\n onContextMenu: (data: IrisGridContextMenuData) => ResolvableContextAction[];\n\n pendingDataMap?: PendingDataMap;\n getDownloadWorker: () => Promise<ServiceWorker>;\n\n canCopy: boolean;\n canDownloadCsv: boolean;\n frozenColumns: readonly ColumnName[];\n\n // Theme override for IrisGridTheme\n theme: GridThemeType;\n\n canToggleSearch: boolean;\n\n columnHeaderGroups?: readonly ColumnHeaderGroup[];\n}\n\nexport interface IrisGridState {\n isFilterBarShown: boolean;\n isSelectingPartition: boolean;\n focusedFilterBarColumn: number | null;\n metricCalculator: IrisGridMetricCalculator;\n metrics?: GridMetrics;\n keyHandlers: readonly KeyHandler[];\n mouseHandlers: readonly GridMouseHandler[];\n\n partition: string | null;\n partitionColumn: Column | null;\n partitionTable: Table | null;\n partitionFilters: readonly 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: ReadonlyQuickFilterMap;\n advancedFilters: ReadonlyAdvancedFilterMap;\n shownAdvancedFilter: number | null;\n hoverAdvancedFilter: number | null;\n\n sorts: readonly Sort[];\n reverseType: ReverseType;\n customColumns: readonly ColumnName[];\n selectDistinctColumns: readonly ColumnName[];\n\n // selected range in table\n selectedRanges: readonly 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: readonly MoveOperation[];\n movedRows: readonly MoveOperation[];\n\n shownColumnTooltip: number | null;\n\n formatter: Formatter;\n isMenuShown: boolean;\n customColumnFormatMap: Map<ColumnName, FormattingRule>;\n\n conditionalFormats: readonly 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: readonly ColumnName[];\n invertSearchColumns: boolean;\n\n rollupConfig?: UIRollupConfig;\n rollupSelectedColumns: readonly ColumnName[];\n aggregationSettings: AggregationSettings;\n selectedAggregation: Aggregation | null;\n\n openOptions: readonly OptionItem[];\n\n pendingRowCount: number;\n pendingDataMap: PendingDataMap;\n pendingDataErrors: PendingDataErrorMap;\n pendingSavePromise: Promise<void> | null;\n pendingSaveError: string | null;\n\n toastMessage: JSX.Element | null;\n frozenColumns: readonly ColumnName[];\n showOverflowModal: boolean;\n overflowText: string;\n overflowButtonTooltipProps: CSSProperties | null;\n expandCellTooltipProps: CSSProperties | null;\n expandTooltipDisplayValue: string;\n linkHoverTooltipProps: CSSProperties | null;\n linkHoverDisplayValue: string;\n\n gotoRow: string;\n gotoRowError: string;\n gotoValueError: string;\n isGotoShown: boolean;\n\n gotoValueSelectedColumnName: ColumnName;\n gotoValueSelectedFilter: FilterTypeValue;\n gotoValue: string;\n\n columnHeaderGroups: readonly ColumnHeaderGroup[];\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: EMPTY_MAP,\n advancedSettings: EMPTY_MAP,\n alwaysFetchColumns: EMPTY_ARRAY,\n conditionalFormats: EMPTY_ARRAY,\n customColumnFormatMap: EMPTY_MAP,\n isFilterBarShown: false,\n applyInputFiltersOnInit: false,\n movedColumns: EMPTY_ARRAY,\n movedRows: EMPTY_ARRAY,\n inputFilters: EMPTY_ARRAY,\n customFilters: EMPTY_ARRAY,\n onCreateChart: undefined,\n onColumnSelected: (): void => undefined,\n onDataSelected: (): void => undefined,\n onError: (): void => undefined,\n onStateChange: (): void => undefined,\n onAdvancedSettingsChange: (): void => undefined,\n partition: null,\n partitionColumn: null,\n quickFilters: EMPTY_MAP,\n selectDistinctColumns: EMPTY_ARRAY,\n sorts: EMPTY_ARRAY,\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n customColumns: EMPTY_ARRAY,\n aggregationSettings: DEFAULT_AGGREGATION_SETTINGS,\n rollupConfig: undefined,\n userColumnWidths: EMPTY_MAP,\n userRowHeights: EMPTY_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: EMPTY_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: EMPTY_ARRAY,\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 constructor(props: IrisGridProps) {\n super(props);\n\n this.handleAdvancedFilterChange =\n this.handleAdvancedFilterChange.bind(this);\n this.handleAdvancedFilterSortChange =\n this.handleAdvancedFilterSortChange.bind(this);\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.handleHeaderGroupsChanged = this.handleHeaderGroupsChanged.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 =\n this.handleConditionalFormatCreate.bind(this);\n this.handleConditionalFormatEdit =\n this.handleConditionalFormatEdit.bind(this);\n this.handleConditionalFormatsChange =\n this.handleConditionalFormatsChange.bind(this);\n this.handleConditionalFormatEditorSave =\n this.handleConditionalFormatEditorSave.bind(this);\n this.handleConditionalFormatEditorCancel =\n this.handleConditionalFormatEditorCancel.bind(this);\n this.handleUpdateCustomColumns = this.handleUpdateCustomColumns.bind(this);\n this.handleCustomColumnsChanged =\n this.handleCustomColumnsChanged.bind(this);\n this.handleSelectDistinctChanged =\n this.handleSelectDistinctChanged.bind(this);\n this.handlePendingDataUpdated = this.handlePendingDataUpdated.bind(this);\n this.handlePendingCommitClicked =\n this.handlePendingCommitClicked.bind(this);\n this.handlePendingDiscardClicked =\n this.handlePendingDiscardClicked.bind(this);\n this.handleGotoRowSelectedRowNumberSubmit =\n this.handleGotoRowSelectedRowNumberSubmit.bind(this);\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 =\n this.handleColumnVisibilityChanged.bind(this);\n this.handleColumnVisibilityReset =\n this.handleColumnVisibilityReset.bind(this);\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 =\n this.handleGotoRowSelectedRowNumberChanged.bind(this);\n this.handleGotoValueSelectedColumnNameChanged =\n this.handleGotoValueSelectedColumnNameChanged.bind(this);\n this.handleGotoValueSelectedFilterChanged =\n this.handleGotoValueSelectedFilterChanged.bind(this);\n this.handleGotoValueChanged = this.handleGotoValueChanged.bind(this);\n this.handleGotoValueSubmitted = this.handleGotoValueSubmitted.bind(this);\n\n this.grid = null;\n this.gridWrapper = null;\n this.lastLoadedConfig = null;\n this.pending = new Pending();\n this.globalColumnFormats = EMPTY_ARRAY;\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 columnHeaderGroups,\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 { dh } = model;\n const mouseHandlers = [\n new IrisGridCellOverflowMouseHandler(this),\n new IrisGridRowTreeMouseHandler(this),\n new IrisGridTokenMouseHandler(this),\n new IrisGridColumnSelectMouseHandler(this),\n new IrisGridColumnTooltipMouseHandler(this),\n new IrisGridSortMouseHandler(this),\n new IrisGridFilterMouseHandler(this),\n new IrisGridContextMenuHandler(this, dh),\n new IrisGridDataSelectMouseHandler(this),\n new PendingMouseHandler(this),\n ];\n\n const movedColumns =\n movedColumnsProp.length > 0\n ? movedColumnsProp\n : model.initialMovedColumns;\n const movedRows =\n movedRowsProp.length > 0 ? movedRowsProp : model.initialMovedRows;\n\n const metricCalculator = new IrisGridMetricCalculator({\n userColumnWidths: new Map(userColumnWidths),\n userRowHeights: new Map(userRowHeights),\n movedColumns,\n initialColumnWidths: new Map(\n model?.layoutHints?.hiddenColumns?.map(name => [\n model.getColumnIndexByName(name),\n 0,\n ])\n ),\n });\n const searchColumns = selectedSearchColumns ?? [];\n const searchFilter = CrossColumnSearch.createSearchFilter(\n dh,\n searchValue,\n searchColumns,\n model.columns,\n invertSearchColumns\n );\n\n this.tableUtils = new TableUtils(dh);\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(dh),\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 expandCellTooltipProps: null,\n expandTooltipDisplayValue: 'expand',\n linkHoverTooltipProps: null,\n linkHoverDisplayValue: '',\n isGotoShown: false,\n gotoRow: '',\n gotoRowError: '',\n gotoValueError: '',\n\n gotoValueSelectedColumnName: model.columns[0]?.name ?? '',\n gotoValueSelectedFilter: FilterType.eqIgnoreCase,\n gotoValue: '',\n columnHeaderGroups: columnHeaderGroups ?? model.initialColumnHeaderGroups,\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?: readonly 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 tableUtils: TableUtils;\n\n getAdvancedMenuOpenedHandler = memoize(\n (column: ModelIndex) => this.handleAdvancedMenuOpened.bind(this, column),\n { max: 100 }\n );\n\n getCachedAdvancedFilterMenuActions = memoize(\n (\n model: IrisGridModel,\n column: Column,\n advancedFilterOptions: AdvancedFilterOptions | undefined,\n sortDirection: SortDirection | undefined,\n formatter: 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 tableUtils={this.tableUtils}\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: Action,\n toggleSearchBarAction: Action,\n toggleGotoRowAction: Action,\n isFilterBarShown: boolean,\n showSearchBar: boolean,\n canDownloadCsv: boolean,\n canToggleSearch: boolean,\n showGotoRow: boolean,\n hasAdvancedSettings: boolean\n ): readonly OptionItem[] => {\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: 'Organize Columns',\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: '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 Object.freeze(optionItems);\n },\n { max: 1 }\n );\n\n getCachedHiddenColumns = memoize(\n (\n metricCalculator: IrisGridMetricCalculator,\n userColumnWidths: ModelSizeMap\n ): readonly ModelIndex[] =>\n IrisGridUtils.getHiddenColumns(\n new Map([...metricCalculator.initialColumnWidths, ...userColumnWidths])\n ),\n { max: 1 }\n );\n\n getAggregationMap = memoize(\n (\n columns: readonly Column[],\n aggregations: readonly Aggregation[]\n ): ReadonlyAggregationMap => {\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 (\n columns: readonly Column[],\n aggregations: readonly Aggregation[]\n ): ReadonlyOperationMap => {\n const operationMap: OperationMap = {};\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] = Object.freeze(newOperations);\n });\n });\n return operationMap;\n }\n );\n\n getOperationOrder = memoize(\n (aggregations: readonly Aggregation[]): AggregationOperation[] =>\n aggregations\n .map((a: Aggregation) => a.operation)\n .filter(\n (o: AggregationOperation) => !AggregationUtils.isRollupOperation(o)\n )\n );\n\n getCachedFormatColumns = memoize(\n (\n dh: DhType,\n columns: readonly Column[],\n rules: readonly SidebarFormattingRule[]\n ) => getFormatColumns(dh, columns, rules)\n );\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 dh: DhType,\n columns: readonly Column[],\n rulesParam: readonly 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(dh, columns, rules);\n }\n\n return this.getCachedFormatColumns(dh, columns, rulesParam);\n }\n );\n\n getModelRollupConfig = memoize(\n (\n originalColumns: readonly Column[],\n config: UIRollupConfig | undefined,\n aggregationSettings: AggregationSettings\n ) =>\n IrisGridUtils.getModelRollupConfig(\n originalColumns,\n config,\n aggregationSettings\n )\n );\n\n getModelTotalsConfig = memoize(\n (\n columns: readonly Column[],\n config: UIRollupConfig | undefined,\n aggregationSettings: AggregationSettings\n ): 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: GridRangeIndex,\n isFilterBarShown: boolean,\n isSelectingColumn: boolean,\n loadingScrimProgress: number | null,\n quickFilters: ReadonlyQuickFilterMap,\n advancedFilters: ReadonlyAdvancedFilterMap,\n sorts: readonly Sort[],\n reverseType: ReverseType,\n rollupConfig: UIRollupConfig | undefined,\n isMenuShown: boolean\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: readonly FilterCondition[],\n quickFilters: ReadonlyQuickFilterMap,\n advancedFilters: ReadonlyAdvancedFilterMap,\n partitionFilters: readonly 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 { dh } = model;\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 formatted 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 makeQuickFilter(\n column: Column,\n text: string,\n timeZone: string\n ): FilterCondition | null {\n try {\n return this.tableUtils.makeQuickFilter(column, text, timeZone);\n } catch (err) {\n log.error('Error creating quick filter', err);\n }\n return null;\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: this.makeQuickFilter(column, value, formatter.timeZone),\n });\n return true;\n }\n return quickFilters.delete(modelIndex);\n }\n\n setAdvancedFilterMap(advancedFilters: ReadonlyAdvancedFilterMap): 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 | null,\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, filterList }, 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 const combinedText = IrisGridUtils.combineFiltersFromList(\n columnType,\n filterList\n );\n if (combinedText.length === 0) {\n this.removeQuickFilter(columnIndex);\n } else {\n const { formatter } = model;\n this.setQuickFilter(\n columnIndex,\n this.makeQuickFilter(column, combinedText, formatter.timeZone),\n `${combinedText}`\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 = this.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: this.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 =\n FormatterUtils.getDateTimeFormatterOptions(settings);\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: readonly ColumnName[],\n columns: readonly Column[],\n movedColumns: readonly MoveOperation[],\n floatingLeftColumnCount: number,\n floatingRightColumnCount: number,\n draggingRange?: BoundedAxisRange\n ): readonly ColumnName[] => {\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 Object.freeze([...columnSet]);\n }\n );\n\n updateFormatter(\n updatedFormats: { customColumnFormatMap?: Map<ColumnName, FormattingRule> },\n forceUpdate = true\n ): void {\n const { customColumnFormatMap } = this.state;\n const { model } = this.props;\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 model.dh,\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 model.dh,\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 { model } = this.props;\n const partitionFilter = partitionColumn\n .filter()\n .eq(model.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 copyToClipboard(value).catch(e => log.error('Unable to copy cell', e));\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: readonly 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(\n metricState,\n column,\n metricCalculator.getVisibleWidth(metricState)\n );\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: readonly ModelIndex[],\n isVisible: boolean\n ): void {\n const { metricCalculator, metrics } = this.state;\n assertNotNull(metrics);\n if (isVisible) {\n modelIndexes.forEach(modelIndex => {\n const defaultWidth =\n metricCalculator.initialColumnWidths.get(modelIndex);\n const calculatedWidth = getOrThrow(\n metrics.calculatedColumnWidths,\n modelIndex\n );\n\n if (defaultWidth !== calculatedWidth) {\n metricCalculator.setColumnWidth(modelIndex, calculatedWidth);\n } else {\n metricCalculator.resetColumnWidth(modelIndex);\n }\n });\n } else {\n modelIndexes.forEach(modelIndex => {\n metricCalculator.setColumnWidth(modelIndex, 0);\n });\n }\n this.grid?.forceUpdate();\n }\n\n handleColumnVisibilityReset(): void {\n const { metricCalculator, metrics } = this.state;\n const { model } = this.props;\n assertNotNull(metrics);\n for (let i = 0; i < metrics.columnCount; i += 1) {\n metricCalculator.resetColumnWidth(i);\n }\n this.handleMovedColumnsChanged(model.initialMovedColumns);\n this.handleHeaderGroupsChanged(model.initialColumnHeaderGroups);\n this.setState({\n frozenColumns: model.layoutHints?.frozenColumns ?? [],\n });\n }\n\n handleCrossColumnSearch(\n searchValue: string,\n selectedSearchColumns: readonly ColumnName[],\n invertSearchColumns: boolean\n ): void {\n const { model } = this.props;\n this.startLoading('Searching...');\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: readonly ColumnName[],\n columns: readonly Column[],\n invertSearchColumns: boolean\n ): void => {\n const { model } = this.props;\n const searchFilter = CrossColumnSearch.createSearchFilter(\n model.dh,\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?.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 if (partitionColumn == null) {\n return;\n }\n onPartitionAppend?.(partitionColumn, value);\n }\n\n handlePartitionChange(partition: string): void {\n const { partitionColumn } = this.state;\n if (partitionColumn == null) {\n return;\n }\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 modelColumn = this.getModelColumn(columnIndex);\n assertNotNull(modelColumn);\n if (model.isColumnSortable(columnIndex)) {\n const { sorts: currentSorts } = this.state;\n const sorts = TableUtils.toggleSortForColumn(\n currentSorts,\n model.columns,\n modelColumn,\n addToExisting\n );\n\n this.updateSorts(sorts);\n } else {\n log.debug('Column type was not sortable', model.columns[columnIndex]);\n }\n }\n\n updateSorts(sorts: readonly 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 { dh } = model;\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 = '', value = '', columnName = ''): void {\n const { isGotoShown } = this.state;\n if (row || value) {\n // if invoked with a row, keep open instead of toggle\n this.setState({\n isGotoShown: true,\n gotoRow: row,\n gotoValue: value,\n gotoValueSelectedColumnName: columnName,\n gotoRowError: '',\n gotoValueError: '',\n });\n this.focusRowInGrid(row);\n return;\n }\n\n const cursorRow = this.grid?.state.cursorRow;\n const cursorColumn = this.grid?.state.cursorColumn;\n\n if (cursorRow == null || cursorColumn == null) {\n // if a cell is not selected / grid is not rendered\n this.setState({\n isGotoShown: !isGotoShown,\n gotoRow: '',\n gotoValue: '',\n gotoRowError: '',\n gotoValueError: '',\n });\n return;\n }\n // if a row is selected\n const { model } = this.props;\n const { name, type } = model.columns[cursorColumn];\n\n const cellValue = model.valueForCell(cursorColumn, cursorRow);\n const text = IrisGridUtils.convertValueToText(cellValue, type);\n this.setState({\n isGotoShown: !isGotoShown,\n gotoRow: `${cursorRow}`,\n gotoValue: text,\n gotoValueSelectedColumnName: name,\n gotoRowError: '',\n gotoValueError: '',\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 =\n document?.activeElement?.classList.contains('grid-cell-input-field');\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 visibleIndex = this.getVisibleColumn(i);\n const isExpandable =\n isExpandableGridModel(model) && model.isRowExpandable(rowIndex);\n const isGrouped = groupedColumns.find(c => c.name === name) != null;\n dataMap[name] = {\n value,\n text,\n type,\n isGrouped,\n isExpandable,\n visibleIndex,\n };\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 columnName = model.columns[columnIndex].name;\n const oldSort = TableUtils.getSortForColumn(model.sort, columnName);\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 columnName,\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({ isGotoShown: true });\n }\n\n handleGotoRowClosed(): void {\n this.setState({ isGotoShown: 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 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 this.stopLoading();\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?: readonly 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: readonly MoveOperation[],\n onChangeApplied?: () => void\n ): void {\n this.setState({ movedColumns }, onChangeApplied);\n }\n\n handleHeaderGroupsChanged(columnHeaderGroups: readonly ColumnGroup[]): void {\n const { model } = this.props;\n this.setState(\n {\n columnHeaderGroups: IrisGridUtils.parseColumnHeaderGroups(\n model,\n columnHeaderGroups\n ).groups,\n },\n () => this.grid?.forceUpdate()\n );\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: readonly 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: readonly 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 =\n 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 if (customColumns.length > 0) {\n // If there are no custom columns, the change handler never fires\n // This causes the loader to stay until canceled by the user\n this.startLoading('Applying custom columns...');\n }\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 frozenColumns: [],\n sorts: [],\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n selectDistinctColumns: [],\n });\n }\n\n handleSelectDistinctChanged(columnNames: readonly 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 snapshotRanges: readonly GridRange[],\n modelRanges: readonly GridRange[],\n includeColumnHeaders: boolean,\n useUnformattedValues: boolean\n ): void {\n const { canDownloadCsv } = this.props;\n if (canDownloadCsv) {\n log.info(\n 'start table downloading',\n fileName,\n frozenTable,\n tableSubscription,\n snapshotRanges,\n modelRanges,\n includeColumnHeaders,\n useUnformattedValues\n );\n this.setState(() => {\n if (this.tableSaver) {\n this.tableSaver.startDownload(\n fileName,\n frozenTable,\n tableSubscription,\n snapshotRanges,\n modelRanges,\n includeColumnHeaders,\n useUnformattedValues\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 async seekRow(inputString: string, isBackwards = false): Promise<void> {\n const {\n gotoValueSelectedColumnName: selectedColumnName,\n gotoValueSelectedFilter,\n } = this.state;\n const { model } = this.props;\n const { dh } = model;\n if (!model.isSeekRowAvailable) {\n return;\n }\n\n if (inputString === '') {\n return;\n }\n const selectedColumn = IrisGridUtils.getColumnByName(\n model.columns,\n selectedColumnName\n );\n\n if (selectedColumn === undefined) {\n return;\n }\n\n let searchFromRow = this.grid?.state.cursorRow;\n\n if (searchFromRow == null) {\n searchFromRow = 0;\n }\n\n const isContains =\n gotoValueSelectedFilter === FilterType.contains ||\n gotoValueSelectedFilter === FilterType.containsIgnoreCase;\n const isIgnoreCase =\n gotoValueSelectedFilter === FilterType.eqIgnoreCase ||\n gotoValueSelectedFilter === FilterType.containsIgnoreCase;\n\n try {\n const { formatter } = model;\n const columnDataType = TableUtils.getNormalizedType(selectedColumn.type);\n\n let rowIndex;\n\n switch (columnDataType) {\n case TableUtils.dataType.CHAR:\n case TableUtils.dataType.STRING: {\n rowIndex = await model.seekRow(\n searchFromRow,\n selectedColumn,\n dh.ValueType.STRING,\n inputString,\n isIgnoreCase,\n isContains,\n isBackwards ?? false\n );\n break;\n }\n case TableUtils.dataType.DATETIME: {\n const [startDate] = DateUtils.parseDateRange(\n dh,\n inputString,\n formatter.timeZone\n );\n rowIndex = await model.seekRow(\n searchFromRow,\n selectedColumn,\n dh.ValueType.DATETIME,\n startDate,\n undefined,\n undefined,\n isBackwards ?? false\n );\n break;\n }\n case TableUtils.dataType.DECIMAL:\n case TableUtils.dataType.INT: {\n if (\n !TableUtils.isBigDecimalType(selectedColumn.type) &&\n !TableUtils.isBigIntegerType(selectedColumn.type)\n ) {\n let inputValue = parseInt(inputString, 10);\n if (inputString === '-Infinity') {\n inputValue = Number.NEGATIVE_INFINITY;\n } else if (inputString === 'Infinity') {\n inputValue = Number.POSITIVE_INFINITY;\n }\n\n rowIndex = await model.seekRow(\n searchFromRow,\n selectedColumn,\n dh.ValueType.NUMBER,\n inputValue,\n undefined,\n undefined,\n isBackwards ?? false\n );\n } else {\n rowIndex = await model.seekRow(\n searchFromRow,\n selectedColumn,\n dh.ValueType.STRING,\n inputString,\n undefined,\n undefined,\n isBackwards ?? false\n );\n }\n break;\n }\n default: {\n rowIndex = await model.seekRow(\n searchFromRow,\n selectedColumn,\n dh.ValueType.STRING,\n this.tableUtils.makeValue(\n selectedColumn.type,\n inputString,\n formatter.timeZone\n ),\n undefined,\n undefined,\n isBackwards ?? false\n );\n }\n }\n\n this.grid?.setFocusRow(rowIndex);\n this.setState({ gotoValueError: '' });\n } catch (e: unknown) {\n this.setState({ gotoValueError: 'invalid input' });\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: readonly 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 allColumnXs,\n allColumnWidths,\n width,\n columnHeaderMaxDepth,\n } = metrics;\n const columnX = allColumnXs.get(shownColumnTooltip);\n const columnWidth = allColumnWidths.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 getExpandCellTooltip = memoize(\n (expandCellTooltipProps: CSSProperties): ReactNode => {\n if (expandCellTooltipProps == null) {\n return null;\n }\n\n const { expandTooltipDisplayValue } = this.state;\n\n const wrapperStyle: CSSProperties = {\n position: 'absolute',\n ...expandCellTooltipProps,\n pointerEvents: 'none',\n };\n\n const popperOptions: PopperOptions = {\n placement: 'bottom-start',\n };\n\n return (\n <div style={wrapperStyle}>\n <Tooltip\n key={Date.now()}\n options={popperOptions}\n ref={this.handleTooltipRef}\n >\n <div style={{ textAlign: 'left' }}>\n Click to {expandTooltipDisplayValue} row\n <br />\n {ContextActionUtils.isMacPlatform() ? '⌘' : 'Ctrl+'}Click to\n expand row and all children\n </div>\n </Tooltip>\n </div>\n );\n }\n );\n\n getLinkHoverTooltip = memoize(\n (linkHoverTooltipProps: CSSProperties): ReactNode => {\n if (linkHoverTooltipProps == null) {\n return null;\n }\n\n const { linkHoverDisplayValue } = this.state;\n\n const wrapperStyle: CSSProperties = {\n position: 'absolute',\n ...linkHoverTooltipProps,\n pointerEvents: 'none',\n };\n\n const popperOptions: PopperOptions = {\n placement: 'bottom',\n };\n\n return (\n <div style={wrapperStyle}>\n <Tooltip options={popperOptions} ref={this.handleTooltipRef}>\n <div className=\"link-hover-tooltip\">\n {linkHoverDisplayValue} - Click once to follow.\n <br />\n Click and hold to select this cell.\n </div>\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: '', gotoValueError: '' });\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: '', gotoValueError: '' });\n this.grid?.setFocusRow(0);\n } else if (rowInt < 0) {\n this.setState({ gotoRowError: '', gotoValueError: '' });\n this.grid?.setFocusRow(rowInt + rowCount);\n } else {\n this.grid?.setFocusRow(rowInt - 1);\n this.setState({ gotoRowError: '', gotoValueError: '' });\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 allColumnXs,\n allColumnWidths,\n width,\n } = metrics;\n const columnX = allColumnXs.get(visibleIndex);\n const columnWidth = allColumnWidths.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 handleGotoValueSelectedColumnNameChanged(columnName: ColumnName): void {\n const { model } = this.props;\n const cursorRow = this.grid?.state.cursorRow;\n\n if (cursorRow != null) {\n const index = model.getColumnIndexByName(columnName);\n const column = IrisGridUtils.getColumnByName(model.columns, columnName);\n if (index == null || column == null) {\n return;\n }\n const value = model.valueForCell(index, cursorRow);\n const text = IrisGridUtils.convertValueToText(value, column.type);\n this.setState({\n gotoValueSelectedColumnName: columnName,\n gotoValue: text,\n gotoValueError: '',\n });\n }\n this.setState({\n gotoValueSelectedColumnName: columnName,\n gotoValueError: '',\n });\n }\n\n handleGotoValueSelectedFilterChanged(value: FilterTypeValue): void {\n this.setState({ gotoValueSelectedFilter: value, gotoValueError: '' });\n }\n\n handleGotoValueChanged = (input: string): void => {\n this.setState({ gotoValue: input });\n this.debouncedSeekRow(input);\n };\n\n debouncedSeekRow = debounce((input: string): void => {\n this.seekRow(input);\n }, SEEK_ROW_DEBOUNCE);\n\n handleGotoValueSubmitted(isBackwards?: boolean): void {\n const { gotoValue } = this.state;\n this.seekRow(gotoValue, isBackwards);\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 onPartitionAppend,\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 columnHeaderGroups,\n showOverflowModal,\n overflowText,\n overflowButtonTooltipProps,\n expandCellTooltipProps,\n linkHoverTooltipProps,\n isGotoShown,\n gotoRow,\n gotoRowError,\n gotoValueError,\n gotoValueSelectedColumnName,\n gotoValue,\n gotoValueSelectedFilter,\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 { gridX, gridY, allColumnXs, allColumnWidths, width } = metrics;\n const columnX = allColumnXs.get(focusedFilterBarColumn);\n const columnWidth = allColumnWidths.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 { gridX, gridY, visibleColumns, allColumnXs, allColumnWidths } =\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 = allColumnXs.get(columnIndex);\n const columnWidth = allColumnWidths.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 allColumnXs,\n allColumnWidths,\n columnHeaderHeight,\n } = metrics;\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const columnIndex = visibleColumns[i];\n const columnX = allColumnXs.get(columnIndex);\n const columnWidth = allColumnWidths.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 if (column == null) {\n // Grid metrics is likely out of sync with model\n log.warn(\n `Column does not exist at index ${modelColumn} for column array of length ${model.columns.length}`\n );\n // eslint-disable-next-line no-continue\n continue;\n }\n const advancedFilter = advancedFilters.get(modelColumn);\n const { options: advancedFilterOptions } = advancedFilter || {};\n const sort = TableUtils.getSortForColumn(model.sort, column.name);\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 || isRollup,\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 isGotoShown,\n advancedSettings.size > 0\n );\n\n const hiddenColumns = this.getCachedHiddenColumns(\n metricCalculator,\n userColumnWidths\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 hiddenColumns={hiddenColumns}\n columnHeaderGroups={columnHeaderGroups}\n onColumnVisibilityChanged={this.handleColumnVisibilityChanged}\n onReset={this.handleColumnVisibilityReset}\n onMovedColumnsChanged={this.handleMovedColumnsChanged}\n onColumnHeaderGroupChanged={this.handleHeaderGroupsChanged}\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 dh={model.dh}\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 userColumnWidths={userColumnWidths}\n movedColumns={movedColumns}\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 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 && partition != null && (\n <IrisGridPartitionSelector\n dh={model.dh}\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={\n onPartitionAppend !== undefined\n ? this.handlePartitionAppend\n : undefined\n }\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 model.dh,\n model.columns,\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 columnHeaderGroups={columnHeaderGroups}\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 {expandCellTooltipProps &&\n this.getExpandCellTooltip(expandCellTooltipProps)}\n {linkHoverTooltipProps &&\n this.getLinkHoverTooltip(linkHoverTooltipProps)}\n </div>\n <GotoRow\n model={model}\n isShown={isGotoShown}\n gotoRow={gotoRow}\n gotoRowError={gotoRowError}\n gotoValueError={gotoValueError}\n onGotoRowSubmit={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 gotoValueSelectedColumnName={gotoValueSelectedColumnName}\n gotoValue={gotoValue}\n gotoValueFilter={gotoValueSelectedFilter}\n onGotoValueSelectedColumnNameChanged={\n this.handleGotoValueSelectedColumnNameChanged\n }\n onGotoValueSelectedFilterChanged={\n this.handleGotoValueSelectedFilterChanged\n }\n onGotoValueChanged={this.handleGotoValueChanged}\n onGotoValueSubmit={this.handleGotoValueSubmitted}\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 dh={model.dh}\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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"}