@deephaven/embed-widget 1.10.1-beta.0 → 1.10.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.
Files changed (27) hide show
  1. package/build/assets/{App-CMa4KLNb.js → App-BxUxY4n5.js} +2 -2
  2. package/build/assets/{App-CMa4KLNb.js.map → App-BxUxY4n5.js.map} +1 -1
  3. package/build/assets/{Chart-iZHeZymR.js → Chart-DCAXyin1.js} +2 -2
  4. package/build/assets/{Chart-iZHeZymR.js.map → Chart-DCAXyin1.js.map} +1 -1
  5. package/build/assets/{IrisGrid-BT0jgxNQ.js → IrisGrid-CDaypHxn.js} +3 -3
  6. package/build/assets/{IrisGrid-BT0jgxNQ.js.map → IrisGrid-CDaypHxn.js.map} +1 -1
  7. package/build/assets/{IrisGridThemeProvider-Cr2OMEt6.js → IrisGridThemeProvider-D8WmTl6X.js} +2 -2
  8. package/build/assets/{IrisGridThemeProvider-Cr2OMEt6.js.map → IrisGridThemeProvider-D8WmTl6X.js.map} +1 -1
  9. package/build/assets/{LocalWorkspaceStorage-I6Wpor4D.js → LocalWorkspaceStorage-D-_5JxW0.js} +2 -2
  10. package/build/assets/{LocalWorkspaceStorage-I6Wpor4D.js.map → LocalWorkspaceStorage-D-_5JxW0.js.map} +1 -1
  11. package/build/assets/{LogPanel-C3Q6QhjP.js → LogPanel-BN2VYlYF.js} +2 -2
  12. package/build/assets/{LogPanel-C3Q6QhjP.js.map → LogPanel-BN2VYlYF.js.map} +1 -1
  13. package/build/assets/{MarkdownEditor-Bdfg5JQY.js → MarkdownEditor-DBjlHhGK.js} +2 -2
  14. package/build/assets/{MarkdownEditor-Bdfg5JQY.js.map → MarkdownEditor-DBjlHhGK.js.map} +1 -1
  15. package/build/assets/{MarkdownNotebook-DLhAqiOh.js → MarkdownNotebook-BmdN4A4b.js} +2 -2
  16. package/build/assets/{MarkdownNotebook-DLhAqiOh.js.map → MarkdownNotebook-BmdN4A4b.js.map} +1 -1
  17. package/build/assets/{index-Biu4R7UU.js → index-ByXhtFz6.js} +9 -9
  18. package/build/assets/index-ByXhtFz6.js.map +1 -0
  19. package/build/assets/{index-_X89-OiE.js → index-CfhJnBnE.js} +3 -3
  20. package/build/assets/{index-_X89-OiE.js.map → index-CfhJnBnE.js.map} +1 -1
  21. package/build/assets/index-D4IWyDq_.css +1 -0
  22. package/build/assets/{index-6jS4d5w-.js → index-DwIuzPDR.js} +4 -4
  23. package/build/assets/{index-6jS4d5w-.js.map → index-DwIuzPDR.js.map} +1 -1
  24. package/build/index.html +2 -2
  25. package/package.json +17 -17
  26. package/build/assets/index-Biu4R7UU.js.map +0 -1
  27. package/build/assets/index-C7-82BWT.css +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"mappings":"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","names":["bindAllMethods","instance","traversePrototypeChain","methodNames","getAllMethodNames","methodName","current","level","name","_Object$getOwnPropert","isNotNullOrUndefined","value","CardFlip","_ref","className","isFlipped","children","dataTestId","getComponent","key","front","useRef","transitionStart","useCallback","event","transitionEnd","useEffect","refObj","_jsxs","classNames","_jsx","_excluded","ownKeys","e","r","o","_objectSpread","_defineProperty","_toPropertyKey","t","i","_toPrimitive","_objectWithoutProperties","_objectWithoutPropertiesLoose","n","DISPLAY_CONTENTS","FadeTransition","classNamesProp","timeout","ThemeExport","onEnter","props","nodeRef","handleOnEnter","isAppearing","elem","setRef","node","CSSTransition","SocketedButton","React","ref","disabled","id","isLinked","isLinkedSource","isInvalid","onClick","onMouseEnter","onMouseLeave","style","UNSAFE_className","useSlotProps","FontAwesomeIcon","vsLink","dhExclamation","asyncGeneratorStep","c","u","_asyncToGenerator","_next","_throw","DeferredApiContext","createContext","useDeferredApi","widget","api","setApi","useState","error","setError","deferredApi","useContext","contextApi","ApiContext","isCancelled","loadApi","_loadApi","newApi","mergeReducer","type","initialState","state","action","newState","replaceReducer","SET_API","activeTool","SET_ACTIVE_TOOL","plugins","SET_PLUGINS","commandHistoryStorage","SET_COMMAND_HISTORY_STORAGE","fileStorage","SET_FILE_STORAGE","workspaceStorage","SET_WORKSPACE_STORAGE","storage","combineReducers","user","SET_USER","workspace","SET_WORKSPACE","defaultWorkspaceSettings","SET_DEFAULT_WORKSPACE_SETTINGS","serverConfigValues","SET_SERVER_CONFIG_VALUES","reducers","log","Log","logger","store","next","result","crashReporter","err","rootMiddleware","thunk","_REDUX_DEVTOOLS_EXTE","reducer","reducerRegistry","composeEnhancers","compose","createStore","applyMiddleware","newReducers","BooleanColumnFormatter","TableColumnFormatter","CharColumnFormatter","DefaultColumnFormatter","StringColumnFormatter","DATE_TIME_REGEX","DateUtils","dh","timeZone","year","month","day","hour","minute","second","ns","yearString","monthString","dayString","hourString","minuteString","secondString","nanoString","dateString","sigNanos","zeros","nextNanoString","components","values","date","hours","minutes","seconds","nanos","jsDate","cleanMonthString","dateTimeString","allowOverflow","overflow","dateParts","text","cleanText","now","_startDate","tomorrow","_endDate","_now","yesterday","_startDate2","_endDate2","_now2","startDate","endDate","dateWrapper","createComboboxFilterArgs","allValue","createSearchTextFilter","tableUtils","columnNames","searchText","maybeTable","searchTextTrimmed","factory","createFilterConditionFactory","col","createColumnCondition","conditionOperator","maybeColumns","filterConditions","createValueFilter","operator","createSelectedValuesFilter","columnName","selection","emptySelectionEqAll","invertSelection","maybeColumn","isAllSelected","createNotNullOrEmptyFilterCondition","column","createShowOnlyEmptyFilterCondition","isOn","filter","emptyStringValue","eqEmptyStringCondition","Operator","assertOperatorValue","Type","getLabelForTextFilter","filterType","getLabelForNumberFilter","getLabelForDateFilter","getLabelForBooleanFilter","ITEM_KEY_PREFIX","createKeyedItemKey","index","createOnTableUpdatedHandler","deserializeRow","bulkUpdate","columns","offset","rows","updateKeyMap","row","offsetInSnapshot","item","defaultRowDeserializer","generateEmptyKeyedItems","start","end","getSize","table","isClosed","padFirstAndLastRow","firstRow","viewportSize","padding","tableSize","lastRow","min","max","first","clamp","last","_TableUtils","isSortDirection","TableUtils","_arguments","derivedTable","_len","filterFactories","_key","removeNullAndUndefined","f","sort","_s$column","s","tableSort","sortIndex","columnType","FilterType","sorts","columnIndex","direction","isAbs","addToExisting","newSort","modelColumn","type1","type2","operation","PromiseUtils","resolved","eventName","matcher","emitter","options","eventCleanup","timeoutId","isPending","wrappedPromise","resolve","reject","TimeoutError","allowEmpty","numberText","isAscending","a","b","aName","bName","TextUtils","sortDirection","_arguments2","_this","sourceTable","_len2","filterConditionFactories","_key2","distinctTable","distinctAscColSort","isCaseSensitive","_this2","filterConditionFactory","tableCopy","size","columnDataType","orComponents","orFilter","orComponent","andComponents","andFilter","j","andComponent","columnFilter","regex","negativeSign","abnormalValue","quickFilterText","nullRegex","prefix","suffix","notEqual","cleanValue","boolValue","dateText","filterOperation","startValue","endValue","startFilter","endFilter","_startFilter","_endFilter","filterValue","filterItems","filterOperators","selectedValues","filterItem","selectedType","newFilter","filterOperator","FilterOperator","selectValueFilter","valueType","maybeFilterCondition","assertNotNull","_maybeFilterCondition","_arguments3","_this3","filters","_arguments4","_this4","_arguments5","_this5","_arguments6","_this6","eqFilter","notEqFilter","rawValue","isNullSelected","_ref2","exec","eventType","eventPromise","_x","_x2","_x3","Formatter","columnFormattingRules","map","dataType","formatMap","format","EMPTY_ARRAY","dateTimeOptions","decimalFormatOptions","integerFormatOptions","truncateNumbersWithPound","showEmptyStrings","showNullStrings","DateTimeColumnFormatter","DecimalColumnFormatter","IntegerColumnFormatter","createIfNecessary","_columnFormatMap$get","columnFormatMap","columnTypeFormatter","_this$typeFormatterMa","formatOverride","formatter","assertInstanceOf","createFormatterFromSettings","settings","columnRules","getColumnFormats","getDateTimeFormatterOptions","defaultDecimalFormatOptions","defaultIntegerFormatOptions","isCustomColumnFormatDefined","columnFormat","FormatterUtils","migrateState","from","to","migrations","migratedState","currentVersion","possibleMigration","m","migration","usePersistentState","config","_context$getInitialSt","nanoid","context","PersistentStateContext","persistedData","done","setState","_config$migrations","stateWithConfig","useDebugValue","Chart","lazy","__vitePreload","LazyChart","Suspense","LoadingOverlay","BUSINESS_COLUMN_TYPE","MILLIS_PER_HOUR","NANOS_PER_MILLI","isDateWrapper","isLongWrapper","isDateTimeColumnFormatter","isRangedPlotlyAxis","isWebGLSupported","canvas","gl","IS_WEBGL_SUPPORTED","ChartUtils","x","xLow","xHigh","array","arrayminus","formatPattern","subpatterns","matchArray","placeholderDigits","zeroDigits","decimalDigits","optionalDecimalDigits","numberType","percentSign","paddingLength","isCommaSeparated","comma","plotlyNumberType","decimalLength","trimOption","tickformat","tickprefix","ticksuffix","axisFormat","axis","isDateType","gapBetweenMajorTicks","updatedFormat","tickSpacing","chart","series","source","mode","showLegend","orientation","deephavenShape","figure","axes","charts","_chart","layout","ranges","keys","axisProperty","axisIndex","axisIndexString","period","decimal","property","_result$get","group","colorway","xAxis","title","calendarTimeZone","formatterTimeZone","holidayPeriods","calendarPeriods","calendarRanges","holidayRanges","closedRanges","calendarRange","lastClose","h","holidayRange","axisFormats","nullFormat","allAxes","axisTypeMap","_chart2","sources","axisSources","k","_axis","axisType","typeAxes","axisLayoutProperty","businessCalendar","plotStyle","isBusinessTime","allowWebGL","areLinesVisible","areShapesVisible","modes","sourceType","_sources$","seriesVisibility","isLinesVisible","isShapesVisible","lineColor","shapeColor","shape","shapeSize","_source$axis","seriesData","seriesDataParam","_axis2","dataAttributeName","set","axisPosition","layoutParam","chartAxisRangeParser","plotWidth","plotHeight","figureAxes","_chart3","axisRangeParser","bounds","_axisPositionMap$get","cols","colspan","rowspan","endColumn","endRow","columnSize","rowSize","xMarginSize","yMarginSize","axisPositionMap","rightAxes","dataFormatter","chartAxes","xAxisSize","yAxisSize","axisTypes","figureAxisTypeMap","figureTypeAxes","isYAxis","plotSize","chartAxisIndex","_axis3","figureAxisIndex","layoutAxis","_range","autorange","rangeParser","rangeStart","rangeEnd","figureAxisTypes","layoutAxisParam","_axis$label","axisSize","label","_this$getAxisProperty","_axisPositionMap$get2","positionAxes","sideIndex","leftAxes","left","right","bottomAxes","topAxes","bottom","top","minRange","maxRange","logAxis","periods","timeZoneDiff","numberPeriods","nextPeriod","bound","businessDays","weekLength","businessDaysInt","businessDaysSet","closedDays","boundsArray","closedDay","_i","adjustedDay","rangebreaks","businessPeriods","holidays","typeFormatter","calendar","fullHolidays","partialHolidays","holiday","_calendar$businessPer","dayOfWeek","isBusinessDay","closedPeriods","rangeBreaks","closeStart","closeEnd","dvalue","settingsAxis","yAxis","tzFormat","estimatedOffset","estimatedDate","theme","error_band_line_color","ohlc_increasing","ohlc_decreasing","title_color","indicator_increasing","indicator_decreasing","indicator_gauge","paper_bgcolor","plot_bgcolor","coastline_color","land_color","ocean_color","lake_color","river_color","ChartModel","renderOptions","isDownsamplingDisabled","rect","callback","listener","data","detail","FigureChartModel","debounce","pendingSeries","_loop","_chart$showLegend","memoize","range","valueParser","_this$figure$charts$","activeSeriesNames","_loop2","_axisTypeMap$get$find","_axisTypeMap$get","_axisTypeMap$get$find2","_axisTypeMap$get2","xAxisIndex","yAxisIndex","annotation","allSeriesNames","inactiveSeriesNames","seriesName","_this$renderOptions$w","_this$renderOptions","oneClick","figureUpdateEvent","seriesArray","valueTranslator","dataArray","_match$length","_match","subtitleCount","margin","_this$layout$margin$l","_this$layout$margin","_this$layout$margin$r","_this$layout$margin2","_this$layout$margin$t","_this$layout$margin3","_this$layout$margin$b","_this$layout$margin4","width","_xLow","_xHigh","y","yLow","yHigh","ids","labels","filterMap","_loop3","ChartModelFactory","isFigureChartModel","model","isDashboardPluginProps","GoldenLayout","PanelManager","assertIsDashboardPluginProps","usePanelRegistration","registerComponent","ComponentType","hydrate","dehydrate","_ComponentType$COMPON","deregister","useLayoutManager","layoutManager","LayoutManagerContext","IrisGrid","LazyIrisGrid","forwardRef","AdvancedSettingsType","DEFAULTS","AdvancedSettings","AggregationOperation","SELECTABLE_OPTIONS","isRollupOperation","isRollupProhibited","isValidOperation","operationType","filterValidColumns","getOperationColumnNames","selected","invert","AggregationUtils","isExpandableGridModel","SELECTION_DIRECTION","GridRange","startColumn","startRow","index1","index2","wasModified","other","_startColumn","_endColumn","_startRow","_endRow","start1","end1","start2","end2","ranges1","ranges2","otherRange","subtractRange","subtract","subtractRanges","columnCount","rowCount","_range$startColumn","_range$startRow","_range$endColumn","_range$endRow","columnOffset","rowOffset","rangeIndex","nextCell","nextRangeIndex","nextRange","_nextRangeIndex","_nextRange","cellCount","_range$endRow2","_range$startRow2","_range$endColumn2","_range$startColumn2","_range$endRow3","_range$startRow3","_range$endColumn3","_range$startColumn3","_this$nextCell","isAxisRange","isBoundedAxisRange","isLinkToken","token","GridUtils","metrics","columnHeaderDepth","allColumnWidths","allRowHeights","allColumnXs","allRowYs","modelColumns","modelRows","modelRow","columnWidth","rowHeight","columnHeaderHeight","columnHeaderMaxDepth","total","visibleStart","visibleEnd","floatingStartCount","floatingEndCount","totalCount","visibleStartIndex","visibleEndIndex","itemIndex","itemCoordinates","itemSizes","coordinate","_itemCoordinates$get","_itemSizes$get","itemX","itemSize","itemCount","floatingStart","floatingEnd","items","ignoreFloating","floatingItem","floatingLeftColumnCount","floatingRightColumnCount","visibleColumns","gridX","floatingTopRowCount","floatingBottomRowCount","visibleRows","gridY","startIndex","modelIndexes","visibleItems","userSizes","visibleItemIndex","modelIndex","userColumnWidths","userRowHeights","rowHeaderWidth","floatingColumns","floatingLeftWidth","allowColumnResize","headerSeparatorHandleSize","halfSeparatorSize","isPreviousColumnHidden","_allColumnXs$get","_allColumnWidths$get","columnX","isColumnHidden","midX","minX","maxX","_allColumnXs$get2","_allColumnWidths$get2","_column","_columnX","_columnWidth","_isColumnHidden","_midX","_minX","_maxX","visibleSizes","hiddenItems","allowRowResize","isPreviousRowHidden","_allRowYs$get","_allRowHeights$get","rowY","isRowHidden","midY","minY","maxY","rowIndex","oldMovedItems","movedItems","lastMovedItem","toParam","isPreMoveTo","newLastMovedItem","reverse","fromItemOrRange","toItem","length","fromItem","fromStart","fromEnd","toStart","moveDistance","nextResult","_result$j$","_result$j$2","currentStart","currentEnd","movedRange","currentResult","_ref3","movedColumns","movedRows","columnRanges","rowRanges","visibleIndex","visibleIndexes","uiRange","uiRanges","modelRanges","modelRange","visibleRanges","platform","modifierKey","height","floatingRightWidth","floatingTopHeight","floatingBottomHeight","x1","y1","x2","y2","wheelEvent","pageWidth","pageHeight","lineWidth","lineHeight","deltaX","deltaY","range1","range2","mergedRanges","tokenBox","gridWidth","gridHeight","verticalBarWidth","horizontalBarHeight","newLeft","newRight","newTop","newBottom","firstColumn","cellHorizontalPadding","treeDepthIndent","treeHorizontalPadding","getOrThrow","textAlign","isFirstColumn","treeIndent","textWidth","textX","textY","tokens","linkifyFind","memoizeClear","fn","isClearingCache","memoizedFn","memoizee","LINK_TRUNCATION_LENGTH","GridModel","EventTarget","visibleLength","indexOfProceedingWhitespace","lengthOfContent","contentToCheckForLinks","depth","EMPTY_SET","IrisGridModel","type0","callback0","options0","isColumnHeaderGroup","ColumnHeaderGroup","color","childIndexes","parent","memoizeOne","flattenedIndexes","newChildren","isPartitionedGridModelProvider","isPartitionedGridModel","_excluded2","isPanelStateV1","isPanelStateV2","isValidIndex","IrisGridUtils","gridState","isStuckToBottom","isStuckToRight","customColumns","customColumnNames","_ref4","getIndex","_ref5","irisGridPanelState","isSelectingPartition","partitions","advancedSettings","quickFilters","_ref6","quickFilter","panelState","inputFilters","irisGridState","advancedFilters","_ref7","_ref8","_ref9","_ref0","customColumn","oldCustomColumns","oldCustomColumnsNames","oldCustomColumnName","removedColumnNames","_ref1","_ref10","newMoves","removedColumnName","removedColumnIndex","moves","move","newMove","selectDistinctColumns","tableColumns","hiddenColumns","count","viewportColumns","alwaysFetchColumnNames","columnsToFetch","_ref11","bufferPages","columnsCenter","bufferWidth","columnsLeft","columnsRight","bufferedColumns","rangeMap","rowMapIndex","columnMapIndex","matchColumnRanges","allColumns","columnSet","rowData","originalColumns","aggregationSettings","_config$columns$lengt","_config$columns","groupingColumns","includeConstituents","showNonAggregatedColumns","includeDescriptions","aggregations","filteredAggregations","_ref12","aggregationColumns","_ref13","aggregationMap","nonAggregatedColumnSet","_aggregationMap$Aggre","existingColumns","pendingDataMap","_ref14","_ref15","_ref16","filterConfig","filterList","combinedText","symbol","filterText","groupsParam","makeColumnHeaderGroup","args","maxDepth","parentMap","groupMap","groups","_ref17","originalGroupMap","seenChildren","addGroup","_group$children","existingGroup","childName","childGroup","childIndex","addedGroup","headerGroupConfig","columnHeaderGroup","groupNames","_parentMap$get","offsetDate","formattedText","customColumnFormatMap","columnAlignmentMap","EMPTY_MAP","isFilterBarShown","conditionalFormats","rollupConfig","showSearchBar","searchValue","selectedSearchColumns","invertSearchColumns","frozenColumns","columnHeaderGroups","partitionConfig","partitionColumns","_ref18","_ref19","_item$color","_ref23","_model$layoutHints","reverseType","_ref20","_ref21","_ref22","savedQuickFilters","importedFilters","_ref24","_ref25","advancedFilter","savedAdvancedFilters","_ref26","columnRetrieved","otherOptions","_ref27","_ref28","_ref29","columnMap","getColumnIndex","_ref30","_ref31","_ref32","_getColumnIndex","partition","dropReverse","columnIndexOrName","sortDescriptor","columnSort","tableSettings","partitionColumnNames","partitionColumnName","partitionFilter","_ref33","_ref34","rangeSets","MissingKeyError","SET_VIEWPORT_THROTTLE","APPLY_VIEWPORT_THROTTLE","isIrisGridTableModelTemplate","IrisGridTableModelTemplate","insensitive","contains","isBackwards","formatColumns","names","_formatter","inputTable","layoutHints","_layoutHints$columnGr","_layoutHints$frontCol","_layoutHints$backColu","_layoutHints$frozenCo","moveColumn","toIndex","moveGroup","visibleRange","frontColumns","backColumns","usedColumns","frontIndex","backIndex","layoutHintColumnGroups","columnGroups","firstChildName","rightModelIndex","rightVisibleIndex","firstChildGroup","childColumn","isBeforeGroup","moveToIndex","_isBeforeGroup","_moveToIndex","_layoutHints$columnGr2","indices","throttle","viewport","viewportTop","viewportBottom","viewHeight","keyColumnCount","_map$get","totalsTable","EventShimCustomEvent","_this$totals$operatio","_this$totals","_this$inputTable$keyC","_this$inputTable","_this$totals$operatio2","_this$totals2","_this$totals$operatio3","_this$totals3","pendingTop","pendingBottom","pendingLeft","pendingRight","_this$pendingStringDa","_this$formattedString","hasCustomColumnFormat","formatForCell","_this$columns$x","pendingRow","_this$formatForCell$b","_this$formatForCell","userTextAlignment","_header$displayName","header","_column$color","_this$columnAtDepth$n","_this$columnAtDepth","_this$columns$x2","currentDepth","totalsRow","_this$layoutHints","_this$layoutHints2","_this$_columnHeaderMa","newGroups","_this$layoutHints$col","_this$layoutHints3","_this$totals$operatio4","_this$totals4","_this$totals$showOnTo","_this$totals5","_this$viewportData$of","_this$viewportData","_this$viewportData$ro","_this$viewportData2","totalsRowCount","showOnTop","_this$totals6","_this$totalsDataMap$g","_this$totalsDataMap","_this$pendingNewDataM","viewportY","_this$totals7","_this$totals$defaultO","_this$totals8","_this$totalsTable","defaultOperation","tableColumn","totalsColumn","_this$totals9","_this$totals$operatio5","_this$totals0","_this$totals$showOnTo2","_this$totals1","_this$row","_this$dataForCell","_data$value","totalsData","_this$totals$defaultO2","_this$totals10","_this$totals11","dataMap","operationMap","_operationMap$name$","_operationMap$name","newData","newRow","totalsConfig","_this$table$setViewpo","includeHeaders","formatValue","consolidateRanges","consolidated","topFloatingRowsSet","tableRanges","bottomFloatingRowsSet","_r","topFloatingRows","rangeSet","snapshot","bottomFloatingRows","_i2","_this$columns$modelIn","isPendingRange","isKeyColumnInRange","isKey","isValue","pendingAreaRange","pendingRanges","newDataMap","newRowData","tableAreaRange","_this6$inputTable","newRows","cellText","_this7","edits","edit","_edit$column","_edit$row","_edit$column2","_edit$row2","rowEditMap","rowMap","_edit$row3","_rowMap$get","_edit$column3","_edit$row4","_this7$inputTable","dataIndex","rangeRowCount","rowEdits","_edit$column4","_edit$column5","_edit$row5","_this8","_this8$inputTable","_this8$viewport$botto","_this8$viewport","_this$textValueForCel","VirtualGroupColumn","isUITreeRow","isLayoutTreeTable","isIrisGridTreeTableModel","tableModel","IrisGridTreeTableModel","virtualColumns","tableGroupedColumns","isAggregatedColumnsAvailable","aggregatedColumns","groupedColumns","c1","c2","showExtraGroupCol","columnTypeForFormatting","_this$columnAlignment","typeForFormatting","isExpanded","hasChildren","extractedRow","modifiedData","cellData","_this$viewport$column","viewportRange","intersection","resultRow","viewportRow","_viewportRow$data$get","_row$hasChildren","_row$isExpanded","expandDescendants","_row$depth","Editor","Component","language","monaco.editor","_this$editor","onEditorInitialized","monaco.KeyMod","monaco.KeyCode","monaco.languages","MonacoUtils","onEditorWillDestroy","container","LANGUAGES","ScriptEditorUtils","isSessionConnected","isLanguageMatching","scriptLanguageLabel","buttonLabel","code","lines","minIndent","line","indentLength","ScriptEditor","ShortcutRegistry","prevProps","_prevProps$settings","_prevProps$settings2","sessionLanguage","languageChanged","sessionDisconnected","languageMatch","prevLanguageMatch","sessionConnected","_this$editor2","startLineNumber","endLineNumber","startLineMinColumn","endLineMaxColumn","wholeLineRange","innerEditor","focusOnMount","onChange","session","onRunCommand","command","cleanups","SHORTCUTS","cleanup","focus","currentText","lastLine","_settings$language","isLoaded","isLoading","errorMessage","editorLanguage","completionProviderEnabled","_Fragment","MonacoProviders","MissingPartitionError","isMissingPartitionError","IrisGridTableModel","inputTableKeys","inputTableValues","layoutHintsFrontColumns","layoutHintsBackColumns","layoutHintsFrozenColumns","userFrozenColumns","_","_this$inputTable2","_this$layoutHints$fro","_this$layoutHints$bac","_this$layoutHints$fro2","_this$table$descripti","partitionFilters","partitionColumn","_superprop_getPendingDataMap","_superprop_setPendingDataMap","_value","keyColumns","pendingRange","deleteTable","keyColumn","keyIndex","columnFilters","_filter","agg","curr","_agg$and","_agg$or","EmptyIrisGridModel","isPartitionedTableWithBaseTable","partitionedTable","IrisGridPartitionedTableModel","_this$columns$column$","makeModel","IrisGridProxyModel","target","prop","receiver","proxyHasGetter","proxyHasProp","proxyHasFn","trueTarget","_Object$getOwnPropert2","proxyHasSetter","oldModel","oldColumns","modelPromise","events","deepEqual","IrisGridModelFactory","areGridStatesEqual","gridStateA","gridStateB","compareKeys","areIrisGridStatesEqual","irisGridStateA","irisGridStateB","compareStateKeys","makeMemoizedGridStateDehydrator","modelA","modelB","makeMemoizedIrisGridStateDehydrator","irisGridUtils","makeMemoizedCombinedGridStateDehydrator","IrisGridCacheUtils","ChartEvent","IrisGridEvent","MarkdownEvent","PandasEvent","TabEvent","DashboardTabEvent","WidgetPanelTooltip","descriptor","description","displayName","formattedType","CopyButton","XWidgetPanelTooltip","createXComponent","WidgetPanel","PureComponent","showTabTooltip","_descriptor$displayTy","propsAdditionalActions","ContextActions","copyToClipboard","isClientDisconnected","isPanelDisconnected","isWidgetDisconnected","isWaitingForReconnect","onSessionClose","componentPanel","glContainer","glEventHub","isDisconnected","isClonable","isRenamable","renderTabTooltip","onClearAllFilters","onHide","onFocus","onBlur","onResize","onSessionOpen","onShow","onTabBlur","onTabFocus","onTabClicked","isPanelInactive","doRenderTabTooltip","additionalActions","Panel","XWidgetPanel","ToolType","setDashboardConnection","connection","dispatch","updateDashboardData","setDashboardSessionWrapper","sessionWrapper","setDashboardLinks","links","addDashboardLinks","newLinks","getState","getLinksForDashboard","filtered","newLink","link","deleteDashboardLinks","linkIds","setDashboardIsolatedLinkerPanelId","isolatedLinkerPanelId","setDashboardColumnSelectionValidator","columnSelectionValidator","setDashboardConsoleSettings","consoleSettings","setDashboardFilterSets","filterSets","ChartFilterOverlay","inputFilterMap","linkedColumnMap","onAdd","onOpenLinker","waitingFilterMap","waitingInputMap","inputMessage","useMemo","waitingColumns","needsInputFilterValue","needsLinkValue","columnsText","handleAddClick","handleOpenLinker","isWaitingFilters","isWaitingInput","isColumnWaiting","icon","vsWarning","vsPass","Button","ChartColumnSelectorOverlay","onColumnSelected","_onMouseEnter","isChartPanelTableMetadata","metadata","isChartPanelFigureMetadata","isGLChartPanelState","isChartPanelDehydratedProps","filterColumnsChangedFns","makeEventFunctions","InputFilterEvent","listenForFilterColumnsChanged","emitFilterColumnsChanged","useFilterColumnsChangedListener","filterTableChangedFns","emitFilterTableChanged","useFilterTableChangedListener","filterChangedFns","emitFilterChanged","useFilterChangedListener","LinkerEvent","linkPointSelectedFns","listenForLinkPointSelected","emitLinkPointSelected","linkSourceDataSelectedFns","listenForLinkSourceDataSelected","emitLinkSourceDataSelected","registerLinkTargetFns","listenForRegisterLinkTarget","emitRegisterLinkTarget","UPDATE_MODEL_DEBOUNCE","hasInputFilter","panel","hasPanelState","ChartPanel","isFilterRequired","inputFilter","panelId","LayoutUtils","_metadata$figure","_metadata$name","Pending","_metadata","filterValueMap","prevState","isActive","isHidden","localDashboardId","setActiveTool","prevModel","sourcePanel","sourcePanelState","update","prevSettings","_element$getBoundingC","element","filterMapParam","updatedFilterMap","_inputFilterMap$get","inputFilterValue","prevInputFilters","deletedInputFilters","prevInputFilter","changedInputFilters","forceUpdate","needsUpdate","linkValue","defaultTitle","filterTitle","isLinkerActive","Plotly","containerRef","isWaitingForFilter","isSelectingColumn","mapStateToProps","ownProps","sourcePanelId","panelTableMap","getTableMapForDashboard","openedPanelMap","getOpenedPanelMapForDashboard","getActiveTool","getIsolatedLinkerPanelIdForDashboard","getColumnSelectionValidatorForDashboard","getInputFiltersForDashboard","getSettings","ConnectedChartPanel","connect","setActiveToolAction","setDashboardIsolatedLinkerPanelIdAction","UPDATE_DEBOUNCE","DropdownFilter","selectedColumn","selectedIndex","columnItem","val","shortType","isValueShown","_isValueShown","eventTargetValue","valueIndex","_this$dropdownRef$cur","oldValue","oldIsValueShown","_source$columnName","disableLinking","onSourceMouseEnter","onSourceMouseLeave","settingsError","disableCancel","columnSelectionDisabled","sourceButtonLabel","columnOptions","valueOptions","selectedOption","disableSave","sourceColumnId","filterColumnId","Select","vsGear","DROPDOWN_FILTER_DEBOUNCE","WIDGET_DESCRIPTOR","dashboardLinks","getColumnsForDashboard","getApi","connector","DropdownFilterPanel","rawValues","_link$end","_panelTableMap$get","_table$columns$find","_name","_type","timestamp","valuesTable","prevSource","prevSourceTable","sourceSize","panelLinks","sendUpdate","prevTimestamp","wasFlipped","skipUpdate","isFlip","_this$dropdownFilterR","_this$dropdownFilterR2","_this$getSource","excludePanelIds","valuesColumn","columnFormats","settingsErrorMessage","panelErrorMessage","formattedValues","ConnectedDropdownFilterPanel","NAME_INPUT_PLACEHOLDER","EMPTY_LIST_PLACEHOLDER","FilterSetManager","_document$querySelect","overlay","renameSet","modifiedFilterSets","selectedId","isEmptyList","onUpdateSets","editId","getFilterState","panels","nameInputValue","_nameInputValue$trim","trimmedName","_nameInputValue$trim2","restoreFullState","nameInputError","namedFilterSet","updatedModifiedFilterSets","prevFilterSets","newSelectedIndex","newSelectedId","selectedSetIndex","selectedSet","onApply","filterSet","_this$renameInputRef$","isNameInputScreen","isRenamingExistingSet","isEmptyEditList","isInitialScreen","isEditListScreen","captureSetIcon","vsCircleLargeFilled","vsDeviceCamera","dhNewCircleLargeFilled","updateSetIcon","vsArrowSmallUp","vsSave","vsCircleSlash","RadioGroup","Radio","vsEdit","vsTrash","dhRefresh","IrisGridPanelTooltip","_model$rowCount","_model$pendingRowCoun","_model$floatingBottom","_model$floatingTopRow","_model$columnCount","formattedRowCount","formattedcolumnCount","isLegacyIrisGridPanelMetadata","irisGridPanelMetadata","isIrisGridPanelMetadata","DEBOUNCE_PANEL_STATE_UPDATE","getTableNameFromMetadata","IrisGridPanel","pluginFetchColumns","Plugin","pluginState","_this$irisGrid$curren","deprecatedProps","onPanelStateUpdate","oldPanelState","_panelState","modelParam","irisGridStateOverrides","modelQueue","modelChange","_this$irisGridUtils$g","_this$irisGridUtils","pluginFilters","_this$pluginRef$curre","_this$pluginRef$curre2","_this$pluginRef$curre3","onStateChange","isModelReady","loadPlugin","pluginName","irisGrid","_gridWrapper$getBound","gridWrapper","indexedQuickFilters","indexedAdvancedFilters","overrides","gridStateOverrides","originalIrisGridStateOverrides","_this$irisGrid$curren2","_this$irisGrid$curren3","grid","_model$description","_panelState$pluginSta","getDownloadWorker","mouseHandlers","renderer","getMetricCalculator","childrenContent","permissions","canCopy","canDownloadCsv","widgetPanelDescriptor","DEFAULT_DASHBOARD_ID","getUser","ConnectedIrisGridPanel","InputFilter","propColumn","inputLength","titleLabel","INPUT_FILTER_DEBOUNCE","InputFilterPanel","_this$inputFilterRef$","_this$inputFilterRef$2","ConnectedInputFilterPanel","hasSetPanelState","FilterSetManagerPanel","configs","dashboardOpenedPanelMap","componentName","prevAdvancedFilters","prevQuickFilters","inputFilterState","getFilterSetsForDashboard","ConnectedFilterSetManagerPanel","setDashboardFilterSetsAction","MarkdownContainer","isEditing","onDoubleClick","MarkdownStartPage","markdown","onDelete","closedMarkdowns","onOpen","onCreate","isDeleteModalShown","toBeDeleted","Modal","ModalHeader","ModalBody","ModalFooter","MarkdownUtils","usedTitles","titleIndex","closedPanels","MarkdownEditor","MarkdownPanel","content","clickPositionY","markdownEditorContainer","_this$editor$getModel","_this$editor$getModel2","contentTop","contentScrollTop","contentScrollHeight","totalLines","lineToFocus","dbClickPositionY","editor","PanelEvent","isStartPageShown","markdownEditor","getClosedPanelsForDashboard","ConnectedMarkdownPanel","MarkdownNotebook","NotebookPanel","fileName","extension","FileUtils","initialSettings","isMinimapEnabled","isWordWrapEnabled","formatOnSave","actions","dhFileSearch","vsCopy","dhICursor","vsCheck","isDashboardActive","fileMetadata","isPreview","hasFileId","isUnsaved","changeCount","tab","NotebookEvent","wordWrap","notebookSettings","savedChangeCount","tabElement","titleElement","notebookValue","tabId","loadedFile","_NotebookPanel$langua","itemName","prevItemName","updatedSettings","filename","dehydratedValue","dehydratedSettings","copyName","newFileMetadata","isUndoing","isRedoing","_notebookSettings$isM","updateNotebookSettings","newSettings","_notebookSettings$for","notebooksUrl","href","notebookPath","errorParam","file","_NotebookPanel$langua2","oldMetadata","_this$getNotebookValu","isOverwrite","_this$notebook","_this4$notebook","oldName","newName","curPanelState","_this$notebook2","_this$notebook$getVal","_this$notebook3","droppedId","src","itemUri","ConsoleEvent","_fileMetadata$itemNam","_notebookSettings$isM2","_settings$value","showCloseModal","showDeleteModal","showSaveAsModal","isMarkdown","isExistingItem","runButtonsDisabled","toolbarDisabled","contextActions","GLOBAL_SHORTCUTS","disabledRunButtonTooltip","disabledRunSelectedButtonTooltip","portal","ReactDOM","vsPlay","Tooltip","dhRunSelection","vsKebabVertical","DropdownMenu","notebook","NewItemModal","BasicModal","getFileStorage","getNotebookSettings","getDashboardSessionWrapper","sessionConfig","ConnectedNotebookPanel","updateNotebookSettingsAction","PandasReloadButton","buttonRef","handleClick","_buttonRef$current","PandasPanel","prevMakeModel","_this$irisGridRef$cur","_this$irisGridRef$cur2","_this$irisGridRef$cur3","shouldFocusGrid","MockFileStorageTable","search","path","expanded","isDirectory","sortedRanges","_this$onUpdateCallbac","loadedViewportData","isReversed","MockFileStorage","allItems","FileNotFoundError","itemDetails","CorePanel","CorePanelImport","createChartModel","_x4","_createChartModel","panelFetch","tableName","getTimeZone","ChartPanelPlugin","ChartWidgetPlugin","useApi","setModel","fetch","cancelled","init","_init","newModel","ChartPluginConfig","PluginType","vsGraph","ChartBuilderPlugin","handleCreateChart","fetchTable","root","useListener","ChartBuilderPluginConfig","useConfigureRuff","linter","useAppSelector","ruffEnabled","ruffConfig","isNotebookPanel","assertIsConsolePluginProps","ConsolePlugin","hydrateConsole","panelManager","notebookIndex","openFileMap","setOpenFileMap","previewFileMap","setPreviewFileMap","useDispatch","getConsolePanel","ConsolePanel","addOpenFileMapEntry","deleteOpenFileMapEntry","addPreviewFileMapEntry","deletePreviewFileMapEntry","handleSendCommand","execute","trimmedCommand","consolePanel","handleSettingsChanged","getNotebookFileName","getPanelIdForFileMetadata","fileId","renamePanel","newTitle","renameFilePanel","showFilePanel","registerFilePanel","existingPanelId","unregisterFilePanel","closeFilePanel","getNotebookTitle","fileIsOpen","fileIsOpenAsPreview","focusPanelById","makeConfig","createNotebook","stack","selectNotebook","shouldFocus","isFileOpen","isFileOpenAsPreview","previewId","_stack","isComponent","sendToNotebook","notebookPanel","hydrateNotebook","panelProps","panelDashboardId","DashboardUtils","CommandHistoryPanel","FileExplorerPanel","LogPanel","FilterPlugin","panelColumns","panelFilters","panelTables","aType","bType","tableMap","handleColumnsChanged","sourceId","handleFiltersChanged","handleTableChanged","handlePanelUnmount","handleOpenDropdown","focusElement","createNewStack","dragEvent","handleOpenInput","handleOpenFilterSetManager","FilterPluginConfig","useLoadTablePlugin","usePlugins","plugin","pluginModule","isTablePlugin","isLegacyTablePlugin","useHydrateGrid","hydratedProps","_makeModel","GridPanelPlugin","useIrisGridModel","setIsLoading","reload","handleDisconnect","useDashboardColumnFilters","eventHub","dashboardId","useDashboardId","useDhId","getInputFilters","reduxInputFilters","useGridLinker","dhId","usePanelId","getLinks","linkColumns","getColumnSelectionValidator","isColumnSelectionValid","onDataSelected","getCoordinates","TablePluginWrapper","fetchColumns","selectedRanges","irisGridRef","panelName","_panelItem$config$tit","panelItem","useTablePlugin","setPluginFilters","customFilters","alwaysFetchColumns","setAlwaysFetchColumns","pluginRef","setPluginState","onContextMenu","_pluginRef$current$ge","_pluginRef$current","_pluginRef$current$ge2","GridWidgetPlugin","_model$columns","useSelector","fetchResult","hydratedState","dehydrateIrisGridState","handleIrisGridChange","_useGridLinker","linkerAlwaysFetchColumns","linkerProps","handleClearAllFilters","setSelection","filterFetchColumns","getErrorMessage","GridPluginConfig","dhTable","isLinkableFromPanel","p","isLinkablePanel","isLinkableColumn","LinkerUtils","startColumnType","endColumnType","isCompatibleType","cloneId","clonedLinks","DROOP","DROOP_EXPONENT","TRIANGLE_HEIGHT","TRIANGLE_BASE","TRIANGLE_TIP","TRIANGLE_HYPOTENUSE","TRIANGLE_THETA","CLIP_RADIUS","HALF_PI","LinkerLink","linkId","onOperatorChanged","filterTypes","isSelected","isHovering","len","theta","xMult","yMult","qx","qy","selectClipPath","clipPathId","endTheta","t2theta","t3theta","tx1","ty1","tx2","ty2","tx3","ty3","points","dMidX","dMidY","slopeAtMid","DISTANCE_FROM_MID","topOffsetX","topOffsetY","bottomOffsetX","bottomOffsetY","showOperator","vsTriangleDown","LinkerOverlayContent","info","linkPoint","linkTargetPropMap","linkPointId","linkTargetHandlers","coordinates","onLinksUpdated","dialog","dialogX","dialogY","isDragging","selectedIds","onLinkDeleted","onCancel","messageText","onLinkSelected","onAllLinksDeleted","onDone","mouse","visibleLinks","_mouse$x","_mouse$y","tmpX","tmpY","vsGripper","mapState","setDashboardLinksAction","addDashboardLinksAction","deleteDashboardLinksAction","setDashboardColumnSelectionValidatorAction","Linker","linkInProgress","isolateForPanelId","combinedLinks","_link$start","remove","linksToDelete","isIsolatedLinker","isAlwaysEnd","_link$start2","_link$end2","isAlwaysEndPoint","overrideIsolatedLinkerPanelId","_linkInProgress$endTy","isValid","finalType","existingLinkPanelId","panelLinkEnd","existingLinkEnd","existingLinkStart","_linksToDelete","panelLinkStart","_newLink","_linkTargetPropMap$ge","unsetFilterValue","endPanel","_linkTargetPropMap$ge2","setFilterValues","clearAll","isolatedLinks","_link$start3","_link$end3","l","handlers","panelFilterMap","_filterMap$get$filter","_filterMap$get","endPanelId","existingFilterMap","startColumnIndex","isExpandable","isGrouped","dateFilterFormatter","cloneConfig","linksToAdd","componentId","panelOrId","_linkInProgress$endTy2","isDraggingPanel","isLinkOverlayShown","linkerOverlayMessage","ConnectedLinker","LinkerPlugin","LinkerPluginConfig","MarkdownPlugin","handleOpen","openedMarkdowns","_markdown$title","panelTitle","MarkdownPluginConfig","PandasPanelPlugin","PandasWidgetPlugin","PandasPluginConfig","dhPandas","WrapWidgetPlugin","_plugin$component$dis","Wrapper","_metadata$type","C","panelDescriptor","hasRef","canHaveRef","WidgetLoaderPlugin","supportedTypes","typeMap","isWidgetPlugin","supportedType","_typeMap$get","handlePanelOpen","_widget$name","deregisterFns","panelComponent","usePanelOpenListener","WidgetLoaderPluginConfig","ControlType","PropTypes","LinkPoint","LinkPointUntyped","Link","Links","User","UIPropTypes","nullableBoolean","propName","nullableString","CommonPropTypes"],"ignoreList":[],"sources":["../../../utils/dist/ClassUtils.js","../../../utils/dist/isNotNullOrUndefined.js","../../../components/dist/CardFlip.js","../../../components/dist/transitions/FadeTransition.js","../../../components/dist/SocketedButton.js","../../../jsapi-bootstrap/dist/useDeferredApi.js","../../../redux/dist/reducers/common/mergeReducer.js","../../../redux/dist/reducers/common/replaceReducer.js","../../../redux/dist/reducers/api.js","../../../redux/dist/reducers/activeTool.js","../../../redux/dist/reducers/plugins.js","../../../redux/dist/reducers/storage/commandHistoryStorage.js","../../../redux/dist/reducers/storage/fileStorage.js","../../../redux/dist/reducers/storage/workspaceStorage.js","../../../redux/dist/reducers/storage/index.js","../../../redux/dist/reducers/user.js","../../../redux/dist/reducers/workspace.js","../../../redux/dist/reducers/defaultWorkspaceSettings.js","../../../redux/dist/reducers/serverConfigValues.js","../../../redux/dist/reducers/index.js","../../../redux/dist/middleware/logger.js","../../../redux/dist/middleware/crashReporter.js","../../../redux/dist/middleware/index.js","../../../redux/dist/store.js","../../../jsapi-utils/dist/formatters/BooleanColumnFormatter.js","../../../jsapi-utils/dist/formatters/CharColumnFormatter.js","../../../jsapi-utils/dist/formatters/DefaultColumnFormatter.js","../../../jsapi-utils/dist/formatters/StringColumnFormatter.js","../../../jsapi-utils/dist/DateUtils.js","../../../jsapi-utils/dist/FilterUtils.js","../../../filters/dist/Operator.js","../../../filters/dist/Type.js","../../../filters/dist/Utils.js","../../../jsapi-utils/dist/ViewportDataUtils.js","../../../jsapi-utils/dist/TableUtils.js","../../../jsapi-utils/dist/Formatter.js","../../../jsapi-utils/dist/FormatterUtils.js","../../../plugin/dist/usePersistentState.js","../../../chart/dist/LazyChart.js","../../../chart/dist/ChartUtils.js","../../../chart/dist/ChartModel.js","../../../chart/dist/FigureChartModel.js","../../../chart/dist/ChartModelFactory.js","../../../chart/dist/isFigureChartModel.js","../../../dashboard/dist/DashboardPlugin.js","../../../dashboard/dist/layout/usePanelRegistration.js","../../../dashboard/dist/layout/useLayoutManager.js","../../../iris-grid/dist/LazyIrisGrid.js","../../../iris-grid/dist/sidebar/AdvancedSettingsType.js","../../../iris-grid/dist/sidebar/AdvancedSettings.js","../../../iris-grid/dist/sidebar/aggregations/AggregationOperation.js","../../../iris-grid/dist/sidebar/aggregations/AggregationUtils.js","../../../grid/dist/ExpandableGridModel.js","../../../grid/dist/GridRange.js","../../../grid/dist/GridAxisRange.js","../../../grid/dist/GridUtils.js","../../../grid/dist/memoizeClear.js","../../../grid/dist/GridModel.js","../../../iris-grid/dist/IrisGridModel.js","../../../iris-grid/dist/ColumnHeaderGroup.js","../../../iris-grid/dist/PartitionedGridModel.js","../../../iris-grid/dist/IrisGridUtils.js","../../../iris-grid/dist/MissingKeyError.js","../../../iris-grid/dist/IrisGridTableModelTemplate.js","../../../iris-grid/dist/IrisGridTreeTableModel.js","../../../console/dist/notebook/Editor.js","../../../console/dist/notebook/ScriptEditorUtils.js","../../../console/dist/notebook/ScriptEditor.js","../../../iris-grid/dist/MissingPartitionError.js","../../../iris-grid/dist/IrisGridTableModel.js","../../../iris-grid/dist/EmptyIrisGridModel.js","../../../iris-grid/dist/IrisGridPartitionedTableModel.js","../../../iris-grid/dist/IrisGridProxyModel.js","../../../iris-grid/dist/IrisGridModelFactory.js","../../../iris-grid/dist/IrisGridCacheUtils.js","../../../dashboard-core-plugins/dist/events/ChartEvent.js","../../../dashboard-core-plugins/dist/events/IrisGridEvent.js","../../../dashboard-core-plugins/dist/events/MarkdownEvent.js","../../../dashboard-core-plugins/dist/events/PandasEvent.js","../../../dashboard-core-plugins/dist/events/index.js","../../../dashboard-core-plugins/dist/panels/WidgetPanelTooltip.js","../../../dashboard-core-plugins/dist/panels/WidgetPanel.js","../../../dashboard-core-plugins/dist/linker/ToolType.js","../../../dashboard-core-plugins/dist/redux/actions.js","../../../dashboard-core-plugins/dist/panels/ChartFilterOverlay.js","../../../dashboard-core-plugins/dist/panels/ChartColumnSelectorOverlay.js","../../../dashboard-core-plugins/dist/panels/ChartPanelUtils.js","../../../dashboard-core-plugins/dist/FilterEvents.js","../../../dashboard-core-plugins/dist/linker/LinkerEvent.js","../../../dashboard-core-plugins/dist/panels/ChartPanel.js","../../../dashboard-core-plugins/dist/controls/dropdown-filter/DropdownFilter.js","../../../dashboard-core-plugins/dist/panels/DropdownFilterPanel.js","../../../dashboard-core-plugins/dist/panels/FilterSetManager.js","../../../dashboard-core-plugins/dist/panels/IrisGridPanelTooltip.js","../../../dashboard-core-plugins/dist/panels/IrisGridPanelTypes.js","../../../dashboard-core-plugins/dist/panels/IrisGridPanel.js","../../../dashboard-core-plugins/dist/controls/input-filter/InputFilter.js","../../../dashboard-core-plugins/dist/panels/InputFilterPanel.js","../../../dashboard-core-plugins/dist/panels/FilterSetManagerPanel.js","../../../dashboard-core-plugins/dist/controls/markdown/MarkdownContainer.js","../../../dashboard-core-plugins/dist/controls/markdown/MarkdownStartPage.js","../../../dashboard-core-plugins/dist/controls/markdown/MarkdownUtils.js","../../../dashboard-core-plugins/dist/panels/MarkdownPanel.js","../../../dashboard-core-plugins/dist/panels/NotebookPanel.js","../../../dashboard-core-plugins/dist/panels/PandasReloadButton.js","../../../dashboard-core-plugins/dist/panels/PandasPanel.js","../../../dashboard-core-plugins/dist/panels/MockFileStorageTable.js","../../../dashboard-core-plugins/dist/panels/MockFileStorage.js","../../../dashboard-core-plugins/dist/panels/index.js","../../../dashboard-core-plugins/dist/ChartPanelPlugin.js","../../../dashboard-core-plugins/dist/ChartWidgetPlugin.js","../../../dashboard-core-plugins/dist/ChartPluginConfig.js","../../../dashboard-core-plugins/dist/ChartBuilderPlugin.js","../../../dashboard-core-plugins/dist/ChartBuilderPluginConfig.js","../../../dashboard-core-plugins/dist/useConfigureRuff.js","../../../dashboard-core-plugins/dist/ConsolePlugin.js","../../../dashboard-core-plugins/dist/FilterPlugin.js","../../../dashboard-core-plugins/dist/FilterPluginConfig.js","../../../dashboard-core-plugins/dist/useLoadTablePlugin.js","../../../dashboard-core-plugins/dist/useHydrateGrid.js","../../../dashboard-core-plugins/dist/GridPanelPlugin.js","../../../dashboard-core-plugins/dist/useIrisGridModel.js","../../../dashboard-core-plugins/dist/useDashboardColumnFilters.js","../../../dashboard-core-plugins/dist/useGridLinker.js","../../../dashboard-core-plugins/dist/TablePluginWrapper.js","../../../dashboard-core-plugins/dist/useTablePlugin.js","../../../dashboard-core-plugins/dist/GridWidgetPlugin.js","../../../dashboard-core-plugins/dist/GridPluginConfig.js","../../../dashboard-core-plugins/dist/linker/LinkerUtils.js","../../../dashboard-core-plugins/dist/linker/LinkerLink.js","../../../dashboard-core-plugins/dist/linker/LinkerOverlayContent.js","../../../dashboard-core-plugins/dist/linker/Linker.js","../../../dashboard-core-plugins/dist/LinkerPlugin.js","../../../dashboard-core-plugins/dist/LinkerPluginConfig.js","../../../dashboard-core-plugins/dist/MarkdownPlugin.js","../../../dashboard-core-plugins/dist/MarkdownPluginConfig.js","../../../dashboard-core-plugins/dist/PandasPanelPlugin.js","../../../dashboard-core-plugins/dist/PandasWidgetPlugin.js","../../../dashboard-core-plugins/dist/PandasPluginConfig.js","../../../dashboard-core-plugins/dist/WidgetLoaderPlugin.js","../../../dashboard-core-plugins/dist/WidgetLoaderPluginConfig.js","../../../dashboard-core-plugins/dist/controls/ControlType.js","../../../dashboard-core-plugins/dist/prop-types/UIPropTypes.js","../../../dashboard-core-plugins/dist/prop-types/CommonPropTypes.js"],"sourcesContent":["/**\n * Bind all methods on the instance + its prototype to the instance. If\n * `traversePrototypeChain` is true, the prototype chain will be traversed until\n * Object.prototype is reached, and any additional methods found will be included.\n * @param instance The instance to bind methods to\n * @param traversePrototypeChain Whether to traverse the prototype chain or not\n */\nexport function bindAllMethods(instance) {\n var traversePrototypeChain = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var methodNames = getAllMethodNames(instance, traversePrototypeChain);\n methodNames.forEach(methodName => {\n // eslint-disable-next-line no-param-reassign\n instance[methodName] = instance[methodName].bind(instance);\n });\n}\n\n/**\n * Get all class method names. This will return names of all methods defined on\n * the instance + its prototype. If `traversePrototypeChain` is true, the prototype\n * chain will be traversed until Object.prototype is reached, and any additional\n * methods found will be included.\n * @param instance Instance to get method names from\n * @param traversePrototypeChain Whether to traverse the prototype chain or not\n */\nexport function getAllMethodNames(instance, traversePrototypeChain) {\n var methodNames = new Set();\n var current = instance;\n\n // Get method names for instance + prototype. Optionally traverse prototype\n // chain until Object.prototype is reached.\n var level = 0;\n while (current != null && current !== Object.prototype && (level <= 1 || traversePrototypeChain)) {\n // eslint-disable-next-line no-restricted-syntax\n for (var name of Object.getOwnPropertyNames(current)) {\n var _Object$getOwnPropert;\n if (name !== 'constructor' &&\n // Ensure this is a method and not a getter\n typeof ((_Object$getOwnPropert = Object.getOwnPropertyDescriptor(current, name)) === null || _Object$getOwnPropert === void 0 ? void 0 : _Object$getOwnPropert.value) === 'function') {\n methodNames.add(name);\n }\n }\n current = Object.getPrototypeOf(current);\n level += 1;\n }\n return [...methodNames.keys()];\n}\n//# sourceMappingURL=ClassUtils.js.map","/**\n * Typeguard for identifying a value that is not null or undefined.\n * @param value Value to check\n */\nexport function isNotNullOrUndefined(value) {\n return value != null;\n}\nexport default isNotNullOrUndefined;\n//# sourceMappingURL=isNotNullOrUndefined.js.map","import React, { useCallback, useEffect, useRef } from 'react';\nimport classNames from 'classnames';\nimport \"./CardFlip.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Card flip component, switches between a front and back face being visible.\n * Has logic to handle overflow on body, caused by perspective transforms\n * and moves z-index to top during transition.\n * @param isFlipped true shows second child, false shows first child\n * @param children Expects exactly two children\n * @returns\n */\nfunction CardFlip(_ref) {\n var {\n className,\n isFlipped,\n children,\n 'data-testid': dataTestId\n } = _ref;\n var getComponent = key => {\n if (children.length !== 2) {\n throw new Error('CardFlip requires 2 children to function');\n }\n return children[key];\n };\n var front = useRef(null);\n var transitionStart = useCallback(event => {\n if (event.target === event.currentTarget) {\n document.body.classList.add('card-flip--is-flipping');\n }\n }, []);\n var transitionEnd = useCallback(event => {\n if (event.target === event.currentTarget) {\n document.body.classList.remove('card-flip--is-flipping');\n }\n }, []);\n useEffect(function setIsFlippingClassOnTransitionStart() {\n if (!front.current) throw Error('ref undefined');\n front.current.addEventListener('transitionstart', transitionStart);\n var refObj = front.current;\n return function cleanupListener() {\n if (refObj != null) {\n return refObj.removeEventListener('transitionstart', transitionStart);\n }\n };\n }, [transitionStart]);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: classNames(className, {\n 'card-flip--show-front': isFlipped,\n 'card-flip--show-back': !isFlipped\n }),\n \"data-testid\": dataTestId,\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"card-flip--back\",\n children: getComponent(0)\n }), /*#__PURE__*/_jsx(\"div\", {\n ref: front,\n className: \"card-flip--front\",\n onTransitionEnd: transitionEnd,\n children: getComponent(1)\n })]\n });\n}\nexport default CardFlip;\n//# sourceMappingURL=CardFlip.js.map","var _excluded = [\"classNames\", \"timeout\", \"children\", \"onEnter\"];\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\nimport { useCallback, useRef } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport classNames from 'classnames';\nimport ThemeExport from \"../ThemeExport.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar DISPLAY_CONTENTS = {\n display: 'contents'\n};\n/**\n * Fade between two components. Defaults to 150ms transition.\n */\nfunction FadeTransition(_ref) {\n var {\n classNames: classNamesProp,\n timeout = ThemeExport.transitionMs,\n children,\n onEnter\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n var nodeRef = useRef(null);\n var handleOnEnter = useCallback(isAppearing => {\n var elem = nodeRef.current;\n if (!elem) {\n return;\n }\n onEnter === null || onEnter === void 0 || onEnter(elem, isAppearing);\n }, [onEnter]);\n\n // Mimics findDOMNode for CSSTransition\n // The ref should be set before CSSTransition does anything with it\n var setRef = useCallback(node => {\n nodeRef.current = node === null || node === void 0 ? void 0 : node.firstElementChild;\n }, []);\n return /*#__PURE__*/_jsx(CSSTransition, _objectSpread(_objectSpread({\n nodeRef: nodeRef,\n timeout: timeout,\n classNames: classNames('fade', classNamesProp),\n onEnter: handleOnEnter\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, props), {}, {\n children: /*#__PURE__*/_jsx(\"div\", {\n ref: setRef,\n style: DISPLAY_CONTENTS,\n children: children\n })\n }));\n}\nexport default FadeTransition;\n//# sourceMappingURL=FadeTransition.js.map","import React from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { useSlotProps } from '@react-spectrum/utils';\nimport { dhExclamation, vsLink } from '@deephaven/icons';\nimport \"./SocketedButton.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar SocketedButton = /*#__PURE__*/React.forwardRef((props, ref) => {\n var {\n children,\n className,\n disabled = false,\n id,\n isLinked = false,\n isLinkedSource = false,\n isInvalid = false,\n onClick,\n onMouseEnter,\n onMouseLeave,\n style,\n 'data-testid': dataTestId\n } = props;\n\n // Spectrum container components such as `ButtonGroup` provide\n // UNSAFE_className prop for the `button` slot via a SlotProvider (\n // https://github.com/adobe/react-spectrum/blob/%40adobe/react-spectrum%403.33.1/packages/%40react-spectrum/buttongroup/src/ButtonGroup.tsx#L104-L107)\n // This can be retrieved via `useSlotProps` to allow our buttons to be styled\n // correctly inside the container.\n var {\n UNSAFE_className\n } = useSlotProps({}, 'button');\n return /*#__PURE__*/_jsxs(\"button\", {\n ref: ref,\n type: \"button\",\n className: classNames('btn-socketed', {\n 'btn-socketed-linked': isLinked !== undefined && isLinked || isLinkedSource\n }, {\n 'btn-socketed-linked-source': isLinkedSource\n }, {\n 'is-invalid': isInvalid\n }, className, UNSAFE_className),\n id: id,\n onClick: onClick,\n onMouseEnter: onMouseEnter,\n onMouseLeave: onMouseLeave,\n style: style,\n disabled: disabled,\n \"data-testid\": dataTestId,\n children: [children, /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsLink,\n className: \"linked btn-socketed-icon\",\n transform: \"down-1\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhExclamation,\n className: \"is-invalid btn-socketed-icon\"\n })]\n });\n});\nSocketedButton.displayName = 'SocketedButton';\nexport default SocketedButton;\n//# sourceMappingURL=SocketedButton.js.map","function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nimport { createContext, useContext, useEffect, useState } from 'react';\nimport { ApiContext } from \"./ApiBootstrap.js\";\n/**\n * Function to fetch an API based on a provided descriptor object.\n * Depending on the context there may be more properties on the descriptor,\n * providing more information about the object, such as a session ID.\n * @param descriptor Descriptor object or URI to fetch the API from.\n * @returns A promise that resolves to the API instance for the provided variable descriptor.\n */\nexport var DeferredApiContext = /*#__PURE__*/createContext(null);\nDeferredApiContext.displayName = 'DeferredApiContext';\n\n/**\n * Retrieve the API for the current context, given the widget provided.\n * The API may need to be loaded, and will return `null` until it is ready.\n * @param widget The widget descriptor or URI to use to fetch the API\n * @returns A tuple with the API instance, and an error if one occurred.\n */\nexport function useDeferredApi(widget) {\n var [api, setApi] = useState(null);\n var [error, setError] = useState(null);\n var deferredApi = useContext(DeferredApiContext);\n var contextApi = useContext(ApiContext);\n useEffect(() => {\n if (deferredApi == null) {\n if (contextApi != null) {\n setApi(contextApi);\n setError(null);\n return;\n }\n setApi(null);\n setError(new Error('No API available in useDeferredApi. Was code wrapped in ApiBootstrap or DeferredApiContext.Provider?'));\n return;\n }\n var isCancelled = false;\n function loadApi() {\n return _loadApi.apply(this, arguments);\n }\n function _loadApi() {\n _loadApi = _asyncToGenerator(function* () {\n if (widget == null) {\n if (!isCancelled) {\n setApi(null);\n setError(new Error('No widget provided to useDeferredApi'));\n }\n } else if (typeof deferredApi === 'function') {\n try {\n var newApi = yield deferredApi(widget);\n if (!isCancelled) {\n setApi(newApi);\n setError(null);\n }\n } catch (e) {\n if (!isCancelled) {\n setApi(null);\n setError(e !== null && e !== void 0 ? e : new Error('Null error'));\n }\n }\n } else {\n setApi(deferredApi);\n }\n });\n return _loadApi.apply(this, arguments);\n }\n loadApi();\n return () => {\n isCancelled = true;\n };\n }, [contextApi, deferredApi, widget]);\n return [api, error];\n}\nexport default useDeferredApi;\n//# sourceMappingURL=useDeferredApi.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/**\n * Setup a merge reducer for a specific action type.\n * Will take the payload passed in and merge it with the previous state to update.\n * @param type The action type\n * @param initialState The initial state\n */\nexport default function mergeReducer(type, initialState) {\n return function () {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n switch (action === null || action === void 0 ? void 0 : action.type) {\n case type:\n {\n var newState = action.payload;\n if (newState == null) {\n return null;\n }\n if (state != null) {\n return _objectSpread(_objectSpread({}, state), newState);\n }\n return _objectSpread({}, newState);\n }\n default:\n return state;\n }\n };\n}\n//# sourceMappingURL=mergeReducer.js.map","/**\n * Setup a replace reducer for a specific action type.\n * Will take the payload passed in and replace the previous state\n * @param type The action type\n * @param initialState The initial state\n */\nexport default function replaceReducer(type, initialState) {\n return function () {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n switch (action === null || action === void 0 ? void 0 : action.type) {\n case type:\n {\n return action.payload;\n }\n default:\n return state;\n }\n };\n}\n//# sourceMappingURL=replaceReducer.js.map","/**\n * JSAPI instance\n */\nimport { SET_API } from \"../actionTypes.js\";\nimport { replaceReducer } from \"./common/index.js\";\nexport default replaceReducer(SET_API, null);\n//# sourceMappingURL=api.js.map","/**\n * The active tool the user currently has selected\n */\nimport { SET_ACTIVE_TOOL } from \"../actionTypes.js\";\nimport { replaceReducer } from \"./common/index.js\";\nexport default replaceReducer(SET_ACTIVE_TOOL, null);\n//# sourceMappingURL=activeTool.js.map","/**\n * The plugins that have been loaded\n */\nimport { SET_PLUGINS } from \"../actionTypes.js\";\nimport { replaceReducer } from \"./common/index.js\";\nexport default replaceReducer(SET_PLUGINS, null);\n//# sourceMappingURL=plugins.js.map","/**\n * Store the current `CommandHistoryStorage` instance for this user.\n * Use this instance to read/write data from dashboard storage.\n */\nimport { SET_COMMAND_HISTORY_STORAGE } from \"../../actionTypes.js\";\nimport { replaceReducer } from \"../common/index.js\";\nexport default replaceReducer(SET_COMMAND_HISTORY_STORAGE, null);\n//# sourceMappingURL=commandHistoryStorage.js.map","/**\n * Store the current `FileStorage` instance for this user.\n * Use this instance to read/write data from storage.\n */\nimport { SET_FILE_STORAGE } from \"../../actionTypes.js\";\nimport { replaceReducer } from \"../common/index.js\";\nexport default replaceReducer(SET_FILE_STORAGE, null);\n//# sourceMappingURL=fileStorage.js.map","/**\n * Store the current `WorkspaceStorage` instance for this user.\n * Use this instance to read/write data from workspace storage.\n */\nimport { SET_WORKSPACE_STORAGE } from \"../../actionTypes.js\";\nimport { replaceReducer } from \"../common/index.js\";\nexport default replaceReducer(SET_WORKSPACE_STORAGE, null);\n//# sourceMappingURL=workspaceStorage.js.map","import { combineReducers } from 'redux';\nimport commandHistoryStorage from \"./commandHistoryStorage.js\";\nimport fileStorage from \"./fileStorage.js\";\nimport workspaceStorage from \"./workspaceStorage.js\";\nexport default combineReducers({\n commandHistoryStorage,\n fileStorage,\n workspaceStorage\n});\n//# sourceMappingURL=index.js.map","/**\n * Store information about the current user.\n */\nimport { SET_USER } from \"../actionTypes.js\";\nimport { mergeReducer } from \"./common/index.js\";\nexport default mergeReducer(SET_USER, null);\n//# sourceMappingURL=user.js.map","/**\n * Store the users current Workspace. Should be loaded from WorkspaceStorage.\n *\n * Includes the full row as stored in the `workspaceData` table.\n */\nimport { SET_WORKSPACE } from \"../actionTypes.js\";\nimport { mergeReducer } from \"./common/index.js\";\nexport default mergeReducer(SET_WORKSPACE, null);\n//# sourceMappingURL=workspace.js.map","/**\n * Default values for workspace settings. Used when the user has not modified a setting yet.\n */\nimport { SET_DEFAULT_WORKSPACE_SETTINGS } from \"../actionTypes.js\";\nimport { replaceReducer } from \"./common/index.js\";\nexport default replaceReducer(SET_DEFAULT_WORKSPACE_SETTINGS, null);\n//# sourceMappingURL=defaultWorkspaceSettings.js.map","/**\n * The Server Configs Values retrieved from the Server\n */\nimport { SET_SERVER_CONFIG_VALUES } from \"../actionTypes.js\";\nimport { replaceReducer } from \"./common/index.js\";\nexport default replaceReducer(SET_SERVER_CONFIG_VALUES, null);\n//# sourceMappingURL=serverConfigValues.js.map","import api from \"./api.js\";\nimport activeTool from \"./activeTool.js\";\nimport plugins from \"./plugins.js\";\nimport storage from \"./storage/index.js\";\nimport user from \"./user.js\";\nimport workspace from \"./workspace.js\";\nimport defaultWorkspaceSettings from \"./defaultWorkspaceSettings.js\";\nimport serverConfigValues from \"./serverConfigValues.js\";\nvar reducers = {\n activeTool,\n api,\n plugins,\n storage,\n user,\n workspace,\n defaultWorkspaceSettings,\n serverConfigValues\n};\nexport default reducers;\n//# sourceMappingURL=index.js.map","import Log from '@deephaven/log';\nvar log = Log.module('redux-logger');\nvar logger = store => next => action => {\n log.debug('dispatching', action);\n var result = next(action);\n log.debug('next state', store.getState());\n return result;\n};\nexport default logger;\n//# sourceMappingURL=logger.js.map","import Log from '@deephaven/log';\nvar log = Log.module('redux-crashReporter');\nvar crashReporter = store => next => action => {\n try {\n return next(action);\n } catch (err) {\n log.error('Error executing', action, ' with state ', store.getState(), ':', err);\n throw err;\n }\n};\nexport default crashReporter;\n//# sourceMappingURL=crashReporter.js.map","import thunk from 'redux-thunk';\nimport logger from \"./logger.js\";\nimport crashReporter from \"./crashReporter.js\";\nexport default [logger, crashReporter, thunk];\n//# sourceMappingURL=index.js.map","var _REDUX_DEVTOOLS_EXTE;\nimport { applyMiddleware, createStore, compose, combineReducers } from 'redux';\nimport rootMiddleware from \"./middleware/index.js\";\nimport reducers from \"./reducers/index.js\";\nimport reducerRegistry from \"./reducerRegistry.js\";\nObject.entries(reducers).map(_ref => {\n var [name, reducer] = _ref;\n return reducerRegistry.register(name, reducer);\n});\nvar composeEnhancers = // eslint-disable-next-line @typescript-eslint/no-explicit-any\n(_REDUX_DEVTOOLS_EXTE = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__) !== null && _REDUX_DEVTOOLS_EXTE !== void 0 ? _REDUX_DEVTOOLS_EXTE : compose;\nvar store = createStore(combineReducers(reducerRegistry.reducers), composeEnhancers(applyMiddleware(...rootMiddleware)));\nreducerRegistry.setListener(newReducers => {\n store.replaceReducer(combineReducers(newReducers));\n});\nexport default store;\n//# sourceMappingURL=store.js.map","/* eslint class-methods-use-this: \"off\" */\n/* eslint no-unused-vars: \"off\" */\nimport TableColumnFormatter from \"./TableColumnFormatter.js\";\n/** Column formatter for booleans */\nclass BooleanColumnFormatter extends TableColumnFormatter {\n format(value) {\n switch (value) {\n case 1:\n case true:\n return 'true';\n case 0:\n case false:\n return 'false';\n default:\n return '';\n }\n }\n}\nexport default BooleanColumnFormatter;\n//# sourceMappingURL=BooleanColumnFormatter.js.map","/* eslint class-methods-use-this: \"off\" */\n/* eslint no-unused-vars: \"off\" */\nimport TableColumnFormatter from \"./TableColumnFormatter.js\";\n/** Column formatter for chars */\nclass CharColumnFormatter extends TableColumnFormatter {\n format(value) {\n return String.fromCharCode(value);\n }\n}\nexport default CharColumnFormatter;\n//# sourceMappingURL=CharColumnFormatter.js.map","/* eslint class-methods-use-this: \"off\" */\n/* eslint no-unused-vars: \"off\" */\nimport TableColumnFormatter from \"./TableColumnFormatter.js\";\nclass DefaultColumnFormatter extends TableColumnFormatter {\n format(value) {\n return \"\".concat(value);\n }\n}\nexport default DefaultColumnFormatter;\n//# sourceMappingURL=DefaultColumnFormatter.js.map","/* eslint class-methods-use-this: \"off\" */\nimport TableColumnFormatter from \"./TableColumnFormatter.js\";\n/** Column formatter for strings */\nexport class StringColumnFormatter extends TableColumnFormatter {\n format(value) {\n return value;\n }\n}\nexport default StringColumnFormatter;\n//# sourceMappingURL=StringColumnFormatter.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nvar DATE_TIME_REGEX = /\\s*(\\d{4})([-./](\\d{1,2}|[a-z]+))?([-./](\\d{1,2}))?([tT\\s](\\d{2})([:](\\d{2}))?([:](\\d{2}))?([.](\\d{1,9}))?)?(.*)/;\nexport class DateUtils {\n /**\n *\n * @param timeZone The time zone to parse this time in. E.g. America/New_York\n * @param year The year for the date\n * @param month The month, starting at 0\n * @param day The day, starting at 1\n * @param hour The hours\n * @param minute The minutes\n * @param second The seconds\n * @param ns The nanoseconds\n */\n static makeDateWrapper(dh, timeZone, year) {\n var month = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var day = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;\n var hour = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n var minute = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;\n var second = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 0;\n var ns = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : 0;\n if (!timeZone) {\n throw new Error('No timezone provided');\n }\n var yearString = \"\".concat(year).padStart(4, '0');\n var monthString = \"\".concat(month + 1).padStart(2, '0');\n var dayString = \"\".concat(day).padStart(2, '0');\n var hourString = \"\".concat(hour).padStart(2, '0');\n var minuteString = \"\".concat(minute).padStart(2, '0');\n var secondString = \"\".concat(second).padStart(2, '0');\n var nanoString = \"\".concat(ns).padStart(9, '0');\n var dateString = \"\".concat(yearString, \"-\").concat(monthString, \"-\").concat(dayString, \" \").concat(hourString, \":\").concat(minuteString, \":\").concat(secondString, \".\").concat(nanoString);\n return dh.i18n.DateTimeFormat.parse(DateUtils.FULL_DATE_FORMAT, dateString, dh.i18n.TimeZone.getTimeZone(timeZone));\n }\n\n /**\n * Takes the string the user entered and returns the next nanos value\n * @param nanoString The nano string to get the next one of\n * @returns The value of the next nanos\n */\n static getNextNanos(nanoString) {\n var sigNanos = parseInt(nanoString, 10);\n // Get the zeroes needed for padding before adding one so we handle overflow properly.\n var zeros = '0'.repeat(9 - nanoString.length);\n var nextNanoString = \"\".concat(sigNanos + 1).concat(zeros);\n return parseInt(nextNanoString, 10);\n }\n\n /**\n * @param components The string components that were parsed from the original string\n * @param values The values that were parsed from the components\n * @param timeZone The time zone to parse the date in. E.g. America/New_York\n * @returns Returns the DateWrapper for the next date, or null if a full date was passed in\n */\n static getNextDate(dh, components, values, timeZone) {\n var {\n year,\n month,\n date,\n hours,\n minutes,\n seconds,\n nanos\n } = values;\n if (components.nanos != null) {\n if (components.nanos.length === 9) {\n // They want an exact match\n return null;\n }\n nanos = DateUtils.getNextNanos(components.nanos);\n if (nanos > 999999999) {\n // There's an overflow, add it to the seconds manually\n seconds += 1;\n nanos = 0;\n }\n } else if (components.seconds != null) {\n seconds += 1;\n } else if (components.minutes != null) {\n minutes += 1;\n } else if (components.hours != null) {\n hours += 1;\n } else if (components.date != null) {\n date += 1;\n } else if (components.month != null) {\n month += 1;\n } else {\n year += 1;\n }\n\n // Use the JS date to handle overflow rather than doing our own logic\n // Because handling leap years and stuff is a pain\n // Still need to add nanos after, and the overflow from that is already added to seconds above\n var jsDate = new Date(year, month, date, hours, minutes, seconds);\n return DateUtils.makeDateWrapper(dh, timeZone, jsDate.getFullYear(), jsDate.getMonth(), jsDate.getDate(), jsDate.getHours(), jsDate.getMinutes(), jsDate.getSeconds(), nanos);\n }\n\n /**\n * Get the JS month value for the provided string.\n * Matches digits or a month name (eg. '1', '01', 'jan', 'january' should all work)\n * @param monthString The string to parse to a JS month value\n * @returns number The JS month value, which starts at 0 for january, or NaN if nothing could be parsed\n */\n static parseMonth(monthString) {\n var month = parseInt(monthString, 10);\n if (!Number.isNaN(month)) {\n if (month >= 1 && month <= 12) {\n return month - 1;\n }\n return NaN;\n }\n var cleanMonthString = monthString.trim().toLowerCase();\n if (cleanMonthString.length >= 3) {\n for (var i = 0; i < DateUtils.months.length; i += 1) {\n if (DateUtils.months[i].startsWith(cleanMonthString)) {\n return i;\n }\n }\n }\n return NaN;\n }\n\n /**\n * Parse a date object out of the provided string segments.\n * Also using `parseMonth` to get month names like Aug/August rather than\n * simply doing `parseInt`.\n * @param yearString The year part of the string\n * @param monthString The month part of the string\n * @param dayString The day part of the string\n * @param hourString The hour part of the string\n * @param minuteString The minute part of the string\n * @param secondString The second part of the string\n * @param nanoString The milli part of the string\n */\n static parseDateValues(yearString, monthString, dayString, hourString, minuteString, secondString, nanoString) {\n var year = parseInt(yearString, 10);\n var month = monthString != null ? this.parseMonth(monthString) : 0;\n var date = dayString != null ? parseInt(dayString, 10) : 1;\n var hours = hourString != null ? parseInt(hourString, 10) : 0;\n var minutes = minuteString != null ? parseInt(minuteString, 10) : 0;\n var seconds = secondString != null ? parseInt(secondString, 10) : 0;\n var nanos = nanoString != null ? parseInt(nanoString.padEnd(9, '0'), 10) : 0;\n if (Number.isNaN(year) || Number.isNaN(month) || Number.isNaN(date) || Number.isNaN(hours) || Number.isNaN(minutes) || Number.isNaN(seconds) || Number.isNaN(nanos)) {\n return null;\n }\n return {\n year,\n month,\n date,\n hours,\n minutes,\n seconds,\n nanos\n };\n }\n\n /**\n * Parse out a date time string into it's string components.\n * Anything that is not captured in the string will be undefined.\n *\n * @param dateTimeString The date time string to parse\n * @param allowOverflow If true, will allow overflow characters after the date\n * string\n * @returns Containing the date time components\n */\n static parseDateTimeString(dateTimeString) {\n var allowOverflow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var result = DATE_TIME_REGEX.exec(dateTimeString);\n if (result == null) {\n throw new Error(\"Unexpected date string: \".concat(dateTimeString));\n }\n var [, year,, month,, date,, hours,, minutes,, seconds,, nanos, overflow] = result;\n if (!allowOverflow && overflow != null && overflow.length > 0) {\n throw new Error(\"Unexpected characters after date string '\".concat(dateTimeString, \"': \").concat(overflow));\n }\n var dateParts = {\n year,\n month,\n date,\n hours,\n minutes,\n seconds,\n nanos\n };\n return allowOverflow ? _objectSpread(_objectSpread({}, dateParts), {}, {\n overflow\n }) : dateParts;\n }\n\n /**\n * Parses the date range provided from a string of text.\n * @param text The string to parse the date from. Can be a keyword like \"today\", or in the format \"2018-08-04\"\n * @param timeZone The time zone to parse this range in. E.g. America/New_York\n * @returns A tuple with the start and end value/null for that date range, or both null\n */\n static parseDateRange(dh, text, timeZone) {\n var cleanText = text.trim().toLowerCase();\n if (cleanText.length === 0) {\n throw new Error('Cannot parse date range from empty string');\n }\n if (cleanText === 'null') {\n return [null, null];\n }\n if (cleanText === 'today') {\n var now = new Date(Date.now());\n var _startDate = DateUtils.makeDateWrapper(dh, timeZone, now.getFullYear(), now.getMonth(), now.getDate());\n var tomorrow = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1);\n var _endDate = DateUtils.makeDateWrapper(dh, timeZone, tomorrow.getFullYear(), tomorrow.getMonth(), tomorrow.getDate());\n return [_startDate, _endDate];\n }\n if (cleanText === 'yesterday') {\n var _now = new Date(Date.now());\n var yesterday = new Date(_now.getFullYear(), _now.getMonth(), _now.getDate() - 1);\n var _startDate2 = DateUtils.makeDateWrapper(dh, timeZone, yesterday.getFullYear(), yesterday.getMonth(), yesterday.getDate());\n var _endDate2 = DateUtils.makeDateWrapper(dh, timeZone, _now.getFullYear(), _now.getMonth(), _now.getDate());\n return [_startDate2, _endDate2];\n }\n if (cleanText === 'now') {\n var _now2 = new Date(Date.now());\n var date = dh.DateWrapper.ofJsDate(_now2);\n return [date, null];\n }\n var components = DateUtils.parseDateTimeString(cleanText);\n if (components.year == null && components.month == null && components.date == null) {\n throw new Error(\"Unable to extract year, month, or day \".concat(cleanText));\n }\n var values = DateUtils.parseDateValues(components.year, components.month, components.date, components.hours, components.minutes, components.seconds, components.nanos);\n if (values == null) {\n throw new Error(\"Unable to extract date values from \".concat(components));\n }\n var startDate = DateUtils.makeDateWrapper(dh, timeZone, values.year, values.month, values.date, values.hours, values.minutes, values.seconds, values.nanos);\n var endDate = DateUtils.getNextDate(dh, components, values, timeZone);\n return [startDate, endDate];\n }\n\n /**\n * Gets the Js Date object from the provided DateWrapper.\n * In unit test, DateWrapper is just a number provided in millis, so handles that case.\n * @param dateWrapper The DateWrapper object, or time in millis\n */\n static getJsDate(dateWrapper) {\n if (typeof dateWrapper === 'number') {\n return new Date(dateWrapper);\n }\n return dateWrapper.asDate();\n }\n\n /**\n * Trim overflow (usually timezone) from a date time string.\n * @param dateTimeString The date time string to trim\n * @returns The date time string without overflow\n */\n static trimDateTimeStringTimeZone(dateTimeString) {\n var {\n overflow = ''\n } = DateUtils.parseDateTimeString(dateTimeString, true);\n if (overflow === '') {\n return dateTimeString;\n }\n\n // Expecting timezone overflow to be a single space followed by some\n // combination of letters\n if (!/^\\s[A-Za-z]+/.test(overflow)) {\n throw new Error(\"Unexpected timezone format in overflow: '\".concat(dateTimeString, \"'\"));\n }\n return dateTimeString.slice(0, -overflow.length);\n }\n}\n_defineProperty(DateUtils, \"FULL_DATE_FORMAT\", 'yyyy-MM-dd HH:mm:ss.SSSSSSSSS');\n_defineProperty(DateUtils, \"months\", ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december']);\nexport default DateUtils;\n//# sourceMappingURL=DateUtils.js.map","/**\n * Create args for a filter derived from a combobox selection.\n * @param value\n */\nexport function createComboboxFilterArgs(value, allValue) {\n return value === allValue ? {\n operator: 'notEq',\n value: ''\n } // this is synonymous with \"no filter\"\n : {\n operator: 'eq',\n value\n };\n}\n\n/**\n * Create a filter condition factory for a `contains` filter that matches the\n * given search text.\n * @param tableUtils TableUtils instance to create filter from\n * @param columnNames Names of the columns to filter\n * @param searchText Text to search (will be trimmed of leading / trailing whitespace)\n * @param timeZone Timezone to use for date parsing\n */\nexport function createSearchTextFilter(tableUtils, columnNames, searchText, timeZone) {\n /**\n * Creates a filter condition that matches based on search text.\n * @param maybeTable Table to filter\n */\n return function searchTextFilter(maybeTable) {\n var searchTextTrimmed = searchText.trim();\n if (searchTextTrimmed === '') {\n return null;\n }\n var factory = createFilterConditionFactory(columnNames, col => tableUtils.makeSearchTextFilter(col, searchTextTrimmed, timeZone), 'or');\n return factory(maybeTable);\n };\n}\n\n/**\n * Create a filter condition factory function.\n * @param columnNames Column names that filter conditions will target\n * @param createColumnCondition Function that can create a `FilterCondition` from\n * a given column. This will be run across all columns corresponding to the given\n * list of column names.\n * @param conditionOperator Operator that will be used to combine multiple\n * `FilterConditions` if multiple column names are given.\n */\nexport function createFilterConditionFactory(columnNames, createColumnCondition) {\n var conditionOperator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'or';\n return function filterConditionFactory(maybeTable) {\n var maybeColumns = maybeTable === null || maybeTable === void 0 ? void 0 : maybeTable.findColumns(typeof columnNames === 'string' ? [columnNames] : columnNames);\n if (maybeColumns == null || maybeColumns.length === 0) {\n return null;\n }\n var filterConditions = maybeColumns.map(createColumnCondition);\n return filterConditions.reduce((current, next) => current[conditionOperator](next));\n };\n}\n\n/**\n * Create a filter condition factory for a filter operator that matches the\n * given value.\n * @param tableUtils TableUtils instance to create filter from\n * @param columnNames Column names to compare value to\n * @param value Value to match\n * @param operator Operator to use for matching\n */\nexport function createValueFilter(tableUtils, columnNames, value, operator) {\n /**\n * Creates a filter condition that matches based on matching a given value.\n * @param maybeTable Table to filter\n */\n return createFilterConditionFactory(columnNames, col => col.filter()[operator](tableUtils.makeFilterValue(col.type, value)), 'or');\n}\n\n/**\n * Create a filter condition factory for a filter that matches a given Selection.\n * If column is not found or selection parameter is 'all', the factory will return\n * null to indicate the results will be unfiltered.\n * @param tableUtils TableUtils instance to create filter from\n * @param columnName The column name to filter\n * @param selection 'all' or an array of values to filter by\n * @param emptySelectionEqAll If true, empty selection means select\n * all. If false, it means select none.\n * @param invertSelection Invert the selection (eg. All items are selected,\n * then you deselect items)\n */\nexport function createSelectedValuesFilter(tableUtils, columnName, selection, emptySelectionEqAll, invertSelection) {\n /**\n * Creates a filter condition that matches rows for selected values. Returns\n * null to indicate no filtering.\n * @param maybeTable the table to filter\n */\n return function selectedValuesFilter(maybeTable) {\n var maybeColumn = maybeTable === null || maybeTable === void 0 ? void 0 : maybeTable.findColumn(columnName);\n var isAllSelected = selection === 'all' || emptySelectionEqAll && selection.size === 0;\n if (maybeColumn == null || isAllSelected) {\n return null;\n }\n return tableUtils.makeSelectValueFilter(maybeColumn, [...selection.keys()], invertSelection);\n };\n}\n\n/**\n * Creates a `notNullOrEmptyFilterCondition` function.\n * @param tableUtils TableUtils instance to use for making filters.\n */\nexport function createNotNullOrEmptyFilterCondition(tableUtils) {\n /**\n * Returns a filter condition that matches values in a given column that are\n * not null or empty string.\n */\n return function notNullOrEmptyFilterCondition(column) {\n return column.filter().isNull().not().and(column.filter().notEq(tableUtils.makeFilterValue(column.type, '')));\n };\n}\n\n/**\n * Creates a `showOnlyEmptyFilterCondition` function that can be toggled on or\n * off.\n * @param tableUtils TableUtils instance to use for making filters.\n * @param isOn Flag to indicate if the filter should be on or off.\n */\nexport function createShowOnlyEmptyFilterCondition(tableUtils, isOn) {\n /**\n * Returns a filter condition that matches values in a given column. If the\n * `isOn` param is true, this will filter to only null or empty string values.\n * If `isOn` is false, it will return a filter that matches all values.\n */\n return function showOnlyEmptyFilterCondition(column) {\n var filter = column.filter();\n var emptyStringValue = tableUtils.makeFilterValue(column.type, '');\n var eqEmptyStringCondition = filter.eq(emptyStringValue);\n if (isOn) {\n return filter.isNull().or(eqEmptyStringCondition);\n }\n\n // If filter is off, return a condition that will always be true\n return eqEmptyStringCondition.or(filter.notEq(emptyStringValue));\n };\n}\n//# sourceMappingURL=FilterUtils.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nexport class Operator {}\n_defineProperty(Operator, \"not\", 'not');\n_defineProperty(Operator, \"and\", 'and');\n_defineProperty(Operator, \"or\", 'or');\nexport function assertOperatorValue(operator) {\n if (!(operator === 'not' || operator === 'and' || operator === 'or')) {\n throw new Error('operator is not a valid FilterOperatorValue');\n }\n}\n//# sourceMappingURL=Operator.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/** Different filter conditions user can select */\nexport class Type {}\n_defineProperty(Type, \"eq\", 'eq');\n_defineProperty(Type, \"eqIgnoreCase\", 'eqIgnoreCase');\n_defineProperty(Type, \"notEq\", 'notEq');\n_defineProperty(Type, \"notEqIgnoreCase\", 'notEqIgnoreCase');\n_defineProperty(Type, \"greaterThan\", 'greaterThan');\n_defineProperty(Type, \"greaterThanOrEqualTo\", 'greaterThanOrEqualTo');\n_defineProperty(Type, \"lessThan\", 'lessThan');\n_defineProperty(Type, \"lessThanOrEqualTo\", 'lessThanOrEqualTo');\n_defineProperty(Type, \"in\", 'in');\n_defineProperty(Type, \"inIgnoreCase\", 'inIgnoreCase');\n_defineProperty(Type, \"notIn\", 'notIn');\n_defineProperty(Type, \"notInIgnoreCase\", 'notInIgnoreCase');\n_defineProperty(Type, \"isTrue\", 'isTrue');\n_defineProperty(Type, \"isFalse\", 'isFalse');\n_defineProperty(Type, \"isNull\", 'isNull');\n_defineProperty(Type, \"invoke\", 'invoke');\n_defineProperty(Type, \"contains\", 'contains');\n_defineProperty(Type, \"notContains\", 'notContains');\n_defineProperty(Type, \"containsIgnoreCase\", 'containsIgnoreCase');\n_defineProperty(Type, \"startsWith\", 'startsWith');\n_defineProperty(Type, \"endsWith\", 'endsWith');\n_defineProperty(Type, \"containsAny\", 'containsAny');\n//# sourceMappingURL=Type.js.map","import { Type } from \"./Type.js\";\nexport function getLabelForTextFilter(filterType) {\n switch (filterType) {\n case Type.eq:\n return 'is exactly';\n case Type.eqIgnoreCase:\n return 'is exactly (ignore case)';\n case Type.notEq:\n return 'is not exactly';\n case Type.notEqIgnoreCase:\n return 'is not exactly (ignore case)';\n case Type.contains:\n return 'contains';\n case Type.notContains:\n return 'does not contain';\n case Type.startsWith:\n return 'starts with';\n case Type.endsWith:\n return 'ends with';\n default:\n throw new Error(\"Unrecognized text filter type \".concat(filterType));\n }\n}\nexport function getLabelForNumberFilter(filterType) {\n switch (filterType) {\n case Type.eq:\n return 'is equal to';\n case Type.notEq:\n return 'is not equal to';\n case Type.greaterThan:\n return 'greater than';\n case Type.greaterThanOrEqualTo:\n return 'greater than or equal to';\n case Type.lessThan:\n return 'less than';\n case Type.lessThanOrEqualTo:\n return 'less than or equal to';\n default:\n throw new Error(\"Unrecognized number filter type \".concat(filterType));\n }\n}\nexport function getLabelForDateFilter(filterType) {\n switch (filterType) {\n case Type.eq:\n return 'date is';\n case Type.notEq:\n return 'date is not';\n case Type.notEqIgnoreCase:\n case Type.greaterThan:\n return 'date is after';\n case Type.greaterThanOrEqualTo:\n return 'date is after or equal';\n case Type.lessThan:\n return 'date is before';\n case Type.lessThanOrEqualTo:\n return 'date is before or equal';\n default:\n throw new Error(\"Unrecognized date filter type \".concat(filterType));\n }\n}\nexport function getLabelForBooleanFilter(filterType) {\n switch (filterType) {\n case Type.isTrue:\n return 'Is True';\n case Type.isFalse:\n return 'Is False';\n case Type.isNull:\n return 'Is Null';\n default:\n throw new Error(\"Unrecognized boolean filter type \".concat(filterType));\n }\n}\n//# sourceMappingURL=Utils.js.map","import clamp from 'lodash.clamp';\nimport Log from '@deephaven/log';\nexport var ITEM_KEY_PREFIX = 'DH_ITEM_KEY';\nvar log = Log.module('ViewportDataUtils');\n\n/**\n * Create a `KeyedItem.key` for a given index. The prefix is necessary to avoid\n * collisions with property values in the `item` property that may be used as\n * keys once the item is loaded and rendered.\n * @param index Index to create a key for.\n * @returns A unique key for the given index.\n */\nexport function createKeyedItemKey(index) {\n return \"\".concat(ITEM_KEY_PREFIX, \"_\").concat(index);\n}\n\n/**\n * Creates a handler function for a `dh.Table.EVENT_UPDATED` event. Rows that\n * get passed to the handler will be bulk updated in the given `viewportData`\n * object based on their derived item keys.\n * @param viewportData State object for managing a list of KeyedItem data.\n * @param deserializeRow Converts a DH Row to an item object.\n * @returns Handler function for a `dh.Table.EVENT_UPDATED` event.\n */\nexport function createOnTableUpdatedHandler(_ref, deserializeRow) {\n var {\n bulkUpdate\n } = _ref;\n /**\n * Handler for a `dh.Table.EVENT_UPDATED` event.\n */\n return function onTableUpdated(event) {\n var {\n columns,\n offset,\n rows\n } = event.detail;\n log.debug('table updated', event.detail);\n var updateKeyMap = new Map();\n rows.forEach((row, offsetInSnapshot) => {\n var item = deserializeRow(row, columns);\n var key = createKeyedItemKey(offset + offsetInSnapshot);\n updateKeyMap.set(key, {\n key,\n item\n });\n });\n log.debug('update keys', updateKeyMap);\n bulkUpdate(updateKeyMap);\n };\n}\n\n/**\n * Maps a Row to a key / value object. Keys are mapped ver batim from column\n * names.\n * @param row Row to map to an item.\n * @param columns Columns to map.\n * @returns A key / value object for the row.\n */\nexport function defaultRowDeserializer(row, columns) {\n return columns.reduce((result, col) => {\n // eslint-disable-next-line no-param-reassign\n result[col.name] = row.get(col);\n return result;\n }, {});\n}\n\n/**\n * For windowing to work, the underlying list needs to maintain a KeyedItem for\n * each row in the backing table (even if these rows haven't been loaded yet).\n * This is needed internally by react-spectrum so it can calculate the content\n * area size. This generator can create a range of empty `KeyedItem` objects.\n * @param start The starting index to generate\n * @param end The ending index to generate\n */\nexport function* generateEmptyKeyedItems(start, end) {\n // eslint-disable-next-line no-plusplus\n for (var i = start; i <= end; ++i) {\n yield {\n key: createKeyedItemKey(i)\n };\n }\n}\n\n/**\n * Check a Table to see if it is closed before checking its size property. This\n * is important because calling Table.size on a closed table throws an error. If\n * the table is null or closed, return zero. Otherwise, return the current size.\n * @param table The table to check for its size.\n * @returns The size of the table or zero if the table is null or closed.\n */\nexport function getSize(table) {\n return table == null || isClosed(table) ? 0 : table.size;\n}\n\n/**\n * Check if a given widget is closed based on `isClosed` prop.\n * Tree tables and other widgets don't have an `isClosed` prop,\n * so will always return false.\n * @param table The widget to check if it is closed.\n */\nexport function isClosed(widget) {\n if (widget != null && typeof widget === 'object' && 'isClosed' in widget && typeof widget.isClosed === 'boolean') {\n return widget.isClosed;\n }\n return false;\n}\n\n/**\n * Determine the first and last row index for a viewport + extra leading and\n * trailing padding. Values will be \"clamped\" to stay within the table size.\n * @param firstRow Starting row index for the viewport.\n * @param viewportSize Size of the viewport.\n * @param padding Extra rows to add to the viewport. Will be used for leading\n * and trailing rows.\n * @param tableSize Total table size.\n * @returns Tuple containing indices for the first and last row.\n */\nexport function padFirstAndLastRow(firstRow, viewportSize, padding, tableSize) {\n var lastRow = firstRow + viewportSize - 1;\n var [min, max] = [0, tableSize - 1];\n var first = clamp(firstRow - padding, min, max);\n var last = clamp(lastRow + padding, min, max);\n return [first, last];\n}\n//# sourceMappingURL=ViewportDataUtils.js.map","var _TableUtils;\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { Type as FilterType, Operator as FilterOperator } from '@deephaven/filters';\nimport Log from '@deephaven/log';\nimport { assertNotNull, bindAllMethods, PromiseUtils, removeNullAndUndefined, TextUtils, TimeoutError } from '@deephaven/utils';\nimport DateUtils from \"./DateUtils.js\";\nimport { createValueFilter } from \"./FilterUtils.js\";\nimport { getSize } from \"./ViewportDataUtils.js\";\nvar log = Log.module('TableUtils');\n\n// Sort descriptor loosely matching the shape of dh.Sort\n\nexport function isSortDirection(value) {\n return value === TableUtils.sortDirection.ascending || value === TableUtils.sortDirection.descending || value === TableUtils.sortDirection.reverse || value === TableUtils.sortDirection.none;\n}\n\n/** Utility class to provide some functions for working with tables */\nexport class TableUtils {\n /**\n * Copy a given table and apply filters.\n * @param maybeTable Table to copy and apply filters to\n * @param filterFactories Filter condition factories to apply\n * @returns A derived, filtered table\n */\n static copyTableAndApplyFilters(maybeTable) {\n var _arguments = arguments;\n return _asyncToGenerator(function* () {\n if (maybeTable == null) {\n return null;\n }\n var derivedTable = yield maybeTable.copy();\n for (var _len = _arguments.length, filterFactories = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n filterFactories[_key - 1] = _arguments[_key];\n }\n derivedTable.applyFilter(removeNullAndUndefined(...filterFactories.map(f => f(derivedTable))));\n return derivedTable;\n })();\n }\n\n /**\n * Executes a callback on a given table and returns a Promise that will resolve\n * the next time a particular event type fires on the table.\n * @param exec Callback function to execute.\n * @param table Table that gets passed to the `exec` function and that is\n * subscribed to for a given `eventType`.\n * @param eventType The event type to listen for.\n * @param timeout If the event doesn't fire within the timeout, the returned\n * Promise will be rejected.\n * @returns a Promise to the original table that resolves on next `eventType`\n * event\n */\n\n static getSortIndex(sort, columnName) {\n for (var i = 0; i < sort.length; i += 1) {\n var _s$column;\n var s = sort[i];\n if (((_s$column = s.column) === null || _s$column === void 0 ? void 0 : _s$column.name) === columnName) {\n return i;\n }\n }\n return null;\n }\n\n /**\n * @param tableSort The sorts from the table to get the sort from\n * @param columnName The name of the column to get the sort for\n * @returns The sort for the column, or null if it's not sorted\n */\n static getSortForColumn(tableSort, columnName) {\n var sortIndex = TableUtils.getSortIndex(tableSort, columnName);\n if (sortIndex != null) {\n return tableSort[sortIndex];\n }\n return null;\n }\n static getFilterText(filter) {\n if (filter) {\n return filter.toString();\n }\n return null;\n }\n\n /** Return the valid filter types for the column */\n static getFilterTypes(columnType) {\n if (TableUtils.isBooleanType(columnType)) {\n return [FilterType.isTrue, FilterType.isFalse, FilterType.isNull];\n }\n if (TableUtils.isCharType(columnType) || TableUtils.isNumberType(columnType) || TableUtils.isDateType(columnType)) {\n return [FilterType.eq, FilterType.notEq, FilterType.greaterThan, FilterType.greaterThanOrEqualTo, FilterType.lessThan, FilterType.lessThanOrEqualTo];\n }\n if (TableUtils.isTextType(columnType)) {\n return [FilterType.eq, FilterType.eqIgnoreCase, FilterType.notEq, FilterType.notEqIgnoreCase, FilterType.contains, FilterType.notContains, FilterType.startsWith, FilterType.endsWith];\n }\n return [];\n }\n static getNextSort(columns, sorts, columnIndex) {\n var column = columns[columnIndex];\n if (column == null) {\n return null;\n }\n var sort = TableUtils.getSortForColumn(sorts, column.name);\n if (sort === null) {\n return this.makeColumnSort(columns, columnIndex, TableUtils.sortDirection.ascending, false);\n }\n if (sort.direction === TableUtils.sortDirection.ascending) {\n return this.makeColumnSort(columns, columnIndex, TableUtils.sortDirection.descending, false);\n }\n return null;\n }\n static makeColumnSort(columns, columnIndex, direction, isAbs) {\n var column = columns[columnIndex];\n if (column == null) {\n return null;\n }\n if (direction === TableUtils.sortDirection.none) {\n return null;\n }\n return {\n column: {\n name: column.name,\n type: column.type\n },\n isAbs,\n direction\n };\n }\n\n /**\n * Toggles the sort for the specified column\n * @param sorts The current sorts from IrisGrid.state\n * @param columns The columns to apply the sort to\n * @param columnIndex The column index to apply the sort to\n * @param addToExisting Add this sort to the existing sort\n */\n static toggleSortForColumn(sorts, columns, columnIndex) {\n var addToExisting = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n if (columns[columnIndex] == null) {\n return [];\n }\n var newSort = TableUtils.getNextSort(columns, sorts, columnIndex);\n return TableUtils.setSortForColumn(sorts, columns[columnIndex].name, newSort, addToExisting);\n }\n static sortColumn(sorts, columns, modelColumn, direction, isAbs, addToExisting) {\n if (modelColumn < 0 || modelColumn >= columns.length) {\n return [];\n }\n var newSort = TableUtils.makeColumnSort(columns, modelColumn, direction, isAbs);\n return TableUtils.setSortForColumn(sorts, columns[modelColumn].name, newSort, addToExisting);\n }\n\n /**\n * Sets the sort for the given column *and* removes any reverses\n * @param tableSort The current sorts from IrisGrid.state\n * @param columnName The column name to apply the sort to\n * @param sort The sort object to add\n * @param addToExisting Add this sort to the existing sort\n * @returns Returns the modified array of sorts - removing reverses\n */\n static setSortForColumn(tableSort, columnName, sort) {\n var addToExisting = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var sortIndex = TableUtils.getSortIndex(tableSort, columnName);\n var sorts = [];\n if (addToExisting) {\n sorts = sorts.concat(tableSort.filter(_ref => {\n var {\n direction\n } = _ref;\n return direction !== TableUtils.sortDirection.reverse;\n }));\n if (sortIndex !== null) {\n sorts.splice(sortIndex, 1);\n }\n }\n if (sort !== null) {\n sorts.push(sort);\n }\n return sorts;\n }\n static getNormalizedType(columnType) {\n switch (columnType) {\n case 'boolean':\n case 'java.lang.Boolean':\n case TableUtils.dataType.BOOLEAN:\n return TableUtils.dataType.BOOLEAN;\n case 'char':\n case 'java.lang.Character':\n case TableUtils.dataType.CHAR:\n return TableUtils.dataType.CHAR;\n case 'java.lang.String':\n case TableUtils.dataType.STRING:\n return TableUtils.dataType.STRING;\n case 'io.deephaven.db.tables.utils.DBDateTime':\n case 'io.deephaven.time.DateTime':\n case 'com.illumon.iris.db.tables.utils.DBDateTime':\n case 'java.time.Instant':\n case 'java.time.ZonedDateTime':\n case TableUtils.dataType.DATETIME:\n return TableUtils.dataType.DATETIME;\n case 'double':\n case 'java.lang.Double':\n case 'float':\n case 'java.lang.Float':\n case 'java.math.BigDecimal':\n case TableUtils.dataType.DECIMAL:\n return TableUtils.dataType.DECIMAL;\n case 'int':\n case 'java.lang.Integer':\n case 'long':\n case 'java.lang.Long':\n case 'short':\n case 'java.lang.Short':\n case 'byte':\n case 'java.lang.Byte':\n case 'java.math.BigInteger':\n case TableUtils.dataType.INT:\n return TableUtils.dataType.INT;\n default:\n return TableUtils.dataType.UNKNOWN;\n }\n }\n static isLongType(columnType) {\n switch (columnType) {\n case 'long':\n case 'java.lang.Long':\n return true;\n default:\n return false;\n }\n }\n static isDateType(columnType) {\n switch (columnType) {\n case 'io.deephaven.db.tables.utils.DBDateTime':\n case 'io.deephaven.time.DateTime':\n case 'java.time.Instant':\n case 'java.time.ZonedDateTime':\n case 'com.illumon.iris.db.tables.utils.DBDateTime':\n return true;\n default:\n return false;\n }\n }\n static isNumberType(columnType) {\n return TableUtils.isIntegerType(columnType) || TableUtils.isDecimalType(columnType);\n }\n static isIntegerType(columnType) {\n switch (columnType) {\n case 'int':\n case 'java.lang.Integer':\n case 'java.math.BigInteger':\n case 'long':\n case 'java.lang.Long':\n case 'short':\n case 'java.lang.Short':\n case 'byte':\n case 'java.lang.Byte':\n return true;\n default:\n return false;\n }\n }\n static isDecimalType(columnType) {\n switch (columnType) {\n case 'double':\n case 'java.lang.Double':\n case 'java.math.BigDecimal':\n case 'float':\n case 'java.lang.Float':\n return true;\n default:\n return false;\n }\n }\n static isBigDecimalType(columnType) {\n switch (columnType) {\n case 'java.math.BigDecimal':\n return true;\n default:\n return false;\n }\n }\n static isBigIntegerType(columnType) {\n switch (columnType) {\n case 'java.math.BigInteger':\n return true;\n default:\n return false;\n }\n }\n static isBooleanType(columnType) {\n switch (columnType) {\n case 'boolean':\n case 'java.lang.Boolean':\n return true;\n default:\n return false;\n }\n }\n static isCharType(columnType) {\n switch (columnType) {\n case 'char':\n case 'java.lang.Character':\n return true;\n default:\n return false;\n }\n }\n static isStringType(columnType) {\n switch (columnType) {\n case 'java.lang.String':\n return true;\n default:\n return false;\n }\n }\n static isTextType(columnType) {\n return this.isStringType(columnType) || this.isCharType(columnType);\n }\n\n /**\n * Get base column type\n * @param columnType Column type\n * @returns Element type for array columns, original type for non-array columns\n */\n static getBaseType(columnType) {\n return columnType.split('[]')[0];\n }\n\n /**\n * Check if the column types are compatible\n * @param type1 Column type to check\n * @param type2 Column type to check\n * @returns True, if types are compatible\n */\n static isCompatibleType(type1, type2) {\n return TableUtils.getNormalizedType(type1) === TableUtils.getNormalizedType(type2);\n }\n\n /**\n * Adds quotes to a value if they're not already added\n * @param value Value to add quotes around\n */\n static quoteValue(value) {\n if (value.length >= 2 && (value.charAt(0) === '\"' && value.charAt(value.length - 1) === '\"' || value.charAt(0) === \"'\" && value.charAt(value.length - 1) === \"'\")) {\n return value;\n }\n return \"\\\"\".concat(value, \"\\\"\");\n }\n static isRangeOperation(operation) {\n switch (operation) {\n case '<':\n case '<=':\n case '=<':\n case '>':\n case '>=':\n case '=>':\n return true;\n default:\n return false;\n }\n }\n\n /**\n * @param filter The column filter to apply the range operation to\n * @param operation The range operation to run\n * @param value The value to use for the operation\n * @returns The condition with the specified operation\n */\n static makeRangeFilterWithOperation(filter, operation, value) {\n switch (operation) {\n case '=':\n return filter.eq(value);\n case '<':\n return filter.lessThan(value);\n case '<=':\n case '=<':\n return filter.lessThanOrEqualTo(value);\n case '>':\n return filter.greaterThan(value);\n case '>=':\n case '=>':\n return filter.greaterThanOrEqualTo(value);\n case '!=':\n case '!':\n return filter.notEq(value);\n default:\n return null;\n }\n }\n\n /**\n * Wraps a table promise in a cancelable promise that will close the table if the promise is cancelled.\n * Use in a component that loads a table, and call cancel when unmounting.\n * @param table The table promise to wrap\n */\n static makeCancelableTablePromise(table) {\n return PromiseUtils.makeCancelable(table, resolved => {\n resolved.close();\n });\n }\n\n /**\n * Make a cancelable promise for a one-shot table event with a timeout.\n * @param table Table to listen for events on\n * @param eventName Event to listen for\n * @param timeout Event timeout in milliseconds, defaults to 0\n * @param matcher Optional function to determine if the promise can be resolved or stays pending\n * @deprecated Use `makeCancelableEventPromise` instead.\n * @returns Resolves with the event data\n */\n static makeCancelableTableEventPromise(table, eventName) {\n var timeout = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var matcher = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n return TableUtils.makeCancelableEventPromise(table, eventName, {\n timeout,\n matcher: matcher !== null && matcher !== void 0 ? matcher : undefined\n });\n }\n\n /**\n * Make a cancelable promise for a one-shot event with a timeout.\n * @param emitter The object emitting the event\n * @param eventName Event to listen for\n * @param options Optional options for listening\n * @param options.timeout Event timeout in milliseconds, defaults to 0\n * @param options.matcher Optional function to determine if the promise can be resolved or stays pending\n * @returns Resolves with the event data\n */\n static makeCancelableEventPromise(emitter, eventName) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var {\n timeout = 0,\n matcher\n } = options;\n var eventCleanup;\n var timeoutId;\n var isPending = true;\n var wrappedPromise = new Promise((resolve, reject) => {\n timeoutId = setTimeout(() => {\n eventCleanup();\n isPending = false;\n reject(new TimeoutError(\"Event \\\"\".concat(eventName, \"\\\" timed out.\")));\n }, timeout);\n eventCleanup = emitter.addEventListener(eventName, event => {\n if (matcher != null && !matcher(event)) {\n log.debug2('Event triggered, but matcher returned false.');\n return;\n }\n log.debug2('Event triggered, resolving.');\n eventCleanup();\n clearTimeout(timeoutId);\n isPending = false;\n resolve(event);\n });\n });\n wrappedPromise.cancel = () => {\n if (isPending) {\n log.debug2('Pending promise cleanup.');\n eventCleanup();\n clearTimeout(timeoutId);\n isPending = false;\n return;\n }\n log.debug2('Ignoring non-pending promise cancel.');\n };\n return wrappedPromise;\n }\n static removeCommas(value) {\n return value.replace(/[\\s|,]/g, '');\n }\n static makeBooleanValue(text) {\n var allowEmpty = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (text === '' && allowEmpty) {\n return null;\n }\n switch (text === null || text === void 0 ? void 0 : text.toLowerCase()) {\n case 'null':\n return null;\n case '0':\n case 'f':\n case 'fa':\n case 'fal':\n case 'fals':\n case 'false':\n case 'n':\n case 'no':\n return false;\n case '1':\n case 't':\n case 'tr':\n case 'tru':\n case 'true':\n case 'y':\n case 'ye':\n case 'yes':\n return true;\n default:\n throw new Error(\"Invalid boolean '\".concat(text, \"'\"));\n }\n }\n static makeNumberValue(text) {\n if (text === 'null' || text === '') {\n return null;\n }\n var cleanText = text.toLowerCase().trim();\n if (cleanText === '∞' || cleanText === 'infinity' || cleanText === 'inf') {\n return Number.POSITIVE_INFINITY;\n }\n if (cleanText === '-∞' || cleanText === '-infinity' || cleanText === '-inf') {\n return Number.NEGATIVE_INFINITY;\n }\n var numberText = TableUtils.removeCommas(cleanText);\n if (TableUtils.NUMBER_REGEX.test(numberText)) {\n return parseFloat(numberText);\n }\n throw new Error(\"Invalid number '\".concat(text, \"'\"));\n }\n static getFilterOperatorString(operation) {\n switch (operation) {\n case FilterType.eq:\n return '=';\n case FilterType.notEq:\n return '!=';\n case FilterType.greaterThan:\n return '>';\n case FilterType.greaterThanOrEqualTo:\n return '>=';\n case FilterType.lessThan:\n return '<';\n case FilterType.lessThanOrEqualTo:\n return '<=';\n case FilterType.contains:\n return '~';\n case FilterType.notContains:\n return '!~';\n default:\n throw new Error(\"Unexpected filter type \".concat(operation));\n }\n }\n static isPartitionedTable(table) {\n return table != null && table.getMergedTable !== undefined && table.getKeyTable !== undefined && table.getKeys !== undefined;\n }\n static isTreeTable(table) {\n return table != null && table.expand !== undefined && table.collapse !== undefined;\n }\n\n /**\n * Copies the provided array, sorts by column name case insensitive, and returns the sorted array.\n * @param columns The columns to sort\n * @param isAscending Whether to sort ascending\n */\n static sortColumns(columns) {\n var isAscending = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n return [...columns].sort((a, b) => {\n var aName = a.name.toUpperCase();\n var bName = b.name.toUpperCase();\n return TextUtils.sort(aName, bName, isAscending);\n });\n }\n constructor(dh) {\n _defineProperty(this, \"dh\", void 0);\n this.dh = dh;\n bindAllMethods(this);\n }\n\n /**\n * Create a table containing a distinct list of values for given column name and\n * applies the given sort direction.\n * @param table Source table to derive table from\n * @param columnName Column to dermine distinct values\n * @param sortDirection Direction to sort\n * @param filterConditionFactories Optional filters to apply. Note that these\n * will be applied before the `selectCall` in case we need to base the filtering\n * on columns other than the distinct value column\n */\n createDistinctSortedColumnTable(table, columnName, sortDirection) {\n var _arguments2 = arguments,\n _this = this;\n return _asyncToGenerator(function* () {\n if (table == null) {\n return null;\n }\n var sourceTable = table;\n\n // Applying filters before `selectDistinct` so that we still have access to\n // all columns. Also prevents a filter applied to the final table from\n // clearing this filter.\n for (var _len2 = _arguments2.length, filterConditionFactories = new Array(_len2 > 3 ? _len2 - 3 : 0), _key2 = 3; _key2 < _len2; _key2++) {\n filterConditionFactories[_key2 - 3] = _arguments2[_key2];\n }\n if (filterConditionFactories.length > 0) {\n sourceTable = yield table.copy();\n yield sourceTable.applyFilter(removeNullAndUndefined(...filterConditionFactories.map(f => f(sourceTable))));\n }\n var column = sourceTable.findColumn(columnName);\n var distinctTable = yield sourceTable.selectDistinct([column]);\n\n // If we copied the table, dispose the copy. Original is managed outside\n // of this function\n if (sourceTable !== table) {\n sourceTable.close();\n }\n var distinctAscColSort = distinctTable.findColumn(columnName).sort()[sortDirection]();\n return _this.applySort(distinctTable, [distinctAscColSort]);\n })();\n }\n\n /**\n * Check if any columns contain a given value.\n * @param table Table to search for values\n * @param columnNames Column names to search\n * @param value Value to search for\n * @param isCaseSensitive Whether the value check is case sensitive\n */\n doesColumnValueExist(table, columnNames, value, isCaseSensitive) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n if (table == null) {\n return null;\n }\n var filterConditionFactory = createValueFilter(_this2, columnNames, value, isCaseSensitive ? 'eq' : 'eqIgnoreCase');\n var tableCopy = yield table.copy();\n yield _this2.applyFilter(tableCopy, removeNullAndUndefined(filterConditionFactory(tableCopy)));\n var size = getSize(tableCopy);\n tableCopy.close();\n return size > 0;\n })();\n }\n\n /**\n * Get the `dh.ValueType` corresponding to the given `dh.Column.type` value.\n * @param columnType The column type to get the value type for\n * @returns The `dh.ValueType` corresponding to the column type\n */\n getValueType(columnType) {\n if (columnType == null) {\n return this.dh.ValueType.STRING;\n }\n var columnDataType = TableUtils.getNormalizedType(columnType);\n switch (columnDataType) {\n case TableUtils.dataType.BOOLEAN:\n return this.dh.ValueType.BOOLEAN;\n case TableUtils.dataType.CHAR:\n case TableUtils.dataType.STRING:\n return this.dh.ValueType.STRING;\n case TableUtils.dataType.DATETIME:\n return this.dh.ValueType.DATETIME;\n case TableUtils.dataType.DECIMAL:\n case TableUtils.dataType.INT:\n if (TableUtils.isBigDecimalType(columnType) || TableUtils.isBigIntegerType(columnType)) {\n return this.dh.ValueType.STRING;\n }\n return this.dh.ValueType.NUMBER;\n default:\n return this.dh.ValueType.STRING;\n }\n }\n\n /**\n * Create filter with the provided column and text. Handles multiple filters joined with && or ||\n * @param column The column to set the filter on\n * @param text The text string to create the filter from\n * @param timeZone The time zone to make this value in if it is a date type. E.g. America/New_York\n * @returns Returns the created filter, null if text could not be parsed\n */\n makeQuickFilter(column, text, timeZone) {\n var orComponents = text.split('||');\n var orFilter = null;\n for (var i = 0; i < orComponents.length; i += 1) {\n var orComponent = orComponents[i];\n var andComponents = orComponent.split('&&');\n var andFilter = null;\n for (var j = 0; j < andComponents.length; j += 1) {\n var andComponent = andComponents[j].trim();\n if (andComponent.length > 0) {\n var filter = this.makeQuickFilterFromComponent(column, andComponent, timeZone);\n if (filter) {\n if (andFilter) {\n andFilter = andFilter.and(filter);\n } else {\n andFilter = filter;\n }\n } else {\n throw new Error(\"Unable to parse quick filter from text \".concat(text));\n }\n }\n }\n if (orFilter && andFilter) {\n orFilter = orFilter.or(andFilter);\n } else {\n orFilter = andFilter;\n }\n }\n return orFilter;\n }\n\n /**\n * Create filter with the provided column and text of one component (no multiple conditions)\n * @param column The column to set the filter on\n * @param text The text string to create the filter from\n * @param timeZone The time zone to make this filter in if it is a date type. E.g. America/New_York\n * @returns Returns the created filter, null if text could not be parsed\n */\n makeQuickFilterFromComponent(column, text, timeZone) {\n var {\n type\n } = column;\n if (TableUtils.isNumberType(type)) {\n return this.makeQuickNumberFilter(column, text);\n }\n if (TableUtils.isBooleanType(type)) {\n return this.makeQuickBooleanFilter(column, text);\n }\n if (timeZone != null && TableUtils.isDateType(type)) {\n return this.makeQuickDateFilter(column, text, timeZone);\n }\n if (TableUtils.isCharType(type)) {\n return this.makeQuickCharFilter(column, text);\n }\n return this.makeQuickTextFilter(column, text);\n }\n makeQuickNumberFilter(column, text) {\n var columnFilter = column.filter();\n var {\n dh\n } = this;\n var filter = null;\n var regex = /\\s*(>=|<=|=>|=<|>|<|!=|=|!)?(\\s*-\\s*)?(\\s*\\d*(?:,\\d{3})*(?:\\.\\d*)?\\s*)?(null|nan|infinity|inf|\\u221E)?(.*)/i;\n var result = regex.exec(text);\n var operation = null;\n var negativeSign = null;\n var value = null;\n var abnormalValue = null; // includes nan, null and infinity(positive & negative)\n var overflow = null;\n if (result !== null && result.length > 3) {\n [, operation, negativeSign, value, abnormalValue, overflow] = result;\n }\n if (overflow != null && overflow.trim().length > 0) {\n // Some bad characters after the number, bail out!\n return null;\n }\n if (operation == null) {\n operation = '=';\n }\n if (abnormalValue != null) {\n if (!(operation === '=' || operation === '!' || operation === '!=')) {\n // only equal and not equal operations are supported for abnormal value filter\n return null;\n }\n abnormalValue = abnormalValue.trim().toLowerCase();\n switch (abnormalValue) {\n case 'null':\n filter = columnFilter.isNull();\n break;\n case 'nan':\n filter = dh.FilterCondition.invoke('isNaN', columnFilter);\n break;\n case 'infinity':\n case 'inf':\n case '\\u221E':\n if (negativeSign != null) {\n filter = dh.FilterCondition.invoke('isInf', columnFilter).and(columnFilter.lessThan(dh.FilterValue.ofNumber(0)));\n } else {\n filter = dh.FilterCondition.invoke('isInf', columnFilter).and(columnFilter.greaterThan(dh.FilterValue.ofNumber(0)));\n }\n break;\n default:\n break;\n }\n if (filter !== null && (operation === '!' || operation === '!=')) {\n filter = filter.not();\n }\n return filter;\n }\n if (value == null) {\n return null;\n }\n value = TableUtils.removeCommas(value);\n if (TableUtils.isLongType(column.type)) {\n try {\n value = dh.FilterValue.ofNumber(dh.LongWrapper.ofString(\"\".concat(negativeSign != null ? '-' : '').concat(value)));\n } catch (error) {\n log.warn('Unable to create long filter', error);\n return null;\n }\n } else {\n value = parseFloat(value);\n if (value == null || Number.isNaN(value)) {\n return null;\n }\n value = dh.FilterValue.ofNumber(negativeSign != null ? 0 - value : value);\n }\n filter = column.filter();\n return TableUtils.makeRangeFilterWithOperation(filter, operation, value);\n }\n\n /**\n * Given a text string from a table, escape quick filter operators in string with \\\n * ex. =test returns \\=test, null returns \\null\n * @param string quickfilter string to escape\n * @returns escaped string\n */\n static escapeQuickTextFilter(quickFilterText) {\n if (quickFilterText == null) return null;\n var regex = /^(!~|!=|~|=|!)?(.*)/;\n // starts with zero or more \\ followed by and ending with null\n var nullRegex = /^\\\\*null$/;\n var result = regex.exec(quickFilterText);\n var operation = null;\n var value = null;\n if (result !== null && result.length > 2) {\n [, operation, value] = result;\n }\n if (operation != null) {\n return \"\\\\\".concat(operation).concat(value !== null && value !== void 0 ? value : '');\n }\n if (value != null && nullRegex.test(value.toLowerCase())) {\n // adds an extra escape character to matching value\n return \"\\\\\".concat(value);\n }\n if (value != null && value.startsWith('*')) {\n return \"\\\\\".concat(value);\n }\n if (value != null && value.endsWith('*') && !value.endsWith('\\\\*')) {\n value = value.substring(0, value.length - 1);\n return \"\".concat(value, \"\\\\*\");\n }\n return \"\".concat(operation !== null && operation !== void 0 ? operation : '').concat(value !== null && value !== void 0 ? value : \"\");\n }\n\n /**\n * Given an escaped quick filter, unescape the operators for giving it to the js api\n * ex. \\=test returns =test, \\null returns null\n * @param string quickfilter string to escape\n * @returns escaped string\n */\n static unescapeQuickTextFilter(quickFilterText) {\n var regex = /^(\\\\!~|\\\\!=|\\\\~|\\\\=|\\\\!)?(.*)/;\n // starts with zero or more \\ followed by and ending with null\n var nullRegex = /^\\\\*null$/;\n var result = regex.exec(quickFilterText);\n var operation = null;\n var value = null;\n if (result !== null && result.length > 2) {\n [, operation, value] = result;\n }\n if (operation != null) {\n operation = operation.replace('\\\\', '');\n }\n if (value != null && nullRegex.test(value.toLowerCase())) {\n // removes the first occurance of the backslash\n value = value.replace('\\\\', '');\n }\n if (operation == null && value != null && value.startsWith('\\\\*')) {\n value = value.substring(1);\n }\n if (operation == null && value != null && value.endsWith('\\\\*')) {\n value = value.substring(0, value.length - 2);\n return \"\".concat(value, \"*\");\n }\n return \"\".concat(operation !== null && operation !== void 0 ? operation : '').concat(value !== null && value !== void 0 ? value : \"\");\n }\n makeQuickTextFilter(column, text) {\n var {\n dh\n } = this;\n var cleanText = \"\".concat(text).trim();\n var regex = /^(!~|!=|~|=|!)?(.*)/;\n var result = regex.exec(cleanText);\n var operation = null;\n var value = null;\n if (result !== null && result.length > 2) {\n [, operation, value] = result;\n if (value != null) {\n value = value.trim();\n }\n }\n if (value == null) {\n return null;\n }\n\n // allow empty strings, but only for explicit equal and not equal\n if (value.length === 0 && !(operation === '=' || operation === '!=')) {\n return null;\n }\n\n // no operation is treated as an implicit equals\n if (operation == null) {\n operation = '=';\n }\n var filter = column.filter();\n if (value.toLowerCase() === 'null') {\n // Null is a special case!\n switch (operation) {\n case '=':\n return filter.isNull();\n case '!=':\n case '!':\n return filter.isNull().not();\n default:\n // For all other operations, treat null as a string value\n }\n }\n var prefix = null;\n var suffix = null;\n if (value.startsWith('*')) {\n prefix = '*';\n value = value.substring(1);\n } else if (value.endsWith('*') && !value.endsWith('\\\\*')) {\n suffix = '*';\n value = value.substring(0, value.length - 1);\n }\n\n // unescape any escaped operators to allow search for literal operators\n value = TableUtils.unescapeQuickTextFilter(value);\n switch (operation) {\n case '~':\n {\n return filter.isNull().not().and(filter.invoke('matches', dh.FilterValue.ofString(\"(?s)(?i).*\\\\Q\".concat(value, \"\\\\E.*\"))));\n }\n case '!~':\n return filter.isNull().or(filter.invoke('matches', dh.FilterValue.ofString(\"(?s)(?i).*\\\\Q\".concat(value, \"\\\\E.*\"))).not());\n case '!=':\n if (prefix === '*') {\n // Does not end with\n return filter.isNull().or(filter.invoke('matches', dh.FilterValue.ofString(\"(?s)(?i).*\\\\Q\".concat(value, \"\\\\E$\"))).not());\n }\n if (suffix === '*') {\n // Does not start with\n return filter.isNull().or(filter.invoke('matches', dh.FilterValue.ofString(\"(?s)(?i)^\\\\Q\".concat(value, \"\\\\E.*\"))).not());\n }\n return filter.notEqIgnoreCase(dh.FilterValue.ofString(value.toLowerCase()));\n case '=':\n if (prefix === '*') {\n // Ends with\n return filter.isNull().not().and(filter.invoke('matches', dh.FilterValue.ofString(\"(?s)(?i).*\\\\Q\".concat(value, \"\\\\E$\"))));\n }\n if (suffix === '*') {\n // Starts with\n return filter.isNull().not().and(filter.invoke('matches', dh.FilterValue.ofString(\"(?s)(?i)^\\\\Q\".concat(value, \"\\\\E.*\"))));\n }\n return filter.eqIgnoreCase(dh.FilterValue.ofString(value.toLowerCase()));\n default:\n break;\n }\n return null;\n }\n\n // eslint-disable-next-line class-methods-use-this\n makeQuickBooleanFilter(column, text) {\n var regex = /^(!=|=|!)?(.*)/;\n var result = regex.exec(\"\".concat(text).trim());\n if (result === null) {\n return null;\n }\n var [, operation, value] = result;\n var notEqual = operation === '!' || operation === '!=';\n var cleanValue = value.trim().toLowerCase();\n var filter = column.filter();\n try {\n var boolValue = TableUtils.makeBooleanValue(cleanValue);\n if (boolValue != null && boolValue) {\n filter = filter.isTrue();\n } else if (boolValue === null) {\n filter = filter.isNull();\n } else {\n filter = filter.isFalse();\n }\n return notEqual ? filter.not() : filter;\n } catch (e) {\n return null;\n }\n }\n\n /**\n * Builds a date filter parsed from the text string which may or may not include an operator.\n * @param column The column to build the filter from, with or without a leading operator.\n * @param text The date string text to parse.\n * @param timeZone The time zone to make this filter in if it is a date type. E.g. America/New_York\n */\n makeQuickDateFilter(column, text, timeZone) {\n var cleanText = text.trim();\n var regex = /\\s*(>=|<=|=>|=<|>|<|!=|!|=)?(.*)/;\n var result = regex.exec(cleanText);\n if (result == null || result.length <= 2) {\n throw new Error(\"Unable to parse date filter: \".concat(text));\n }\n var operation = null;\n var dateText = null;\n [, operation, dateText] = result;\n var filterOperation = FilterType.eq;\n switch (operation) {\n case '<':\n filterOperation = FilterType.lessThan;\n break;\n case '<=':\n case '=<':\n filterOperation = FilterType.lessThanOrEqualTo;\n break;\n case '>':\n filterOperation = FilterType.greaterThan;\n break;\n case '>=':\n case '=>':\n filterOperation = FilterType.greaterThanOrEqualTo;\n break;\n case '!=':\n case '!':\n filterOperation = FilterType.notEq;\n break;\n case '=':\n case '==':\n default:\n filterOperation = FilterType.eq;\n break;\n }\n return this.makeQuickDateFilterWithOperation(column, dateText, filterOperation, timeZone);\n }\n\n /**\n * Builds a date filter parsed from the text string with the provided filter.\n * @param column The column to build the filter from.\n * @param text The date string text to parse, without an operator.\n * @param operation The filter operation to use.\n * @param timeZone The time zone to make this filter with. E.g. America/New_York\n */\n makeQuickDateFilterWithOperation(column, text, operation, timeZone) {\n var {\n dh\n } = this;\n var [startDate, endDate] = DateUtils.parseDateRange(dh, text, timeZone);\n var startValue = startDate != null ? dh.FilterValue.ofNumber(startDate) : null;\n var endValue = endDate != null ? dh.FilterValue.ofNumber(endDate) : null;\n var filter = column.filter();\n if (startValue == null) {\n return operation === FilterType.notEq ? filter.isNull().not() : filter.isNull();\n }\n switch (operation) {\n case FilterType.eq:\n {\n if (endValue != null) {\n var startFilter = filter.greaterThanOrEqualTo(startValue);\n var endFilter = filter.lessThan(endValue);\n return startFilter.and(endFilter);\n }\n return filter.eq(startValue);\n }\n case FilterType.lessThan:\n {\n return filter.lessThan(startValue);\n }\n case FilterType.lessThanOrEqualTo:\n {\n if (endValue != null) {\n return filter.lessThan(endValue);\n }\n return filter.lessThanOrEqualTo(startValue);\n }\n case FilterType.greaterThan:\n {\n if (endValue != null) {\n return filter.greaterThanOrEqualTo(endValue);\n }\n return filter.greaterThan(startValue);\n }\n case FilterType.greaterThanOrEqualTo:\n return filter.greaterThanOrEqualTo(startValue);\n case FilterType.notEq:\n {\n if (endValue != null) {\n var _startFilter = filter.lessThan(startValue);\n var _endFilter = filter.greaterThanOrEqualTo(endValue);\n return _startFilter.or(_endFilter);\n }\n return filter.notEq(startValue);\n }\n default:\n throw new Error(\"Invalid operator: \".concat(operation));\n }\n }\n makeQuickCharFilter(column, text) {\n var {\n dh\n } = this;\n var cleanText = \"\".concat(text).trim();\n var regex = /^(>=|<=|=>|=<|>|<|!=|=|!)?(null|\".\"|'.'|.)?(.*)/;\n var result = regex.exec(cleanText);\n var operation = null;\n var value = null;\n var overflow = null;\n if (result !== null && result.length > 3) {\n [, operation, value, overflow] = result;\n }\n if (overflow != null && overflow.trim().length > 0) {\n // Some bad characters after the number, bail out!\n return null;\n }\n if (value == null || value.length === 0) {\n return null;\n }\n if (operation == null) {\n operation = '=';\n }\n var filter = column.filter();\n if (value.toLowerCase() === 'null') {\n // Null is a special case!\n switch (operation) {\n case '=':\n return filter.isNull();\n case '!=':\n case '!':\n return filter.isNull().not();\n default:\n return null;\n }\n }\n\n // We need to put quotes around range operations or else the API fails\n var filterValue = dh.FilterValue.ofString(TableUtils.isRangeOperation(operation) ? TableUtils.quoteValue(value) : value);\n return TableUtils.makeRangeFilterWithOperation(filter, operation, filterValue);\n }\n makeAdvancedFilter(column, options, timeZone) {\n var {\n filterItems,\n filterOperators,\n invertSelection,\n selectedValues\n } = options;\n var filter = null;\n for (var i = 0; i < filterItems.length; i += 1) {\n var filterItem = filterItems[i];\n var {\n selectedType,\n value\n } = filterItem;\n if (selectedType != null && selectedType.length > 0 && value != null && value.length > 0) {\n try {\n var newFilter = this.makeAdvancedValueFilter(column, selectedType, value, timeZone);\n if (newFilter != null) {\n if (i === 0) {\n filter = newFilter;\n } else if (filter !== null && i - 1 < filterOperators.length) {\n var filterOperator = filterOperators[i - 1];\n if (filterOperator === FilterOperator.and) {\n filter = filter.and(newFilter);\n } else if (filterOperator === FilterOperator.or) {\n filter = filter.or(newFilter);\n } else {\n log.error('Unexpected filter operator', filterOperator, newFilter);\n filter = null;\n break;\n }\n }\n } else {\n log.debug2('Empty filter ignored for', selectedType, value);\n }\n } catch (err) {\n log.error('Unable to create filter', err);\n filter = null;\n break;\n }\n }\n }\n var selectValueFilter = this.makeSelectValueFilter(column, selectedValues, invertSelection);\n if (selectValueFilter != null) {\n if (filter != null) {\n filter = filter.and(selectValueFilter);\n } else {\n filter = selectValueFilter;\n }\n }\n return filter;\n }\n makeAdvancedValueFilter(column, operation, value, timeZone) {\n var {\n dh\n } = this;\n if (TableUtils.isDateType(column.type)) {\n return this.makeQuickDateFilterWithOperation(column, value, operation, timeZone);\n }\n if (TableUtils.isNumberType(column.type) || TableUtils.isCharType(column.type)) {\n return this.makeQuickFilter(column, \"\".concat(TableUtils.getFilterOperatorString(operation)).concat(value));\n }\n var filterValue = this.makeFilterValue(column.type, value);\n var filter = column.filter();\n switch (operation) {\n case FilterType.eq:\n return filter.eq(filterValue);\n case FilterType.eqIgnoreCase:\n return filter.eqIgnoreCase(filterValue);\n case FilterType.notEq:\n return filter.notEq(filterValue);\n case FilterType.notEqIgnoreCase:\n return filter.notEqIgnoreCase(filterValue);\n case FilterType.greaterThan:\n return filter.greaterThan(filterValue);\n case FilterType.greaterThanOrEqualTo:\n return filter.greaterThanOrEqualTo(filterValue);\n case FilterType.lessThan:\n return filter.lessThan(filterValue);\n case FilterType.lessThanOrEqualTo:\n return filter.lessThanOrEqualTo(filterValue);\n case FilterType.isTrue:\n return filter.isTrue();\n case FilterType.isFalse:\n return filter.isFalse();\n case FilterType.isNull:\n return filter.isNull();\n case FilterType.contains:\n return filter.isNull().not().and(filter.invoke('matches', dh.FilterValue.ofString(\"(?s)(?i).*\\\\Q\".concat(value, \"\\\\E.*\"))));\n case FilterType.notContains:\n return filter.isNull().or(filter.invoke('matches', dh.FilterValue.ofString(\"(?s)(?i).*\\\\Q\".concat(value, \"\\\\E.*\"))).not());\n case FilterType.startsWith:\n return filter.isNull().not().and(filter.invoke('matches', dh.FilterValue.ofString(\"(?s)(?i)^\\\\Q\".concat(value, \"\\\\E.*\"))));\n case FilterType.endsWith:\n return filter.isNull().not().and(filter.invoke('matches', dh.FilterValue.ofString(\"(?s)(?i).*\\\\Q\".concat(value, \"\\\\E$\"))));\n case FilterType.in:\n case FilterType.inIgnoreCase:\n case FilterType.notIn:\n case FilterType.notInIgnoreCase:\n case FilterType.invoke:\n default:\n throw new Error(\"Unexpected filter operation: \".concat(operation));\n }\n }\n\n /**\n * Create a filter condition that can search a column by a given `searchText`\n * value.\n * @param column The column to search\n * @param searchText The text to search for\n * @param timeZone The time zone to make this filter in if it is a date type. E.g. America/New_York\n * @returns The filter condition that can be applied to the column\n */\n makeSearchTextFilter(column, searchText, timeZone) {\n var valueType = this.getValueType(column.type);\n try {\n if (valueType === this.dh.ValueType.BOOLEAN) {\n var maybeFilterCondition = this.makeQuickBooleanFilter(column, searchText);\n assertNotNull(maybeFilterCondition);\n return maybeFilterCondition;\n }\n if (valueType === this.dh.ValueType.DATETIME) {\n return this.makeQuickDateFilterWithOperation(column, DateUtils.trimDateTimeStringTimeZone(searchText), 'eq', timeZone);\n }\n if (valueType === this.dh.ValueType.NUMBER) {\n var _maybeFilterCondition = this.makeQuickNumberFilter(column, searchText);\n assertNotNull(_maybeFilterCondition);\n return _maybeFilterCondition;\n }\n\n // Treat big numbers as strings\n if (TableUtils.isBigDecimalType(column.type) || TableUtils.isBigIntegerType(column.type)) {\n return column.filter().eq(this.makeFilterValue(column.type, searchText));\n }\n return column.filter().containsIgnoreCase(this.makeFilterValue(column.type, searchText));\n } catch (_unused) {\n return this.makeNeverFilter(column);\n }\n }\n\n /**\n * Apply a filter to a table that won't match anything.\n * @table The table to apply the filter to\n * @columnName The name of the column to apploy the filter to\n * @param timeout Timeout before cancelling the promise that waits for the next\n * dh.Table.EVENT_FILTERCHANGED event\n * @returns a Promise to the Table that resolves after the next\n * dh.Table.EVENT_FILTERCHANGED event\n */\n applyNeverFilter(table, columnName) {\n var _arguments3 = arguments,\n _this3 = this;\n return _asyncToGenerator(function* () {\n var timeout = _arguments3.length > 2 && _arguments3[2] !== undefined ? _arguments3[2] : TableUtils.APPLY_TABLE_CHANGE_TIMEOUT_MS;\n if (table == null) {\n return null;\n }\n var column = table.findColumn(columnName);\n var filters = [_this3.makeNeverFilter(column)];\n yield _this3.applyFilter(table, filters, timeout);\n return table;\n })();\n }\n\n /**\n * Apply custom columns to a given table. Return a Promise that resolves with\n * the table once the dh.Table.EVENT_CUSTOMCOLUMNSCHANGED event has fired.\n * @param table The table to apply custom columns to.\n * @param columns The list of column expressions or definitions to apply.\n * @returns A Promise that will be resolved with the given table after the\n * columns are applied.\n */\n applyCustomColumns(table, columns) {\n var _arguments4 = arguments,\n _this4 = this;\n return _asyncToGenerator(function* () {\n var timeout = _arguments4.length > 2 && _arguments4[2] !== undefined ? _arguments4[2] : TableUtils.APPLY_TABLE_CHANGE_TIMEOUT_MS;\n var {\n dh\n } = _this4;\n return TableUtils.executeAndWaitForEvent(t => t === null || t === void 0 ? void 0 : t.applyCustomColumns(columns), table, dh.Table.EVENT_CUSTOMCOLUMNSCHANGED, timeout);\n })();\n }\n\n /**\n * Apply filters to a given table.\n * @param table Table to apply filters to\n * @param filters Filters to apply\n * @param timeout Timeout before cancelling the promise that waits for the next\n * dh.Table.EVENT_FILTERCHANGED event\n * @returns a Promise to the Table that resolves after the next\n * dh.Table.EVENT_FILTERCHANGED event\n */\n applyFilter(table, filters) {\n var _arguments5 = arguments,\n _this5 = this;\n return _asyncToGenerator(function* () {\n var timeout = _arguments5.length > 2 && _arguments5[2] !== undefined ? _arguments5[2] : TableUtils.APPLY_TABLE_CHANGE_TIMEOUT_MS;\n var {\n dh\n } = _this5;\n return TableUtils.executeAndWaitForEvent(t => t === null || t === void 0 ? void 0 : t.applyFilter(filters), table, dh.Table.EVENT_FILTERCHANGED, timeout);\n })();\n }\n\n /**\n * Apply sorts to a given Table.\n * @param table The table to apply sorts to\n * @param sorts The sorts to apply\n * @param timeout Timeout before cancelling the promise that waits for the next\n * dh.Table.EVENT_SORTCHANGED event\n * @returns a Promise to the Table that resolves after the next\n * dh.Table.EVENT_SORTCHANGED event\n */\n applySort(table, sorts) {\n var _arguments6 = arguments,\n _this6 = this;\n return _asyncToGenerator(function* () {\n var timeout = _arguments6.length > 2 && _arguments6[2] !== undefined ? _arguments6[2] : TableUtils.APPLY_TABLE_CHANGE_TIMEOUT_MS;\n var {\n dh\n } = _this6;\n return TableUtils.executeAndWaitForEvent(t => t === null || t === void 0 ? void 0 : t.applySort(sorts), table, dh.Table.EVENT_SORTCHANGED, timeout);\n })();\n }\n\n /**\n * Create a filter condition that results in zero results for a given column\n * @param column\n */\n makeNeverFilter(column) {\n var {\n dh\n } = this;\n var value = null;\n if (TableUtils.isTextType(column.type)) {\n // Use 'a' so that it can work for String or Character types\n value = dh.FilterValue.ofString('a');\n } else if (TableUtils.isBooleanType(column.type)) {\n value = dh.FilterValue.ofBoolean(true);\n } else if (TableUtils.isDateType(column.type)) {\n value = dh.FilterValue.ofNumber(dh.DateWrapper.ofJsDate(new Date()));\n } else {\n value = dh.FilterValue.ofNumber(0);\n }\n var eqFilter = column.filter().eq(value);\n var notEqFilter = column.filter().notEq(value);\n return eqFilter.and(notEqFilter);\n }\n\n /**\n * @param columnType The column type to make the filter value from.\n * @param value The value to make the filter value from.\n * @returns The FilterValue item for this column/value combination\n */\n makeFilterValue(columnType, value) {\n var {\n dh\n } = this;\n var type = TableUtils.getBaseType(columnType);\n if (TableUtils.isTextType(type)) {\n return dh.FilterValue.ofString(value);\n }\n if (TableUtils.isLongType(type)) {\n return dh.FilterValue.ofNumber(dh.LongWrapper.ofString(TableUtils.removeCommas(value)));\n }\n return dh.FilterValue.ofNumber(TableUtils.removeCommas(value));\n }\n\n /**\n * Takes a value and converts it to an `dh.FilterValue`\n *\n * @param columnType The column type to make the filter value from.\n * @param value The value to actually set\n * @returns The FilterValue item for this column/value combination\n */\n makeFilterRawValue(columnType, rawValue) {\n var {\n dh\n } = this;\n if (TableUtils.isCharType(columnType)) {\n return dh.FilterValue.ofString(typeof rawValue === 'number' ? String.fromCharCode(rawValue) : rawValue);\n }\n if (TableUtils.isTextType(columnType)) {\n return dh.FilterValue.ofString(rawValue);\n }\n if (TableUtils.isBooleanType(columnType)) {\n return dh.FilterValue.ofBoolean(rawValue);\n }\n return dh.FilterValue.ofNumber(rawValue);\n }\n\n /**\n * Creates an Eq filter for the given column and raw value\n * @param column The column to set the filter on\n * @param rawValue The nullable value to filter on\n * @returns The filter for this column/value combination\n */\n makeNullableEqFilter(column, rawValue) {\n if (rawValue == null) {\n return column.filter().isNull();\n }\n return column.filter().eq(this.makeFilterRawValue(column.type, rawValue));\n }\n\n /**\n * Converts a string value to a value appropriate for the column\n * @param columnType The column type to make the value for\n * @param text The string value to make a type for\n * @param timeZone The time zone to make this value in if it is a date type. E.g. America/New_York\n */\n makeValue(columnType, text, timeZone) {\n var {\n dh\n } = this;\n if (text === 'null') {\n return null;\n }\n if (TableUtils.isTextType(columnType)) {\n return text;\n }\n if (TableUtils.isLongType(columnType)) {\n return dh.LongWrapper.ofString(TableUtils.removeCommas(text));\n }\n if (TableUtils.isBooleanType(columnType)) {\n return TableUtils.makeBooleanValue(text, true);\n }\n if (TableUtils.isDateType(columnType)) {\n var [date] = DateUtils.parseDateRange(dh, text, timeZone);\n return date;\n }\n if (TableUtils.isNumberType(columnType)) {\n return TableUtils.makeNumberValue(text);\n }\n log.error('Unexpected column type', columnType);\n return null;\n }\n\n /**\n * Create a filter using the selected items\n * Has a flag for invertSelection as we start from a \"Select All\" state and a user just deselects items.\n * Since there may be millions of distinct items, it's easier to build an inverse filter.\n * @param column The column to set the filter on\n * @param selectedValues The values that are selected\n * @param invertSelection Invert the selection (eg. All items are selected, then you deselect items)\n * @returns Returns a `in` or `notIn` FilterCondition as necessary, or null if no filtering should be applied (everything selected)\n */\n makeSelectValueFilter(column, selectedValues, invertSelection) {\n var {\n dh\n } = this;\n if (selectedValues.length === 0) {\n if (invertSelection) {\n // No filter means select everything\n return null;\n }\n\n // KLUDGE: Return a conflicting filter to show no results.\n // Could recognize this situation at a higher or lower level and pause updates on the\n // table, but this situation should be rare and that wouldn't be much gains for some added complexity\n return this.makeNeverFilter(column);\n }\n var values = [];\n var isNullSelected = false;\n for (var i = 0; i < selectedValues.length; i += 1) {\n var value = selectedValues[i];\n if (value == null) {\n isNullSelected = true;\n } else if (TableUtils.isTextType(column.type)) {\n values.push(dh.FilterValue.ofString(typeof value === 'number' ? String.fromCharCode(value) : value));\n } else if (TableUtils.isBooleanType(column.type)) {\n values.push(dh.FilterValue.ofBoolean(Boolean(value)));\n } else {\n values.push(dh.FilterValue.ofNumber(value));\n }\n }\n if (isNullSelected) {\n if (values.length > 0) {\n if (invertSelection) {\n return column.filter().isNull().not().and(column.filter().notIn(values));\n }\n return column.filter().isNull().or(column.filter().in(values));\n }\n if (invertSelection) {\n return column.filter().isNull().not();\n }\n return column.filter().isNull();\n }\n if (invertSelection) {\n return column.filter().notIn(values);\n }\n return column.filter().in(values);\n }\n}\n_TableUtils = TableUtils;\n_defineProperty(TableUtils, \"dataType\", {\n BOOLEAN: 'boolean',\n CHAR: 'char',\n DATETIME: 'datetime',\n DECIMAL: 'decimal',\n INT: 'int',\n STRING: 'string',\n UNKNOWN: 'unknown'\n});\n_defineProperty(TableUtils, \"sortDirection\", {\n ascending: 'ASC',\n descending: 'DESC',\n reverse: 'REVERSE',\n none: null\n});\n_defineProperty(TableUtils, \"APPLY_TABLE_CHANGE_TIMEOUT_MS\", 30000);\n_defineProperty(TableUtils, \"REVERSE_TYPE\", Object.freeze({\n NONE: 'none',\n PRE_SORT: 'pre-sort',\n POST_SORT: 'post-sort'\n}));\n// Regex looking for a negative or positive integer or decimal number\n_defineProperty(TableUtils, \"NUMBER_REGEX\", /^-?\\d+(\\.\\d+)?$/);\n_defineProperty(TableUtils, \"executeAndWaitForEvent\", /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(function* (exec, table, eventType) {\n var timeout = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : _TableUtils.APPLY_TABLE_CHANGE_TIMEOUT_MS;\n if (table == null) {\n return null;\n }\n var eventPromise = _TableUtils.makeCancelableTableEventPromise(table, eventType, timeout);\n exec(table);\n yield eventPromise;\n return table;\n });\n return function (_x, _x2, _x3) {\n return _ref2.apply(this, arguments);\n };\n}());\nexport default TableUtils;\n//# sourceMappingURL=TableUtils.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { assertInstanceOf, EMPTY_ARRAY } from '@deephaven/utils';\nimport TableUtils from \"./TableUtils.js\";\nimport { BooleanColumnFormatter, CharColumnFormatter, DateTimeColumnFormatter, DecimalColumnFormatter, DefaultColumnFormatter, IntegerColumnFormatter, StringColumnFormatter } from \"./formatters/index.js\";\nexport class Formatter {\n /**\n * Converts FormattingRule[] to Map\n * @param columnFormattingRules Array or column formatting rules\n * @returns Map of columnName-to-format Maps indexed by normalized dataType\n */\n static makeColumnFormatMap(columnFormattingRules) {\n if (columnFormattingRules == null) {\n return new Map();\n }\n return columnFormattingRules.reduce((map, next) => {\n var dataType = TableUtils.getNormalizedType(next.columnType);\n if (dataType === null) {\n return map;\n }\n if (!map.has(dataType)) {\n map.set(dataType, new Map());\n }\n var formatMap = map.get(dataType);\n formatMap === null || formatMap === void 0 || formatMap.set(next.columnName, next.format);\n return map;\n }, new Map());\n }\n\n /**\n * Creates a column formatting rule\n * @param columnType Normalized data type\n * @param columnName Column name\n * @param format Format object\n */\n static makeColumnFormattingRule(columnType, columnName, format) {\n return {\n columnType,\n columnName,\n format\n };\n }\n\n /**\n * @param dh JSAPI instance\n * @param columnFormattingRules Optional array of column formatting rules\n * @param dateTimeOptions Optional object with DateTime configuration\n * @param decimalFormatOptions Optional object with Decimal configuration\n * @param integerFormatOptions Optional object with Integer configuration\n * @param truncateNumbersWithPound Determine if numbers should be truncated w/ repeating # instead of ellipsis at the end\n */\n constructor(dh) {\n var columnFormattingRules = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : EMPTY_ARRAY;\n var dateTimeOptions = arguments.length > 2 ? arguments[2] : undefined;\n var decimalFormatOptions = arguments.length > 3 ? arguments[3] : undefined;\n var integerFormatOptions = arguments.length > 4 ? arguments[4] : undefined;\n var truncateNumbersWithPound = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;\n var showEmptyStrings = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : true;\n var showNullStrings = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : true;\n _defineProperty(this, \"defaultColumnFormatter\", void 0);\n _defineProperty(this, \"typeFormatterMap\", void 0);\n _defineProperty(this, \"columnFormatMap\", void 0);\n _defineProperty(this, \"truncateNumbersWithPound\", void 0);\n _defineProperty(this, \"showEmptyStrings\", void 0);\n _defineProperty(this, \"showNullStrings\", void 0);\n // Formatting order:\n // - columnFormatMap[type][name]\n // - typeFormatterMap[type]\n // - defaultColumnFormatter\n\n this.defaultColumnFormatter = new DefaultColumnFormatter();\n\n // Default formatters by data type\n this.typeFormatterMap = new Map([[TableUtils.dataType.BOOLEAN, new BooleanColumnFormatter()], [TableUtils.dataType.CHAR, new CharColumnFormatter()], [TableUtils.dataType.DATETIME, new DateTimeColumnFormatter(dh, dateTimeOptions)], [TableUtils.dataType.DECIMAL, new DecimalColumnFormatter(dh, decimalFormatOptions)], [TableUtils.dataType.INT, new IntegerColumnFormatter(dh, integerFormatOptions)], [TableUtils.dataType.STRING, new StringColumnFormatter()]]);\n\n // Formats indexed by data type and column name\n this.columnFormatMap = Formatter.makeColumnFormatMap(columnFormattingRules);\n this.truncateNumbersWithPound = truncateNumbersWithPound;\n this.showEmptyStrings = showEmptyStrings;\n this.showNullStrings = showNullStrings;\n }\n /**\n * Gets columnFormatMap indexed by name for a given column type, creates new Map entry if necessary\n * @param columnType column type\n * @param createIfNecessary create new entry if true\n * @returns Map of format strings indexed by column name or undefined if it doesn't exist\n */\n getColumnFormatMapForType(columnType) {\n var createIfNecessary = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var dataType = TableUtils.getNormalizedType(columnType);\n if (dataType === null) {\n return undefined;\n }\n if (createIfNecessary && !this.columnFormatMap.has(dataType)) {\n this.columnFormatMap.set(dataType, new Map());\n }\n return this.columnFormatMap.get(dataType);\n }\n\n /**\n * Gets a column format object for a given column type and name\n * @param columnType column type\n * @param columnName column name\n * @returns format object or null for Default\n */\n getColumnFormat(columnType, columnName) {\n var _columnFormatMap$get;\n var columnFormatMap = this.getColumnFormatMapForType(columnType);\n return (_columnFormatMap$get = columnFormatMap === null || columnFormatMap === void 0 ? void 0 : columnFormatMap.get(columnName)) !== null && _columnFormatMap$get !== void 0 ? _columnFormatMap$get : null;\n }\n getColumnTypeFormatter(columnType) {\n var dataType = TableUtils.getNormalizedType(columnType);\n var columnTypeFormatter = this.defaultColumnFormatter;\n if (dataType) {\n var _this$typeFormatterMa;\n columnTypeFormatter = (_this$typeFormatterMa = this.typeFormatterMap.get(dataType)) !== null && _this$typeFormatterMa !== void 0 ? _this$typeFormatterMa : columnTypeFormatter;\n }\n return columnTypeFormatter;\n }\n\n /**\n * Gets formatted string for a given value, column type and name\n * @param value Value to format\n * @param columnType Column type used to determine the formatting settings\n * @param columnName Column name used to determine the formatting settings\n * @param formatOverride Format object passed to the formatter in place of the format defined in columnFormatMap\n */\n getFormattedString(value, columnType) {\n var columnName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var formatOverride = arguments.length > 3 ? arguments[3] : undefined;\n if (value == null) {\n return '';\n }\n var formatter = this.getColumnTypeFormatter(columnType);\n var format = formatOverride || this.getColumnFormat(columnType, columnName);\n return formatter.format(value, format !== null && format !== void 0 ? format : undefined);\n }\n\n /**\n * Gets the timeZone name\n * @returns The time zone name E.g. America/New_York\n */\n get timeZone() {\n var formatter = this.typeFormatterMap.get(TableUtils.dataType.DATETIME);\n assertInstanceOf(formatter, DateTimeColumnFormatter);\n return formatter.dhTimeZone.id;\n }\n}\nexport default Formatter;\n//# sourceMappingURL=Formatter.js.map","import Formatter from \"./Formatter.js\";\nimport { TableColumnFormatter } from \"./formatters/index.js\";\n/**\n * Instantiate a `Formatter` from the given settings.\n * @param dh The `dh` object\n * @param settings Optional settings to use\n * @returns A new `Formatter` instance\n */\nexport function createFormatterFromSettings(dh, settings) {\n var columnRules = getColumnFormats(settings);\n var dateTimeOptions = getDateTimeFormatterOptions(settings);\n var {\n defaultDecimalFormatOptions,\n defaultIntegerFormatOptions,\n truncateNumbersWithPound,\n showEmptyStrings,\n showNullStrings\n } = settings !== null && settings !== void 0 ? settings : {};\n return new Formatter(dh, columnRules, dateTimeOptions, defaultDecimalFormatOptions, defaultIntegerFormatOptions, truncateNumbersWithPound, showEmptyStrings, showNullStrings);\n}\nexport function getColumnFormats(settings) {\n if (settings && settings.formatter) {\n var {\n formatter\n } = settings;\n return formatter;\n }\n return undefined;\n}\nexport function getDateTimeFormatterOptions(settings) {\n return {\n timeZone: settings === null || settings === void 0 ? void 0 : settings.timeZone,\n defaultDateTimeFormatString: settings === null || settings === void 0 ? void 0 : settings.defaultDateTimeFormat,\n showTimeZone: settings === null || settings === void 0 ? void 0 : settings.showTimeZone,\n showTSeparator: settings === null || settings === void 0 ? void 0 : settings.showTSeparator\n };\n}\n\n/**\n * Check if the formatter has a custom format defined for the column name and type\n * @param formatter Formatter to check\n * @param columnName Column name\n * @param columnType Column type\n * @returns True, if a custom format is defined\n */\nexport function isCustomColumnFormatDefined(formatter, columnName, columnType) {\n var columnFormat = formatter.getColumnFormat(columnType, columnName);\n return columnFormat != null && (columnFormat.type === TableColumnFormatter.TYPE_CONTEXT_PRESET || columnFormat.type === TableColumnFormatter.TYPE_CONTEXT_CUSTOM);\n}\nexport default {\n createFormatterFromSettings,\n getColumnFormats,\n getDateTimeFormatterOptions,\n isCustomColumnFormatDefined\n};\n//# sourceMappingURL=FormatterUtils.js.map","import { useContext, useDebugValue, useEffect, useState } from 'react';\nimport { nanoid } from 'nanoid';\nimport { PersistentStateContext } from \"./PersistentStateContext.js\";\nfunction migrateState(state, from, to, migrations, type) {\n if (from > to) {\n throw new Error(\"Persisted state \".concat(type, \" is a newer version than the current version. Persisted version: \").concat(from, \". Current version: \").concat(to));\n }\n var migratedState = state;\n var currentVersion = from;\n while (currentVersion < to) {\n // eslint-disable-next-line no-loop-func\n var possibleMigration = migrations.filter(m => m.from === currentVersion);\n if (possibleMigration.length === 0) {\n throw new Error(\"No migration found for persisted state \".concat(type, \" from version \").concat(currentVersion));\n }\n if (possibleMigration.length > 1) {\n throw new Error(\"Multiple migrations found for persisted state \".concat(type, \" from version \").concat(currentVersion));\n }\n var migration = possibleMigration[0];\n try {\n migratedState = migration.migrate(migratedState);\n currentVersion += 1;\n } catch (e) {\n throw new Error(\"Error migrating persisted state \".concat(type, \" from version \").concat(migration.from, \": \").concat(e), {\n cause: e\n });\n }\n }\n return migratedState;\n}\n\n/**\n * Functions identically to useState except that a PersistentStateProvider can be used to\n * track all calls to this hook and persist the value for future page loads.\n * Primarily used in Deephaven UI so we can persist state of multiple components within a panel.\n *\n * @param initialState The initial state if there is no previously persisted state.\n * @param config.type The type of the state. This identifier is used to validate the state being rehydrated. Should be unique to your component.\n * @param config.version The version of the state. This should be an integer, and is used to determine if the state needs to be migrated. Value should be incremented when data structure changes for this type.\n * @param config.migrations An array of migrations to apply to the state if the version of the persisted state is below the current version. Each migration increments the version by 1.\n * @param config.migrations.from The starting version of the migration. The migration will increment the version by 1.\n * @param config.migrations.migrate The function to call to migrate the state.\n * @returns [state, setState] tuple just like useState.\n */\nexport function usePersistentState(initialState, config) {\n var _context$getInitialSt;\n // We use this id to track if the component re-renders due to calling setState in its render function.\n // Otherwise, usePersistentState might be called twice by the same component in the same render cycle before flushing in the provider.\n var [id] = useState(() => nanoid());\n var context = useContext(PersistentStateContext);\n var {\n value: persistedData,\n done\n } = (_context$getInitialSt = context === null || context === void 0 ? void 0 : context.getInitialState(id)) !== null && _context$getInitialSt !== void 0 ? _context$getInitialSt : {\n value: undefined,\n done: true\n };\n\n // If not done, then we can use the persisted state\n // Otherwise, we have exhausted the persisted state\n // By checking done, we are able to explicitly save undefined as a state value\n var [state, setState] = useState(() => {\n if (persistedData == null || done) {\n return typeof initialState === 'function' ? initialState() : initialState;\n }\n if (persistedData.type !== config.type) {\n throw new Error(\"usePersistentState type mismatch. Expected \".concat(config.type, \" but got \").concat(persistedData.type, \".\"));\n }\n if (persistedData.version !== config.version) {\n var _config$migrations;\n return migrateState(persistedData.state, persistedData.version, config.version, (_config$migrations = config.migrations) !== null && _config$migrations !== void 0 ? _config$migrations : [], config.type);\n }\n return persistedData.state;\n });\n var stateWithConfig = {\n type: config.type,\n version: config.version,\n state\n };\n useDebugValue(stateWithConfig);\n context === null || context === void 0 || context.addState(id, stateWithConfig);\n\n // This won't cause unnecessary renders on initial mount because the state is already tracking,\n // so calls to scheduleStateUpdate will be no-ops since tracking finishes in an effect at the provider after this effect.\n // When a component mounts after the parents have already rendered, this will trigger a re-render to track the new state immediately.\n useEffect(function scheduleUpdateOnMountAndChange() {\n context === null || context === void 0 || context.scheduleStateUpdate();\n }, [context, state]);\n useEffect(function scheduleUpdateOnUnmount() {\n return () => {\n context === null || context === void 0 || context.scheduleStateUpdate();\n };\n }, [context]);\n return [state, setState];\n}\nexport default usePersistentState;\n//# sourceMappingURL=usePersistentState.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { LoadingOverlay } from '@deephaven/components';\nimport { lazy, Suspense } from 'react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar Chart = /*#__PURE__*/lazy(() => import('./Chart.js'));\nfunction LazyChart(props) {\n return /*#__PURE__*/_jsx(Suspense, {\n fallback: /*#__PURE__*/_jsx(LoadingOverlay, {\n \"data-testid\": \"lazy-chart-loading\"\n }),\n children: /*#__PURE__*/_jsx(Chart, _objectSpread({}, props))\n });\n}\nexport default LazyChart;\n//# sourceMappingURL=LazyChart.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport Log from '@deephaven/log';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport set from 'lodash.set';\nimport { assertNotNull, bindAllMethods } from '@deephaven/utils';\nvar log = Log.module('ChartUtils');\nvar BUSINESS_COLUMN_TYPE = 'io.deephaven.time.DateTime';\nvar MILLIS_PER_HOUR = 3600000;\nvar NANOS_PER_MILLI = 1000000;\nfunction isDateWrapper(value) {\n return value.asDate !== undefined;\n}\nfunction isLongWrapper(value) {\n return value.asNumber !== undefined;\n}\nfunction isDateTimeColumnFormatter(value) {\n return value.dhTimeZone !== undefined;\n}\nfunction isRangedPlotlyAxis(value) {\n return value != null && value.range != null && (value.autorange === false || value.autorange === undefined);\n}\n\n/**\n * Check if WebGL is supported in the current environment.\n * Most modern browsers do support WebGL, but it's possible to disable it and it is also not available\n * in some headless environments, which can affect e2e tests.\n *\n * https://github.com/microsoft/playwright/issues/13146\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1375585\n *\n * @returns True if Web GL is supported, false otherwise\n */\nexport function isWebGLSupported() {\n try {\n // https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/By_example/Detect_WebGL\n var canvas = document.createElement('canvas');\n var gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\n return gl != null && gl instanceof WebGLRenderingContext;\n } catch (e) {\n return false;\n }\n}\nvar IS_WEBGL_SUPPORTED = isWebGLSupported();\nclass ChartUtils {\n /**\n * Generate the plotly error bar data from the passed in data.\n * Iris passes in the values as absolute, plotly needs them as relative.\n * @param x The main data array\n * @param xLow The absolute low values\n * @param xHigh\n *\n * @returns The error_x object required by plotly, or null if none is required\n */\n static getPlotlyErrorBars(x, xLow, xHigh) {\n var array = xHigh.map((value, i) => value - x[i]);\n var arrayminus = xLow.map((value, i) => x[i] - value);\n return {\n type: 'data',\n symmetric: false,\n array,\n arrayminus\n };\n }\n static convertNumberPrefix(prefix) {\n return prefix.replace(/\\u00A4\\u00A4/g, 'USD').replace(/\\u00A4/g, '$');\n }\n static getPlotlyNumberFormat(formatter, columnType, formatPattern) {\n if (formatPattern == null || formatPattern === '') {\n return null;\n }\n\n // We translate java formatting: https://docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html\n // Into d3 number formatting: https://github.com/d3/d3-format\n // We can't translate number formatting exactly, but should be able to translate the most common cases\n // First split it into the subpatterns; currently only handling the positive subpattern, ignoring the rest\n var subpatterns = formatPattern.split(';');\n var matchArray = subpatterns[0].match(/^([^#,0.]*)([#,]*)([0,]*)(\\.?)(0*)(#*)(E?0*)(%?)(.*)/);\n assertNotNull(matchArray);\n var [, prefix, placeholderDigits, zeroDigits,, decimalDigits, optionalDecimalDigits, numberType, percentSign, suffix] = matchArray;\n var paddingLength = zeroDigits.replace(',', '').length;\n var isCommaSeparated = placeholderDigits.indexOf(',') >= 0 || zeroDigits.indexOf(',') >= 0;\n var comma = isCommaSeparated ? ',' : '';\n var plotlyNumberType = numberType != null && numberType !== '' ? 'e' : 'f';\n var type = percentSign !== '' ? percentSign : plotlyNumberType;\n var decimalLength = decimalDigits.length + optionalDecimalDigits.length;\n // IDS-4565 Plotly uses an older version of d3 which doesn't support the trim option or negative brackets\n // If plotly updates it's d3 version, this should be re-enabled\n // const trimOption = optionalDecimalDigits.length > 0 ? '~' : '';\n var trimOption = '';\n var tickformat = \"0\".concat(paddingLength).concat(comma, \".\").concat(decimalLength).concat(trimOption).concat(type);\n var tickprefix = ChartUtils.convertNumberPrefix(prefix);\n // prefix and suffix are processed the same\n var ticksuffix = ChartUtils.convertNumberPrefix(suffix);\n return {\n tickformat,\n tickprefix,\n ticksuffix,\n automargin: true\n };\n }\n\n /**\n * Adds tick spacing for an axis that has gapBetweenMajorTicks defined.\n *\n * @param axisFormat the current axis format, may be null\n * @param axis the current axis\n * @param isDateType indicates if the columns is a date type\n */\n static addTickSpacing(axisFormat, axis, isDateType) {\n var {\n gapBetweenMajorTicks\n } = axis;\n if (gapBetweenMajorTicks != null && gapBetweenMajorTicks > 0) {\n var updatedFormat = axisFormat || {};\n var tickSpacing = gapBetweenMajorTicks;\n if (isDateType) {\n // Need to convert from nanoseconds to milliseconds\n tickSpacing = gapBetweenMajorTicks / NANOS_PER_MILLI;\n }\n if (axis.log) {\n tickSpacing = Math.log(tickSpacing);\n }\n // Note that tickmode defaults to 'auto'\n updatedFormat.tickmode = 'linear';\n updatedFormat.dtick = tickSpacing;\n return updatedFormat;\n }\n return axisFormat;\n }\n\n /**\n * Retrieve the data source for a given axis in a chart\n * @param chart The chart to get the source for\n * @param axis The axis to find the source for\n * @returns The first source matching this axis\n */\n static getSourceForAxis(chart, axis) {\n for (var i = 0; i < chart.series.length; i += 1) {\n var series = chart.series[i];\n for (var j = 0; j < series.sources.length; j += 1) {\n var source = series.sources[j];\n if (source.axis === axis) {\n return source;\n }\n }\n }\n return null;\n }\n\n /**\n * Get visibility setting for the series object\n * @param name The series name to get the visibility for\n * @param settings Chart settings\n * @returns True for visible series and 'legendonly' for hidden\n */\n static getSeriesVisibility(name, settings) {\n if (settings != null && settings.hiddenSeries != null && settings.hiddenSeries.includes(name)) {\n return 'legendonly';\n }\n return true;\n }\n\n /**\n * Get hidden labels array from chart settings\n * @param settings Chart settings\n * @returns Array of hidden series names\n */\n static getHiddenLabels(settings) {\n if (settings !== null && settings !== void 0 && settings.hiddenSeries) {\n return [...settings.hiddenSeries];\n }\n return [];\n }\n\n /**\n * Create a default series data object. Apply styling to the object afterward.\n * @returns A simple series data object with no styling\n */\n static makeSeriesData(type, mode, name, showLegend) {\n var orientation = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : ChartUtils.ORIENTATION.VERTICAL;\n return {\n type,\n mode,\n name,\n orientation,\n showlegend: showLegend !== null && showLegend !== void 0 ? showLegend : undefined\n };\n }\n\n /**\n * Get the Plotly marker symbol for the provided Deephaven shape\n * Deephaven shapes: https://deephaven.io/enterprise/docs/plotting/visual-formatting/#point-formatting\n * Plotly shapes: https://plotly.com/javascript/reference/scattergl/#scattergl-marker-symbol\n * Table of plotly shapes: https://plotly.com/python/marker-style/#custom-marker-symbols\n * @param deephavenShape Deephaven shape to get the marker symbol for\n */\n static getMarkerSymbol(deephavenShape) {\n switch (deephavenShape) {\n case 'SQUARE':\n return 'square';\n case 'CIRCLE':\n return 'circle';\n case 'DIAMOND':\n return 'diamond';\n case 'UP_TRIANGLE':\n return 'triangle-up';\n case 'DOWN_TRIANGLE':\n return 'triangle-down';\n case 'RIGHT_TRIANGLE':\n return 'triangle-right';\n case 'LEFT_TRIANGLE':\n return 'triangle-left';\n // There don't seem to be any plotly equivalents for ellipse or rectangles\n // Rectangles could be `line-ew`, `line-ns`, or `hourglass` and `bowtie` instead?\n // Ellipse could be `asterisk` or `diamond-wide` instead?\n // Just throw an error, we've already got a bunch of types.\n case 'ELLIPSE':\n case 'HORIZONTAL_RECTANGLE':\n case 'VERTICAL_RECTANGLE':\n default:\n throw new Error(\"Unrecognized shape \".concat(deephavenShape));\n }\n }\n\n /**\n * Get all axes for a given `Figure`. Iterates through all charts axes and concatenates them.\n * @param figure Figure to get all axes for\n */\n static getAllAxes(figure) {\n return figure.charts.reduce((axes, chart) => [...axes, ...chart.axes], []);\n }\n\n /**\n * Get the axis type map for the figure provided\n * @param figure Figure to get the type map for\n * @returns Axis type map for the figure provided\n */\n static getAxisTypeMap(figure) {\n var axes = ChartUtils.getAllAxes(figure);\n return ChartUtils.groupArray(axes, 'type');\n }\n\n /**\n * Retrieve the chart that contains the passed in series from the figure\n * @param figure The figure to retrieve the chart from\n * @param series The series to get the chart for\n */\n static getChartForSeries(figure, series) {\n var {\n charts\n } = figure;\n for (var i = 0; i < charts.length; i += 1) {\n var _chart = charts[i];\n for (var j = 0; j < _chart.series.length; j += 1) {\n if (series === _chart.series[j]) {\n return _chart;\n }\n }\n }\n return null;\n }\n\n /**\n * Get an object mapping axis to their ranges\n * @param layout The plotly layout object to get the ranges from\n * @returns An object mapping the axis name to it's range\n */\n static getLayoutRanges(layout) {\n var ranges = {};\n var keys = Object.keys(layout).filter(key => key.indexOf('axis') >= 0);\n for (var i = 0; i < keys.length; i += 1) {\n var key = keys[i];\n var value = layout[key];\n if (isRangedPlotlyAxis(value)) {\n // Only want to add the range if it's not autoranged\n ranges[key] = [...value.range];\n }\n }\n return ranges;\n }\n static getAxisLayoutProperty(axisProperty, axisIndex) {\n var axisIndexString = axisIndex > 0 ? \"\".concat(axisIndex + 1) : '';\n return \"\".concat(axisProperty !== null && axisProperty !== void 0 ? axisProperty : '', \"axis\").concat(axisIndexString);\n }\n\n /**\n * Converts an open or close period to a declimal. e.g '09:30\" to 9.5\n *\n * @param period the open or close value of the period\n */\n static periodToDecimal(period) {\n var values = period.split(':');\n return Number(values[0]) + Number(values[1]) / 60;\n }\n\n /**\n * Converts a decimal to a period. e.g 9.5 to '09:30'\n *\n * @param decimal the decimal value to\n */\n static decimalToPeriod(decimal) {\n var hours = Math.floor(decimal);\n var minutes = Math.round((decimal - hours) * 60);\n return \"\".concat(hours.toString().padStart(2, '0'), \":\").concat(minutes.toString().padStart(2, '0'));\n }\n\n /**\n * Groups an array and returns a map\n * @param array The object to group\n * @param property The property name to group by\n * @returns A map containing the items grouped by their values for the property\n */\n static groupArray(array, property) {\n return array.reduce((result, item) => {\n var _result$get;\n var key = item[property];\n var group = (_result$get = result.get(key)) !== null && _result$get !== void 0 ? _result$get : [];\n group.push(item);\n result.set(key, group);\n return result;\n }, new Map());\n }\n\n /**\n * Parses the colorway value of a theme and returns an array of colors\n * Value could be a single string with space separated colors or already be an\n * array of strings representing the colorway\n * @param colorway The colorway value to normalize\n * @returns Colorway array for the theme or undefined\n */\n static normalizeColorway(colorway) {\n if (colorway == null) {\n return;\n }\n if (Array.isArray(colorway)) {\n return colorway;\n }\n if (typeof colorway === 'string') {\n return colorway.split(' ');\n }\n log.warn(\"Unexpected colorway format: \".concat(colorway));\n }\n static titleFromSettings(settings) {\n var {\n series,\n xAxis,\n title = \"\".concat((series !== null && series !== void 0 ? series : []).join(', '), \" by \").concat(xAxis)\n } = settings;\n return title;\n }\n static getTimeZoneDiff(calendarTimeZone, formatterTimeZone) {\n return formatterTimeZone ? (calendarTimeZone.standardOffset - formatterTimeZone.standardOffset) / 60 : 0;\n }\n\n /**\n * Creates closed periods for a partial holiday.\n *\n * @param holidayPeriods the business periods for the holiday\n * @param calendarPeriods the business periods for the calendar\n * @returns an array of closed ranges for the partial holiday. Should be the ranges during the regular business hours that are _not_ specified by the holiday periods.\n */\n static createClosedRangesForPartialHoliday(holidayPeriods, calendarPeriods) {\n // First restrict the periods to only those that are actual business periods.\n var calendarRanges = calendarPeriods.map(period => [ChartUtils.periodToDecimal(period.open), ChartUtils.periodToDecimal(period.close)]);\n calendarRanges.sort((a, b) => a[0] - b[0]);\n if (calendarRanges.length === 0) {\n calendarRanges.push([0, 24]);\n }\n var holidayRanges = holidayPeriods.map(period => [ChartUtils.periodToDecimal(period.open), ChartUtils.periodToDecimal(period.close)]);\n holidayRanges.sort((a, b) => a[0] - b[0]);\n var closedRanges = [];\n\n // Separate index cursor for the holiday ranges\n for (var c = 0; c < calendarRanges.length; c += 1) {\n var calendarRange = calendarRanges[c];\n var lastClose = calendarRange[0];\n for (var h = 0; h < holidayRanges.length; h += 1) {\n var holidayRange = holidayRanges[h];\n if (holidayRange[1] > lastClose && holidayRange[0] < calendarRange[1]) {\n if (holidayRange[0] > lastClose) {\n closedRanges.push([lastClose, holidayRange[0]]);\n }\n // eslint-disable-next-line prefer-destructuring\n lastClose = holidayRange[1];\n }\n }\n if (lastClose < calendarRange[1]) {\n closedRanges.push([lastClose, calendarRange[1]]);\n }\n }\n return closedRanges;\n }\n constructor(dh) {\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"daysOfWeek\", void 0);\n this.dh = dh;\n this.daysOfWeek = Object.freeze(dh.calendar.DayOfWeek.values());\n bindAllMethods(this);\n }\n\n /**\n * Retrieve the axis formats from the provided figure.\n * Currently defaults to just the x/y axes.\n * @param figure The figure to get the axis formats for\n * @param formatter The formatter to use when getting the axis format\n * @returns A map of axis layout property names to axis formats\n */\n getAxisFormats(figure, formatter) {\n var axisFormats = new Map();\n var nullFormat = {\n tickformat: null,\n ticksuffix: null\n };\n var allAxes = ChartUtils.getAllAxes(figure);\n var axisTypeMap = ChartUtils.groupArray(allAxes, 'type');\n var {\n charts\n } = figure;\n for (var i = 0; i < charts.length; i += 1) {\n var _chart2 = charts[i];\n for (var j = 0; j < _chart2.series.length; j += 1) {\n var series = _chart2.series[j];\n var {\n sources\n } = series;\n var axisSources = sources.filter(source => source.axis);\n for (var k = 0; k < axisSources.length; k += 1) {\n var source = axisSources[k];\n var {\n axis: _axis\n } = source;\n var {\n type: axisType\n } = _axis;\n var typeAxes = axisTypeMap.get(axisType);\n assertNotNull(typeAxes);\n var axisIndex = typeAxes.indexOf(_axis);\n var axisProperty = this.getAxisPropertyName(axisType);\n if (axisProperty != null) {\n var axisLayoutProperty = ChartUtils.getAxisLayoutProperty(axisProperty, axisIndex);\n if (axisFormats.has(axisLayoutProperty)) {\n log.debug(\"\".concat(axisLayoutProperty, \" already added.\"));\n } else {\n log.debug(\"Adding \".concat(axisLayoutProperty, \" to axisFormats.\"));\n var axisFormat = this.getPlotlyAxisFormat(source, formatter);\n if (axisFormat === null) {\n axisFormats.set(axisLayoutProperty, nullFormat);\n } else {\n axisFormats.set(axisLayoutProperty, axisFormat);\n var {\n businessCalendar\n } = _axis;\n if (businessCalendar != null) {\n axisFormat.rangebreaks = this.createRangeBreaksFromBusinessCalendar(businessCalendar, formatter);\n }\n if (axisFormats.size === _chart2.axes.length) {\n return axisFormats;\n }\n }\n }\n }\n }\n }\n }\n return axisFormats;\n }\n\n /**\n * Converts the Iris plot style into a plotly chart type\n * @param plotStyle The plotStyle to use, see dh.plot.SeriesPlotStyle\n * @param isBusinessTime If the plot is using business time for an axis\n * @param allowWebGL If WebGL is allowedd\n */\n getPlotlyChartType(plotStyle, isBusinessTime) {\n var allowWebGL = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var {\n dh\n } = this;\n switch (plotStyle) {\n case dh.plot.SeriesPlotStyle.SCATTER:\n case dh.plot.SeriesPlotStyle.LINE:\n // scattergl mode is more performant (usually), but doesn't support the rangebreaks we need for businessTime calendars\n // In some cases, WebGL is less performant (like in virtual desktop environments), so we also allow the option of the user explicitly disabling it even if it's supported\n return !isBusinessTime && IS_WEBGL_SUPPORTED && allowWebGL ? 'scattergl' : 'scatter';\n case dh.plot.SeriesPlotStyle.BAR:\n case dh.plot.SeriesPlotStyle.STACKED_BAR:\n return 'bar';\n case dh.plot.SeriesPlotStyle.PIE:\n return 'pie';\n case dh.plot.SeriesPlotStyle.TREEMAP:\n return 'treemap';\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 'histogram';\n case dh.plot.SeriesPlotStyle.OHLC:\n return 'ohlc';\n default:\n return undefined;\n }\n }\n\n /**\n * Converts the Iris plot style into a plotly chart mode\n * @param plotStyle The plotStyle to use, see dh.plot.SeriesPlotStyle.*\n * @param areLinesVisible Whether lines are visible or not\n * @param areShapesVisible Whether shapes are visible or not\n */\n getPlotlyChartMode(plotStyle, areLinesVisible, areShapesVisible) {\n var {\n dh\n } = this;\n var modes = new Set();\n switch (plotStyle) {\n case dh.plot.SeriesPlotStyle.SCATTER:\n // Default to only showing shapes in scatter plots\n if (areLinesVisible !== null && areLinesVisible !== void 0 ? areLinesVisible : false) {\n modes.add(ChartUtils.MODE_LINES);\n }\n if (areShapesVisible !== null && areShapesVisible !== void 0 ? areShapesVisible : true) {\n modes.add(ChartUtils.MODE_MARKERS);\n }\n break;\n case dh.plot.SeriesPlotStyle.LINE:\n // Default to only showing lines in line series\n if (areLinesVisible !== null && areLinesVisible !== void 0 ? areLinesVisible : true) {\n modes.add(ChartUtils.MODE_LINES);\n }\n if (areShapesVisible !== null && areShapesVisible !== void 0 ? areShapesVisible : false) {\n modes.add(ChartUtils.MODE_MARKERS);\n }\n break;\n default:\n break;\n }\n return modes.size > 0 ? [...modes].join('+') : undefined;\n }\n\n /**\n * Get the property to set on the series data for plotly\n * @param plotStyle The plot style of the series\n * @param sourceType The source type for the series\n */\n getPlotlyProperty(plotStyle, sourceType) {\n var {\n dh\n } = this;\n switch (plotStyle) {\n case dh.plot.SeriesPlotStyle.PIE:\n switch (sourceType) {\n case dh.plot.SourceType.X:\n return 'labels';\n case dh.plot.SourceType.Y:\n return 'values';\n default:\n break;\n }\n break;\n case dh.plot.SeriesPlotStyle.OHLC:\n switch (sourceType) {\n case dh.plot.SourceType.TIME:\n return 'x';\n default:\n break;\n }\n break;\n case dh.plot.SeriesPlotStyle.TREEMAP:\n switch (sourceType) {\n case dh.plot.SourceType.X:\n return 'ids';\n case dh.plot.SourceType.Y:\n return 'values';\n case dh.plot.SourceType.LABEL:\n return 'labels';\n case dh.plot.SourceType.PARENT:\n return 'parents';\n case dh.plot.SourceType.COLOR:\n return 'marker.colors';\n default:\n break;\n }\n break;\n default:\n break;\n }\n switch (sourceType) {\n case dh.plot.SourceType.X:\n return 'x';\n case dh.plot.SourceType.Y:\n return 'y';\n case dh.plot.SourceType.Z:\n return 'z';\n case dh.plot.SourceType.X_LOW:\n return 'xLow';\n case dh.plot.SourceType.X_HIGH:\n return 'xHigh';\n case dh.plot.SourceType.Y_LOW:\n return 'yLow';\n case dh.plot.SourceType.Y_HIGH:\n return 'yHigh';\n case dh.plot.SourceType.TIME:\n return 'time';\n case dh.plot.SourceType.OPEN:\n return 'open';\n case dh.plot.SourceType.HIGH:\n return 'high';\n case dh.plot.SourceType.LOW:\n return 'low';\n case dh.plot.SourceType.CLOSE:\n return 'close';\n case dh.plot.SourceType.SHAPE:\n return 'shape';\n case dh.plot.SourceType.SIZE:\n return 'size';\n case dh.plot.SourceType.LABEL:\n return 'label';\n case dh.plot.SourceType.COLOR:\n return 'color';\n case dh.plot.SourceType.PARENT:\n return 'parent';\n case dh.plot.SourceType.HOVER_TEXT:\n return 'hovertext';\n case dh.plot.SourceType.TEXT:\n return 'text';\n default:\n throw new Error(\"Unrecognized source type: \".concat(sourceType));\n }\n }\n getPlotlySeriesOrientation(series) {\n var _sources$;\n var {\n dh\n } = this;\n var {\n sources\n } = series;\n if (sources.length === 2 && ((_sources$ = sources[0]) === null || _sources$ === void 0 || (_sources$ = _sources$.axis) === null || _sources$ === void 0 ? void 0 : _sources$.type) === dh.plot.AxisType.Y) {\n return ChartUtils.ORIENTATION.HORIZONTAL;\n }\n return ChartUtils.ORIENTATION.VERTICAL;\n }\n\n /**\n * Create a data series (trace) for use with plotly\n * @param series The series to create the series data with\n * @param axisTypeMap The map of axes grouped by type\n * @param seriesVisibility Visibility setting for the series\n * @returns The series data (trace) object for use with plotly.\n */\n makeSeriesDataFromSeries(series, axisTypeMap, seriesVisibility) {\n var showLegend = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n var allowWebGL = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n var {\n name,\n isLinesVisible,\n isShapesVisible,\n plotStyle,\n lineColor,\n shapeColor,\n sources,\n shape,\n shapeSize\n } = series;\n var isBusinessTime = sources.some(source => {\n var _source$axis;\n return (_source$axis = source.axis) === null || _source$axis === void 0 ? void 0 : _source$axis.businessCalendar;\n });\n var type = this.getChartType(plotStyle, isBusinessTime, allowWebGL);\n var mode = this.getPlotlyChartMode(plotStyle, isLinesVisible !== null && isLinesVisible !== void 0 ? isLinesVisible : undefined, isShapesVisible !== null && isShapesVisible !== void 0 ? isShapesVisible : undefined);\n var orientation = this.getPlotlySeriesOrientation(series);\n var seriesData = ChartUtils.makeSeriesData(type, mode, name, showLegend, orientation);\n this.addSourcesToSeriesData(seriesData, plotStyle, sources, axisTypeMap);\n this.addStylingToSeriesData(seriesData, plotStyle, lineColor, shapeColor, shape, shapeSize, seriesVisibility);\n return seriesData;\n }\n addSourcesToSeriesData(seriesDataParam, plotStyle, sources, axisTypeMap) {\n var seriesData = seriesDataParam;\n for (var k = 0; k < sources.length; k += 1) {\n var source = sources[k];\n var {\n axis: _axis2,\n type: sourceType\n } = source;\n var dataAttributeName = this.getPlotlyProperty(plotStyle, sourceType);\n set(seriesData, dataAttributeName, []);\n var axisProperty = _axis2 != null ? this.getAxisPropertyName(_axis2.type) : null;\n if (axisProperty != null) {\n var axes = axisTypeMap.get(_axis2.type);\n if (axes) {\n var axisIndex = axes.indexOf(_axis2);\n var axisIndexString = axisIndex > 0 ? \"\".concat(axisIndex + 1) : '';\n seriesData[\"\".concat(axisProperty, \"axis\")] = \"\".concat(axisProperty).concat(axisIndexString);\n }\n }\n }\n }\n addStylingToSeriesData(seriesDataParam, plotStyle) {\n var lineColor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var shapeColor = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n var shape = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;\n var shapeSize = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null;\n var seriesVisibility = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : null;\n var {\n dh\n } = this;\n var seriesData = seriesDataParam;\n // Add some empty objects so we can fill them in later with details without checking for existence\n seriesData.marker = {\n line: {}\n }; // border line width on markers\n seriesData.line = {\n width: 1 // default line width for lines, should eventually be able to override\n };\n if (plotStyle === dh.plot.SeriesPlotStyle.AREA) {\n seriesData.fill = 'tozeroy';\n } else if (plotStyle === dh.plot.SeriesPlotStyle.STACKED_AREA) {\n seriesData.stackgroup = 'stack';\n } else if (plotStyle === dh.plot.SeriesPlotStyle.STEP) {\n seriesData.line.shape = 'hv'; // plot.ly horizontal then vertical step styling\n } else if (plotStyle === dh.plot.SeriesPlotStyle.HISTOGRAM) {\n // The default histfunc in plotly is 'count', but the data passed up from the API provides explicit x/y values and bins\n // Since it's converted to bar, just set the widths of each bar\n seriesData.width = [];\n } else if (plotStyle === dh.plot.SeriesPlotStyle.PIE) {\n seriesData.textinfo = 'label+percent';\n } else if (plotStyle === dh.plot.SeriesPlotStyle.TREEMAP) {\n seriesData.hoverinfo = 'text';\n seriesData.textinfo = 'label+text';\n seriesData.tiling = {\n packing: 'squarify',\n pad: 0\n };\n seriesData.textposition = 'middle center';\n }\n if (lineColor != null) {\n if (plotStyle === dh.plot.SeriesPlotStyle.BAR) {\n seriesData.marker.color = lineColor;\n } else {\n seriesData.line.color = lineColor;\n }\n }\n if (shapeColor != null) {\n seriesData.marker.color = shapeColor;\n }\n if (shape != null && shape.length > 0) {\n try {\n seriesData.marker.symbol = ChartUtils.getMarkerSymbol(shape);\n } catch (e) {\n log.warn('Unable to handle shape', shape, ':', e);\n }\n }\n if (shapeSize != null) {\n seriesData.marker.size = shapeSize * ChartUtils.DEFAULT_MARKER_SIZE;\n }\n\n // Skipping pie charts\n // Pie slice visibility is configured in chart layout instead of series data\n if (seriesVisibility != null && plotStyle !== dh.plot.SeriesPlotStyle.PIE) {\n seriesData.visible = seriesVisibility;\n }\n }\n getChartType(plotStyle, isBusinessTime) {\n var allowWebGL = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var {\n dh\n } = this;\n switch (plotStyle) {\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n // When reading data from the `Figure`, it already provides bins and values, so rather than using\n // plot.ly to calculate the bins and sum values, just convert it to a bar chart\n return 'bar';\n default:\n return this.getPlotlyChartType(plotStyle, isBusinessTime, allowWebGL);\n }\n }\n\n /**\n * Return the plotly axis property name\n * @param axisType The axis type to get the property name for\n */\n getAxisPropertyName(axisType) {\n var {\n dh\n } = this;\n switch (axisType) {\n case dh.plot.AxisType.X:\n return 'x';\n case dh.plot.AxisType.Y:\n return 'y';\n default:\n return null;\n }\n }\n\n /**\n * Returns the plotly \"side\" value for the provided axis position\n * @param axisPosition The Iris AxisPosition of the axis\n */\n getAxisSide(axisPosition) {\n var {\n dh\n } = this;\n switch (axisPosition) {\n case dh.plot.AxisPosition.BOTTOM:\n return 'bottom';\n case dh.plot.AxisPosition.TOP:\n return 'top';\n case dh.plot.AxisPosition.LEFT:\n return 'left';\n case dh.plot.AxisPosition.RIGHT:\n return 'right';\n default:\n return undefined;\n }\n }\n\n /**\n * Update the layout with all the axes information for the provided figure\n * @param figure Figure to update the axes for\n * @param layoutParam Layout object to update in place\n * @param chartAxisRangeParser Function to retrieve the axis range parser\n * @param plotWidth Width of the plot in pixels\n * @param plotHeight Height of the plot in pixels\n */\n updateFigureAxes(layoutParam, figure, chartAxisRangeParser) {\n var plotWidth = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var plotHeight = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n var layout = layoutParam;\n var figureAxes = ChartUtils.getAllAxes(figure);\n for (var i = 0; i < figure.charts.length; i += 1) {\n var _chart3 = figure.charts[i];\n var axisRangeParser = chartAxisRangeParser === null || chartAxisRangeParser === void 0 ? void 0 : chartAxisRangeParser(_chart3);\n var bounds = this.getChartBounds(figure, _chart3, plotWidth, plotHeight);\n this.updateLayoutAxes(layout, _chart3.axes, figureAxes, plotWidth, plotHeight, bounds, axisRangeParser);\n }\n this.removeStaleAxes(layout, figureAxes);\n }\n getChartBounds(figure, chart, plotWidth, plotHeight) {\n var _axisPositionMap$get;\n var {\n dh\n } = this;\n var {\n cols,\n rows\n } = figure;\n var {\n column,\n colspan,\n row,\n rowspan\n } = chart;\n var endColumn = column + colspan;\n var endRow = row + rowspan;\n var columnSize = 1 / cols;\n var rowSize = 1 / rows;\n var xMarginSize = ChartUtils.AXIS_SIZE_PX / plotWidth;\n var yMarginSize = ChartUtils.AXIS_SIZE_PX / plotHeight;\n var bounds = {\n // Need to invert the row positioning so the first one defined shows up on top instead of the bottom, since coordinates start in bottom left\n bottom: (rows - endRow) * rowSize + (endRow < rows ? yMarginSize / 2 : 0),\n top: (rows - row) * rowSize - (row > 0 ? yMarginSize / 2 : 0),\n left: column * columnSize + (column > 0 ? xMarginSize / 2 : 0),\n right: endColumn * columnSize - (endColumn < cols ? xMarginSize / 2 : 0)\n };\n\n // Adjust the bounds based on where the legend is\n // For now, always assume the legend is shown on the right\n var axisPositionMap = ChartUtils.groupArray(chart.axes, 'position');\n var rightAxes = (_axisPositionMap$get = axisPositionMap.get(dh.plot.AxisPosition.RIGHT)) !== null && _axisPositionMap$get !== void 0 ? _axisPositionMap$get : [];\n if (rightAxes.length > 0) {\n if (plotWidth > 0) {\n bounds.right -= (bounds.right - bounds.left) * Math.max(0, Math.min(ChartUtils.LEGEND_WIDTH_PX / plotWidth, ChartUtils.MAX_LEGEND_SIZE));\n } else {\n bounds.right -= (bounds.right - bounds.left) * ChartUtils.DEFAULT_AXIS_SIZE;\n }\n }\n return bounds;\n }\n getPlotlyDateFormat(formatter, columnType, formatPattern) {\n var {\n dh\n } = this;\n var tickformat = formatPattern == null ? undefined : formatPattern.replace('%', '%%').replace(/S{9}/g, '%9f').replace(/S{8}/g, '%8f').replace(/S{7}/g, '%7f').replace(/S{6}/g, '%6f').replace(/S{5}/g, '%5f').replace(/S{4}/g, '%4f').replace(/S{3}/g, '%3f').replace(/S{2}/g, '%2f').replace(/S{1}/g, '%1f').replace(/y{4}/g, '%Y').replace(/y{2}/g, '%y').replace(/M{4}/g, '%B').replace(/M{3}/g, '%b').replace(/M{2}/g, '%m').replace(/M{1}/g, '%-m').replace(/E{4,}/g, '%A').replace(/E{1,}/g, '%a').replace(/d{2}/g, '%d').replace(/([^%]|^)d{1}/g, '$1%-d').replace(/H{2}/g, '%H').replace(/h{2}/g, '%I').replace(/h{1}/g, '%-I').replace(/m{2}/g, '%M').replace(/s{2}/g, '%S').replace(\"'T'\", 'T').replace(' z', ''); // timezone added as suffix if necessary\n\n var ticksuffix;\n var dataFormatter = formatter === null || formatter === void 0 ? void 0 : formatter.getColumnTypeFormatter(columnType);\n if (dataFormatter != null && isDateTimeColumnFormatter(dataFormatter) && dataFormatter.dhTimeZone != null && dataFormatter.showTimeZone) {\n ticksuffix = dh.i18n.DateTimeFormat.format(' z', new Date(), dataFormatter.dhTimeZone);\n }\n return {\n tickformat,\n ticksuffix,\n automargin: true\n };\n }\n\n /**\n * Gets the plotly axis formatting information from the source passed in\n * @param source The Source to get the formatter information from\n * @param formatter The current formatter for formatting data\n */\n getPlotlyAxisFormat(source) {\n var formatter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var {\n dh\n } = this;\n var {\n axis,\n columnType\n } = source;\n var {\n formatPattern\n } = axis;\n var axisFormat = null;\n if (TableUtils.isDateType(columnType)) {\n axisFormat = this.getPlotlyDateFormat(formatter, columnType, formatPattern);\n axisFormat = ChartUtils.addTickSpacing(axisFormat, axis, true);\n } else if (TableUtils.isNumberType(columnType)) {\n axisFormat = ChartUtils.getPlotlyNumberFormat(formatter, columnType, formatPattern);\n axisFormat = ChartUtils.addTickSpacing(axisFormat, axis, false);\n }\n if (axis.formatType === dh.plot.AxisFormatType.CATEGORY) {\n if (axisFormat) {\n axisFormat.type = 'category';\n } else {\n axisFormat = {\n type: 'category',\n tickformat: undefined,\n ticksuffix: undefined\n };\n }\n }\n return axisFormat;\n }\n\n /**\n * Updates the axes positions and sizes in the layout object provided.\n * If the axis did not exist in the layout previously, it is created and added.\n * Any axis that no longer exists in axes is removed.\n * With Downsampling enabled, will also update the range on the axis itself as appropriate\n * @param layoutParam The layout object to update\n * @param chartAxes The chart axes to update the layout with\n * @param figureAxes All figure axes to update the layout with\n * @param plotWidth The width of the plot to calculate the axis sizes for\n * @param plotHeight The height of the plot to calculate the axis sizes for\n * @param bounds The bounds for this set of axes\n * @param axisRangeParser A function to retrieve the range parser for a given axis\n */\n updateLayoutAxes(layoutParam, chartAxes, figureAxes) {\n var plotWidth = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var plotHeight = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n var bounds = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {\n left: 0,\n top: 0,\n right: 1,\n bottom: 1\n };\n var axisRangeParser = arguments.length > 6 ? arguments[6] : undefined;\n var {\n dh\n } = this;\n var xAxisSize = plotWidth > 0 ? Math.max(ChartUtils.MIN_AXIS_SIZE, Math.min(ChartUtils.AXIS_SIZE_PX / plotHeight, ChartUtils.MAX_AXIS_SIZE)) : ChartUtils.DEFAULT_AXIS_SIZE;\n var yAxisSize = plotHeight > 0 ? Math.max(ChartUtils.MIN_AXIS_SIZE, Math.min(ChartUtils.AXIS_SIZE_PX / plotWidth, ChartUtils.MAX_AXIS_SIZE)) : ChartUtils.DEFAULT_AXIS_SIZE;\n var layout = layoutParam;\n var axisPositionMap = ChartUtils.groupArray(chartAxes, 'position');\n var axisTypeMap = ChartUtils.groupArray(chartAxes, 'type');\n var axisTypes = [...axisTypeMap.keys()];\n var figureAxisTypeMap = ChartUtils.groupArray(figureAxes, 'type');\n for (var j = 0; j < axisTypes.length; j += 1) {\n var axisType = axisTypes[j];\n var axisProperty = this.getAxisPropertyName(axisType);\n if (axisProperty != null) {\n var typeAxes = axisTypeMap.get(axisType);\n var figureTypeAxes = figureAxisTypeMap.get(axisType);\n var isYAxis = axisType === dh.plot.AxisType.Y;\n var plotSize = isYAxis ? plotHeight : plotWidth;\n assertNotNull(typeAxes);\n assertNotNull(figureTypeAxes);\n for (var chartAxisIndex = 0; chartAxisIndex < typeAxes.length; chartAxisIndex += 1) {\n var _axis3 = typeAxes[chartAxisIndex];\n var figureAxisIndex = figureTypeAxes.indexOf(_axis3);\n var axisLayoutProperty = ChartUtils.getAxisLayoutProperty(axisProperty, figureAxisIndex);\n if (layout[axisLayoutProperty] == null) {\n layout[axisLayoutProperty] = {};\n }\n var layoutAxis = layout[axisLayoutProperty];\n if (layoutAxis != null) {\n this.updateLayoutAxis(layoutAxis, _axis3, chartAxisIndex, axisPositionMap, xAxisSize, yAxisSize, bounds);\n var {\n range: _range,\n autorange\n } = layoutAxis;\n if (axisRangeParser != null && _range !== undefined && (autorange === undefined || autorange === false)) {\n var rangeParser = axisRangeParser(_axis3);\n var [rangeStart, rangeEnd] = rangeParser(_range);\n log.debug('Setting downsample range', plotSize, rangeStart, rangeEnd);\n _axis3.range(plotSize, rangeStart, rangeEnd);\n } else {\n _axis3.range(plotSize);\n }\n }\n }\n }\n }\n }\n\n /**\n * Remove any axes from the layout param that no longer belong to any series\n * @param layoutParam Layout object to remove stale axes from\n * @param axes All axes in the figure\n */\n removeStaleAxes(layoutParam, axes) {\n var layout = layoutParam;\n var figureAxisTypeMap = ChartUtils.groupArray(axes, 'type');\n var figureAxisTypes = [...figureAxisTypeMap.keys()];\n for (var i = 0; i < figureAxisTypes.length; i += 1) {\n var axisType = figureAxisTypes[i];\n var typeAxes = figureAxisTypeMap.get(axisType);\n assertNotNull(typeAxes);\n var axisIndex = typeAxes.length;\n // Delete any axes that may no longer exist\n var axisProperty = this.getAxisPropertyName(axisType);\n if (axisProperty != null) {\n var axisLayoutProperty = ChartUtils.getAxisLayoutProperty(axisProperty, axisIndex);\n while (layout[axisLayoutProperty] != null) {\n delete layout[axisLayoutProperty];\n axisIndex += 1;\n axisLayoutProperty = ChartUtils.getAxisLayoutProperty(axisProperty, axisIndex);\n }\n }\n }\n }\n\n /**\n * Updates the layout axis object in place\n * @param layoutAxisParam The plotly layout axis param\n * @param axis The Iris Axis to update the plotly layout with\n * @param axisIndex The type index for this axis\n * @param axisPositionMap All the axes mapped by position\n * @param axisSize The size of each axis in percent\n * @param bounds The bounds of the axes domains\n */\n updateLayoutAxis(layoutAxisParam, axis, axisIndex, axisPositionMap, xAxisSize, yAxisSize, bounds) {\n var _axis$label;\n var {\n dh\n } = this;\n var isYAxis = axis.type === dh.plot.AxisType.Y;\n var axisSize = isYAxis ? yAxisSize : xAxisSize;\n var layoutAxis = layoutAxisParam;\n // Enterprise API returns null for empty axis labels\n // Passing null title text to Plotly results in incorrect axis position, DH-9164\n var label = (_axis$label = axis.label) !== null && _axis$label !== void 0 ? _axis$label : '';\n if (layoutAxis.title !== undefined && typeof layoutAxis.title !== 'string') {\n layoutAxis.title.text = label;\n } else {\n layoutAxis.title = {\n text: label\n };\n }\n if (axis.log) {\n layoutAxis.type = 'log';\n }\n layoutAxis.side = this.getAxisSide(axis.position);\n if (axisIndex > 0) {\n var _this$getAxisProperty, _axisPositionMap$get2;\n layoutAxis.overlaying = (_this$getAxisProperty = this.getAxisPropertyName(axis.type)) !== null && _this$getAxisProperty !== void 0 ? _this$getAxisProperty : undefined;\n var positionAxes = (_axisPositionMap$get2 = axisPositionMap.get(axis.position)) !== null && _axisPositionMap$get2 !== void 0 ? _axisPositionMap$get2 : [];\n var sideIndex = positionAxes.indexOf(axis);\n if (sideIndex > 0) {\n layoutAxis.anchor = 'free';\n if (axis.position === dh.plot.AxisPosition.RIGHT) {\n layoutAxis.position = bounds.right + (sideIndex - positionAxes.length + 1) * axisSize;\n } else if (axis.position === dh.plot.AxisPosition.TOP) {\n layoutAxis.position = bounds.top + (sideIndex - positionAxes.length + 1) * axisSize;\n } else if (axis.position === dh.plot.AxisPosition.BOTTOM) {\n layoutAxis.position = bounds.bottom + (positionAxes.length - sideIndex + 1) * axisSize;\n } else if (axis.position === dh.plot.AxisPosition.LEFT) {\n layoutAxis.position = bounds.left + (positionAxes.length - sideIndex + 1) * axisSize;\n }\n }\n } else if (axis.type === dh.plot.AxisType.X) {\n var leftAxes = axisPositionMap.get(dh.plot.AxisPosition.LEFT) || [];\n var rightAxes = axisPositionMap.get(dh.plot.AxisPosition.RIGHT) || [];\n var left = Math.max(bounds.left, bounds.left + (leftAxes.length - 1) * yAxisSize);\n var right = Math.min(bounds.right - (rightAxes.length - 1) * yAxisSize, bounds.right);\n layoutAxis.domain = [left, right];\n } else if (axis.type === dh.plot.AxisType.Y) {\n var bottomAxes = axisPositionMap.get(dh.plot.AxisPosition.BOTTOM) || [];\n var topAxes = axisPositionMap.get(dh.plot.AxisPosition.TOP) || [];\n var bottom = Math.max(bounds.bottom, bounds.bottom + (bottomAxes.length - 1) * xAxisSize);\n var top = Math.min(bounds.top - (topAxes.length - 1) * xAxisSize, bounds.top);\n layoutAxis.domain = [bottom, top];\n }\n\n // autorangeoptions exists in plotly.js but not in the types\n // axis.range only applies to the initial axis range, can't handle specifying min or max independently,\n // and cannot be returned to if the user changes the range via interaction\n // minallowed and maxallowed can be set independently and can be returned to if the user changes\n // the range via interaction\n var {\n minRange,\n maxRange,\n log: logAxis\n } = axis;\n if (!Number.isNaN(minRange) || !Number.isNaN(maxRange)) {\n layoutAxis.autorangeoptions = {};\n if (!Number.isNaN(minRange)) {\n layoutAxis.autorangeoptions.minallowed = logAxis ? Math.log10(minRange) : minRange;\n }\n if (!Number.isNaN(maxRange)) {\n layoutAxis.autorangeoptions.maxallowed = logAxis ? Math.log10(maxRange) : maxRange;\n }\n }\n }\n\n /**\n * Creates the bounds for the periods specified.\n * For example, if you pass in [['09:00', '17:00']], it will return [17, 9] (closing at 5pm, opening at 9am the next day)\n * If you pass [['09:00', '12:00'], ['13:00', '17:00']], it will return [12, 13] (closing at noon, opening at 1pm) and [17, 9] (closing at 5pm, opening at 9am the next day)\n * @param periods Periods to map\n * @param timeZoneDiff Time zone difference in hours\n * @returns Bounds for the periods in plotly format\n */\n // eslint-disable-next-line class-methods-use-this\n createBoundsFromPeriods(periods) {\n var timeZoneDiff = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n if (periods.length === 0) {\n return [];\n }\n var numberPeriods = periods.map(period => [(ChartUtils.periodToDecimal(period.open) + timeZoneDiff) % 24, (ChartUtils.periodToDecimal(period.close) + timeZoneDiff) % 24]).sort((a, b) => a[0] - b[0]);\n var bounds = [];\n for (var i = 0; i < numberPeriods.length; i += 1) {\n var period = numberPeriods[i];\n var nextPeriod = numberPeriods[(i + 1) % numberPeriods.length];\n bounds.push([period[1], nextPeriod[0]]);\n }\n return bounds;\n }\n\n /**\n * Creates range breaks for plotly from business periods.\n * @param periods Business periods to create the breaks for\n * @param timeZoneDiff Time zone difference in hours\n * @returns Plotly range breaks for the business periods\n */\n createBreaksFromPeriods(periods) {\n var timeZoneDiff = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var bounds = this.createBoundsFromPeriods(periods, timeZoneDiff);\n return bounds.map(bound => ({\n pattern: 'hour',\n bounds: bound\n }));\n }\n\n /**\n * Creates range break bounds for plotly from business days.\n * For example a standard business week of ['MONDAY','TUESDAY','WEDNESDAY','THURSDAY','FRIDAY']\n * will result in [[6,1]] meaning close on Saturday and open on Monday.\n * If you remove Wednesday from the array, then you get two closures [[6, 1], [3, 4]]\n *\n * @param businessDays the days to display on the x-axis\n */\n createBoundsFromDays(businessDays) {\n var weekLength = this.daysOfWeek.length;\n // No breaks if all days are business days\n if (businessDays.length === weekLength) {\n return [];\n }\n var businessDaysInt = businessDays.map(day => this.daysOfWeek.indexOf(day));\n var businessDaysSet = new Set(businessDaysInt);\n\n // These are the days when business is closed (e.g. Saturday to start the weekend)\n var closedDays = new Set();\n for (var i = 0; i < weekLength; i += 1) {\n if (!businessDaysSet.has(i) && businessDaysSet.has((i - 1 + weekLength) % weekLength)) {\n closedDays.add(i);\n }\n }\n var boundsArray = [];\n // For each close day, find the next open day\n closedDays.forEach(closedDay => {\n for (var _i = 0; _i < weekLength; _i += 1) {\n var adjustedDay = (closedDay + _i) % weekLength;\n if (businessDaysSet.has(adjustedDay)) {\n boundsArray.push([closedDay, adjustedDay]);\n return;\n }\n }\n throw new Error(\"Unable to find open day for closed day \".concat(closedDay, \", businessDays: \").concat(businessDays));\n });\n return boundsArray;\n }\n\n /**\n * Breaks in plotly for business days\n * @param businessDays Business days to create the breaks for\n * @returns Plotly range breaks for the business days\n */\n createBreaksFromDays(businessDays) {\n var bounds = this.createBoundsFromDays(businessDays);\n return bounds.map(bound => ({\n pattern: 'day of week',\n bounds: bound\n }));\n }\n\n /**\n * Creates range breaks for plotly from a business calendar.\n * @param businessCalendar Calendar to create the breaks from\n * @param formatter Formatter to use for time zones\n * @returns Plotly Rangebreaks for the business calendar\n */\n createRangeBreaksFromBusinessCalendar(businessCalendar, formatter) {\n var rangebreaks = [];\n var {\n businessPeriods,\n businessDays,\n holidays,\n timeZone: calendarTimeZone\n } = businessCalendar;\n var typeFormatter = formatter === null || formatter === void 0 ? void 0 : formatter.getColumnTypeFormatter(BUSINESS_COLUMN_TYPE);\n var formatterTimeZone;\n if (isDateTimeColumnFormatter(typeFormatter)) {\n formatterTimeZone = typeFormatter.dhTimeZone;\n }\n var timeZoneDiff = ChartUtils.getTimeZoneDiff(calendarTimeZone, formatterTimeZone);\n if (holidays.length > 0) {\n rangebreaks.push(...this.createRangeBreakValuesFromHolidays(holidays, calendarTimeZone, formatterTimeZone, businessCalendar));\n }\n rangebreaks.push(...this.createBreaksFromPeriods(businessPeriods, timeZoneDiff));\n rangebreaks.push(...this.createBreaksFromDays(businessDays));\n return rangebreaks;\n }\n\n /**\n * Creates an array of range breaks for all holidays.\n *\n * @param holidays an array of holidays\n * @param calendarTimeZone the time zone for the business calendar\n * @param formatterTimeZone the time zone for the formatter\n * @param calendar the calendar the holidays are from\n */\n createRangeBreakValuesFromHolidays(holidays, calendarTimeZone, formatterTimeZone, calendar) {\n var fullHolidays = [];\n var partialHolidays = [];\n holidays.forEach(holiday => {\n if (holiday.businessPeriods.length > 0) {\n partialHolidays.push(...this.createPartialHoliday(holiday, calendarTimeZone, formatterTimeZone, calendar));\n } else {\n fullHolidays.push(this.createFullHoliday(holiday, calendarTimeZone, formatterTimeZone));\n }\n });\n return [{\n values: fullHolidays\n }, ...partialHolidays];\n }\n\n /**\n * Creates the range break value for a full holiday. A full holiday is day that has no business periods.\n *\n * @param holiday the full holiday\n * @param calendarTimeZone the time zone for the business calendar\n * @param formatterTimeZone the time zone for the formatter\n */\n createFullHoliday(holiday, calendarTimeZone, formatterTimeZone) {\n return this.adjustDateForTimeZone(\"\".concat(holiday.date.toString(), \" 00:00:00.000000\"), calendarTimeZone, formatterTimeZone);\n }\n\n /**\n * Creates the range break for a partial holiday. A partial holiday is holiday with business periods\n * that are different than the default business periods.\n *\n * @param holiday the partial holiday\n * @param calendarTimeZone the time zone for the business calendar\n * @param formatterTimeZone the time zone for the formatter\n * @param calendar the calendar the holiday is from. Used to check against the default business periods to ensure this holiday needs to be specified\n *\n * @returns an array of range breaks for the partial holiday\n */\n createPartialHoliday(holiday, calendarTimeZone, formatterTimeZone, calendar) {\n var _calendar$businessPer;\n if (holiday.businessPeriods.length === 0) {\n return [];\n }\n var dateString = holiday.date.toString();\n\n // First check that the holiday is on a business day. If it's not, we can ignore it\n if (calendar) {\n var dayOfWeek = new Date(dateString).getDay();\n var isBusinessDay = calendar.businessDays.includes(this.daysOfWeek[dayOfWeek]);\n if (!isBusinessDay) {\n return [];\n }\n }\n var closedPeriods = ChartUtils.createClosedRangesForPartialHoliday(holiday.businessPeriods, (_calendar$businessPer = calendar === null || calendar === void 0 ? void 0 : calendar.businessPeriods) !== null && _calendar$businessPer !== void 0 ? _calendar$businessPer : []);\n var rangeBreaks = [];\n for (var i = 0; i < closedPeriods.length; i += 1) {\n var [closeStart, closeEnd] = closedPeriods[i];\n // Skip over any periods where start and close are the same (zero hours)\n if (closeStart !== closeEnd) {\n var values = [this.adjustDateForTimeZone(\"\".concat(dateString, \" \").concat(ChartUtils.decimalToPeriod(closeStart), \":00.000000\"), calendarTimeZone, formatterTimeZone)];\n var dvalue = MILLIS_PER_HOUR * (closeEnd - closeStart);\n rangeBreaks.push({\n values,\n dvalue\n });\n }\n }\n return rangeBreaks;\n }\n\n /**\n * Adjusts a date string from the calendar time zone to the formatter time zone.\n *\n * @param dateString the date string\n * @param calendarTimeZone the time zone for the business calendar\n * @param formatterTimeZone the time zone for the formatter\n */\n adjustDateForTimeZone(dateString, calendarTimeZone, formatterTimeZone) {\n if (formatterTimeZone && formatterTimeZone.standardOffset !== calendarTimeZone.standardOffset) {\n return this.unwrapValue(this.wrapValue(dateString, BUSINESS_COLUMN_TYPE, calendarTimeZone), formatterTimeZone);\n }\n return dateString;\n }\n\n /**\n * Creates the Figure settings from the Chart Builder settings\n * This should be deprecated at some point, and have Chart Builder create the figure settings directly.\n * This logic will still need to exist to translate existing charts, but could be part of a migration script\n * to translate the data.\n * Change when we decide to add more functionality to the Chart Builder.\n * @param settings The chart builder settings\n * @param settings.title The title for this figure\n * @param settings.xAxis The name of the column to use for the x-axis\n * @param settings.series The name of the columns to use for the series of this figure\n * @param settings.type The plot style for this figure\n */\n makeFigureSettings(settings, table) {\n var {\n dh\n } = this;\n var {\n series,\n xAxis: settingsAxis,\n type\n } = settings;\n var title = ChartUtils.titleFromSettings(settings);\n var xAxis = {\n formatType: \"\".concat(dh.plot.AxisFormatType.NUMBER),\n type: \"\".concat(dh.plot.AxisType.X),\n position: \"\".concat(dh.plot.AxisPosition.BOTTOM)\n };\n var yAxis = {\n formatType: \"\".concat(dh.plot.AxisFormatType.NUMBER),\n type: \"\".concat(dh.plot.AxisType.Y),\n position: \"\".concat(dh.plot.AxisPosition.LEFT)\n };\n return {\n charts: [{\n chartType: \"\".concat(dh.plot.ChartType.XY),\n axes: [xAxis, yAxis],\n series: (series !== null && series !== void 0 ? series : []).map(name => ({\n plotStyle: \"\".concat(type),\n name,\n dataSources: [{\n type: \"\".concat(dh.plot.SourceType.X),\n columnName: settingsAxis !== null && settingsAxis !== void 0 ? settingsAxis : '',\n axis: xAxis,\n table\n }, {\n type: \"\".concat(dh.plot.SourceType.Y),\n columnName: name,\n axis: yAxis,\n table\n }]\n }))\n }],\n title\n };\n }\n\n /**\n * Unwraps a value provided from API to a value plotly can understand\n * Eg. Unwraps DateWrapper, LongWrapper objects.\n */\n unwrapValue(value, timeZone) {\n var {\n dh\n } = this;\n if (value != null) {\n if (isDateWrapper(value)) {\n return dh.i18n.DateTimeFormat.format(ChartUtils.DATE_FORMAT, value, timeZone);\n }\n if (isLongWrapper(value)) {\n return value.asNumber();\n }\n }\n return value;\n }\n\n /**\n *\n * @param value The value to wrap up\n * @param columnType The type of column this value is from\n * @param timeZone The time zone if applicable\n */\n wrapValue(value, columnType) {\n var timeZone = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var {\n dh\n } = this;\n if (TableUtils.isDateType(columnType) && typeof value === 'string') {\n // Need to limit the format to the actual length of the string range set in plotly\n // Otherwise parse will fail\n var text = value;\n var format = ChartUtils.DATE_FORMAT.substr(0, value.length);\n var date = dh.i18n.DateTimeFormat.parse(format, text);\n if (!timeZone) {\n return date;\n }\n\n // IDS-5994 Due to date parsing, time zone, and daylight savings shenanigans, we need\n // to pass the actual offset with the time to have it parse correctly.\n // However, the offset can change based on the date because of Daylight Savings\n // So we end up parsing the date multiple times. And curse daylight savings.\n var tzFormat = \"\".concat(format, \" Z\");\n var estimatedOffset = dh.i18n.DateTimeFormat.format('Z', date, timeZone);\n var estimatedDate = dh.i18n.DateTimeFormat.parse(tzFormat, \"\".concat(text, \" \").concat(estimatedOffset));\n var offset = dh.i18n.DateTimeFormat.format('Z', estimatedDate, timeZone);\n return dh.i18n.DateTimeFormat.parse(tzFormat, \"\".concat(text, \" \").concat(offset));\n }\n return value;\n }\n makeLayoutAxis(type, theme) {\n var {\n dh\n } = this;\n var axis = {\n automargin: true,\n gridcolor: theme.gridcolor,\n linecolor: theme.linecolor,\n rangeslider: {\n visible: false\n },\n showline: true,\n ticks: 'outside',\n ticklen: 5,\n // act as padding, can't find a tick padding\n tickcolor: theme.paper_bgcolor,\n // hide ticks as padding\n tickfont: {\n color: theme.zerolinecolor\n },\n title: {\n font: {\n color: theme.title_color\n }\n },\n legend: {\n font: {\n color: theme.legend_color\n }\n }\n };\n if (type === dh.plot.AxisType.X) {\n Object.assign(axis, {\n showgrid: true\n });\n } else if (type === dh.plot.AxisType.Y) {\n Object.assign(axis, {\n zerolinecolor: theme.zerolinecolor,\n zerolinewidth: 2\n });\n }\n return axis;\n }\n\n /**\n * Creates a plotly layout template object based on a given theme.\n * See https://plotly.com/javascript/reference/layout/#layout-template\n * @param theme The theme to use for the layout template\n * @returns The layout template object\n */\n makeDefaultTemplate(theme) {\n /* eslint-disable camelcase */\n var {\n error_band_line_color,\n ohlc_increasing,\n ohlc_decreasing,\n title_color,\n indicator_increasing,\n indicator_decreasing,\n indicator_gauge\n } = theme;\n return {\n data: {\n bar: [{\n marker: {\n line: {\n color: 'transparent'\n }\n }\n }],\n scatter: [{\n error_x: {\n color: error_band_line_color\n },\n error_y: {\n color: error_band_line_color\n }\n }],\n ohlc: [{\n increasing: {\n line: {\n color: ohlc_increasing\n }\n },\n decreasing: {\n line: {\n color: ohlc_decreasing\n }\n }\n }],\n pie: [{\n outsidetextfont: {\n color: title_color\n }\n }],\n treemap: [{\n outsidetextfont: {\n color: title_color\n }\n }],\n indicator: [{\n title: {\n font: {\n color: title_color\n }\n },\n delta: {\n decreasing: {\n color: indicator_decreasing\n },\n increasing: {\n color: indicator_increasing\n }\n },\n gauge: {\n bar: {\n color: indicator_gauge\n }\n }\n }]\n },\n /* eslint-enable camelcase */\n layout: this.makeDefaultLayout(theme)\n };\n }\n\n /**\n * Creates a plotly layout object based on a given theme.\n * See https://plotly.com/javascript/reference/layout/\n * @param theme The theme to use for the layout\n */\n makeDefaultLayout(theme) {\n var {\n dh\n } = this;\n var {\n /* Used as top level properties of `Layout` */\n /* eslint-disable camelcase */\n paper_bgcolor,\n plot_bgcolor,\n title_color,\n coastline_color,\n land_color,\n ocean_color,\n lake_color,\n river_color\n /* eslint-disable camelcase */\n } = theme;\n var layout = {\n paper_bgcolor,\n plot_bgcolor,\n autosize: true,\n colorway: ChartUtils.normalizeColorway(theme === null || theme === void 0 ? void 0 : theme.colorway),\n font: {\n family: \"'Fira Sans', sans-serif\",\n color: title_color\n },\n title: {\n font: {\n color: title_color\n },\n xanchor: 'center',\n xref: 'paper',\n yanchor: 'top',\n pad: _objectSpread({}, ChartUtils.DEFAULT_TITLE_PADDING),\n y: 1\n },\n legend: {\n font: {\n color: title_color\n }\n },\n margin: _objectSpread({}, ChartUtils.DEFAULT_MARGIN),\n xaxis: this.makeLayoutAxis(dh.plot.AxisType.X, theme),\n yaxis: this.makeLayoutAxis(dh.plot.AxisType.Y, theme),\n polar: {\n angularaxis: this.makeLayoutAxis(dh.plot.AxisType.SHAPE, theme),\n radialaxis: this.makeLayoutAxis(dh.plot.AxisType.SHAPE, theme),\n bgcolor: theme.plot_bgcolor\n },\n scene: {\n xaxis: this.makeLayoutAxis(dh.plot.AxisType.X, theme),\n yaxis: this.makeLayoutAxis(dh.plot.AxisType.Y, theme),\n zaxis: this.makeLayoutAxis(null, theme)\n },\n geo: {\n showcoastlines: true,\n showframe: false,\n showland: true,\n showocean: true,\n showlakes: true,\n showrivers: true,\n bgcolor: paper_bgcolor,\n coastlinecolor: coastline_color,\n landcolor: land_color,\n oceancolor: ocean_color,\n lakecolor: lake_color,\n rivercolor: river_color\n }\n };\n layout.datarevision = 0;\n return layout;\n }\n\n /**\n * Hydrate settings from a JSONable object\n * @param settings Dehydrated settings\n */\n hydrateSettings(settings) {\n var {\n dh\n } = this;\n return _objectSpread(_objectSpread({}, settings), {}, {\n type: settings.type != null ? dh.plot.SeriesPlotStyle[settings.type] : undefined\n });\n }\n}\n_defineProperty(ChartUtils, \"DEFAULT_AXIS_SIZE\", 0.15);\n_defineProperty(ChartUtils, \"MIN_AXIS_SIZE\", 0.025);\n_defineProperty(ChartUtils, \"MAX_AXIS_SIZE\", 0.2);\n_defineProperty(ChartUtils, \"AXIS_SIZE_PX\", 75);\n_defineProperty(ChartUtils, \"LEGEND_WIDTH_PX\", 50);\n_defineProperty(ChartUtils, \"MAX_LEGEND_SIZE\", 0.25);\n_defineProperty(ChartUtils, \"ORIENTATION\", Object.freeze({\n HORIZONTAL: 'h',\n VERTICAL: 'v'\n}));\n_defineProperty(ChartUtils, \"DATE_FORMAT\", 'yyyy-MM-dd HH:mm:ss.SSSSSS');\n_defineProperty(ChartUtils, \"DEFAULT_MARGIN\", Object.freeze({\n l: 60,\n r: 50,\n t: 30,\n b: 60,\n pad: 0\n}));\n_defineProperty(ChartUtils, \"DEFAULT_TITLE_PADDING\", Object.freeze({\n t: 8\n}));\n_defineProperty(ChartUtils, \"SUBTITLE_LINE_HEIGHT\", 25);\n_defineProperty(ChartUtils, \"DEFAULT_MARKER_SIZE\", 6);\n_defineProperty(ChartUtils, \"MODE_MARKERS\", 'markers');\n_defineProperty(ChartUtils, \"MODE_LINES\", 'lines');\nexport default ChartUtils;\n//# sourceMappingURL=ChartUtils.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint class-methods-use-this: \"off\" */\n/* eslint no-unused-vars: \"off\" */\n\n/**\n * Model for a Chart\n * All of these methods should return very quickly.\n * If data needs to be loaded asynchronously, return something immediately, then trigger an event for the chart to refresh.\n */\nclass ChartModel {\n constructor(dh) {\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"listeners\", void 0);\n /** Formatter settings for the chart, such as how to format dates and numbers */\n _defineProperty(this, \"formatter\", void 0);\n _defineProperty(this, \"renderOptions\", void 0);\n _defineProperty(this, \"rect\", void 0);\n _defineProperty(this, \"isDownsamplingDisabled\", void 0);\n _defineProperty(this, \"title\", void 0);\n this.dh = dh;\n this.listeners = [];\n this.isDownsamplingDisabled = false;\n }\n getData() {\n return [];\n }\n getDefaultTitle() {\n return '';\n }\n getLayout() {\n return {};\n }\n getFilterColumnMap() {\n return new Map();\n }\n isFilterRequired() {\n return false;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n setFilter(filter) {}\n\n /**\n * Close this model, clean up any underlying subscriptions\n */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n close() {}\n\n /**\n * Set the formatter to use when charting the data.\n * @param formatter The formatter to use to format the charting data\n */\n setFormatter(formatter) {\n this.formatter = formatter;\n }\n\n /**\n * Set additional options for rendering the chart\n * @param renderOptions Options for rendering the chart\n */\n setRenderOptions(renderOptions) {\n this.renderOptions = renderOptions;\n }\n\n /**\n * Disable downsampling\n * @param isDownsamplingDisabled True if downsampling should be disabled\n */\n setDownsamplingDisabled(isDownsamplingDisabled) {\n this.isDownsamplingDisabled = isDownsamplingDisabled;\n }\n\n /**\n * Set the dimensions of the plot. May be needed to evaluate some of the percents\n * @param rect The bounding rectangle of the plot\n */\n setDimensions(rect) {\n this.rect = rect;\n }\n setTitle(title) {\n this.title = title;\n }\n\n /**\n * Subscribe to this ChartModel and start listening for all events.\n * @param callback Callback when an event occurs\n */\n subscribe(callback) {\n this.listeners.push(callback);\n }\n unsubscribe(callback) {\n this.listeners = this.listeners.filter(listener => listener !== callback);\n }\n fireEvent(event) {\n for (var i = 0; i < this.listeners.length; i += 1) {\n this.listeners[i](event);\n }\n }\n fireUpdate(data) {\n this.fireEvent(new CustomEvent(ChartModel.EVENT_UPDATED, {\n detail: data\n }));\n }\n fireDisconnect() {\n this.fireEvent(new CustomEvent(ChartModel.EVENT_DISCONNECT));\n }\n fireReconnect() {\n this.fireEvent(new CustomEvent(ChartModel.EVENT_RECONNECT));\n }\n fireDownsampleStart(detail) {\n this.fireEvent(new CustomEvent(ChartModel.EVENT_DOWNSAMPLESTARTED, {\n detail\n }));\n }\n fireDownsampleFinish(detail) {\n this.fireEvent(new CustomEvent(ChartModel.EVENT_DOWNSAMPLEFINISHED, {\n detail\n }));\n }\n fireDownsampleFail(detail) {\n this.fireEvent(new CustomEvent(ChartModel.EVENT_DOWNSAMPLEFAILED, {\n detail\n }));\n }\n fireDownsampleNeeded(detail) {\n this.fireEvent(new CustomEvent(ChartModel.EVENT_DOWNSAMPLENEEDED, {\n detail\n }));\n }\n fireLoadFinished() {\n this.fireEvent(new CustomEvent(ChartModel.EVENT_LOADFINISHED));\n }\n fireError(detail) {\n this.fireEvent(new CustomEvent(ChartModel.EVENT_ERROR, {\n detail\n }));\n }\n fireBlocker(detail) {\n this.fireEvent(new CustomEvent(ChartModel.EVENT_BLOCKER, {\n detail\n }));\n }\n fireBlockerClear() {\n this.fireEvent(new CustomEvent(ChartModel.EVENT_BLOCKER_CLEAR));\n }\n fireLayoutUpdated(detail) {\n this.fireEvent(new CustomEvent(ChartModel.EVENT_LAYOUT_UPDATED, {\n detail\n }));\n }\n}\n_defineProperty(ChartModel, \"EVENT_UPDATED\", 'ChartModel.EVENT_UPDATED');\n_defineProperty(ChartModel, \"EVENT_DISCONNECT\", 'ChartModel.EVENT_DISCONNECT');\n_defineProperty(ChartModel, \"EVENT_RECONNECT\", 'ChartModel.EVENT_RECONNECT');\n_defineProperty(ChartModel, \"EVENT_DOWNSAMPLESTARTED\", 'ChartModel.EVENT_DOWNSAMPLESTARTED');\n_defineProperty(ChartModel, \"EVENT_DOWNSAMPLEFINISHED\", 'ChartModel.EVENT_DOWNSAMPLEFINISHED');\n_defineProperty(ChartModel, \"EVENT_DOWNSAMPLEFAILED\", 'ChartModel.EVENT_DOWNSAMPLEFAILED');\n_defineProperty(ChartModel, \"EVENT_DOWNSAMPLENEEDED\", 'ChartModel.EVENT_DOWNSAMPLENEEDED');\n_defineProperty(ChartModel, \"EVENT_LOADFINISHED\", 'ChartModel.EVENT_LOADFINISHED');\n_defineProperty(ChartModel, \"EVENT_ERROR\", 'ChartModel.EVENT_ERROR');\n_defineProperty(ChartModel, \"EVENT_BLOCKER\", 'ChartModel.EVENT_BLOCKER');\n_defineProperty(ChartModel, \"EVENT_BLOCKER_CLEAR\", 'ChartModel.EVENT_BLOCKER_CLEAR');\n_defineProperty(ChartModel, \"EVENT_LAYOUT_UPDATED\", 'ChartModel.EVENT_LAYOUT_UPDATED');\nexport default ChartModel;\n//# sourceMappingURL=ChartModel.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport set from 'lodash.set';\nimport Log from '@deephaven/log';\nimport ChartModel from \"./ChartModel.js\";\nimport ChartUtils from \"./ChartUtils.js\";\nvar log = Log.module('FigureChartModel');\n\n/**\n * Takes a Figure object from a widget to make a model for a chart\n */\nclass FigureChartModel extends ChartModel {\n /**\n * @param dh JSAPI instance\n * @param figure The figure object created by the API\n * @param settings Chart settings\n */\n constructor(dh, figure) {\n var _this;\n var settings = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n super(dh);\n _this = this;\n _defineProperty(this, \"chartUtils\", void 0);\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"figure\", void 0);\n _defineProperty(this, \"settings\", void 0);\n _defineProperty(this, \"data\", void 0);\n _defineProperty(this, \"layout\", void 0);\n _defineProperty(this, \"seriesDataMap\", void 0);\n _defineProperty(this, \"pendingSeries\", void 0);\n _defineProperty(this, \"oneClicks\", void 0);\n _defineProperty(this, \"filterColumnMap\", void 0);\n _defineProperty(this, \"lastFilter\", void 0);\n _defineProperty(this, \"isConnected\", void 0);\n // Assume figure is connected to start\n _defineProperty(this, \"seriesToProcess\", void 0);\n // We need to debounce adding series so we subscribe to them all in the same tick\n // This should no longer be necessary after IDS-5049 lands\n _defineProperty(this, \"addPendingSeries\", debounce(() => {\n var axisTypeMap = ChartUtils.getAxisTypeMap(this.figure);\n var {\n pendingSeries\n } = this;\n var _loop = function _loop() {\n var _chart$showLegend;\n var series = pendingSeries[i];\n var chart = _this.figure.charts.find(c => c.series.includes(series));\n _this.addSeries(series, axisTypeMap, (_chart$showLegend = chart === null || chart === void 0 ? void 0 : chart.showLegend) !== null && _chart$showLegend !== void 0 ? _chart$showLegend : null);\n series.subscribe();\n // We'll get an update with the data after subscribing\n };\n for (var i = 0; i < pendingSeries.length; i += 1) {\n _loop();\n }\n this.pendingSeries = [];\n }, FigureChartModel.ADD_SERIES_DEBOUNCE));\n _defineProperty(this, \"getTimeZone\", memoize((columnType, formatter) => {\n if (formatter != null) {\n var dataFormatter = formatter.getColumnTypeFormatter(columnType);\n if (dataFormatter != null) {\n return dataFormatter.dhTimeZone;\n }\n }\n return undefined;\n }, {\n max: 100\n }));\n _defineProperty(this, \"getValueTranslator\", memoize((columnType, formatter) => {\n var timeZone = this.getTimeZone(columnType, formatter);\n return value => this.chartUtils.unwrapValue(value, timeZone);\n }, {\n max: 100\n }));\n /** Gets the parser for a value with the provided column type */\n _defineProperty(this, \"getValueParser\", memoize((columnType, formatter) => {\n var timeZone = this.getTimeZone(columnType, formatter);\n return value => this.chartUtils.wrapValue(value, columnType, timeZone);\n }, {\n max: 100\n }));\n /**\n * Gets the range parser for a particular column type\n */\n _defineProperty(this, \"getRangeParser\", memoize((columnType, formatter) => range => {\n var [rangeStart, rangeEnd] = range;\n var valueParser = this.getValueParser(columnType, formatter);\n rangeStart = valueParser(rangeStart);\n rangeEnd = valueParser(rangeEnd);\n return [rangeStart, rangeEnd];\n }, {\n max: 100\n }));\n /**\n * Gets the parser for parsing the range from an axis within the given chart\n */\n _defineProperty(this, \"getAxisRangeParser\", memoize((chart, formatter) => axis => {\n var source = ChartUtils.getSourceForAxis(chart, axis);\n if (source != null) {\n return this.getRangeParser(source.columnType, formatter);\n }\n return range => range;\n }, {\n max: 100\n }));\n this.handleFigureUpdated = this.handleFigureUpdated.bind(this);\n this.handleFigureDisconnected = this.handleFigureDisconnected.bind(this);\n this.handleFigureReconnected = this.handleFigureReconnected.bind(this);\n this.handleFigureSeriesAdded = this.handleFigureSeriesAdded.bind(this);\n this.handleDownsampleStart = this.handleDownsampleStart.bind(this);\n this.handleDownsampleFinish = this.handleDownsampleFinish.bind(this);\n this.handleDownsampleFail = this.handleDownsampleFail.bind(this);\n this.handleDownsampleNeeded = this.handleDownsampleNeeded.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.dh = dh;\n this.chartUtils = new ChartUtils(dh);\n this.figure = figure;\n this.settings = settings;\n this.data = [];\n this.layout = {\n grid: {\n rows: figure.rows,\n columns: figure.cols,\n pattern: 'independent'\n }\n };\n this.seriesDataMap = new Map();\n this.pendingSeries = [];\n this.oneClicks = [];\n this.filterColumnMap = new Map();\n this.lastFilter = new Map();\n this.isConnected = true; // Assume figure is connected to start\n this.seriesToProcess = new Set();\n this.setTitle(this.getDefaultTitle());\n this.initAllSeries();\n this.updateAxisPositions();\n this.startListeningFigure();\n }\n close() {\n this.figure.close();\n this.addPendingSeries.cancel();\n this.stopListeningFigure();\n }\n getDefaultTitle() {\n if (this.figure.title != null && this.figure.title.length > 0) {\n return this.figure.title;\n }\n if (this.figure.charts.length === 1) {\n var _this$figure$charts$;\n return (_this$figure$charts$ = this.figure.charts[0].title) !== null && _this$figure$charts$ !== void 0 ? _this$figure$charts$ : '';\n }\n return '';\n }\n initAllSeries() {\n var _this2 = this;\n this.oneClicks = [];\n this.filterColumnMap.clear();\n var {\n charts\n } = this.figure;\n var axisTypeMap = ChartUtils.getAxisTypeMap(this.figure);\n var activeSeriesNames = [];\n this.seriesToProcess = new Set();\n var _loop2 = function _loop2() {\n var chart = charts[i];\n for (var j = 0; j < chart.series.length; j += 1) {\n var series = chart.series[j];\n activeSeriesNames.push(series.name);\n _this2.addSeries(series, axisTypeMap, chart.showLegend);\n }\n\n // Need to add the chart titles as annotations if they are set\n var {\n axes,\n title\n } = chart;\n if (title != null && title.length > 0 && (charts.length > 1 || _this2.figure.title != null)) {\n var xAxis = axes.find(axis => axis.type === _this2.dh.plot.AxisType.X);\n var yAxis = axes.find(axis => axis.type === _this2.dh.plot.AxisType.Y);\n if (xAxis == null || yAxis == null) {\n log.warn('Chart title provided, but unknown how to map to the correct axes for this chart type', chart);\n } else {\n var _axisTypeMap$get$find, _axisTypeMap$get, _axisTypeMap$get$find2, _axisTypeMap$get2;\n var xAxisIndex = ((_axisTypeMap$get$find = (_axisTypeMap$get = axisTypeMap.get(xAxis.type)) === null || _axisTypeMap$get === void 0 ? void 0 : _axisTypeMap$get.findIndex(a => a === xAxis)) !== null && _axisTypeMap$get$find !== void 0 ? _axisTypeMap$get$find : 0) + 1;\n var yAxisIndex = ((_axisTypeMap$get$find2 = (_axisTypeMap$get2 = axisTypeMap.get(yAxis.type)) === null || _axisTypeMap$get2 === void 0 ? void 0 : _axisTypeMap$get2.findIndex(a => a === yAxis)) !== null && _axisTypeMap$get$find2 !== void 0 ? _axisTypeMap$get$find2 : 0) + 1;\n var annotation = {\n align: 'center',\n x: 0.5,\n y: 1,\n yshift: 17,\n text: title,\n showarrow: false,\n // Typing is incorrect in Plotly for this, as it doesn't seem to be typed for the \"domain\" part: https://plotly.com/javascript/reference/layout/annotations/#layout-annotations-items-annotation-xref\n xref: \"x\".concat(xAxisIndex, \" domain\"),\n yref: \"y\".concat(yAxisIndex, \" domain\")\n };\n if (_this2.layout.annotations == null) {\n _this2.layout.annotations = [annotation];\n } else {\n _this2.layout.annotations.push(annotation);\n }\n }\n }\n };\n for (var i = 0; i < charts.length; i += 1) {\n _loop2();\n }\n\n // Remove any series that no longer exist\n var allSeriesNames = [...this.seriesDataMap.keys()];\n var inactiveSeriesNames = allSeriesNames.filter(seriesName => activeSeriesNames.indexOf(seriesName) < 0);\n for (var _i = 0; _i < inactiveSeriesNames.length; _i += 1) {\n var seriesName = inactiveSeriesNames[_i];\n this.seriesDataMap.delete(seriesName);\n }\n }\n\n /**\n * Add a series to the model\n * @param series Series object to add\n * @param axisTypeMap Map of axis type to the axes in this Figure\n * @param showLegend Whether this series should show the legend or not\n */\n addSeries(series, axisTypeMap, showLegend) {\n var _this$renderOptions$w, _this$renderOptions;\n var {\n dh\n } = this;\n var seriesData = this.chartUtils.makeSeriesDataFromSeries(series, axisTypeMap, ChartUtils.getSeriesVisibility(series.name, this.settings), showLegend, (_this$renderOptions$w = (_this$renderOptions = this.renderOptions) === null || _this$renderOptions === void 0 ? void 0 : _this$renderOptions.webgl) !== null && _this$renderOptions$w !== void 0 ? _this$renderOptions$w : true);\n this.seriesDataMap.set(series.name, seriesData);\n this.seriesToProcess.add(series.name);\n this.data = [...this.seriesDataMap.values()];\n if (series.plotStyle === dh.plot.SeriesPlotStyle.STACKED_BAR) {\n this.layout.barmode = 'stack';\n } else if (series.plotStyle === dh.plot.SeriesPlotStyle.PIE) {\n this.layout.hiddenlabels = ChartUtils.getHiddenLabels(this.settings);\n }\n\n // We only want to force hide the legend if there is only one series that is not a PIE\n // Right now this means that if the user only has one series, they cannot explicitly show the legend until deephaven-core#3254 is implemented\n // TODO: deephaven-core#3254, once done, this can be removed.\n this.layout.showlegend = this.data.length > 1 || series.plotStyle === dh.plot.SeriesPlotStyle.PIE ? showLegend !== null && showLegend !== void 0 ? showLegend : undefined : false;\n if (series.oneClick != null) {\n var {\n oneClick\n } = series;\n var {\n columns\n } = oneClick;\n for (var i = 0; i < columns.length; i += 1) {\n this.filterColumnMap.set(columns[i].name, columns[i]);\n }\n this.oneClicks.push(oneClick);\n }\n this.updateLayoutFormats();\n }\n subscribe(callback) {\n super.subscribe(callback);\n if (this.listeners.length === 1) {\n // Need to initialize the series here as we may have missed some series when not subscribed\n this.initAllSeries();\n this.subscribeFigure();\n }\n }\n unsubscribe(callback) {\n super.unsubscribe(callback);\n if (this.listeners.length === 0) {\n this.unsubscribeFigure();\n }\n }\n subscribeFigure() {\n if (!this.isConnected) {\n log.debug('Ignoring subscribe when figure in disconnected state');\n return;\n }\n this.figure.subscribe(this.isDownsamplingDisabled ? this.dh.plot.DownsampleOptions.DISABLE : this.dh.plot.DownsampleOptions.DEFAULT);\n if (this.figure.errors.length > 0) {\n log.error('Errors in figure', this.figure.errors);\n this.fireError(this.figure.errors);\n }\n }\n unsubscribeFigure() {\n this.figure.unsubscribe();\n }\n startListeningFigure() {\n var {\n dh\n } = this;\n this.figure.addEventListener(dh.plot.Figure.EVENT_UPDATED, this.handleFigureUpdated);\n this.figure.addEventListener(dh.plot.Figure.EVENT_SERIES_ADDED, this.handleFigureSeriesAdded);\n this.figure.addEventListener(dh.plot.Figure.EVENT_DISCONNECT, this.handleFigureDisconnected);\n this.figure.addEventListener(dh.plot.Figure.EVENT_RECONNECT, this.handleFigureReconnected);\n this.figure.addEventListener(dh.plot.Figure.EVENT_DOWNSAMPLESTARTED, this.handleDownsampleStart);\n this.figure.addEventListener(dh.plot.Figure.EVENT_DOWNSAMPLEFINISHED, this.handleDownsampleFinish);\n this.figure.addEventListener(dh.plot.Figure.EVENT_DOWNSAMPLEFAILED, this.handleDownsampleFail);\n this.figure.addEventListener(dh.plot.Figure.EVENT_DOWNSAMPLENEEDED, this.handleDownsampleNeeded);\n this.figure.addEventListener(dh.Client.EVENT_REQUEST_FAILED, this.handleRequestFailed);\n }\n stopListeningFigure() {\n var {\n dh\n } = this;\n this.figure.removeEventListener(dh.plot.Figure.EVENT_UPDATED, this.handleFigureUpdated);\n this.figure.removeEventListener(dh.plot.Figure.EVENT_SERIES_ADDED, this.handleFigureSeriesAdded);\n this.figure.removeEventListener(dh.plot.Figure.EVENT_DISCONNECT, this.handleFigureDisconnected);\n this.figure.removeEventListener(dh.plot.Figure.EVENT_RECONNECT, this.handleFigureReconnected);\n this.figure.removeEventListener(dh.plot.Figure.EVENT_DOWNSAMPLESTARTED, this.handleDownsampleStart);\n this.figure.removeEventListener(dh.plot.Figure.EVENT_DOWNSAMPLEFINISHED, this.handleDownsampleFinish);\n this.figure.removeEventListener(dh.plot.Figure.EVENT_DOWNSAMPLEFAILED, this.handleDownsampleFail);\n this.figure.removeEventListener(dh.plot.Figure.EVENT_DOWNSAMPLENEEDED, this.handleDownsampleNeeded);\n this.figure.removeEventListener(dh.Client.EVENT_REQUEST_FAILED, this.handleRequestFailed);\n }\n handleDownsampleStart(event) {\n log.debug('Downsample started', event);\n this.fireDownsampleStart(event.detail);\n }\n handleDownsampleFinish(event) {\n log.debug('Downsample finished', event);\n this.fireDownsampleFinish(event.detail);\n }\n handleDownsampleFail(event) {\n log.error('Downsample failed', event);\n this.fireDownsampleFail(event.detail);\n }\n handleDownsampleNeeded(event) {\n log.info('Downsample needed', event);\n this.fireDownsampleNeeded(event.detail);\n }\n handleFigureUpdated(event) {\n var {\n detail: figureUpdateEvent\n } = event;\n var {\n series: seriesArray\n } = figureUpdateEvent;\n log.debug2('handleFigureUpdated', seriesArray);\n for (var i = 0; i < seriesArray.length; i += 1) {\n var series = seriesArray[i];\n log.debug2('handleFigureUpdated updating series', series.name);\n var {\n sources\n } = series;\n for (var j = 0; j < sources.length; j += 1) {\n var source = sources[j];\n var {\n columnType,\n type\n } = source;\n var valueTranslator = this.getValueTranslator(columnType, this.formatter);\n var dataArray = figureUpdateEvent.getArray(series, type, valueTranslator);\n this.setDataArrayForSeries(series, type, dataArray);\n }\n this.seriesToProcess.delete(series.name);\n this.cleanSeries(series);\n }\n if (this.seriesToProcess.size === 0) {\n this.fireLoadFinished();\n }\n var {\n data\n } = this;\n this.fireUpdate(data);\n }\n handleRequestFailed(event) {\n log.error('Request failed', event);\n this.fireError([\"\".concat(event.detail)]);\n }\n\n /**\n * Resubscribe to the figure, should be done if settings change\n */\n resubscribe() {\n if (this.listeners.length > 0) {\n this.unsubscribeFigure();\n this.subscribeFigure();\n }\n }\n setFormatter(formatter) {\n super.setFormatter(formatter);\n this.updateLayoutFormats();\n\n // Unsubscribe and resubscribe to trigger a data update\n // Data may need to be translated again because of the new formatter\n this.resubscribe();\n }\n setRenderOptions(renderOptions) {\n super.setRenderOptions(renderOptions);\n\n // Reset all the series to re-render them with the correct rendering options\n this.initAllSeries();\n }\n setDownsamplingDisabled(isDownsamplingDisabled) {\n super.setDownsamplingDisabled(isDownsamplingDisabled);\n this.resubscribe();\n }\n handleFigureDisconnected(event) {\n log.debug('Figure disconnected', event);\n this.isConnected = false;\n if (this.listeners.length > 0) {\n this.unsubscribeFigure();\n }\n this.fireDisconnect();\n }\n handleFigureReconnected(event) {\n log.debug('Figure reconnected', event);\n this.isConnected = true;\n\n // It's possible the series have changed completely, as the query could have been changed\n this.initAllSeries();\n this.fireReconnect();\n if (this.listeners.length > 0) {\n this.subscribeFigure();\n }\n }\n handleFigureSeriesAdded(event) {\n var {\n detail: series\n } = event;\n log.debug('handleFigureSeriesAdded', series);\n this.pendingSeries.push(series);\n this.addPendingSeries();\n }\n setDimensions(rect) {\n super.setDimensions(rect);\n this.updateAxisPositions();\n }\n setTitle(title) {\n var _match$length, _match;\n super.setTitle(title);\n\n // Need to recalculate the padding based on how many lines of text the title is\n // Plotly doesn't handle positioning it correctly, and it's an undocumented feature\n var subtitleCount = (_match$length = (_match = (title !== null && title !== void 0 ? title : '').match(/<br>/g)) === null || _match === void 0 ? void 0 : _match.length) !== null && _match$length !== void 0 ? _match$length : 0;\n var margin = ChartUtils.DEFAULT_MARGIN.t + subtitleCount * ChartUtils.SUBTITLE_LINE_HEIGHT;\n if (this.layout.margin) {\n this.layout.margin.t = margin;\n } else {\n this.layout.margin = {\n t: margin\n };\n }\n if (typeof this.layout.title === 'string') {\n this.layout.title = {\n text: title\n };\n } else {\n this.layout.title = _objectSpread({}, this.layout.title);\n this.layout.title.text = title;\n this.layout.title.pad = _objectSpread({}, this.layout.title.pad);\n this.layout.title.pad.t = ChartUtils.DEFAULT_TITLE_PADDING.t + subtitleCount * ChartUtils.SUBTITLE_LINE_HEIGHT * 0.5;\n }\n this.fireLayoutUpdated({\n title: this.layout.title\n });\n }\n getPlotWidth() {\n var _this$layout$margin$l, _this$layout$margin, _this$layout$margin$r, _this$layout$margin2;\n if (!this.rect || !this.rect.width) {\n return 0;\n }\n return Math.max(this.rect.width - ((_this$layout$margin$l = (_this$layout$margin = this.layout.margin) === null || _this$layout$margin === void 0 ? void 0 : _this$layout$margin.l) !== null && _this$layout$margin$l !== void 0 ? _this$layout$margin$l : 0) - ((_this$layout$margin$r = (_this$layout$margin2 = this.layout.margin) === null || _this$layout$margin2 === void 0 ? void 0 : _this$layout$margin2.r) !== null && _this$layout$margin$r !== void 0 ? _this$layout$margin$r : 0), 0);\n }\n getPlotHeight() {\n var _this$layout$margin$t, _this$layout$margin3, _this$layout$margin$b, _this$layout$margin4;\n if (!this.rect || !this.rect.height) {\n return 0;\n }\n return Math.max(this.rect.height - ((_this$layout$margin$t = (_this$layout$margin3 = this.layout.margin) === null || _this$layout$margin3 === void 0 ? void 0 : _this$layout$margin3.t) !== null && _this$layout$margin$t !== void 0 ? _this$layout$margin$t : 0) - ((_this$layout$margin$b = (_this$layout$margin4 = this.layout.margin) === null || _this$layout$margin4 === void 0 ? void 0 : _this$layout$margin4.b) !== null && _this$layout$margin$b !== void 0 ? _this$layout$margin$b : 0), 0);\n }\n updateAxisPositions() {\n var plotWidth = this.getPlotWidth();\n var plotHeight = this.getPlotHeight();\n this.chartUtils.updateFigureAxes(this.layout, this.figure, chart => this.getAxisRangeParser(chart, this.formatter), plotWidth, plotHeight);\n }\n\n /**\n * Updates the format patterns used\n */\n updateLayoutFormats() {\n if (!this.formatter) {\n return;\n }\n var axisFormats = this.chartUtils.getAxisFormats(this.figure, this.formatter);\n axisFormats.forEach((axisFormat, axisLayoutProperty) => {\n log.debug(\"Assigning \".concat(axisLayoutProperty), this.layout[axisLayoutProperty], axisFormat);\n var props = this.layout[axisLayoutProperty];\n if (props != null) {\n Object.assign(props, axisFormat);\n } else {\n log.debug(\"Ignoring null layout.\".concat(axisLayoutProperty));\n }\n });\n }\n\n /**\n * Set a specific array for the array of series properties specified.\n * @param series The series to set the data array for.\n * @param sourceType The source type within that series to set the data for.\n * @param dataArray The array to use for the data for this series source.\n */\n setDataArrayForSeries(series, sourceType, dataArray) {\n var {\n name,\n plotStyle\n } = series;\n var seriesData = this.seriesDataMap.get(name);\n var property = this.chartUtils.getPlotlyProperty(plotStyle, sourceType);\n if (seriesData) {\n set(seriesData, property, dataArray);\n }\n }\n\n /**\n * After setting all the data in the series data, we may need to adjust some other properties\n * Eg. Calculating the width from the xLow/xHigh values; Plot.ly uses `width` instead of a low/high\n * value for x.\n * @param series The series to clean the data for\n */\n cleanSeries(series) {\n var {\n dh\n } = this;\n var {\n name,\n plotStyle\n } = series;\n var seriesData = this.seriesDataMap.get(name);\n if (seriesData == null) {\n return;\n }\n if (plotStyle === dh.plot.SeriesPlotStyle.HISTOGRAM) {\n var {\n xLow,\n xHigh\n } = seriesData;\n if (xLow && xHigh && xLow.length === xHigh.length) {\n var width = [];\n for (var i = 0; i < xLow.length; i += 1) {\n width.push(xHigh[i] - xLow[i]);\n }\n seriesData.width = width;\n }\n } else if (plotStyle === dh.plot.SeriesPlotStyle.LINE || plotStyle === dh.plot.SeriesPlotStyle.ERROR_BAR || plotStyle === dh.plot.SeriesPlotStyle.BAR) {\n var {\n x,\n xLow: _xLow,\n xHigh: _xHigh,\n y,\n yLow,\n yHigh\n } = seriesData;\n if (_xLow && _xHigh && _xLow !== x) {\n seriesData.error_x = ChartUtils.getPlotlyErrorBars(x, _xLow, _xHigh);\n }\n if (yLow && yHigh && yLow !== y) {\n seriesData.error_y = ChartUtils.getPlotlyErrorBars(y, yLow, yHigh);\n }\n } else if (plotStyle === dh.plot.SeriesPlotStyle.TREEMAP) {\n var {\n ids,\n labels\n } = seriesData;\n if (ids !== undefined && labels === undefined) {\n // If the user only provided IDs, we assign the IDs to the labels property as well automatically\n // Plotly uses the labels primarily, which from our API perspective seems kind of backwards\n seriesData.labels = ids;\n }\n }\n }\n getData() {\n return this.data;\n }\n getLayout() {\n return this.layout;\n }\n getFilterColumnMap() {\n return new Map(this.filterColumnMap);\n }\n isFilterRequired() {\n return this.oneClicks.find(oneClick => oneClick.requireAllFiltersToDisplay) != null;\n }\n\n /**\n * Sets the filter on the model. Will only set the values that have changed.\n * @param filterMap Map of filter column names to values\n */\n setFilter(filterMap) {\n var _this3 = this;\n if (this.oneClicks.length === 0) {\n log.warn('Trying to set a filter, but no one click!');\n return;\n }\n log.debug('setFilter', filterMap);\n var _loop3 = function _loop3() {\n var oneClick = _this3.oneClicks[i];\n var {\n columns\n } = oneClick;\n // Need to get all the keys in case a filter was removed\n var keys = new Set([...filterMap.keys(), ..._this3.lastFilter.keys()]);\n keys.forEach(key => {\n var value = filterMap.get(key);\n if (_this3.lastFilter.get(key) !== value && columns.find(column => column.name === key) != null) {\n oneClick.setValueForColumn(key, value);\n }\n });\n };\n for (var i = 0; i < this.oneClicks.length; i += 1) {\n _loop3();\n }\n this.lastFilter = new Map(filterMap);\n }\n setFigure(figure) {\n this.close();\n this.figure = figure;\n this.setTitle(this.getDefaultTitle());\n this.initAllSeries();\n this.updateAxisPositions();\n this.startListeningFigure();\n if (this.listeners.length > 0) {\n this.subscribeFigure();\n }\n }\n updateSettings(settings) {\n this.settings = settings;\n }\n}\n_defineProperty(FigureChartModel, \"ADD_SERIES_DEBOUNCE\", 50);\nexport default FigureChartModel;\n//# sourceMappingURL=FigureChartModel.js.map","function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nimport ChartUtils from \"./ChartUtils.js\";\nimport FigureChartModel from \"./FigureChartModel.js\";\nclass ChartModelFactory {\n /**\n * Creates a model from the settings provided.\n * Tries to create a Figure in the API with it.\n * @param dh JSAPI instance\n * @param settings The chart builder settings\n * @param settings.isLinked Whether the newly created chart should stay linked with the original table, update when filters are updated\n * @param settings.series The column names to use for creating the series of this chart\n * @param settings.type Chart builder type, from ChartBuilder.types\n * @param settings.xAxis The column name to use for the x-axis\n * @param [settings.hiddenSeries] Array of hidden series names\n * @param table The table to build the model for\n * @returns The ChartModel Promise representing the figure\n * CRA sets tsconfig to type check JS based on jsdoc comments. It isn't able to figure out FigureChartModel extends ChartModel\n * This causes TS issues in 1 or 2 spots. Once this is TS it can be returned to just FigureChartModel\n */\n static makeModelFromSettings(dh, settings, table) {\n return _asyncToGenerator(function* () {\n var figure = yield ChartModelFactory.makeFigureFromSettings(dh, settings, table);\n return new FigureChartModel(dh, figure, settings);\n })();\n }\n\n /**\n * Creates a model from the settings provided.\n * Tries to create a Figure in the API with it.\n * @param dh DH JSAPI instance\n * @param settings The chart builder settings\n * @param settings.isLinked Whether the newly created chart should stay linked with the original table, update when filters are updated\n * @param settings.series The column names to use for creating the series of this chart\n * @param settings.type Chart builder type, from ChartBuilder.types\n * @param settings.xAxis The column name to use for the x-axis\n * @param [settings.hiddenSeries] Array of hidden series names\n * @param table The table to build the model for\n * @returns The Figure created with the settings provided\n */\n static makeFigureFromSettings(dh, settings, table) {\n return _asyncToGenerator(function* () {\n // Copy the table first and then re-apply the filters from the original table\n // When we add table linking we'll want to listen to the original table and update\n // the copied table with any changes that occur.\n // The table gets owned by the Figure that gets created, which closes the table\n var tableCopy = yield table.copy();\n tableCopy.applyCustomColumns(table.customColumns);\n tableCopy.applyFilter(table.filter);\n tableCopy.applySort(table.sort);\n return dh.plot.Figure.create(new ChartUtils(dh).makeFigureSettings(settings, tableCopy));\n })();\n }\n\n /**\n * Creates a model from the settings provided.\n * Tries to create a Figure in the API with it.\n * @param dh DH JSAPI instance\n * @param settings The chart builder settings\n * @param settings.isLinked Whether the newly created chart should stay linked with the original table, update when filters are updated\n * @param settings.series The column names to use for creating the series of this chart\n * @param settings.type Chart builder type, from ChartBuilder.types\n * @param settings.xAxis The column name to use for the x-axis\n * @param [settings.hiddenSeries] Array of hidden series names\n * @param figure The figure to build the model for\n * @returns The FigureChartModel representing the figure\n * CRA sets tsconfig to type check JS based on jsdoc comments. It isn't able to figure out FigureChartModel extends ChartModel\n * This causes TS issues in 1 or 2 spots. Once this is TS it can be returned to just FigureChartModel\n */\n static makeModel(dh, settings, figure) {\n return _asyncToGenerator(function* () {\n return new FigureChartModel(dh, figure, settings);\n })();\n }\n}\nexport default ChartModelFactory;\n//# sourceMappingURL=ChartModelFactory.js.map","export default function isFigureChartModel(model) {\n return model.setFigure !== undefined;\n}\n//# sourceMappingURL=isFigureChartModel.js.map","import GoldenLayout from '@deephaven/golden-layout';\nimport PanelManager from \"./PanelManager.js\";\nexport { isWrappedComponent } from '@deephaven/components';\n\n/**\n * Panel components can provide static props that provide meta data about the\n * panel.\n */\n\n/**\n * Alias for the return type of React.forwardRef()\n */\n\n/**\n * @deprecated Use `PanelComponentType` instead and add generic types to forwardRef call.\n */\n\n/**\n * Props with metadata, panelState, GoldenLayout props, but not dashboardId\n */\n\n/**\n * Props with metadata, panelState, dashboardId, and GoldenLayout props\n */\n\n/**\n * Props with metadata, panelState, and dashboardId, but not GoldenLayout props\n */\n\n/**\n * Takes a partial DashboardPluginComponentProps and verifies all the dashboard component fields are filled in.\n * @param props The props to check\n * @returns True if the props are valid DashboardPluginComponentProps, false otherwise\n */\nexport function isDashboardPluginProps(props) {\n return typeof props.id === 'string' && props.layout instanceof GoldenLayout && props.panelManager instanceof PanelManager && typeof props.registerComponent === 'function';\n}\nexport function assertIsDashboardPluginProps(props) {\n if (!isDashboardPluginProps(props)) {\n throw new Error(\"Expected dashboard plugin props, but instead received \".concat(props));\n }\n}\n//# sourceMappingURL=DashboardPlugin.js.map","import React from 'react';\n/**\n * Registers a given panel component. Also runs a `useEffect` that will\n * automatically de-register then panel on unmount.\n * @param registerComponent\n * @param ComponentType\n * @param hydrate\n * @param dehydrate\n */\nexport default function usePanelRegistration(registerComponent, ComponentType, hydrate, dehydrate) {\n var _ComponentType$COMPON;\n var name = (_ComponentType$COMPON = ComponentType.COMPONENT) !== null && _ComponentType$COMPON !== void 0 ? _ComponentType$COMPON : ComponentType.displayName;\n if (name == null) {\n throw new Error('ComponentType must have a `COMPONENT` or `displayName` attribute.');\n }\n React.useEffect(() => {\n var deregister = registerComponent(name, ComponentType, hydrate, dehydrate);\n return () => {\n deregister();\n };\n }, [ComponentType, dehydrate, hydrate, name, registerComponent]);\n}\n//# sourceMappingURL=usePanelRegistration.js.map","import { useContext } from 'react';\nimport LayoutManagerContext from \"./LayoutManagerContext.js\";\n/**\n * Retrieve the current LayoutManager from the context\n */\nfunction useLayoutManager() {\n var layoutManager = useContext(LayoutManagerContext);\n if (layoutManager == null) {\n throw new Error('LayoutManager not available, did you add a LayoutManagerContext.Provider to the tree?');\n }\n return layoutManager;\n}\nexport default useLayoutManager;\n//# sourceMappingURL=useLayoutManager.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { forwardRef, lazy, Suspense } from 'react';\nimport { LoadingOverlay } from '@deephaven/components';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar IrisGrid = /*#__PURE__*/lazy(() => import('./IrisGrid.js'));\nvar LazyIrisGrid = /*#__PURE__*/forwardRef((\n// This creates the correct type to make defaultProps optional\nprops, ref) => /*#__PURE__*/_jsx(Suspense, {\n fallback: /*#__PURE__*/_jsx(LoadingOverlay, {\n \"data-testid\": \"lazy-iris-grid-loading\"\n }),\n children: /*#__PURE__*/_jsx(IrisGrid, _objectSpread({\n ref: ref\n }, props))\n}));\nLazyIrisGrid.displayName = 'LazyIrisGrid';\nexport default LazyIrisGrid;\n//# sourceMappingURL=LazyIrisGrid.js.map","var AdvancedSettingsType = /*#__PURE__*/function (AdvancedSettingsType) {\n AdvancedSettingsType[\"FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS\"] = \"filter-control-change-clears-all-filters\";\n AdvancedSettingsType[\"LINK_CHANGE_CLEARS_ALL_FILTERS\"] = \"link-change-clears-all-filters\";\n return AdvancedSettingsType;\n}(AdvancedSettingsType || {});\nexport default AdvancedSettingsType;\n//# sourceMappingURL=AdvancedSettingsType.js.map","import AdvancedSettingsType from \"./AdvancedSettingsType.js\";\nvar DEFAULTS = Object.freeze([[AdvancedSettingsType.FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS, false], [AdvancedSettingsType.LINK_CHANGE_CLEARS_ALL_FILTERS, false]]);\nexport default {\n DEFAULTS\n};\n//# sourceMappingURL=AdvancedSettings.js.map","var AggregationOperation = /*#__PURE__*/function (AggregationOperation) {\n AggregationOperation[\"COUNT\"] = \"Count\";\n AggregationOperation[\"MIN\"] = \"Min\";\n AggregationOperation[\"MAX\"] = \"Max\";\n AggregationOperation[\"SUM\"] = \"Sum\";\n AggregationOperation[\"ABS_SUM\"] = \"AbsSum\";\n AggregationOperation[\"VAR\"] = \"Var\";\n AggregationOperation[\"AVG\"] = \"Avg\";\n AggregationOperation[\"MEDIAN\"] = \"Median\";\n AggregationOperation[\"STD\"] = \"Std\";\n AggregationOperation[\"FIRST\"] = \"First\";\n AggregationOperation[\"LAST\"] = \"Last\";\n AggregationOperation[\"SKIP\"] = \"Skip\";\n AggregationOperation[\"COUNT_DISTINCT\"] = \"CountDistinct\";\n AggregationOperation[\"DISTINCT\"] = \"Distinct\";\n AggregationOperation[\"UNIQUE\"] = \"Unique\";\n return AggregationOperation;\n}(AggregationOperation || {});\nexport default AggregationOperation;\n//# sourceMappingURL=AggregationOperation.js.map","import { TableUtils } from '@deephaven/jsapi-utils';\nimport AggregationOperation from \"./AggregationOperation.js\";\nexport var SELECTABLE_OPTIONS = [AggregationOperation.SUM, AggregationOperation.ABS_SUM, AggregationOperation.MIN, AggregationOperation.MAX, AggregationOperation.VAR, AggregationOperation.AVG, AggregationOperation.MEDIAN, AggregationOperation.STD, AggregationOperation.FIRST, AggregationOperation.LAST, AggregationOperation.COUNT_DISTINCT, AggregationOperation.DISTINCT, AggregationOperation.COUNT, AggregationOperation.UNIQUE];\n\n/**\n * Check if an operation requires a rollup/table grouping\n * @param type The operation to check\n * @returns True if this operation applies to the whole table, false if applies to columns\n */\nexport var isRollupOperation = type => {\n switch (type) {\n // currently no rollup only operations, but there has been in the past\n default:\n return false;\n }\n};\n\n/**\n * Check if an operation is not supported for a rollup/table grouping\n * @param type The operation to check\n * @returns True if this operation is not supported for a rollup/table grouping\n */\nexport var isRollupProhibited = type => {\n switch (type) {\n case AggregationOperation.MEDIAN:\n return true;\n default:\n return false;\n }\n};\n\n/**\n * Check if an operation is valid against the given column type\n * @param operationType The operation to check\n * @param columnType The column type to check against\n */\nexport var isValidOperation = (operationType, columnType) => {\n switch (operationType) {\n case AggregationOperation.COUNT:\n case AggregationOperation.FIRST:\n case AggregationOperation.LAST:\n case AggregationOperation.COUNT_DISTINCT:\n case AggregationOperation.DISTINCT:\n case AggregationOperation.UNIQUE:\n return true;\n case AggregationOperation.MEDIAN:\n case AggregationOperation.MIN:\n case AggregationOperation.MAX:\n return TableUtils.isNumberType(columnType) || TableUtils.isDateType(columnType) || TableUtils.isTextType(columnType);\n case AggregationOperation.SUM:\n case AggregationOperation.ABS_SUM:\n case AggregationOperation.VAR:\n case AggregationOperation.AVG:\n case AggregationOperation.STD:\n return TableUtils.isNumberType(columnType);\n case AggregationOperation.SKIP:\n return false;\n // No default case - if AggregationOperation is added, we'll get a compile time error\n }\n};\nexport var filterValidColumns = (columns, operationType) => columns.filter(c => c.isProxy !== true && isValidOperation(operationType, c.type));\nexport var getOperationColumnNames = (columns, operationType, selected, invert) => filterValidColumns(columns, operationType).map(_ref => {\n var {\n name\n } = _ref;\n return name;\n}).filter(name => selected.includes(name) ? !invert : invert);\nexport default {\n isValidOperation,\n isRollupOperation,\n isRollupProhibited,\n filterValidColumns,\n getOperationColumnNames\n};\n//# sourceMappingURL=AggregationUtils.js.map","export function isExpandableGridModel(model) {\n return (model === null || model === void 0 ? void 0 : model.hasExpandableRows) !== undefined;\n}\n\n/**\n * Expandable grid model. Allows for a grid with rows that can expand (e.g. A Tree Table)\n */\n//# sourceMappingURL=ExpandableGridModel.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n// Also exported via GridRange.SELECTION_DIRECTION\nexport var SELECTION_DIRECTION = /*#__PURE__*/function (SELECTION_DIRECTION) {\n SELECTION_DIRECTION[\"DOWN\"] = \"DOWN\";\n SELECTION_DIRECTION[\"UP\"] = \"UP\";\n SELECTION_DIRECTION[\"LEFT\"] = \"LEFT\";\n SELECTION_DIRECTION[\"RIGHT\"] = \"RIGHT\";\n return SELECTION_DIRECTION;\n}({});\nexport class GridRange {\n /**\n * Returns a normalized array of indexes ensuring left <= right and top <= bottom\n * @param startColumn Start column index\n * @param startRow Start row index\n * @param endColumn End column index\n * @param endRow End row index\n * @returns Array containing normalized indexes [left, top, right, bottom]\n */\n static normalize(startColumn, startRow, endColumn, endRow) {\n var left = startColumn;\n var top = startRow;\n var right = endColumn;\n var bottom = endRow;\n if (left != null && right != null && right < left) {\n left = right;\n right = startColumn;\n }\n if (top != null && bottom != null && bottom < top) {\n top = bottom;\n bottom = startRow;\n }\n return [left, top, right, bottom];\n }\n\n /**\n * Makes a GridRange ensuring startColumn <= endColumn, startRow <= endRow\n * @param startColumn Start column index\n * @param startRow Start row index\n * @param endColumn End column index\n * @param endRow End row index\n * @returns Normalized GridRange\n */\n static makeNormalized(startColumn, startRow, endColumn, endRow) {\n return new GridRange(...GridRange.normalize(startColumn, startRow, endColumn, endRow));\n }\n\n /**\n * Creates a GridRange representing a single cell\n * @param column Column index\n * @param row Row index\n * @returns GridRange representing the cell\n */\n static makeCell(column, row) {\n return new GridRange(column, row, column, row);\n }\n\n /**\n * Creates a GridRange representing an infinite length column\n * @param column Column index\n * @returns GridRange representing the column\n */\n static makeColumn(column) {\n return new GridRange(column, null, column, null);\n }\n\n /**\n * Creates a GridRange representing an infinite length row\n * @param row Row index\n * @returns GridRange representing the row\n */\n static makeRow(row) {\n return new GridRange(null, row, null, row);\n }\n\n /**\n * Returns the minimum value between 2 range indexes or null if at least 1 is null\n * @param index1 First grid range index\n * @param index2 Second grid range index\n * @returns Minimum index or null if either index is null\n */\n static minOrNull(index1, index2) {\n if (index1 == null || index2 == null) {\n return null;\n }\n return Math.min(index1, index2);\n }\n\n /**\n * Returns the maximum value between 2 range indexes or null if at least 1 is null\n * @param index1 First grid range index\n * @param index2 Second grid range index\n * @returns Maximum index or null if either index is null\n */\n static maxOrNull(index1, index2) {\n if (index1 == null || index2 == null) {\n return null;\n }\n return Math.max(index1, index2);\n }\n\n /**\n * Consolidate the passed in ranges to the minimum set, merging overlapping ranges.\n * @param ranges The ranges to consolidate\n * @returns Consolidated ranges\n */\n static consolidate(ranges) {\n var result = ranges.slice();\n var wasModified = true;\n while (wasModified) {\n wasModified = false;\n for (var i = 0; i < result.length && !wasModified; i += 1) {\n var range = result[i];\n for (var j = result.length - 1; j > i; j -= 1) {\n var other = result[j];\n\n // If one contains the other, we can just keep the bigger one\n if (range.contains(other)) {\n result.splice(j, 1);\n } else if (other.contains(range)) {\n wasModified = true;\n result[i] = other;\n result.splice(j, 1);\n break;\n } else if (range.startRow === other.startRow && range.endRow === other.endRow) {\n if (range.touches(other)) {\n // If the start/end rows match, and columns touch, consolidate\n var {\n startRow,\n endRow\n } = range;\n var startColumn = GridRange.minOrNull(range.startColumn, other.startColumn);\n var endColumn = GridRange.maxOrNull(range.endColumn, other.endColumn);\n wasModified = true;\n result[i] = new GridRange(startColumn, startRow, endColumn, endRow);\n result.splice(j, 1);\n break;\n }\n } else if (range.startColumn === other.startColumn && range.endColumn === other.endColumn) {\n if (range.touches(other)) {\n // If the start/end rows match, and columns touch, consolidate\n var {\n startColumn: _startColumn,\n endColumn: _endColumn\n } = range;\n var _startRow = GridRange.minOrNull(range.startRow, other.startRow);\n var _endRow = GridRange.maxOrNull(range.endRow, other.endRow);\n wasModified = true;\n result[i] = new GridRange(_startColumn, _startRow, _endColumn, _endRow);\n result.splice(j, 1);\n break;\n }\n }\n }\n }\n }\n return result;\n }\n\n /**\n * Checks if the 1-D ranges between 2 index pairs overlap or are continuous.\n * For example ranges [0, 1] and [2, 3] are continuous and will return true.\n * [0, 1] and [1, 3] overlap and return true.\n * [0, 1] and [3, 4] do not overlap and have a gap so this will return false.\n * @param start1 Start of 1st range\n * @param end1 End of 1st range\n * @param start2 Start of 2nd range\n * @param end2 End of 2nd range\n * @returns True if the ranges overlap or touch, else false\n */\n static isAxisRangeTouching(start1, end1, start2, end2) {\n if (start1 == null) {\n if (end1 == null) {\n return true;\n }\n if (start2 == null) {\n return true;\n }\n return start2 <= end1 + 1;\n }\n if (end1 == null) {\n if (end2 == null) {\n return true;\n }\n return end2 >= start1 - 1;\n }\n if (start2 == null) {\n if (end2 == null) {\n return true;\n }\n return start1 <= end2 + 1;\n }\n if (end2 == null) {\n return end1 >= start2 - 1;\n }\n if (start2 >= start1 - 1) {\n return start2 <= end1 + 1;\n }\n return end2 >= start1 - 1;\n }\n\n /**\n * Checks if 2 arrays of ranges are the same ranges\n * @param ranges1 First array of ranges\n * @param ranges2 Second array of ranges\n * @returns True if the arrays contain the same ranges in the same order\n */\n static rangeArraysEqual(ranges1, ranges2) {\n if (ranges1 === ranges2) {\n return true;\n }\n if (ranges1 == null || ranges2 == null || ranges1.length !== ranges2.length) {\n return false;\n }\n for (var i = 0; i < ranges1.length; i += 1) {\n if (!ranges1[i].equals(ranges2[i])) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Get the intersection (overlapping area) of two ranges\n * @param range One range to check for the intersection\n * @param otherRange The other range to check for the intersection\n * @returns Intersection of the two ranges. If they do not intersect, returns `null`.\n */\n static intersection(range, otherRange) {\n if (range.equals(otherRange)) {\n return range;\n }\n var {\n startColumn,\n startRow,\n endColumn,\n endRow\n } = range;\n startColumn = startColumn != null && otherRange.startColumn != null ? Math.max(startColumn, otherRange.startColumn) : startColumn !== null && startColumn !== void 0 ? startColumn : otherRange.startColumn;\n endColumn = endColumn != null && otherRange.endColumn != null ? Math.min(endColumn, otherRange.endColumn) : endColumn !== null && endColumn !== void 0 ? endColumn : otherRange.endColumn;\n startRow = startRow != null && otherRange.startRow != null ? Math.max(startRow, otherRange.startRow) : startRow !== null && startRow !== void 0 ? startRow : otherRange.startRow;\n endRow = endRow != null && otherRange.endRow != null ? Math.min(endRow, otherRange.endRow) : endRow !== null && endRow !== void 0 ? endRow : otherRange.endRow;\n if (startColumn != null && startColumn > (endColumn !== null && endColumn !== void 0 ? endColumn : -1) || startRow != null && startRow > (endRow !== null && endRow !== void 0 ? endRow : -1)) {\n return null;\n }\n return new GridRange(startColumn, startRow, endColumn, endRow);\n }\n\n /**\n * Subtracts 1 range from another\n * @param range The range to be subtracted from\n * @param subtractRange The range to subtract from within this range\n * @returns The ranges needed to represent the remaining\n */\n static subtractFromRange(range, subtractRange) {\n var result = [];\n\n // Make it a little easier by finding only the part the subtraction range intersects\n var subtract = GridRange.intersection(range, subtractRange);\n if (subtract == null) {\n return [range];\n }\n\n // Go through each of the quadrants for deselection, there can be up to 4\n // Top quadrant (above the subtracted area)\n if (subtract.startRow != null && (range.startRow == null || range.startRow < subtract.startRow)) {\n result.push(new GridRange(range.startColumn, range.startRow, range.endColumn, subtract.startRow - 1));\n }\n\n // middle left\n if (subtract.startColumn != null && (range.startColumn == null || range.startColumn < subtract.startColumn)) {\n result.push(new GridRange(range.startColumn, subtract.startRow, subtract.startColumn - 1, subtract.endRow));\n }\n\n // middle right\n if (subtract.endColumn != null && (range.endColumn == null || range.endColumn > subtract.endColumn)) {\n result.push(new GridRange(subtract.endColumn + 1, subtract.startRow, range.endColumn, subtract.endRow));\n }\n\n // Bottom quadrant\n if (subtract.endRow != null && (range.endRow == null || range.endRow > subtract.endRow)) {\n result.push(new GridRange(range.startColumn, subtract.endRow + 1, range.endColumn, range.endRow));\n }\n return result;\n }\n\n /**\n * Subtract a range from multiple ranges\n * @param ranges The ranges to be subtracted from\n * @param subtractRange The range to subtract from within these ranges\n * @returns The ranges needed to represent the remaining\n */\n static subtractFromRanges(ranges, subtractRange) {\n var result = [];\n for (var i = 0; i < ranges.length; i += 1) {\n result.push(...GridRange.subtractFromRange(ranges[i], subtractRange));\n }\n return result;\n }\n\n /**\n * Subtract multiple ranges from multiple ranges\n * @param ranges The ranges to be subtracted from\n * @param subtractRanges The ranges to subtract from within these ranges\n * @returns The ranges needed to represent the remaining\n */\n static subtractRangesFromRanges(ranges, subtractRanges) {\n var result = [...ranges];\n for (var i = 0; i < subtractRanges.length; i += 1) {\n result = GridRange.subtractFromRanges(result, subtractRanges[i]);\n }\n return result;\n }\n\n /**\n * Test if a given range is bounded (all values are non-null)\n * @param range The range to test\n * @returns True if this range is bounded, false otherwise\n */\n static isBounded(range) {\n return range.startRow != null && range.startColumn != null && range.endRow != null && range.endColumn != null;\n }\n\n /**\n * Converts any GridRange passed in that is a full row or column selection to be bound\n * to the `columnCount` and `rowCount` passed in\n *\n * @param range The range to get the bounded range of\n * @param columnCount The number of columns\n * @param rowCount The number of rows\n * @returns The passed in GridRange with any null values filled in\n */\n static boundedRange(range, columnCount, rowCount) {\n var _range$startColumn, _range$startRow, _range$endColumn, _range$endRow;\n if (GridRange.isBounded(range)) {\n return range;\n }\n return new GridRange((_range$startColumn = range.startColumn) !== null && _range$startColumn !== void 0 ? _range$startColumn : 0, (_range$startRow = range.startRow) !== null && _range$startRow !== void 0 ? _range$startRow : 0, (_range$endColumn = range.endColumn) !== null && _range$endColumn !== void 0 ? _range$endColumn : columnCount - 1, (_range$endRow = range.endRow) !== null && _range$endRow !== void 0 ? _range$endRow : rowCount - 1);\n }\n\n /**\n * Converts the GridRanges passed in to be bound to the `columnCount` and `rowCount` passed in\n *\n * @param ranges The ranges to get the bounded ranges of\n * @param columnCount The number of columns\n * @param rowCount The number of rows\n * @returns The passed in GridRange with any null values filled in\n */\n static boundedRanges(ranges, columnCount, rowCount) {\n return ranges.map(r => GridRange.boundedRange(r, columnCount, rowCount));\n }\n\n /**\n * Offsets a GridRange by the specified amount in the x and y directions\n *\n * @param range The range to offset\n * @param columnOffset The number of columns to offset\n * @param rowOffset The number of rows to offset\n * @returns The new grid range offset from the original\n */\n static offset(range, columnOffset, rowOffset) {\n return new GridRange(range.startColumn != null ? range.startColumn + columnOffset : null, range.startRow != null ? range.startRow + rowOffset : null, range.endColumn != null ? range.endColumn + columnOffset : null, range.endRow != null ? range.endRow + rowOffset : null);\n }\n\n /**\n * Get the next cell given the selected ranges and the current cell\n * @param ranges The selected bounded ranges within the grid\n * @param column The cursor column, or null if none focused\n * @param row The cursor row, or null if none focused\n * @param direction The direction in which to select next\n * @returns The next cell to focus, or null if there should be no more focus\n */\n static nextCell(ranges) {\n var column = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var row = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var direction = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : GridRange.SELECTION_DIRECTION.DOWN;\n if (ranges.length === 0) {\n return null;\n }\n var rangeIndex = -1;\n if (column != null && row != null) {\n rangeIndex = ranges.findIndex(r => r.containsCell(column, row));\n if (rangeIndex >= 0) {\n var range = ranges[rangeIndex];\n var nextCell = range.nextCell(column, row, direction);\n if (nextCell != null) {\n return nextCell;\n }\n }\n }\n\n // Otherwise go to the start of the next range (could be same range if only one range)\n switch (direction) {\n case GridRange.SELECTION_DIRECTION.DOWN:\n case GridRange.SELECTION_DIRECTION.RIGHT:\n {\n var nextRangeIndex = rangeIndex < ranges.length - 1 ? rangeIndex + 1 : 0;\n var nextRange = ranges[nextRangeIndex];\n return nextRange.startCell(direction);\n }\n case GridRange.SELECTION_DIRECTION.LEFT:\n case GridRange.SELECTION_DIRECTION.UP:\n {\n var _nextRangeIndex = rangeIndex > 0 ? rangeIndex - 1 : ranges.length - 1;\n var _nextRange = ranges[_nextRangeIndex];\n return _nextRange.startCell(direction);\n }\n default:\n throw new Error(\"Invalid direction: \".concat(direction));\n }\n }\n\n /**\n * Count the number of cells in the provided grid ranges\n * @param ranges The ranges to count the rows of\n * @returns The number of cells in the ranges, or `NaN` if any of the ranges were unbounded\n */\n static cellCount(ranges) {\n return ranges.reduce((cellCount, range) => {\n var _range$endRow2, _range$startRow2, _range$endColumn2, _range$startColumn2;\n return cellCount + (((_range$endRow2 = range.endRow) !== null && _range$endRow2 !== void 0 ? _range$endRow2 : NaN) - ((_range$startRow2 = range.startRow) !== null && _range$startRow2 !== void 0 ? _range$startRow2 : NaN) + 1) * (((_range$endColumn2 = range.endColumn) !== null && _range$endColumn2 !== void 0 ? _range$endColumn2 : NaN) - ((_range$startColumn2 = range.startColumn) !== null && _range$startColumn2 !== void 0 ? _range$startColumn2 : NaN) + 1);\n }, 0);\n }\n\n /**\n * Count the number of rows in the provided grid ranges\n * @param ranges The ranges to count the rows of\n * @returns The number of rows in the ranges, or `NaN` if any of the ranges were unbounded\n */\n static rowCount(ranges) {\n return ranges.reduce((rowCount, range) => {\n var _range$endRow3, _range$startRow3;\n return rowCount + ((_range$endRow3 = range.endRow) !== null && _range$endRow3 !== void 0 ? _range$endRow3 : NaN) - ((_range$startRow3 = range.startRow) !== null && _range$startRow3 !== void 0 ? _range$startRow3 : NaN) + 1;\n }, 0);\n }\n\n /**\n * Count the number of columns in the provided grid ranges\n * @param ranges The ranges to count the columns of\n * @returns The number of columns in the ranges, or `NaN` if any of the ranges were unbounded\n */\n static columnCount(ranges) {\n return ranges.reduce((columnCount, range) => {\n var _range$endColumn3, _range$startColumn3;\n return columnCount + ((_range$endColumn3 = range.endColumn) !== null && _range$endColumn3 !== void 0 ? _range$endColumn3 : NaN) - ((_range$startColumn3 = range.startColumn) !== null && _range$startColumn3 !== void 0 ? _range$startColumn3 : NaN) + 1;\n }, 0);\n }\n\n /**\n * Check if the provided ranges contain the provided cell\n * @param ranges The ranges to check\n * @param column The column index\n * @param row The row index\n * @returns True if the cell is within the provided ranges, false otherwise.\n */\n static containsCell(ranges, column, row) {\n for (var i = 0; i < ranges.length; i += 1) {\n var range = ranges[i];\n if (range.containsCell(column, row)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Iterate through each cell in the provided ranges\n * @param ranges The ranges to iterate through\n * @param callback The callback to execute. `index` is the index within that range\n * @param direction The direction to iterate in\n */\n static forEachCell(ranges, callback) {\n var direction = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : GridRange.SELECTION_DIRECTION.RIGHT;\n for (var i = 0; i < ranges.length; i += 1) {\n ranges[i].forEach(callback, direction);\n }\n }\n constructor(startColumn, startRow, endColumn, endRow) {\n _defineProperty(this, \"startColumn\", void 0);\n _defineProperty(this, \"startRow\", void 0);\n _defineProperty(this, \"endColumn\", void 0);\n _defineProperty(this, \"endRow\", void 0);\n this.startColumn = startColumn;\n this.startRow = startRow;\n this.endColumn = endColumn;\n this.endRow = endRow;\n }\n\n /**\n * Checks if the provided range is equivalent to this range (same start and end column/row indexes)\n * @param other Grid range to check against\n * @returns True if the ranges cover the same area\n */\n equals(other) {\n return this.startColumn === other.startColumn && this.startRow === other.startRow && this.endColumn === other.endColumn && this.endRow === other.endRow;\n }\n\n /**\n * Checks if this GridRange contains another range\n * @param other The range to check\n * @returns True if this GridRange completely contains `other`\n * */\n contains(other) {\n return (this.startColumn == null || other.startColumn != null && this.startColumn <= other.startColumn) && (this.startRow == null || other.startRow != null && this.startRow <= other.startRow) && (this.endColumn == null || other.endColumn != null && this.endColumn >= other.endColumn) && (this.endRow == null || other.endRow != null && this.endRow >= other.endRow);\n }\n\n /**\n * Check if the provided cell is in this range\n * @param column The column to check\n * @param row The row to check\n * @returns True if this cell is within this range\n */\n containsCell(column, row) {\n if (column == null || row == null) {\n return false;\n }\n return (this.startColumn == null || this.startColumn <= column) && (this.endColumn == null || this.endColumn >= column) && (this.startRow == null || this.startRow <= row) && (this.endRow == null || this.endRow >= row);\n }\n\n /**\n * Check if the provided range touches (or overlaps) this GridRange\n * Effectively checks if the 2 ranges could be represented by 1 continuous range\n * @param other The range to check\n * @returns True if this GridRange touches `other`\n * */\n touches(other) {\n return GridRange.isAxisRangeTouching(this.startRow, this.endRow, other.startRow, other.endRow) && GridRange.isAxisRangeTouching(this.startColumn, this.endColumn, other.startColumn, other.endColumn);\n }\n\n /**\n * Subtracts a range from this range\n * @param other The range to deselect from within this range\n * @returns The ranges needed to represent the remaining\n */\n subtract(other) {\n return GridRange.subtractFromRange(this, other);\n }\n\n /**\n * Get the first cell in this range. Throws if this range is unbounded.\n *\n * @param direction The direction to get the starting cell in. Defaults to DOWN\n * @returns The first cell in this range in the direction specified\n */\n startCell() {\n var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : GridRange.SELECTION_DIRECTION.DOWN;\n if (!GridRange.isBounded(this)) {\n throw new Error('Cannot get the startCell of an unbounded range');\n }\n switch (direction) {\n case GridRange.SELECTION_DIRECTION.DOWN:\n case GridRange.SELECTION_DIRECTION.RIGHT:\n return {\n column: this.startColumn,\n row: this.startRow\n };\n case GridRange.SELECTION_DIRECTION.LEFT:\n case GridRange.SELECTION_DIRECTION.UP:\n {\n return {\n column: this.endColumn,\n row: this.endRow\n };\n }\n default:\n throw new Error(\"Invalid direction: \".concat(direction));\n }\n }\n\n /**\n * Get the next cell in the direction specified. Throws if this range is unbounded.\n * If already at the bounds of the range in that direction, wrap to the next column or row\n * If at the end of the entire range, return null\n * If outside of the range, returns the next cell closest within this range.\n *\n * @param column The cursor column\n * @param row The cursor row\n * @param direction The direction to go in\n * @returns The next cell in the direction specified, or `null` if at the end of the range\n */\n nextCell(column, row, direction) {\n if (!GridRange.isBounded(this)) {\n throw new Error('Bounded range required');\n }\n if (column == null || row == null) {\n throw new Error('Require a non-null cursor');\n }\n var {\n startColumn,\n endColumn,\n startRow,\n endRow\n } = this;\n switch (direction) {\n case GridRange.SELECTION_DIRECTION.DOWN:\n if (row < endRow) {\n return {\n column,\n row: Math.max(row + 1, startRow)\n };\n }\n if (column < endColumn) {\n return {\n column: Math.max(column + 1, startColumn),\n row: startRow\n };\n }\n break;\n case GridRange.SELECTION_DIRECTION.UP:\n if (row > startRow) {\n return {\n column,\n row: Math.min(row - 1, endRow)\n };\n }\n if (column > startColumn) {\n return {\n column: Math.min(column - 1, endColumn),\n row: endRow\n };\n }\n break;\n case GridRange.SELECTION_DIRECTION.RIGHT:\n if (column < endColumn) {\n return {\n column: Math.max(column + 1, startColumn),\n row\n };\n }\n if (row < endRow) {\n return {\n column: startColumn,\n row: Math.max(row + 1, startRow)\n };\n }\n break;\n case GridRange.SELECTION_DIRECTION.LEFT:\n if (column > startColumn) {\n return {\n column: Math.min(column - 1, endColumn),\n row\n };\n }\n if (row > startRow) {\n return {\n column: endColumn,\n row: Math.min(row - 1, endRow)\n };\n }\n break;\n default:\n throw new Error(\"Invalid direction: \".concat(direction));\n }\n return null;\n }\n\n /**\n * Iterate through each cell in the range\n * @param callback Callback to execute. `index` is the index within this range\n * @param direction The direction to iterate in\n */\n forEach(callback) {\n var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : GridRange.SELECTION_DIRECTION.RIGHT;\n var i = 0;\n var {\n column: c,\n row: r\n } = this.startCell(direction);\n while (c != null && r != null) {\n var _this$nextCell;\n callback(c, r, i);\n i += 1;\n ({\n column: c,\n row: r\n } = (_this$nextCell = this.nextCell(c, r, direction)) !== null && _this$nextCell !== void 0 ? _this$nextCell : {});\n }\n }\n}\n_defineProperty(GridRange, \"SELECTION_DIRECTION\", SELECTION_DIRECTION);\nexport default GridRange;\n//# sourceMappingURL=GridRange.js.map","export function isAxisRange(range) {\n return Array.isArray(range) && range.length === 2 && (range[0] === null || typeof range[0] === 'number') && (range[1] === null || typeof range[1] === 'number');\n}\nexport function assertAxisRange(range) {\n if (!isAxisRange(range)) {\n throw new Error(\"Expected axis range. Received: \".concat(range));\n }\n}\nexport function isBoundedAxisRange(range) {\n return isAxisRange(range) && range[0] != null && range[1] != null;\n}\nexport function assertBoundedAxisRange(range) {\n if (!isBoundedAxisRange(range)) {\n throw new Error(\"Expected bounded axis range. Received: \".concat(range));\n }\n}\n//# sourceMappingURL=GridAxisRange.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport clamp from 'lodash.clamp';\nimport { find as linkifyFind } from 'linkifyjs';\nimport { EMPTY_ARRAY, getOrThrow } from '@deephaven/utils';\nimport GridRange from \"./GridRange.js\";\nimport { isBoundedAxisRange } from \"./GridAxisRange.js\";\nimport { isExpandableGridModel } from \"./ExpandableGridModel.js\";\nexport function isLinkToken(token) {\n return (token === null || token === void 0 ? void 0 : token.href) !== undefined;\n}\nexport class GridUtils {\n /**\n * Get the GridPoint for the coordinates provided\n * @param x The grid x coordinate\n * @param y The grid y coordinate\n * @param metrics The grid metrics\n * @returns The GridPoint including the column/row information\n */\n static getGridPointFromXY(x, y, metrics) {\n var column = GridUtils.getColumnAtX(x, metrics);\n var row = GridUtils.getRowAtY(y, metrics);\n var columnHeaderDepth = GridUtils.getColumnHeaderDepthAtY(y, metrics);\n return {\n x,\n y,\n row,\n column,\n columnHeaderDepth\n };\n }\n static getCellInfoFromXY(x, y, metrics) {\n var {\n row,\n column\n } = GridUtils.getGridPointFromXY(x, y, metrics);\n var {\n allColumnWidths,\n allRowHeights,\n allColumnXs,\n allRowYs,\n modelColumns,\n modelRows\n } = metrics;\n var modelRow = row !== null ? modelRows.get(row) : null;\n var modelColumn = column !== null ? modelColumns.get(column) : null;\n var left = column !== null ? allColumnXs.get(column) : null;\n var top = row !== null ? allRowYs.get(row) : null;\n var columnWidth = column !== null ? allColumnWidths.get(column) : null;\n var rowHeight = row !== null ? allRowHeights.get(row) : null;\n return {\n row,\n column,\n modelRow: modelRow !== null && modelRow !== void 0 ? modelRow : null,\n modelColumn: modelColumn !== null && modelColumn !== void 0 ? modelColumn : null,\n left: left !== null && left !== void 0 ? left : null,\n top: top !== null && top !== void 0 ? top : null,\n columnWidth: columnWidth !== null && columnWidth !== void 0 ? columnWidth : null,\n rowHeight: rowHeight !== null && rowHeight !== void 0 ? rowHeight : null\n };\n }\n static getColumnHeaderDepthAtY(y, metrics) {\n var row = GridUtils.getRowAtY(y, metrics);\n var {\n columnHeaderHeight,\n columnHeaderMaxDepth\n } = metrics;\n if (row === null && y <= columnHeaderHeight * columnHeaderMaxDepth) {\n return clamp(columnHeaderMaxDepth - Math.ceil(y / columnHeaderHeight), 0, columnHeaderMaxDepth - 1);\n }\n return undefined;\n }\n\n /**\n * Iterate through each floating item at the start and call a callback, returning the first result\n * @param start The count of floating items at the start\n * @param total The total number of items\n * @param callback Function to call for each item\n * @returns The result from the callback\n */\n static iterateFloatingStart(start, total, callback) {\n for (var i = 0; i < start && i < total; i += 1) {\n var result = callback(i);\n if (result !== undefined) {\n return result;\n }\n }\n return undefined;\n }\n\n /**\n * Iterate through floating items at the end. Iterates in increasing order.\n * @param end The count of floating items at the end\n * @param total The total number of items\n * @param callback Function to call for each item\n * @returns The result from the callback\n */\n static iterateFloatingEnd(end, total, callback) {\n for (var i = 0; i < end && total - (end - i) >= 0; i += 1) {\n var result = callback(total - (end - i));\n if (result !== undefined) {\n return result;\n }\n }\n return undefined;\n }\n\n /**\n * Iterate through all floating items in increasing order, starting with the top items.\n * @param start Count of start floating rows, e.g. floatingTopRowCount\n * @param end Count of end floating rows, e.g. floatingBottomRowCount\n * @param total Total number of items\n * @param callback Callback called for each value, stopping the iterating and returning the value if one is returned\n */\n static iterateFloating(start, end, total, callback) {\n var result = GridUtils.iterateFloatingStart(start, total, callback);\n if (result !== undefined) {\n return result;\n }\n return GridUtils.iterateFloatingEnd(end, total, callback);\n }\n\n /**\n * Iterate through all items in one dimension on the grid - first floating, then visible.\n * Call the callback for each item, break if a result is returned and return that result.\n * @param visibleStart Index of the start of the visible viewport\n * @param visibleEnd Index of the end of the visible viewport\n * @param floatingStartCount Number of items floating at the start\n * @param floatingEndCount Number of items floating at the end\n * @param totalCount Total number of items\n * @param callback Callback to call for each item\n * @returns The first result from the callback called, or undefined\n */\n static iterateAllItems(visibleStart, visibleEnd, floatingStartCount, floatingEndCount, totalCount, callback) {\n var visibleStartIndex = Math.max(visibleStart, floatingStartCount);\n var visibleEndIndex = Math.min(visibleEnd, totalCount - floatingEndCount - 1);\n var result = GridUtils.iterateFloating(floatingStartCount, floatingEndCount, totalCount, callback);\n if (result !== undefined) {\n return result;\n }\n for (var i = visibleStartIndex; i <= visibleEndIndex; i += 1) {\n result = callback(i);\n if (result !== undefined) {\n return result;\n }\n }\n return undefined;\n }\n\n /**\n * Check if the coordinate is within the item specified in this dimension\n * @param itemIndex Index of the item to check\n * @param itemCoordinatess Coordinate of all items in this dimension\n * @param itemSizes Size of all items in this dimension\n * @param coordinate The coordinate to check\n * @returns True if the coordinate is within the item specified, false otherwise\n */\n static isInItem(itemIndex, itemCoordinates, itemSizes, coordinate) {\n var _itemCoordinates$get, _itemSizes$get;\n var itemX = (_itemCoordinates$get = itemCoordinates.get(itemIndex)) !== null && _itemCoordinates$get !== void 0 ? _itemCoordinates$get : 0;\n var itemSize = (_itemSizes$get = itemSizes.get(itemIndex)) !== null && _itemSizes$get !== void 0 ? _itemSizes$get : 0;\n return itemX <= coordinate && coordinate <= itemX + itemSize;\n }\n\n /**\n * Get the Index of the item at the provided offset\n * @param offset Coordinate of the offset to get the item of\n * @param itemCount The total count of items\n * @param floatingStart Count of floating items at the start\n * @param floatingEnd Count of floating items at the end\n * @param items Index of all items\n * @param itemCoordinates The coordinate of each item\n * @param itemSizes The size of each item\n * @returns The item index, or null if no item matches\n */\n static getItemAtOffset(offset, itemCount, floatingStart, floatingEnd, items, itemCoordinates, itemSizes) {\n var ignoreFloating = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : false;\n var floatingItem = ignoreFloating ? undefined : GridUtils.iterateFloating(floatingStart, floatingEnd, itemCount, item => {\n if (GridUtils.isInItem(item, itemCoordinates, itemSizes, offset)) {\n return item;\n }\n return undefined;\n });\n if (!ignoreFloating && floatingItem !== undefined) {\n return floatingItem;\n }\n for (var i = 0; i < items.length; i += 1) {\n var item = items[i];\n if (GridUtils.isInItem(item, itemCoordinates, itemSizes, offset)) {\n return item;\n }\n }\n return null;\n }\n\n /**\n * Get the index of the column at the specified x coordinate\n * @param x Coordinate to get the item of\n * @param metrics Grid metrics\n * @returns Index of the column at that coordinate, or null if no column matches\n */\n static getColumnAtX(x, metrics) {\n var ignoreFloating = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var {\n columnCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n visibleColumns,\n allColumnXs,\n allColumnWidths,\n gridX\n } = metrics;\n if (x < gridX) {\n return null;\n }\n return this.getItemAtOffset(x - gridX, columnCount, floatingLeftColumnCount, floatingRightColumnCount, visibleColumns, allColumnXs, allColumnWidths, ignoreFloating);\n }\n\n /**\n * Get the index of the row at the specified y coordinate\n * @param y Coordinate to get the item of\n * @param metrics Grid metrics\n * @returns Index of the row at that coordinate, or null if no row matches\n */\n static getRowAtY(y, metrics) {\n var {\n floatingTopRowCount,\n floatingBottomRowCount,\n rowCount,\n visibleRows,\n allRowYs,\n allRowHeights,\n gridY\n } = metrics;\n if (y < gridY) {\n return null;\n }\n return this.getItemAtOffset(y - gridY, rowCount, floatingTopRowCount, floatingBottomRowCount, visibleRows, allRowYs, allRowHeights);\n }\n\n /**\n * Iterate backward through the visible items until a shown item is hit\n * @param startIndex The index to start from\n * @param modelIndexes The mapping of model indexes\n * @param visibleItems The visible items\n * @param userSizes The user set sizes\n * @returns Index of the next visible item, or null if no more are visible\n */\n static getNextShownItem(startIndex, modelIndexes, visibleItems, userSizes) {\n var visibleItemIndex = visibleItems.findIndex(value => value === startIndex) || 0;\n visibleItemIndex -= 1;\n while (visibleItemIndex != null && visibleItemIndex >= 0) {\n var item = visibleItems[visibleItemIndex];\n var modelIndex = modelIndexes.get(item);\n if (modelIndex != null && userSizes.get(modelIndex) !== 0) {\n return item;\n }\n visibleItemIndex -= 1;\n }\n return null;\n }\n\n /**\n * Iterate backward through the visible columns until a shown column is hit\n * @param columnIndex The column index to start iterating backward from\n * @param metrics The GridMetricCalculator metrics\n * @returns Index of the next visible item, or null if no more are visible\n */\n static getNextShownColumn(startIndex, metrics) {\n var {\n modelColumns,\n visibleColumns,\n userColumnWidths\n } = metrics;\n return GridUtils.getNextShownItem(startIndex, modelColumns, visibleColumns, userColumnWidths);\n }\n\n /**\n * Iterate backward through the visible rows until a shown row is hit\n * @param rowIndex The row index to start iterating backward from\n * @param metrics The GridMetricCalculator metrics\n * @returns Index of the next visible item, or null if no more are visible\n */\n static getNextShownRow(startIndex, metrics) {\n var {\n modelRows,\n visibleRows,\n userRowHeights\n } = metrics;\n return GridUtils.getNextShownItem(startIndex, modelRows, visibleRows, userRowHeights);\n }\n\n /**\n * Gets the column index if the x/y coordinates provided are close enough to the separator, otherwise null\n * @param x Mouse x coordinate\n * @param y Mouse y coordinate\n * @param metrics The grid metrics\n * @param theme The grid theme with potential user overrides\n * @returns Index of the column separator at the coordinates provided, or null if none match\n */\n static getColumnSeparatorIndex(x, y, metrics, theme) {\n var {\n rowHeaderWidth,\n columnHeaderHeight,\n floatingColumns,\n floatingLeftWidth,\n visibleColumns,\n allColumnXs,\n allColumnWidths,\n columnHeaderMaxDepth\n } = metrics;\n var {\n allowColumnResize,\n headerSeparatorHandleSize\n } = theme;\n if (columnHeaderMaxDepth * columnHeaderHeight < y || !allowColumnResize || headerSeparatorHandleSize <= 0) {\n return null;\n }\n var gridX = x - rowHeaderWidth;\n var halfSeparatorSize = headerSeparatorHandleSize * 0.5;\n\n // Iterate through the floating columns first since they're on top\n var isPreviousColumnHidden = false;\n for (var i = floatingColumns.length - 1; i >= 0; i -= 1) {\n var _allColumnXs$get, _allColumnWidths$get;\n var column = floatingColumns[i];\n var columnX = (_allColumnXs$get = allColumnXs.get(column)) !== null && _allColumnXs$get !== void 0 ? _allColumnXs$get : 0;\n var columnWidth = (_allColumnWidths$get = allColumnWidths.get(column)) !== null && _allColumnWidths$get !== void 0 ? _allColumnWidths$get : 0;\n var isColumnHidden = columnWidth === 0;\n if (!isPreviousColumnHidden || !isColumnHidden) {\n var midX = columnX + columnWidth;\n if (isColumnHidden) {\n midX += halfSeparatorSize;\n } else if (isPreviousColumnHidden) {\n midX -= halfSeparatorSize;\n }\n var minX = midX - halfSeparatorSize;\n var maxX = midX + halfSeparatorSize;\n if (minX <= gridX && gridX <= maxX) {\n return column;\n }\n isPreviousColumnHidden = isColumnHidden;\n }\n }\n\n // Iterate backward so that you can reveal hidden columns properly\n isPreviousColumnHidden = false;\n for (var _i = visibleColumns.length - 1; _i >= 0; _i -= 1) {\n var _allColumnXs$get2, _allColumnWidths$get2;\n var _column = visibleColumns[_i];\n var _columnX = (_allColumnXs$get2 = allColumnXs.get(_column)) !== null && _allColumnXs$get2 !== void 0 ? _allColumnXs$get2 : 0;\n var _columnWidth = (_allColumnWidths$get2 = allColumnWidths.get(_column)) !== null && _allColumnWidths$get2 !== void 0 ? _allColumnWidths$get2 : 0;\n var _isColumnHidden = _columnWidth === 0;\n\n // If this column is under the floating columns \"layer\". Terminate early.\n if (_columnX < floatingLeftWidth - _columnWidth) {\n return null;\n }\n if (!isPreviousColumnHidden || !_isColumnHidden) {\n var _midX = _columnX + _columnWidth;\n if (_isColumnHidden) {\n _midX += halfSeparatorSize;\n } else if (isPreviousColumnHidden) {\n _midX -= halfSeparatorSize;\n }\n var _minX = _midX - halfSeparatorSize;\n var _maxX = _midX + halfSeparatorSize;\n if (_minX <= gridX && gridX <= _maxX) {\n return _column;\n }\n isPreviousColumnHidden = _isColumnHidden;\n }\n }\n return null;\n }\n\n /**\n * Check if the item specified is hidden\n * @param itemIndex Index of the item to check\n * @param visibleSizes Sizes of all visible items\n * @returns True if the item is hidden, false otherwise\n */\n static isItemHidden(itemIndex, visibleSizes) {\n return visibleSizes.get(itemIndex) === 0;\n }\n\n /**\n * Check if the column specified is hidden\n * @param columnIndex Index of the column to check\n * @param metrics Grid metrics\n * @returns True if the column is hidden, false otherwise\n */\n static isColumnHidden(columnIndex, metrics) {\n var {\n allColumnWidths\n } = metrics;\n return GridUtils.isItemHidden(columnIndex, allColumnWidths);\n }\n\n /**\n * Check if the provided row is a floating row\n * @param row The row index to check\n * @param metrics The grid metrics to check against\n * @returns True if it's a floating row, false otherwise\n */\n static isFloatingRow(row, metrics) {\n if (row == null) {\n return false;\n }\n var {\n floatingTopRowCount,\n floatingBottomRowCount,\n rowCount\n } = metrics;\n return row < floatingTopRowCount || row >= rowCount - floatingBottomRowCount;\n }\n\n /**\n * Check if the provided column is a floating column\n * @param column The column index to check\n * @param metrics The grid metrics to check against\n * @returns True if it's a floating column, false otherwise\n */\n static isFloatingColumn(column, metrics) {\n if (column == null) {\n return false;\n }\n var {\n floatingLeftColumnCount,\n floatingRightColumnCount,\n columnCount\n } = metrics;\n return column < floatingLeftColumnCount || column >= columnCount - floatingRightColumnCount;\n }\n\n /**\n * Get all the items that are hidden under the same Index\n * E.g. If columns are 1, 2, 3, 4, 5, and column 2, 3, 4 are hidden, and we check for item 4, the return will be [2, 3, 4]\n * @param itemIndex Index of the item to start at\n * @param visibleSizes Visible size map\n * @param visibleItems Visible items\n * @returns Array of items that are hidden\n */\n static getHiddenItems(itemIndex, visibleSizes, visibleItems) {\n if (!GridUtils.isItemHidden(itemIndex, visibleSizes)) {\n return [];\n }\n var hiddenItems = [itemIndex];\n var visibleItemIndex = visibleItems.findIndex(value => value === itemIndex);\n for (var i = visibleItemIndex - 1; i >= 0; i -= 1) {\n var item = visibleItems[i];\n if (!GridUtils.isItemHidden(item, visibleSizes)) {\n break;\n }\n hiddenItems.push(item);\n }\n return hiddenItems;\n }\n\n /**\n * Get all the columns that are hidden under the same Index\n * @param columnIndex Index of the item to start at\n * @param metrics Grid metrics\n * @returns Array of items that are hidden\n */\n static getHiddenColumns(columnIndex, metrics) {\n var {\n visibleColumns,\n allColumnWidths\n } = metrics;\n return GridUtils.getHiddenItems(columnIndex, allColumnWidths, visibleColumns);\n }\n\n /**\n * Returns the row index if the x/y coordinates provided are close enough to the separator, otherwise null\n * @param x X coordinate to check\n * @param y Y coordinate to check\n * @param metrics The grid metrics\n * @param theme The grid theme\n * @returns Index of the row separator at the coordinates provided, or null if none match\n */\n static getRowSeparatorIndex(x, y, metrics, theme) {\n var {\n rowHeaderWidth,\n columnHeaderHeight,\n visibleRows,\n allRowYs,\n allRowHeights\n } = metrics;\n var {\n allowRowResize,\n headerSeparatorHandleSize\n } = theme;\n if (rowHeaderWidth < x || !allowRowResize || headerSeparatorHandleSize <= 0) {\n return null;\n }\n var gridY = y - columnHeaderHeight;\n var halfSeparatorSize = headerSeparatorHandleSize * 0.5;\n\n // Iterate backward so you can reveal hidden rows properly\n var isPreviousRowHidden = false;\n for (var i = visibleRows.length - 1; i >= 0; i -= 1) {\n var _allRowYs$get, _allRowHeights$get;\n var row = visibleRows[i];\n var rowY = (_allRowYs$get = allRowYs.get(row)) !== null && _allRowYs$get !== void 0 ? _allRowYs$get : 0;\n var rowHeight = (_allRowHeights$get = allRowHeights.get(row)) !== null && _allRowHeights$get !== void 0 ? _allRowHeights$get : 0;\n var isRowHidden = rowHeight === 0;\n if (!isPreviousRowHidden || !isRowHidden) {\n var midY = rowY + rowHeight;\n if (isRowHidden) {\n midY += halfSeparatorSize;\n } else if (isPreviousRowHidden) {\n midY -= halfSeparatorSize;\n }\n var minY = midY - halfSeparatorSize;\n var maxY = midY + halfSeparatorSize;\n if (minY <= gridY && gridY <= maxY) {\n return row;\n }\n isPreviousRowHidden = isRowHidden;\n }\n }\n return null;\n }\n\n /**\n * Check if the row specified is hidden\n * @param rowIndex Index of the row to check\n * @param metrics Grid metrics\n * @returns True if the row is hidden, false otherwise\n */\n static isRowHidden(rowIndex, metrics) {\n var {\n allRowHeights\n } = metrics;\n return GridUtils.isItemHidden(rowIndex, allRowHeights);\n }\n\n /**\n * Get all the rows that are hidden under the same Index\n * @param rowIndex Index of the item to start at\n * @param metrics Grid metrics\n * @returns Array of items that are hidden\n */\n static getHiddenRows(rowIndex, metrics) {\n var {\n visibleRows,\n allRowHeights\n } = metrics;\n return GridUtils.getHiddenItems(rowIndex, allRowHeights, visibleRows);\n }\n\n /**\n * Set a new order for items in the grid\n * @param from The visible index to move from\n * @param to The visible index to move the item to\n * @param oldMovedItems The old reordered items\n * @returns The new reordered items. The original array if the operation is a no-op.\n */\n\n // The overloads are so we can return the original array if the operation is a no-op\n static moveItem(from, to, oldMovedItems) {\n if (from === to) {\n return oldMovedItems;\n }\n var movedItems = [...oldMovedItems];\n var lastMovedItem = movedItems[movedItems.length - 1];\n\n // Check if we should combine with the previous move\n // E.g. 1 -> 2, 2 -> 3 can just be 1 -> 3\n if (lastMovedItem != null && !isBoundedAxisRange(lastMovedItem.from) && lastMovedItem.to === from) {\n // Remove the move if it is now a no-op\n if (lastMovedItem.from === to) {\n movedItems.pop();\n } else {\n movedItems[movedItems.length - 1] = _objectSpread(_objectSpread({}, lastMovedItem), {}, {\n to\n });\n }\n } else {\n movedItems.push({\n from,\n to\n });\n }\n return movedItems;\n }\n\n /**\n * Move a visible range in the grid\n *\n * This will effectively slice the range out of the grid,\n * re-index the remaining columns,\n * then insert the range with the first element at the provided index\n *\n * @param from The visible axis range to move\n * @param to The visible index to move the start of the range to\n * @param oldMovedItems The old reordered items\n * @param isPreMoveTo If toParam is the index before the movement\n * If true, this will account for the shift when moving\n * a range before the drop positin\n * E.g. Move range [0, 2] 1 item down (after element 3)\n * The move is [0, 2] -> 1 if this is false. [0, 2] -> 3 if this is true\n * Both will result in [0, 2] -> 1\n * @returns The new reordered items. The original array if the operation is a no-op.\n */\n\n // The overloads are so we can return the original array if the operation is a no-op\n static moveRange(from, toParam, oldMovedItems) {\n var isPreMoveTo = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n if (from[0] === from[1]) {\n return GridUtils.moveItem(from[0], toParam, oldMovedItems);\n }\n var to = toParam;\n if (isPreMoveTo && from[0] < toParam) {\n to -= from[1] - from[0];\n }\n if (from[0] === to) {\n return oldMovedItems;\n }\n var movedItems = [...oldMovedItems];\n var lastMovedItem = movedItems[movedItems.length - 1];\n\n // Check if we should combine with the previous move\n // E.g. [1, 2] -> 2, [2, 3] -> 3 can just be [1, 2] -> 3\n if (lastMovedItem != null && isBoundedAxisRange(lastMovedItem.from) && lastMovedItem.from[1] - lastMovedItem.from[0] === from[1] - from[0] && lastMovedItem.to === from[0]) {\n movedItems[movedItems.length - 1] = _objectSpread(_objectSpread({}, lastMovedItem), {}, {\n to\n });\n } else {\n movedItems.push({\n from,\n to\n });\n }\n var newLastMovedItem = movedItems[movedItems.length - 1];\n // Remove the move if it is now a no-op\n if (isBoundedAxisRange(newLastMovedItem.from) && newLastMovedItem.from[0] === newLastMovedItem.to) {\n movedItems.pop();\n }\n return movedItems;\n }\n // The overloads are so we can return the original array if the operation is a no-op\n static moveItemOrRange(from, to, oldMovedItems) {\n var isPreMoveTo = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n return Array.isArray(from) ? GridUtils.moveRange(from, to, oldMovedItems, isPreMoveTo) : GridUtils.moveItem(from, to, oldMovedItems);\n }\n\n /**\n * Applies the items moves to the AxisRange\n * @param start The start index of the range\n * @param end The end index of the range\n * @param movedItems The move operations to apply\n * @param reverse If the moved items should be applied in reverse (this reverses the effects of the moves)\n * @returns A list of AxisRanges in the translated space. Possibly multiple non-continuous ranges\n */\n static applyItemMoves(start, end, movedItems) {\n var reverse = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var result = [[start, end]];\n var _loop = function _loop() {\n var {\n from: fromItemOrRange,\n to: toItem\n } = movedItems[i];\n var length = 1;\n var fromItem;\n if (isBoundedAxisRange(fromItemOrRange)) {\n length = fromItemOrRange[1] - fromItemOrRange[0] + 1; // Ranges are inclusive\n [fromItem] = fromItemOrRange;\n } else {\n fromItem = fromItemOrRange;\n }\n var fromStart = reverse ? toItem : fromItem;\n var fromEnd = fromStart + length - 1;\n var toStart = reverse ? fromItem : toItem;\n var moveDistance = toStart - fromStart;\n var nextResult = [];\n var _loop2 = function _loop2() {\n var _result$j$, _result$j$2;\n var currentStart = (_result$j$ = result[j][0]) !== null && _result$j$ !== void 0 ? _result$j$ : Number.NEGATIVE_INFINITY;\n var currentEnd = (_result$j$2 = result[j][1]) !== null && _result$j$2 !== void 0 ? _result$j$2 : Number.POSITIVE_INFINITY;\n var movedRange;\n var currentResult = [[currentStart, fromStart - 1], [fromStart, fromEnd], [fromEnd + 1, currentEnd]].map(_ref2 => {\n var [s, e] = _ref2;\n return [\n // Cap the ranges to within the current range bounds\n Math.max(s, currentStart), Math.min(e, currentEnd)];\n }).filter(_ref3 => {\n var [s, e] = _ref3;\n return s <= e;\n }) // Remove invalid ranges\n .map(range => {\n var [s, e] = range;\n if (fromStart <= s && fromEnd >= e) {\n // Current range in moved range\n movedRange = [s + moveDistance, e + moveDistance];\n return movedRange;\n }\n if (fromEnd < s) {\n // Current range is after moved range\n return [s - length, e - length];\n }\n return range;\n }).map(range => {\n var [s, e] = range;\n if (toStart > s && toStart <= e) {\n // Moved range splits this range\n return [[s, toStart - 1], [toStart + length, e + length]];\n }\n if (range === movedRange) {\n // Moved range has already been shifted\n return [range];\n }\n if (toStart <= s) {\n // Moved range shifts this range right\n return [[s + length, e + length]];\n }\n return [range];\n }).flat();\n nextResult.push(...currentResult);\n };\n for (var j = 0; j < result.length; j += 1) {\n _loop2();\n }\n\n // Return infinity values back to null\n result = nextResult.map(_ref => {\n var [s, e] = _ref;\n return [Number.isFinite(s) ? s : null, Number.isFinite(e) ? e : null];\n });\n };\n for (var i = reverse ? movedItems.length - 1 : 0; reverse ? i >= 0 : i < movedItems.length; reverse ? i -= 1 : i += 1) {\n _loop();\n }\n return result;\n }\n\n /**\n * Applies the items moves to the givengrid range\n * @param range The grid range to translate\n * @param movedColumns The moved columns\n * @param movedRows The moved rows\n * @param reverse If the moved items should be reversed (i.e. visible to model range)\n * @returns A list of grid ranges in the translated space. Possibly multiple non-continuous ranges\n */\n static translateRange(range, movedColumns, movedRows, reverse) {\n var columnRanges = GridUtils.applyItemMoves(range.startColumn, range.endColumn, movedColumns, reverse);\n var rowRanges = GridUtils.applyItemMoves(range.startRow, range.endRow, movedRows, reverse);\n var ranges = [];\n for (var i = 0; i < columnRanges.length; i += 1) {\n var c = columnRanges[i];\n for (var j = 0; j < rowRanges.length; j += 1) {\n var r = rowRanges[j];\n ranges.push(new GridRange(c[0], r[0], c[1], r[1]));\n }\n }\n return ranges;\n }\n\n /**\n * Retrieve the model index given the currently moved items\n * @param visibleIndex The visible index of the item to get the model index for\n * @param movedItems The moved items\n * @returns The model index of the item\n */\n static getModelIndex(visibleIndex, movedItems) {\n var modelIndex = GridUtils.applyItemMoves(visibleIndex, visibleIndex, movedItems, true)[0][0];\n return modelIndex;\n }\n\n /**\n * Retrieve the model indexes given the currently moved items\n * @param visibleIndexes The visible indexes of the item to get the model indexes for\n * @param movedItems The moved items\n * @returns The model indexes of the item\n */\n static getModelIndexes(visibleIndexes, movedItems) {\n return visibleIndexes.map(i => GridUtils.getModelIndex(i, movedItems));\n }\n\n /**\n * Translate the provided UI start/end indexes to the model start/end indexes by applying the `movedItems` transformations.\n * Since moved items can split apart a range, multiple pairs of indexes are returned\n *\n * @param start Start item in one dimension\n * @param end End item in one dimension\n * @param movedItems Moved item pairs in this dimension\n * @returns Array of start/end pairs of the indexes after transformations applied.\n */\n static getModelRangeIndexes(start, end, movedItems) {\n return GridUtils.applyItemMoves(start, end, movedItems, true);\n }\n\n /**\n * Translate the provided UI range into model range, using the `movedColumns` and `movedRows` to apply the necessary transforms.\n * `movedColumns` and `movedRows` are array of operations done to the UI indexes to re-order items\n *\n * @param uiRange The currently selected UI ranges\n * @param movedColumns The moved column pairs\n * @param movedRows The moved row pairs\n * @returns The model ranges after translation.\n */\n static getModelRange(uiRange) {\n var movedColumns = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : EMPTY_ARRAY;\n var movedRows = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : EMPTY_ARRAY;\n return GridUtils.translateRange(uiRange, movedColumns, movedRows, true);\n }\n\n /**\n * Translate the provided UI range into model ranges, using the `movedColumns` and `movedRows` to apply the necessary transforms.\n * `movedColumns` and `movedRows` are array of operations done to the UI indexes to re-order items\n *\n * @param uiRanges The currently selected UI ranges\n * @param movedColumns The moved column pairs\n * @param movedRows The moved row pairs\n * @returns The model ranges after translation.\n */\n static getModelRanges(uiRanges) {\n var movedColumns = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : EMPTY_ARRAY;\n var movedRows = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : EMPTY_ARRAY;\n var modelRanges = [];\n for (var i = 0; i < uiRanges.length; i += 1) {\n modelRanges.push(...GridUtils.getModelRange(uiRanges[i], movedColumns, movedRows));\n }\n return modelRanges;\n }\n\n /**\n * Translate the provided UI start/end indexes to the visible start/end indexes by applying the `movedItems` transformations.\n * Since moved items can split apart a range, multiple pairs of indexes are returned\n *\n * @param start Start item in one dimension\n * @param end End item in one dimension\n * @param movedItems Moved item pairs in this dimension\n * @returns Array of start/end pairs of the indexes after transformations applied.\n */\n static getVisibleRangeIndexes(start, end, movedItems) {\n return GridUtils.applyItemMoves(start, end, movedItems, false);\n }\n\n /**\n * Translate the provided UI range into visible range, using the `movedColumns` and `movedRows` to apply the necessary transforms.\n * `movedColumns` and `movedRows` are array of operations done to the UI indexes to re-order items\n *\n * @param uiRange The currently selected UI ranges\n * @param movedColumns The moved column pairs\n * @param movedRows The moved row pairs\n * @returns The model ranges after translation.\n */\n static getVisibleRange(modelRange) {\n var movedColumns = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : EMPTY_ARRAY;\n var movedRows = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : EMPTY_ARRAY;\n return this.translateRange(modelRange, movedColumns, movedRows, false);\n }\n\n /**\n * Translate the provided model ranges into visible ranges, using the `movedColumns` and `movedRows` to apply the necessary transforms.\n * `movedColumns` and `movedRows` are array of operations done to the UI indexes to re-order items\n *\n * @param modelRanges The model ranges\n * @param movedColumns The moved column pairs\n * @param movedRows The moved row pairs\n * @returns The model ranges after translation.\n */\n static getVisibleRanges(modelRanges) {\n var movedColumns = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : EMPTY_ARRAY;\n var movedRows = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : EMPTY_ARRAY;\n var visibleRanges = [];\n for (var i = 0; i < modelRanges.length; i += 1) {\n visibleRanges.push(...GridUtils.getVisibleRange(modelRanges[i], movedColumns, movedRows));\n }\n return visibleRanges;\n }\n\n /**\n * Retrieve the visible index given the currently moved items\n * @param modelIndex The model index to get the visible index for\n * @param movedItems Moved items\n * @returns The visible index of the item\n */\n static getVisibleIndex(modelIndex, movedItems) {\n var visibleIndex = GridUtils.applyItemMoves(modelIndex, modelIndex, movedItems)[0][0];\n return visibleIndex;\n }\n\n /**\n * Retrieve the visible indexes given the currently moved items\n * @param modelIndexes The model indexes to get the visible indexes for\n * @param movedItems Moved items\n * @returns The visible indexes of the item\n */\n static getVisibleIndexes(modelIndexes, movedItems) {\n return modelIndexes.map(i => GridUtils.getVisibleIndex(i, movedItems));\n }\n\n /**\n * Check if the current platform is Mac\n * @returns True if this platform is a Mac, false otherwise\n */\n static isMacPlatform() {\n var {\n platform\n } = window.navigator;\n return platform.startsWith('Mac');\n }\n\n /**\n * Get the modifier key for the current platform\n * @returns The modifier key for the current platform\n */\n static getModifierKey() {\n if (GridUtils.isMacPlatform()) {\n return 'metaKey';\n }\n return 'ctrlKey';\n }\n\n /**\n * Check if the modifier key is down for the given event\n * @param event The event to check\n * @returns True if the modifier key is down, false otherwise\n */\n static isModifierKeyDown(event) {\n var modifierKey = GridUtils.getModifierKey();\n return event[modifierKey];\n }\n\n /**\n * Check if the user has hidden the specified column\n * @param modelIndex The model index to check\n * @param userColumnWidths The user set column widths\n * @returns True if the user has hidden the column\n */\n static checkColumnHidden(modelIndex, userColumnWidths) {\n return userColumnWidths.get(modelIndex) === 0;\n }\n\n /**\n * Check if all the columns specified are hidden\n * @param columns Columns to check\n * @param userColumnWidths The user set column widths\n * @returns True if the user has hidden all of the columns\n */\n static checkAllColumnsHidden(columns, userColumnWidths) {\n if (userColumnWidths.size === 0) {\n return false;\n }\n return columns.every(column => userColumnWidths.get(column) === 0);\n }\n\n /**\n * Get the bounds the mouse needs to be dragged outside of from an initial selection before scrolling occurs.\n * Taking into account any floating rows that may be covering the viewport.\n * @param metrics Grid metrics\n * @param row The row they started dragging in\n * @param column The column they started the drag from\n * @returns Dimensions of the drag area in relation to the canvas they need to drag outside of to start scrolling\n */\n static getScrollDragBounds(metrics, row, column) {\n var {\n gridX,\n gridY,\n width,\n height,\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n floatingLeftWidth,\n floatingRightWidth,\n floatingTopHeight,\n floatingBottomHeight,\n columnCount,\n rowCount\n } = metrics;\n var x1 = gridX;\n var y1 = gridY;\n var x2 = width;\n var y2 = height;\n if (column != null) {\n if (column > floatingLeftColumnCount) {\n x1 += floatingLeftWidth;\n }\n if (column < columnCount - floatingRightColumnCount) {\n x2 -= floatingRightWidth;\n }\n }\n if (row != null) {\n if (row > floatingTopRowCount) {\n y1 += floatingTopHeight;\n }\n if (row < rowCount - floatingBottomRowCount) {\n y2 -= floatingBottomHeight;\n }\n }\n return {\n x1,\n y1,\n x2,\n y2\n };\n }\n\n /**\n * Converts the delta coordinates from the provided wheel event to pixels\n * Different platforms have different ways of providing the delta so this normalizes it\n * @param wheelEvent The mouse wheel event to get the scrolling delta for\n * @param pageWidth The width of the page that is scrolling\n * @param pageHeight The height of the page that is scrolling\n * @param lineWidth The width of the line scrolling in line mode\n * @param lineHeight The height of the line scrolling in line mode\n * @returns The delta coordinates normalized to pixels\n */\n static getScrollDelta(wheelEvent) {\n var pageWidth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1024;\n var pageHeight = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 768;\n var lineWidth = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 20;\n var lineHeight = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 20;\n var {\n deltaX,\n deltaY\n } = wheelEvent;\n\n // Flip scroll direction if shiftKey is held on windows/linux.\n // On mac, deltaX/Y values are switched at the event level when shiftKey=true.\n // Guard on strictly Y only changing, to ignore trackpad diagonal motion,\n // through that guard may not be necessary, but it is difficult to determine for\n // all platforms/browser/scroll method combos.\n if (!GridUtils.isMacPlatform() && wheelEvent.shiftKey && wheelEvent.deltaX === 0 && wheelEvent.deltaY !== 0) {\n deltaX = wheelEvent.deltaY;\n deltaY = wheelEvent.deltaX;\n }\n\n // Normalize other deltaMode values to pixel units\n // deltaMode 0, is already in pixel units\n if ((wheelEvent === null || wheelEvent === void 0 ? void 0 : wheelEvent.deltaMode) === WheelEvent.DOM_DELTA_PAGE) {\n // Users can set OS to be in deltaMode page\n // scrolly by page units as pixels\n deltaX *= pageWidth;\n deltaY *= pageHeight;\n } else if ((wheelEvent === null || wheelEvent === void 0 ? void 0 : wheelEvent.deltaMode) === WheelEvent.DOM_DELTA_LINE) {\n // Firefox reports deltaMode line\n // Normalize distance travelled between browsers\n // but remain ~platform/browser combo consistent\n if (GridUtils.isMacPlatform()) {\n // for mac treat lines as a standard row height\n // on mac, firefox travels less distance then chrome per tick\n deltaX = Math.round(deltaX * lineWidth);\n deltaY = Math.round(deltaY * lineHeight);\n } else {\n // for windows convert to pixels using the same method as chrome\n // chrome goes 100 per 3 lines, and firefox would go 102 per 3 (17 lineheight * 3 lines * 2)\n // make the behaviour the same between as it's close enough\n deltaX = Math.round(deltaX * this.PIXELS_PER_LINE);\n deltaY = Math.round(deltaY * this.PIXELS_PER_LINE);\n }\n }\n return {\n deltaX,\n deltaY\n };\n }\n static compareRanges(range1, range2) {\n if (range1[0] == null || range1[1] == null || range2[0] == null || range2[1] == null) {\n return 0;\n }\n return range1[0] !== range2[0] ? range1[0] - range2[0] : range1[1] - range2[1];\n }\n static mergeSortedRanges(ranges) {\n var mergedRanges = [];\n for (var i = 0; i < ranges.length; i += 1) {\n var range = ranges[i];\n var start = range[0];\n var end = range[1];\n if (i === 0) {\n mergedRanges.push([start, end]);\n } else if (start - 1 <= mergedRanges[mergedRanges.length - 1][1]) {\n mergedRanges[mergedRanges.length - 1][1] = Math.max(mergedRanges[mergedRanges.length - 1][1], end);\n } else {\n mergedRanges.push([start, end]);\n }\n }\n return mergedRanges;\n }\n\n /**\n * Translates coordinates that are relative to gridX/gridY to be translated by gridX and gridY\n * @param tokenBox The token box to translate\n * @param metrics The grid metrics\n * @returns The token box with translated coordinates\n */\n static translateTokenBox(tokenBox, metrics) {\n var {\n x1: left,\n y1: top,\n x2: right,\n y2: bottom\n } = tokenBox;\n var {\n gridX,\n gridY,\n width: gridWidth,\n height: gridHeight,\n verticalBarWidth,\n horizontalBarHeight\n } = metrics;\n\n // Clamp the values within the grid\n var newLeft = clamp(gridX + left, gridX, gridWidth - verticalBarWidth);\n var newRight = clamp(gridX + right, gridX, gridWidth - verticalBarWidth);\n var newTop = clamp(gridY + top, gridY, gridHeight - horizontalBarHeight);\n var newBottom = clamp(gridY + bottom, gridY, gridHeight - horizontalBarHeight);\n return {\n x1: newLeft,\n y1: newTop,\n x2: newRight,\n y2: newBottom,\n token: tokenBox.token\n };\n }\n\n /**\n * Gets textWidth and X-Y position for a specific cell\n * The textWidth returned is the width that the text can occupy accounting for any other cell markings\n * The width accounts for tree table indents and cell padding, so it is the width the text may consume\n *\n * @param state GridRenderState to get the text metrics for\n * @param column Column of cell to get text metrics for\n * @param row Row of cell to get text metrics for\n * @returns Object with width, x, and y of the text\n */\n static getTextRenderMetrics(state, column, row) {\n var {\n metrics,\n model,\n theme\n } = state;\n var {\n firstColumn,\n allColumnXs,\n allColumnWidths,\n allRowYs,\n allRowHeights,\n modelRows,\n modelColumns\n } = metrics;\n var {\n cellHorizontalPadding,\n treeDepthIndent,\n treeHorizontalPadding\n } = theme;\n var modelRow = getOrThrow(modelRows, row);\n var modelColumn = getOrThrow(modelColumns, column);\n var textAlign = model.textAlignForCell(modelColumn, modelRow);\n var x = getOrThrow(allColumnXs, column);\n var y = getOrThrow(allRowYs, row);\n var columnWidth = getOrThrow(allColumnWidths, column);\n var rowHeight = getOrThrow(allRowHeights, row);\n var isFirstColumn = column === firstColumn;\n var treeIndent = 0;\n if (isExpandableGridModel(model) && model.hasExpandableRows && isFirstColumn) {\n treeIndent = treeDepthIndent * (model.depthForRow(row) + 1) + treeHorizontalPadding;\n }\n var textWidth = columnWidth - treeIndent;\n var textX = x + cellHorizontalPadding;\n var textY = y + rowHeight * 0.5;\n if (textAlign === 'right') {\n textX = x + textWidth - cellHorizontalPadding;\n } else if (textAlign === 'center') {\n textX = x + textWidth * 0.5;\n }\n textX += treeIndent;\n return {\n width: textWidth - cellHorizontalPadding * 2,\n x: textX,\n y: textY\n };\n }\n\n /**\n * Finds tokens in text (urls, emails) that start with https:// or http://\n * @param text The text to search in\n * @returns An array of tokens\n */\n static findTokensWithProtocolInText(text) {\n var tokens = linkifyFind(text);\n return tokens.filter(token => {\n if (token.type === 'url') {\n return /^https?:\\/\\//.test(token.value);\n }\n return true;\n });\n }\n}\n// use same constant as chrome source for windows\n// https://github.com/chromium/chromium/blob/973af9d461b6b5dc60208c8d3d66adc27e53da78/ui/events/blink/web_input_event_builders_win.cc#L285\n_defineProperty(GridUtils, \"PIXELS_PER_LINE\", 100 / 3);\nexport default GridUtils;\n//# sourceMappingURL=GridUtils.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/**\n * Extension of memoizee that clears the entire cache when it's full.\n * This avoids the situation where LRU cache starts thrashing when it fills up.\n * Could look at writing our own memoize with a smarter cache to avoid overhead of\n * LRU queue, but this should be sufficient for now.\n */\nimport memoizee from 'memoizee';\n\n/**\n * @param fn The function to memoize\n * @param options The options to set for memoization\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function memoizeClear(fn, options) {\n var isClearingCache = false;\n var memoizedFn = memoizee(fn, _objectSpread(_objectSpread({}, options), {}, {\n dispose: () => {\n // Need to track when we're clearing because dispose gets called for all items removed\n if (!isClearingCache) {\n isClearingCache = true;\n memoizedFn.clear();\n isClearingCache = false;\n }\n }\n }));\n return memoizedFn;\n}\nexport default memoizeClear;\n//# sourceMappingURL=memoizeClear.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { EventTarget } from 'event-target-shim';\nimport memoizeClear from \"./memoizeClear.js\";\nimport GridUtils from \"./GridUtils.js\";\nvar LINK_TRUNCATION_LENGTH = 5000;\n\n/* eslint class-methods-use-this: \"off\" */\n/* eslint no-unused-vars: \"off\" */\n/**\n * Model for a Grid\n * All of these methods should return very quickly, as they will be called many times in the render cycle.\n * If data needs to be loaded asynchronously, return something immediately, then trigger an event for the table to refresh (Not yet implemented).\n */\nclass GridModel extends EventTarget {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"getCachedTokensInText\", memoizeClear((text, visibleLength) => {\n // If no text is truncated, then directly search in text\n if (visibleLength >= text.length) {\n return GridUtils.findTokensWithProtocolInText(text);\n }\n\n // To check for links, we should check to the first space after the truncatedText length\n var indexOfProceedingWhitespace = text.slice(visibleLength - 1, LINK_TRUNCATION_LENGTH).search(/\\s/); // index or -1 if not found\n\n var lengthOfContent = visibleLength + indexOfProceedingWhitespace;\n // If it doesn't exist, set lengthOfContent to the minimum between length of the original text and 5000\n if (indexOfProceedingWhitespace === -1) {\n lengthOfContent = Math.min(LINK_TRUNCATION_LENGTH, text.length);\n }\n var contentToCheckForLinks = text.substring(0, lengthOfContent);\n return GridUtils.findTokensWithProtocolInText(contentToCheckForLinks);\n }, {\n max: 10000\n }));\n }\n /** Count of rows in the grid */\n /** Count of columns in the grid */\n /** Count of rows that are frozen (or 'floating') at the top */\n get floatingTopRowCount() {\n return 0;\n }\n\n /** Count of rows that are frozen at the bottom */\n get floatingBottomRowCount() {\n return 0;\n }\n\n /** Count of columns that are frozen (or 'floating') at the left */\n get floatingLeftColumnCount() {\n return 0;\n }\n\n /** Count of columns that are frozen (or 'floating') at the right */\n get floatingRightColumnCount() {\n return 0;\n }\n\n /**\n * How many columns header levels are in the grid\n * Used for column grouping where columns at depth 0 are the base columns\n *\n * A grid with 1-level grouping would have a columnHeaderDepth of 2\n * and column headers at depths 0 and 1\n */\n get columnHeaderMaxDepth() {\n return 1;\n }\n\n /**\n * Get the text for the specified cell\n * @param column Column to get the text for\n * @param row Row to get the text for\n * @returns Text for the specified cell\n */\n\n /**\n * Get the character to replace text when truncated for a specific cell.\n * Leave undefined to show text truncated with ellipsis\n * @param column Column to get the truncation character for\n * @param row Row to get the truncation character for\n * @returns Truncation character for the specified cell\n */\n truncationCharForCell(column, row) {\n return undefined;\n }\n\n /**\n * Get the text alignment for the specified cell\n * @param column Column to get the alignment for\n * @param row Row to get the alignment for\n * @returns Text alignment for the specified cell\n */\n textAlignForCell(column, row) {\n return 'left';\n }\n\n /**\n * Get the color for the text in the specified cell\n * @param column Column to get the color for\n * @param row Row to get the color for\n * @param theme Theme applied to the grid\n * @returns Color for the text in the cell\n */\n colorForCell(column, row, theme) {\n return theme.textColor;\n }\n\n /**\n * Get the background color for the cell\n * @param column Column to get the background color for\n * @param row Row to get the background color for\n * @param theme Theme applied to the grid\n * @returns Background color for the cell\n */\n backgroundColorForCell(column, row, theme) {\n return null;\n }\n\n /**\n * Text for the column header\n * @param column Column to get the header for\n * @param depth Depth to get the header text for. 0 is base columns\n * @returns Text to put in the column header\n */\n\n /** Color for column header\n * @param column Column to get the color for\n * @param depth Header depth to get the color for\n * @returns Color for the header at the depth or null\n */\n colorForColumnHeader(column) {\n var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n return null;\n }\n\n /**\n * Text for the row header\n * @param row Row to get the header for\n * @returns Text to put in the row header\n */\n textForRowHeader(row) {\n return '';\n }\n\n /**\n * Text for the row footer\n * @param row Row to get the footer for\n * @returns Text to put in the row footer\n */\n textForRowFooter(row) {\n return '';\n }\n\n /**\n * @param column Column to check\n * @returns True if the column is movable\n */\n isColumnMovable(column) {\n var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n return true;\n }\n\n /**\n * @param row Row to check\n * @returns True if the row is movable\n */\n isRowMovable(row) {\n return true;\n }\n getColumnHeaderGroup(modelIndex, depth) {\n return undefined;\n }\n getColumnHeaderParentGroup(modelIndex, depth) {\n return undefined;\n }\n\n /**\n * Gets the tokens in the cell at column and row, based on the visible text\n * @param column The model column\n * @param row The model row\n * @param visibleLength The length of the visible text\n * @returns An array of Tokens in the cell\n */\n tokensForCell(column, row) {\n var visibleLength = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : LINK_TRUNCATION_LENGTH;\n var text = this.textForCell(column, row);\n return this.getCachedTokensInText(text, visibleLength);\n }\n renderTypeForCell(column, row) {\n return 'text';\n }\n}\nexport default GridModel;\n//# sourceMappingURL=GridModel.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint-disable class-methods-use-this */\n\nimport { GridModel } from '@deephaven/grid';\nvar EMPTY_ARRAY = [];\nvar EMPTY_SET = new Set();\n\n/**\n * Abstract class that extends the GridModel to have more functionality, like filtering and sorting.\n * For use from IrisGrid.\n * Provides some abstraction from the dh.Table and dh.TreeTable classes, so we can treat them somewhat the same.\n * Note that it still uses dh.Column, dh.FilterCondition, dh.Sort, etc., still. Theoretically should abstract\n * those out as well, so there's no dependency on IrisAPI at all, but it's a lot of work for no real gain at this time.\n */\nclass IrisGridModel extends GridModel {\n constructor(dh) {\n super();\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"listenerCount\", void 0);\n this.dh = dh;\n this.listenerCount = 0;\n }\n // Pulled directly from event-target-shim implementation signature\n // https://github.com/mysticatea/event-target-shim/blob/master/src/lib/event-target.ts#L99\n // Using Parameters<GridModel['addEventListener']> doesn't work\n addEventListener(type0, callback0, options0) {\n super.addEventListener(type0, callback0, options0);\n this.listenerCount += 1;\n if (this.listenerCount === 1) {\n this.startListening();\n }\n }\n removeEventListener(type0, callback0, options0) {\n super.removeEventListener(type0, callback0, options0);\n this.listenerCount -= 1;\n if (this.listenerCount === 0) {\n this.stopListening();\n }\n }\n\n /**\n * Function called when first listener is added.\n * Override for implementation specific behaviour.\n */\n startListening() {\n // no-op\n }\n\n /**\n * Function called when last listener is removed.\n * Override for implementation specific behaviour.\n */\n stopListening() {\n // no-op\n }\n\n /**\n * Gets the columns for this model\n * @returns All columns in the model\n */\n\n /**\n * Retrieve the aggregated columns for this model\n * @returns The columns that are aggregated\n */\n get aggregatedColumns() {\n return EMPTY_ARRAY;\n }\n\n /**\n * Retrieve the grouped columns for this model\n * @returns The columns that are grouped\n */\n get groupedColumns() {\n return EMPTY_ARRAY;\n }\n\n /**\n * Gets the columns for the model before any transformations (such as rollups) are applied.\n * @returns All original columns in the model.\n */\n get originalColumns() {\n return this.columns;\n }\n\n /**\n * Gets the column index for this model\n * @param name The model column name.\n * @returns The numeric index of the requested column.\n */\n\n /**\n * Retrieve the source cell for a given cell. Returns something different if the cell is a proxied cell\n * that retrieves data from another cell.\n * @param column Column to get the source for\n * @param row Row to get the source for\n * @returns Source cell where the data is coming from\n */\n sourceForCell(column, row) {\n return {\n column,\n row\n };\n }\n\n /**\n * Retrieve the range of columns to clear filters on for a given column.\n * @param column Column to get the range of filters to clear.\n * @returns Axis range of the column filters to clear, or `null` if this should not have a clear filter option.\n */\n getClearFilterRange(column) {\n if (this.isFilterable(column)) {\n return [column, column];\n }\n return null;\n }\n\n /** List of column movements defined by the model. Used as initial movements for IrisGrid */\n get initialMovedColumns() {\n return EMPTY_ARRAY;\n }\n\n /** List of row movements defined by the model. Used as initial movements for IrisGrid */\n get initialMovedRows() {\n return EMPTY_ARRAY;\n }\n\n /** List of column header groups defined by the model */\n get initialColumnHeaderGroups() {\n return EMPTY_ARRAY;\n }\n\n /**\n * @param column The model column index\n * @param row The model row index\n * @returns The format stored for that cell\n */\n\n /**\n * @param column The model column index\n * @param row The model row index\n * @returns The value stored for that cell\n */\n\n /**\n * @returns The filters set on this model\n */\n\n /**\n * @param filter The filters to set\n */\n\n /**\n * @returns The formatter used when formatting data\n */\n\n /**\n * @param formatter The formatter to set\n */\n\n /**\n * @returns The column alignment map\n */\n\n /**\n * @param columnAlignmentMap The column alignment map to set\n */\n\n /**\n * @param value The value to format\n * @param columnType The column type to format\n * @param columnName The column name to format\n */\n\n /**\n * @returns The sorts used on this model\n */\n\n /**\n * @param sort The sorts to use on this model\n */\n\n /**\n /**\n * @returns The custom columns on this model\n */\n\n /**\n * @param customColumns The custom columns to use\n */\n\n /**\n * @returns The format columns on this model\n */\n\n /**\n * @param formatColumns The format columns to use\n */\n\n /**\n * @param columns The columns to treat as frozen\n */\n\n /**\n * @returns The config to use for rolling up this table\n */\n\n /**\n * @returns The config to use for the totals table of this model\n */\n\n /**\n * @returns The LayoutHints to use for the columns of this table model\n */\n get layoutHints() {\n return null;\n }\n\n /**\n * @returns Names of columns which should be locked to the front, but not floating\n */\n get frontColumns() {\n return EMPTY_ARRAY;\n }\n\n /**\n * @returns Names of columns which should be locked to the back, but not floating\n */\n get backColumns() {\n return EMPTY_ARRAY;\n }\n\n /**\n * @returns Names of key columns\n */\n get keyColumnSet() {\n return EMPTY_SET;\n }\n\n /**\n * @returns Names of value columns\n */\n get valueColumnSet() {\n return EMPTY_SET;\n }\n\n /**\n * @returns Names of columns which should be frozen to the front and floating\n */\n get frozenColumns() {\n return EMPTY_ARRAY;\n }\n\n /**\n * @param index The column index to check\n * @returns Whether the column is one of LayoutHints' frozen columns\n */\n isColumnFrozen(index) {\n return false;\n }\n\n /**\n * @param index The column index to check\n * @returns Whether the column is sortable\n */\n isColumnSortable(index) {\n return false;\n }\n\n /**\n * @deprecated Replaced with isPartitionRequired()\n * @returns True if this model requires a filter to be set\n */\n get isFilterRequired() {\n return false;\n }\n get isReversible() {\n return true;\n }\n\n /**\n * @returns Returns a raw table that is frozen and can be used for exporting data\n */\n\n /**\n * @returns True if this model supports the columnStatistics(column) function\n */\n get isColumnStatisticsAvailable() {\n return false;\n }\n\n /**\n * The description for this model.\n * @returns The description of the model\n */\n get description() {\n return '';\n }\n\n /**\n * @param column The column to get statistics for\n * @returns The column statistics\n */\n\n /**\n * @returns True if this model supports aggregatedColumns\n */\n get isAggregatedColumnsAvailable() {\n return false;\n }\n\n /**\n * @returns True if this model supports customColumns\n */\n get isCustomColumnsAvailable() {\n return false;\n }\n\n /**\n * @returns True if this model supports customColumns\n */\n get isFormatColumnsAvailable() {\n return false;\n }\n\n /**\n * @returns True if this model supports the export() function\n */\n get isExportAvailable() {\n return false;\n }\n\n /**\n * @returns True if this model supports the valuesTable(column) function\n */\n get isValuesTableAvailable() {\n return false;\n }\n\n /**\n * @returns True if this model should allow the chart builder\n */\n get isChartBuilderAvailable() {\n return false;\n }\n\n /**\n * @returns True if this model should allow to organize columns\n */\n get isOrganizeColumnsAvailable() {\n return false;\n }\n\n /**\n * @returns True if the rollup rows functionality is available\n */\n get isRollupAvailable() {\n return false;\n }\n\n /**\n * @returns True if select distinct functionality is available\n */\n get isSelectDistinctAvailable() {\n return false;\n }\n\n /**\n * @returns True if the totals functionality is available\n */\n get isTotalsAvailable() {\n return false;\n }\n\n /**\n * The names of columns with select distinct enabled\n * @returns An array of column names\n */\n\n /**\n * Set the columns with select distinct enabled\n * @param names The array of column names to enable select distinct on\n */\n\n /**\n * The pending data for this model\n * @returns A map of row index to a map of column name/value pairs\n */\n\n /**\n * Set the pending data for this model\n * @param A map of row index to a map of column name/value pairs\n */\n\n /**\n * @returns The count of pending rows to show\n */\n\n /**\n * Set the count of pending rows to show\n * @param count The count of pending rows to show\n */\n\n /**\n * Errors for the pending data\n * @returns Map from row number to the error\n */\n\n /**\n * Commit pending data and save all data to the table\n */\n\n /**\n * Check if viewport is still loading data\n */\n get isViewportPending() {\n return false;\n }\n\n /**\n * Check if a column is filterable\n * @param columnIndex The column index to check for filterability\n * @returns True if the current provided column index is filterable, false otherwise\n */\n isFilterable(columnIndex) {\n return false;\n }\n\n /**\n * Set the indices of the viewport\n * @param top Top of viewport\n * @param bottom Bottom of viewport\n * @param columns The columns in the viewport. `undefined` for all columns\n */\n\n /**\n * Takes a snapshot of the provided ranges\n * @param ranges The model ranges to take the snapshot of\n * @returns Returns the data in a row/column matrix\n */\n\n /**\n * @param ranges The ranges to take a snapshot of\n * @param includeHeaders Whether to include the headers in the snapshot or not\n * @param formatValue A function to format a value for a cell. Defaults to model format value.\n * @returns A text formatted snapshot of the data for the specified range set\n */\n\n /**\n * @param column The columns to get the distinct values for\n * @returns A table partitioned on the specified columns in the order given in\n */\n\n /**\n * Close this model. It can no longer be used after being closed\n */\n close() {\n // no-op\n }\n\n /**\n * Don't allow any rows to be movable in any IrisGrids by default. Just columns.\n */\n isRowMovable() {\n return false;\n }\n get isSeekRowAvailable() {\n return false;\n }\n dataBarOptionsForCell(column, row, theme) {\n throw new Error('Method not implemented.');\n }\n tooltipForCell(column, row) {\n return null;\n }\n}\n_defineProperty(IrisGridModel, \"EVENT\", Object.freeze({\n UPDATED: 'UPDATED',\n FORMATTER_UPDATED: 'FORMATTER_UPDATED',\n REQUEST_FAILED: 'REQUEST_FAILED',\n COLUMNS_CHANGED: 'COLUMNS_CHANGED',\n TABLE_CHANGED: 'TABLE_CHANGED',\n FILTERS_CHANGED: 'FILTERS_CHANGED',\n SORTS_CHANGED: 'SORTS_CHANGED',\n DISCONNECT: 'DISCONNECT',\n RECONNECT: 'RECONNECT',\n TOTALS_UPDATED: 'TOTALS_UPDATED',\n /** Fired when the viewport is applied to the table and we're waiting for a response. */\n PENDING_DATA_UPDATED: 'PENDING_DATA_UPDATED',\n VIEWPORT_UPDATED: 'VIEWPORT_UPDATED'\n}));\nexport default IrisGridModel;\n//# sourceMappingURL=IrisGridModel.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { GridUtils } from '@deephaven/grid';\nimport memoizeOne from 'memoize-one';\nimport Log from '@deephaven/log';\nvar log = Log.module('ColumnHeaderGroup');\nexport function isColumnHeaderGroup(x) {\n return x instanceof ColumnHeaderGroup;\n}\nexport default class ColumnHeaderGroup {\n constructor(_ref) {\n var {\n name,\n children,\n color,\n depth,\n childIndexes,\n parent\n } = _ref;\n _defineProperty(this, \"name\", void 0);\n _defineProperty(this, \"children\", void 0);\n _defineProperty(this, \"depth\", void 0);\n _defineProperty(this, \"parent\", void 0);\n _defineProperty(this, \"color\", void 0);\n _defineProperty(this, \"childIndexes\", void 0);\n _defineProperty(this, \"getVisibleRange\", memoizeOne(movedItems => {\n var flattenedIndexes = this.childIndexes.flat();\n var visibleIndexes = GridUtils.getVisibleIndexes(flattenedIndexes, movedItems);\n var start = Math.min(...visibleIndexes);\n var end = Math.max(...visibleIndexes);\n if (end - start !== flattenedIndexes.length - 1) {\n log.warn(\"Column header group \".concat(this.name, \" is not contiguous\"));\n }\n return [start, end];\n }));\n this.name = name;\n this.children = children;\n this.color = color !== null && color !== void 0 ? color : undefined;\n this.depth = depth;\n this.childIndexes = childIndexes;\n this.parent = parent;\n }\n setParent(parent) {\n this.parent = parent;\n }\n addChildren(children) {\n var newChildren = new Set(this.children.concat(children));\n this.children = [...newChildren];\n }\n removeChildren(children) {\n var newChildren = new Set(this.children);\n children.forEach(name => newChildren.delete(name));\n this.children = [...newChildren];\n }\n get isNew() {\n return this.name.startsWith(ColumnHeaderGroup.NEW_GROUP_PREFIX);\n }\n\n /**\n * Checks if a group is valid.\n * An invalid group needs to be re-parsed with the corresponding model.\n * @returns true if the group is valid (all children have indexes)\n */\n isValid() {\n return this.children.length === this.childIndexes.length;\n }\n}\n_defineProperty(ColumnHeaderGroup, \"NEW_GROUP_PREFIX\", ':newGroup');\n//# sourceMappingURL=ColumnHeaderGroup.js.map","export function isPartitionedGridModelProvider(model) {\n return (model === null || model === void 0 ? void 0 : model.isPartitionRequired) !== undefined && (model === null || model === void 0 ? void 0 : model.partitionColumns) !== undefined && (model === null || model === void 0 ? void 0 : model.partitionKeysTable) !== undefined && (model === null || model === void 0 ? void 0 : model.partitionMergedTable) !== undefined && (model === null || model === void 0 ? void 0 : model.partitionTable) !== undefined;\n}\nexport function isPartitionedGridModel(model) {\n return isPartitionedGridModelProvider(model) && model.partitionConfig !== undefined;\n}\n\n/**\n * A grid model that provides key tables and partitions, cannot accept a `PartitionConfig` being set\n */\n\n/**\n * A grid model that can be partitioned on a column\n */\n//# sourceMappingURL=PartitionedGridModel.js.map","var _excluded = [\"selectedValues\"],\n _excluded2 = [\"selectedValues\"];\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { GridUtils } from '@deephaven/grid';\nimport { DateUtils, TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { assertNotNull, bindAllMethods, EMPTY_ARRAY, EMPTY_MAP, isNotNullOrUndefined } from '@deephaven/utils';\nimport AggregationUtils from \"./sidebar/aggregations/AggregationUtils.js\";\nimport AggregationOperation from \"./sidebar/aggregations/AggregationOperation.js\";\nimport AdvancedSettings from \"./sidebar/AdvancedSettings.js\";\nimport ColumnHeaderGroup from \"./ColumnHeaderGroup.js\";\nimport { isPartitionedGridModelProvider } from \"./PartitionedGridModel.js\";\nvar log = Log.module('IrisGridUtils');\n\n/** @deprecated Use `DehydratedSort` instead */\n\nexport function isPanelStateV1(state) {\n return state.partition !== undefined;\n}\nexport function isPanelStateV2(state) {\n return Array.isArray(state.partitions);\n}\n\n/**\n * Checks if an index is valid for the given array\n * @param x The index to check\n * @param array The array\n * @returns True if the index if valid within the array\n */\nfunction isValidIndex(x, array) {\n return x >= 0 && x < array.length;\n}\nfunction isDateWrapper(value) {\n return (value === null || value === void 0 ? void 0 : value.asDate) != null;\n}\nclass IrisGridUtils {\n /**\n * Exports the state from Grid component to a JSON stringifiable object.\n * See IrisGridCacheUtil for memoization and comparing dehydrated states.\n * @param model The table model to export the Grid state for\n * @param gridState The state of the Grid to export\n * @returns An object that can be stringified and imported with {{@link hydrateGridState}}\n */\n static dehydrateGridState(model, gridState) {\n var {\n isStuckToBottom,\n isStuckToRight,\n movedColumns,\n movedRows\n } = gridState;\n var {\n columns\n } = model;\n return {\n isStuckToBottom,\n isStuckToRight,\n movedColumns: [...movedColumns].filter(_ref => {\n var {\n to,\n from\n } = _ref;\n return isValidIndex(to, columns) && (typeof from === 'number' && isValidIndex(from, columns) || Array.isArray(from) && isValidIndex(from[0], columns) && isValidIndex(from[1], columns));\n }).map(_ref2 => {\n var {\n to,\n from\n } = _ref2;\n return {\n to: columns[to].name,\n from: Array.isArray(from) ? [columns[from[0]].name, columns[from[1]].name] : columns[from].name\n };\n }),\n movedRows: [...movedRows]\n };\n }\n\n /**\n * Import a state for Grid that was exported with {{@link dehydrateGridState}}\n * @param model The table model to import the state for\n * @param gridState The state of the panel that was saved\n * @returns The gridState props to set on the Grid\n */\n static hydrateGridState(model, gridState) {\n var customColumns = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var {\n isStuckToBottom,\n isStuckToRight,\n movedColumns,\n movedRows\n } = gridState;\n var {\n columns\n } = model;\n var customColumnNames = IrisGridUtils.parseCustomColumnNames(customColumns);\n var columnNames = columns.map(_ref3 => {\n var {\n name\n } = _ref3;\n return name;\n }).concat(customColumnNames);\n return {\n isStuckToBottom,\n isStuckToRight,\n movedColumns: [...movedColumns].map(_ref4 => {\n var {\n to,\n from\n } = _ref4;\n var getIndex = x => typeof x === 'string' ? columnNames.findIndex(name => name === x) : x;\n return {\n to: getIndex(to),\n from: Array.isArray(from) ? [getIndex(from[0]), getIndex(from[1])] : getIndex(from)\n };\n }).filter(_ref5 => {\n var {\n to,\n from\n } = _ref5;\n return isValidIndex(to, columnNames) && (typeof from === 'number' && isValidIndex(from, columnNames) || Array.isArray(from) && isValidIndex(from[0], columnNames) && isValidIndex(from[1], columnNames));\n }),\n movedRows: [...movedRows]\n };\n }\n\n /**\n * Export the IrisGridPanel state.\n * @param model The table model the state is being dehydrated with\n * @param irisGridPanelState The current IrisGridPanel state\n * @returns The dehydrated IrisGridPanel state\n */\n static dehydrateIrisGridPanelState(model, irisGridPanelState) {\n var {\n isSelectingPartition,\n partitions,\n advancedSettings\n } = irisGridPanelState;\n\n // Return value will be serialized, should not contain undefined\n return {\n isSelectingPartition,\n partitions,\n advancedSettings: [...advancedSettings]\n };\n }\n\n /**\n * Import the saved IrisGridPanel state.\n * @param model The model the state is being hydrated with\n * @param irisGridPanelState Exported IrisGridPanel state\n * @returns The state to apply to the IrisGridPanel\n */\n static hydrateIrisGridPanelState(model, irisGridPanelState) {\n var {\n isSelectingPartition,\n advancedSettings\n } = irisGridPanelState;\n var partitions = [];\n if (isPanelStateV2(irisGridPanelState)) {\n partitions = irisGridPanelState.partitions;\n } else if (irisGridPanelState.partition != null) {\n partitions = [irisGridPanelState.partition];\n }\n return {\n isSelectingPartition,\n partitions,\n advancedSettings: new Map([...AdvancedSettings.DEFAULTS, ...advancedSettings])\n };\n }\n\n /**\n * Export the quick filters to JSON striginfiable object\n * @param quickFilters The quick filters to dehydrate\n * @returns The dehydrated quick filters\n */\n static dehydrateQuickFilters(quickFilters) {\n return [...quickFilters].map(_ref6 => {\n var [columnIndex, quickFilter] = _ref6;\n var {\n text\n } = quickFilter;\n return [columnIndex, {\n text\n }];\n });\n }\n static dehydrateLong(value) {\n return value != null ? \"\".concat(value) : null;\n }\n\n /**\n * Export the sorts from the provided table sorts to JSON stringifiable object\n * @param sorts The table sorts\n * @returns The dehydrated sorts\n */\n static dehydrateSort(sorts) {\n return sorts.map(sort => {\n var {\n column,\n isAbs,\n direction\n } = sort;\n return {\n column: column.name,\n isAbs,\n direction\n };\n });\n }\n\n /**\n * Pulls just the table settings from the panel state, eg. filters/sorts\n * @param panelState The dehydrated panel state\n * @returns A dehydrated table settings object, { partition, partitionColumn, advancedFilters, quickFilters, sorts }\n */\n static extractTableSettings(panelState) {\n var inputFilters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var {\n irisGridPanelState,\n irisGridState\n } = panelState;\n var partitions = isPanelStateV2(irisGridPanelState) ? irisGridPanelState.partitions : [irisGridPanelState.partition];\n var {\n advancedFilters,\n quickFilters,\n sorts\n } = irisGridState;\n return {\n advancedFilters,\n inputFilters,\n partitions,\n quickFilters,\n sorts\n };\n }\n static getInputFiltersForColumns(columns) {\n var inputFilters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n return inputFilters.filter(_ref7 => {\n var {\n name,\n type\n } = _ref7;\n return columns.find(_ref8 => {\n var {\n name: columnName,\n type: columnType\n } = _ref8;\n return columnName === name && columnType === type;\n });\n });\n }\n static getFiltersFromFilterMap(filterMap) {\n var filters = [];\n var keys = Array.from(filterMap.keys());\n for (var i = 0; i < keys.length; i += 1) {\n var key = keys[i];\n var item = filterMap.get(key);\n if ((item === null || item === void 0 ? void 0 : item.filter) != null) {\n filters.push(item.filter);\n }\n }\n return filters;\n }\n\n /**\n * Get array of hidden column indexes\n * @param userColumnWidths Map of user column widths\n * @returns Array of hidden column indexes\n */\n static getHiddenColumns(userColumnWidths) {\n return [...userColumnWidths.entries()].filter(_ref9 => {\n var [, value] = _ref9;\n return value === 0;\n }).map(_ref0 => {\n var [key] = _ref0;\n return key;\n });\n }\n static parseCustomColumnNames(customColumns) {\n return customColumns.map(customColumn => customColumn.split('=')[0]);\n }\n static getRemovedCustomColumnNames(oldCustomColumns, customColumns) {\n var oldCustomColumnsNames = IrisGridUtils.parseCustomColumnNames(oldCustomColumns);\n var customColumnNames = IrisGridUtils.parseCustomColumnNames(customColumns);\n return oldCustomColumnsNames.filter(oldCustomColumnName => !customColumnNames.includes(oldCustomColumnName));\n }\n static removeSortsInColumns(sorts, columnNames) {\n return sorts.filter(sort => !columnNames.includes(sort.column.name));\n }\n static removeFiltersInColumns(columns, filters, removedColumnNames) {\n var columnNames = columns.map(_ref1 => {\n var {\n name\n } = _ref1;\n return name;\n });\n var newFilter = new Map(filters);\n removedColumnNames.forEach(columnName => newFilter.delete(columnNames.indexOf(columnName)));\n return newFilter;\n }\n static removeColumnFromMovedColumns(columns, movedColumns, removedColumnNames) {\n var columnNames = columns.map(_ref10 => {\n var {\n name\n } = _ref10;\n return name;\n });\n var newMoves = [...movedColumns];\n var _loop = function _loop() {\n var removedColumnName = removedColumnNames[i];\n var removedColumnIndex = columnNames.findIndex(name => name === removedColumnName);\n var moves = [];\n for (var j = 0; j < newMoves.length; j += 1) {\n var move = newMoves[j];\n var newMove = _objectSpread({}, move);\n var [fromStart, fromEnd] = Array.isArray(move.from) ? move.from : [move.from, move.from];\n if (removedColumnIndex <= move.to) {\n newMove.to -= 1;\n }\n\n // If equal to fromStart, the new fromStart would stay the same\n // It's just the next element in the range which will have the same index after deletion\n if (removedColumnIndex < fromStart) {\n fromStart -= 1;\n }\n if (removedColumnIndex <= fromEnd) {\n fromEnd -= 1;\n }\n if (fromStart <= fromEnd && fromStart !== newMove.to) {\n if (fromStart === fromEnd) {\n moves.push(_objectSpread(_objectSpread({}, newMove), {}, {\n from: fromStart\n }));\n } else {\n moves.push(_objectSpread(_objectSpread({}, newMove), {}, {\n from: [fromStart, fromEnd]\n }));\n }\n }\n\n // get the next index of the removed column after the move is applied\n // eslint-disable-next-line prefer-destructuring\n removedColumnIndex = GridUtils.applyItemMoves(removedColumnIndex, removedColumnIndex, [move])[0][0];\n }\n newMoves = moves;\n columnNames.splice(columnNames.findIndex(name => name === removedColumnName), 1);\n };\n for (var i = 0; i < removedColumnNames.length; i += 1) {\n _loop();\n }\n return newMoves;\n }\n static removeColumnsFromSelectDistinctColumns(selectDistinctColumns, removedColumnNames) {\n return selectDistinctColumns.filter(columnName => !removedColumnNames.includes(columnName));\n }\n static getVisibleColumnsInRange(tableColumns, left, right, movedColumns, hiddenColumns) {\n var columns = [];\n for (var i = left; i <= right; i += 1) {\n var modelIndex = GridUtils.getModelIndex(i, movedColumns);\n if (modelIndex >= 0 && modelIndex < tableColumns.length && !hiddenColumns.includes(modelIndex)) {\n columns.push(tableColumns[modelIndex]);\n }\n }\n return columns;\n }\n static getPrevVisibleColumns(tableColumns, startIndex, count, movedColumns, hiddenColumns) {\n var columns = [];\n var i = startIndex;\n while (i >= 0 && columns.length < count) {\n var modelIndex = GridUtils.getModelIndex(i, movedColumns);\n if (modelIndex >= 0 && modelIndex < tableColumns.length && !hiddenColumns.includes(modelIndex)) {\n columns.unshift(tableColumns[modelIndex]);\n }\n i -= 1;\n }\n return columns;\n }\n static getNextVisibleColumns(tableColumns, startIndex, count, movedColumns, hiddenColumns) {\n var columns = [];\n var i = startIndex;\n while (i < tableColumns.length && columns.length < count) {\n var modelIndex = GridUtils.getModelIndex(i, movedColumns);\n if (modelIndex >= 0 && modelIndex < tableColumns.length && !hiddenColumns.includes(modelIndex)) {\n columns.push(tableColumns[modelIndex]);\n }\n i += 1;\n }\n return columns;\n }\n static getColumnsToFetch(tableColumns, viewportColumns, alwaysFetchColumnNames) {\n var columnsToFetch = [...viewportColumns];\n alwaysFetchColumnNames.forEach(columnName => {\n var column = tableColumns.find(_ref11 => {\n var {\n name\n } = _ref11;\n return name === columnName;\n });\n if (column != null && !viewportColumns.includes(column)) {\n columnsToFetch.push(column);\n }\n });\n return columnsToFetch;\n }\n static getModelViewportColumns(columns, left, right, movedColumns) {\n var hiddenColumns = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];\n var alwaysFetchColumnNames = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : [];\n var bufferPages = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;\n if (left == null || right == null) {\n return undefined;\n }\n var columnsCenter = IrisGridUtils.getVisibleColumnsInRange(columns, left, right, movedColumns, hiddenColumns);\n var bufferWidth = columnsCenter.length * bufferPages;\n var columnsLeft = IrisGridUtils.getPrevVisibleColumns(columns, left - 1, bufferWidth, movedColumns, hiddenColumns);\n var columnsRight = IrisGridUtils.getNextVisibleColumns(columns, right + 1, bufferWidth, movedColumns, hiddenColumns);\n var bufferedColumns = [...columnsLeft, ...columnsCenter, ...columnsRight];\n return IrisGridUtils.getColumnsToFetch(columns, bufferedColumns, alwaysFetchColumnNames);\n }\n\n /**\n * Validate whether the ranges passed in are valid to take a snapshot from.\n * Multiple selections are valid if all of the selected rows have the same columns selected.\n *\n * @param ranges The ranges to validate\n * @returns True if the ranges are valid, false otherwise\n */\n static isValidSnapshotRanges(ranges) {\n if (ranges == null || ranges.length === 0) {\n return false;\n }\n\n // To verify all the rows selected have the same set of columns selected, build a map with string representations\n // of each range.\n var rangeMap = new Map();\n for (var i = 0; i < ranges.length; i += 1) {\n var range = ranges[i];\n var rowMapIndex = \"\".concat(range.startRow, \":\").concat(range.endRow);\n var columnMapIndex = \"\".concat(range.startColumn, \":\").concat(range.endColumn);\n if (!rangeMap.has(rowMapIndex)) {\n rangeMap.set(rowMapIndex, []);\n }\n rangeMap.get(rowMapIndex).push(columnMapIndex);\n }\n var keys = [...rangeMap.keys()];\n var matchColumnRanges = rangeMap.get(keys[0]).sort().join(',');\n for (var _i = 1; _i < keys.length; _i += 1) {\n if (rangeMap.get(keys[_i]).sort().join(',') !== matchColumnRanges) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Check if the provided value is a valid table index\n * @param value A value to check if it's a valid table index\n */\n static isValidIndex(value) {\n if (!Number.isInteger(value)) {\n return false;\n }\n if (!(typeof value === 'number')) {\n return false;\n }\n return value >= 0;\n }\n\n /**\n * Returns all columns used in any of the ranges provided\n * @param ranges The model ranges to get columns for\n * @param allColumns All the columns to pull from\n * @returns The columns selected in the range\n */\n static columnsFromRanges(ranges, allColumns) {\n if (ranges == null || ranges.length === 0) {\n return [];\n }\n if (ranges[0].startColumn === null && ranges[0].endColumn === null) {\n // Snapshot of all the columns\n return [...allColumns];\n }\n var columnSet = new Set();\n for (var i = 0; i < ranges.length; i += 1) {\n var range = ranges[i];\n assertNotNull(range.startColumn);\n assertNotNull(range.endColumn);\n for (var c = (_range$startColumn = range.startColumn) !== null && _range$startColumn !== void 0 ? _range$startColumn : 0; c <= ((_range$endColumn = range.endColumn) !== null && _range$endColumn !== void 0 ? _range$endColumn : allColumns.length - 1); c += 1) {\n var _range$startColumn, _range$endColumn;\n columnSet.add(c);\n }\n }\n return [...columnSet].map(c => allColumns[c]);\n }\n\n /**\n * Transforms an iris data snapshot into a simple data matrix\n * @param data The Iris formatted table data\n * @returns A matrix of the values of the data\n */\n static snapshotDataToMatrix(data) {\n var {\n columns,\n rows\n } = data;\n var result = [];\n for (var r = 0; r < rows.length; r += 1) {\n var row = rows[r];\n var rowData = [];\n for (var c = 0; c < columns.length; c += 1) {\n var column = columns[c];\n var value = row.get(column);\n rowData.push(value);\n }\n result.push(rowData);\n }\n return result;\n }\n\n /**\n * Hydrate model rollup config\n * @param originalColumns Original model columns\n * @param config Dehydrated rollup config\n * @param aggregationSettings Aggregation settings\n * @returns Rollup config for the model\n */\n static getModelRollupConfig(originalColumns, config, aggregationSettings) {\n var _config$columns$lengt, _config$columns;\n if (((_config$columns$lengt = config === null || config === void 0 || (_config$columns = config.columns) === null || _config$columns === void 0 ? void 0 : _config$columns.length) !== null && _config$columns$lengt !== void 0 ? _config$columns$lengt : 0) === 0) {\n return null;\n }\n var {\n columns: groupingColumns = [],\n showConstituents: includeConstituents = true,\n showNonAggregatedColumns = true,\n includeDescriptions = true\n } = config !== null && config !== void 0 ? config : {};\n var {\n aggregations = []\n } = aggregationSettings !== null && aggregationSettings !== void 0 ? aggregationSettings : {};\n var filteredAggregations = aggregations.filter(_ref12 => {\n var {\n operation\n } = _ref12;\n return !AggregationUtils.isRollupProhibited(operation);\n });\n var aggregationColumns = filteredAggregations.map(_ref13 => {\n var {\n operation,\n selected,\n invert\n } = _ref13;\n return AggregationUtils.isRollupOperation(operation) ? [] : AggregationUtils.getOperationColumnNames(originalColumns, operation, selected, invert);\n });\n var aggregationMap = {};\n // Aggregation columns should show first, add them first\n for (var i = 0; i < filteredAggregations.length; i += 1) {\n aggregationMap[filteredAggregations[i].operation] = aggregationColumns[i];\n }\n if (showNonAggregatedColumns) {\n // Filter out any column that already has an aggregation or grouping\n var nonAggregatedColumnSet = new Set(originalColumns.map(c => c.name).filter(name => !groupingColumns.includes(name)));\n aggregationColumns.forEach(columns => {\n columns.forEach(name => nonAggregatedColumnSet.delete(name));\n });\n if (nonAggregatedColumnSet.size > 0) {\n var _aggregationMap$Aggre;\n var existingColumns = (_aggregationMap$Aggre = aggregationMap[AggregationOperation.FIRST]) !== null && _aggregationMap$Aggre !== void 0 ? _aggregationMap$Aggre : [];\n aggregationMap[AggregationOperation.FIRST] = [...existingColumns, ...nonAggregatedColumnSet];\n }\n }\n return {\n groupingColumns,\n includeConstituents,\n includeDescriptions,\n aggregations: aggregationMap\n };\n }\n\n /**\n * @param pendingDataMap Map of pending data\n * @returns A map with the errors in the pending data\n */\n static getPendingErrors(pendingDataMap) {\n pendingDataMap.forEach((row, rowIndex) => {\n if (!IrisGridUtils.isValidIndex(rowIndex)) {\n throw new Error(\"Invalid rowIndex \".concat(rowIndex));\n }\n var {\n data\n } = row;\n data.forEach((value, columnIndex) => {\n if (!IrisGridUtils.isValidIndex(columnIndex)) {\n throw new Error(\"Invalid columnIndex \".concat(columnIndex));\n }\n });\n });\n }\n\n /**\n * Retrieves a column from the provided array at the index, or `null` and logs an error if it's invalid\n *\n * @param columns The columns to get the column from\n * @param columnIndex The column index to get\n */\n static getColumn(columns, columnIndex) {\n if (columnIndex < columns.length) {\n return columns[columnIndex];\n }\n log.error('Unable to retrieve column', columnIndex, '>=', columns.length);\n return null;\n }\n\n /**\n * Retrieves a column from the provided array matching the name, or `null` and logs an error if not found\n * @param columns The columns to get the column from\n * @param columnName The column name to retrieve\n */\n static getColumnByName(columns, columnName) {\n // Columns can contain ColumnBy sources with negative indexes\n var column = Object.values(columns).find(_ref14 => {\n var {\n name\n } = _ref14;\n return name === columnName;\n });\n if (column == null) {\n log.error('Unable to retrieve column by name', columnName, columns.map(_ref15 => {\n var {\n name\n } = _ref15;\n return name;\n }));\n }\n return column;\n }\n\n /**\n * Get filter configs with column names changed to indexes, exclude missing columns\n * @param columns The columns to get column indexes from\n * @param filters Filter configs\n * @returns Updated filter configs with column names changed to indexes\n */\n static changeFilterColumnNamesToIndexes(columns, filters) {\n return filters.map(_ref16 => {\n var {\n name,\n filter\n } = _ref16;\n var index = columns.findIndex(column => column.name === name);\n return index < 0 ? null : [index, filter];\n }).filter(filterConfig => filterConfig != null);\n }\n\n /**\n * @param columnType The column type that the filters will be applied to.\n * @param filterList The list of filters to be combined.\n * @returns The combination of the filters in filterList as text.\n */\n static combineFiltersFromList(columnType, filterList) {\n filterList.sort((a, b) => {\n // move all 'equals' comparisons to end of list\n if (a.operator === 'eq' && b.operator !== 'eq') {\n return 1;\n }\n if (a.operator !== 'eq' && b.operator === 'eq') {\n return -1;\n }\n return a.startColumnIndex - b.startColumnIndex;\n });\n var combinedText = '';\n for (var i = 0; i < filterList.length; i += 1) {\n var {\n text,\n value,\n operator\n } = filterList[i];\n if (value !== undefined) {\n var symbol = '';\n if (operator !== undefined) {\n if (value == null && operator === 'eq') {\n symbol = '=';\n } else if (operator !== 'eq') {\n if (operator === 'startsWith' || operator === 'endsWith') {\n symbol = '*';\n } else {\n symbol = TableUtils.getFilterOperatorString(operator);\n }\n }\n }\n var filterText = \"\".concat(symbol).concat(text);\n if (operator === 'startsWith') {\n filterText = \"\".concat(text).concat(symbol);\n }\n if (columnType != null && value !== null && TableUtils.isCharType(columnType)) {\n filterText = \"\".concat(symbol).concat(String.fromCharCode(parseInt(text, 10)));\n }\n if (i !== 0) {\n combinedText += operator === 'eq' ? ' || ' : ' && ';\n }\n combinedText += filterText;\n }\n }\n return combinedText;\n }\n\n /**\n * Parses the column header groups provided.\n * If undefined, should provide default groups such as from layoutHints\n *\n * @returns Object containing groups array, max depth, map of name to parent group, and map of name to group\n */\n static parseColumnHeaderGroups(model, groupsParam) {\n var makeColumnHeaderGroup = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : args => new ColumnHeaderGroup(args);\n var maxDepth = 1;\n var parentMap = new Map();\n var groupMap = new Map();\n\n // Remove any empty groups before parsing\n var groups = groupsParam === null || groupsParam === void 0 ? void 0 : groupsParam.filter(_ref17 => {\n var {\n children\n } = _ref17;\n return children != null && children.length > 0;\n });\n if (groups.length === 0) {\n return {\n groups: [],\n maxDepth,\n parentMap,\n groupMap\n };\n }\n var originalGroupMap = new Map(groups.map(group => [group.name, group]));\n var seenChildren = new Set();\n var addGroup = group => {\n var _group$children;\n var {\n name\n } = group;\n assertNotNull(name, 'Column header group has no name');\n var columnIndex = model.getColumnIndexByName(name);\n // Groups cannot have names matching columns to avoid parent-child collision\n // unless they refer to ColumnBy sources with negative indexes\n if (columnIndex != null && columnIndex >= 0) {\n throw new Error(\"Column header group has same name as column: \".concat(name));\n }\n var existingGroup = groupMap.get(name);\n if (existingGroup) {\n return existingGroup;\n }\n var childIndexes = [];\n var depth = 1;\n if (group.children == null) {\n throw new Error(\"Column header group \".concat(name, \" has no children\"));\n }\n group.children.forEach(childName => {\n if (seenChildren.has(childName)) {\n throw new Error(\"Column group child \".concat(childName, \" specified in multiple groups\"));\n }\n seenChildren.add(childName);\n var childGroup = originalGroupMap.get(childName);\n var childIndex = model.getColumnIndexByName(childName);\n if (childGroup) {\n // Adding another column header group\n var addedGroup = addGroup(childGroup);\n childIndexes.push(...addedGroup.childIndexes);\n depth = Math.max(depth, addedGroup.depth + 1);\n } else if (childIndex != null) {\n // Adding a base column\n childIndexes.push(childIndex);\n depth = Math.max(depth, 1);\n } else {\n throw new Error(\"Unknown child \".concat(childName, \" in group \").concat(name));\n }\n });\n var headerGroupConfig = _objectSpread(_objectSpread({}, group), {}, {\n name,\n children: group.children,\n depth,\n childIndexes: childIndexes.flat()\n });\n var columnHeaderGroup = makeColumnHeaderGroup(headerGroupConfig);\n groupMap.set(name, columnHeaderGroup);\n (_group$children = group.children) === null || _group$children === void 0 || _group$children.forEach(childName => parentMap.set(childName, columnHeaderGroup));\n maxDepth = Math.max(maxDepth, columnHeaderGroup.depth + 1);\n return columnHeaderGroup;\n };\n var groupNames = new Set();\n groups.forEach(group => {\n var {\n name\n } = group;\n if (groupNames.has(name)) {\n throw new Error(\"Duplicate column group name: \".concat(name));\n }\n groupNames.add(name);\n addGroup(group);\n });\n groupMap.forEach(group => {\n var _parentMap$get;\n group.setParent((_parentMap$get = parentMap.get(group.name)) === null || _parentMap$get === void 0 ? void 0 : _parentMap$get.name);\n });\n return {\n groups: [...groupMap.values()],\n maxDepth,\n groupMap,\n parentMap\n };\n }\n\n /**\n * @param value The value of the cell in a column\n * @param columnType The type of the column\n * @returns The value of the cell converted to text\n */\n static convertValueToText(value, columnType) {\n if (columnType != null && TableUtils.isCharType(columnType) && value != null && typeof value === 'number') {\n return String.fromCharCode(value);\n }\n if (TableUtils.isDateType(columnType) && isDateWrapper(value)) {\n var date = new Date(value.asDate());\n var offset = date.getTimezoneOffset();\n var offsetDate = new Date(date.getTime() - offset * 60 * 1000);\n var dateText = offsetDate.toISOString();\n var formattedText = dateText.replace('T', ' ').substring(0, 23);\n return formattedText;\n }\n if (value == null) {\n return '';\n }\n return \"\".concat(value);\n }\n constructor(dh) {\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"tableUtils\", void 0);\n this.dh = dh;\n this.tableUtils = new TableUtils(dh);\n bindAllMethods(this);\n }\n\n /**\n * Exports the state from IrisGrid to a JSON stringifiable object.\n * See IrisGridCacheUtil for memoization and comparing dehydrated states.\n * @param model The table model to export the state for\n * @param irisGridState The current state of the IrisGrid\n */\n dehydrateIrisGridState(model, irisGridState) {\n var {\n aggregationSettings = {\n aggregations: EMPTY_ARRAY,\n showOnTop: false\n },\n advancedFilters,\n customColumnFormatMap,\n columnAlignmentMap = EMPTY_MAP,\n isFilterBarShown,\n metrics: {\n userColumnWidths,\n userRowHeights\n } = {\n userColumnWidths: EMPTY_MAP,\n userRowHeights: EMPTY_MAP\n },\n quickFilters,\n customColumns,\n conditionalFormats = EMPTY_ARRAY,\n reverse,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns = EMPTY_ARRAY,\n selectedSearchColumns,\n sorts,\n invertSearchColumns,\n pendingDataMap = EMPTY_MAP,\n frozenColumns,\n columnHeaderGroups,\n partitionConfig\n } = irisGridState;\n var {\n columns\n } = model;\n var partitionColumns = isPartitionedGridModelProvider(model) ? model.partitionColumns : [];\n\n // Return value will be serialized, should not contain undefined\n return {\n advancedFilters: this.dehydrateAdvancedFilters(columns, advancedFilters),\n aggregationSettings,\n customColumnFormatMap: [...customColumnFormatMap],\n columnAlignmentMap: [...columnAlignmentMap],\n isFilterBarShown,\n quickFilters: IrisGridUtils.dehydrateQuickFilters(quickFilters),\n sorts: IrisGridUtils.dehydrateSort(sorts),\n userColumnWidths: [...userColumnWidths].filter(_ref18 => {\n var [columnIndex] = _ref18;\n return columnIndex != null && columnIndex >= 0 && columnIndex < columns.length;\n }).map(_ref19 => {\n var [columnIndex, width] = _ref19;\n return [columns[columnIndex].name, width];\n }),\n userRowHeights: [...userRowHeights],\n customColumns: [...customColumns],\n conditionalFormats: [...conditionalFormats],\n reverse,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns: [...selectDistinctColumns],\n selectedSearchColumns,\n invertSearchColumns,\n pendingDataMap: this.dehydratePendingDataMap(columns, pendingDataMap),\n frozenColumns,\n columnHeaderGroups: columnHeaderGroups === null || columnHeaderGroups === void 0 ? void 0 : columnHeaderGroups.map(item => {\n var _item$color;\n return {\n name: item.name,\n children: item.children,\n color: (_item$color = item.color) !== null && _item$color !== void 0 ? _item$color : null\n };\n }),\n partitionConfig: this.dehydratePartitionConfig(partitionColumns, partitionConfig)\n };\n }\n\n /**\n * Import a state for IrisGrid that was exported with {{@link dehydrateIrisGridState}}\n * @param model The table model to import the state with\n * @param irisGridState The saved IrisGrid state\n */\n hydrateIrisGridState(model, irisGridState) {\n var _ref23, _model$layoutHints;\n var {\n advancedFilters,\n aggregationSettings = {\n aggregations: [],\n showOnTop: false\n },\n customColumnFormatMap,\n columnAlignmentMap = [],\n isFilterBarShown,\n quickFilters,\n sorts,\n customColumns,\n conditionalFormats,\n userColumnWidths,\n userRowHeights,\n reverseType,\n reverse,\n rollupConfig = undefined,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns = true,\n pendingDataMap = [],\n frozenColumns,\n columnHeaderGroups,\n partitionConfig\n } = irisGridState;\n var {\n columns,\n formatter\n } = model;\n var partitionColumns = isPartitionedGridModelProvider(model) ? model.partitionColumns : [];\n return {\n advancedFilters: this.hydrateAdvancedFilters(columns, advancedFilters, formatter.timeZone),\n aggregationSettings,\n customColumnFormatMap: new Map(customColumnFormatMap),\n columnAlignmentMap: new Map(columnAlignmentMap),\n isFilterBarShown,\n quickFilters: this.hydrateQuickFilters(columns, quickFilters, formatter.timeZone),\n sorts: this.hydrateSort(columns, sorts, true),\n userColumnWidths: new Map(userColumnWidths.map(_ref20 => {\n var [column, width] = _ref20;\n if (typeof column === 'string' || column instanceof String) {\n return [columns.findIndex(_ref21 => {\n var {\n name\n } = _ref21;\n return name === column;\n }), width];\n }\n return [column, width];\n }).filter(_ref22 => {\n var [column] = _ref22;\n return column != null && column >= 0 && column < columns.length;\n })),\n customColumns,\n conditionalFormats,\n userRowHeights: new Map(userRowHeights),\n reverse: reverseType === TableUtils.REVERSE_TYPE.POST_SORT || reverse,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns,\n pendingDataMap: this.hydratePendingDataMap(columns, pendingDataMap),\n frozenColumns,\n columnHeaderGroups: IrisGridUtils.parseColumnHeaderGroups(model, (_ref23 = columnHeaderGroups !== null && columnHeaderGroups !== void 0 ? columnHeaderGroups : (_model$layoutHints = model.layoutHints) === null || _model$layoutHints === void 0 ? void 0 : _model$layoutHints.columnGroups) !== null && _ref23 !== void 0 ? _ref23 : []).groups,\n partitionConfig: this.hydratePartitionConfig(partitionColumns, partitionConfig)\n };\n }\n\n /**\n * Import the saved quick filters to apply to the columns. Does not actually apply the filters.\n * @param columns The columns the filters will be applied to\n * @param savedQuickFilters Exported quick filters definitions\n * @param timeZone The time zone to make this value in if it is a date type. E.g. America/New_York\n * @returns The quick filters to apply to the columns\n */\n hydrateQuickFilters(columns, savedQuickFilters, timeZone) {\n var importedFilters = savedQuickFilters.map(_ref24 => {\n var [columnIndex, quickFilter] = _ref24;\n var {\n text\n } = quickFilter;\n var filter = null;\n try {\n var column = IrisGridUtils.getColumn(columns, columnIndex);\n if (column != null) {\n filter = this.tableUtils.makeQuickFilter(column, text, timeZone);\n }\n } catch (error) {\n log.error('hydrateQuickFilters error with', text, error);\n }\n return [columnIndex, {\n text,\n filter\n }];\n });\n return new Map(importedFilters);\n }\n\n /**\n * Export the advanced filters from the provided columns to JSON striginfiable object\n * @param columns The columns for the filters\n * @param advancedFilters The advanced filters to dehydrate\n * @returns The dehydrated advanced filters\n */\n dehydrateAdvancedFilters(columns, advancedFilters) {\n return [...advancedFilters].map(_ref25 => {\n var [columnIndex, advancedFilter] = _ref25;\n var column = IrisGridUtils.getColumn(columns, columnIndex);\n assertNotNull(column);\n var options = this.dehydrateAdvancedFilterOptions(column, advancedFilter.options);\n return [columnIndex, {\n options\n }];\n });\n }\n\n /**\n * Import the saved advanced filters to apply to the columns. Does not actually apply the filters.\n * @param columns The columns the filters will be applied to\n * @param savedAdvancedFilters Exported advanced filters definitions\n * @param timeZone The time zone to make this filter in if it is a date type. E.g. America/New_York\n * @returns The advanced filters to apply to the columns\n */\n hydrateAdvancedFilters(columns, savedAdvancedFilters, timeZone) {\n var importedFilters = savedAdvancedFilters.map(_ref26 => {\n var [columnIndex, advancedFilter] = _ref26;\n var column = IrisGridUtils.getColumn(columns, columnIndex);\n assertNotNull(column);\n var options = this.hydrateAdvancedFilterOptions(column, advancedFilter.options);\n var filter = null;\n try {\n var columnRetrieved = IrisGridUtils.getColumn(columns, columnIndex);\n if (columnRetrieved != null) {\n filter = this.tableUtils.makeAdvancedFilter(column, options, timeZone);\n }\n } catch (error) {\n log.error('hydrateAdvancedFilters error with', options, error);\n }\n return [columnIndex, {\n options,\n filter\n }];\n });\n return new Map(importedFilters);\n }\n dehydrateAdvancedFilterOptions(column, options) {\n var {\n selectedValues\n } = options,\n otherOptions = _objectWithoutProperties(options, _excluded);\n return _objectSpread({\n selectedValues: selectedValues === null || selectedValues === void 0 ? void 0 : selectedValues.map(value => this.dehydrateValue(value, column === null || column === void 0 ? void 0 : column.type))\n }, otherOptions);\n }\n hydrateAdvancedFilterOptions(column, options) {\n var {\n selectedValues\n } = options,\n otherOptions = _objectWithoutProperties(options, _excluded2);\n return _objectSpread({\n selectedValues: selectedValues === null || selectedValues === void 0 ? void 0 : selectedValues.map(value => this.hydrateValue(value, column === null || column === void 0 ? void 0 : column.type))\n }, otherOptions);\n }\n dehydratePendingDataMap(columns, pendingDataMap) {\n return [...pendingDataMap].map(_ref27 => {\n var [rowIndex, {\n data\n }] = _ref27;\n return [rowIndex, {\n data: [...data].filter(_ref28 => {\n var [c] = _ref28;\n return typeof c === 'number';\n }).map(_ref29 => {\n var [c, value] = _ref29;\n return [columns[c].name, this.dehydrateValue(value, columns[c].type)];\n })\n }];\n });\n }\n hydratePendingDataMap(columns, pendingDataMap) {\n var columnMap = new Map();\n var getColumnIndex = columnName => {\n if (!columnMap.has(columnName)) {\n columnMap.set(columnName, columns.findIndex(_ref30 => {\n var {\n name\n } = _ref30;\n return name === columnName;\n }));\n }\n return columnMap.get(columnName);\n };\n return new Map(pendingDataMap.map(_ref31 => {\n var [rowIndex, {\n data\n }] = _ref31;\n return [rowIndex, {\n data: new Map(data.map(_ref32 => {\n var _getColumnIndex;\n var [columnName, value] = _ref32;\n var index = getColumnIndex(columnName);\n assertNotNull(index);\n return [(_getColumnIndex = getColumnIndex(columnName)) !== null && _getColumnIndex !== void 0 ? _getColumnIndex : null, this.hydrateValue(value, columns[index].type)];\n }))\n }];\n }));\n }\n dehydratePartitionConfig(partitionColumns, partitionConfig) {\n if (partitionConfig == null) {\n return partitionConfig;\n }\n return _objectSpread(_objectSpread({}, partitionConfig), {}, {\n partitions: partitionConfig.partitions.map((partition, index) => this.dehydrateValue(partition, partitionColumns[index].type))\n });\n }\n hydratePartitionConfig(partitionColumns, partitionConfig) {\n if (partitionConfig == null) {\n return partitionConfig;\n }\n return _objectSpread(_objectSpread({}, partitionConfig), {}, {\n partitions: partitionConfig.partitions.map((partition, index) => this.hydrateValue(partition, partitionColumns[index].type))\n });\n }\n\n /**\n * Dehydrates/serializes a value for storage.\n * @param value The value to dehydrate\n * @param columnType The column type\n */\n dehydrateValue(value, columnType) {\n if (TableUtils.isDateType(columnType)) {\n return this.dehydrateDateTime(value);\n }\n if (TableUtils.isLongType(columnType)) {\n return IrisGridUtils.dehydrateLong(value);\n }\n return value;\n }\n\n /**\n * Hydrate a value from it's serialized state\n * @param value The dehydrated value that needs to be hydrated\n * @param columnType The type of column\n */\n hydrateValue(value, columnType) {\n if (TableUtils.isDateType(columnType)) {\n return this.hydrateDateTime(value);\n }\n if (TableUtils.isLongType(columnType)) {\n return this.hydrateLong(value);\n }\n return value;\n }\n dehydrateDateTime(value) {\n return value != null ? this.dh.i18n.DateTimeFormat.format(DateUtils.FULL_DATE_FORMAT, value) : null;\n }\n hydrateDateTime(value) {\n return value != null ? this.dh.i18n.DateTimeFormat.parse(DateUtils.FULL_DATE_FORMAT, value) : null;\n }\n hydrateLong(value) {\n return value != null ? this.dh.LongWrapper.ofString(value) : null;\n }\n\n /**\n * Import the saved sorts to apply to the model. Does not actually apply the sort.\n * @param columns The columns the sorts will be applied to\n * @param sorts Exported sort definitions\n * @param dropReverse If true, drop reverse sort descriptors from the result\n * @returns The sort descriptors to apply to the model\n */\n hydrateSort(columns, sorts) {\n var dropReverse = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var {\n dh\n } = this;\n return sorts.map(sort => {\n var {\n column: columnIndexOrName,\n isAbs,\n direction\n } = sort;\n if (direction === TableUtils.sortDirection.reverse) {\n return dh.Table.reverse();\n }\n var column = typeof columnIndexOrName === 'string' ? IrisGridUtils.getColumnByName(columns, columnIndexOrName) : IrisGridUtils.getColumn(columns, columnIndexOrName);\n if (column != null) {\n return {\n column: {\n name: column.name,\n type: column.type\n },\n isAbs,\n direction\n };\n }\n return null;\n })\n // If we can't find the column any more, it's null, filter it out\n // If the item is a reverse sort item, and dropReverse is true, filter it out\n // - it will get applied with the `reverse` property\n // This should only happen when loading a legacy dashboard\n .filter(item => item != null && (item.direction !== TableUtils.sortDirection.reverse || !dropReverse));\n }\n hydrateDhSort(columns, sorts) {\n var {\n dh\n } = this;\n return sorts.map(sortDescriptor => {\n var {\n column: {\n name\n },\n isAbs,\n direction\n } = sortDescriptor;\n if (direction === TableUtils.sortDirection.reverse) {\n return dh.Table.reverse();\n }\n var column = IrisGridUtils.getColumnByName(columns, name);\n if (column != null) {\n var columnSort = column.sort();\n if (isAbs) {\n columnSort = columnSort.abs();\n }\n if (direction === TableUtils.sortDirection.descending) {\n columnSort = columnSort.desc();\n } else {\n columnSort = columnSort.asc();\n }\n return columnSort;\n }\n return null;\n })\n // If we can't find the column any more, it's null, filter it out\n .filter(isNotNullOrUndefined);\n }\n\n /**\n * Applies the passed in table settings directly to the provided table\n * @param table The table to apply the settings to\n * @param tableSettings Dehydrated table settings extracted with `extractTableSettings`\n * @param timeZone The time zone to make this value in if it is a date type. E.g. America/New_York\n */\n applyTableSettings(table, tableSettings, timeZone) {\n var {\n columns\n } = table;\n var quickFilters = [];\n if (tableSettings.quickFilters) {\n quickFilters = IrisGridUtils.getFiltersFromFilterMap(this.hydrateQuickFilters(columns, tableSettings.quickFilters, timeZone));\n }\n var advancedFilters = [];\n if (tableSettings.advancedFilters) {\n advancedFilters = IrisGridUtils.getFiltersFromFilterMap(this.hydrateAdvancedFilters(columns, tableSettings.advancedFilters, timeZone));\n }\n var inputFilters = this.getFiltersFromInputFilters(columns, tableSettings.inputFilters, timeZone);\n var sorts = [];\n if (tableSettings.sorts) {\n sorts = this.hydrateDhSort(columns, this.hydrateSort(columns, tableSettings.sorts));\n }\n var filters = [...quickFilters, ...advancedFilters];\n var {\n partitions,\n partitionColumns: partitionColumnNames\n } = tableSettings;\n if (partitions && partitions.length && partitionColumnNames && partitionColumnNames !== null && partitionColumnNames !== void 0 && partitionColumnNames.length) {\n var partitionColumns = partitionColumnNames.map(partitionColumnName => IrisGridUtils.getColumnByName(columns, partitionColumnName));\n for (var i = 0; i < partitionColumns.length; i += 1) {\n if (partitionColumns[i] !== undefined && partitions[i] != null) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n var partitionFilter = partitionColumns[i].filter().eq(this.dh.FilterValue.ofString(partitions[i]));\n filters = [partitionFilter, ...filters];\n }\n }\n }\n filters = [...inputFilters, ...filters];\n table.applyFilter(filters);\n table.applySort(sorts);\n }\n getFiltersFromInputFilters(columns) {\n var inputFilters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var timeZone = arguments.length > 2 ? arguments[2] : undefined;\n return inputFilters.map(_ref33 => {\n var {\n name,\n type,\n value\n } = _ref33;\n var column = columns.find(_ref34 => {\n var {\n name: columnName,\n type: columnType\n } = _ref34;\n return columnName === name && columnType === type;\n });\n if (column) {\n try {\n return this.tableUtils.makeQuickFilter(column, value, timeZone);\n } catch (e) {\n // It may be unable to create it because user hasn't completed their input\n log.debug('Unable to create input filter', e);\n }\n }\n return null;\n }).filter(filter => filter != null);\n }\n\n /**\n * Get the dh.RangeSet representation of the provided ranges.\n * Ranges are sorted prior to creating the RangeSet. Only the rows are taken into account,\n * RangeSet does not have an option for columns.\n * @param ranges The ranges to get the range set for\n * @returns The rangeset for the provided ranges\n */\n rangeSetFromRanges(ranges) {\n var {\n dh\n } = this;\n var rangeSets = ranges.slice().sort((a, b) => {\n assertNotNull(a.startRow);\n assertNotNull(b.startRow);\n return a.startRow - b.startRow;\n }).map(range => {\n var {\n startRow,\n endRow\n } = range;\n assertNotNull(startRow);\n assertNotNull(endRow);\n return dh.RangeSet.ofRange(startRow, endRow);\n });\n return dh.RangeSet.ofRanges(rangeSets);\n }\n\n /**\n * Get the color for a cell value\n * @param theme The IrisGrid theme\n * @param columnType The type of the column\n * @param columnName The name of the column\n * @param value The value of the cell\n * @returns The color for the cell value\n */\n static colorForValue(theme, columnType, columnName, value) {\n if (TableUtils.isDateType(columnType) || columnName === 'Date') {\n assertNotNull(theme.dateColor);\n return theme.dateColor;\n }\n if (TableUtils.isNumberType(columnType)) {\n if (value > 0) {\n assertNotNull(theme.positiveNumberColor);\n return theme.positiveNumberColor;\n }\n if (value < 0) {\n assertNotNull(theme.negativeNumberColor);\n return theme.negativeNumberColor;\n }\n assertNotNull(theme.zeroNumberColor);\n return theme.zeroNumberColor;\n }\n return theme.textColor;\n }\n\n /**\n * Determines the text alignment for a cell value\n * @param columnType The type of the column\n * @param columnName The name of the column\n * @returns The text alignment for the cell value\n */\n static textAlignForValue(columnType, columnName) {\n if (TableUtils.isDateType(columnType) || columnName === 'Date') {\n return 'center';\n }\n if (TableUtils.isNumberType(columnType)) {\n return 'right';\n }\n return 'left';\n }\n}\nexport default IrisGridUtils;\n//# sourceMappingURL=IrisGridUtils.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nclass MissingKeyError extends Error {\n constructor(rowIndex, columnName) {\n super(\"\".concat(columnName, \" can't be empty (on pending row \").concat(rowIndex + 1, \")\"));\n _defineProperty(this, \"isMissingKey\", true);\n _defineProperty(this, \"rowIndex\", void 0);\n _defineProperty(this, \"columnName\", void 0);\n this.rowIndex = rowIndex;\n this.columnName = columnName;\n }\n}\nexport default MissingKeyError;\n//# sourceMappingURL=MissingKeyError.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint-disable no-underscore-dangle */\n/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport throttle from 'lodash.throttle';\nimport { GridRange, GridUtils, memoizeClear } from '@deephaven/grid';\nimport Log from '@deephaven/log';\nimport { EventShimCustomEvent, PromiseUtils, assertNotNull } from '@deephaven/utils';\nimport { TableUtils, Formatter, FormatterUtils, DateUtils } from '@deephaven/jsapi-utils';\nimport IrisGridModel from \"./IrisGridModel.js\";\nimport AggregationOperation from \"./sidebar/aggregations/AggregationOperation.js\";\nimport IrisGridUtils from \"./IrisGridUtils.js\";\nimport MissingKeyError from \"./MissingKeyError.js\";\nimport { isColumnHeaderGroup } from \"./ColumnHeaderGroup.js\";\nvar log = Log.module('IrisGridTableModelTemplate');\nvar SET_VIEWPORT_THROTTLE = 150;\nvar APPLY_VIEWPORT_THROTTLE = 0;\nexport function isIrisGridTableModelTemplate(model) {\n return model.table !== undefined;\n}\n\n/**\n * Template model for a grid\n */\n\nclass IrisGridTableModelTemplate extends IrisGridModel {\n seekRow(startRow, column, valueType, value, insensitive, contains, isBackwards) {\n throw new Error('Method not implemented.');\n }\n export() {\n throw new Error('Method not implemented.');\n }\n columnStatistics(column) {\n throw new Error('Method not implemented.');\n }\n get customColumns() {\n return [];\n }\n set customColumns(customColumns) {\n throw new Error('Method not implemented.');\n }\n get formatColumns() {\n return [];\n }\n set formatColumns(formatColumns) {\n throw new Error('Method not implemented.');\n }\n updateFrozenColumns(columns) {\n throw new Error('Method not implemented.');\n }\n get rollupConfig() {\n throw new Error('Method not implemented.');\n }\n set rollupConfig(rollupConfig) {\n throw new Error('Method not implemented.');\n }\n get selectDistinctColumns() {\n throw new Error('Method not implemented.');\n }\n set selectDistinctColumns(names) {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Returns an array of the columns in the model\n * The order of model columns should never change once established\n */\n get columns() {\n return this.table.columns;\n }\n /**\n * @param dh JSAPI instance\n * @param table Iris data table to be used in the model\n * @param formatter The formatter to use when getting formats\n * @param inputTable Iris input table associated with this table\n * @param columnAlignmentMap Map of column alignments\n */\n constructor(dh, table) {\n var _formatter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Formatter(dh);\n var inputTable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n var columnAlignmentMap = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : new Map();\n super(dh);\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"irisGridUtils\", void 0);\n _defineProperty(this, \"tableUtils\", void 0);\n _defineProperty(this, \"irisFormatter\", void 0);\n _defineProperty(this, \"irisColumnAlignmentMap\", void 0);\n _defineProperty(this, \"inputTable\", void 0);\n _defineProperty(this, \"subscription\", void 0);\n _defineProperty(this, \"table\", void 0);\n _defineProperty(this, \"viewport\", void 0);\n _defineProperty(this, \"viewportData\", void 0);\n _defineProperty(this, \"formattedStringData\", void 0);\n _defineProperty(this, \"pendingStringData\", void 0);\n _defineProperty(this, \"isSaveInProgress\", void 0);\n _defineProperty(this, \"totalsTable\", void 0);\n _defineProperty(this, \"totalsTablePromise\", void 0);\n _defineProperty(this, \"totals\", void 0);\n _defineProperty(this, \"totalsDataMap\", void 0);\n // Map from new row index to their values. Only for input tables that can have new rows added.\n // The index of these rows start at 0, and they are appended at the end of the regular table data.\n // These rows can be sparse, so using a map instead of an array.\n _defineProperty(this, \"pendingNewDataMap\", void 0);\n _defineProperty(this, \"pendingNewRowCount\", 0);\n _defineProperty(this, \"_columnHeaderGroupMap\", new Map());\n _defineProperty(this, \"columnHeaderParentMap\", new Map());\n _defineProperty(this, \"_columnHeaderMaxDepth\", null);\n _defineProperty(this, \"_columnHeaderGroups\", []);\n _defineProperty(this, \"_isColumnHeaderGroupsInitialized\", false);\n _defineProperty(this, \"_movedColumns\", null);\n _defineProperty(this, \"getMemoizedInitialMovedColumns\", memoize(layoutHints => {\n var _layoutHints$columnGr, _layoutHints$frontCol, _layoutHints$backColu, _layoutHints$frozenCo;\n if (!layoutHints) {\n return [];\n }\n var movedColumns = [];\n var {\n groupMap\n } = IrisGridUtils.parseColumnHeaderGroups(this, (_layoutHints$columnGr = layoutHints === null || layoutHints === void 0 ? void 0 : layoutHints.columnGroups) !== null && _layoutHints$columnGr !== void 0 ? _layoutHints$columnGr : []);\n var moveColumn = (name, toIndex) => {\n var modelIndex = this.getColumnIndexByName(name);\n if (modelIndex == null) {\n throw new Error(\"Unknown layout hint column: \".concat(name));\n }\n var visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);\n movedColumns = GridUtils.moveItem(visibleIndex, toIndex, movedColumns);\n };\n var moveGroup = (name, toIndex) => {\n var group = groupMap.get(name);\n if (group == null) {\n throw new Error(\"Unknown layout hint group: \".concat(name));\n }\n var visibleRange = group.getVisibleRange(movedColumns);\n movedColumns = GridUtils.moveRange(visibleRange, toIndex, movedColumns);\n };\n var frontColumns = (_layoutHints$frontCol = layoutHints.frontColumns) !== null && _layoutHints$frontCol !== void 0 ? _layoutHints$frontCol : [];\n var backColumns = (_layoutHints$backColu = layoutHints.backColumns) !== null && _layoutHints$backColu !== void 0 ? _layoutHints$backColu : [];\n var frozenColumns = (_layoutHints$frozenCo = layoutHints.frozenColumns) !== null && _layoutHints$frozenCo !== void 0 ? _layoutHints$frozenCo : [];\n if (frontColumns.length > 0 || backColumns.length > 0 || frozenColumns.length > 0) {\n var usedColumns = new Set();\n var frontIndex = 0;\n frozenColumns === null || frozenColumns === void 0 || frozenColumns.forEach(name => {\n if (usedColumns.has(name)) {\n throw new Error(\"Column specified in multiple layout hints: \".concat(name));\n }\n moveColumn(name, frontIndex);\n frontIndex += 1;\n });\n frontColumns.forEach(name => {\n if (usedColumns.has(name)) {\n throw new Error(\"Column specified in multiple layout hints: \".concat(name));\n }\n moveColumn(name, frontIndex);\n frontIndex += 1;\n });\n var backIndex = this.columns.length - 1;\n backColumns === null || backColumns === void 0 || backColumns.forEach(name => {\n if (usedColumns.has(name)) {\n throw new Error(\"Column specified in multiple layout hints: \".concat(name));\n }\n moveColumn(name, backIndex);\n backIndex -= 1;\n });\n }\n var layoutHintColumnGroups = layoutHints === null || layoutHints === void 0 ? void 0 : layoutHints.columnGroups;\n if (layoutHintColumnGroups) {\n var columnGroups = [...groupMap.values()];\n columnGroups.sort((a, b) => a.depth - b.depth);\n columnGroups.forEach(group => {\n var firstChildName = group.children[0];\n var rightModelIndex = this.getColumnIndexByName(firstChildName);\n var rightVisibleIndex;\n if (rightModelIndex != null) {\n rightVisibleIndex = GridUtils.getVisibleIndex(rightModelIndex, movedColumns);\n } else {\n var firstChildGroup = groupMap.get(firstChildName);\n if (!firstChildGroup) {\n throw new Error(\"Unknown column \".concat(firstChildName, \" in group \").concat(group.name));\n }\n var visibleRange = firstChildGroup.getVisibleRange(movedColumns);\n // Columns will be moved to start at the end of the first child group\n [, rightVisibleIndex] = visibleRange;\n }\n for (var i = 1; i < group.children.length; i += 1) {\n var childName = group.children[i];\n var childGroup = groupMap.get(childName);\n var childColumn = this.getColumnIndexByName(childName);\n if (childGroup) {\n // All columns in the group will be before or after the start index\n // Lower level groups are re-arranged first, so they will be contiguous\n var isBeforeGroup = childGroup.getVisibleRange(movedColumns)[0] < rightVisibleIndex;\n var moveToIndex = isBeforeGroup ? rightVisibleIndex - childGroup.childIndexes.length + 1 : rightVisibleIndex + 1;\n moveGroup(childName, moveToIndex);\n rightVisibleIndex = moveToIndex + childGroup.childIndexes.length - 1;\n } else if (childColumn != null) {\n var _isBeforeGroup = GridUtils.getVisibleIndex(childColumn, movedColumns) < rightVisibleIndex;\n var _moveToIndex = _isBeforeGroup ? rightVisibleIndex : rightVisibleIndex + 1;\n moveColumn(childName, _moveToIndex);\n rightVisibleIndex = _moveToIndex;\n }\n }\n });\n }\n this._movedColumns = movedColumns;\n return movedColumns;\n }));\n _defineProperty(this, \"getMemoizedInitialColumnHeaderGroups\", memoize(layoutHints => {\n var _layoutHints$columnGr2;\n return IrisGridUtils.parseColumnHeaderGroups(this, (_layoutHints$columnGr2 = layoutHints === null || layoutHints === void 0 ? void 0 : layoutHints.columnGroups) !== null && _layoutHints$columnGr2 !== void 0 ? _layoutHints$columnGr2 : []).groups;\n }));\n _defineProperty(this, \"getColumnIndicesByNameMap\", memoize(columns => {\n var indices = new Map();\n columns.forEach((_ref, i) => {\n var {\n name\n } = _ref;\n return indices.set(name, i);\n });\n return indices;\n }));\n _defineProperty(this, \"setViewport\", throttle((top, bottom, columns) => {\n if (bottom < top) {\n log.error('Invalid viewport', top, bottom);\n return;\n }\n var {\n viewport\n } = this;\n if (viewport != null && viewport.top === top && viewport.bottom === bottom && viewport.columns === columns) {\n log.debug2('Ignoring duplicate viewport', viewport);\n return;\n }\n this.viewport = {\n top,\n bottom,\n columns\n };\n log.debug2('setViewport', this.viewport);\n this.applyViewport();\n }, SET_VIEWPORT_THROTTLE));\n /**\n * Applies the current viewport to the underlying table.\n */\n _defineProperty(this, \"applyViewport\", throttle(() => {\n if (!this.viewport) {\n return;\n }\n log.debug2('applyViewport', this.viewport);\n var {\n top,\n bottom,\n columns\n } = this.viewport;\n var [viewportTop, viewportBottom] = this.getCachedViewportRowRange(top, bottom);\n this.applyBufferedViewport(viewportTop, viewportBottom, columns);\n }, APPLY_VIEWPORT_THROTTLE, {\n leading: false\n }));\n _defineProperty(this, \"getCachedFormattedString\", memoizeClear((formatter, value, columnType, columnName, formatOverride) => formatter.getFormattedString(value, columnType, columnName, formatOverride), {\n max: 10000\n }));\n _defineProperty(this, \"getCachedCustomColumnFormatFlag\", memoizeClear(FormatterUtils.isCustomColumnFormatDefined, {\n max: 10000\n }));\n _defineProperty(this, \"getCachedViewportRowRange\", memoize((top, bottom) => {\n var viewHeight = bottom - top;\n var viewportTop = Math.max(0, top - viewHeight * IrisGridTableModelTemplate.ROW_BUFFER_PAGES);\n var viewportBottom = bottom + viewHeight * IrisGridTableModelTemplate.ROW_BUFFER_PAGES;\n return [viewportTop, viewportBottom];\n }));\n _defineProperty(this, \"getCachedPendingErrors\", memoize((pendingDataMap, columns, keyColumnCount) => {\n var map = new Map();\n pendingDataMap.forEach((row, rowIndex) => {\n var {\n data: rowData\n } = row;\n for (var i = 0; i < keyColumnCount; i += 1) {\n if (!rowData.has(i)) {\n var _map$get;\n if (!map.has(rowIndex)) {\n map.set(rowIndex, []);\n }\n (_map$get = map.get(rowIndex)) === null || _map$get === void 0 || _map$get.push(new MissingKeyError(rowIndex, columns[i].name));\n }\n }\n });\n return map;\n }));\n this.handleTableDisconnect = this.handleTableDisconnect.bind(this);\n this.handleTableReconnect = this.handleTableReconnect.bind(this);\n this.handleTableUpdate = this.handleTableUpdate.bind(this);\n this.handleTotalsUpdate = this.handleTotalsUpdate.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.handleCustomColumnsChanged = this.handleCustomColumnsChanged.bind(this);\n this.dh = dh;\n this.irisFormatter = _formatter;\n this.irisColumnAlignmentMap = columnAlignmentMap;\n this.irisGridUtils = new IrisGridUtils(dh);\n this.inputTable = inputTable;\n this.subscription = null;\n this.table = table;\n this.tableUtils = new TableUtils(dh);\n this.viewport = null;\n this.viewportData = null;\n this.formattedStringData = [];\n this.pendingStringData = [];\n this.isSaveInProgress = false;\n this.totalsTable = null;\n this.totalsTablePromise = null;\n this.totals = null;\n this.totalsDataMap = null;\n\n // Map from new row index to their values. Only for input tables that can have new rows added.\n // The index of these rows start at 0, and they are appended at the end of the regular table data.\n // These rows can be sparse, so using a map instead of an array.\n this.pendingNewDataMap = new Map();\n this.pendingNewRowCount = 0;\n }\n close() {\n this.table.close();\n if (this.totalsTable !== null) {\n this.totalsTable.close();\n }\n if (this.totalsTablePromise !== null) {\n this.totalsTablePromise.cancel();\n }\n }\n startListening() {\n super.startListening();\n var {\n dh\n } = this;\n this.table.addEventListener(dh.Table.EVENT_DISCONNECT, this.handleTableDisconnect);\n this.table.addEventListener(dh.Table.EVENT_RECONNECT, this.handleTableReconnect);\n this.table.addEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n this.table.addEventListener(dh.Client.EVENT_REQUEST_FAILED, this.handleRequestFailed);\n this.table.addEventListener(dh.Table.EVENT_CUSTOMCOLUMNSCHANGED, this.handleCustomColumnsChanged);\n if (this.totalsTable != null) {\n this.addTotalsListeners(this.totalsTable);\n }\n this.applyViewport();\n }\n stopListening() {\n super.stopListening();\n var {\n dh\n } = this;\n this.table.removeEventListener(dh.Table.EVENT_DISCONNECT, this.handleTableDisconnect);\n this.table.removeEventListener(dh.Table.EVENT_RECONNECT, this.handleTableReconnect);\n this.table.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n this.table.removeEventListener(dh.Client.EVENT_REQUEST_FAILED, this.handleRequestFailed);\n this.table.removeEventListener(dh.Table.EVENT_CUSTOMCOLUMNSCHANGED, this.handleCustomColumnsChanged);\n if (this.totalsTable != null) {\n this.removeTotalsListeners(this.totalsTable);\n }\n this.closeSubscription();\n }\n addTotalsListeners(totalsTable) {\n var {\n dh\n } = this;\n totalsTable.addEventListener(dh.Table.EVENT_UPDATED, this.handleTotalsUpdate);\n\n // Totals table only has one row of data\n totalsTable.setViewport(0, 0);\n }\n removeTotalsListeners(totalsTable) {\n var {\n dh\n } = this;\n totalsTable.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTotalsUpdate);\n }\n handleTableDisconnect() {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.DISCONNECT));\n }\n handleTableReconnect() {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.RECONNECT));\n }\n handleTableUpdate(event) {\n this.copyViewportData(event.detail);\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n handleTotalsUpdate(event) {\n this.copyTotalsData(event.detail);\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n handleRequestFailed(event) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, event));\n }\n handleCustomColumnsChanged() {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.COLUMNS_CHANGED, {\n detail: this.columns\n }));\n }\n get rowCount() {\n var _this$totals$operatio, _this$totals;\n return (\n // Table size can be negative if the table isn't ready yet\n Math.max(this.table.size, 0) + this.pendingNewRowCount + ((_this$totals$operatio = (_this$totals = this.totals) === null || _this$totals === void 0 || (_this$totals = _this$totals.operationOrder) === null || _this$totals === void 0 ? void 0 : _this$totals.length) !== null && _this$totals$operatio !== void 0 ? _this$totals$operatio : 0)\n );\n }\n get pendingDataErrors() {\n var _this$inputTable$keyC, _this$inputTable;\n return this.getCachedPendingErrors(this.pendingNewDataMap, this.columns, (_this$inputTable$keyC = (_this$inputTable = this.inputTable) === null || _this$inputTable === void 0 ? void 0 : _this$inputTable.keyColumns.length) !== null && _this$inputTable$keyC !== void 0 ? _this$inputTable$keyC : 0);\n }\n get pendingDataMap() {\n return this.pendingNewDataMap;\n }\n set pendingDataMap(map) {\n if (map === this.pendingNewDataMap) {\n return;\n }\n map.forEach((row, rowIndex) => {\n if (!IrisGridUtils.isValidIndex(rowIndex)) {\n throw new Error(\"Invalid rowIndex \".concat(rowIndex));\n }\n var {\n data\n } = row;\n data.forEach((value, columnIndex) => {\n if (!IrisGridUtils.isValidIndex(columnIndex)) {\n throw new Error(\"Invalid columnIndex \".concat(columnIndex));\n }\n });\n });\n this.pendingNewDataMap = map;\n this.pendingNewRowCount = Math.max(this.pendingNewRowCount, this.maxPendingDataRow);\n this.formattedStringData = [];\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED));\n }\n get pendingRowCount() {\n return this.pendingNewRowCount;\n }\n set pendingRowCount(count) {\n if (count === this.pendingNewRowCount) {\n return;\n }\n this.pendingNewRowCount = Math.max(0, count, this.maxPendingDataRow);\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n get maxPendingDataRow() {\n return this.pendingNewDataMap.size > 0 ? Math.max(...this.pendingNewDataMap.keys()) + 1 : 0;\n }\n get columnCount() {\n return this.columns.length;\n }\n get floatingBottomRowCount() {\n var _this$totals$operatio2, _this$totals2;\n return this.totals != null && this.totals.showOnTop ? 0 : (_this$totals$operatio2 = (_this$totals2 = this.totals) === null || _this$totals2 === void 0 || (_this$totals2 = _this$totals2.operationOrder) === null || _this$totals2 === void 0 ? void 0 : _this$totals2.length) !== null && _this$totals$operatio2 !== void 0 ? _this$totals$operatio2 : 0;\n }\n get floatingTopRowCount() {\n var _this$totals$operatio3, _this$totals3;\n return this.totals != null && this.totals.showOnTop ? (_this$totals$operatio3 = (_this$totals3 = this.totals) === null || _this$totals3 === void 0 || (_this$totals3 = _this$totals3.operationOrder) === null || _this$totals3 === void 0 ? void 0 : _this$totals3.length) !== null && _this$totals$operatio3 !== void 0 ? _this$totals$operatio3 : 0 : 0;\n }\n get isValuesTableAvailable() {\n return this.table.selectDistinct != null && this.table.copy != null;\n }\n get isChartBuilderAvailable() {\n return true;\n }\n get isOrganizeColumnsAvailable() {\n return true;\n }\n get isTotalsAvailable() {\n return this.table.getTotalsTable != null;\n }\n get isEditable() {\n return !this.isSaveInProgress && this.inputTable != null;\n }\n get isDeletable() {\n return this.keyColumnSet.size > 0;\n }\n get isViewportPending() {\n if (this.viewport == null || this.viewport.columns === undefined || this.viewportData == null) {\n return true;\n }\n // no columns or no rows\n if (this.viewport.columns.length === 0 || this.viewportData.rows.length === 0) {\n return false;\n }\n\n // offset is first row of loaded data\n var pendingTop = this.viewport.top < this.viewportData.offset;\n // offset + row.length is last row of loaded data\n var pendingBottom = this.viewportData.offset + this.viewportData.rows.length < this.viewport.bottom;\n // left column doesn't exist in data\n var pendingLeft = this.viewportData.rows[0].data.get(this.viewport.columns[0].index) === undefined;\n // right column doesn't exist in data\n var pendingRight = this.viewportData.rows[0].data.get(this.viewport.columns[this.viewport.columns.length - 1].index) === undefined;\n return pendingTop || pendingBottom || pendingLeft || pendingRight;\n }\n cacheFormattedValue(x, y, text) {\n if (this.formattedStringData[x] == null) {\n this.formattedStringData[x] = [];\n }\n this.formattedStringData[x][y] = text;\n }\n cachePendingValue(x, y, text) {\n if (this.pendingStringData[x] == null) {\n this.pendingStringData[x] = [];\n }\n this.pendingStringData[x][y] = text;\n }\n clearPendingValue(x, y) {\n var column = this.pendingStringData[x];\n if (column != null) {\n delete column[y];\n }\n }\n textValueForCell(x, y) {\n var _this$pendingStringDa, _this$formattedString;\n // First check if there's any pending values we should read from\n if (((_this$pendingStringDa = this.pendingStringData[x]) === null || _this$pendingStringDa === void 0 ? void 0 : _this$pendingStringDa[y]) !== undefined) {\n return this.pendingStringData[x][y];\n }\n\n // Use a separate cache from memoization just for the strings that are currently displayed\n if (((_this$formattedString = this.formattedStringData[x]) === null || _this$formattedString === void 0 ? void 0 : _this$formattedString[y]) === undefined) {\n var value = this.valueForCell(x, y);\n if (value === null) {\n return null;\n }\n if (value === undefined) {\n return undefined;\n }\n var column = this.sourceColumn(x, y);\n var hasCustomColumnFormat = this.getCachedCustomColumnFormatFlag(this.formatter, column.name, column.type);\n var formatOverride;\n if (!hasCustomColumnFormat) {\n var formatForCell = this.formatForCell(x, y);\n if ((formatForCell === null || formatForCell === void 0 ? void 0 : formatForCell.formatString) != null) {\n formatOverride = formatForCell;\n }\n }\n var text = this.displayString(value, column.type, column.name, formatOverride);\n this.cacheFormattedValue(x, y, text);\n }\n return this.formattedStringData[x][y];\n }\n textForCell(x, y) {\n var _this$columns$x;\n var text = this.textValueForCell(x, y);\n if (text == null && this.isKeyColumn(x)) {\n var pendingRow = this.pendingRow(y);\n if (pendingRow != null && this.pendingDataMap.has(pendingRow)) {\n // Asterisk to show a value is required for a key column on a row that has some data entered\n return '*';\n }\n }\n if (TableUtils.isTextType((_this$columns$x = this.columns[x]) === null || _this$columns$x === void 0 ? void 0 : _this$columns$x.type)) {\n if (text === null) {\n return this.formatter.showNullStrings ? 'null' : '';\n }\n if (text === '') {\n return this.formatter.showEmptyStrings ? 'empty' : '';\n }\n }\n return text !== null && text !== void 0 ? text : '';\n }\n truncationCharForCell(x) {\n var column = this.columns[x];\n var {\n type\n } = column;\n if (TableUtils.isNumberType(type) && this.formatter.truncateNumbersWithPound) {\n return '#';\n }\n return undefined;\n }\n colorForCell(x, y, theme) {\n var data = this.dataForCell(x, y);\n if (data) {\n var {\n format,\n value\n } = data;\n if (value == null || value === '') {\n assertNotNull(theme.nullStringColor);\n return theme.nullStringColor;\n }\n if ((format === null || format === void 0 ? void 0 : format.color) != null && format.color !== '') {\n return format.color;\n }\n if (this.isPendingRow(y)) {\n // Data entered in a pending row\n assertNotNull(theme.pendingTextColor);\n return theme.pendingTextColor;\n }\n\n // Fallback to formatting based on the value/type of the cell\n if (value != null) {\n var column = this.sourceColumn(x, y);\n return IrisGridUtils.colorForValue(theme, column.type, column.name, value);\n }\n } else if (this.isPendingRow(y) && this.isKeyColumn(x)) {\n assertNotNull(theme.errorTextColor);\n return theme.errorTextColor;\n }\n return theme.textColor;\n }\n backgroundColorForCell(x, y, theme) {\n var _this$formatForCell$b, _this$formatForCell;\n return (_this$formatForCell$b = (_this$formatForCell = this.formatForCell(x, y)) === null || _this$formatForCell === void 0 ? void 0 : _this$formatForCell.backgroundColor) !== null && _this$formatForCell$b !== void 0 ? _this$formatForCell$b : null;\n }\n textAlignForCell(x, y) {\n var column = this.sourceColumn(x, y);\n var userTextAlignment = this.columnAlignmentMap.get(column.name);\n if (userTextAlignment != null) {\n return userTextAlignment;\n }\n return IrisGridUtils.textAlignForValue(column.type, column.name);\n }\n textForColumnHeader(x) {\n var _header$displayName;\n var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var header = this.columnAtDepth(x, depth);\n if (isColumnHeaderGroup(header)) {\n return header.isNew ? '' : header.name;\n }\n return (_header$displayName = header === null || header === void 0 ? void 0 : header.displayName) !== null && _header$displayName !== void 0 ? _header$displayName : header === null || header === void 0 ? void 0 : header.name;\n }\n colorForColumnHeader(x) {\n var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var column = this.columnAtDepth(x, depth);\n if (isColumnHeaderGroup(column)) {\n var _column$color;\n return (_column$color = column.color) !== null && _column$color !== void 0 ? _column$color : null;\n }\n return null;\n }\n tooltipForCell(column, row) {\n if (TableUtils.isDateType(this.columns[column].type)) {\n return this.displayString(this.valueForCell(column, row), this.columns[column].type, this.columns[column].name, {\n formatString: DateUtils.FULL_DATE_FORMAT\n });\n }\n return null;\n }\n getColumnHeaderGroup(modelIndex, depth) {\n var group = this.columnAtDepth(modelIndex, depth);\n if (isColumnHeaderGroup(group)) {\n return group;\n }\n return undefined;\n }\n getColumnHeaderParentGroup(modelIndex, depth) {\n var _this$columnAtDepth$n, _this$columnAtDepth;\n return this.columnHeaderParentMap.get((_this$columnAtDepth$n = (_this$columnAtDepth = this.columnAtDepth(modelIndex, depth)) === null || _this$columnAtDepth === void 0 ? void 0 : _this$columnAtDepth.name) !== null && _this$columnAtDepth$n !== void 0 ? _this$columnAtDepth$n : '');\n }\n columnAtDepth(x) {\n var _this$columns$x2;\n var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n if (depth === 0) {\n return this.columns[x];\n }\n var columnName = (_this$columns$x2 = this.columns[x]) === null || _this$columns$x2 === void 0 ? void 0 : _this$columns$x2.name;\n var group = this.columnHeaderParentMap.get(columnName);\n if (!group) {\n return undefined;\n }\n var currentDepth = group.depth;\n while (currentDepth < depth) {\n group = this.columnHeaderParentMap.get(group.name);\n if (!group) {\n return undefined;\n }\n currentDepth = group.depth;\n }\n if (group.depth === depth) {\n return group;\n }\n return undefined;\n }\n textForRowFooter(y) {\n var totalsRow = this.totalsRow(y);\n if (totalsRow != null && this.totals) {\n return this.totals.operationOrder[totalsRow];\n }\n return '';\n }\n /**\n * Used to get the initial moved columns based on layout hints\n */\n get initialMovedColumns() {\n var _this$layoutHints;\n return this.getMemoizedInitialMovedColumns((_this$layoutHints = this.layoutHints) !== null && _this$layoutHints !== void 0 ? _this$layoutHints : undefined);\n }\n get initialColumnHeaderGroups() {\n var _this$layoutHints2;\n return this.getMemoizedInitialColumnHeaderGroups((_this$layoutHints2 = this.layoutHints) !== null && _this$layoutHints2 !== void 0 ? _this$layoutHints2 : undefined);\n }\n get columnHeaderMaxDepth() {\n var _this$_columnHeaderMa;\n return (_this$_columnHeaderMa = this._columnHeaderMaxDepth) !== null && _this$_columnHeaderMa !== void 0 ? _this$_columnHeaderMa : 1;\n }\n set columnHeaderMaxDepth(depth) {\n this._columnHeaderMaxDepth = depth;\n }\n get columnHeaderGroupMap() {\n this.initializeColumnHeaderGroups();\n return this._columnHeaderGroupMap;\n }\n get columnHeaderGroups() {\n this.initializeColumnHeaderGroups();\n return this._columnHeaderGroups;\n }\n set columnHeaderGroups(groups) {\n if (groups === this._columnHeaderGroups) {\n return;\n }\n var {\n groups: newGroups,\n maxDepth,\n parentMap,\n groupMap\n } = IrisGridUtils.parseColumnHeaderGroups(this, groups !== null && groups !== void 0 ? groups : this.initialColumnHeaderGroups);\n this._columnHeaderGroups = newGroups;\n this.columnHeaderMaxDepth = maxDepth;\n this.columnHeaderParentMap = parentMap;\n this._columnHeaderGroupMap = groupMap;\n this._isColumnHeaderGroupsInitialized = true;\n }\n initializeColumnHeaderGroups() {\n if (!this._isColumnHeaderGroupsInitialized) {\n var _this$layoutHints$col, _this$layoutHints3;\n this.columnHeaderGroups = IrisGridUtils.parseColumnHeaderGroups(this, (_this$layoutHints$col = (_this$layoutHints3 = this.layoutHints) === null || _this$layoutHints3 === void 0 ? void 0 : _this$layoutHints3.columnGroups) !== null && _this$layoutHints$col !== void 0 ? _this$layoutHints$col : []).groups;\n }\n }\n row(y) {\n var _this$totals$operatio4, _this$totals4, _this$totals$showOnTo, _this$totals5, _this$viewportData$of, _this$viewportData, _this$viewportData$ro, _this$viewportData2;\n var totalsRowCount = (_this$totals$operatio4 = (_this$totals4 = this.totals) === null || _this$totals4 === void 0 || (_this$totals4 = _this$totals4.operationOrder) === null || _this$totals4 === void 0 ? void 0 : _this$totals4.length) !== null && _this$totals$operatio4 !== void 0 ? _this$totals$operatio4 : 0;\n var showOnTop = (_this$totals$showOnTo = (_this$totals5 = this.totals) === null || _this$totals5 === void 0 ? void 0 : _this$totals5.showOnTop) !== null && _this$totals$showOnTo !== void 0 ? _this$totals$showOnTo : false;\n var totalsRow = this.totalsRow(y);\n if (totalsRow != null) {\n var _this$totals6, _this$totalsDataMap$g, _this$totalsDataMap;\n var operation = (_this$totals6 = this.totals) === null || _this$totals6 === void 0 ? void 0 : _this$totals6.operationOrder[totalsRow];\n assertNotNull(operation);\n return (_this$totalsDataMap$g = (_this$totalsDataMap = this.totalsDataMap) === null || _this$totalsDataMap === void 0 ? void 0 : _this$totalsDataMap.get(operation)) !== null && _this$totalsDataMap$g !== void 0 ? _this$totalsDataMap$g : null;\n }\n var pendingRow = this.pendingRow(y);\n if (pendingRow != null) {\n var _this$pendingNewDataM;\n return (_this$pendingNewDataM = this.pendingNewDataMap.get(pendingRow)) !== null && _this$pendingNewDataM !== void 0 ? _this$pendingNewDataM : null;\n }\n var offset = (_this$viewportData$of = (_this$viewportData = this.viewportData) === null || _this$viewportData === void 0 ? void 0 : _this$viewportData.offset) !== null && _this$viewportData$of !== void 0 ? _this$viewportData$of : 0;\n var viewportY = (showOnTop ? y - totalsRowCount : y) - offset;\n return (_this$viewportData$ro = (_this$viewportData2 = this.viewportData) === null || _this$viewportData2 === void 0 || (_this$viewportData2 = _this$viewportData2.rows) === null || _this$viewportData2 === void 0 ? void 0 : _this$viewportData2[viewportY]) !== null && _this$viewportData$ro !== void 0 ? _this$viewportData$ro : null;\n }\n\n /**\n * Retrieve the source column for given coordinates.\n * - Retrieve the totals column if this is a totals row\n * - Retrieve the source column if it's a proxied column\n * - Otherwise return the column at the given index\n * @param column Column index to get the source column from\n * @param row Row index to get the source column from\n */\n sourceColumn(column, row) {\n var totalsRow = this.totalsRow(row);\n if (totalsRow != null) {\n var _this$totals7, _this$totals$defaultO, _this$totals8, _this$totalsTable;\n var operation = (_this$totals7 = this.totals) === null || _this$totals7 === void 0 ? void 0 : _this$totals7.operationOrder[totalsRow];\n var defaultOperation = (_this$totals$defaultO = (_this$totals8 = this.totals) === null || _this$totals8 === void 0 ? void 0 : _this$totals8.defaultOperation) !== null && _this$totals$defaultO !== void 0 ? _this$totals$defaultO : AggregationOperation.SUM;\n var tableColumn = this.columns[column];\n\n // Find the matching totals table column for the operation\n // When there are multiple aggregations for the column, the column name will be the original name of the column with the operation appended afterward\n // When the the operation is the default operation OR there is only one operation for the column, then the totals column name is just the original column name\n var totalsColumn = (_this$totalsTable = this.totalsTable) === null || _this$totalsTable === void 0 ? void 0 : _this$totalsTable.columns.find(col => {\n var _this$totals9;\n return col.name === \"\".concat(tableColumn.name, \"__\").concat(operation) || (operation === defaultOperation || ((_this$totals9 = this.totals) === null || _this$totals9 === void 0 || (_this$totals9 = _this$totals9.operationMap[col.name]) === null || _this$totals9 === void 0 ? void 0 : _this$totals9.length) === 1) && col.name === tableColumn.name;\n });\n if (totalsColumn != null) {\n return totalsColumn;\n }\n // There may be cases were the totals table doesn't have a column, such as when there's a virtual column\n }\n return this.columns[column];\n }\n\n /**\n * Translate from the row in the model to a row in the totals table.\n * If the row is not a totals row, return null\n * @param y The row in the model to get the totals row for\n * @returns The row within the totals table if it's a totals row, null otherwise\n */\n totalsRow(y) {\n var _this$totals$operatio5, _this$totals0, _this$totals$showOnTo2, _this$totals1;\n var totalsRowCount = (_this$totals$operatio5 = (_this$totals0 = this.totals) === null || _this$totals0 === void 0 || (_this$totals0 = _this$totals0.operationOrder) === null || _this$totals0 === void 0 ? void 0 : _this$totals0.length) !== null && _this$totals$operatio5 !== void 0 ? _this$totals$operatio5 : 0;\n var showOnTop = (_this$totals$showOnTo2 = (_this$totals1 = this.totals) === null || _this$totals1 === void 0 ? void 0 : _this$totals1.showOnTop) !== null && _this$totals$showOnTo2 !== void 0 ? _this$totals$showOnTo2 : false;\n var totalsRow = showOnTop ? y : y - this.table.size;\n if (totalsRow >= 0 && totalsRow < totalsRowCount) {\n return totalsRow;\n }\n return null;\n }\n\n /**\n * Translate from the row in the model to a pending input row.\n * If the row is not a pending input row, return null\n * @param y The row in the model to get the pending row for\n * @returns The row within the pending input rows if it's a pending row, null otherwise\n */\n pendingRow(y) {\n if (!this.isEditable) {\n return null;\n }\n var pendingRow = y - this.floatingTopRowCount - this.table.size;\n if (pendingRow >= 0) {\n return pendingRow;\n }\n return null;\n }\n\n /**\n * Check if a row is a totals table row\n * @param y The row in the model to check if it's a totals table row\n * @returns True if the row is a totals row, false if not\n */\n isTotalsRow(y) {\n return this.totalsRow(y) != null;\n }\n\n /**\n * Check if a row is a pending input row\n * @param y The row in the model to check if it's a pending new row\n * @returns True if the row is a pending new row, false if not\n */\n isPendingRow(y) {\n return this.pendingRow(y) != null;\n }\n dataForCell(x, y) {\n var _this$row;\n return (_this$row = this.row(y)) === null || _this$row === void 0 ? void 0 : _this$row.data.get(x);\n }\n formatForCell(x, y) {\n var _this$dataForCell;\n return (_this$dataForCell = this.dataForCell(x, y)) === null || _this$dataForCell === void 0 ? void 0 : _this$dataForCell.format;\n }\n valueForCell(x, y) {\n var data = this.dataForCell(x, y);\n\n /* JS API current sets null values as undefined in some instances. This means \n we need to nullish coaelesce so all undefined values from the API return null \n since the data has been fetched. undefined is used to indicate the API has not \n fetched data yet */\n if (data) {\n var _data$value;\n return (_data$value = data.value) !== null && _data$value !== void 0 ? _data$value : null;\n }\n return undefined;\n }\n copyViewportData(data) {\n if (data == null) {\n log.warn('invalid data!');\n return;\n }\n this.viewportData = this.extractViewportData(data);\n this.formattedStringData = [];\n }\n copyTotalsData(totalsData) {\n var _this$totals$defaultO2,\n _this$totals10,\n _this$totals11,\n _this = this;\n if (totalsData == null) {\n log.warn('invalid data!');\n return;\n }\n var {\n columns,\n rows\n } = totalsData;\n if (rows.length !== 1) {\n log.error('Unexpected number of rows received for totals table, ignoring update');\n return;\n }\n var dataMap = new Map();\n var row = rows[0];\n var defaultOperation = (_this$totals$defaultO2 = (_this$totals10 = this.totals) === null || _this$totals10 === void 0 ? void 0 : _this$totals10.defaultOperation) !== null && _this$totals$defaultO2 !== void 0 ? _this$totals$defaultO2 : AggregationOperation.SUM;\n var operationMap = (_this$totals11 = this.totals) === null || _this$totals11 === void 0 ? void 0 : _this$totals11.operationMap;\n var _loop = function _loop() {\n var _operationMap$name$, _operationMap$name;\n var column = columns[c];\n var [name, operation = (_operationMap$name$ = operationMap === null || operationMap === void 0 || (_operationMap$name = operationMap[name]) === null || _operationMap$name === void 0 ? void 0 : _operationMap$name[0]) !== null && _operationMap$name$ !== void 0 ? _operationMap$name$ : defaultOperation] = column.name.split('__');\n if (!dataMap.has(operation)) {\n dataMap.set(operation, {\n data: new Map()\n });\n }\n var {\n data: rowData\n } = dataMap.get(operation);\n var columnIndex = _this.columns.findIndex(col => col.name === name);\n rowData.set(columnIndex, {\n value: row.get(column),\n format: row.getFormat(column)\n });\n };\n for (var c = 0; c < columns.length; c += 1) {\n _loop();\n }\n log.debug2('copyTotalsData', dataMap);\n this.totalsDataMap = dataMap;\n this.formattedStringData = [];\n }\n\n /**\n * Use this as the canonical column index since things like layoutHints could have\n * changed the column order.\n */\n getColumnIndexByName(name) {\n return this.getColumnIndicesByNameMap(this.columns).get(name);\n }\n /**\n * Copies all the viewport data into an object that we can reference later.\n * @param data The data to copy from\n */\n extractViewportData(data) {\n var newData = {\n offset: data.offset,\n rows: []\n };\n var {\n columns\n } = data;\n for (var r = 0; r < data.rows.length; r += 1) {\n var row = data.rows[r];\n var newRow = this.extractViewportRow(row, columns);\n newData.rows.push(newRow);\n }\n return newData;\n }\n extractViewportRow(row, columns) {\n var data = new Map();\n for (var c = 0; c < columns.length; c += 1) {\n var column = columns[c];\n var index = this.getColumnIndexByName(column.name);\n data.set(index !== null && index !== void 0 ? index : column.name, {\n value: row.get(column),\n format: row.getFormat(column)\n });\n }\n return {\n data\n };\n }\n closeSubscription() {\n log.debug2('closeSubscription', this.subscription);\n if (this.subscription) {\n this.subscription.close();\n this.subscription = null;\n }\n this.setViewport.cancel();\n this.applyViewport.cancel();\n }\n get filter() {\n return this.table.filter;\n }\n set filter(filter) {\n this.closeSubscription();\n this.table.applyFilter(filter);\n this.applyViewport();\n }\n get formatter() {\n return this.irisFormatter;\n }\n set formatter(formatter) {\n this.irisFormatter = formatter;\n this.formattedStringData = [];\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.FORMATTER_UPDATED));\n }\n get columnAlignmentMap() {\n return this.irisColumnAlignmentMap;\n }\n set columnAlignmentMap(columnAlignmentMap) {\n this.irisColumnAlignmentMap = columnAlignmentMap;\n }\n displayString(value, columnType) {\n var columnName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var formatOverride = arguments.length > 3 ? arguments[3] : undefined;\n return this.getCachedFormattedString(this.formatter, value, columnType, columnName, formatOverride);\n }\n get sort() {\n return this.table.sort;\n }\n set sort(sort) {\n this.closeSubscription();\n this.table.applySort(this.irisGridUtils.hydrateDhSort(this.columns, sort));\n this.applyViewport();\n }\n set totalsConfig(totalsConfig) {\n log.debug('set totalsConfig', totalsConfig);\n if (totalsConfig === this.totals) {\n // Totals already set, or it will be set when the next model actually gets set\n return;\n }\n this.totals = totalsConfig;\n this.formattedStringData = [];\n if (this.totalsTablePromise != null) {\n this.totalsTablePromise.cancel();\n }\n this.setTotalsTable(null);\n if (totalsConfig == null) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n return;\n }\n this.totalsTablePromise = PromiseUtils.makeCancelable(this.table.getTotalsTable(totalsConfig), table => table.close());\n this.totalsTablePromise.then(totalsTable => {\n this.totalsTablePromise = null;\n this.setTotalsTable(totalsTable);\n }).catch(err => {\n if (PromiseUtils.isCanceled(err)) {\n return;\n }\n log.error('Unable to set next totalsTable', err);\n this.totalsTablePromise = null;\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, {\n detail: err\n }));\n });\n }\n setTotalsTable(totalsTable) {\n log.debug('setTotalsTable', totalsTable);\n if (this.totalsTable !== null) {\n if (this.listenerCount > 0) {\n this.removeTotalsListeners(this.totalsTable);\n }\n this.totalsTable.close();\n }\n this.totalsTable = totalsTable;\n this.totalsDataMap = null;\n if (this.listenerCount > 0 && this.totalsTable != null) {\n this.addTotalsListeners(this.totalsTable);\n }\n }\n applyBufferedViewport(viewportTop, viewportBottom, columns) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.VIEWPORT_UPDATED));\n log.debug2('applyBufferedViewport', viewportTop, viewportBottom, columns);\n if (this.subscription == null) {\n var _this$table$setViewpo;\n log.debug2('applyBufferedViewport creating new subscription');\n this.subscription = (_this$table$setViewpo = this.table.setViewport(viewportTop, viewportBottom, columns)) !== null && _this$table$setViewpo !== void 0 ? _this$table$setViewpo : null;\n } else {\n log.debug2('applyBufferedViewport using existing subscription');\n this.subscription.setViewport(viewportTop, viewportBottom, columns);\n }\n }\n snapshot(ranges) {\n var _arguments = arguments,\n _this2 = this;\n return _asyncToGenerator(function* () {\n var includeHeaders = _arguments.length > 1 && _arguments[1] !== undefined ? _arguments[1] : false;\n var formatValue = _arguments.length > 2 && _arguments[2] !== undefined ? _arguments[2] : value => value;\n var consolidateRanges = _arguments.length > 3 && _arguments[3] !== undefined ? _arguments[3] : true;\n if (_this2.subscription == null) {\n throw new Error('No subscription available');\n }\n var consolidated = consolidateRanges ? GridRange.consolidate(ranges) : ranges;\n if (!IrisGridUtils.isValidSnapshotRanges(consolidated)) {\n throw new Error(\"Invalid snapshot ranges \".concat(ranges));\n }\n\n // Need to separate out the floating ranges as they're from a different source\n var topFloatingRowsSet = new Set();\n var tableRanges = [];\n var bottomFloatingRowsSet = new Set();\n for (var i = 0; i < consolidated.length; i += 1) {\n var range = consolidated[i];\n assertNotNull(range.endRow);\n assertNotNull(range.startRow);\n // Get the rows that are in the top aggregations section\n for (var r = range.startRow; r <= range.endRow && r < _this2.floatingTopRowCount; r += 1) {\n topFloatingRowsSet.add(r);\n }\n\n // Separate out the range that is part of the actual table (ie. not the floating ranges, not aggregations)\n if (range.endRow >= _this2.floatingTopRowCount && range.startRow <= _this2.floatingTopRowCount + _this2.table.size) {\n tableRanges.push(new GridRange(range.startColumn, Math.min(Math.max(0, range.startRow - _this2.floatingTopRowCount)), range.endColumn, Math.min(Math.max(0, range.endRow - _this2.floatingTopRowCount), _this2.table.size - _this2.floatingTopRowCount)));\n }\n // Get the rows that are in the bottom aggregations section\n for (var _r = Math.max(range.startRow, _this2.floatingTopRowCount + _this2.table.size); _r <= range.endRow && _r < _this2.floatingTopRowCount + _this2.table.size + _this2.floatingBottomRowCount; _r += 1) {\n bottomFloatingRowsSet.add(_r);\n }\n }\n var columns = IrisGridUtils.columnsFromRanges(consolidated, _this2.columns);\n var result = [];\n if (includeHeaders) {\n result.push(columns.map(c => c.name));\n }\n var topFloatingRows = [...topFloatingRowsSet].sort();\n var _loop2 = function* _loop2() {\n var row = topFloatingRows[_i];\n var rowData = columns.map(column => {\n var index = _this2.getColumnIndexByName(column.name);\n assertNotNull(index);\n return formatValue(_this2.valueForCell(index, row), column);\n });\n if (includeHeaders) {\n rowData.push(_this2.textForRowFooter(row));\n }\n result.push(rowData);\n };\n for (var _i = 0; _i < topFloatingRows.length; _i += 1) {\n yield* _loop2();\n }\n if (tableRanges.length > 0) {\n var rangeSet = _this2.irisGridUtils.rangeSetFromRanges(tableRanges);\n var snapshot = yield _this2.subscription.snapshot(rangeSet, columns);\n result.push(...snapshot.rows.map(rowData => columns.map(column => formatValue(rowData.get(column), column))));\n }\n var bottomFloatingRows = [...bottomFloatingRowsSet].sort();\n var _loop3 = function* _loop3() {\n var row = bottomFloatingRows[_i2];\n var rowData = columns.map(column => {\n var index = _this2.getColumnIndexByName(column.name);\n assertNotNull(index);\n return formatValue(_this2.valueForCell(index, row), column);\n });\n if (includeHeaders) {\n rowData.push(_this2.textForRowFooter(row));\n }\n result.push(rowData);\n };\n for (var _i2 = 0; _i2 < bottomFloatingRows.length; _i2 += 1) {\n yield* _loop3();\n }\n return result;\n })();\n }\n\n /**\n * Get a text snapshot of the provided ranges\n * @param ranges The ranges to get the snapshot for\n * @param includeHeaders Whether to include the headers in the snapshot or not\n * @param formatValue Function for formatting the raw value into a string\n * @returns A formatted string of all the data, columns separated by `\\t` and rows separated by `\\n`\n */\n textSnapshot(ranges) {\n var _arguments2 = arguments,\n _this3 = this;\n return _asyncToGenerator(function* () {\n var includeHeaders = _arguments2.length > 1 && _arguments2[1] !== undefined ? _arguments2[1] : false;\n var formatValue = _arguments2.length > 2 && _arguments2[2] !== undefined ? _arguments2[2] : value => \"\".concat(value);\n log.debug2('textSnapshot', ranges, includeHeaders);\n var data = yield _this3.snapshot(ranges, includeHeaders, formatValue, false);\n return data.map(row => row.join('\\t')).join('\\n');\n })();\n }\n valuesTable(columns) {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n var table = null;\n try {\n table = yield _this4.table.copy();\n table.applyFilter([]);\n table.applySort([]);\n return yield table.selectDistinct(Array.isArray(columns) ? columns : [columns]);\n } finally {\n if (table != null) {\n table.close();\n }\n }\n })();\n }\n isColumnMovable(modelIndex, depth) {\n if (modelIndex < 0 || modelIndex >= this.columnCount) {\n return false;\n }\n\n // All groups are movable\n if (depth > 0) {\n return true;\n }\n var columnName = this.columns[modelIndex].name;\n if (this.frontColumns.includes(columnName) || this.backColumns.includes(columnName) || this.frozenColumns.includes(columnName) || !columnName) {\n return false;\n }\n return !this.isKeyColumn(modelIndex);\n }\n isColumnSortable(modelIndex) {\n var _this$columns$modelIn;\n return (_this$columns$modelIn = this.columns[modelIndex].isSortable) !== null && _this$columns$modelIn !== void 0 ? _this$columns$modelIn : true;\n }\n isKeyColumn(x) {\n return this.keyColumnSet.has(this.columns[x].name);\n }\n isValueColumn(x) {\n return this.valueColumnSet.has(this.columns[x].name);\n }\n isRowMovable() {\n return false;\n }\n isEditableRange(range) {\n var _range$endColumn;\n // Make sure we have an input table and a valid range\n if (this.inputTable == null || range.startRow == null || range.endRow == null) {\n return false;\n }\n\n // Check that the edit is in the editable range\n // If an input table has keyed columns, the non-key columns are always editable\n // If an input table does not have key columns, it is append only and existing rows cannot be editable\n // Pending rows are always editable\n var isPendingRange = this.isPendingRow(range.startRow) && this.isPendingRow(range.endRow);\n var isKeyColumnInRange = false;\n assertNotNull(range.startColumn);\n // Check if any of the columns in grid range are key columns\n var bound = (_range$endColumn = range.endColumn) !== null && _range$endColumn !== void 0 ? _range$endColumn : this.table.size;\n for (var column = range.startColumn; column <= bound; column += 1) {\n var isKey = this.isKeyColumn(column);\n var isValue = this.isValueColumn(column);\n if (!isKey && !isValue) {\n // If any column is not a key or value column, range is not editable\n return false;\n }\n if (isKey) {\n isKeyColumnInRange = true;\n break;\n }\n }\n if (!(isPendingRange || this.keyColumnSet.size !== 0 && !isKeyColumnInRange)) {\n return false;\n }\n return true;\n }\n isDeletableRange(range) {\n return this.inputTable != null && range.startRow != null && range.endRow != null && range.startRow >= this.floatingTopRowCount && range.startRow < this.floatingTopRowCount + this.table.size + this.pendingRowCount && range.endRow < this.floatingTopRowCount + this.table.size + this.pendingRowCount;\n }\n isEditableRanges(ranges) {\n return ranges.every(range => this.isEditableRange(range));\n }\n isDeletableRanges(ranges) {\n return ranges.every(range => this.isDeletableRange(range));\n }\n\n /**\n * @returns A range corresponding to the underlying table\n */\n getTableAreaRange() {\n return new GridRange(null, this.floatingTopRowCount, null, this.floatingTopRowCount + this.table.size - 1);\n }\n\n /**\n * @returns A range corresponding to the pending new rows\n */\n getPendingAreaRange() {\n return new GridRange(null, this.floatingTopRowCount + this.table.size, null, this.floatingTopRowCount + this.table.size + this.pendingNewRowCount - 1);\n }\n\n /**\n * Set value in an editable table\n * @param x The column to set\n * @param y The row to set\n * @param value The value to set\n * @returns A promise that resolves successfully when the operation is complete, or rejects if there's an error\n */\n setValueForCell(x, y, text) {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n // Cache the value in our pending string cache so that it stays displayed until our edit has been completed\n return _this5.setValueForRanges([new GridRange(x, y, x, y)], text);\n })();\n }\n\n /**\n * Set value in an editable table\n * @param ranges The ranges to set\n * @param value The values to set\n * @returns A promise that resolves successfully when the operation is complete, or rejects if there's an error\n */\n setValueForRanges(ranges, text) {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n if (!_this6.isEditableRanges(ranges)) {\n throw new Error(\"Edits contain uneditable ranges\");\n }\n try {\n // Cache the value in our pending string cache so that it stays displayed until our edit has been completed\n var columnSet = new Set();\n\n // Formatted text for each column\n // Since there could be different formatting for each column, but the value will be the same across rows\n var formattedText = [];\n GridRange.forEachCell(ranges, (x, y) => {\n var column = _this6.columns[x];\n columnSet.add(column);\n if (formattedText[x] === undefined) {\n var value = _this6.tableUtils.makeValue(column.type, text, _this6.formatter.timeZone);\n formattedText[x] = value != null ? _this6.displayString(value, column.type, column.name) : null;\n }\n _this6.cachePendingValue(x, y, formattedText[x]);\n });\n\n // Take care of updates to the pending new area first, as they can be updated synchronously\n var pendingAreaRange = _this6.getPendingAreaRange();\n var pendingRanges = ranges.map(range => GridRange.intersection(pendingAreaRange, range)).filter(range => range != null).map(range => {\n assertNotNull(range);\n return GridRange.offset(range, 0, -(_this6.floatingTopRowCount + _this6.table.size));\n });\n if (pendingRanges.length > 0) {\n var newDataMap = new Map(_this6.pendingNewDataMap);\n GridRange.forEachCell(pendingRanges, (columnIndex, rowIndex) => {\n if (!newDataMap.has(rowIndex)) {\n newDataMap.set(rowIndex, {\n data: new Map()\n });\n }\n var column = _this6.columns[columnIndex];\n var row = newDataMap.get(rowIndex);\n assertNotNull(row);\n var {\n data: rowData\n } = row;\n var newRowData = new Map(rowData);\n var value = _this6.tableUtils.makeValue(column.type, text, _this6.formatter.timeZone);\n if (value != null) {\n newRowData.set(columnIndex, {\n value\n });\n } else {\n newRowData.delete(columnIndex);\n }\n if (newRowData.size > 0) {\n newDataMap.set(rowIndex, _objectSpread(_objectSpread({}, row), {}, {\n data: newRowData\n }));\n } else {\n newDataMap.delete(rowIndex);\n }\n });\n _this6.pendingDataMap = newDataMap;\n }\n _this6.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n var tableAreaRange = _this6.getTableAreaRange();\n var tableRanges = ranges.map(range => GridRange.intersection(tableAreaRange, range)).filter(range => range != null);\n if (tableRanges.length > 0) {\n var _this6$inputTable;\n // Get a snapshot of the full rows, as we need to write a full row when editing\n var data = yield _this6.snapshot(tableRanges.map(range => {\n var _range$startRow, _range$endRow;\n return new GridRange(null, (_range$startRow = range === null || range === void 0 ? void 0 : range.startRow) !== null && _range$startRow !== void 0 ? _range$startRow : null, null, (_range$endRow = range === null || range === void 0 ? void 0 : range.endRow) !== null && _range$endRow !== void 0 ? _range$endRow : null);\n }));\n var newRows = data.map(row => {\n var newRow = {};\n for (var c = 0; c < _this6.columns.length; c += 1) {\n newRow[_this6.columns[c].name] = row[c];\n }\n columnSet.forEach(column => {\n newRow[column.name] = _this6.tableUtils.makeValue(column.type, text, _this6.formatter.timeZone);\n });\n return newRow;\n });\n var result = yield (_this6$inputTable = _this6.inputTable) === null || _this6$inputTable === void 0 ? void 0 : _this6$inputTable.addRows(newRows);\n log.debug('setValueForRanges(', ranges, ',', text, ') set tableRanges', tableRanges, 'result', result);\n }\n\n // Add the changes to the formatted cache so it's still displayed until the update event is received\n // The update event could be received on the next tick, after the input rows have been committed,\n // so make sure we don't display stale data\n GridRange.forEachCell(ranges, (x, y) => {\n var cellText = formattedText[x];\n assertNotNull(cellText);\n _this6.cacheFormattedValue(x, y, cellText);\n });\n } catch (err) {\n log.error('Unable to set ranges', ranges, text, err);\n } finally {\n GridRange.forEachCell(ranges, (x, y) => {\n _this6.clearPendingValue(x, y);\n });\n }\n })();\n }\n setValues() {\n var _arguments3 = arguments,\n _this7 = this;\n return _asyncToGenerator(function* () {\n var edits = _arguments3.length > 0 && _arguments3[0] !== undefined ? _arguments3[0] : [];\n log.debug('setValues(', edits, ')');\n if (!edits.every(edit => {\n var _edit$column, _edit$row;\n return _this7.isEditableRange(GridRange.makeCell((_edit$column = edit.column) !== null && _edit$column !== void 0 ? _edit$column : edit.x, (_edit$row = edit.row) !== null && _edit$row !== void 0 ? _edit$row : edit.y));\n })) {\n throw new Error(\"Edits contain uneditable ranges\");\n }\n try {\n var newDataMap = new Map(_this7.pendingNewDataMap);\n\n // Cache the display values\n edits.forEach(edit => {\n var _edit$column2, _edit$row2;\n var {\n text\n } = edit;\n var x = (_edit$column2 = edit.column) !== null && _edit$column2 !== void 0 ? _edit$column2 : edit.x;\n var y = (_edit$row2 = edit.row) !== null && _edit$row2 !== void 0 ? _edit$row2 : edit.y;\n var column = _this7.columns[x];\n var value = _this7.tableUtils.makeValue(column.type, text, _this7.formatter.timeZone);\n var formattedText = value != null ? _this7.displayString(value, column.type, column.name) : null;\n _this7.cachePendingValue(x, y, formattedText);\n\n // Take care of updates to the pending new area as well, as that can be updated synchronously\n var pendingRow = _this7.pendingRow(y);\n if (pendingRow != null) {\n if (!newDataMap.has(pendingRow)) {\n newDataMap.set(pendingRow, {\n data: new Map()\n });\n }\n var row = newDataMap.get(pendingRow);\n assertNotNull(row);\n var {\n data: rowData\n } = row;\n var newRowData = new Map(rowData);\n if (value != null) {\n newRowData.set(x, {\n value\n });\n } else {\n newRowData.delete(x);\n }\n if (newRowData.size > 0) {\n newDataMap.set(pendingRow, _objectSpread(_objectSpread({}, row), {}, {\n data: newRowData\n }));\n } else {\n newDataMap.delete(pendingRow);\n }\n }\n });\n _this7.pendingDataMap = newDataMap;\n\n // Send an update right after setting the pending map so the values are displayed immediately\n _this7.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n\n // Need to group by row...\n var rowEditMap = edits.reduce((rowMap, edit) => {\n var _edit$row3, _rowMap$get;\n var y = (_edit$row3 = edit.row) !== null && _edit$row3 !== void 0 ? _edit$row3 : edit.y;\n if (!rowMap.has(y)) {\n rowMap.set(y, []);\n }\n (_rowMap$get = rowMap.get(y)) === null || _rowMap$get === void 0 || _rowMap$get.push(edit);\n return rowMap;\n }, new Map());\n var ranges = GridRange.consolidate(edits.map(edit => {\n var _edit$column3, _edit$row4;\n return GridRange.makeCell((_edit$column3 = edit.column) !== null && _edit$column3 !== void 0 ? _edit$column3 : edit.x, (_edit$row4 = edit.row) !== null && _edit$row4 !== void 0 ? _edit$row4 : edit.y);\n }));\n var tableAreaRange = _this7.getTableAreaRange();\n var tableRanges = ranges.map(range => GridRange.intersection(tableAreaRange, range)).filter(range => range != null);\n if (tableRanges.length > 0) {\n var _this7$inputTable;\n // Get a snapshot of the full rows, as we need to write a full row when editing\n var data = yield _this7.snapshot(tableRanges.map(range => {\n assertNotNull(range);\n return new GridRange(null, range.startRow, null, range.endRow);\n }));\n var newRows = data.map((row, dataIndex) => {\n var rowIndex = null;\n var r = dataIndex;\n for (var i = 0; i < tableRanges.length; i += 1) {\n var range = tableRanges[i];\n assertNotNull(range);\n var rangeRowCount = GridRange.rowCount([range]);\n if (r < rangeRowCount) {\n assertNotNull(range.startRow);\n rowIndex = range.startRow + r;\n break;\n }\n r -= rangeRowCount;\n }\n var newRow = {};\n for (var c = 0; c < _this7.columns.length; c += 1) {\n newRow[_this7.columns[c].name] = row[c];\n }\n assertNotNull(rowIndex);\n var rowEdits = rowEditMap.get(rowIndex);\n if (rowEdits != null) {\n rowEdits.forEach(edit => {\n var _edit$column4;\n var column = _this7.columns[(_edit$column4 = edit.column) !== null && _edit$column4 !== void 0 ? _edit$column4 : edit.x];\n newRow[column.name] = _this7.tableUtils.makeValue(column.type, edit.text, _this7.formatter.timeZone);\n });\n }\n return newRow;\n });\n log.info('setValues setting tableRanges', tableRanges);\n var result = yield (_this7$inputTable = _this7.inputTable) === null || _this7$inputTable === void 0 ? void 0 : _this7$inputTable.addRows(newRows);\n log.info('setValues set tableRanges', tableRanges, 'SUCCESS', result);\n }\n\n // We've sent the changes to the server, but have not yet got an update with those changes committed\n // Add the changes to the formatted cache so it's still displayed until the update event is received\n // The update event could be received on the next tick, after the input rows have been committed,\n // so make sure we don't display stale data\n edits.forEach(edit => {\n var _edit$column5, _edit$row5;\n var {\n text\n } = edit;\n var x = (_edit$column5 = edit.column) !== null && _edit$column5 !== void 0 ? _edit$column5 : edit.x;\n var y = (_edit$row5 = edit.row) !== null && _edit$row5 !== void 0 ? _edit$row5 : edit.y;\n var column = _this7.columns[x];\n var value = _this7.tableUtils.makeValue(column.type, text, _this7.formatter.timeZone);\n var formattedText = value != null ? _this7.displayString(value, column.type, column.name) : null;\n _this7.cacheFormattedValue(x, y, formattedText);\n });\n } finally {\n edits.forEach(edit => {\n _this7.clearPendingValue(edit.column, edit.row);\n });\n }\n })();\n }\n commitPending() {\n var _this8 = this;\n return _asyncToGenerator(function* () {\n if (_this8.pendingNewDataMap.size <= 0) {\n throw new Error('No pending changes to commit');\n }\n try {\n var _this8$inputTable, _this8$viewport$botto, _this8$viewport;\n _this8.isSaveInProgress = true;\n var newRows = [];\n _this8.pendingNewDataMap.forEach(row => {\n var newRow = {};\n row.data.forEach((_ref2, columnIndex) => {\n var {\n value\n } = _ref2;\n var columnName = typeof columnIndex === 'string' ? columnIndex : _this8.columns[columnIndex].name;\n newRow[columnName] = value;\n });\n newRows.push(newRow);\n });\n var result = yield (_this8$inputTable = _this8.inputTable) === null || _this8$inputTable === void 0 ? void 0 : _this8$inputTable.addRows(newRows);\n log.debug('commitPending()', _this8.pendingNewDataMap, 'result', result);\n _this8.pendingNewDataMap = new Map();\n _this8.pendingNewRowCount = Math.max(0, ((_this8$viewport$botto = (_this8$viewport = _this8.viewport) === null || _this8$viewport === void 0 ? void 0 : _this8$viewport.bottom) !== null && _this8$viewport$botto !== void 0 ? _this8$viewport$botto : 0) - _this8.table.size);\n _this8.formattedStringData = [];\n _this8.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED));\n } finally {\n _this8.isSaveInProgress = false;\n }\n })();\n }\n editValueForCell(column, row) {\n var _this$textValueForCel;\n return (_this$textValueForCel = this.textValueForCell(column, row)) !== null && _this$textValueForCel !== void 0 ? _this$textValueForCel : '';\n }\n delete(ranges) {\n return _asyncToGenerator(function* () {\n throw new Error('Delete not implemented');\n })();\n }\n isValidForCell(x, y, value) {\n try {\n var column = this.columns[x];\n this.tableUtils.makeValue(column.type, value, this.formatter.timeZone);\n return true;\n } catch (e) {\n return false;\n }\n }\n}\n_defineProperty(IrisGridTableModelTemplate, \"ROW_BUFFER_PAGES\", 1);\nexport default IrisGridTableModelTemplate;\n//# sourceMappingURL=IrisGridTableModelTemplate.js.map","function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport { GridRange } from '@deephaven/grid';\nimport Log from '@deephaven/log';\nimport { Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport { assertNotNull, EMPTY_ARRAY, EventShimCustomEvent } from '@deephaven/utils';\nimport IrisGridTableModelTemplate from \"./IrisGridTableModelTemplate.js\";\nimport IrisGridModel from \"./IrisGridModel.js\";\nimport IrisGridUtils from \"./IrisGridUtils.js\";\nvar log = Log.module('IrisGridTreeTableModel');\nvar VirtualGroupColumn = Object.freeze({\n name: '__DH_UI_GROUP__',\n displayName: 'Group',\n type: TableUtils.dataType.STRING,\n constituentType: TableUtils.dataType.STRING,\n isPartitionColumn: false,\n isSortable: false,\n isProxy: true,\n description: 'Key column',\n index: -1,\n filter: () => {\n throw new Error('Filter not implemented for virtual column');\n },\n sort: () => {\n throw new Error('Sort not implemented for virtual column');\n },\n formatColor: () => {\n throw new Error('Color not implemented for virtual column');\n },\n get: () => {\n throw new Error('get not implemented for virtual column');\n },\n getFormat: () => {\n throw new Error('getFormat not implemented for virtual column');\n },\n formatNumber: () => {\n throw new Error('formatNumber not implemented for virtual column');\n },\n formatDate: () => {\n throw new Error('formatDate not implemented for virtual column');\n }\n});\n/**\n * Check if a row is a UITreeRow\n * @param row The row to check\n * @returns True if the row is a UITreeRow and false otherwise\n */\nexport function isUITreeRow(row) {\n return row != null && typeof row === 'object' && 'hasChildren' in row && 'isExpanded' in row && 'depth' in row && typeof row.hasChildren === 'boolean' && typeof row.isExpanded === 'boolean' && typeof row.depth === 'number';\n}\nfunction isLayoutTreeTable(table) {\n return table.layoutHints !== undefined;\n}\nexport function isIrisGridTreeTableModel(tableModel) {\n return tableModel.showExtraGroupColumn != null;\n}\nclass IrisGridTreeTableModel extends IrisGridTableModelTemplate {\n constructor(dh, table) {\n var formatter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Formatter(dh);\n var inputTable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n var columnAlignmentMap = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : new Map();\n super(dh, table, formatter, inputTable, columnAlignmentMap);\n /** We keep a virtual column at the front that tracks the \"group\" that is expanded */\n _defineProperty(this, \"virtualColumns\", void 0);\n _defineProperty(this, \"showExtraGroupCol\", true);\n _defineProperty(this, \"getCachedColumns\", memoize((virtualColumns, tableColumns) => [...virtualColumns, ...tableColumns]));\n _defineProperty(this, \"getCachedGroupColumns\", memoize((virtualColumns, tableGroupedColumns) => [...virtualColumns, ...tableGroupedColumns]));\n _defineProperty(this, \"getCachedFilterableColumnSet\", memoize((columns, isAggregatedColumnsAvailable, aggregatedColumns, groupedColumns, virtualColumns) => {\n if (isAggregatedColumnsAvailable) {\n return new Set(\n // Virtual and aggregated columns are not filterable\n columns.filter(c => !virtualColumns.includes(c) && !aggregatedColumns.includes(c)).map(c1 => columns.findIndex(c2 => c1.name === c2.name)));\n }\n // For compatibility with the Enterprise JSAPI,\n // only groupedColumns are filterable on rollup tables\n // if aggregatedColumns API is not available.\n return new Set(((groupedColumns === null || groupedColumns === void 0 ? void 0 : groupedColumns.length) > 0 ? groupedColumns : columns).filter(c => !virtualColumns.includes(c)).map(c1 => columns.findIndex(c2 => c1.name === c2.name)));\n }));\n _defineProperty(this, \"getCachedGroupedColumnSet\", memoize(groupedColumns => new Set(groupedColumns.map(c1 => this.columns.findIndex(c2 => c1.name === c2.name)))));\n this.virtualColumns = this.showExtraGroupColumn && table.groupedColumns.length > 1 ? [VirtualGroupColumn] : [];\n }\n get showExtraGroupColumn() {\n return this.showExtraGroupCol;\n }\n set showExtraGroupColumn(showExtraGroupCol) {\n if (this.showExtraGroupCol === showExtraGroupCol) {\n return;\n }\n this.showExtraGroupCol = showExtraGroupCol;\n this.updateVirtualColumns();\n }\n updateVirtualColumns() {\n this.virtualColumns = this.showExtraGroupColumn && this.table.groupedColumns.length > 1 ? [VirtualGroupColumn] : [];\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.COLUMNS_CHANGED, {\n detail: this.columns\n }));\n }\n applyBufferedViewport(viewportTop, viewportBottom, columns) {\n var viewportColumns = [\n // Need to always fetch the grouped columns so we always have key data for the rows\n // Used to display our virtual key column\n ...this.table.groupedColumns, ...columns.filter(c => !this.virtualColumns.includes(c) && !this.groupedColumns.includes(c))];\n this.table.setViewport(viewportTop, viewportBottom, viewportColumns);\n }\n textForCell(x, y) {\n var column = this.sourceColumn(x, y);\n var row = this.row(y);\n if (row != null && column != null) {\n if (!row.hasChildren && column.constituentType != null) {\n var _this$columns$x;\n var value = this.valueForCell(x, y);\n var text = this.displayString(value, column.constituentType, column.name);\n if (TableUtils.isTextType((_this$columns$x = this.columns[x]) === null || _this$columns$x === void 0 ? void 0 : _this$columns$x.type)) {\n if (value === null) {\n return this.formatter.showNullStrings ? 'null' : '';\n }\n if (text === '') {\n return this.formatter.showEmptyStrings ? 'empty' : '';\n }\n }\n return text;\n }\n\n // Show empty string instead of null in rollup grouping columns (issue #1483)\n if (row.hasChildren && row.depth <= x + 1 && this.valueForCell(x, y) === null && this.getCachedGroupedColumnSet(this.groupedColumns).has(x)) {\n return '';\n }\n }\n return super.textForCell(x, y);\n }\n colorForCell(x, y, theme) {\n var data = this.dataForCell(x, y);\n if (data) {\n var {\n format,\n value\n } = data;\n if (value == null || value === '') {\n assertNotNull(theme.nullStringColor);\n return theme.nullStringColor;\n }\n if ((format === null || format === void 0 ? void 0 : format.color) != null && format.color !== '') {\n return format.color;\n }\n\n // Fallback to formatting based on the value/type of the cell\n if (value != null) {\n var column = this.sourceColumn(x, y);\n var row = this.row(y);\n assertNotNull(row);\n var columnTypeForFormatting = column.type;\n\n // For tree table leaf nodes, use the constituent type for formatting\n if (isUITreeRow(row) && row.hasChildren === false && column.constituentType != null) {\n columnTypeForFormatting = column.constituentType;\n }\n return IrisGridUtils.colorForValue(theme, columnTypeForFormatting, column.name, value);\n }\n }\n return theme.textColor;\n }\n textAlignForCell(x, y) {\n var _this$columnAlignment;\n var column = this.sourceColumn(x, y);\n var userTextAlignment = (_this$columnAlignment = this.columnAlignmentMap) === null || _this$columnAlignment === void 0 ? void 0 : _this$columnAlignment.get(column.name);\n if (userTextAlignment != null) {\n return userTextAlignment;\n }\n var row = this.row(y);\n var typeForFormatting = column.type;\n\n // For tree table leaf nodes, use the constituent type for formatting\n if (isUITreeRow(row) && row.hasChildren === false && column.constituentType != null) {\n typeForFormatting = column.constituentType;\n }\n return IrisGridUtils.textAlignForValue(typeForFormatting, column.name);\n }\n extractViewportRow(row, columns) {\n var {\n isExpanded,\n hasChildren,\n depth\n } = row;\n var extractedRow = super.extractViewportRow(row, columns);\n var modifiedData = new Map(extractedRow.data);\n if (hasChildren) {\n for (var i = 0; i < this.virtualColumns.length; i += 1) {\n var key = i + (depth - 1) + (this.virtualColumns.length - 1);\n var cellData = modifiedData.get(key);\n if (cellData == null) {\n log.warn('Missing key data for virtual column', i, depth, key, row);\n } else {\n modifiedData.set(i, cellData);\n }\n }\n }\n return _objectSpread(_objectSpread({}, extractedRow), {}, {\n data: modifiedData,\n isExpanded,\n hasChildren,\n depth\n });\n }\n snapshot(ranges, includeHeaders) {\n var _arguments = arguments,\n _this = this;\n return _asyncToGenerator(function* () {\n var _this$viewport$column;\n var formatValue = _arguments.length > 2 && _arguments[2] !== undefined ? _arguments[2] : value => value;\n assertNotNull(_this.viewport);\n assertNotNull(_this.viewportData);\n var columns = (_this$viewport$column = _this.viewport.columns) !== null && _this$viewport$column !== void 0 ? _this$viewport$column : _this.columns;\n var result = [];\n if (includeHeaders != null && includeHeaders) {\n result.push(columns.map(c => c.name));\n }\n var viewportRange = new GridRange(0, _this.viewportData.offset, columns.length, _this.viewportData.offset + _this.viewportData.rows.length - 1);\n for (var i = 0; i < ranges.length; i += 1) {\n var intersection = GridRange.intersection(viewportRange, ranges[i]);\n assertNotNull(intersection);\n assertNotNull(intersection.startRow);\n assertNotNull(intersection.endRow);\n for (var r = intersection.startRow; r <= intersection.endRow; r += 1) {\n var resultRow = [];\n var viewportRow = _this.viewportData.rows[r - _this.viewportData.offset];\n assertNotNull(intersection.startColumn);\n assertNotNull(intersection.endColumn);\n for (var c = intersection.startColumn; c <= intersection.endColumn; c += 1) {\n var _viewportRow$data$get;\n resultRow.push(formatValue((_viewportRow$data$get = viewportRow.data.get(c)) === null || _viewportRow$data$get === void 0 ? void 0 : _viewportRow$data$get.value, _this.columns[c]));\n }\n result.push(resultRow);\n }\n }\n return result;\n })();\n }\n get columns() {\n return this.getCachedColumns(this.virtualColumns, super.columns);\n }\n get aggregatedColumns() {\n return this.isAggregatedColumnsAvailable ? this.table.aggregatedColumns : EMPTY_ARRAY;\n }\n get groupedColumns() {\n return this.getCachedGroupColumns(this.virtualColumns, this.table.groupedColumns);\n }\n sourceForCell(column, row) {\n if (column >= this.virtualColumns.length) {\n return {\n column,\n row\n };\n }\n var depth = this.depthForRow(row);\n return {\n column: column + depth,\n row\n };\n }\n sourceColumn(column, row) {\n if (column >= this.virtualColumns.length) {\n return super.sourceColumn(column, row);\n }\n var depth = this.depthForRow(row);\n return this.columns[column + depth];\n }\n getClearFilterRange(column) {\n if (column >= this.virtualColumns.length) {\n return super.getClearFilterRange(column);\n }\n // Source for the proxied column could be any of the grouped columns.\n // Return the range of columns matching the grouped columns.\n return [this.virtualColumns.length, this.groupedColumns.length];\n }\n get layoutHints() {\n if (isLayoutTreeTable(this.table)) {\n return this.table.layoutHints;\n }\n return undefined;\n }\n get hasExpandableRows() {\n return true;\n }\n get isAggregatedColumnsAvailable() {\n return (\n // aggregatedColumns are not available in the Legacy API\n // and Core API before v0.39.4\n this.table.aggregatedColumns !== undefined\n );\n }\n get isExpandAllAvailable() {\n return this.table.expandAll !== undefined;\n }\n get isChartBuilderAvailable() {\n return false;\n }\n get isOrganizeColumnsAvailable() {\n return true;\n }\n get isSelectDistinctAvailable() {\n return false;\n }\n get isReversible() {\n return false;\n }\n isFilterable(columnIndex) {\n return this.getCachedFilterableColumnSet(this.columns, this.isAggregatedColumnsAvailable, this.aggregatedColumns, this.groupedColumns, this.virtualColumns).has(columnIndex);\n }\n isColumnMovable(column) {\n return column >= this.groupedColumns.length;\n }\n isRowExpandable(y) {\n var _row$hasChildren;\n var row = this.row(y);\n return (_row$hasChildren = row === null || row === void 0 ? void 0 : row.hasChildren) !== null && _row$hasChildren !== void 0 ? _row$hasChildren : false;\n }\n isRowExpanded(y) {\n var _row$isExpanded;\n var row = this.row(y);\n return (_row$isExpanded = row === null || row === void 0 ? void 0 : row.isExpanded) !== null && _row$isExpanded !== void 0 ? _row$isExpanded : false;\n }\n setRowExpanded(y, isExpanded) {\n var expandDescendants = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n if (this.isExpandAllAvailable) {\n this.table.setExpanded(y, isExpanded, expandDescendants);\n } else {\n this.table.setExpanded(y, isExpanded);\n }\n }\n expandAll() {\n if (this.table.expandAll != null) {\n this.table.expandAll();\n }\n }\n collapseAll() {\n if (this.table.collapseAll != null) {\n this.table.collapseAll();\n }\n }\n depthForRow(y) {\n var _row$depth;\n var row = this.row(y);\n return ((_row$depth = row === null || row === void 0 ? void 0 : row.depth) !== null && _row$depth !== void 0 ? _row$depth : 1) - 1;\n }\n updateFrozenColumns(columns) {\n if (columns.length > 0) {\n throw new Error('Cannot freeze columns on a tree table');\n }\n }\n}\nexport default IrisGridTreeTableModel;\n//# sourceMappingURL=IrisGridTreeTableModel.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/**\n * Editor editor for large blocks of code\n */\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport * as monaco from 'monaco-editor';\nimport { assertNotNull } from '@deephaven/utils';\nimport MonacoUtils from \"../monaco/MonacoUtils.js\";\nimport \"./Editor.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nclass Editor extends Component {\n constructor(props) {\n super(props);\n _defineProperty(this, \"container\", void 0);\n _defineProperty(this, \"editor\", void 0);\n this.handleResize = this.handleResize.bind(this);\n this.container = null;\n this.state = {};\n }\n componentDidMount() {\n this.initEditor();\n window.addEventListener('resize', this.handleResize);\n }\n componentWillUnmount() {\n window.removeEventListener('resize', this.handleResize);\n this.destroyEditor();\n }\n setLanguage(language) {\n if (this.editor) {\n var model = this.editor.getModel();\n assertNotNull(model);\n monaco.editor.setModelLanguage(model, language);\n }\n }\n handleResize() {\n this.updateDimensions();\n }\n toggleFind() {\n if (this.editor) {\n // The actions.find action can no longer be triggered when the editor is not in focus, with monaco 0.22.x.\n // As a workaround, just focus the editor before triggering the action\n // https://github.com/microsoft/monaco-editor/issues/2355\n this.editor.focus();\n this.editor.trigger('toggleFind', 'actions.find', undefined);\n }\n }\n updateDimensions() {\n var _this$editor;\n (_this$editor = this.editor) === null || _this$editor === void 0 || _this$editor.layout();\n }\n initEditor() {\n var {\n onEditorInitialized\n } = this.props;\n var {\n settings\n } = this.props;\n settings = _objectSpread({\n copyWithSyntaxHighlighting: false,\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language: \"python\",\n lineNumbersMinChars: 3,\n minimap: {\n enabled: false\n },\n scrollBeyondLastLine: false,\n tabCompletion: 'on',\n value: '',\n wordWrap: 'off',\n links: true,\n autoClosingBrackets: 'beforeWhitespace'\n }, settings);\n assertNotNull(this.container);\n this.editor = monaco.editor.create(this.container, settings);\n this.editor.addAction({\n id: 'find',\n label: 'Find',\n keybindings: [\n // eslint-disable-next-line no-bitwise\n monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyF],\n precondition: undefined,\n keybindingContext: undefined,\n contextMenuGroupId: 'navigation',\n contextMenuOrder: 1.0,\n run: () => {\n this.toggleFind();\n }\n });\n this.editor.layout();\n monaco.languages.registerLinkProvider('plaintext', {\n provideLinks: MonacoUtils.provideLinks\n });\n onEditorInitialized(this.editor);\n }\n destroyEditor() {\n var {\n onEditorWillDestroy\n } = this.props;\n assertNotNull(this.editor);\n onEditorWillDestroy(this.editor);\n this.editor.dispose();\n this.editor = undefined;\n }\n render() {\n var {\n className\n } = this.props;\n return /*#__PURE__*/_jsx(\"div\", {\n className: classNames('editor-container', className),\n ref: container => {\n this.container = container;\n }\n });\n }\n}\n_defineProperty(Editor, \"defaultProps\", {\n className: 'fill-parent-absolute',\n onEditorInitialized: () => undefined,\n onEditorWillDestroy: () => undefined,\n settings: {}\n});\nexport default Editor;\n//# sourceMappingURL=Editor.js.map","var LANGUAGES = {\n groovy: 'Groovy',\n python: 'Python',\n scala: 'Scala'\n};\nclass ScriptEditorUtils {\n /** Get PQ script language from Monaco language\n * @paramlanguage Monaco language\n * @returns PQ script language\n */\n static normalizeScriptLanguage(language) {\n return LANGUAGES[language] || null;\n }\n\n /**\n * Get a tooltip for disabled button based on the session status and language\n * @param isSessionConnected True if console session connected\n * @param isLanguageMatching True if the script language is matching the session language\n * @param scriptLanguageLabel Language label to use in the tooltip message\n * @param buttonLabel Button label to use in the tooltip message\n * @returns Tooltip message or `null` if the session is connected and language is matching\n */\n static getDisabledRunTooltip(isSessionConnected, isLanguageMatching, scriptLanguageLabel, buttonLabel) {\n if (!isSessionConnected) {\n return \"Console session not connected \\u2013 \".concat(buttonLabel, \" disabled\");\n }\n if (!isLanguageMatching) {\n return \"\".concat(scriptLanguageLabel, \" doesn't match the session language \\u2013 \").concat(buttonLabel, \" disabled\");\n }\n return null;\n }\n\n /**\n * Outdent (opposite of indent) a string so the lowest indent level is 0\n * Assumes each line is indented with the same characters (i.e. no mixed tabs/spaces)\n * @param code The code to outdent\n * @returns A code block where the minimum indent level of a line is 0\n */\n static outdentCode(code) {\n var lines = code.split('\\n');\n var minIndent = lines.reduce((min, line) => {\n var indentLength = line.length - line.trimStart().length;\n if (indentLength === line.length) {\n return min;\n }\n return indentLength < min ? indentLength : min;\n }, Number.MAX_SAFE_INTEGER);\n return lines.map(line => line.slice(minIndent)).join('\\n');\n }\n}\nexport default ScriptEditorUtils;\n//# sourceMappingURL=ScriptEditorUtils.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/**\n * Script editor for large blocks of code\n */\nimport React, { Component } from 'react';\nimport { LoadingOverlay, ShortcutRegistry } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { assertNotNull } from '@deephaven/utils';\nimport Editor from \"./Editor.js\";\nimport { MonacoProviders, MonacoUtils } from \"../monaco/index.js\";\nimport \"./ScriptEditor.css\";\nimport SHORTCUTS from \"../ConsoleShortcuts.js\";\nimport ScriptEditorUtils from \"./ScriptEditorUtils.js\";\nimport { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('ScriptEditor');\nclass ScriptEditor extends Component {\n constructor(props) {\n super(props);\n _defineProperty(this, \"contextActionCleanups\", void 0);\n _defineProperty(this, \"completionCleanup\", void 0);\n _defineProperty(this, \"editor\", void 0);\n _defineProperty(this, \"editorComponent\", void 0);\n this.handleEditorInitialized = this.handleEditorInitialized.bind(this);\n this.handleEditorWillDestroy = this.handleEditorWillDestroy.bind(this);\n this.handleRun = this.handleRun.bind(this);\n this.handleRunSelected = this.handleRunSelected.bind(this);\n this.updateShortcuts = this.updateShortcuts.bind(this);\n this.contextActionCleanups = [];\n this.editorComponent = /*#__PURE__*/React.createRef();\n this.state = {\n model: null\n };\n }\n componentDidMount() {\n ShortcutRegistry.addEventListener('onUpdate', this.updateShortcuts);\n }\n componentDidUpdate(prevProps) {\n var _prevProps$settings, _prevProps$settings2;\n var {\n sessionLanguage,\n settings\n } = this.props;\n var language = settings === null || settings === void 0 ? void 0 : settings.language;\n var languageChanged = language !== ((_prevProps$settings = prevProps.settings) === null || _prevProps$settings === void 0 ? void 0 : _prevProps$settings.language);\n if (languageChanged) {\n log.debug('Set language', language);\n this.setLanguage(language);\n }\n var sessionDisconnected = sessionLanguage == null && prevProps.sessionLanguage != null;\n var languageMatch = language === sessionLanguage;\n var prevLanguageMatch = ((_prevProps$settings2 = prevProps.settings) === null || _prevProps$settings2 === void 0 ? void 0 : _prevProps$settings2.language) === prevProps.sessionLanguage;\n if (sessionDisconnected || sessionLanguage !== undefined && prevLanguageMatch && !languageMatch) {\n // Session disconnected or language changed from matching the session language to non-matching\n log.debug('De-init completion');\n this.deInitCodeCompletion();\n }\n var sessionConnected = sessionLanguage != null && prevProps.sessionLanguage == null;\n if (sessionConnected && languageMatch || sessionLanguage !== undefined && !prevLanguageMatch && languageMatch) {\n // Session connected with a matching language or notebook language changed to matching\n log.debug('Init completion');\n this.initCodeCompletion();\n }\n }\n componentWillUnmount() {\n ShortcutRegistry.removeEventListener('onUpdate', this.updateShortcuts);\n }\n getValue() {\n if (this.editor) {\n return this.editor.getValue();\n }\n log.error('Editor not initialized');\n return null;\n }\n getSelectedCommand() {\n var _this$editor, _this$editor2;\n var range = (_this$editor = this.editor) === null || _this$editor === void 0 ? void 0 : _this$editor.getSelection();\n assertNotNull(range);\n var model = (_this$editor2 = this.editor) === null || _this$editor2 === void 0 ? void 0 : _this$editor2.getModel();\n assertNotNull(model);\n var {\n startLineNumber,\n endColumn\n } = range;\n var {\n endLineNumber\n } = range;\n if (endColumn === 1 && endLineNumber > startLineNumber) {\n endLineNumber -= 1;\n }\n var startLineMinColumn = model.getLineMinColumn(startLineNumber);\n var endLineMaxColumn = model.getLineMaxColumn(endLineNumber);\n var wholeLineRange = range.setStartPosition(startLineNumber, startLineMinColumn).setEndPosition(endLineNumber, endLineMaxColumn);\n return ScriptEditorUtils.outdentCode(model.getValueInRange(wholeLineRange));\n }\n handleEditorInitialized(innerEditor) {\n var {\n focusOnMount,\n onChange,\n onEditorInitialized,\n settings,\n session,\n sessionLanguage\n } = this.props;\n log.debug('handleEditorInitialized', sessionLanguage, session, settings);\n this.editor = innerEditor;\n this.setState({\n model: this.editor.getModel()\n });\n MonacoUtils.setEOL(innerEditor);\n MonacoUtils.registerPasteHandler(innerEditor);\n\n // Always initialize context actions when the editor is created to ensure that unwanted default\n // OS shortcuts are overridden by custom shortcuts.\n this.initContextActions();\n if (session != null && settings && sessionLanguage === settings.language) {\n this.initCodeCompletion();\n }\n innerEditor.onDidChangeModelContent(onChange);\n if (focusOnMount != null && focusOnMount) {\n innerEditor.focus();\n }\n onEditorInitialized(this.editor);\n }\n handleEditorWillDestroy(innerEditor) {\n log.debug('handleEditorWillDestroy');\n var {\n onEditorWillDestroy\n } = this.props;\n onEditorWillDestroy(innerEditor);\n this.deInitContextActions();\n this.deInitCodeCompletion();\n this.setState({\n model: null\n });\n this.editor = undefined;\n }\n handleRun() {\n var {\n onRunCommand,\n session,\n sessionLanguage,\n settings\n } = this.props;\n var command = this.getValue();\n var language = settings === null || settings === void 0 ? void 0 : settings.language;\n var languageMatch = language === sessionLanguage;\n if (session == null || !languageMatch) {\n log.info(\"Run disabled - \".concat(session == null ? 'session disconnected' : 'language mismatch'));\n return;\n }\n if (command != null) {\n onRunCommand(command);\n }\n }\n handleRunSelected() {\n var {\n onRunCommand,\n session,\n sessionLanguage,\n settings\n } = this.props;\n var command = this.getSelectedCommand();\n var language = settings === null || settings === void 0 ? void 0 : settings.language;\n var languageMatch = language === sessionLanguage;\n if (session == null || !languageMatch) {\n log.info(\"Run selected disabled - \".concat(session == null ? 'session disconnected' : 'language mismatch'));\n return;\n }\n onRunCommand(command);\n }\n initContextActions() {\n if (this.contextActionCleanups.length > 0) {\n log.error('Context actions already initialized.');\n return;\n }\n if (!this.editor) {\n return;\n }\n var cleanups = [];\n cleanups.push(this.editor.addAction({\n id: 'run-code',\n label: 'Run',\n keybindings: [MonacoUtils.getMonacoKeyCodeFromShortcut(SHORTCUTS.NOTEBOOK.RUN)],\n contextMenuGroupId: 'navigation',\n contextMenuOrder: 1.5,\n run: () => {\n this.handleRun();\n }\n }));\n cleanups.push(this.editor.addAction({\n id: 'run-selected-code',\n label: 'Run Selected',\n keybindings: [MonacoUtils.getMonacoKeyCodeFromShortcut(SHORTCUTS.NOTEBOOK.RUN_SELECTED)],\n contextMenuGroupId: 'navigation',\n contextMenuOrder: 1.5,\n run: () => {\n this.handleRunSelected();\n }\n }));\n this.contextActionCleanups = cleanups;\n }\n deInitContextActions() {\n if (this.contextActionCleanups.length > 0) {\n this.contextActionCleanups.forEach(cleanup => cleanup.dispose());\n this.contextActionCleanups = [];\n }\n }\n updateShortcuts() {\n this.deInitContextActions();\n this.initContextActions();\n }\n initCodeCompletion() {\n if (this.completionCleanup != null) {\n log.error('Code completion already initialized.');\n return;\n }\n var {\n session\n } = this.props;\n log.debug('initCodeCompletion', this.editor, session);\n if (this.editor && session != null) {\n this.completionCleanup = MonacoUtils.openDocument(this.editor, session);\n }\n }\n deInitCodeCompletion() {\n var {\n session\n } = this.props;\n log.debug('deInitCodeCompletion', this.editor, session);\n if (this.completionCleanup) {\n this.completionCleanup.dispose();\n this.completionCleanup = undefined;\n if (this.editor && session != null) {\n MonacoUtils.closeDocument(this.editor, session);\n }\n }\n }\n append(text) {\n var focus = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n assertNotNull(this.editor);\n var model = this.editor.getModel();\n assertNotNull(model);\n var currentText = model.getValue();\n if (currentText) {\n model.setValue(\"\".concat(currentText, \"\\n\").concat(text));\n } else {\n model.setValue(\"\".concat(text));\n }\n var lastLine = model.getLineCount();\n var column = model.getLineLength(lastLine) + 1;\n this.editor.setPosition({\n lineNumber: lastLine,\n column\n });\n if (focus) {\n this.editor.focus();\n }\n }\n updateDimensions() {\n log.debug('updateDimensions');\n if (this.editor) {\n this.editor.layout();\n }\n }\n focus() {\n log.debug('focus');\n if (this.editor) {\n this.editor.focus();\n }\n }\n toggleFind() {\n if (this.editorComponent.current) {\n this.editorComponent.current.toggleFind();\n }\n }\n setLanguage(language) {\n if (this.editorComponent.current && language !== undefined) {\n this.editorComponent.current.setLanguage(language);\n }\n }\n render() {\n var _settings$language;\n var {\n error,\n isLoaded,\n isLoading,\n session,\n sessionLanguage,\n settings\n } = this.props;\n var {\n model\n } = this.state;\n var errorMessage = error ? \"Unable to open document. \".concat(error) : null;\n var editorLanguage = settings ? (_settings$language = settings.language) !== null && _settings$language !== void 0 ? _settings$language : null : null;\n var completionProviderEnabled = model && session && editorLanguage === sessionLanguage;\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [(error || isLoading) && /*#__PURE__*/_jsx(\"div\", {\n className: \"h-100 w-100 position-relative\",\n children: /*#__PURE__*/_jsx(LoadingOverlay, {\n \"data-testid\": \"script-editor-loading\",\n errorMessage: errorMessage,\n isLoading: isLoading,\n isLoaded: isLoaded\n })\n }), isLoaded && /*#__PURE__*/_jsx(\"div\", {\n className: \"h-100 w-100 script-editor\",\n children: settings && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(Editor, {\n ref: this.editorComponent,\n settings: settings,\n onEditorInitialized: this.handleEditorInitialized,\n onEditorWillDestroy: this.handleEditorWillDestroy\n }), completionProviderEnabled != null && completionProviderEnabled && /*#__PURE__*/_jsx(MonacoProviders, {\n model: model,\n language: editorLanguage,\n session: session\n })]\n })\n })]\n });\n }\n}\n_defineProperty(ScriptEditor, \"defaultProps\", {\n error: null,\n isLoading: false,\n isLoaded: false,\n focusOnMount: true,\n onChange: () => undefined,\n onEditorInitialized: () => undefined,\n onEditorWillDestroy: () => undefined,\n session: null\n});\nexport default ScriptEditor;\n//# sourceMappingURL=ScriptEditor.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nclass MissingPartitionError extends Error {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"isMissingPartitionError\", true);\n }\n}\nexport function isMissingPartitionError(err) {\n return (err === null || err === void 0 ? void 0 : err.isMissingPartitionError) === true;\n}\nexport default MissingPartitionError;\n//# sourceMappingURL=MissingPartitionError.js.map","function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport { GridRange } from '@deephaven/grid';\nimport Log from '@deephaven/log';\nimport { Formatter } from '@deephaven/jsapi-utils';\nimport { EventShimCustomEvent, PromiseUtils, assertNotNull, EMPTY_ARRAY } from '@deephaven/utils';\nimport IrisGridModel from \"./IrisGridModel.js\";\nimport IrisGridTableModelTemplate from \"./IrisGridTableModelTemplate.js\";\nvar log = Log.module('IrisGridTableModel');\n\n/**\n * Model for a grid showing an iris data table\n */\n\nclass IrisGridTableModel extends IrisGridTableModelTemplate {\n /**\n * @param dh JSAPI instance\n * @param table Iris data table to be used in the model\n * @param formatter The formatter to use when getting formats\n * @param inputTable Iris input table associated with this table\n */\n constructor(dh, table) {\n var formatter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Formatter(dh);\n var inputTable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n super(dh, table, formatter, inputTable);\n _defineProperty(this, \"userFrozenColumns\", void 0);\n _defineProperty(this, \"customColumnList\", void 0);\n _defineProperty(this, \"formatColumnList\", void 0);\n _defineProperty(this, \"initialFilters\", []);\n // The initial value for table.isUncoalesced on the source table before any transformations (e.g. filter, select)\n _defineProperty(this, \"wasUncoalesced\", void 0);\n _defineProperty(this, \"getMemoizedKeyColumnSet\", memoize(inputTableKeys => new Set(inputTableKeys !== null && inputTableKeys !== void 0 ? inputTableKeys : EMPTY_ARRAY)));\n _defineProperty(this, \"getMemoizedValueColumnSet\", memoize(inputTableValues => new Set(inputTableValues !== null && inputTableValues !== void 0 ? inputTableValues : EMPTY_ARRAY)));\n _defineProperty(this, \"getMemoizedFrontColumns\", memoize(layoutHintsFrontColumns => layoutHintsFrontColumns !== null && layoutHintsFrontColumns !== void 0 ? layoutHintsFrontColumns : EMPTY_ARRAY));\n _defineProperty(this, \"getMemoizedBackColumns\", memoize(layoutHintsBackColumns => layoutHintsBackColumns !== null && layoutHintsBackColumns !== void 0 ? layoutHintsBackColumns : EMPTY_ARRAY));\n _defineProperty(this, \"getMemoizedFrozenColumns\", memoize((layoutHintsFrozenColumns, userFrozenColumns) => {\n var _ref;\n return (_ref = userFrozenColumns !== null && userFrozenColumns !== void 0 ? userFrozenColumns : layoutHintsFrozenColumns) !== null && _ref !== void 0 ? _ref : EMPTY_ARRAY;\n }));\n _defineProperty(this, \"getCachedFilterableColumnSet\", memoize(columns => new Set(columns.map((_, index) => index))));\n _defineProperty(this, \"getCachedPartitionColumns\", memoize(columns => columns.filter(column => column.isPartitionColumn)));\n this.customColumnList = [];\n this.formatColumnList = [];\n this.initialFilters = table.filter;\n this.wasUncoalesced = this.isPartitionRequired;\n }\n get isExportAvailable() {\n return this.table.freeze != null;\n }\n get isColumnStatisticsAvailable() {\n return this.table.getColumnStatistics != null;\n }\n get isRollupAvailable() {\n return this.table.rollup != null;\n }\n get isSelectDistinctAvailable() {\n return this.table.selectDistinct != null;\n }\n get isOrganizeColumnsAvailable() {\n return true;\n }\n get isCustomColumnsAvailable() {\n return this.table.applyCustomColumns != null;\n }\n get isFormatColumnsAvailable() {\n return this.table.applyCustomColumns != null;\n }\n get keyColumnSet() {\n var _this$inputTable;\n return this.getMemoizedKeyColumnSet((_this$inputTable = this.inputTable) === null || _this$inputTable === void 0 ? void 0 : _this$inputTable.keys);\n }\n get valueColumnSet() {\n var _this$inputTable2;\n return this.getMemoizedValueColumnSet((_this$inputTable2 = this.inputTable) === null || _this$inputTable2 === void 0 ? void 0 : _this$inputTable2.values);\n }\n get frontColumns() {\n var _this$layoutHints$fro, _this$layoutHints;\n return this.getMemoizedFrontColumns((_this$layoutHints$fro = (_this$layoutHints = this.layoutHints) === null || _this$layoutHints === void 0 ? void 0 : _this$layoutHints.frontColumns) !== null && _this$layoutHints$fro !== void 0 ? _this$layoutHints$fro : undefined);\n }\n get backColumns() {\n var _this$layoutHints$bac, _this$layoutHints2;\n return this.getMemoizedBackColumns((_this$layoutHints$bac = (_this$layoutHints2 = this.layoutHints) === null || _this$layoutHints2 === void 0 ? void 0 : _this$layoutHints2.backColumns) !== null && _this$layoutHints$bac !== void 0 ? _this$layoutHints$bac : undefined);\n }\n get frozenColumns() {\n var _this$layoutHints$fro2, _this$layoutHints3;\n return this.getMemoizedFrozenColumns((_this$layoutHints$fro2 = (_this$layoutHints3 = this.layoutHints) === null || _this$layoutHints3 === void 0 ? void 0 : _this$layoutHints3.frozenColumns) !== null && _this$layoutHints$fro2 !== void 0 ? _this$layoutHints$fro2 : undefined, this.userFrozenColumns);\n }\n get layoutHints() {\n return this.table.layoutHints;\n }\n get floatingLeftColumnCount() {\n return this.frozenColumns.length;\n }\n get description() {\n var _this$table$descripti;\n return (_this$table$descripti = this.table.description) !== null && _this$table$descripti !== void 0 ? _this$table$descripti : '';\n }\n get customColumns() {\n return this.customColumnList;\n }\n set customColumns(customColumns) {\n log.debug2('set customColumns', customColumns, this.customColumnList, customColumns === this.customColumnList);\n if (this.customColumnList.length === 0 && customColumns.length === 0) {\n log.debug('Ignore empty initial customColumns');\n this.customColumnList = customColumns;\n return;\n }\n if (this.customColumnList === customColumns) {\n log.debug('Ignore same customColumns');\n return;\n }\n this.closeSubscription();\n this.customColumnList = customColumns;\n this.table.applyCustomColumns([...customColumns, ...this.formatColumns]);\n this.applyViewport();\n }\n get formatColumns() {\n return this.formatColumnList;\n }\n set formatColumns(formatColumns) {\n log.debug2('set formatColumns', formatColumns, this.formatColumnList, formatColumns === this.formatColumnList);\n if (this.formatColumnList.length === 0 && formatColumns.length === 0) {\n log.debug('Ignore empty initial formatColumns');\n this.formatColumnList = formatColumns;\n return;\n }\n if (this.formatColumnList === formatColumns) {\n log.debug('Ignore same formatColumns');\n return;\n }\n this.closeSubscription();\n this.formatColumnList = formatColumns;\n this.table.applyCustomColumns([...this.customColumns, ...formatColumns]);\n this.applyViewport();\n }\n updateFrozenColumns(columns) {\n this.userFrozenColumns = columns;\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.COLUMNS_CHANGED, {\n detail: this.columns\n }));\n }\n get partitionColumns() {\n return this.getCachedPartitionColumns(this.columns);\n }\n partitionKeysTable() {\n var _this = this;\n return _asyncToGenerator(function* () {\n return _this.valuesTable(_this.partitionColumns);\n })();\n }\n partitionMergedTable() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n var t = yield _this2.table.copy();\n t.applyFilter([]);\n return t;\n })();\n }\n partitionBaseTable() {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n return _this3.partitionKeysTable();\n })();\n }\n partitionTable(partitions) {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n log.debug('getting partition table for partitions', partitions);\n var partitionFilters = [];\n for (var i = 0; i < _this4.partitionColumns.length; i += 1) {\n var partition = partitions[i];\n var partitionColumn = _this4.partitionColumns[i];\n var partitionFilter = _this4.tableUtils.makeNullableEqFilter(partitionColumn, partition);\n partitionFilters.push(partitionFilter);\n }\n var t = yield _this4.table.copy();\n t.applyFilter([..._this4.initialFilters, ...partitionFilters]);\n return t;\n })();\n }\n set filter(filter) {\n this.closeSubscription();\n this.table.applyFilter([...this.initialFilters, ...filter]);\n this.applyViewport();\n }\n set totalsConfig(totalsConfig) {\n log.debug('set totalsConfig', totalsConfig);\n if (totalsConfig === this.totals) {\n // Totals already set, or it will be set when the next model actually gets set\n return;\n }\n this.totals = totalsConfig;\n this.formattedStringData = [];\n if (this.totalsTablePromise != null) {\n this.totalsTablePromise.cancel();\n }\n this.setTotalsTable(null);\n if (totalsConfig == null) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n return;\n }\n this.totalsTablePromise = PromiseUtils.makeCancelable(this.table.getTotalsTable(totalsConfig), table => table.close());\n this.totalsTablePromise.then(totalsTable => {\n this.totalsTablePromise = null;\n this.setTotalsTable(totalsTable);\n }).catch(err => {\n if (PromiseUtils.isCanceled(err)) {\n return;\n }\n log.error('Unable to set next totalsTable', err);\n this.totalsTablePromise = null;\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, {\n detail: err\n }));\n });\n }\n get isFilterRequired() {\n return this.table.isUncoalesced;\n }\n get isPartitionRequired() {\n return this.table.isUncoalesced && this.isValuesTableAvailable && this.partitionColumns.length > 0;\n }\n get isPartitionAwareSourceTable() {\n return this.wasUncoalesced;\n }\n isFilterable(columnIndex) {\n return this.getCachedFilterableColumnSet(this.columns).has(columnIndex);\n }\n export() {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n return _this5.table.freeze();\n })();\n }\n columnStatistics(column) {\n return this.table.getColumnStatistics(column);\n }\n isColumnMovable(modelIndex) {\n var columnName = this.columns[modelIndex].name;\n if (this.frontColumns.includes(columnName) || this.backColumns.includes(columnName) || this.frozenColumns.includes(columnName)) {\n return false;\n }\n return !this.isKeyColumn(modelIndex);\n }\n isColumnFrozen(modelIndex) {\n return this.frozenColumns.includes(this.columns[modelIndex].name);\n }\n delete(ranges) {\n var _superprop_getPendingDataMap = () => super.pendingDataMap,\n _superprop_setPendingDataMap = _value => super.pendingDataMap = _value,\n _this6 = this;\n return _asyncToGenerator(function* () {\n var _this6$inputTable;\n if (!_this6.isDeletableRanges(ranges)) {\n throw new Error(\"Undeletable ranges \".concat(ranges));\n }\n assertNotNull(_this6.inputTable);\n var {\n keyColumns\n } = _this6.inputTable;\n if (_this6.keyColumnSet.size === 0) {\n throw new Error('No key columns to allow deletion');\n }\n var pendingAreaRange = _this6.getPendingAreaRange();\n var pendingRanges = ranges.map(range => GridRange.intersection(pendingAreaRange, range)).filter(range => range != null).map(range => {\n assertNotNull(range);\n return GridRange.offset(range, 0, -(_this6.floatingTopRowCount + _this6.table.size));\n });\n if (pendingRanges.length > 0) {\n var newDataMap = new Map(_superprop_getPendingDataMap());\n for (var i = 0; i < pendingRanges.length; i += 1) {\n var pendingRange = pendingRanges[i];\n assertNotNull(pendingRange.startRow);\n assertNotNull(pendingRange.endRow);\n for (var r = pendingRange.startRow; r <= pendingRange.endRow; r += 1) {\n newDataMap.delete(r);\n }\n }\n _superprop_setPendingDataMap(newDataMap);\n _this6.formattedStringData = [];\n _this6.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED));\n _this6.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n var tableAreaRange = _this6.getTableAreaRange();\n var tableRanges = ranges.map(range => GridRange.intersection(tableAreaRange, range)).filter(range => range != null);\n if (tableRanges.length <= 0) {\n return;\n }\n var [data, deleteTable] = yield Promise.all([\n // Need to get the key values of each row\n _this6.snapshot(tableRanges.map(range => {\n assertNotNull(range);\n // Need to map each key column to it's range so we can pass that into the snapshot function\n return keyColumns.map(keyColumn => {\n var keyIndex = _this6.getColumnIndexByName(keyColumn.name);\n if (keyIndex == null) {\n throw new Error(\"Key column \".concat(keyColumn.name, \" not found\"));\n }\n return new GridRange(keyIndex, range.startRow, keyIndex, range.endRow);\n });\n }).flat()), _this6.table.copy()]);\n\n // Now copy the existing table and filter it on the values in the snapshot for the key columns in the input table\n var filters = data.map(row => {\n var columnFilters = [];\n for (var c = 0; c < keyColumns.length; c += 1) {\n var column = keyColumns[c];\n var value = row[c];\n var _filter = _this6.tableUtils.makeNullableEqFilter(column, value);\n columnFilters.push(_filter);\n }\n return columnFilters.reduce((agg, curr) => {\n var _agg$and;\n return (_agg$and = agg === null || agg === void 0 ? void 0 : agg.and(curr)) !== null && _agg$and !== void 0 ? _agg$and : curr;\n });\n });\n var filter = filters.reduce((agg, curr) => {\n var _agg$or;\n return (_agg$or = agg === null || agg === void 0 ? void 0 : agg.or(curr)) !== null && _agg$or !== void 0 ? _agg$or : curr;\n });\n deleteTable.applyFilter([filter]);\n yield (_this6$inputTable = _this6.inputTable) === null || _this6$inputTable === void 0 ? void 0 : _this6$inputTable.deleteTable(deleteTable);\n deleteTable.close();\n })();\n }\n seekRow(startRow, column, valueType, value, insensitive, contains, isBackwards) {\n var _this7 = this;\n return _asyncToGenerator(function* () {\n return _this7.table.seekRow(startRow, column, valueType, value, insensitive, contains, isBackwards);\n })();\n }\n get isSeekRowAvailable() {\n return this.table.seekRow != null;\n }\n}\nexport default IrisGridTableModel;\n//# sourceMappingURL=IrisGridTableModel.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint class-methods-use-this: \"off\" */\n\nimport { Formatter } from '@deephaven/jsapi-utils';\nimport { EMPTY_ARRAY, EMPTY_MAP } from '@deephaven/utils';\nimport IrisGridModel from \"./IrisGridModel.js\";\nclass EmptyIrisGridModel extends IrisGridModel {\n constructor(dh) {\n var formatter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Formatter(dh);\n super(dh);\n _defineProperty(this, \"modelFormatter\", void 0);\n _defineProperty(this, \"modelColumnAlignmentMap\", void 0);\n this.modelFormatter = formatter;\n this.modelColumnAlignmentMap = new Map();\n }\n get rowCount() {\n return 0;\n }\n get columnCount() {\n return 0;\n }\n textForCell(column, row) {\n return '';\n }\n textForColumnHeader(column, depth) {\n return undefined;\n }\n get columns() {\n return EMPTY_ARRAY;\n }\n getColumnIndexByName(name) {\n return undefined;\n }\n get initialMovedColumns() {\n return EMPTY_ARRAY;\n }\n get initialMovedRows() {\n return EMPTY_ARRAY;\n }\n get initialColumnHeaderGroups() {\n return EMPTY_ARRAY;\n }\n get groupedColumns() {\n return EMPTY_ARRAY;\n }\n formatForCell(column, row) {\n return undefined;\n }\n valueForCell(column, row) {\n return undefined;\n }\n get filter() {\n return EMPTY_ARRAY;\n }\n set filter(filter) {\n // No-op\n }\n get partition() {\n return EMPTY_ARRAY;\n }\n set partition(partition) {\n // No-op\n }\n get partitionColumns() {\n return EMPTY_ARRAY;\n }\n get formatter() {\n return this.modelFormatter;\n }\n set formatter(formatter) {\n this.modelFormatter = formatter;\n }\n get columnAlignmentMap() {\n return this.modelColumnAlignmentMap;\n }\n set columnAlignmentMap(columnAlignmentMap) {\n this.modelColumnAlignmentMap = columnAlignmentMap;\n }\n displayString(value, columnType, columnName) {\n return '';\n }\n get sort() {\n return EMPTY_ARRAY;\n }\n set sort(sort) {\n // No-op\n }\n get customColumns() {\n return EMPTY_ARRAY;\n }\n set customColumns(customColumns) {\n // No-op\n }\n get formatColumns() {\n return EMPTY_ARRAY;\n }\n updateFrozenColumns(columns) {\n // Do nothing\n }\n get rollupConfig() {\n return null;\n }\n set rollupConfig(rollupConfig) {\n // No-op\n }\n get totalsConfig() {\n return null;\n }\n set totalsConfig(totalsConfig) {\n // No-op\n }\n export() {\n throw new Error('Method not implemented.');\n }\n columnStatistics(column) {\n throw new Error('Method not implemented.');\n }\n get selectDistinctColumns() {\n return EMPTY_ARRAY;\n }\n set selectDistinctColumns(selectDistinctColumns) {\n // No-op\n }\n get pendingDataMap() {\n return EMPTY_MAP;\n }\n set pendingDataMap(map) {\n // No-op\n }\n get pendingRowCount() {\n return 0;\n }\n set pendingRowCount(count) {\n // No-op\n }\n get pendingDataErrors() {\n return EMPTY_MAP;\n }\n commitPending() {\n return Promise.resolve();\n }\n setViewport(top, bottom, columns) {\n // No-op\n }\n snapshot(ranges) {\n return Promise.resolve([]);\n }\n textSnapshot(ranges, includeHeaders, formatValue) {\n return Promise.resolve('');\n }\n valuesTable(columns) {\n throw new Error('Method not implemented.');\n }\n delete(ranges) {\n return Promise.resolve();\n }\n seekRow(startRow, column, valueType, value, insensitive, contains, isBackwards) {\n return Promise.resolve(0);\n }\n get columnHeaderGroups() {\n return EMPTY_ARRAY;\n }\n set columnHeaderGroups(groups) {\n // No-op\n }\n get columnHeaderGroupMap() {\n return EMPTY_MAP;\n }\n getColumnHeaderParentGroup(modelIndex, depth) {\n return undefined;\n }\n}\nexport default EmptyIrisGridModel;\n//# sourceMappingURL=EmptyIrisGridModel.js.map","function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint class-methods-use-this: \"off\" */\n\nimport { Formatter } from '@deephaven/jsapi-utils';\nimport EmptyIrisGridModel from \"./EmptyIrisGridModel.js\";\nimport MissingPartitionError, { isMissingPartitionError } from \"./MissingPartitionError.js\";\nfunction isPartitionedTableWithBaseTable(partitionedTable) {\n return 'getBaseTable' in partitionedTable && typeof partitionedTable.getBaseTable === 'function';\n}\nclass IrisGridPartitionedTableModel extends EmptyIrisGridModel {\n /**\n * @param dh JSAPI instance\n * @param table Partitioned table to be used in the model\n * @param formatter The formatter to use when getting formats\n */\n constructor(dh, partitionedTable) {\n var formatter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Formatter(dh);\n super(dh, formatter);\n _defineProperty(this, \"partitionedTable\", void 0);\n this.partitionedTable = partitionedTable;\n }\n get isPartitionRequired() {\n return true;\n }\n get isPartitionAwareSourceTable() {\n return false;\n }\n get isReversible() {\n return false;\n }\n displayString(value, columnType, columnName) {\n return '';\n }\n close() {\n this.partitionedTable.close();\n }\n get columns() {\n return this.partitionedTable.columns;\n }\n get partitionColumns() {\n return this.partitionedTable.keyColumns;\n }\n get columnCount() {\n return this.columns.length;\n }\n getColumnIndexByName(columnName) {\n return this.columns.findIndex(column => column.name === columnName);\n }\n textForColumnHeader(column, depth) {\n var _this$columns$column$;\n return (_this$columns$column$ = this.columns[column].name) !== null && _this$columns$column$ !== void 0 ? _this$columns$column$ : '';\n }\n partitionKeysTable() {\n var _this = this;\n return _asyncToGenerator(function* () {\n return _this.partitionedTable.getKeyTable();\n })();\n }\n partitionBaseTable() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n if (isPartitionedTableWithBaseTable(_this2.partitionedTable)) {\n return _this2.partitionedTable.getBaseTable();\n }\n // Fallback to the key table if the base table API is not available\n return _this2.partitionedTable.getKeyTable();\n })();\n }\n partitionMergedTable() {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n return _this3.partitionedTable.getMergedTable();\n })();\n }\n partitionTable(partitions) {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n try {\n var table = yield _this4.partitionedTable.getTable(partitions);\n if (table == null) {\n // TODO: Will be unnecessary with https://github.com/deephaven/deephaven-core/pull/5050\n throw new MissingPartitionError('Partition not found');\n }\n return table;\n } catch (e) {\n if (!isMissingPartitionError(e)) {\n throw new MissingPartitionError('Unable to retrieve partition');\n } else {\n throw e;\n }\n }\n })();\n }\n}\nexport default IrisGridPartitionedTableModel;\n//# sourceMappingURL=IrisGridPartitionedTableModel.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport deepEqual from 'fast-deep-equal';\nimport { Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { EventShimCustomEvent, PromiseUtils } from '@deephaven/utils';\nimport IrisGridTableModel from \"./IrisGridTableModel.js\";\nimport IrisGridPartitionedTableModel from \"./IrisGridPartitionedTableModel.js\";\nimport IrisGridTreeTableModel from \"./IrisGridTreeTableModel.js\";\nimport IrisGridModel from \"./IrisGridModel.js\";\nimport { isIrisGridTableModelTemplate } from \"./IrisGridTableModelTemplate.js\";\nimport { isPartitionedGridModelProvider, isPartitionedGridModel } from \"./PartitionedGridModel.js\";\nvar log = Log.module('IrisGridProxyModel');\nfunction makeModel(dh, table, formatter, inputTable) {\n if (TableUtils.isTreeTable(table)) {\n return new IrisGridTreeTableModel(dh, table, formatter);\n }\n if (TableUtils.isPartitionedTable(table)) {\n return new IrisGridPartitionedTableModel(dh, table, formatter);\n }\n return new IrisGridTableModel(dh, table, formatter, inputTable);\n}\n\n/**\n * Model which proxies calls to other IrisGridModels.\n * This allows for operations that generate new tables, like rollups.\n * The proxy model will call any methods it has implemented and delegate any\n * it does not implement to the underlying model.\n */\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nclass IrisGridProxyModel extends IrisGridModel {\n constructor(dh, table) {\n var formatter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Formatter(dh);\n var inputTable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n super(dh);\n\n // The EventTarget methods must be bound to this instance\n // Otherwise they throw errors because of the Proxy\n /**\n * @param dh JSAPI instance\n * @param table Iris data table to be used in the model\n * @param formatter The formatter to use when getting formats\n * @param inputTable Iris input table associated with this table\n */\n _defineProperty(this, \"model\", void 0);\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"originalModel\", void 0);\n _defineProperty(this, \"modelPromise\", void 0);\n _defineProperty(this, \"rollup\", void 0);\n _defineProperty(this, \"partition\", void 0);\n _defineProperty(this, \"selectDistinct\", void 0);\n _defineProperty(this, \"currentViewport\", void 0);\n _defineProperty(this, \"setViewport\", (top, bottom, columns) => {\n this.currentViewport = {\n top,\n bottom,\n columns\n };\n this.model.setViewport(top, bottom, columns);\n });\n this.addEventListener = this.addEventListener.bind(this);\n this.removeEventListener = this.removeEventListener.bind(this);\n this.dispatchEvent = this.dispatchEvent.bind(this);\n this.handleModelEvent = this.handleModelEvent.bind(this);\n var model = makeModel(dh, table, formatter, inputTable);\n this.dh = dh;\n this.originalModel = model;\n this.model = model;\n this.modelPromise = null;\n this.rollup = null;\n this.partition = null;\n this.selectDistinct = [];\n\n // eslint-disable-next-line no-constructor-return\n return new Proxy(this, {\n // We want to use any properties on the proxy model if defined\n // If not, then proxy to the underlying model\n get(target, prop, receiver) {\n var _Object$getOwnPropert;\n // Does this class have a getter for the prop\n // Getter functions are on the prototype\n var proxyHasGetter = ((_Object$getOwnPropert = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(target), prop)) === null || _Object$getOwnPropert === void 0 ? void 0 : _Object$getOwnPropert.get) != null;\n if (proxyHasGetter) {\n return Reflect.get(target, prop, receiver);\n }\n\n // Does this class implement the property\n var proxyHasProp = Object.prototype.hasOwnProperty.call(target, prop);\n\n // Does the class implement a function for the property\n var proxyHasFn = Object.prototype.hasOwnProperty.call(Object.getPrototypeOf(target), prop);\n var trueTarget = proxyHasProp || proxyHasFn ? target : target.model;\n return Reflect.get(trueTarget, prop);\n },\n set(target, prop, value) {\n var _Object$getOwnPropert2;\n var proxyHasSetter = ((_Object$getOwnPropert2 = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(target), prop)) === null || _Object$getOwnPropert2 === void 0 ? void 0 : _Object$getOwnPropert2.set) != null;\n var proxyHasProp = Object.prototype.hasOwnProperty.call(target, prop);\n if (proxyHasSetter || proxyHasProp) {\n return Reflect.set(target, prop, value, target);\n }\n return Reflect.set(target.model, prop, value, target.model);\n }\n });\n }\n close() {\n this.originalModel.close();\n if (this.model !== this.originalModel) {\n this.model.close();\n }\n if (this.modelPromise != null) {\n this.modelPromise.cancel();\n }\n }\n handleModelEvent(event) {\n log.debug2('handleModelEvent', event);\n var {\n detail,\n type\n } = event;\n this.dispatchEvent(new EventShimCustomEvent(type, {\n detail\n }));\n }\n setModel(model) {\n log.debug('setModel', model);\n var oldModel = this.model;\n var {\n columns: oldColumns\n } = oldModel;\n if (oldModel !== this.originalModel) {\n oldModel.close();\n }\n this.model = model;\n if (this.listenerCount > 0) {\n this.addListeners(model);\n }\n if (oldColumns !== model.columns) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.COLUMNS_CHANGED, {\n detail: model.columns\n }));\n } else if (this.currentViewport != null) {\n // If the columns haven't changed, the current viewport should still valid, and needs to be set on the new model\n var {\n top,\n bottom,\n columns\n } = this.currentViewport;\n model.setViewport(top, bottom, columns);\n }\n if (isIrisGridTableModelTemplate(model)) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.TABLE_CHANGED, {\n detail: model.table\n }));\n }\n }\n setNextModel(modelPromise) {\n log.debug2('setNextModel');\n if (this.modelPromise) {\n this.modelPromise.cancel();\n }\n if (this.listenerCount > 0) {\n this.removeListeners(this.model);\n }\n this.modelPromise = PromiseUtils.makeCancelable(modelPromise, model => model.close());\n this.modelPromise.then(model => {\n this.modelPromise = null;\n this.setModel(model);\n }).catch(err => {\n if (PromiseUtils.isCanceled(err)) {\n log.debug2('setNextModel cancelled');\n return;\n }\n log.error('Unable to set next model', err);\n this.modelPromise = null;\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, {\n detail: err\n }));\n });\n }\n startListening() {\n super.startListening();\n this.addListeners(this.model);\n }\n stopListening() {\n super.stopListening();\n this.removeListeners(this.model);\n }\n addListeners(model) {\n var events = Object.keys(IrisGridModel.EVENT);\n for (var i = 0; i < events.length; i += 1) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n model.addEventListener(events[i], this.handleModelEvent);\n }\n }\n removeListeners(model) {\n var events = Object.keys(IrisGridModel.EVENT);\n for (var i = 0; i < events.length; i += 1) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n model.removeEventListener(events[i], this.handleModelEvent);\n }\n }\n get isCustomColumnsAvailable() {\n return this.model.isCustomColumnsAvailable &&\n // Disable for selectDistinct tables\n !(this.isSelectDistinctAvailable && this.selectDistinctColumns.length > 0);\n }\n get isRollupAvailable() {\n return (this.originalModel.isRollupAvailable || this.rollup != null) && this.selectDistinct.length === 0;\n }\n get isSelectDistinctAvailable() {\n return (this.originalModel.isSelectDistinctAvailable || this.selectDistinct.length > 0) && this.rollup == null;\n }\n get originalColumns() {\n return this.originalModel.columns;\n }\n get partitionColumns() {\n if (!isPartitionedGridModelProvider(this.originalModel)) {\n return [];\n }\n return this.originalModel.partitionColumns;\n }\n get partitionConfig() {\n if (!isPartitionedGridModelProvider(this.originalModel) || !this.originalModel.isPartitionRequired) {\n if (!isPartitionedGridModel(this.originalModel)) {\n // @ts-expect-error If the original model has an undefined partitionConfig return undefined to make the proxy model also return false in isPartitionedGridModel\n return undefined;\n }\n return null;\n }\n return this.partition;\n }\n set partitionConfig(partitionConfig) {\n if (!this.isPartitionRequired) {\n throw new Error('Partitions are not available');\n }\n log.debug('set partitionConfig', partitionConfig);\n this.partition = partitionConfig;\n var modelPromise = Promise.resolve(this.originalModel);\n if (partitionConfig != null && isPartitionedGridModelProvider(this.originalModel)) {\n if (partitionConfig.mode === 'keys') {\n modelPromise = this.originalModel.partitionBaseTable().then(table => makeModel(this.dh, table, this.formatter));\n } else if (partitionConfig.mode === 'merged') {\n modelPromise = this.originalModel.partitionMergedTable().then(table => makeModel(this.dh, table, this.formatter));\n } else {\n modelPromise = this.originalModel.partitionTable(partitionConfig.partitions).then(table => makeModel(this.dh, table, this.formatter));\n }\n }\n this.setNextModel(modelPromise);\n }\n partitionKeysTable() {\n if (!isPartitionedGridModelProvider(this.originalModel)) {\n throw new Error('Partitions are not available');\n }\n return this.originalModel.partitionKeysTable();\n }\n partitionMergedTable() {\n if (!isPartitionedGridModelProvider(this.originalModel)) {\n throw new Error('Partitions are not available');\n }\n return this.originalModel.partitionMergedTable();\n }\n partitionTable(partitions) {\n if (!isPartitionedGridModelProvider(this.originalModel)) {\n throw new Error('Partitions are not available');\n }\n return this.originalModel.partitionTable(partitions);\n }\n get rollupConfig() {\n return this.rollup;\n }\n set rollupConfig(rollupConfig) {\n log.debug('set rollupConfig', rollupConfig);\n if (!this.isRollupAvailable) {\n throw new Error('Rollup Rows are not available');\n }\n\n // Prevent model update when IrisGridModelUpdater is mounted\n // if rollup is already initialized in IrisGridPanel\n if (deepEqual(rollupConfig, this.rollup)) {\n return;\n }\n this.rollup = rollupConfig;\n var modelPromise = Promise.resolve(this.originalModel);\n if (isIrisGridTableModelTemplate(this.originalModel) && rollupConfig != null) {\n modelPromise = this.originalModel.table.rollup(rollupConfig).then(table => makeModel(this.dh, table, this.formatter));\n }\n this.setNextModel(modelPromise);\n }\n get selectDistinctColumns() {\n return this.selectDistinct;\n }\n set selectDistinctColumns(columnNames) {\n log.debug('set selectDistinctColumns', columnNames);\n if (!this.isSelectDistinctAvailable) {\n throw new Error('Select distinct is not available');\n }\n if (columnNames === this.selectDistinctColumns || columnNames.length === 0 && this.selectDistinctColumns.length === 0) {\n log.debug('Ignore same selectDistinctColumns', columnNames);\n return;\n }\n this.selectDistinct = columnNames;\n var selectDistinctColumns = columnNames.map(name => this.originalColumns.find(column => column.name === name)).filter(column => column != null);\n var modelPromise = Promise.resolve(this.originalModel);\n if (isIrisGridTableModelTemplate(this.originalModel) && selectDistinctColumns.length > 0) {\n modelPromise = this.originalModel.table.selectDistinct(selectDistinctColumns).then(table => makeModel(this.dh, table, this.formatter));\n }\n this.setNextModel(modelPromise);\n }\n get isFilterRequired() {\n return this.originalModel.isFilterRequired;\n }\n get isPartitionRequired() {\n // @ts-expect-error If the original model is not a partitioned model return undefined to make the proxy model also return false in isPartitionedGridModelProvider\n return isPartitionedGridModelProvider(this.originalModel) ? this.originalModel.isPartitionRequired : undefined;\n }\n get isPartitionAwareSourceTable() {\n return isPartitionedGridModelProvider(this.originalModel) && this.originalModel.isPartitionAwareSourceTable;\n }\n get formatter() {\n return this.originalModel.formatter;\n }\n set formatter(formatter) {\n this.originalModel.formatter = formatter;\n }\n get columnAlignmentMap() {\n return this.originalModel.columnAlignmentMap;\n }\n set columnAlignmentMap(columnAlignmentMap) {\n this.originalModel.columnAlignmentMap = columnAlignmentMap;\n }\n}\nexport default IrisGridProxyModel;\n//# sourceMappingURL=IrisGridProxyModel.js.map","function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nimport { Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport IrisGridProxyModel from \"./IrisGridProxyModel.js\";\n/**\n * Factory to create an IrisGridDataModel based on a table or tree table, whatever is passed in.\n */\nclass IrisGridModelFactory {\n /**\n * @param table The Table or TreeTable object to create the model with\n * @param formatter The formatter to use\n * @returns An IrisGridModel that uses the table provided\n */\n static makeModel(dh, table) {\n var _arguments = arguments;\n return _asyncToGenerator(function* () {\n var formatter = _arguments.length > 2 && _arguments[2] !== undefined ? _arguments[2] : new Formatter(dh);\n var inputTable = null;\n if (!TableUtils.isTreeTable(table) && !TableUtils.isPartitionedTable(table) && table.hasInputTable) {\n inputTable = yield table.inputTable();\n }\n return new IrisGridProxyModel(dh, table, formatter, inputTable);\n })();\n }\n}\nexport default IrisGridModelFactory;\n//# sourceMappingURL=IrisGridModelFactory.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint-disable import/prefer-default-export */\n\nimport memoizeOne from 'memoize-one';\nimport IrisGridUtils from \"./IrisGridUtils.js\";\n/**\n * Checks if 2 grid states are equivalent.\n * Checks values and does not require referential equality of the entire state, just the values we care about.\n * @param gridStateA First grid state\n * @param gridStateB Second grid state\n * @returns True if the states are equivalent\n */\nfunction areGridStatesEqual(gridStateA, gridStateB) {\n var compareKeys = ['isStuckToBottom', 'isStuckToRight', 'movedColumns', 'movedRows'];\n return gridStateA === gridStateB || compareKeys.every(key => gridStateA[key] === gridStateB[key]);\n}\n\n/**\n * Checks if 2 iris grid states are equivalent.\n * Checks values and does not require referential equality of the entire state, just the values we care about.\n * @param irisGridStateA First iris grid state\n * @param irisGridStateB Second iris grid state\n * @returns True if the states are equivalent\n */\nfunction areIrisGridStatesEqual(irisGridStateA, irisGridStateB) {\n // Top level keys we want to check for referential equality\n var compareStateKeys = ['advancedFilters', 'aggregationSettings', 'customColumnFormatMap', 'columnAlignmentMap', 'isFilterBarShown', 'quickFilters', 'customColumns', 'reverse', 'rollupConfig', 'showSearchBar', 'searchValue', 'selectDistinctColumns', 'selectedSearchColumns', 'sorts', 'invertSearchColumns', 'pendingDataMap', 'frozenColumns', 'conditionalFormats', 'columnHeaderGroups', 'partitionConfig'];\n return irisGridStateA === irisGridStateB || irisGridStateA.metrics != null && irisGridStateB.metrics != null && irisGridStateA.metrics.userColumnWidths === irisGridStateB.metrics.userColumnWidths && irisGridStateA.metrics.userRowHeights === irisGridStateB.metrics.userRowHeights && compareStateKeys.every(key => irisGridStateA[key] === irisGridStateB[key]);\n}\n\n/**\n * Creates a dehydrator function for grid state that is memoized on the last call.\n * Only tracks 1 state at a time. If the model and input states are equal, returns the same dehydrated state object reference.\n * @returns A dehydrator function memoized on the last call\n */\nfunction makeMemoizedGridStateDehydrator() {\n return memoizeOne((model, gridState) => IrisGridUtils.dehydrateGridState(model, gridState), (_ref, _ref2) => {\n var [modelA, gridStateA] = _ref;\n var [modelB, gridStateB] = _ref2;\n return modelA === modelB && areGridStatesEqual(gridStateA, gridStateB);\n });\n}\n\n/**\n * Creates a dehydrator function for iris grid state that is memoized on the last call.\n * Only tracks 1 state at a time. If the model and input states are equal, returns the same dehydrated state object reference.\n * @returns A dehydrator function memoized on the last call\n */\nfunction makeMemoizedIrisGridStateDehydrator() {\n return memoizeOne((model, irisGridState) => {\n var irisGridUtils = new IrisGridUtils(model.dh);\n return irisGridUtils.dehydrateIrisGridState(model, irisGridState);\n }, (_ref3, _ref4) => {\n var [modelA, irisGridStateA] = _ref3;\n var [modelB, irisGridStateB] = _ref4;\n return modelA === modelB && areIrisGridStatesEqual(irisGridStateA, irisGridStateB);\n });\n}\n\n/**\n * Creates a dehydrator function for grid and iris grid state that is memoized on the last call.\n * Only tracks 1 state at a time. If the model and input states are equal, returns the same dehydrated state object reference.\n * Combines the dehydrated grid and iris grid states into a single object.\n * @returns A dehydrator function memoized on the last call\n */\nfunction makeMemoizedCombinedGridStateDehydrator() {\n return memoizeOne((model, irisGridState, gridState) => {\n var irisGridUtils = new IrisGridUtils(model.dh);\n return _objectSpread(_objectSpread({}, irisGridUtils.dehydrateIrisGridState(model, irisGridState)), IrisGridUtils.dehydrateGridState(model, gridState));\n }, (_ref5, _ref6) => {\n var [modelA, irisGridStateA, gridStateA] = _ref5;\n var [modelB, irisGridStateB, gridStateB] = _ref6;\n return modelA === modelB && areIrisGridStatesEqual(irisGridStateA, irisGridStateB) && areGridStatesEqual(gridStateA, gridStateB);\n });\n}\nexport var IrisGridCacheUtils = {\n makeMemoizedGridStateDehydrator,\n makeMemoizedIrisGridStateDehydrator,\n makeMemoizedCombinedGridStateDehydrator\n};\n//# sourceMappingURL=IrisGridCacheUtils.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nclass ChartEvent {}\n/** @deprecated Use PanelEvent.OPEN instead */\n_defineProperty(ChartEvent, \"OPEN\", 'ChartEvent.OPEN');\n/** @deprecated Use PanelEvent.CLOSE instead */\n_defineProperty(ChartEvent, \"CLOSE\", 'ChartEvent.CLOSE');\n_defineProperty(ChartEvent, \"COLUMN_SELECTED\", 'ChartEvent.COLUMN_SELECTED');\nexport default ChartEvent;\n//# sourceMappingURL=ChartEvent.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nexport class IrisGridEvent {}\n/** @deprecated Use PanelEvent.OPEN instead */\n_defineProperty(IrisGridEvent, \"OPEN_GRID\", 'IrisGridEvent.OPEN_GRID');\n/** @deprecated Use PanelEvent.CLOSE instead */\n_defineProperty(IrisGridEvent, \"CLOSE_GRID\", 'IrisGridEvent.CLOSE_GRID');\n_defineProperty(IrisGridEvent, \"DATA_SELECTED\", 'IrisGridEvent.DATA_SELECTED');\n_defineProperty(IrisGridEvent, \"COLUMN_SELECTED\", 'IrisGridEvent.COLUMN_SELECTED');\n_defineProperty(IrisGridEvent, \"STATE_CHANGED\", 'IrisGridEvent.STATE_CHANGED');\n_defineProperty(IrisGridEvent, \"CREATE_CHART\", 'IrisGridevent.CREATE_CHART');\nexport default IrisGridEvent;\n//# sourceMappingURL=IrisGridEvent.js.map","export default Object.freeze({\n OPEN: 'MarkdownEvent.OPEN'\n});\n//# sourceMappingURL=MarkdownEvent.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nclass PandasEvent {}\n/** @deprecated Use PanelEvent.OPEN */\n_defineProperty(PandasEvent, \"OPEN\", 'PandasEvent.OPEN');\n/** @deprecated Use PanelEvent.CLOSE */\n_defineProperty(PandasEvent, \"CLOSE\", 'PandasEvent.CLOSE');\nexport default PandasEvent;\n//# sourceMappingURL=PandasEvent.js.map","import { TabEvent as DashboardTabEvent } from '@deephaven/dashboard';\nexport { default as ChartEvent } from \"./ChartEvent.js\";\nexport { default as ConsoleEvent } from \"./ConsoleEvent.js\";\nexport { default as InputFilterEvent } from \"./InputFilterEvent.js\";\nexport { default as IrisGridEvent } from \"./IrisGridEvent.js\";\nexport { default as MarkdownEvent } from \"./MarkdownEvent.js\";\nexport { default as NotebookEvent } from \"./NotebookEvent.js\";\nexport { default as PandasEvent } from \"./PandasEvent.js\";\n/**\n * @deprecated Use TabEvent from @deephaven/dashboard\n */\nexport var TabEvent = DashboardTabEvent;\n//# sourceMappingURL=index.js.map","import React from 'react';\nimport { CopyButton, createXComponent } from '@deephaven/components';\nimport \"./WidgetPanelTooltip.css\";\nimport { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from \"react/jsx-runtime\";\nfunction WidgetPanelTooltip(props) {\n var {\n children,\n descriptor\n } = props;\n var {\n name,\n type,\n description,\n displayName\n } = descriptor;\n\n // Convert PascalCase to Title Case\n // ex. PartitionedTable -> Partitioned Table\n var formattedType = type.replace(/([a-z])([A-Z])/g, '$1 $2');\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"tab-tooltip-grid-container\",\n children: [/*#__PURE__*/_jsxs(\"span\", {\n className: \"tab-tooltip-title\",\n children: [formattedType, \" Name\"]\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"tab-tooltip-name-wrapper\",\n children: [/*#__PURE__*/_jsx(\"span\", {\n className: \"tab-tooltip-name\",\n children: name\n }), /*#__PURE__*/_jsx(CopyButton, {\n className: \"tab-tooltip-copy\",\n tooltip: \"Copy name\",\n copy: name\n })]\n }), name !== displayName && Boolean(displayName) && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(\"span\", {\n className: \"tab-tooltip-title\",\n children: \"Display Name\"\n }), /*#__PURE__*/_jsx(\"span\", {\n className: \"tab-tooltip-name\",\n children: displayName\n })]\n }), Boolean(description) && /*#__PURE__*/_jsx(\"div\", {\n className: \"tab-tooltip-description\",\n children: description\n }), children]\n });\n}\nvar XWidgetPanelTooltip = createXComponent(WidgetPanelTooltip);\nexport default XWidgetPanelTooltip;\n//# sourceMappingURL=WidgetPanelTooltip.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport { ContextActions, createXComponent } from '@deephaven/components';\nimport { copyToClipboard, EMPTY_ARRAY } from '@deephaven/utils';\nimport Panel from \"./CorePanel.js\";\nimport WidgetPanelTooltip from \"./WidgetPanelTooltip.js\";\nimport \"./WidgetPanel.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Widget panel component that has a loading spinner and displays an error message when set\n */\nclass WidgetPanel extends PureComponent {\n constructor(props) {\n var _this;\n super(props);\n _this = this;\n _defineProperty(this, \"getCachedRenderTabTooltip\", memoize((showTabTooltip, descriptor) => showTabTooltip ? () => /*#__PURE__*/_jsx(WidgetPanelTooltip, {\n descriptor: descriptor\n }) : undefined));\n _defineProperty(this, \"getCachedActions\", memoize(function (descriptor) {\n var _descriptor$displayTy;\n var propsAdditionalActions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : EMPTY_ARRAY;\n return [...propsAdditionalActions, {\n title: \"Copy \".concat((_descriptor$displayTy = descriptor.displayType) !== null && _descriptor$displayTy !== void 0 ? _descriptor$displayTy : descriptor.type, \" Name\"),\n group: ContextActions.groups.medium,\n order: 20,\n action: _this.handleCopyName\n }];\n }));\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n this.handleCopyName = this.handleCopyName.bind(this);\n this.state = {\n isClientDisconnected: false,\n isPanelDisconnected: false,\n isWidgetDisconnected: false,\n isWaitingForReconnect: false,\n isPanelInactive: false\n };\n }\n handleCopyName() {\n var {\n descriptor\n } = this.props;\n copyToClipboard(descriptor.name);\n }\n getErrorMessage() {\n var {\n descriptor,\n errorMessage\n } = this.props;\n var {\n isClientDisconnected,\n isPanelDisconnected,\n isWidgetDisconnected,\n isWaitingForReconnect\n } = this.state;\n if (errorMessage != null && errorMessage !== '') {\n return \"\".concat(errorMessage);\n }\n if (isClientDisconnected && isPanelDisconnected && isWaitingForReconnect) {\n return 'Disconnected from server.\\nCheck your internet connection.';\n }\n if (isClientDisconnected && isPanelDisconnected) {\n return 'Disconnected from server.';\n }\n if (isPanelDisconnected) {\n var {\n name,\n type\n } = descriptor;\n return \"Variable \\\"\".concat(name, \"\\\" not set.\\n\").concat(type, \" does not exist yet.\");\n }\n if (isWidgetDisconnected) {\n return \"\".concat(descriptor.name, \" is unavailable.\");\n }\n return undefined;\n }\n handleSessionClosed(session) {\n var {\n onSessionClose\n } = this.props;\n // The session has closed and we won't be able to reconnect, as this widget isn't persisted\n this.setState({\n isPanelDisconnected: true,\n isWaitingForReconnect: false\n });\n onSessionClose === null || onSessionClose === void 0 || onSessionClose(session);\n }\n render() {\n var {\n children,\n className,\n componentPanel,\n descriptor,\n isLoaded,\n isLoading,\n glContainer,\n glEventHub,\n isDisconnected,\n isClonable,\n isRenamable,\n showTabTooltip = false,\n renderTabTooltip,\n onClearAllFilters,\n onHide,\n onFocus,\n onBlur,\n onResize,\n onSessionOpen,\n onShow,\n onTabBlur,\n onTabFocus,\n onTabClicked,\n additionalActions: propsAdditionalActions\n } = this.props;\n var {\n isPanelDisconnected,\n isWidgetDisconnected,\n isPanelInactive\n } = this.state;\n var errorMessage = this.getErrorMessage();\n var doRenderTabTooltip = renderTabTooltip !== null && renderTabTooltip !== void 0 ? renderTabTooltip : this.getCachedRenderTabTooltip(showTabTooltip, descriptor);\n var additionalActions = this.getCachedActions(descriptor, propsAdditionalActions);\n return /*#__PURE__*/_jsxs(Panel, {\n className: classNames(className, {\n disconnected: isPanelDisconnected || isWidgetDisconnected || isDisconnected,\n inactive: isPanelInactive\n }),\n componentPanel: componentPanel,\n glContainer: glContainer,\n glEventHub: glEventHub,\n onClearAllFilters: onClearAllFilters,\n onHide: onHide,\n onFocus: onFocus,\n onBlur: onBlur,\n onResize: onResize,\n onShow: onShow,\n onSessionClose: this.handleSessionClosed,\n onSessionOpen: onSessionOpen,\n onTabBlur: onTabBlur,\n onTabFocus: onTabFocus,\n onTabClicked: onTabClicked,\n renderTabTooltip: doRenderTabTooltip,\n errorMessage: errorMessage,\n isLoaded: isLoaded,\n isLoading: isLoading,\n isClonable: isClonable,\n isRenamable: isRenamable,\n additionalActions: additionalActions,\n children: [children, isPanelInactive && /*#__PURE__*/_jsx(\"div\", {\n className: \"fill-parent-absolute\"\n })]\n });\n }\n}\n_defineProperty(WidgetPanel, \"defaultProps\", {\n className: '',\n isClonable: true,\n isDisconnected: false,\n isLoading: false,\n isLoaded: true,\n isRenamable: true,\n showTabTooltip: true\n});\nvar XWidgetPanel = createXComponent(WidgetPanel);\nexport default XWidgetPanel;\n//# sourceMappingURL=WidgetPanel.js.map","export default Object.freeze({\n DEFAULT: 'DEFAULT',\n LINKER: 'LINKER'\n});\n//# sourceMappingURL=ToolType.js.map","import deepEqual from 'fast-deep-equal';\nimport { updateDashboardData } from '@deephaven/dashboard';\nimport { getLinksForDashboard } from \"./selectors.js\";\n/**\n * Set the connection for the dashboard specified\n * @param id The ID of the dashboard to set the connection for\n * @param connection The connection object to set for the dashboard\n */\nexport var setDashboardConnection = (id, connection) => dispatch => dispatch(updateDashboardData(id, {\n connection\n}));\n\n/**\n * Set the session wrapper for the dashboard specified\n * @param id The ID of the dashboard to set the session for\n * @param sessionWrapper The session wrapper object to set for the dashboard\n */\nexport var setDashboardSessionWrapper = (id, sessionWrapper) => dispatch => dispatch(updateDashboardData(id, {\n sessionWrapper\n}));\n\n/**\n * Set the links for a given dashboard\n * @param id The ID of the dashboard to set the links for\n * @param links The links to set\n */\nexport var setDashboardLinks = (id, links) => dispatch => dispatch(updateDashboardData(id, {\n links\n}));\n\n/**\n * Add links to the existing links in a dashboard. Filters out any duplicate links.\n * @param id The ID of the dashboard to add links to\n * @param newLinks The new links to add\n */\nexport var addDashboardLinks = (id, newLinks) => (dispatch, getState) => {\n var links = getLinksForDashboard(getState(), id);\n var filtered = newLinks.filter(newLink => links.findIndex(link => deepEqual(link.start, newLink.start) && deepEqual(link.end, newLink.end)) < 0);\n return dispatch(setDashboardLinks(id, links.concat(filtered)));\n};\n\n/**\n * Delete links from a dashboard\n * @param id The ID of the dashboard to delete links from\n * @param linkIds The link IDs to delete\n */\nexport var deleteDashboardLinks = (id, linkIds) => (dispatch, getState) => {\n var links = getLinksForDashboard(getState(), id);\n var newLinks = links.filter(link => !linkIds.includes(link.id));\n return dispatch(setDashboardLinks(id, newLinks));\n};\n\n/**\n * Set the isolated linker panel ID for a dashboard\n * @param id The ID of the dashboard to set the isolated linker panel ID in\n * @param isolatedLinkerPanelId The isolated panel ID, or undefined to unset\n */\nexport var setDashboardIsolatedLinkerPanelId = (id, isolatedLinkerPanelId) => dispatch => dispatch(updateDashboardData(id, {\n isolatedLinkerPanelId\n}));\n\n/**\n * Set the column selection validator for a dashboard\n * @param id The ID of the dashboard to set the column selection validator on\n * @param columnSelectionValidator The column selection validator to set\n */\nexport var setDashboardColumnSelectionValidator = (id, columnSelectionValidator) => dispatch => dispatch(updateDashboardData(id, {\n columnSelectionValidator\n}));\n\n/**\n * Set the console settings for a dashboard\n * @param id The ID of the dashboard to set the console settings on\n * @param consoleSettings The console settings to set for the dashboard\n */\nexport var setDashboardConsoleSettings = (id, consoleSettings) => dispatch => dispatch(updateDashboardData(id, {\n consoleSettings\n}));\n\n/**\n * Set the filter sets for a specific dashboard\n * @param id The ID of the dashboard to set the filter sets for\n * @param filterSets The filter sets to set\n */\nexport var setDashboardFilterSets = (id, filterSets) => dispatch => dispatch(updateDashboardData(id, {\n filterSets\n}));\n//# sourceMappingURL=actions.js.map","import React, { useCallback, useMemo } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button } from '@deephaven/components';\nimport { vsPass, vsWarning } from '@deephaven/icons';\nimport { TextUtils } from '@deephaven/utils';\nimport \"./ChartFilterOverlay.css\";\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nfunction ChartFilterOverlay(_ref) {\n var {\n columnMap,\n inputFilterMap,\n linkedColumnMap,\n onAdd,\n onOpenLinker,\n waitingFilterMap,\n waitingInputMap\n } = _ref;\n var inputMessage = useMemo(() => {\n var waitingColumns = Array.from(waitingInputMap.keys());\n var needsInputFilterValue = waitingColumns.find(columnName => inputFilterMap.get(columnName) != null);\n var needsLinkValue = waitingColumns.find(columnName => linkedColumnMap.get(columnName) != null);\n var columnsText = TextUtils.join(waitingColumns.map(item => \"\\\"\".concat(item, \"\\\"\")));\n if (needsInputFilterValue != null && needsInputFilterValue && needsLinkValue != null && needsLinkValue) {\n return \"Use a filter control or linked table to set a value for \".concat(columnsText);\n }\n if (needsInputFilterValue != null && needsInputFilterValue) {\n return \"Set a filter control value for \".concat(columnsText);\n }\n return \"Double click a row in a linked table to set a value for \".concat(columnsText);\n }, [inputFilterMap, linkedColumnMap, waitingInputMap]);\n var columns = useMemo(() => Array.from(columnMap.values()), [columnMap]);\n var handleAddClick = useCallback(event => {\n event.stopPropagation();\n event.preventDefault();\n onAdd(Array.from(waitingFilterMap.values()));\n }, [onAdd, waitingFilterMap]);\n var handleOpenLinker = useCallback(event => {\n event.stopPropagation();\n event.preventDefault();\n onOpenLinker();\n }, [onOpenLinker]);\n var isWaitingFilters = waitingFilterMap.size > 0;\n var isWaitingInput = !isWaitingFilters && waitingInputMap.size > 0;\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"chart-panel-overlay chart-filter-overlay\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: classNames('chart-panel-overlay-content chart-filter-overlay-content', {\n 'chart-filter-waiting-filter': isWaitingFilters\n }, {\n 'chart-filter-waiting-input': isWaitingInput\n }),\n children: [isWaitingFilters && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"info-message\",\n children: \"This plot requires a filter control to be added to the layout or a table link to be created on the following columns:\"\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"waiting-filter-list\",\n children: columns.map(column => {\n var isColumnWaiting = waitingFilterMap.has(column.name);\n var icon = isColumnWaiting ? vsWarning : vsPass;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: classNames('waiting-filter-item', {\n 'is-invalid': isColumnWaiting\n }),\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: icon\n }), column.name]\n }, column.name);\n })\n }), /*#__PURE__*/_jsxs(\"div\", {\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"primary\",\n onClick: handleAddClick,\n children: \"Add Input Filters\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"primary\",\n onClick: handleOpenLinker,\n children: \"Open Linker Tool\"\n })]\n })]\n }), isWaitingInput && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"info-message\",\n children: \"Waiting for User Input\"\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"\",\n children: inputMessage\n })]\n })]\n })\n });\n}\nexport default ChartFilterOverlay;\n//# sourceMappingURL=ChartFilterOverlay.js.map","import React from 'react';\nimport classNames from 'classnames';\nimport { SocketedButton } from '@deephaven/components';\nimport \"./ChartColumnSelectorOverlay.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction ChartColumnSelectorOverlay(_ref) {\n var {\n columns,\n onColumnSelected,\n onMouseEnter: _onMouseEnter,\n onMouseLeave\n } = _ref;\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"chart-panel-overlay chart-column-selector-overlay\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: classNames('chart-panel-overlay-content'),\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"info-message\",\n children: \"This plot requires a filter control to be added to the layout or a table link to be created on the following columns:\"\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"waiting-column-select-list\",\n children: columns.map(column => /*#__PURE__*/_jsx(SocketedButton, {\n className: classNames('btn-chart-column-selector', ChartColumnSelectorOverlay.makeButtonClassName(column.name)),\n onClick: () => onColumnSelected(column.name),\n onMouseEnter: () => {\n _onMouseEnter === null || _onMouseEnter === void 0 || _onMouseEnter(column);\n },\n onMouseLeave: onMouseLeave,\n disabled: !column.isValid,\n isLinked: column.isActive,\n children: column.name\n }, column.name))\n })]\n })\n });\n}\nChartColumnSelectorOverlay.makeButtonClassName = columnName => \"btn-chart-column-selector-\".concat(columnName);\nexport default ChartColumnSelectorOverlay;\n//# sourceMappingURL=ChartColumnSelectorOverlay.js.map","export function isChartPanelTableMetadata(metadata) {\n return metadata.settings !== undefined;\n}\nexport function isChartPanelFigureMetadata(metadata) {\n return metadata.figure !== undefined;\n}\nexport function isGLChartPanelState(panelState) {\n if (panelState == null) return false;\n var {\n settings,\n tableSettings\n } = panelState;\n return typeof settings === 'object' && typeof tableSettings === 'object';\n}\nexport function isChartPanelDehydratedProps(props) {\n return props != null && isGLChartPanelState(props.panelState);\n}\n//# sourceMappingURL=ChartPanelUtils.js.map","import { makeEventFunctions } from '@deephaven/golden-layout';\nimport { InputFilterEvent } from \"./events/index.js\";\nvar filterColumnsChangedFns = makeEventFunctions(InputFilterEvent.COLUMNS_CHANGED);\n\n/**\n * Listen for filter column changes\n * @param eventEmitter The event emitter to emit the event on\n * @param sourceId The source ID for the columns\n * @param columns The columns available for filtering or null to remove the filter for the sourceId\n */\nexport var listenForFilterColumnsChanged = filterColumnsChangedFns.listen;\n\n/**\n * Emit a filter columns changed event\n * @param eventEmitter The event emitter to emit the event on\n * @param sourceId The source ID for the columns\n * @param columns The columns available for filtering or null to remove the filter for the sourceId\n */\nexport var emitFilterColumnsChanged = filterColumnsChangedFns.emit;\n\n/**\n * Use a filter columns change event listener\n * @param eventEmitter The event emitter to emit the event on\n * @param sourceId The source ID for the columns\n * @param columns The columns available for filtering or null to remove the filter for the sourceId\n */\nexport var useFilterColumnsChangedListener = filterColumnsChangedFns.useListener;\nvar filterTableChangedFns = makeEventFunctions(InputFilterEvent.TABLE_CHANGED);\n\n/**\n * Listen for filter table changes\n * @param eventEmitter The event emitter to emit the event on\n * @param sourceId The source ID for the table\n * @param table The table available for filtering or null to remove the table for the sourceId\n */\nexport var listenForFilterTableChanged = filterTableChangedFns.listen;\n\n/**\n * Emit a filter table changed event\n * @param eventEmitter The event emitter to emit the event on\n * @param sourceId The source ID for the table\n * @param table The table available for filtering or null to remove the table for the sourceId\n */\nexport var emitFilterTableChanged = filterTableChangedFns.emit;\n\n/**\n * Use a filter table change event listener\n * @param eventEmitter The event emitter to emit the event on\n * @param sourceId The source ID for the table\n * @param table The table available for filtering or null to remove the table for the sourceId\n */\nexport var useFilterTableChangedListener = filterTableChangedFns.useListener;\nvar filterChangedFns = makeEventFunctions(InputFilterEvent.FILTERS_CHANGED);\n\n/**\n * Listen for filter changes\n * @param eventEmitter The event emitter to emit the event on\n * @param sourceId The source ID for the filter\n * @param filterChange The filter change event or null to remove the filter for the sourceId\n */\nexport var listenForFilterChanged = filterChangedFns.listen;\n\n/**\n * Emit a filter change event\n * @param eventEmitter The event emitter to emit the event on\n * @param sourceId The source ID for the filter\n * @param filterChange The filter change event or null to remove the filter for the sourceId\n */\nexport var emitFilterChanged = filterChangedFns.emit;\n\n/**\n * Use a filter change event listener\n * @param eventEmitter The event emitter to emit the event on\n * @param sourceId The source ID for the filter\n * @param filterChange The filter change event or null to remove the filter for the sourceId\n */\nexport var useFilterChangedListener = filterChangedFns.useListener; // A panel or widget can have columns for filters\n//# sourceMappingURL=FilterEvents.js.map","import { makeEventFunctions } from '@deephaven/golden-layout';\nexport var LinkerEvent = Object.freeze({\n LINK_POINT_SELECTED: 'LinkerEvent.LINK_POINT_SELECTED',\n SOURCE_DATA_SELECTED: 'LinkerEvent.SOURCE_DATA_SELECTED',\n REGISTER_TARGET: 'LinkerEvent.REGISTER_TARGET'\n});\nvar linkPointSelectedFns = makeEventFunctions(LinkerEvent.LINK_POINT_SELECTED);\nexport var listenForLinkPointSelected = linkPointSelectedFns.listen;\n\n/**\n * Emit a linker point selected event\n * @param sourceId The source ID for the link point. Typically panel ID or widget ID\n * @param column The column selected as the link point\n * @param options Optional parameters for the link point selection\n * @param options.isAlwaysEnd Whether this link point is always the end of a link\n * @param options.isIsolatedLinker Whether this link point is selected in an isolated linker context\n */\nexport var emitLinkPointSelected = linkPointSelectedFns.emit;\nexport var useLinkPointSelectedListener = linkPointSelectedFns.useListener;\nvar linkSourceDataSelectedFns = makeEventFunctions(LinkerEvent.SOURCE_DATA_SELECTED);\nexport var listenForLinkSourceDataSelected = linkSourceDataSelectedFns.listen;\nexport var emitLinkSourceDataSelected = linkSourceDataSelectedFns.emit;\nexport var useLinkSourceDataSelectedListener = linkSourceDataSelectedFns.useListener;\nvar registerLinkTargetFns = makeEventFunctions(LinkerEvent.REGISTER_TARGET);\nexport var listenForRegisterLinkTarget = registerLinkTargetFns.listen;\nexport var emitRegisterLinkTarget = registerLinkTargetFns.emit;\nexport var useRegisterLinkTargetListener = registerLinkTargetFns.useListener;\n//# sourceMappingURL=LinkerEvent.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport debounce from 'lodash.debounce';\nimport { Chart, ChartModelFactory, isFigureChartModel } from '@deephaven/chart';\nimport { getOpenedPanelMapForDashboard, LayoutUtils } from '@deephaven/dashboard';\nimport { IrisGridUtils } from '@deephaven/iris-grid';\nimport { FadeTransition } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { getActiveTool, getSettings, setActiveTool as setActiveToolAction } from '@deephaven/redux';\nimport { assertNotNull, Pending, PromiseUtils, TextUtils } from '@deephaven/utils';\nimport WidgetPanel from \"./WidgetPanel.js\";\nimport ToolType from \"../linker/ToolType.js\";\nimport { InputFilterEvent } from \"../events/index.js\";\nimport { getColumnSelectionValidatorForDashboard, getInputFiltersForDashboard, getIsolatedLinkerPanelIdForDashboard, getLinksForDashboard, getTableMapForDashboard, setDashboardIsolatedLinkerPanelId as setDashboardIsolatedLinkerPanelIdAction } from \"../redux/index.js\";\nimport ChartFilterOverlay from \"./ChartFilterOverlay.js\";\nimport ChartColumnSelectorOverlay from \"./ChartColumnSelectorOverlay.js\";\nimport \"./ChartPanel.css\";\nimport { isChartPanelFigureMetadata, isChartPanelTableMetadata } from \"./ChartPanelUtils.js\";\nimport { emitFilterColumnsChanged } from \"../FilterEvents.js\";\nimport { emitLinkPointSelected } from \"../linker/LinkerEvent.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('ChartPanel');\nvar UPDATE_MODEL_DEBOUNCE = 150;\n\n/** @deprecated Use `PanelMetadata` instead, providing a `name` instead of `figure` */\n\nfunction hasInputFilter(panel) {\n return panel.inputFilters != null;\n}\nfunction hasPanelState(panel) {\n return panel.panelState != null;\n}\nexport class ChartPanel extends Component {\n constructor(props) {\n super(props);\n _defineProperty(this, \"panelContainer\", void 0);\n _defineProperty(this, \"pending\", void 0);\n _defineProperty(this, \"getWaitingInputMap\", memoize((isFilterRequired, columnMap, filterMap) => {\n if (!isFilterRequired) {\n return new Map();\n }\n var waitingInputMap = new Map(columnMap);\n filterMap.forEach((filter, name) => {\n waitingInputMap.delete(name);\n });\n return waitingInputMap;\n }));\n _defineProperty(this, \"getWaitingFilterMap\", memoize((isFilterRequired, columnMap, filterMap, linkedColumnMap, inputFilterMap) => {\n if (!isFilterRequired) {\n return new Map();\n }\n var waitingFilterMap = new Map(columnMap);\n filterMap.forEach((filter, name) => {\n waitingFilterMap.delete(name);\n });\n inputFilterMap.forEach((value, name) => {\n waitingFilterMap.delete(name);\n });\n linkedColumnMap.forEach((column, name) => {\n waitingFilterMap.delete(name);\n });\n return waitingFilterMap;\n }));\n _defineProperty(this, \"getInputFilterColumnMap\", memoize((columnMap, inputFilters) => {\n var inputFilterMap = new Map();\n for (var i = 0; i < inputFilters.length; i += 1) {\n var inputFilter = inputFilters[i];\n var {\n name,\n type\n } = inputFilter;\n var column = columnMap.get(name);\n if (column != null && column.type === type) {\n inputFilterMap.set(name, inputFilter);\n }\n }\n return inputFilterMap;\n }));\n _defineProperty(this, \"getLinkedColumnMap\", memoize((columnMap, links) => {\n var linkedColumnMap = new Map();\n var panelId = LayoutUtils.getIdFromPanel(this);\n for (var i = 0; i < links.length; i += 1) {\n var link = links[i];\n var columnName = null;\n if (link.start != null && link.start.panelId === panelId && columnMap.has(link.start.columnName)) {\n columnName = link.start.columnName;\n } else if (link.end && link.end.panelId === panelId && columnMap.has(link.end.columnName)) {\n columnName = link.end.columnName;\n }\n if (columnName != null && columnMap.has(columnName)) {\n var column = columnMap.get(columnName);\n assertNotNull(column);\n linkedColumnMap.set(columnName, column);\n }\n }\n return linkedColumnMap;\n }));\n _defineProperty(this, \"getSelectorColumns\", memoize((columnMap, linkedColumnMap, columnSelectionValidator) => Array.from(columnMap.values()).map(column => ({\n name: column.name,\n type: column.type,\n isValid: columnSelectionValidator ? columnSelectionValidator(this, column, {\n type: 'chartLink'\n }) : false,\n isActive: linkedColumnMap.has(column.name)\n }))));\n _defineProperty(this, \"getWidgetPanelDescriptor\", memoize(metadata => {\n var name = 'Chart';\n if (isChartPanelTableMetadata(metadata)) {\n name = metadata.table;\n } else if (isChartPanelFigureMetadata(metadata)) {\n var _metadata$figure;\n name = (_metadata$figure = metadata.figure) !== null && _metadata$figure !== void 0 ? _metadata$figure : name;\n } else {\n var _metadata$name;\n name = (_metadata$name = metadata.name) !== null && _metadata$name !== void 0 ? _metadata$name : name;\n }\n return _objectSpread(_objectSpread({}, metadata), {}, {\n type: 'Chart',\n name\n });\n }));\n this.handleColumnSelected = this.handleColumnSelected.bind(this);\n this.handleColumnMouseEnter = this.handleColumnMouseEnter.bind(this);\n this.handleColumnMouseLeave = this.handleColumnMouseLeave.bind(this);\n this.handleDisconnect = this.handleDisconnect.bind(this);\n this.handleReconnect = this.handleReconnect.bind(this);\n this.handleFilterAdd = this.handleFilterAdd.bind(this);\n this.handleHide = this.handleHide.bind(this);\n this.handleError = this.handleError.bind(this);\n this.handleLoadError = this.handleLoadError.bind(this);\n this.handleLoadSuccess = this.handleLoadSuccess.bind(this);\n this.handleSettingsChanged = this.handleSettingsChanged.bind(this);\n this.handleOpenLinker = this.handleOpenLinker.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleSourceColumnChange = this.handleSourceColumnChange.bind(this);\n this.handleSourceFilterChange = this.handleSourceFilterChange.bind(this);\n this.handleSourceSortChange = this.handleSourceSortChange.bind(this);\n this.handleTabBlur = this.handleTabBlur.bind(this);\n this.handleTabFocus = this.handleTabFocus.bind(this);\n this.handleUpdate = this.handleUpdate.bind(this);\n this.updateModelFromSource = debounce(this.updateModelFromSource.bind(this), UPDATE_MODEL_DEBOUNCE);\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n this.panelContainer = /*#__PURE__*/React.createRef();\n this.pending = new Pending();\n var {\n metadata: _metadata,\n panelState\n } = props;\n var {\n filterValueMap = [],\n settings = {}\n } = panelState !== null && panelState !== void 0 ? panelState : {};\n this.state = {\n settings,\n error: undefined,\n isActive: false,\n isDisconnected: false,\n isLoading: false,\n isLoaded: false,\n isLinked: _metadata != null && isChartPanelTableMetadata(_metadata) && _metadata.settings.isLinked,\n // Map of all non-empty filters applied to the chart.\n // Initialize the filter map to the previously stored values; input filters will be applied after load.\n filterMap: new Map(filterValueMap),\n // Map of filter values set from links, stored in panelState.\n // Combined with inputFilters to get applied filters (filterMap).\n filterValueMap: new Map(filterValueMap),\n model: undefined,\n columnMap: new Map(),\n // eslint-disable-next-line react/no-unused-state\n panelState\n };\n }\n componentDidMount() {\n if (!this.isHidden()) {\n this.setState({\n isActive: true\n });\n this.initModel();\n }\n }\n componentDidUpdate(prevProps, prevState) {\n var {\n inputFilters,\n source,\n makeModel\n } = this.props;\n var {\n columnMap,\n model,\n filterMap,\n filterValueMap,\n isLinked,\n settings\n } = this.state;\n if (makeModel !== prevProps.makeModel) {\n this.initModel();\n }\n if (model == null) {\n return;\n }\n if (columnMap !== prevState.columnMap) {\n this.pruneFilterMaps();\n }\n if (inputFilters !== prevProps.inputFilters) {\n this.updateChangedInputFilters(inputFilters, prevProps.inputFilters);\n }\n if (filterMap !== prevState.filterMap) {\n this.updateFilters();\n } else if (filterValueMap !== prevState.filterValueMap) {\n this.updatePanelState();\n }\n if (settings !== prevState.settings && isFigureChartModel(model)) {\n model.updateSettings(settings);\n this.updatePanelState();\n }\n if (isLinked !== prevState.isLinked) {\n if (source) {\n if (isLinked) {\n this.startListeningToSource(source);\n this.updateModelFromSource();\n } else {\n this.stopListeningToSource(source);\n }\n }\n } else if (isLinked && source !== prevProps.source) {\n if (prevProps.source) {\n this.stopListeningToSource(prevProps.source);\n }\n if (source) {\n this.startListeningToSource(source);\n this.updateModelFromSource();\n }\n }\n }\n componentWillUnmount() {\n this.pending.cancel();\n var {\n model\n } = this.state;\n var {\n source\n } = this.props;\n if (model != null && source) {\n this.stopListeningToSource(source);\n }\n }\n initModel() {\n this.setState({\n isLoading: true,\n isLoaded: false,\n error: undefined,\n isDisconnected: false\n });\n var {\n makeModel\n } = this.props;\n this.pending.cancel();\n this.pending.add(makeModel(), resolved => {\n resolved.close();\n }).then(this.handleLoadSuccess, this.handleLoadError);\n }\n startListeningToSource(table) {\n log.debug('startListeningToSource', table);\n var {\n model\n } = this.state;\n assertNotNull(model);\n var {\n dh\n } = model;\n table.addEventListener(dh.Table.EVENT_CUSTOMCOLUMNSCHANGED, this.handleSourceColumnChange);\n table.addEventListener(dh.Table.EVENT_FILTERCHANGED, this.handleSourceFilterChange);\n table.addEventListener(dh.Table.EVENT_SORTCHANGED, this.handleSourceSortChange);\n }\n stopListeningToSource(table) {\n log.debug('stopListeningToSource', table);\n var {\n model\n } = this.state;\n assertNotNull(model);\n var {\n dh\n } = model;\n table.removeEventListener(dh.Table.EVENT_CUSTOMCOLUMNSCHANGED, this.handleSourceColumnChange);\n table.removeEventListener(dh.Table.EVENT_FILTERCHANGED, this.handleSourceFilterChange);\n table.removeEventListener(dh.Table.EVENT_SORTCHANGED, this.handleSourceSortChange);\n }\n loadModelIfNecessary() {\n var {\n isActive,\n isLoaded,\n isLoading\n } = this.state;\n if (isActive && !isLoaded && !isLoading) {\n this.initModel();\n }\n }\n isHidden() {\n var {\n glContainer\n } = this.props;\n var {\n isHidden\n } = glContainer;\n return isHidden;\n }\n handleColumnSelected(columnName) {\n var {\n glEventHub\n } = this.props;\n var {\n columnMap\n } = this.state;\n var panelId = LayoutUtils.getIdFromPanel(this);\n assertNotNull(panelId);\n var column = columnMap.get(columnName);\n if (column == null) {\n return;\n }\n emitLinkPointSelected(glEventHub, panelId, column, {\n type: 'chartLink'\n });\n }\n handleColumnMouseEnter(_ref) {\n var {\n type,\n name\n } = _ref;\n var {\n columnSelectionValidator\n } = this.props;\n log.debug('handleColumnMouseEnter', columnSelectionValidator, type, name);\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, {\n type,\n name\n }, {\n type: 'chartLink'\n });\n }\n handleColumnMouseLeave() {\n var {\n columnSelectionValidator\n } = this.props;\n log.debug('handleColumnMouseLeave', columnSelectionValidator);\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, undefined, {\n type: 'chartLink'\n });\n }\n handleDisconnect() {\n this.setState({\n error: new Error('Figure disconnected'),\n isDisconnected: true\n });\n }\n handleFilterAdd(columns) {\n for (var i = 0; i < columns.length; i += 1) {\n this.openInputFilter(columns[i]);\n }\n }\n handleOpenLinker() {\n var {\n localDashboardId,\n setActiveTool,\n setDashboardIsolatedLinkerPanelId\n } = this.props;\n setDashboardIsolatedLinkerPanelId(localDashboardId, undefined);\n setActiveTool(ToolType.LINKER);\n }\n handleReconnect() {\n this.setState({\n isDisconnected: false,\n error: undefined\n });\n this.sendColumnChange();\n this.updateColumnFilters();\n }\n handleLoadSuccess(model) {\n log.debug('handleLoadSuccess');\n var {\n model: prevModel\n } = this.state;\n this.setState({\n model,\n isLoaded: true\n }, () => {\n var {\n inputFilters,\n source\n } = this.props;\n var {\n filterMap,\n isLinked\n } = this.state;\n if (model !== prevModel) {\n this.sendColumnChange();\n this.updateColumnFilters();\n this.updateInputFilters(inputFilters, filterMap.size > 0 || model.isFilterRequired());\n if (source && isLinked) {\n this.startListeningToSource(source);\n this.updateModelFromSource();\n }\n }\n });\n }\n handleLoadError(error) {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n log.error('handleLoadError', error);\n this.setState({\n error,\n isLoading: false\n });\n }\n handleSourceColumnChange() {\n this.updateModelFromSource();\n }\n handleSourceFilterChange() {\n this.updateModelFromSource();\n }\n handleSourceSortChange() {\n this.updateModelFromSource();\n }\n updateModelFromSource() {\n var {\n metadata,\n source\n } = this.props;\n var {\n isLinked,\n model\n } = this.state;\n if (!isLinked || !model || !source) {\n log.debug2('updateModelFromSource ignoring', isLinked, model, source);\n return;\n }\n var {\n dh\n } = model;\n // By now the model has already been loaded, which is the only other cancelable thing in pending\n this.pending.cancel();\n if (isChartPanelTableMetadata(metadata)) {\n var {\n settings\n } = metadata;\n this.pending.add(ChartModelFactory.makeFigureFromSettings(dh, settings, source), resolved => resolved.close()).then(figure => {\n if (isFigureChartModel(model)) {\n model.setFigure(figure);\n }\n }).catch(this.handleLoadError);\n }\n this.updatePanelState();\n }\n updatePanelState() {\n var {\n sourcePanel\n } = this.props;\n var {\n panelState,\n filterValueMap,\n settings\n } = this.state;\n var {\n tableSettings\n } = panelState !== null && panelState !== void 0 ? panelState : {};\n if (sourcePanel) {\n // Right now just update the panel state from the source\n // If the source isn't available, just keep the state that's already saved\n if (hasInputFilter(sourcePanel.props) && hasPanelState(sourcePanel.state)) {\n var {\n inputFilters\n } = sourcePanel.props;\n var {\n panelState: sourcePanelState\n } = sourcePanel.state;\n if (sourcePanelState != null) {\n tableSettings = IrisGridUtils.extractTableSettings(sourcePanelState, inputFilters);\n }\n }\n }\n\n // eslint-disable-next-line react/no-unused-state\n this.setState({\n panelState: {\n settings,\n tableSettings,\n filterValueMap: Array.from(filterValueMap)\n }\n });\n }\n handleError() {\n // Don't want to set an error state, because the user can fix a chart error within the chart itself.\n // We're not loading anymore either so stop showing the spinner so the user can actually click those buttons.\n this.setState({\n isLoading: false\n });\n }\n handleSettingsChanged(update) {\n this.setState(_ref2 => {\n var {\n settings: prevSettings\n } = _ref2;\n var settings = _objectSpread(_objectSpread({}, prevSettings), update);\n log.debug('Updated settings', settings);\n return {\n settings\n };\n });\n }\n handleHide() {\n this.setActive(false);\n }\n handleShow() {\n this.setActive(true);\n }\n handleTabBlur() {\n this.setActive(false);\n }\n handleTabFocus() {\n var isHidden = this.isHidden();\n this.setActive(!isHidden);\n }\n handleUpdate(_ref3) {\n var {\n isLoading\n } = _ref3;\n this.setState({\n isLoading\n });\n }\n handleClearAllFilters() {\n // nuke link filter and input filter map\n // input filters only clear themselves if they are not yet empty\n this.setState({\n filterValueMap: new Map(),\n filterMap: new Map()\n });\n this.updatePanelState();\n }\n\n /**\n * Create an input filter panel for the provided column\n * @param column The column to create the input filter for\n */\n openInputFilter(column) {\n var {\n glEventHub\n } = this.props;\n var {\n name,\n type\n } = column;\n glEventHub.emit(InputFilterEvent.OPEN_INPUT, {\n title: \"\".concat(name, \" Filter\"),\n panelState: {\n name,\n type,\n isValueShown: true\n },\n createNewStack: true,\n focusElement: 'input'\n });\n }\n setActive(isActive) {\n this.setState({\n isActive\n }, () => {\n if (isActive) {\n this.loadModelIfNecessary();\n }\n });\n }\n sendColumnChange() {\n var {\n model\n } = this.state;\n if (!model) {\n return;\n }\n var {\n glEventHub\n } = this.props;\n var panelId = LayoutUtils.getIdFromPanel(this);\n assertNotNull(panelId);\n emitFilterColumnsChanged(glEventHub, panelId, Array.from(model.getFilterColumnMap().values()));\n }\n getCoordinateForColumn(columnName) {\n var _element$getBoundingC;\n var className = ChartColumnSelectorOverlay.makeButtonClassName(columnName);\n if (!this.panelContainer.current) {\n return null;\n }\n var element = this.panelContainer.current.querySelector(\".\".concat(className));\n var rect = (_element$getBoundingC = element === null || element === void 0 ? void 0 : element.getBoundingClientRect()) !== null && _element$getBoundingC !== void 0 ? _element$getBoundingC : null;\n if (rect == null || rect.width <= 0 || rect.height <= 0) {\n return null;\n }\n var x = rect.left + rect.width / 2;\n var y = rect.bottom;\n return [x, y];\n }\n\n /**\n * Set chart filters based on the filter map\n * @param filterMapParam Filter map\n */\n setFilterMap(filterMapParam) {\n log.debug('setFilterMap', filterMapParam);\n this.setState(state => {\n var {\n columnMap,\n filterMap\n } = state;\n var updatedFilterMap = null;\n var filterValueMap = new Map(state.filterValueMap);\n filterMapParam.forEach((_ref4, columnName) => {\n var {\n columnType,\n filterList\n } = _ref4;\n var column = columnMap.get(columnName);\n if (column == null || column.type !== columnType) {\n return;\n }\n if (filterList.length === 0) {\n log.debug('Ignoring empty filterList for column', columnName);\n return;\n }\n var {\n value\n } = filterList[0];\n filterValueMap.set(columnName, value);\n if (filterMap.get(columnName) !== value) {\n if (updatedFilterMap === null) {\n updatedFilterMap = new Map(filterMap);\n }\n updatedFilterMap.set(columnName, value);\n }\n });\n\n // Don't update filterMap unless the filters actually changed.\n // Otherwise the chart gets stuck on a spinner\n // because it never gets an update event for unchanged filters.\n return {\n filterValueMap,\n filterMap: updatedFilterMap !== null && updatedFilterMap !== void 0 ? updatedFilterMap : filterMap\n };\n });\n }\n unsetFilterValue(columnName) {\n this.setState(state => {\n // We want to unset a value unless there's an input filter for it\n // If there's an input filter, then we want to just set it to that value\n // This way if the user has an input filter and a link, when they delete the link the input filter value takes effect\n var {\n inputFilters\n } = this.props;\n var {\n columnMap\n } = state;\n var {\n filterMap,\n filterValueMap\n } = state;\n if (!filterValueMap.has(columnName)) {\n return null;\n }\n filterValueMap = new Map(state.filterValueMap);\n filterValueMap.delete(columnName);\n var inputFilterMap = this.getInputFilterColumnMap(columnMap, inputFilters);\n if (inputFilterMap.has(columnName)) {\n var _inputFilterMap$get;\n var filterValue = filterMap.get(columnName);\n var inputFilterValue = (_inputFilterMap$get = inputFilterMap.get(columnName)) === null || _inputFilterMap$get === void 0 ? void 0 : _inputFilterMap$get.value;\n if (inputFilterValue != null && filterValue !== inputFilterValue) {\n filterMap = new Map(state.filterMap);\n if (inputFilterValue.length > 0) {\n filterMap.set(columnName, inputFilterValue);\n } else {\n filterMap.delete(columnName);\n }\n }\n } else {\n filterMap = new Map(state.filterMap);\n filterMap.delete(columnName);\n }\n return {\n filterMap,\n filterValueMap\n };\n });\n }\n updateChangedInputFilters(inputFilters, prevInputFilters) {\n var deletedInputFilters = prevInputFilters.filter(prevInputFilter => inputFilters.find(inputFilter => inputFilter.name === prevInputFilter.name && inputFilter.type === prevInputFilter.type) === undefined);\n if (deletedInputFilters.length > 0) {\n this.deleteInputFilters(deletedInputFilters);\n }\n var changedInputFilters = inputFilters.filter(inputFilter => !prevInputFilters.includes(inputFilter));\n if (changedInputFilters.length > 0) {\n this.updateInputFilters(changedInputFilters);\n }\n }\n updateInputFilters(inputFilters) {\n var forceUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n this.setState(state => {\n var {\n columnMap\n } = state;\n var filterValueMap = new Map(state.filterValueMap);\n var filterMap = new Map(state.filterMap);\n var update = forceUpdate ? {\n filterMap,\n filterValueMap\n } : {};\n for (var i = 0; i < inputFilters.length; i += 1) {\n var {\n name,\n type,\n value\n } = inputFilters[i];\n var column = columnMap.get(name);\n if (column != null && column.type === type) {\n if (value != null && filterMap.get(name) !== value) {\n if (value === '') {\n filterMap.delete(name);\n } else {\n filterMap.set(name, value);\n }\n update.filterMap = filterMap;\n }\n if (filterValueMap.has(name)) {\n // Need to unset whatever the linked value was - if they want that value again, they need to double click the link again\n filterValueMap.delete(name);\n update.filterValueMap = filterValueMap;\n }\n }\n }\n log.debug('updateInputFilters', update);\n return update;\n });\n }\n deleteInputFilters(inputFilters) {\n var forceUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n this.setState(state => {\n var {\n columnMap,\n filterValueMap\n } = state;\n var filterMap = new Map(state.filterMap);\n var needsUpdate = forceUpdate;\n for (var i = 0; i < inputFilters.length; i += 1) {\n var {\n name,\n type\n } = inputFilters[i];\n var column = columnMap.get(name);\n if (column != null && column.type === type) {\n if (filterMap.has(name)) {\n var filterValue = filterMap.get(name);\n if (filterValueMap.has(name)) {\n var linkValue = filterValueMap.get(name);\n if (linkValue !== filterValue && linkValue != null) {\n needsUpdate = true;\n filterMap.set(name, linkValue);\n }\n } else {\n needsUpdate = true;\n filterMap.delete(name);\n }\n }\n }\n }\n log.debug('deleteInputFilters', needsUpdate);\n return needsUpdate ? {\n filterMap\n } : null;\n });\n }\n updateColumnFilters() {\n this.setState(_ref5 => {\n var {\n model\n } = _ref5;\n if (!model) {\n return null;\n }\n return {\n columnMap: model.getFilterColumnMap()\n };\n });\n }\n updateFilters() {\n var {\n columnMap,\n filterMap,\n model\n } = this.state;\n assertNotNull(model);\n var waitingInputMap = this.getWaitingInputMap(model.isFilterRequired(), columnMap, filterMap);\n model.setFilter(filterMap);\n if (filterMap.size > 0 && waitingInputMap.size === 0) {\n var defaultTitle = model.getDefaultTitle();\n var filterTitle = TextUtils.join(Array.from(filterMap.entries()).map(_ref6 => {\n var [name, value] = _ref6;\n return \"\".concat(name, \": \").concat(value);\n }));\n if (defaultTitle) {\n model.setTitle(\"\".concat(defaultTitle, \"<br><span style=\\\"font-size: smaller\\\">\").concat(filterTitle, \"</span>\"));\n } else {\n model.setTitle(filterTitle);\n }\n log.debug2('updateFilters filters set', filterMap);\n this.setState({\n isLoading: true\n });\n } else {\n log.debug2('updateFilters waiting on inputs', waitingInputMap);\n model.setTitle(model.getDefaultTitle());\n this.setState({\n isLoading: false\n });\n }\n this.updatePanelState();\n }\n\n /**\n * Removes any set filter values that are no longer part of the model\n */\n pruneFilterMaps() {\n this.setState(state => {\n var {\n columnMap\n } = state;\n var filterMap = new Map(state.filterMap);\n var filterValueMap = new Map(state.filterValueMap);\n var newState = {};\n state.filterValueMap.forEach((value, name) => {\n if (!columnMap.has(name)) {\n filterValueMap.delete(name);\n newState.filterValueMap = filterValueMap;\n }\n });\n state.filterMap.forEach((value, name) => {\n if (!columnMap.has(name)) {\n filterMap.delete(name);\n newState.filterMap = filterMap;\n }\n });\n return newState;\n });\n }\n render() {\n var {\n columnSelectionValidator,\n glContainer,\n glEventHub,\n inputFilters,\n isLinkerActive,\n links,\n metadata,\n settings,\n Plotly,\n containerRef\n } = this.props;\n var {\n columnMap,\n filterMap,\n error,\n model,\n isActive,\n isDisconnected,\n isLoaded,\n isLoading\n } = this.state;\n var inputFilterMap = this.getInputFilterColumnMap(columnMap, inputFilters);\n var linkedColumnMap = this.getLinkedColumnMap(columnMap, links);\n var waitingInputMap = model != null ? this.getWaitingInputMap(model.isFilterRequired(), columnMap, filterMap) : new Map();\n var waitingFilterMap = model != null ? this.getWaitingFilterMap(model.isFilterRequired(), columnMap, filterMap, linkedColumnMap, inputFilterMap) : new Map();\n var errorMessage = error != null ? \"Unable to open chart. \".concat(error) : undefined;\n var isWaitingForFilter = waitingInputMap.size > 0;\n var isSelectingColumn = columnMap.size > 0 && isLinkerActive;\n var descriptor = this.getWidgetPanelDescriptor(metadata);\n return /*#__PURE__*/_jsx(WidgetPanel, {\n className: classNames('iris-chart-panel', {\n 'input-required': isWaitingForFilter\n }),\n componentPanel: this,\n glContainer: glContainer,\n glEventHub: glEventHub,\n onHide: this.handleHide,\n onClearAllFilters: this.handleClearAllFilters,\n onShow: this.handleShow,\n onTabBlur: this.handleTabBlur,\n onTabFocus: this.handleTabFocus,\n errorMessage: errorMessage,\n isDisconnected: isDisconnected,\n isLoading: isLoading,\n isLoaded: isLoaded,\n descriptor: descriptor,\n children: /*#__PURE__*/_jsxs(\"div\", {\n ref: this.panelContainer,\n className: \"chart-panel-container h-100 w-100\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"chart-container h-100 w-100\",\n children: isLoaded && model && /*#__PURE__*/_jsx(Chart, {\n isActive: isActive,\n model: model,\n settings: settings,\n onDisconnect: this.handleDisconnect,\n onReconnect: this.handleReconnect,\n onUpdate: this.handleUpdate,\n onError: this.handleError,\n onSettingsChanged: this.handleSettingsChanged,\n Plotly: Plotly,\n containerRef: containerRef\n })\n }), /*#__PURE__*/_jsx(FadeTransition, {\n in: isWaitingForFilter && !isSelectingColumn && !isLoading,\n mountOnEnter: true,\n unmountOnExit: true,\n children: /*#__PURE__*/_jsx(ChartFilterOverlay, {\n inputFilterMap: inputFilterMap,\n linkedColumnMap: linkedColumnMap,\n onAdd: this.handleFilterAdd,\n onOpenLinker: this.handleOpenLinker,\n columnMap: columnMap,\n waitingFilterMap: waitingFilterMap,\n waitingInputMap: waitingInputMap\n })\n }), /*#__PURE__*/_jsx(FadeTransition, {\n in: isSelectingColumn,\n mountOnEnter: true,\n unmountOnExit: true,\n children: /*#__PURE__*/_jsx(ChartColumnSelectorOverlay, {\n columns: this.getSelectorColumns(columnMap, linkedColumnMap, columnSelectionValidator),\n onColumnSelected: this.handleColumnSelected,\n onMouseEnter: this.handleColumnMouseEnter,\n onMouseLeave: this.handleColumnMouseLeave\n })\n })]\n })\n });\n }\n}\n_defineProperty(ChartPanel, \"defaultProps\", {\n columnSelectionValidator: null,\n isLinkerActive: false,\n source: null,\n sourcePanel: null,\n panelState: null,\n settings: {},\n containerRef: null\n});\n_defineProperty(ChartPanel, \"displayName\", 'ChartPanel');\n_defineProperty(ChartPanel, \"COMPONENT\", 'ChartPanel');\nvar mapStateToProps = (state, ownProps) => {\n var {\n localDashboardId,\n metadata\n } = ownProps;\n var sourcePanelId;\n if (metadata != null && isChartPanelTableMetadata(metadata)) {\n sourcePanelId = metadata.sourcePanelId;\n }\n var panelTableMap = getTableMapForDashboard(state, localDashboardId);\n var openedPanelMap = getOpenedPanelMapForDashboard(state, localDashboardId);\n var activeTool = getActiveTool(state);\n var isolatedLinkerPanelId = getIsolatedLinkerPanelIdForDashboard(state, localDashboardId);\n var isLinkerActive = activeTool === ToolType.LINKER && isolatedLinkerPanelId === undefined;\n return {\n columnSelectionValidator: getColumnSelectionValidatorForDashboard(state, localDashboardId),\n isLinkerActive,\n inputFilters: getInputFiltersForDashboard(state, localDashboardId),\n links: getLinksForDashboard(state, localDashboardId),\n source: sourcePanelId != null ? panelTableMap.get(sourcePanelId) : undefined,\n sourcePanel: sourcePanelId != null ? openedPanelMap.get(sourcePanelId) : undefined,\n settings: getSettings(state)\n };\n};\nvar ConnectedChartPanel = connect(mapStateToProps, {\n setActiveTool: setActiveToolAction,\n setDashboardIsolatedLinkerPanelId: setDashboardIsolatedLinkerPanelIdAction\n}, null, {\n forwardRef: true\n})(ChartPanel);\nexport default ConnectedChartPanel;\n//# sourceMappingURL=ChartPanel.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint-disable jsx-a11y/click-events-have-key-events */\n/* eslint-disable jsx-a11y/no-static-element-interactions */\n// background click is just a convenience method, not an actual a11y issue\n\nimport React, { Component } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, CardFlip, Select, SocketedButton } from '@deephaven/components';\nimport { vsGear } from '@deephaven/icons';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport memoizee from 'memoizee';\nimport memoize from 'memoize-one';\nimport debounce from 'lodash.debounce';\nimport { nanoid } from 'nanoid';\nimport Log from '@deephaven/log';\nimport \"./DropdownFilter.css\";\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nvar log = Log.module('DropdownFilter');\nvar UPDATE_DEBOUNCE = 150;\nexport class DropdownFilter extends Component {\n constructor(props) {\n super(props);\n _defineProperty(this, \"dropdownRef\", void 0);\n _defineProperty(this, \"getCompatibleColumns\", memoize((source, columns) => source != null ? columns.filter(_ref => {\n var {\n type\n } = _ref;\n return type !== undefined && TableUtils.isCompatibleType(type, source.columnType);\n }) : []));\n _defineProperty(this, \"getColumnOptions\", memoize((columns, selectedColumn) => {\n var selectedIndex = -1;\n var options = [];\n options.push(/*#__PURE__*/_jsx(\"option\", {\n value: \"-1\",\n children: \"Select a column\"\n }, \"placeholder\"));\n columns.forEach((columnItem, index) => {\n options.push(/*#__PURE__*/_jsx(\"option\", {\n value: index,\n children: this.getItemLabel(columns, index)\n }, \"\".concat(columnItem.name, \"/\").concat(columnItem.type)));\n if (selectedColumn !== null && columnItem.name === selectedColumn.name && columnItem.type === selectedColumn.type) {\n selectedIndex = index;\n }\n });\n return [options, selectedIndex];\n }));\n _defineProperty(this, \"getSelectedOptionIndex\", memoize((values, value) => values.indexOf(value)));\n _defineProperty(this, \"getValueOptions\", memoize(values => [/*#__PURE__*/_jsx(\"option\", {\n value: \"-1\",\n children: DropdownFilter.PLACEHOLDER\n }, \"-1\"), ...values.map((val, index) => /*#__PURE__*/_jsx(\"option\", {\n value: index\n // eslint-disable-next-line react/no-array-index-key\n ,\n children: val !== null && val !== void 0 ? val : '(null)'\n }, \"\".concat(index, \"/\").concat(val)))]));\n _defineProperty(this, \"getItemLabel\", memoizee((columns, index) => {\n var {\n name,\n type\n } = columns[index];\n if (index > 0 && columns[index - 1].name === name || index < columns.length - 1 && columns[index + 1].name === name) {\n var shortType = type.substring(type.lastIndexOf('.') + 1);\n return \"\".concat(name, \" (\").concat(shortType, \")\");\n }\n return name;\n }, {\n max: 1000\n }));\n _defineProperty(this, \"sendUpdate\", debounce(() => {\n var {\n onChange\n } = this.props;\n var {\n column,\n value,\n isValueShown\n } = this.state;\n onChange({\n column,\n isValueShown,\n value: value !== null && value !== void 0 ? value : undefined\n });\n }, UPDATE_DEBOUNCE));\n this.handleColumnChange = this.handleColumnChange.bind(this);\n this.handleSettingsCancel = this.handleSettingsCancel.bind(this);\n this.handleSettingsClick = this.handleSettingsClick.bind(this);\n this.handleSettingsSave = this.handleSettingsSave.bind(this);\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n this.handleDropdownKeyPress = this.handleDropdownKeyPress.bind(this);\n this.handleValueChange = this.handleValueChange.bind(this);\n this.dropdownRef = /*#__PURE__*/React.createRef();\n var {\n column: _column,\n isValueShown: _isValueShown,\n value: _value\n } = props;\n this.state = {\n column: _column,\n id: nanoid(),\n selectedColumn: _column,\n disableCancel: !_isValueShown,\n isValueShown: _isValueShown,\n value: _value\n };\n }\n componentDidUpdate(prevProps, prevState) {\n var {\n source,\n values,\n isLoaded\n } = this.props;\n var {\n column,\n value,\n isValueShown\n } = this.state;\n if (isLoaded) {\n if (source !== prevProps.source) {\n this.sourceUpdated();\n }\n if (values !== prevProps.values && value !== '' && !values.includes(value)) {\n // Value list loaded, but doesn't contain the current value\n this.resetValue();\n }\n if (isValueShown !== prevState.isValueShown) {\n if (isValueShown) {\n this.focusInput();\n }\n }\n if (column !== prevState.column || value !== prevState.value || isValueShown !== prevState.isValueShown) {\n this.sendUpdate();\n }\n }\n }\n componentWillUnmount() {\n this.sendUpdate.flush();\n }\n handleColumnChange(eventTargetValue) {\n var value = eventTargetValue;\n log.debug2('handleColumnChange', value);\n if (value != null && parseInt(value, 10) < 0) {\n this.setState({\n selectedColumn: null\n });\n return;\n }\n var {\n columns: allColumns,\n source\n } = this.props;\n var columns = this.getCompatibleColumns(source, allColumns);\n this.setState({\n selectedColumn: columns[parseInt(value, 10)]\n });\n }\n handleDropdownKeyPress(event) {\n if (event.key === 'Enter') {\n event.preventDefault();\n event.stopPropagation();\n log.debug2('handleDropdownKeyPress');\n this.sendUpdate();\n this.sendUpdate.flush();\n }\n }\n handleValueChange(eventTargetValue) {\n var valueIndex = eventTargetValue;\n var index = parseInt(valueIndex, 10);\n // Default empty string value for 'clear filter'\n var value = '';\n var {\n values\n } = this.props;\n if (index >= 0 && index < values.length) {\n value = values[index];\n } else {\n log.debug2('Selected default item');\n }\n log.debug2('handleValueChange', value);\n this.setState({\n value\n });\n }\n handleSettingsCancel() {\n this.setState(_ref2 => {\n var {\n column\n } = _ref2;\n return {\n selectedColumn: column,\n isValueShown: true\n };\n });\n }\n handleSettingsSave() {\n this.setState(_ref3 => {\n var {\n column,\n selectedColumn,\n value\n } = _ref3;\n return {\n column: selectedColumn,\n // Reset value if column changed\n value: column === selectedColumn ? value : '',\n isValueShown: true,\n disableCancel: false\n };\n });\n }\n handleSettingsClick(event) {\n event.stopPropagation();\n this.showSettings();\n }\n handleBackgroundClick(event) {\n // allow clicking anywhere in the background to select and focus the input\n if (event.target !== this.dropdownRef.current) {\n this.focusInput();\n }\n }\n sourceUpdated() {\n this.setState({\n column: null,\n selectedColumn: null,\n isValueShown: false,\n disableCancel: true,\n value: ''\n });\n }\n showSettings() {\n var {\n column\n } = this.state;\n this.setState({\n selectedColumn: column,\n isValueShown: false\n });\n }\n focusInput() {\n var _this$dropdownRef$cur;\n (_this$dropdownRef$cur = this.dropdownRef.current) === null || _this$dropdownRef$cur === void 0 || _this$dropdownRef$cur.focus();\n }\n resetValue() {\n this.setState({\n value: ''\n });\n }\n\n // Called by the parent component via ref\n clearFilter() {\n this.resetValue();\n }\n\n // Called by the parent component via ref\n setFilterState(_ref4) {\n var {\n name,\n type,\n value,\n isValueShown\n } = _ref4;\n var column = name != null && type != null ? {\n name,\n type\n } : null;\n this.setState(_ref5 => {\n var {\n value: oldValue,\n isValueShown: oldIsValueShown\n } = _ref5;\n return {\n column,\n value: value !== null && value !== void 0 ? value : oldValue,\n isValueShown: isValueShown !== null && isValueShown !== void 0 ? isValueShown : oldIsValueShown\n };\n });\n }\n render() {\n var _source$columnName;\n var {\n columns: allColumns,\n disableLinking,\n isLinkerActive,\n isLoaded,\n source,\n onColumnSelected,\n onSourceMouseEnter,\n onSourceMouseLeave,\n values,\n settingsError\n } = this.props;\n var {\n column,\n disableCancel,\n id,\n isValueShown,\n selectedColumn,\n value\n } = this.state;\n var columnSelectionDisabled = source === null;\n var columns = this.getCompatibleColumns(source, allColumns);\n var isLinked = source != null;\n var sourceButtonLabel = (_source$columnName = source === null || source === void 0 ? void 0 : source.columnName) !== null && _source$columnName !== void 0 ? _source$columnName : DropdownFilter.SOURCE_BUTTON_PLACEHOLDER;\n var filterTitle = column != null ? \"\".concat(column.name, \" Filter\") : null;\n var [columnOptions, selectedIndex] = this.getColumnOptions(columns, selectedColumn);\n var valueOptions = this.getValueOptions(values);\n var selectedOption = this.getSelectedOptionIndex(values, value);\n var disableSave = !isLinked || selectedColumn == null;\n var isFlipped = isValueShown && !isLinkerActive;\n var sourceColumnId = \"source-column-btn-\".concat(id);\n var filterColumnId = \"filter-column-select-\".concat(id);\n return /*#__PURE__*/_jsxs(CardFlip, {\n className: \"dropdown-filter fill-parent-absolute\",\n isFlipped: isFlipped,\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"dropdown-filter-settings-card\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"dropdown-filter-card-content\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"dropdown-filter-settings-grid\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n htmlFor: sourceColumnId,\n children: \"Source Column\"\n }), /*#__PURE__*/_jsx(SocketedButton, {\n id: sourceColumnId,\n isLinked: isLinked,\n onClick: onColumnSelected,\n onMouseEnter: onSourceMouseEnter,\n onMouseLeave: onSourceMouseLeave,\n className: DropdownFilter.SOURCE_BUTTON_CLASS_NAME,\n disabled: disableLinking,\n children: sourceButtonLabel\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"text-muted small\",\n children: \"Select a source column for the list by linking to a table.\"\n }), /*#__PURE__*/_jsx(\"label\", {\n htmlFor: filterColumnId,\n children: \"Filter Column\"\n }), /*#__PURE__*/_jsx(Select, {\n id: filterColumnId,\n value: String(selectedIndex),\n className: \"custom-select\",\n onChange: this.handleColumnChange,\n disabled: columnSelectionDisabled,\n children: columnOptions\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"text-muted small\",\n children: \"Dropdown filter control will apply its filter to all columns matching this name in this dashboard.\"\n })]\n }), settingsError && /*#__PURE__*/_jsx(\"div\", {\n className: \"error-message text-center\",\n children: settingsError\n }), isLinked && /*#__PURE__*/_jsxs(\"div\", {\n className: \"dropdown-filter-settings-buttons\",\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"secondary\",\n type: \"button\",\n onClick: this.handleSettingsCancel,\n disabled: disableCancel || isValueShown || isLinkerActive,\n tooltip: isLinkerActive ? 'Cancel disabled while linker open' : undefined,\n children: \"Cancel\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"primary\",\n type: \"button\",\n className: \"ml-2\",\n onClick: this.handleSettingsSave,\n disabled: disableSave || isValueShown || isLinkerActive,\n tooltip: isLinkerActive ? 'Save disabled while linker open' : undefined,\n children: \"Save\"\n })]\n })]\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"dropdown-filter-value-card\",\n onClick: this.handleBackgroundClick,\n \"data-testid\": \"dropdown-filter-value-background\",\n children: isLoaded && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"dropdown-filter-column\",\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"dropdown-filter-column-title\",\n children: filterTitle\n })\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"dropdown-filter-card-content\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"dropdown-filter-value-input d-flex flex-column justify-content-center\",\n children: /*#__PURE__*/_jsx(Select, {\n className: \"custom-select\",\n value: String(selectedOption),\n ref: this.dropdownRef,\n onChange: this.handleValueChange,\n onKeyDown: this.handleDropdownKeyPress,\n title: \"Select Value\",\n children: valueOptions\n })\n }), settingsError && /*#__PURE__*/_jsx(\"div\", {\n className: \"error-message mt-3 text-center\",\n children: settingsError\n })]\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"dropdown-filter-menu\",\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"m-2 px-2\",\n onClick: this.handleSettingsClick,\n icon: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsGear,\n transform: \"grow-4\"\n }),\n tooltip: \"Dropdown Filter Settings\"\n })\n })]\n })\n })]\n });\n }\n}\n_defineProperty(DropdownFilter, \"defaultProps\", {\n column: null,\n disableLinking: false,\n isLinkerActive: false,\n isLoaded: false,\n isValueShown: false,\n settingsError: null,\n source: null,\n value: '',\n values: [],\n onColumnSelected: () => undefined,\n onSourceMouseEnter: () => undefined,\n onSourceMouseLeave: () => undefined\n});\n_defineProperty(DropdownFilter, \"PLACEHOLDER\", 'Select a value...');\n_defineProperty(DropdownFilter, \"SOURCE_BUTTON_CLASS_NAME\", 'btn-dropdown-filter-selector');\n_defineProperty(DropdownFilter, \"SOURCE_BUTTON_PLACEHOLDER\", 'Select a column');\nexport default DropdownFilter;\n//# sourceMappingURL=DropdownFilter.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport debounce from 'lodash.debounce';\nimport deepEqual from 'fast-deep-equal';\nimport memoize from 'memoizee';\nimport { LayoutUtils } from '@deephaven/dashboard';\nimport { DateTimeColumnFormatter, Formatter, FormatterUtils, TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { getActiveTool, getApi, getSettings } from '@deephaven/redux';\nimport { assertNotNull, EMPTY_ARRAY, Pending, PromiseUtils } from '@deephaven/utils';\nimport DropdownFilter from \"../controls/dropdown-filter/DropdownFilter.js\";\nimport { getColumnsForDashboard, getColumnSelectionValidatorForDashboard, getIsolatedLinkerPanelIdForDashboard, getLinksForDashboard, getTableMapForDashboard } from \"../redux/index.js\";\nimport \"./DropdownFilterPanel.css\";\nimport ToolType from \"../linker/ToolType.js\";\nimport WidgetPanel from \"./WidgetPanel.js\";\nimport { emitFilterChanged } from \"../FilterEvents.js\";\nimport { emitLinkPointSelected } from \"../linker/LinkerEvent.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar log = Log.module('DropdownFilterPanel');\nvar DROPDOWN_FILTER_DEBOUNCE = 250;\nvar WIDGET_DESCRIPTOR = Object.freeze({\n name: 'Dropdown Filter',\n type: 'DropdownFilter'\n});\nvar mapStateToProps = (state, ownProps) => {\n var {\n localDashboardId\n } = ownProps;\n var panelId = LayoutUtils.getIdFromPanel({\n props: ownProps\n });\n var panelTableMap = getTableMapForDashboard(state, localDashboardId);\n var dashboardLinks = getLinksForDashboard(state, localDashboardId);\n var activeTool = getActiveTool(state);\n var isolatedLinkerPanelId = getIsolatedLinkerPanelIdForDashboard(state, localDashboardId);\n var isLinkerActive = activeTool === ToolType.LINKER && (isolatedLinkerPanelId === undefined || isolatedLinkerPanelId === panelId);\n // Disable linking if linker is in isolated mode for a different panel\n var disableLinking = activeTool === ToolType.LINKER && isolatedLinkerPanelId !== undefined && isolatedLinkerPanelId !== panelId;\n return {\n columns: getColumnsForDashboard(state, localDashboardId),\n columnSelectionValidator: getColumnSelectionValidatorForDashboard(state, localDashboardId),\n dh: getApi(state),\n isLinkerActive,\n disableLinking,\n settings: getSettings(state),\n panelTableMap,\n dashboardLinks\n };\n};\nvar connector = connect(mapStateToProps, null, null, {\n forwardRef: true\n});\nexport class DropdownFilterPanel extends Component {\n constructor(props) {\n super(props);\n _defineProperty(this, \"dateTimeFormatter\", void 0);\n _defineProperty(this, \"dropdownFilterRef\", void 0);\n _defineProperty(this, \"panelContainer\", void 0);\n _defineProperty(this, \"pending\", void 0);\n _defineProperty(this, \"cleanup\", void 0);\n _defineProperty(this, \"columnFormats\", void 0);\n _defineProperty(this, \"getCachedValues\", memoize((rawValues, _ref, formatter) => {\n var {\n type,\n name\n } = _ref;\n if (type !== undefined && TableUtils.isDateType(type)) {\n return rawValues.map(value => this.dateTimeFormatter.format(value));\n }\n return rawValues.map(value =>\n // Skip formatting for nulls so they don't get converted to ''\n value != null && type != null ? formatter.getFormattedString(value, type, name) : null);\n }, {\n max: 1000\n }));\n _defineProperty(this, \"getCachedPanelLinks\", memoize((dashboardLinks, panel) => {\n var panelId = LayoutUtils.getIdFromPanel(panel);\n log.debug('getCachedPanelLinks', dashboardLinks, panelId);\n return dashboardLinks.filter(link => {\n var _link$end;\n return ((_link$end = link.end) === null || _link$end === void 0 ? void 0 : _link$end.panelId) === panelId;\n });\n }, {\n max: 1000\n }));\n _defineProperty(this, \"getCachedSource\", memoize(links => {\n log.debug('getCachedSource', links);\n var source;\n if (links.length > 0) {\n var [link] = links;\n source = link.start;\n if (links.length > 1) {\n log.error('Filter has more that one link', links);\n }\n }\n return source;\n }, {\n max: 1000\n }));\n _defineProperty(this, \"getCachedSourceTable\", memoize((panelTableMap, source) => {\n var _panelTableMap$get;\n log.debug('getCachedSourceTable', panelTableMap, source);\n if (source == null) {\n return null;\n }\n var {\n panelId\n } = source;\n return (_panelTableMap$get = panelTableMap.get(panelId)) !== null && _panelTableMap$get !== void 0 ? _panelTableMap$get : null;\n }, {\n max: 1000\n }));\n _defineProperty(this, \"getCachedSourceColumn\", memoize((table, source) => {\n var _table$columns$find;\n log.debug('getCachedSourceColumn', table, source);\n if (table == null || source == null) {\n return null;\n }\n return (_table$columns$find = table.columns.find(_ref2 => {\n var {\n name,\n type\n } = _ref2;\n return name === source.columnName && type === source.columnType;\n })) !== null && _table$columns$find !== void 0 ? _table$columns$find : null;\n }, {\n max: 1000\n }));\n this.handleChange = debounce(this.handleChange.bind(this), DROPDOWN_FILTER_DEBOUNCE);\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n this.handleDisconnect = this.handleDisconnect.bind(this);\n this.handleReconnect = this.handleReconnect.bind(this);\n this.handleColumnSelected = this.handleColumnSelected.bind(this);\n this.handleSourceFilterChange = this.handleSourceFilterChange.bind(this);\n this.handleSourceSortChange = this.handleSourceSortChange.bind(this);\n this.handleSourceSizeChange = this.handleSourceSizeChange.bind(this);\n this.handleSourceMouseEnter = this.handleSourceMouseEnter.bind(this);\n this.handleSourceMouseLeave = this.handleSourceMouseLeave.bind(this);\n this.handleValuesTableUpdate = this.handleValuesTableUpdate.bind(this);\n this.dropdownFilterRef = /*#__PURE__*/React.createRef();\n this.panelContainer = /*#__PURE__*/React.createRef();\n this.pending = new Pending();\n var {\n dh,\n panelState,\n settings\n } = props;\n this.columnFormats = FormatterUtils.getColumnFormats(settings);\n // Filter dropdown needs to show and send full timestamp format with nanoseconds\n this.dateTimeFormatter = new DateTimeColumnFormatter(dh, {\n showTimeZone: false,\n showTSeparator: true,\n defaultDateTimeFormatString: \"yyyy-MM-dd HH:mm:ss.SSSSSSSSS\"\n });\n var {\n value: _value = '',\n isValueShown = false,\n name: _name,\n type: _type,\n timestamp\n } = panelState !== null && panelState !== void 0 ? panelState : {};\n var column = _name != null && _type != null ? {\n name: _name,\n type: _type\n } : undefined;\n this.state = {\n column,\n formatter: new Formatter(dh, this.columnFormats),\n valuesTable: undefined,\n valuesColumn: undefined,\n sourceSize: 0,\n value: _value,\n timestamp,\n values: [],\n isValueShown,\n wasFlipped: false,\n skipUpdate: false,\n // eslint-disable-next-line react/no-unused-state\n panelState,\n // Dehydrated panel state that can load this panel\n\n isDisconnected: false,\n isLoading: false,\n isLoaded: false,\n error: null\n };\n }\n componentDidMount() {\n this.updateValuesTable();\n var {\n dashboardLinks,\n panelTableMap\n } = this.props;\n var {\n column,\n value,\n timestamp\n } = this.state;\n var sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n if (sourceTable !== null) {\n this.startListeningToSource(sourceTable);\n }\n if (column != null) {\n var {\n name,\n type\n } = column;\n this.sendUpdate(name, type, value, timestamp);\n }\n }\n componentDidUpdate(prevProps, prevState) {\n var {\n dashboardLinks,\n panelTableMap,\n settings\n } = this.props;\n var {\n valuesTable\n } = this.state;\n var source = this.getSource(dashboardLinks);\n var sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n var prevSource = this.getSource(prevProps.dashboardLinks);\n var prevSourceTable = this.getSourceTable(prevProps.panelTableMap, prevProps.dashboardLinks);\n if (settings !== prevProps.settings && settings !== undefined) {\n this.updateFormatterSettings(settings);\n }\n if (valuesTable !== prevState.valuesTable && prevState.valuesTable != null) {\n log.debug('Table in state modified, closing the old table.');\n prevState.valuesTable.close();\n }\n\n // Checking source change in addition to table change\n // in case a different column is selected in the same table\n if (sourceTable !== prevSourceTable || source !== prevSource) {\n this.updateValuesTable();\n }\n if (sourceTable !== prevSourceTable) {\n if (prevSourceTable !== null) {\n this.stopListeningToSource(prevSourceTable);\n }\n if (sourceTable !== null) {\n this.startListeningToSource(sourceTable);\n }\n }\n }\n componentWillUnmount() {\n var {\n dashboardLinks,\n panelTableMap\n } = this.props;\n var {\n valuesTable\n } = this.state;\n var sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n this.pending.cancel();\n if (sourceTable !== null) {\n this.stopListeningToSource(sourceTable);\n }\n if (this.cleanup) {\n this.cleanup();\n }\n if (valuesTable != null) {\n valuesTable.close();\n }\n }\n getCoordinateForColumn() {\n var _element$getBoundingC;\n if (this.panelContainer.current == null) {\n return null;\n }\n var element = this.panelContainer.current.querySelector(\".\".concat(DropdownFilter.SOURCE_BUTTON_CLASS_NAME));\n var rect = (_element$getBoundingC = element === null || element === void 0 ? void 0 : element.getBoundingClientRect()) !== null && _element$getBoundingC !== void 0 ? _element$getBoundingC : null;\n if (rect == null || rect.width <= 0 || rect.height <= 0) {\n return null;\n }\n var x = rect.left + rect.width / 2;\n var y = rect.bottom;\n return [x, y];\n }\n getSettingsErrorMessage() {\n var {\n sourceSize\n } = this.state;\n if (sourceSize > DropdownFilterPanel.MAX_TABLE_SIZE) {\n return \"Table too large, must have fewer than \".concat(DropdownFilterPanel.MAX_TABLE_SIZE, \" options.\");\n }\n return undefined;\n }\n getPanelErrorMessage() {\n var {\n error\n } = this.state;\n return error != null ? \"\".concat(error) : undefined;\n }\n getSource(links) {\n var panelLinks = this.getCachedPanelLinks(links, this);\n return this.getCachedSource(panelLinks);\n }\n getSourceTable(panelTableMap, links) {\n var source = this.getSource(links);\n return this.getCachedSourceTable(panelTableMap, source);\n }\n getValuesColumn(valuesTable, links) {\n var source = this.getSource(links);\n return this.getCachedSourceColumn(valuesTable, source);\n }\n startListeningToSource(sourceTable) {\n var {\n dh\n } = this.props;\n log.debug('startListeningToSource');\n sourceTable.addEventListener(dh.Table.EVENT_FILTERCHANGED, this.handleSourceFilterChange);\n sourceTable.addEventListener(dh.Table.EVENT_SORTCHANGED, this.handleSourceSortChange);\n sourceTable.addEventListener(dh.Table.EVENT_SIZECHANGED, this.handleSourceSizeChange);\n sourceTable.addEventListener(dh.Table.EVENT_DISCONNECT, this.handleDisconnect);\n sourceTable.addEventListener(dh.Table.EVENT_RECONNECT, this.handleReconnect);\n }\n stopListeningToSource(sourceTable) {\n var {\n dh\n } = this.props;\n log.debug('stopListeningToSource');\n sourceTable.removeEventListener(dh.Table.EVENT_FILTERCHANGED, this.handleSourceFilterChange);\n sourceTable.removeEventListener(dh.Table.EVENT_SORTCHANGED, this.handleSourceSortChange);\n sourceTable.removeEventListener(dh.Table.EVENT_SIZECHANGED, this.handleSourceSizeChange);\n sourceTable.removeEventListener(dh.Table.EVENT_DISCONNECT, this.handleDisconnect);\n sourceTable.removeEventListener(dh.Table.EVENT_RECONNECT, this.handleReconnect);\n }\n handleChange(_ref3) {\n var {\n column,\n isValueShown = false,\n value\n } = _ref3;\n var {\n name = undefined,\n type = undefined\n } = column !== null && column !== void 0 ? column : {};\n var sendUpdate = true;\n var timestamp = Date.now();\n this.setState(_ref4 => {\n var _ref5;\n var {\n panelState,\n timestamp: prevTimestamp,\n wasFlipped,\n skipUpdate\n } = _ref4;\n // If the user had a value set, and they flip the card over and flip it back without changing any settings, ignore it\n var isFlip = panelState != null && isValueShown !== panelState.isValueShown && name === panelState.name && type === panelState.type && value === panelState.value;\n sendUpdate = (_ref5 = !skipUpdate && isValueShown && (!isFlip || !wasFlipped)) !== null && _ref5 !== void 0 ? _ref5 : false;\n if (!sendUpdate) {\n timestamp = prevTimestamp;\n }\n return {\n panelState: {\n isValueShown,\n name,\n type,\n value,\n timestamp: timestamp !== null && timestamp !== void 0 ? timestamp : undefined\n },\n timestamp,\n wasFlipped: isFlip,\n skipUpdate: false\n };\n }, () => {\n if (sendUpdate) {\n this.sendUpdate(name !== null && name !== void 0 ? name : null, type, value, timestamp);\n }\n });\n }\n handleDisconnect() {\n this.setState({\n error: new Error('Table disconnected'),\n isDisconnected: true,\n isLoading: false\n });\n }\n handleReconnect() {\n this.setState({\n isDisconnected: false,\n error: null\n });\n }\n handleSourceFilterChange() {\n this.applySourceFilters();\n }\n handleSourceSortChange() {\n this.applySourceSorts();\n }\n handleSourceSizeChange(_ref6) {\n var {\n detail\n } = _ref6;\n this.setState({\n sourceSize: detail\n });\n }\n handleColumnSelected() {\n log.debug('handleColumnSelected');\n var {\n glEventHub\n } = this.props;\n var panelId = LayoutUtils.getIdFromPanel(this);\n assertNotNull(panelId);\n emitLinkPointSelected(glEventHub, panelId, DropdownFilterPanel.SOURCE_COLUMN, {\n type: 'filterSource'\n });\n }\n handleClearAllFilters() {\n var _this$dropdownFilterR;\n (_this$dropdownFilterR = this.dropdownFilterRef) === null || _this$dropdownFilterR === void 0 || (_this$dropdownFilterR = _this$dropdownFilterR.current) === null || _this$dropdownFilterR === void 0 || _this$dropdownFilterR.clearFilter();\n }\n\n /**\n * Set the filter value, card side, selected column\n * @param state Filter state to set\n * @param sendUpdate Emit filters changed event if true\n */\n setPanelState(state) {\n var _this$dropdownFilterR2;\n var sendUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var {\n dashboardLinks\n } = this.props;\n if (this.getSource(dashboardLinks) == null) {\n log.debug('Ignore state update for unlinked filter', state);\n return;\n }\n // Set the skipUpdate flag so the next onChange handler call doesn't emit the FILTERS_CHANGED event\n this.setState({\n skipUpdate: !sendUpdate\n });\n\n // Changing the inputFilter state via props doesn't quite work because of the delays on manual input changes\n // Setting the ref state directly triggers the onChange handler and updates the panelState\n (_this$dropdownFilterR2 = this.dropdownFilterRef) === null || _this$dropdownFilterR2 === void 0 || (_this$dropdownFilterR2 = _this$dropdownFilterR2.current) === null || _this$dropdownFilterR2 === void 0 || _this$dropdownFilterR2.setFilterState(state);\n }\n sendUpdate(name, type, value, timestamp) {\n var _this$getSource;\n var {\n dashboardLinks,\n glEventHub\n } = this.props;\n var sourcePanelId = (_this$getSource = this.getSource(dashboardLinks)) === null || _this$getSource === void 0 ? void 0 : _this$getSource.panelId;\n var excludePanelIds = sourcePanelId == null ? [] : [sourcePanelId];\n log.debug('sendUpdate', {\n name,\n type,\n value,\n timestamp,\n excludePanelIds\n });\n var panelId = LayoutUtils.getIdFromPanel(this);\n assertNotNull(panelId);\n emitFilterChanged(glEventHub, panelId, name != null && type != null && timestamp != null ? {\n name,\n type,\n value: value != null ? value : '=null',\n timestamp,\n excludePanelIds\n } : null);\n }\n updateValuesTable() {\n var {\n dashboardLinks,\n panelTableMap\n } = this.props;\n var source = this.getSource(dashboardLinks);\n var sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n log.debug('updateValuesTable', source, sourceTable);\n this.setState({\n values: [],\n valuesTable: undefined,\n error: null\n });\n if (source == null) {\n log.debug('Filter unlinked.');\n this.setState({\n isLoading: false,\n isLoaded: true,\n isValueShown: false,\n sourceSize: 0\n });\n return;\n }\n this.setState({\n isLoading: true\n });\n if (sourceTable == null) {\n return;\n }\n this.setState({\n isLoaded: false,\n sourceSize: sourceTable.size\n });\n this.pending.add(sourceTable.copy(), resolved => resolved.close()).then(valuesTable => {\n // Loading/loaded will be set when values array is actually populated\n this.updateViewportListener(valuesTable);\n this.setState({\n valuesTable\n });\n }).catch(error => {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n log.error(error);\n this.setState({\n isLoading: false,\n error\n });\n });\n }\n applySourceSorts() {\n var {\n dashboardLinks,\n panelTableMap\n } = this.props;\n var {\n valuesTable\n } = this.state;\n var sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n log.debug('applySourceSorts', sourceTable === null || sourceTable === void 0 ? void 0 : sourceTable.sort);\n if (valuesTable == null || sourceTable == null) {\n log.debug('Table not initialized');\n return;\n }\n var sorts = [...sourceTable.sort];\n valuesTable.applySort(sorts);\n this.setViewport(valuesTable);\n }\n applySourceFilters() {\n var {\n dashboardLinks,\n panelTableMap\n } = this.props;\n var {\n valuesTable\n } = this.state;\n var sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n log.debug('applySourceFilters', sourceTable === null || sourceTable === void 0 ? void 0 : sourceTable.filter);\n if (valuesTable == null || sourceTable == null) {\n log.debug('Table not initialized');\n return;\n }\n var filters = [...sourceTable.filter];\n valuesTable.applyFilter(filters);\n this.setViewport(valuesTable);\n }\n updateViewportListener(valuesTable) {\n var {\n dh\n } = this.props;\n log.debug('updateViewportListener', valuesTable === null || valuesTable === void 0 ? void 0 : valuesTable.size);\n if (this.cleanup) {\n this.cleanup();\n }\n if (valuesTable == null) {\n this.cleanup = undefined;\n return;\n }\n this.cleanup = valuesTable.addEventListener(dh.Table.EVENT_UPDATED, this.handleValuesTableUpdate);\n this.setViewport(valuesTable);\n }\n setViewport(valuesTable) {\n var {\n dashboardLinks\n } = this.props;\n var valuesColumn = this.getValuesColumn(valuesTable, dashboardLinks);\n if (!valuesColumn) {\n log.error('values column is null');\n return;\n }\n valuesTable.setViewport(0, DropdownFilterPanel.MAX_TABLE_SIZE - 1, [valuesColumn]);\n }\n updateFormatterSettings(settings) {\n var {\n dh\n } = this.props;\n var columnFormats = FormatterUtils.getColumnFormats(settings);\n if (!deepEqual(this.columnFormats, columnFormats)) {\n this.columnFormats = columnFormats;\n this.setState({\n formatter: new Formatter(dh, columnFormats)\n });\n }\n }\n handleValuesTableUpdate(_ref7) {\n var {\n detail\n } = _ref7;\n var {\n rows\n } = detail;\n var {\n dashboardLinks\n } = this.props;\n var {\n valuesTable\n } = this.state;\n if (!valuesTable) {\n log.error('valuesTable is null');\n return;\n }\n var valuesColumn = this.getValuesColumn(valuesTable, dashboardLinks);\n if (!valuesColumn) {\n log.error('Values column not found');\n return;\n }\n var values = rows.map(row => row.get(valuesColumn));\n this.setState({\n values,\n isLoading: false,\n isLoaded: true,\n valuesColumn\n });\n }\n handleSourceMouseEnter() {\n var {\n columnSelectionValidator\n } = this.props;\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, DropdownFilterPanel.SOURCE_COLUMN, {\n type: 'filterSource'\n });\n }\n handleSourceMouseLeave() {\n var {\n columnSelectionValidator\n } = this.props;\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, undefined, {\n type: 'filterSource'\n });\n }\n render() {\n var {\n columns,\n dashboardLinks,\n disableLinking,\n glContainer,\n glEventHub,\n isLinkerActive\n } = this.props;\n var {\n column,\n formatter,\n isDisconnected,\n isValueShown,\n value,\n values,\n valuesColumn,\n isLoading,\n isLoaded\n } = this.state;\n var source = this.getSource(dashboardLinks);\n var settingsErrorMessage = this.getSettingsErrorMessage();\n var panelErrorMessage = this.getPanelErrorMessage();\n var formattedValues = isLoaded && valuesColumn != null ? this.getCachedValues(values, valuesColumn, formatter) : EMPTY_ARRAY;\n return /*#__PURE__*/_jsx(WidgetPanel, {\n errorMessage: panelErrorMessage,\n isLoading: isLoading,\n isLoaded: isLoaded,\n isDisconnected: isDisconnected,\n className: \"iris-dropdown-filter-panel\",\n componentPanel: this,\n glContainer: glContainer,\n glEventHub: glEventHub,\n onClearAllFilters: this.handleClearAllFilters,\n descriptor: WIDGET_DESCRIPTOR,\n children: /*#__PURE__*/_jsx(\"div\", {\n ref: this.panelContainer,\n className: \"dropdown-filter-container h-100 w-100 container\",\n children: /*#__PURE__*/_jsx(DropdownFilter, {\n ref: this.dropdownFilterRef,\n column: column,\n columns: columns,\n isValueShown: isValueShown,\n isLinkerActive: isLinkerActive,\n disableLinking: disableLinking,\n isLoaded: isLoaded,\n settingsError: settingsErrorMessage,\n source: source,\n value: value,\n values: formattedValues,\n onChange: this.handleChange,\n onColumnSelected: this.handleColumnSelected,\n onSourceMouseEnter: this.handleSourceMouseEnter,\n onSourceMouseLeave: this.handleSourceMouseLeave\n })\n })\n });\n }\n}\n_defineProperty(DropdownFilterPanel, \"displayName\", 'DropdownFilterPanel');\n_defineProperty(DropdownFilterPanel, \"COMPONENT\", 'DropdownFilterPanel');\n_defineProperty(DropdownFilterPanel, \"MAX_TABLE_SIZE\", 256);\n_defineProperty(DropdownFilterPanel, \"SOURCE_COLUMN\", Object.freeze({\n name: 'FilterSource',\n type: null\n}));\nvar ConnectedDropdownFilterPanel = connector(DropdownFilterPanel);\nexport default ConnectedDropdownFilterPanel;\n//# sourceMappingURL=DropdownFilterPanel.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint-disable jsx-a11y/click-events-have-key-events */\n/* eslint-disable jsx-a11y/no-static-element-interactions */\n// background click is just a convenience method, not an actual a11y issue\n\nimport React, { Component } from 'react';\nimport memoizeOne from 'memoize-one';\nimport { nanoid } from 'nanoid';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsEdit, vsGear, vsSave, vsCircleSlash, vsTrash, vsDeviceCamera, dhRefresh, dhNewCircleLargeFilled, vsCircleLargeFilled, vsArrowSmallUp } from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport { Button, CardFlip, RadioGroup, Radio, Select } from '@deephaven/components';\nimport \"./FilterSetManager.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('FilterSetManager');\nvar NAME_INPUT_PLACEHOLDER = 'Enter name...';\nvar EMPTY_LIST_PLACEHOLDER = 'No Available Filter Sets';\nclass FilterSetManager extends Component {\n static animateScreenFlash() {\n var _document$querySelect;\n var overlay = document.createElement('div');\n overlay.classList.add('screen-flash-overlay');\n overlay.addEventListener('animationend', () => {\n // Removing the element removes its event listeners\n overlay.remove();\n });\n (_document$querySelect = document.querySelector('body')) === null || _document$querySelect === void 0 || _document$querySelect.appendChild(overlay);\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"renameInputRef\", /*#__PURE__*/React.createRef());\n _defineProperty(this, \"dropdownRef\", /*#__PURE__*/React.createRef());\n _defineProperty(this, \"editDropdownRef\", /*#__PURE__*/React.createRef());\n _defineProperty(this, \"isRenamingExistingSet\", memoizeOne((filterSets, renameSet) => renameSet !== undefined && filterSets.some(_ref => {\n var {\n id\n } = _ref;\n return id === renameSet.id;\n })));\n this.handleSettingsCancel = this.handleSettingsCancel.bind(this);\n this.handleSettingsClick = this.handleSettingsClick.bind(this);\n this.handleSettingsSave = this.handleSettingsSave.bind(this);\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n this.handleEditDropdownChange = this.handleEditDropdownChange.bind(this);\n this.handleFilterChange = this.handleFilterChange.bind(this);\n this.handleFilterApply = this.handleFilterApply.bind(this);\n this.handleCaptureNewSet = this.handleCaptureNewSet.bind(this);\n this.handleNameInputChange = this.handleNameInputChange.bind(this);\n this.handleNameInputKeyPress = this.handleNameInputKeyPress.bind(this);\n this.handleRenameConfirm = this.handleRenameConfirm.bind(this);\n this.handleRenameCancel = this.handleRenameCancel.bind(this);\n this.handleRestoreFullStateChange = this.handleRestoreFullStateChange.bind(this);\n this.handleSetDelete = this.handleSetDelete.bind(this);\n this.handleSetEdit = this.handleSetEdit.bind(this);\n this.handleSetUpdate = this.handleSetUpdate.bind(this);\n this.state = {\n editId: undefined,\n renameSet: undefined,\n nameInputValue: '',\n nameInputError: undefined,\n modifiedFilterSets: [],\n restoreFullState: false\n };\n }\n componentDidMount() {\n var {\n isValueShown\n } = this.props;\n if (isValueShown) {\n this.updateSelectedId();\n } else {\n this.initSettingsScreen();\n }\n }\n componentDidUpdate(prevProps, prevState) {\n var {\n isValueShown,\n filterSets\n } = this.props;\n var {\n modifiedFilterSets\n } = this.state;\n if (prevProps.isValueShown && !isValueShown) {\n this.initSettingsScreen();\n }\n if (this.isNameInputScreen() && !this.isNameInputScreen(prevState)) {\n this.focusRenameInput();\n }\n if (filterSets !== prevProps.filterSets) {\n if (!isValueShown && filterSets.length > 0 && prevProps.filterSets.length === 0 && modifiedFilterSets.length === 0) {\n // Filter set added from another panel, flip from the settings side/initial screen to the value side\n var {\n onChange\n } = this.props;\n onChange({\n isValueShown: true,\n selectedId: filterSets[0].id\n });\n } else {\n this.updateSelectedId();\n }\n }\n }\n initSettingsScreen() {\n var {\n filterSets,\n selectedId\n } = this.props;\n log.debug('initSettingsScreen', filterSets, selectedId);\n this.setState({\n modifiedFilterSets: [...filterSets],\n editId: selectedId\n });\n }\n\n // Update selected id without applying the new set on filterSets change\n updateSelectedId() {\n var {\n isValueShown,\n filterSets,\n selectedId,\n onChange\n } = this.props;\n log.debug('updateSelectedId', filterSets, selectedId);\n if (!isValueShown) {\n return;\n }\n if (!filterSets.some(_ref2 => {\n var {\n id\n } = _ref2;\n return id === selectedId;\n })) {\n // Update the selection if selectedId doesn't exist in the list\n // Flip to the settings side for empty list to show the initial screen\n var isEmptyList = filterSets.length === 0;\n onChange({\n isValueShown: !isEmptyList,\n selectedId: isEmptyList ? undefined : filterSets[0].id\n });\n }\n }\n handleEditDropdownChange(eventTargetValue) {\n this.setState({\n editId: eventTargetValue\n });\n }\n handleFilterChange(eventTargetValue) {\n var selectedId = eventTargetValue;\n var {\n isValueShown,\n onChange\n } = this.props;\n this.applyFilterSet(selectedId);\n onChange({\n isValueShown,\n selectedId\n });\n }\n handleFilterApply() {\n var {\n selectedId\n } = this.props;\n this.applyFilterSet(selectedId);\n }\n handleSettingsCancel() {\n var {\n onChange,\n selectedId,\n filterSets\n } = this.props;\n this.setState({\n modifiedFilterSets: []\n });\n // Flip the card to the filter set selection screen if the sets list isn't empty\n // Otherwise show the initial screen\n if (filterSets.length > 0) {\n onChange({\n isValueShown: true,\n selectedId\n });\n }\n }\n handleSettingsSave() {\n var {\n onChange,\n onUpdateSets\n } = this.props;\n var {\n modifiedFilterSets,\n editId\n } = this.state;\n this.setState({\n modifiedFilterSets: []\n });\n log.debug('Update sets', modifiedFilterSets, editId);\n onUpdateSets(modifiedFilterSets);\n // Don't flip the card to the filter set selection screen if the updated sets list is empty\n if (modifiedFilterSets.length > 0) {\n onChange({\n isValueShown: true,\n selectedId: editId\n });\n }\n }\n handleCaptureNewSet() {\n var {\n getFilterState\n } = this.props;\n FilterSetManager.animateScreenFlash();\n var id = nanoid();\n var panels = getFilterState();\n var renameSet = {\n id,\n title: '',\n panels\n };\n log.debug('handleSetCreate', renameSet);\n this.setState({\n nameInputValue: '',\n nameInputError: undefined,\n renameSet\n });\n }\n handleRenameCancel() {\n this.setState({\n renameSet: undefined\n });\n }\n handleRestoreFullStateChange(value) {\n this.setState({\n restoreFullState: value === 'true'\n });\n }\n getNameError(nameInputValue) {\n var _nameInputValue$trim;\n var {\n renameSet,\n modifiedFilterSets\n } = this.state;\n var trimmedName = (_nameInputValue$trim = nameInputValue === null || nameInputValue === void 0 ? void 0 : nameInputValue.trim()) !== null && _nameInputValue$trim !== void 0 ? _nameInputValue$trim : '';\n if (trimmedName.length === 0) {\n log.debug('Name cannot be empty', trimmedName);\n return 'Name cannot be empty';\n }\n if (renameSet !== undefined && modifiedFilterSets.some(_ref3 => {\n var {\n title,\n id\n } = _ref3;\n return title === trimmedName && id !== renameSet.id;\n })) {\n log.debug('Set with this name already exists', trimmedName);\n return 'Set with this name already exists';\n }\n return undefined;\n }\n handleRenameConfirm() {\n var _nameInputValue$trim2;\n var {\n nameInputValue,\n renameSet,\n modifiedFilterSets,\n restoreFullState\n } = this.state;\n if (renameSet === undefined) {\n log.error('Renamed set undefined.');\n return;\n }\n var nameInputError = this.getNameError(nameInputValue);\n log.debug('handleRenameConfirm', nameInputValue, nameInputError);\n if (nameInputError !== undefined) {\n this.setState({\n nameInputError\n });\n return;\n }\n var trimmedName = (_nameInputValue$trim2 = nameInputValue === null || nameInputValue === void 0 ? void 0 : nameInputValue.trim()) !== null && _nameInputValue$trim2 !== void 0 ? _nameInputValue$trim2 : '';\n var namedFilterSet = _objectSpread(_objectSpread({}, renameSet), {}, {\n title: trimmedName,\n restoreFullState\n });\n var selectedIndex = modifiedFilterSets.findIndex(_ref4 => {\n var {\n id\n } = _ref4;\n return id === renameSet.id;\n });\n var updatedModifiedFilterSets = [...modifiedFilterSets];\n if (selectedIndex >= 0) {\n updatedModifiedFilterSets[selectedIndex] = namedFilterSet;\n log.debug('Renamed existing set', updatedModifiedFilterSets);\n } else {\n updatedModifiedFilterSets.push(namedFilterSet);\n log.debug('Added new set to modified sets', updatedModifiedFilterSets);\n }\n this.setState({\n editId: namedFilterSet.id,\n modifiedFilterSets: updatedModifiedFilterSets,\n renameSet: undefined\n });\n }\n handleSetDelete() {\n this.setState(state => {\n var {\n editId,\n modifiedFilterSets: prevFilterSets\n } = state;\n var selectedIndex = prevFilterSets.findIndex(_ref5 => {\n var {\n id\n } = _ref5;\n return id === editId;\n });\n if (selectedIndex < 0) {\n log.error('Unable to find selected filterSet index', prevFilterSets, editId);\n return null;\n }\n var modifiedFilterSets = prevFilterSets.filter(_ref6 => {\n var {\n id\n } = _ref6;\n return id !== editId;\n });\n var newSelectedIndex = Math.max(0, Math.min(modifiedFilterSets.length - 1, selectedIndex - 1));\n var newSelectedId = modifiedFilterSets.length > 0 ? modifiedFilterSets[newSelectedIndex].id : undefined;\n log.debug('Deleted selected set', editId, prevFilterSets, modifiedFilterSets);\n log.debug('New selection', newSelectedIndex, newSelectedId);\n return {\n modifiedFilterSets,\n editId: newSelectedId\n };\n });\n }\n handleSetUpdate() {\n var {\n getFilterState\n } = this.props;\n FilterSetManager.animateScreenFlash();\n var panels = getFilterState();\n this.setState(_ref7 => {\n var {\n modifiedFilterSets: prevFilterSets,\n editId\n } = _ref7;\n if (editId === undefined) {\n log.error('Filter for update not selected.');\n return null;\n }\n var modifiedFilterSets = [...prevFilterSets];\n var selectedSetIndex = modifiedFilterSets.findIndex(_ref8 => {\n var {\n id\n } = _ref8;\n return id === editId;\n });\n if (selectedSetIndex < 0) {\n log.error('Selected set for update not found.');\n return null;\n }\n // Clone selected set to avoid mutation of the props\n modifiedFilterSets[selectedSetIndex] = _objectSpread(_objectSpread({}, modifiedFilterSets[selectedSetIndex]), {}, {\n panels\n });\n log.debug('Update set', modifiedFilterSets, panels);\n return {\n modifiedFilterSets\n };\n });\n }\n handleSetEdit() {\n this.setState(_ref9 => {\n var {\n editId,\n modifiedFilterSets\n } = _ref9;\n var selectedSet = modifiedFilterSets.find(_ref0 => {\n var {\n id\n } = _ref0;\n return id === editId;\n });\n if (selectedSet === undefined) {\n log.error('Could not find selected set', editId, modifiedFilterSets);\n return null;\n }\n var {\n title,\n restoreFullState = false\n } = selectedSet;\n return {\n nameInputValue: title,\n nameInputError: undefined,\n renameSet: selectedSet,\n restoreFullState\n };\n });\n }\n handleSettingsClick(event) {\n event.stopPropagation();\n var {\n onChange,\n selectedId\n } = this.props;\n onChange({\n isValueShown: false,\n selectedId\n });\n }\n handleBackgroundClick(event) {\n log.debug('handleBackgroundClick');\n // allow clicking anywhere in the background to select and focus the input\n if (event.target !== this.dropdownRef.current) {\n this.focusInput();\n }\n }\n handleNameInputChange(event) {\n var {\n value: nameInputValue\n } = event.target;\n var nameInputError = this.getNameError(nameInputValue);\n this.setState({\n nameInputValue,\n nameInputError\n });\n }\n handleNameInputKeyPress(event) {\n var {\n key\n } = event;\n if (key === 'Enter') {\n event.preventDefault();\n this.handleRenameConfirm();\n }\n }\n isNameInputScreen() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.state;\n var {\n renameSet\n } = state;\n return renameSet !== undefined;\n }\n applyFilterSet(selectedId) {\n var {\n onApply,\n filterSets\n } = this.props;\n if (selectedId === undefined) {\n log.debug('No filter selected');\n return;\n }\n var filterSet = filterSets.find(_ref1 => {\n var {\n id\n } = _ref1;\n return id === selectedId;\n });\n if (filterSet === undefined) {\n log.debug('Selected id not found in filterSets', selectedId, filterSets);\n return;\n }\n log.debug('Apply filterSet', filterSet);\n onApply(filterSet);\n }\n focusInput() {\n var _this$dropdownRef$cur;\n (_this$dropdownRef$cur = this.dropdownRef.current) === null || _this$dropdownRef$cur === void 0 || _this$dropdownRef$cur.focus();\n }\n focusRenameInput() {\n var _this$renameInputRef$;\n (_this$renameInputRef$ = this.renameInputRef.current) === null || _this$renameInputRef$ === void 0 || _this$renameInputRef$.focus();\n }\n render() {\n var {\n nameInputValue,\n nameInputError,\n editId,\n renameSet,\n modifiedFilterSets,\n restoreFullState\n } = this.state;\n var {\n isValueShown,\n filterSets,\n selectedId\n } = this.props;\n var isNameInputScreen = this.isNameInputScreen();\n var isRenamingExistingSet = this.isRenamingExistingSet(modifiedFilterSets, renameSet);\n var isEmptyEditList = modifiedFilterSets.length === 0;\n var isInitialScreen = !isNameInputScreen && isEmptyEditList && filterSets.length === 0;\n var isEditListScreen = !isNameInputScreen && !isInitialScreen;\n var captureSetIcon = /*#__PURE__*/_jsxs(\"div\", {\n className: \"fa-layers mr-3\",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsCircleLargeFilled,\n mask: vsDeviceCamera,\n transform: \"shrink-1 down-5 right-7\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhNewCircleLargeFilled,\n className: \"text-primary\",\n transform: \"shrink-6 down-5 right-7\"\n })]\n });\n var updateSetIcon = /*#__PURE__*/_jsxs(\"div\", {\n className: \"fa-layers\",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsCircleLargeFilled,\n mask: vsDeviceCamera,\n transform: \"shrink-1 down-5 right-7\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsArrowSmallUp,\n transform: \"shrink-1 down-5 right-7\"\n })]\n });\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"filter-set-manager fill-parent-absolute\",\n children: /*#__PURE__*/_jsxs(CardFlip, {\n className: \"w-100 h-100\",\n isFlipped: isValueShown,\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"filter-set-manager-settings-card fill-parent-absolute\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"filter-set-manager-card-content\",\n children: [isInitialScreen && /*#__PURE__*/_jsxs(\"div\", {\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn btn-link no-underline\",\n onClick: this.handleCaptureNewSet,\n icon: captureSetIcon,\n children: \"Capture filter set\"\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"py-3 text-muted small\",\n children: \"Takes a snapshot of the currently applied filters on all panels, allowing you to restore saved filter sets later.\"\n })]\n }), isNameInputScreen && /*#__PURE__*/_jsxs(\"div\", {\n className: \"d-flex flex-column justify-content-center\",\n \"data-testid\": \"edit-filter-set-container\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"form-group\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n children: isRenamingExistingSet ? 'Edit set' : 'Name captured set'\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"name-input-container\",\n children: [/*#__PURE__*/_jsx(\"input\", {\n type: \"text\",\n className: \"input-set-name form-control\",\n placeholder: NAME_INPUT_PLACEHOLDER,\n value: nameInputValue,\n ref: this.renameInputRef,\n onChange: this.handleNameInputChange,\n onKeyPress: this.handleNameInputKeyPress,\n spellCheck: \"false\"\n }), /*#__PURE__*/_jsx(Button, {\n \"data-testid\": \"rename-confirm-button\",\n kind: \"ghost\",\n className: \"btn btn-link no-underline pt-2 pb-2\",\n onClick: this.handleRenameConfirm,\n tooltip: \"Save\",\n \"test-id\": \"button-save\",\n icon: vsSave\n }), /*#__PURE__*/_jsx(Button, {\n \"data-testid\": \"rename-cancel-button\",\n kind: \"ghost\",\n className: \"btn btn-link no-underline pt-2 pb-2\",\n onClick: this.handleRenameCancel,\n tooltip: \"Cancel\",\n icon: vsCircleSlash\n })]\n }), nameInputError !== undefined && /*#__PURE__*/_jsx(\"div\", {\n className: \"error-message\",\n children: nameInputError\n })]\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"form-group\",\n children: /*#__PURE__*/_jsxs(RadioGroup, {\n \"aria-label\": \"Restoration options\",\n onChange: this.handleRestoreFullStateChange,\n value: \"\".concat(restoreFullState),\n children: [/*#__PURE__*/_jsx(Radio, {\n value: \"false\",\n children: \"Restore only filters\"\n }), /*#__PURE__*/_jsx(Radio, {\n value: \"true\",\n children: \"Restore full table state\"\n })]\n })\n })]\n }), isEditListScreen && /*#__PURE__*/_jsxs(\"div\", {\n className: \"filter-set-manager-settings-grid-1\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"form-group\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n children: \"Edit filter sets\"\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"filter-select-container\",\n children: [/*#__PURE__*/_jsxs(Select, {\n \"data-testid\": \"settings-card-filter-select\",\n ref: this.editDropdownRef,\n value: editId !== null && editId !== void 0 ? editId : '-1',\n className: \"custom-select filter-value-select\",\n onChange: this.handleEditDropdownChange,\n disabled: isEmptyEditList,\n children: [isEmptyEditList && /*#__PURE__*/_jsx(\"option\", {\n value: \"-1\",\n disabled: true,\n children: EMPTY_LIST_PLACEHOLDER\n }), modifiedFilterSets.map(_ref10 => {\n var {\n id,\n title\n } = _ref10;\n return /*#__PURE__*/_jsx(\"option\", {\n value: id,\n children: title\n }, id);\n })]\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n onClick: this.handleSetUpdate,\n disabled: isEmptyEditList,\n icon: updateSetIcon,\n tooltip: \"Update\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n onClick: this.handleSetEdit,\n disabled: isEmptyEditList,\n icon: vsEdit,\n tooltip: \"Edit\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n onClick: this.handleSetDelete,\n disabled: isEmptyEditList,\n icon: vsTrash,\n tooltip: \"Delete\"\n })]\n })]\n }), /*#__PURE__*/_jsx(\"div\", {\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn btn-link no-underline\",\n onClick: this.handleCaptureNewSet,\n icon: captureSetIcon,\n children: \"Capture new filter set\"\n })\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"py-3 text-right\",\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"secondary\",\n onClick: this.handleSettingsCancel,\n children: \"Cancel\"\n }), \"\\xA0\", /*#__PURE__*/_jsx(Button, {\n kind: \"primary\",\n onClick: this.handleSettingsSave,\n children: \"Save\"\n })]\n })]\n })]\n })\n }, \"front\"), /*#__PURE__*/_jsxs(\"div\", {\n className: \"filter-set-manager-value-card fill-parent-absolute\",\n onClick: this.handleBackgroundClick,\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"filter-set-manager-column\",\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"filter-set-manager-column-title\",\n children: \"Filter sets\"\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"filter-set-manager-card-content\",\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"filter-set-manager-value-input\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"filter-select-container\",\n children: [/*#__PURE__*/_jsxs(Select, {\n \"data-testid\": \"value-card-filter-select\",\n ref: this.dropdownRef,\n value: selectedId !== null && selectedId !== void 0 ? selectedId : '-1',\n className: \"custom-select filter-value-select\",\n onChange: this.handleFilterChange,\n children: [filterSets.length === 0 && /*#__PURE__*/_jsx(\"option\", {\n value: \"-1\",\n disabled: true,\n children: EMPTY_LIST_PLACEHOLDER\n }), filterSets.map(_ref11 => {\n var {\n id,\n title\n } = _ref11;\n return /*#__PURE__*/_jsx(\"option\", {\n value: id,\n children: title\n }, id);\n })]\n }), /*#__PURE__*/_jsx(Button, {\n \"data-testid\": \"filter-apply-button\",\n kind: \"ghost\",\n onClick: this.handleFilterApply,\n icon: dhRefresh,\n tooltip: \"Apply Filter Set\"\n })]\n })\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"filter-set-manager-menu\",\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn btn-link btn-link-icon m-2 px-2\",\n onClick: this.handleSettingsClick,\n tooltip: \"Settings\",\n icon: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsGear,\n transform: \"grow-4\"\n })\n })\n })]\n }, \"back\")]\n })\n });\n }\n}\nexport default FilterSetManager;\n//# sourceMappingURL=FilterSetManager.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport React from 'react';\nimport WidgetPanelTooltip from \"./WidgetPanelTooltip.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction IrisGridPanelTooltip(props) {\n var _model$rowCount, _model$pendingRowCoun, _model$floatingBottom, _model$floatingTopRow, _model$columnCount;\n var {\n model\n } = props;\n var rowCount = ((_model$rowCount = model === null || model === void 0 ? void 0 : model.rowCount) !== null && _model$rowCount !== void 0 ? _model$rowCount : 0) - ((_model$pendingRowCoun = model === null || model === void 0 ? void 0 : model.pendingRowCount) !== null && _model$pendingRowCoun !== void 0 ? _model$pendingRowCoun : 0) - ((_model$floatingBottom = model === null || model === void 0 ? void 0 : model.floatingBottomRowCount) !== null && _model$floatingBottom !== void 0 ? _model$floatingBottom : 0) - ((_model$floatingTopRow = model === null || model === void 0 ? void 0 : model.floatingTopRowCount) !== null && _model$floatingTopRow !== void 0 ? _model$floatingTopRow : 0);\n var formattedRowCount = model === null || model === void 0 ? void 0 : model.displayString(rowCount, 'long');\n var columnCount = (_model$columnCount = model === null || model === void 0 ? void 0 : model.columnCount) !== null && _model$columnCount !== void 0 ? _model$columnCount : 0;\n var formattedcolumnCount = model === null || model === void 0 ? void 0 : model.displayString(columnCount, 'long');\n return (\n /*#__PURE__*/\n // eslint-disable-next-line react/jsx-props-no-spreading\n _jsxs(WidgetPanelTooltip, _objectSpread(_objectSpread({}, props), {}, {\n children: [/*#__PURE__*/_jsx(\"hr\", {\n className: \"tab-tooltip-divider\"\n }), /*#__PURE__*/_jsx(\"span\", {\n children: \"Number of Columns\"\n }), /*#__PURE__*/_jsx(\"span\", {\n className: \"tab-tooltip-statistic-value\",\n children: formattedcolumnCount\n }), /*#__PURE__*/_jsx(\"span\", {\n children: \"Number of Rows\"\n }), /*#__PURE__*/_jsx(\"span\", {\n className: \"tab-tooltip-statistic-value\",\n children: formattedRowCount\n })]\n }))\n );\n}\nexport default IrisGridPanelTooltip;\n//# sourceMappingURL=IrisGridPanelTooltip.js.map","/**\n * @deprecated use `IrisGridPanelMetadata` instead\n */\n\nexport function isLegacyIrisGridPanelMetadata(metadata) {\n if (metadata == null) return false;\n var irisGridPanelMetadata = metadata;\n return typeof irisGridPanelMetadata.table === 'string';\n}\nexport function isIrisGridPanelMetadata(metadata) {\n if (metadata == null) return false;\n var irisGridPanelMetadata = metadata;\n return typeof irisGridPanelMetadata.name === 'string';\n}\n//# sourceMappingURL=IrisGridPanelTypes.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n// Wrapper for the IrisGrid for use in a golden layout container\n// Will probably need to handle window popping out from golden layout here.\nimport React, { PureComponent } from 'react';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport debounce from 'lodash.debounce';\nimport { DEFAULT_DASHBOARD_ID, LayoutUtils } from '@deephaven/dashboard';\nimport { AdvancedSettings, IrisGrid, IrisGridModel, IrisGridCacheUtils, IrisGridUtils, isIrisGridTableModelTemplate } from '@deephaven/iris-grid';\nimport Log from '@deephaven/log';\nimport { getSettings, getUser } from '@deephaven/redux';\nimport { assertNotNull, PromiseUtils } from '@deephaven/utils';\nimport clamp from 'lodash.clamp';\nimport { IrisGridEvent } from \"../events/index.js\";\nimport { getInputFiltersForDashboard, getLinksForDashboard, getColumnSelectionValidatorForDashboard } from \"../redux/index.js\";\nimport WidgetPanel from \"./WidgetPanel.js\";\nimport \"./IrisGridPanel.css\";\nimport IrisGridPanelTooltip from \"./IrisGridPanelTooltip.js\";\nimport { isIrisGridPanelMetadata, isLegacyIrisGridPanelMetadata } from \"./IrisGridPanelTypes.js\";\nimport { emitFilterColumnsChanged, emitFilterTableChanged } from \"../FilterEvents.js\";\nimport { emitLinkPointSelected, emitLinkSourceDataSelected } from \"../linker/LinkerEvent.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar log = Log.module('IrisGridPanel');\nvar DEBOUNCE_PANEL_STATE_UPDATE = 500;\n\n// Some of the properties in the loaded panel state may be omitted\n// even though they can't be undefined in the dehydrated state.\n// This can happen when loading the state saved before the properties were added.\n\nfunction getTableNameFromMetadata(metadata) {\n if (metadata == null) {\n throw new Error('No metadata provided');\n }\n if (isIrisGridPanelMetadata(metadata)) {\n return metadata.name;\n }\n if (isLegacyIrisGridPanelMetadata(metadata)) {\n return metadata.table;\n }\n throw new Error(\"Unable to determine table name from metadata: \".concat(JSON.stringify(metadata)));\n}\nexport class IrisGridPanel extends PureComponent {\n constructor(props) {\n super(props);\n _defineProperty(this, \"irisGrid\", void 0);\n _defineProperty(this, \"pluginRef\", void 0);\n _defineProperty(this, \"modelPromise\", void 0);\n _defineProperty(this, \"irisGridState\", void 0);\n _defineProperty(this, \"gridState\", void 0);\n _defineProperty(this, \"pluginState\", void 0);\n _defineProperty(this, \"irisGridUtils\", void 0);\n _defineProperty(this, \"gridStateDehydrator\", IrisGridCacheUtils.makeMemoizedGridStateDehydrator());\n _defineProperty(this, \"irisGridStateDehydrator\", IrisGridCacheUtils.makeMemoizedIrisGridStateDehydrator());\n _defineProperty(this, \"getGridInputFilters\", memoize((columns, inputFilters) => IrisGridUtils.getInputFiltersForColumns(columns,\n // They may have picked a column, but not actually entered a value yet. In that case, don't need to update.\n inputFilters.filter(_ref => {\n var {\n value,\n excludePanelIds\n } = _ref;\n var id = LayoutUtils.getIdFromPanel(this);\n return value != null && (excludePanelIds == null || id != null && !excludePanelIds.includes(id));\n }))));\n _defineProperty(this, \"getAlwaysFetchColumns\", memoize((dashboardLinks, pluginFetchColumns) => {\n var id = LayoutUtils.getIdFromPanel(this);\n // Always fetch columns which are the start/source of a link or columns specified by a plugin\n var columnSet = new Set(pluginFetchColumns);\n for (var i = 0; i < dashboardLinks.length; i += 1) {\n var {\n start\n } = dashboardLinks[i];\n if (start != null && start.panelId === id) {\n columnSet.add(start.columnName);\n }\n }\n return [...columnSet];\n }));\n _defineProperty(this, \"getPluginContent\", memoize((Plugin, model, pluginState) => {\n var _this$irisGrid$curren;\n if (!model || !isIrisGridTableModelTemplate(model) || Plugin == null || model.table == null) {\n return null;\n }\n\n // TODO #2093: Find a better way to handle deprecated panel prop\n var deprecatedProps = {\n panel: this\n };\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"iris-grid-plugin\",\n children: /*#__PURE__*/_jsx(Plugin, _objectSpread({\n ref: this.pluginRef,\n filter: this.handlePluginFilter,\n fetchColumns: this.handlePluginFetchColumns,\n model: model,\n table: model.table,\n tableName: this.getTableName(),\n selectedRanges: (_this$irisGrid$curren = this.irisGrid.current) === null || _this$irisGrid$curren === void 0 ? void 0 : _this$irisGrid$curren.state.selectedRanges,\n onStateChange: this.handlePluginStateChange,\n pluginState: pluginState\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, deprecatedProps))\n });\n }));\n _defineProperty(this, \"getDehydratedIrisGridPanelState\", memoize((model, isSelectingPartition, partitions, advancedSettings) => IrisGridUtils.dehydrateIrisGridPanelState(model, {\n isSelectingPartition,\n partitions,\n advancedSettings\n })));\n _defineProperty(this, \"getCachedPanelState\", memoize((irisGridPanelState, irisGridState, gridState, pluginState) => ({\n irisGridPanelState,\n irisGridState,\n gridState,\n pluginState\n })));\n _defineProperty(this, \"getWidgetPanelDescriptor\", memoize((metadata, description) => {\n var name = getTableNameFromMetadata(metadata);\n return _objectSpread(_objectSpread({\n type: 'Table',\n displayType: 'Table'\n }, metadata), {}, {\n name,\n description\n });\n }));\n _defineProperty(this, \"savePanelState\", debounce(() => {\n var {\n irisGridState,\n gridState,\n pluginState\n } = this;\n assertNotNull(irisGridState);\n var {\n onPanelStateUpdate\n } = this.props;\n var {\n model,\n panelState: oldPanelState,\n isSelectingPartition,\n partitions,\n advancedSettings\n } = this.state;\n assertNotNull(this.irisGridUtils);\n assertNotNull(model);\n assertNotNull(gridState);\n var panelState = this.getCachedPanelState(this.getDehydratedIrisGridPanelState(model, isSelectingPartition, partitions, advancedSettings), this.irisGridStateDehydrator(model, irisGridState), this.gridStateDehydrator(model, gridState), pluginState);\n if (panelState !== oldPanelState) {\n log.debug('Saving panel state', this, panelState);\n this.setState({\n panelState\n });\n onPanelStateUpdate === null || onPanelStateUpdate === void 0 || onPanelStateUpdate(panelState);\n }\n }, DEBOUNCE_PANEL_STATE_UPDATE));\n this.handleAdvancedSettingsChange = this.handleAdvancedSettingsChange.bind(this);\n this.handleColumnsChanged = this.handleColumnsChanged.bind(this);\n this.handleTableChanged = this.handleTableChanged.bind(this);\n this.handleColumnSelected = this.handleColumnSelected.bind(this);\n this.handleDataSelected = this.handleDataSelected.bind(this);\n this.handleError = this.handleError.bind(this);\n this.handleGridStateChange = this.handleGridStateChange.bind(this);\n this.handlePluginStateChange = this.handlePluginStateChange.bind(this);\n this.handleCreateChart = this.handleCreateChart.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleTabClicked = this.handleTabClicked.bind(this);\n this.handleDisconnect = this.handleDisconnect.bind(this);\n this.handleReconnect = this.handleReconnect.bind(this);\n this.handleLoadSuccess = this.handleLoadSuccess.bind(this);\n this.handleLoadError = this.handleLoadError.bind(this);\n this.isColumnSelectionValid = this.isColumnSelectionValid.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n this.handlePluginFilter = this.handlePluginFilter.bind(this);\n this.handlePluginFetchColumns = this.handlePluginFetchColumns.bind(this);\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n this.irisGrid = /*#__PURE__*/React.createRef();\n this.pluginRef = /*#__PURE__*/React.createRef();\n var {\n panelState: _panelState\n } = props;\n this.pluginState = null;\n this.irisGridUtils = null;\n this.state = {\n error: null,\n isDisconnected: false,\n isLoaded: false,\n isLoading: true,\n isModelReady: false,\n model: undefined,\n // State is hydrated from panel state when table is loaded\n advancedFilters: new Map(),\n aggregationSettings: {\n aggregations: [],\n showOnTop: false\n },\n advancedSettings: new Map(AdvancedSettings.DEFAULTS),\n customColumns: [],\n customColumnFormatMap: new Map(),\n columnAlignmentMap: new Map(),\n isFilterBarShown: false,\n quickFilters: new Map(),\n sorts: [],\n userColumnWidths: new Map(),\n userRowHeights: new Map(),\n reverse: false,\n movedColumns: [],\n movedRows: [],\n isSelectingPartition: false,\n partitions: [],\n rollupConfig: undefined,\n showSearchBar: false,\n searchValue: '',\n selectedSearchColumns: undefined,\n invertSearchColumns: true,\n Plugin: undefined,\n pluginFilters: [],\n pluginFetchColumns: [],\n modelQueue: [],\n pendingDataMap: new Map(),\n frozenColumns: undefined,\n // eslint-disable-next-line react/no-unused-state\n panelState: _panelState,\n // Dehydrated panel state that can load this panel\n irisGridStateOverrides: {},\n gridStateOverrides: {},\n isStuckToBottom: false,\n isStuckToRight: false,\n conditionalFormats: [],\n selectDistinctColumns: []\n };\n }\n componentDidMount() {\n this.initModel();\n }\n componentDidUpdate(prevProps, prevState) {\n var {\n model\n } = this.state;\n var {\n makeModel\n } = this.props;\n if (model !== prevState.model) {\n if (prevState.model != null) {\n this.stopModelListening(prevState.model);\n prevState.model.close();\n }\n if (model != null) {\n this.startModelListening(model);\n }\n }\n if (makeModel !== prevProps.makeModel) {\n this.initModel();\n }\n }\n componentWillUnmount() {\n this.savePanelState.cancel();\n if (this.modelPromise != null) {\n this.modelPromise.cancel();\n this.modelPromise = undefined;\n }\n var {\n model\n } = this.state;\n if (model) {\n this.stopModelListening(model);\n model.close();\n }\n }\n getTableName() {\n var {\n metadata\n } = this.props;\n return getTableNameFromMetadata(metadata);\n }\n initModel() {\n this.setState({\n isModelReady: false,\n isLoading: true,\n error: null,\n isDisconnected: false\n });\n var {\n makeModel\n } = this.props;\n if (this.modelPromise != null) {\n this.modelPromise.cancel();\n }\n this.modelPromise = PromiseUtils.makeCancelable(makeModel(), resolved => resolved.close());\n this.modelPromise.then(this.handleLoadSuccess).catch(this.handleLoadError);\n }\n handleLoadSuccess(modelParam) {\n var model = modelParam;\n var {\n panelState,\n irisGridStateOverrides\n } = this.state;\n var modelQueue = [];\n this.irisGridUtils = new IrisGridUtils(model.dh);\n if (panelState != null) {\n var {\n irisGridState\n } = panelState;\n var {\n aggregationSettings,\n customColumns,\n selectDistinctColumns = [],\n rollupConfig\n } = _objectSpread(_objectSpread({}, irisGridState), irisGridStateOverrides);\n if (customColumns.length > 0) {\n modelQueue.push(m => {\n // eslint-disable-next-line no-param-reassign\n m.customColumns = customColumns;\n });\n }\n if (rollupConfig != null && rollupConfig.columns.length > 0) {\n // originalColumns might change by the time this model queue item is applied.\n // Instead of pushing a static object, push the function\n // that calculates the config based on the updated model state.\n modelQueue.push(m => {\n // eslint-disable-next-line no-param-reassign\n m.rollupConfig = IrisGridUtils.getModelRollupConfig(m.originalColumns, rollupConfig, aggregationSettings);\n });\n }\n if (selectDistinctColumns.length > 0) {\n modelQueue.push(m => {\n // eslint-disable-next-line no-param-reassign\n m.selectDistinctColumns = selectDistinctColumns;\n });\n }\n }\n this.setState({\n model,\n modelQueue\n });\n this.initModelQueue(model, modelQueue);\n }\n initModelQueue(modelParam, modelQueue) {\n var model = modelParam;\n if (modelQueue.length === 0) {\n this.modelInitialized(model);\n return;\n }\n var modelChange = modelQueue.shift();\n log.debug('initModelQueue', modelChange);\n // Apply next model change. Triggers columnschanged event.\n if (modelChange) {\n modelChange(model);\n }\n this.setState({\n modelQueue\n });\n }\n handleAdvancedSettingsChange(key, value) {\n log.debug('handleAdvancedSettingsChange', key, value);\n this.setState(_ref2 => {\n var {\n advancedSettings\n } = _ref2;\n return advancedSettings.get(key) === value ? null : {\n advancedSettings: new Map(advancedSettings).set(key, value)\n };\n });\n }\n handlePluginFilter(filters) {\n var _this$irisGridUtils$g, _this$irisGridUtils;\n var {\n model\n } = this.state;\n assertNotNull(model);\n var {\n columns,\n formatter\n } = model;\n var pluginFilters = (_this$irisGridUtils$g = (_this$irisGridUtils = this.irisGridUtils) === null || _this$irisGridUtils === void 0 ? void 0 : _this$irisGridUtils.getFiltersFromInputFilters(columns, filters, formatter.timeZone)) !== null && _this$irisGridUtils$g !== void 0 ? _this$irisGridUtils$g : [];\n this.setState({\n pluginFilters\n });\n }\n handlePluginFetchColumns(pluginFetchColumns) {\n this.setState({\n pluginFetchColumns\n });\n }\n handleContextMenu(data) {\n var _this$pluginRef$curre, _this$pluginRef$curre2, _this$pluginRef$curre3;\n return (_this$pluginRef$curre = (_this$pluginRef$curre2 = this.pluginRef.current) === null || _this$pluginRef$curre2 === void 0 || (_this$pluginRef$curre3 = _this$pluginRef$curre2.getMenu) === null || _this$pluginRef$curre3 === void 0 ? void 0 : _this$pluginRef$curre3.call(_this$pluginRef$curre2, data)) !== null && _this$pluginRef$curre !== void 0 ? _this$pluginRef$curre : [];\n }\n isColumnSelectionValid(tableColumn) {\n var {\n columnSelectionValidator\n } = this.props;\n if (columnSelectionValidator && tableColumn) {\n return columnSelectionValidator(this, tableColumn, {\n type: 'tableLink'\n });\n }\n return false;\n }\n handleGridStateChange(irisGridState, gridState) {\n this.irisGridState = irisGridState;\n this.gridState = gridState;\n\n // Grid sends it's first state change after it's finished loading\n this.setState({\n isLoaded: true,\n isLoading: false\n });\n this.savePanelState();\n var {\n glEventHub,\n onStateChange\n } = this.props;\n glEventHub.emit(IrisGridEvent.STATE_CHANGED, this);\n onStateChange === null || onStateChange === void 0 || onStateChange(irisGridState, gridState);\n }\n handlePluginStateChange(pluginState) {\n var {\n irisGridState,\n gridState\n } = this;\n this.pluginState = pluginState;\n // Do not save if there is null state\n // The save will happen when the grid loads\n if (irisGridState !== null && gridState !== null) {\n this.savePanelState();\n }\n }\n handleColumnsChanged(event) {\n var {\n isModelReady,\n model,\n modelQueue\n } = this.state;\n if (isModelReady) {\n this.sendColumnsChange(event.detail);\n } else {\n assertNotNull(model);\n this.initModelQueue(model, modelQueue);\n }\n }\n handleTableChanged(event) {\n log.debug('handleTableChanged', event);\n var {\n glEventHub\n } = this.props;\n var {\n detail: table\n } = event;\n var panelId = LayoutUtils.getIdFromPanel(this);\n assertNotNull(panelId);\n emitFilterTableChanged(glEventHub, panelId, table);\n }\n\n /**\n * Create a chart with the specified settings\n * @param settings The settings from the chart builder\n * @param settings.type The settings from the chart builder\n * @param settings.series The names of the series\n * @param model The IrisGridModel object\n */\n handleCreateChart(settings, model) {\n // Panel state is stored with the created chart, so flush it first\n this.savePanelState.flush();\n this.setState(() => null, () => {\n var {\n glEventHub,\n inputFilters,\n metadata\n } = this.props;\n var table = this.getTableName();\n var {\n panelState\n } = this.state;\n var sourcePanelId = LayoutUtils.getIdFromPanel(this);\n var tableSettings;\n if (panelState) {\n tableSettings = IrisGridUtils.extractTableSettings(panelState, inputFilters);\n }\n glEventHub.emit(IrisGridEvent.CREATE_CHART, {\n metadata: _objectSpread(_objectSpread({}, metadata), {}, {\n settings,\n sourcePanelId,\n table,\n tableSettings\n }),\n table: isIrisGridTableModelTemplate(model) ? model.table : undefined\n });\n });\n }\n handleColumnSelected(column) {\n var {\n glEventHub\n } = this.props;\n var panelId = LayoutUtils.getIdFromPanel(this);\n assertNotNull(panelId);\n emitLinkPointSelected(glEventHub, panelId, column, {\n type: 'tableLink'\n });\n }\n handleDataSelected(row, dataMap) {\n var {\n glEventHub\n } = this.props;\n var panelId = LayoutUtils.getIdFromPanel(this);\n assertNotNull(panelId);\n emitLinkSourceDataSelected(glEventHub, panelId, dataMap);\n }\n handleShow() {\n this.updateGrid();\n }\n handleTabClicked() {\n if (this.irisGrid.current) {\n this.irisGrid.current.focus();\n }\n }\n handleError(error) {\n log.error(error);\n this.setState({\n error,\n isLoading: false\n });\n }\n handleDisconnect() {\n this.setState({\n error: new Error('Table disconnected'),\n isDisconnected: true,\n isLoading: false\n });\n }\n handleReconnect() {\n this.setState({\n isDisconnected: false,\n error: null\n });\n }\n handleLoadError(error) {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n this.handleError(error);\n }\n modelInitialized(model) {\n var {\n glEventHub,\n loadPlugin\n } = this.props;\n this.modelPromise = undefined;\n\n // Custom columns at this point already initialized, can load state\n this.loadPanelState(model);\n this.setState({\n isModelReady: true\n });\n if (isIrisGridTableModelTemplate(model)) {\n var {\n table\n } = model;\n var {\n pluginName\n } = table;\n if (pluginName !== '') {\n if (loadPlugin != null && pluginName != null) {\n var Plugin = loadPlugin(pluginName);\n this.setState({\n Plugin\n });\n }\n }\n var panelId = LayoutUtils.getIdFromPanel(this);\n assertNotNull(panelId);\n emitFilterTableChanged(glEventHub, panelId, table);\n }\n this.sendColumnsChange(model.columns);\n }\n handleClearAllFilters() {\n var irisGrid = this.irisGrid.current;\n var {\n isDisconnected\n } = this.state;\n if (irisGrid != null && !isDisconnected) {\n irisGrid.clearAllFilters();\n }\n }\n sendColumnsChange(columns) {\n log.debug2('sendColumnsChange', columns);\n var {\n glEventHub\n } = this.props;\n var panelId = LayoutUtils.getIdFromPanel(this);\n assertNotNull(panelId);\n emitFilterColumnsChanged(glEventHub, panelId, columns);\n }\n startModelListening(model) {\n model.addEventListener(IrisGridModel.EVENT.DISCONNECT, this.handleDisconnect);\n model.addEventListener(IrisGridModel.EVENT.RECONNECT, this.handleReconnect);\n model.addEventListener(IrisGridModel.EVENT.COLUMNS_CHANGED, this.handleColumnsChanged);\n model.addEventListener(IrisGridModel.EVENT.TABLE_CHANGED, this.handleTableChanged);\n }\n stopModelListening(model) {\n model.removeEventListener(IrisGridModel.EVENT.DISCONNECT, this.handleDisconnect);\n model.removeEventListener(IrisGridModel.EVENT.RECONNECT, this.handleReconnect);\n model.removeEventListener(IrisGridModel.EVENT.COLUMNS_CHANGED, this.handleColumnsChanged);\n model.removeEventListener(IrisGridModel.EVENT.TABLE_CHANGED, this.handleTableChanged);\n }\n getCoordinateForColumn(columnName) {\n var _gridWrapper$getBound, _allColumnXs$get, _allColumnWidths$get;\n var {\n model\n } = this.state;\n if (!model) {\n return null;\n }\n var irisGrid = this.irisGrid.current;\n var {\n gridWrapper\n } = irisGrid || {};\n var rect = (_gridWrapper$getBound = gridWrapper === null || gridWrapper === void 0 ? void 0 : gridWrapper.getBoundingClientRect()) !== null && _gridWrapper$getBound !== void 0 ? _gridWrapper$getBound : null;\n if (rect == null || rect.width <= 0 || rect.height <= 0) {\n return null;\n }\n assertNotNull(irisGrid);\n var {\n metrics\n } = irisGrid.state;\n assertNotNull(metrics);\n var {\n columnHeaderHeight,\n allColumnXs,\n allColumnWidths,\n right,\n columnHeaderMaxDepth\n } = metrics;\n var columnIndex = model.getColumnIndexByName(columnName);\n assertNotNull(columnIndex);\n var visibleIndex = irisGrid.getVisibleColumn(columnIndex);\n var columnX = (_allColumnXs$get = allColumnXs.get(visibleIndex)) !== null && _allColumnXs$get !== void 0 ? _allColumnXs$get : 0;\n var columnWidth = (_allColumnWidths$get = allColumnWidths.get(visibleIndex)) !== null && _allColumnWidths$get !== void 0 ? _allColumnWidths$get : 0;\n var x = clamp(visibleIndex > right ? rect.right : rect.left + columnX + columnWidth * 0.5, rect.left, rect.right);\n var y = rect.top + columnHeaderHeight * columnHeaderMaxDepth;\n return [x, y];\n }\n setFilterMap(filterMap) {\n var irisGrid = this.irisGrid.current;\n if (irisGrid != null) {\n irisGrid.setFilterMap(filterMap);\n }\n }\n setAdvancedFilterMap(filterMap) {\n var irisGrid = this.irisGrid.current;\n if (irisGrid != null) {\n irisGrid.setAdvancedFilterMap(filterMap);\n }\n }\n setFilters(_ref3) {\n var {\n quickFilters,\n advancedFilters\n } = _ref3;\n log.debug('setFilters', quickFilters, advancedFilters);\n var {\n model,\n isDisconnected\n } = this.state;\n var irisGrid = this.irisGrid.current;\n if (irisGrid == null || isDisconnected) {\n log.debug('Ignore setFilters, model disconnected');\n return;\n }\n assertNotNull(model);\n var {\n columns,\n formatter\n } = model;\n var indexedQuickFilters = IrisGridUtils.changeFilterColumnNamesToIndexes(model.columns, quickFilters).filter(_ref4 => {\n var [columnIndex] = _ref4;\n return model.isFilterable(columnIndex);\n });\n var indexedAdvancedFilters = IrisGridUtils.changeFilterColumnNamesToIndexes(model.columns, advancedFilters).filter(_ref5 => {\n var [columnIndex] = _ref5;\n return model.isFilterable(columnIndex);\n });\n assertNotNull(this.irisGridUtils);\n irisGrid.clearAllFilters();\n irisGrid.setFilters({\n quickFilters: this.irisGridUtils.hydrateQuickFilters(columns, indexedQuickFilters, formatter.timeZone),\n advancedFilters: this.irisGridUtils.hydrateAdvancedFilters(columns, indexedAdvancedFilters, formatter.timeZone)\n });\n }\n setStateOverrides(overrides) {\n log.debug('setStateOverrides', overrides);\n var {\n irisGridState: irisGridStateOverrides,\n gridState: gridStateOverrides\n } = overrides;\n this.setState({\n irisGridStateOverrides,\n gridStateOverrides\n }, () => {\n this.initModel();\n });\n }\n\n // eslint-disable-next-line class-methods-use-this\n unsetFilterValue() {\n // IrisGridPanel retains the set value after the link is broken\n // We need to define this so LinkerUtils#isLinkablePanel passes the check\n }\n loadPanelState(model) {\n var {\n panelState,\n irisGridStateOverrides: originalIrisGridStateOverrides,\n gridStateOverrides\n } = this.state;\n if (panelState == null) {\n return;\n }\n try {\n var {\n gridState,\n irisGridState,\n irisGridPanelState\n } = panelState;\n var irisGridStateOverrides = _objectSpread({}, originalIrisGridStateOverrides);\n var {\n quickFilters: savedQuickFilters,\n advancedFilters: savedAdvancedFilters\n } = irisGridStateOverrides;\n if (savedQuickFilters) {\n irisGridStateOverrides.quickFilters = IrisGridUtils.changeFilterColumnNamesToIndexes(model.columns, savedQuickFilters);\n }\n if (savedAdvancedFilters) {\n irisGridStateOverrides.advancedFilters = IrisGridUtils.changeFilterColumnNamesToIndexes(model.columns, savedAdvancedFilters);\n }\n var {\n isSelectingPartition,\n partitions,\n advancedSettings\n } = IrisGridUtils.hydrateIrisGridPanelState(model, irisGridPanelState);\n assertNotNull(this.irisGridUtils);\n var {\n advancedFilters,\n customColumns,\n customColumnFormatMap,\n columnAlignmentMap,\n isFilterBarShown,\n quickFilters,\n reverse,\n rollupConfig,\n aggregationSettings,\n sorts,\n // TODO:\n // DH-20403: IrisGrid should persist user column widths when the model initializes with a partial column list\n userColumnWidths,\n userRowHeights,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns,\n pendingDataMap,\n frozenColumns,\n conditionalFormats,\n columnHeaderGroups,\n partitionConfig\n } = this.irisGridUtils.hydrateIrisGridState(model, _objectSpread(_objectSpread({}, irisGridState), irisGridStateOverrides));\n var {\n isStuckToBottom,\n isStuckToRight,\n movedColumns,\n movedRows\n } = IrisGridUtils.hydrateGridState(model, _objectSpread(_objectSpread({}, gridState), gridStateOverrides), irisGridState.customColumns);\n this.setState({\n advancedFilters,\n advancedSettings,\n conditionalFormats,\n customColumns,\n customColumnFormatMap,\n columnAlignmentMap,\n isFilterBarShown,\n isSelectingPartition,\n movedColumns,\n movedRows,\n partitions,\n quickFilters,\n reverse,\n rollupConfig,\n aggregationSettings,\n sorts,\n userColumnWidths,\n userRowHeights,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns,\n pendingDataMap,\n frozenColumns,\n isStuckToBottom,\n isStuckToRight,\n columnHeaderGroups,\n partitionConfig\n });\n } catch (error) {\n log.error('loadPanelState failed to load panelState', panelState, error);\n }\n }\n updateGrid() {\n var _this$irisGrid$curren2, _this$irisGrid$curren3;\n var grid = (_this$irisGrid$curren2 = (_this$irisGrid$curren3 = this.irisGrid.current) === null || _this$irisGrid$curren3 === void 0 ? void 0 : _this$irisGrid$curren3.grid) !== null && _this$irisGrid$curren2 !== void 0 ? _this$irisGrid$curren2 : null;\n if (!grid) return;\n\n // handle resize will verify state and draw and update\n grid.handleResize();\n }\n render() {\n var _model$description, _panelState$pluginSta;\n var {\n children,\n glContainer,\n glEventHub,\n columnSelectionValidator,\n getDownloadWorker,\n inputFilters,\n links,\n metadata,\n mouseHandlers,\n panelState,\n user,\n renderer,\n settings,\n getMetricCalculator,\n theme\n } = this.props;\n var {\n advancedFilters,\n aggregationSettings,\n advancedSettings,\n conditionalFormats,\n customColumns,\n customColumnFormatMap,\n columnAlignmentMap,\n error,\n isDisconnected,\n isFilterBarShown,\n isSelectingPartition,\n isStuckToBottom,\n isStuckToRight,\n isLoaded,\n isLoading,\n isModelReady,\n model,\n movedColumns,\n movedRows,\n partitions,\n partitionConfig,\n quickFilters,\n reverse,\n rollupConfig,\n sorts,\n userColumnWidths,\n userRowHeights,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns,\n Plugin,\n pluginFilters,\n pluginFetchColumns,\n pendingDataMap,\n frozenColumns,\n columnHeaderGroups\n } = this.state;\n var errorMessage = error != null ? \"Unable to open table. \".concat(error) : undefined;\n var description = (_model$description = model === null || model === void 0 ? void 0 : model.description) !== null && _model$description !== void 0 ? _model$description : undefined;\n var pluginState = (_panelState$pluginSta = panelState === null || panelState === void 0 ? void 0 : panelState.pluginState) !== null && _panelState$pluginSta !== void 0 ? _panelState$pluginSta : null;\n var childrenContent = children !== null && children !== void 0 ? children : this.getPluginContent(Plugin, model, pluginState);\n var {\n permissions\n } = user;\n var {\n canCopy,\n canDownloadCsv\n } = permissions;\n var widgetPanelDescriptor = this.getWidgetPanelDescriptor(metadata, description);\n return /*#__PURE__*/_jsx(WidgetPanel, {\n errorMessage: errorMessage,\n isDisconnected: isDisconnected,\n isLoading: isLoading,\n isLoaded: isLoaded,\n className: \"iris-grid-panel\",\n glContainer: glContainer,\n glEventHub: glEventHub,\n onClearAllFilters: this.handleClearAllFilters,\n onShow: this.handleShow,\n onTabFocus: this.handleShow,\n onTabClicked: this.handleTabClicked,\n componentPanel: this,\n descriptor: widgetPanelDescriptor,\n renderTabTooltip: () => /*#__PURE__*/_jsx(IrisGridPanelTooltip, {\n descriptor: widgetPanelDescriptor,\n model: model\n }),\n children: isModelReady && model && /*#__PURE__*/_jsx(IrisGrid, {\n advancedFilters: advancedFilters,\n aggregationSettings: aggregationSettings,\n advancedSettings: advancedSettings,\n alwaysFetchColumns: this.getAlwaysFetchColumns(links, pluginFetchColumns),\n columnAllowedCursor: \"linker\",\n columnNotAllowedCursor: \"linker-not-allowed\",\n copyCursor: \"copy\",\n customColumns: customColumns,\n customColumnFormatMap: customColumnFormatMap,\n columnAlignmentMap: columnAlignmentMap,\n columnSelectionValidator: this.isColumnSelectionValid,\n conditionalFormats: conditionalFormats,\n inputFilters: this.getGridInputFilters(model.columns, inputFilters),\n applyInputFiltersOnInit: panelState == null,\n isFilterBarShown: isFilterBarShown,\n isSelectingColumn: columnSelectionValidator != null,\n isSelectingPartition: isSelectingPartition,\n isStuckToBottom: isStuckToBottom,\n isStuckToRight: isStuckToRight,\n mouseHandlers: mouseHandlers,\n movedColumns: movedColumns,\n movedRows: movedRows,\n partitions: partitions,\n partitionConfig: partitionConfig,\n quickFilters: quickFilters,\n renderer: renderer,\n reverse: reverse,\n rollupConfig: rollupConfig,\n settings: settings,\n sorts: sorts,\n userColumnWidths: userColumnWidths,\n userRowHeights: userRowHeights,\n model: model,\n showSearchBar: showSearchBar,\n searchValue: searchValue,\n selectedSearchColumns: selectedSearchColumns,\n selectDistinctColumns: selectDistinctColumns,\n invertSearchColumns: invertSearchColumns,\n onColumnSelected: this.handleColumnSelected,\n onCreateChart: this.handleCreateChart,\n onDataSelected: this.handleDataSelected,\n onError: this.handleError,\n onStateChange: this.handleGridStateChange,\n onContextMenu: this.handleContextMenu,\n onAdvancedSettingsChange: this.handleAdvancedSettingsChange,\n customFilters: pluginFilters,\n pendingDataMap: pendingDataMap,\n canCopy: canCopy,\n canDownloadCsv: canDownloadCsv,\n ref: this.irisGrid,\n getDownloadWorker: getDownloadWorker,\n frozenColumns: frozenColumns,\n theme: theme,\n columnHeaderGroups: columnHeaderGroups,\n getMetricCalculator: getMetricCalculator,\n children: childrenContent\n })\n });\n }\n}\n_defineProperty(IrisGridPanel, \"defaultProps\", {\n onStateChange: () => undefined,\n onPanelStateUpdate: () => undefined\n});\n_defineProperty(IrisGridPanel, \"displayName\", 'IrisGridPanel');\n_defineProperty(IrisGridPanel, \"COMPONENT\", 'IrisGridPanel');\nvar mapStateToProps = (state, _ref6) => {\n var {\n localDashboardId = DEFAULT_DASHBOARD_ID,\n glContainer\n } = _ref6;\n return {\n inputFilters: getInputFiltersForDashboard(state, localDashboardId),\n links: getLinksForDashboard(state, localDashboardId),\n columnSelectionValidator: getColumnSelectionValidatorForDashboard(state, localDashboardId),\n user: getUser(state),\n settings: getSettings(state)\n };\n};\nvar ConnectedIrisGridPanel = connect(mapStateToProps, null, null, {\n forwardRef: true\n})(IrisGridPanel);\nexport default ConnectedIrisGridPanel;\n//# sourceMappingURL=IrisGridPanel.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint-disable jsx-a11y/click-events-have-key-events */\n/* eslint-disable jsx-a11y/no-static-element-interactions */\n// background click is just a convience method, not an actual a11y issue\n\nimport React, { Component } from 'react';\nimport { Button, CardFlip, Select } from '@deephaven/components';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsGear } from '@deephaven/icons';\nimport memoizee from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport Log from '@deephaven/log';\nimport \"./InputFilter.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('InputFilter');\nvar UPDATE_DEBOUNCE = 150;\nclass InputFilter extends Component {\n constructor(props) {\n super(props);\n _defineProperty(this, \"inputRef\", void 0);\n _defineProperty(this, \"getItemLabel\", memoizee((columns, index) => {\n var {\n name,\n type\n } = columns[index];\n if (index > 0 && columns[index - 1].name === name || index < columns.length - 1 && columns[index + 1].name === name) {\n var shortType = type.substring(type.lastIndexOf('.') + 1);\n return \"\".concat(name, \" (\").concat(shortType, \")\");\n }\n return name;\n }, {\n max: 1000\n }));\n _defineProperty(this, \"sendUpdate\", debounce(() => {\n var {\n onChange\n } = this.props;\n var {\n column,\n value,\n isValueShown\n } = this.state;\n onChange({\n column,\n isValueShown,\n value\n });\n }, UPDATE_DEBOUNCE));\n this.handleColumnChange = this.handleColumnChange.bind(this);\n this.handleInputKeyPress = this.handleInputKeyPress.bind(this);\n this.handleValueChange = this.handleValueChange.bind(this);\n this.handleSettingsCancel = this.handleSettingsCancel.bind(this);\n this.handleSettingsClick = this.handleSettingsClick.bind(this);\n this.handleSettingsSave = this.handleSettingsSave.bind(this);\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n this.inputRef = /*#__PURE__*/React.createRef();\n var {\n column: _column,\n isValueShown: _isValueShown,\n value: _value\n } = props;\n this.state = {\n column: _column,\n selectedColumn: _column,\n value: _value,\n isValueShown: _isValueShown\n };\n }\n componentDidUpdate(prevProps, prevState) {\n var {\n column: propColumn\n } = this.props;\n var {\n column,\n value,\n isValueShown\n } = this.state;\n if (propColumn !== prevProps.column) {\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({\n column: propColumn,\n selectedColumn: propColumn\n });\n }\n if (isValueShown !== undefined && isValueShown && isValueShown !== prevState.isValueShown) {\n this.focusInput();\n }\n if (column !== prevState.column || value !== prevState.value || isValueShown !== prevState.isValueShown) {\n this.sendUpdate();\n }\n }\n componentWillUnmount() {\n this.sendUpdate.flush();\n }\n handleColumnChange(eventTargetValue) {\n var {\n columns\n } = this.props;\n var selectedColumn = columns[parseInt(eventTargetValue, 10)];\n log.debug2('handleColumnChange', selectedColumn);\n this.setState({\n selectedColumn,\n value: undefined\n });\n }\n handleInputKeyPress(event) {\n if (event.key === 'Enter') {\n event.preventDefault();\n event.stopPropagation();\n this.setState(_ref => {\n var {\n value\n } = _ref;\n return value == null ? {\n value: ''\n } : null;\n }, () => {\n this.sendUpdate();\n this.sendUpdate.flush();\n });\n }\n }\n handleValueChange(event) {\n var {\n value\n } = event.target;\n log.debug2('handleValueChange', value);\n this.setState({\n value\n });\n }\n handleSettingsCancel() {\n var {\n column\n } = this.state;\n this.setState({\n selectedColumn: column,\n isValueShown: true\n });\n }\n handleSettingsSave() {\n var {\n selectedColumn\n } = this.state;\n this.setState({\n column: selectedColumn,\n isValueShown: true\n });\n }\n handleSettingsClick(event) {\n var {\n column\n } = this.state;\n this.setState({\n selectedColumn: column,\n isValueShown: false\n });\n event.stopPropagation();\n }\n handleBackgroundClick(event) {\n // allow clicking anywhere in the background to select and focus the input\n if (event.target !== this.inputRef.current) {\n this.focusInput();\n }\n }\n focusInput() {\n if (this.inputRef.current !== null) {\n this.inputRef.current.select();\n this.inputRef.current.focus();\n }\n }\n clearFilter() {\n this.setState({\n value: ''\n });\n }\n setFilterState(_ref2) {\n var {\n name,\n type,\n value,\n isValueShown\n } = _ref2;\n var column = name != null && type != null ? {\n name,\n type\n } : undefined;\n var update = isValueShown === undefined ? {\n column,\n value\n } : {\n column,\n value,\n isValueShown\n };\n this.setState(update);\n }\n render() {\n var {\n columns\n } = this.props;\n var {\n column,\n isValueShown,\n selectedColumn,\n value\n } = this.state;\n var inputLength = value == null || value.length === 0 ? InputFilter.PLACEHOLDER.length : value.length;\n var titleLabel = null;\n if (column != null) {\n var columnIndex = columns.findIndex(item => item.name === column.name && item.type === column.type);\n titleLabel = columnIndex >= 0 ? this.getItemLabel(columns, columnIndex) : column.name;\n }\n return /*#__PURE__*/_jsxs(CardFlip, {\n className: \"input-filter fill-parent-absolute\",\n isFlipped: isValueShown !== null && isValueShown !== void 0 ? isValueShown : false,\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"input-filter-settings-card\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"input-filter-settings-content\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"input-filter-settings-grid\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n children: \"Filter Column\"\n }), /*#__PURE__*/_jsxs(Select, {\n value: String(columns.findIndex(item => item.name === (selectedColumn === null || selectedColumn === void 0 ? void 0 : selectedColumn.name) && item.type === (selectedColumn === null || selectedColumn === void 0 ? void 0 : selectedColumn.type))),\n className: \"custom-select\",\n onChange: this.handleColumnChange,\n children: [columns.map((columnItem, index) => /*#__PURE__*/_jsx(\"option\", {\n value: index,\n children: this.getItemLabel(columns, index)\n }, \"\".concat(columnItem.name, \"/\").concat(columnItem.type))), columns.length === 0 && /*#__PURE__*/_jsx(\"option\", {\n value: \"-1\",\n disabled: true,\n children: \"No Available Columns\"\n })]\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"text-muted small\",\n children: \"Input filter control will apply its filter to all columns matching this name in this dashboard.\"\n })]\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"input-filter-settings-buttons\",\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"secondary\",\n onClick: this.handleSettingsCancel,\n disabled: column == null,\n children: \"Cancel\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"primary\",\n className: \"ml-2\",\n onClick: this.handleSettingsSave,\n disabled: selectedColumn == null,\n children: \"Save\"\n })]\n })]\n })\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"input-filter-value-card\",\n onClick: this.handleBackgroundClick,\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"input-filter-column\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"input-filter-column-title\",\n children: [titleLabel, \" Filter\"]\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"d-flex justify-content-center align-items-center h-100 w-100\",\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"input-filter-value-input d-flex flex-column justify-content-center\",\n children: /*#__PURE__*/_jsx(\"input\", {\n type: \"text\",\n ref: this.inputRef,\n placeholder: InputFilter.PLACEHOLDER,\n value: value !== null && value !== void 0 ? value : '',\n onChange: this.handleValueChange,\n onKeyPress: this.handleInputKeyPress,\n style: {\n width: \"\".concat(inputLength + 3, \"ch\")\n },\n spellCheck: \"false\"\n })\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"input-filter-menu\",\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"m-2 px-2\",\n onClick: this.handleSettingsClick,\n icon: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsGear,\n transform: \"grow-4\"\n }),\n tooltip: \"Input Filter Settings\"\n })\n })]\n })]\n });\n }\n}\n_defineProperty(InputFilter, \"PLACEHOLDER\", 'Enter value...');\n_defineProperty(InputFilter, \"defaultProps\", {\n column: null,\n isValueShown: false,\n value: null\n});\nexport default InputFilter;\n//# sourceMappingURL=InputFilter.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport debounce from 'lodash.debounce';\nimport { LayoutUtils } from '@deephaven/dashboard';\nimport { assertNotNull } from '@deephaven/utils';\nimport Panel from \"./CorePanel.js\";\nimport InputFilter from \"../controls/input-filter/InputFilter.js\";\nimport { getColumnsForDashboard } from \"../redux/index.js\";\nimport { emitFilterChanged } from \"../FilterEvents.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar INPUT_FILTER_DEBOUNCE = 250;\nclass InputFilterPanel extends Component {\n constructor(props) {\n super(props);\n _defineProperty(this, \"inputFilterRef\", void 0);\n this.handleChange = debounce(this.handleChange.bind(this), INPUT_FILTER_DEBOUNCE);\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n this.inputFilterRef = /*#__PURE__*/React.createRef();\n var {\n panelState\n } = props;\n // if panelstate is null, use destructured defaults\n var {\n value,\n isValueShown = false,\n name,\n type,\n timestamp = Date.now()\n } = panelState !== null && panelState !== void 0 ? panelState : {};\n this.state = {\n columns: [],\n column: name != null && type != null ? {\n name,\n type\n } : undefined,\n value,\n timestamp,\n isValueShown,\n wasFlipped: false,\n skipUpdate: false,\n // eslint-disable-next-line react/no-unused-state\n panelState // Dehydrated panel state that can load this panel\n };\n }\n componentDidMount() {\n this.updateColumns();\n var {\n column,\n value,\n timestamp\n } = this.state;\n if (column != null) {\n var {\n name,\n type\n } = column;\n this.sendUpdate(name, type, value, timestamp);\n }\n }\n componentDidUpdate(prevProps) {\n var {\n columns\n } = this.props;\n if (columns !== prevProps.columns) {\n this.updateColumns();\n }\n }\n handleChange(_ref) {\n var {\n column,\n isValueShown = false,\n value\n } = _ref;\n var name;\n var type;\n if (column != null) {\n ({\n name,\n type\n } = column);\n }\n var sendUpdate = true;\n var timestamp = Date.now();\n this.setState(_ref2 => {\n var _ref3;\n var {\n panelState,\n timestamp: prevTimestamp,\n wasFlipped,\n skipUpdate\n } = _ref2;\n // If the user had a value set, and they flip the card over and flip it back without changing any settings, ignore it\n var isFlip = panelState != null && isValueShown !== panelState.isValueShown && name === panelState.name && type === panelState.type && value === panelState.value;\n sendUpdate = (_ref3 = !skipUpdate && isValueShown && (!isFlip || !wasFlipped)) !== null && _ref3 !== void 0 ? _ref3 : false;\n if (!sendUpdate) {\n timestamp = prevTimestamp;\n }\n return {\n panelState: {\n isValueShown,\n name,\n type,\n value,\n timestamp\n },\n timestamp,\n wasFlipped: isFlip,\n skipUpdate: false\n };\n }, () => {\n if (sendUpdate) {\n this.sendUpdate(name, type, value, timestamp);\n }\n });\n }\n handleClearAllFilters() {\n var _this$inputFilterRef$;\n (_this$inputFilterRef$ = this.inputFilterRef.current) === null || _this$inputFilterRef$ === void 0 || _this$inputFilterRef$.clearFilter();\n }\n sendUpdate(name, type, value, timestamp) {\n var {\n glEventHub\n } = this.props;\n var panelId = LayoutUtils.getIdFromPanel(this);\n assertNotNull(panelId);\n emitFilterChanged(glEventHub, panelId, name != null && type != null && value != null && timestamp != null ? {\n name,\n type,\n value,\n timestamp\n } : null);\n }\n\n /**\n * Set the filter value, card side, selected column\n * @param state Filter state to set\n * @param sendUpdate Emit filters changed event if true\n */\n setPanelState(state) {\n var _this$inputFilterRef$2;\n var sendUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n // Set the skipUpdate flag so the next onChange handler call doesn't emit the FILTERS_CHANGED event\n this.setState({\n skipUpdate: !sendUpdate\n });\n\n // Changing the inputFilter state via props doesn't quite work because of the delays on manual input changes\n // Setting the ref state directly triggers the onChange handler and updates the panelState\n (_this$inputFilterRef$2 = this.inputFilterRef.current) === null || _this$inputFilterRef$2 === void 0 || _this$inputFilterRef$2.setFilterState(state);\n }\n updateColumns() {\n var {\n columns\n } = this.props;\n if (columns == null) {\n return;\n }\n this.setState(state => {\n var {\n column\n } = state;\n if (column == null && columns.length > 0) {\n return {\n columns: [...columns],\n column: columns[0]\n };\n }\n if (column != null && !columns.find(_ref4 => {\n var {\n name,\n type\n } = _ref4;\n return column.name === name && column.type === type;\n })) {\n return {\n columns: [...columns, column]\n };\n }\n return {\n columns: [...columns]\n };\n });\n }\n render() {\n var {\n glContainer,\n glEventHub\n } = this.props;\n var {\n column,\n columns,\n isValueShown,\n value\n } = this.state;\n return /*#__PURE__*/_jsx(Panel, {\n className: \"iris-input-filter-panel\",\n componentPanel: this,\n glContainer: glContainer,\n glEventHub: glEventHub,\n onClearAllFilters: this.handleClearAllFilters,\n isClonable: true,\n isRenamable: true,\n children: /*#__PURE__*/_jsx(InputFilter, {\n ref: this.inputFilterRef,\n column: column,\n columns: columns,\n onChange: this.handleChange,\n isValueShown: isValueShown,\n value: value\n })\n });\n }\n}\n_defineProperty(InputFilterPanel, \"defaultProps\", {\n panelState: null\n});\n_defineProperty(InputFilterPanel, \"COMPONENT\", 'InputFilterPanel');\n// Have to explicitly specify displayName\n// otherwise it gets minified and breaks LayoutUtils.getComponentName\n_defineProperty(InputFilterPanel, \"displayName\", 'InputFilterPanel');\nvar mapStateToProps = (state, ownProps) => {\n var {\n localDashboardId\n } = ownProps;\n return {\n columns: getColumnsForDashboard(state, localDashboardId)\n };\n};\nvar ConnectedInputFilterPanel = connect(mapStateToProps, null, null, {\n forwardRef: true\n})(InputFilterPanel);\nexport default ConnectedInputFilterPanel;\n//# sourceMappingURL=InputFilterPanel.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { getOpenedPanelMapForDashboard, LayoutUtils } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport { getFilterSetsForDashboard, getInputFiltersForDashboard, getTableMapForDashboard, setDashboardFilterSets as setDashboardFilterSetsAction } from \"../redux/index.js\";\nimport Panel from \"./CorePanel.js\";\nimport FilterSetManager from \"./FilterSetManager.js\";\nimport { IrisGridPanel } from \"./IrisGridPanel.js\";\nimport DropdownFilterPanel from \"./DropdownFilterPanel.js\";\nimport InputFilterPanel from \"./InputFilterPanel.js\";\nimport \"./FilterSetManagerPanel.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar log = Log.module('FilterSetManagerPanel');\nfunction hasSetPanelState(panel) {\n return panel.setPanelState != null;\n}\nexport class FilterSetManagerPanel extends Component {\n static changeFilterIndexesToColumnNames(table, configs) {\n return configs.map(_ref => {\n var [index, filter] = _ref;\n if (index >= table.columns.length) {\n return null;\n }\n var {\n name\n } = table.columns[index];\n return {\n name,\n filter\n };\n }).filter(config => config != null);\n }\n constructor(props) {\n super(props);\n this.handleChange = this.handleChange.bind(this);\n this.handleFilterApply = this.handleFilterApply.bind(this);\n this.handleSetsUpdate = this.handleSetsUpdate.bind(this);\n this.handleGetFilterState = this.handleGetFilterState.bind(this);\n var {\n panelState,\n filterSets\n } = props;\n var {\n selectedId = filterSets.length > 0 ? filterSets[0].id : undefined,\n isValueShown = false\n } = panelState !== null && panelState !== void 0 ? panelState : {};\n this.state = {\n selectedId,\n isValueShown,\n // eslint-disable-next-line react/no-unused-state\n panelState // Dehydrated panel state that can load this panel\n };\n }\n\n // Collect all filter values for each dashboard panel\n getFilterState() {\n var {\n dashboardOpenedPanelMap\n } = this.props;\n var panels = [];\n [...dashboardOpenedPanelMap.keys()].forEach(key => {\n var panel = dashboardOpenedPanelMap.get(key);\n if (panel === undefined) {\n log.error('Could not get panel', panel);\n return;\n }\n var componentName = LayoutUtils.getComponentNameFromPanel(panel);\n var panelId = LayoutUtils.getIdFromPanel(panel);\n log.debug('Panel:', panel, componentName);\n var {\n glContainer = null\n } = panel.props;\n if (glContainer == null) {\n log.error('Could not get panel container', panel);\n return;\n }\n var config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n if (config == null) {\n log.error('Could not get component config from container', glContainer);\n return;\n }\n var panelState = LayoutUtils.getPanelComponentState(config);\n if (panelState == null) {\n log.debug(\"Panel state is null \".concat(panelId));\n return;\n }\n switch (componentName) {\n case LayoutUtils.getComponentName(IrisGridPanel):\n {\n var state;\n if (panelId != null) {\n state = this.getIrisGridPanelFilters(panelId, panelState);\n }\n if (state != null) {\n panels.push({\n panelId,\n type: componentName,\n state\n });\n }\n break;\n }\n case LayoutUtils.getComponentName(InputFilterPanel):\n case LayoutUtils.getComponentName(DropdownFilterPanel):\n {\n var {\n isValueShown,\n name,\n type,\n value\n } = panelState;\n panels.push({\n panelId,\n type: componentName,\n state: {\n isValueShown,\n name,\n type,\n value\n }\n });\n break;\n }\n default:\n }\n });\n return panels;\n }\n getIrisGridPanelFilters(panelId, panelState) {\n var {\n panelTableMap\n } = this.props;\n var table = panelTableMap.get(panelId);\n if (table == null) {\n log.error(\"Unable to get table for panel \".concat(panelId, \".\"));\n return null;\n }\n // IrisGridUtils.hydrate uses numeric indexes for columns\n // Change indexes to column names to make it work for proxy models\n var {\n irisGridState = {\n advancedFilters: undefined,\n quickFilters: undefined\n },\n gridState = {}\n } = panelState;\n var {\n advancedFilters: indexedAdvancedFilters,\n quickFilters: indexedQuickFilters\n } = irisGridState;\n var advancedFilters;\n if (indexedAdvancedFilters) {\n advancedFilters = FilterSetManagerPanel.changeFilterIndexesToColumnNames(table, indexedAdvancedFilters);\n }\n var quickFilters;\n if (indexedQuickFilters) {\n quickFilters = FilterSetManagerPanel.changeFilterIndexesToColumnNames(table, indexedQuickFilters);\n }\n return {\n irisGridState: _objectSpread(_objectSpread({}, irisGridState), {}, {\n advancedFilters,\n quickFilters\n }),\n gridState: _objectSpread({}, gridState)\n };\n }\n handleGetFilterState() {\n return this.getFilterState();\n }\n handleChange(_ref2) {\n var {\n isValueShown,\n selectedId\n } = _ref2;\n log.debug('handleChange', isValueShown, selectedId);\n this.setState({\n isValueShown,\n selectedId\n });\n this.updatePanelState();\n }\n handleFilterApply(filterSet) {\n var {\n dashboardOpenedPanelMap\n } = this.props;\n var {\n panels,\n restoreFullState = false\n } = filterSet;\n log.debug(\"Apply filters from filter set\", filterSet);\n panels.forEach(_ref3 => {\n var {\n panelId,\n type,\n state\n } = _ref3;\n if (panelId == null) {\n log.debug('panel is null', panelId);\n return;\n }\n if (!dashboardOpenedPanelMap.has(panelId)) {\n log.debug('Ignore closed panel', panelId);\n return;\n }\n log.debug('Apply panel filters', panelId, type, state);\n var panel = dashboardOpenedPanelMap.get(panelId);\n switch (type) {\n case LayoutUtils.getComponentName(IrisGridPanel):\n this.restoreIrisGridFilters(panel, state, restoreFullState);\n break;\n case LayoutUtils.getComponentName(InputFilterPanel):\n case LayoutUtils.getComponentName(DropdownFilterPanel):\n this.restoreInputFilterState(panel, state);\n break;\n default:\n }\n });\n }\n handleSetsUpdate(modifiedFilterSets) {\n var {\n setDashboardFilterSets,\n localDashboardId\n } = this.props;\n log.debug('Saving updated sets', modifiedFilterSets);\n // Filter sets are stored in dashboard data instead of the panelState\n // because they need to be shared between the filter view manager panels\n setDashboardFilterSets(localDashboardId, [...modifiedFilterSets]);\n }\n updatePanelState() {\n this.setState(_ref4 => {\n var {\n selectedId,\n isValueShown\n } = _ref4;\n return {\n // eslint-disable-next-line react/no-unused-state\n panelState: {\n selectedId,\n isValueShown\n }\n };\n });\n }\n restoreIrisGridFilters(panel, state, restoreFullState) {\n // Fall back to state.advancedFilters and state.quickFilters\n // for backward compatibility with filter sets that only contain filters\n var {\n irisGridState = {},\n advancedFilters: prevAdvancedFilters = [],\n quickFilters: prevQuickFilters = []\n } = state;\n var {\n advancedFilters = prevAdvancedFilters,\n quickFilters = prevQuickFilters\n } = irisGridState;\n var {\n panelTableMap\n } = this.props;\n var panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n log.error(\"Panel Id is null.\");\n return;\n }\n var table = panelTableMap.get(panelId);\n if (table == null) {\n log.error(\"Unable to get table for panel \".concat(panelId, \".\"));\n return;\n }\n log.debug('restoreIrisGridFilters', panelId, state, restoreFullState);\n if (restoreFullState) {\n panel.setStateOverrides(state);\n } else {\n panel.setFilters({\n quickFilters: quickFilters,\n advancedFilters: advancedFilters\n });\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n restoreInputFilterState(panel, state) {\n var inputFilterState = _objectSpread({}, state);\n // Restore state but don't flip the card\n delete inputFilterState.isValueShown;\n log.debug('restoreInputFilterState', panel, inputFilterState);\n if (panel && hasSetPanelState(panel)) {\n panel.setPanelState(inputFilterState);\n }\n }\n render() {\n var {\n glContainer,\n glEventHub,\n filterSets\n } = this.props;\n var {\n isValueShown,\n selectedId\n } = this.state;\n return /*#__PURE__*/_jsx(Panel, {\n className: \"filter-set-manager-panel\",\n componentPanel: this,\n glContainer: glContainer,\n glEventHub: glEventHub,\n isClonable: true,\n isRenamable: true,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"input-filter-container h-100 w-100 container\",\n children: /*#__PURE__*/_jsx(FilterSetManager, {\n onChange: this.handleChange,\n onApply: this.handleFilterApply,\n onUpdateSets: this.handleSetsUpdate,\n isValueShown: isValueShown,\n filterSets: filterSets,\n selectedId: selectedId,\n getFilterState: this.handleGetFilterState\n })\n })\n });\n }\n}\n_defineProperty(FilterSetManagerPanel, \"defaultProps\", {\n panelState: null\n});\n_defineProperty(FilterSetManagerPanel, \"COMPONENT\", 'FilterSetManagerPanel');\nvar mapStateToProps = (state, ownProps) => {\n var {\n localDashboardId\n } = ownProps;\n return {\n filterSets: getFilterSetsForDashboard(state, localDashboardId),\n dashboardOpenedPanelMap: getOpenedPanelMapForDashboard(state, localDashboardId),\n dashboardInputFilters: getInputFiltersForDashboard(state, localDashboardId),\n panelTableMap: getTableMapForDashboard(state, localDashboardId)\n };\n};\nvar ConnectedFilterSetManagerPanel = connect(mapStateToProps, {\n setDashboardFilterSets: setDashboardFilterSetsAction\n}, null, {\n forwardRef: true\n})(FilterSetManagerPanel);\nexport default ConnectedFilterSetManagerPanel;\n//# sourceMappingURL=FilterSetManagerPanel.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsEdit } from '@deephaven/icons';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport default class MarkdownContainer extends PureComponent {\n render() {\n var {\n isEditing,\n children,\n onDoubleClick\n } = this.props;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"markdown-editor-container h-100 w-100\",\n onDoubleClick: onDoubleClick,\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: classNames('text-muted', 'edit-hint', {\n viewing: isEditing === undefined || !isEditing\n }),\n children: /*#__PURE__*/_jsxs(\"span\", {\n children: [\"double-click to edit \", /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsEdit\n })]\n })\n }), children]\n });\n }\n}\n_defineProperty(MarkdownContainer, \"defaultProps\", {\n isEditing: false\n});\n//# sourceMappingURL=MarkdownContainer.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport React, { PureComponent } from 'react';\nimport { Button, Modal, ModalBody, ModalFooter, ModalHeader } from '@deephaven/components';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsTrash } from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('MarkdownStartPage');\nclass MarkdownStartPage extends PureComponent {\n constructor(props) {\n super(props);\n this.handleDeleteButtonClick = this.handleDeleteButtonClick.bind(this);\n this.handleDeleteModalClose = this.handleDeleteModalClose.bind(this);\n this.state = {\n isDeleteModalShown: false\n };\n }\n handleDeleteButtonClick(markdown) {\n this.setState({\n isDeleteModalShown: true,\n toBeDeleted: markdown\n });\n }\n handleDeleteModalClose() {\n this.setState({\n isDeleteModalShown: false,\n toBeDeleted: undefined\n });\n }\n handleDeleteMarkdown(markdown) {\n log.debug('delete markdown: ', markdown);\n if (markdown !== undefined) {\n var {\n onDelete\n } = this.props;\n onDelete(markdown);\n }\n this.setState({\n isDeleteModalShown: false,\n toBeDeleted: undefined\n });\n }\n render() {\n var {\n closedMarkdowns,\n onOpen,\n onCreate\n } = this.props;\n var {\n isDeleteModalShown,\n toBeDeleted\n } = this.state;\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"markdown-panel-start-page h-100 w-100\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"markdown-panel-start-page-container\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"markdown-panel-start-list\",\n children: [/*#__PURE__*/_jsx(\"h3\", {\n className: \"list-title\",\n children: \"Start\"\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"list-item\",\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"title\",\n onClick: onCreate,\n children: \"New Markdown Note\"\n })\n })]\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"markdown-panel-start-list\",\n children: [/*#__PURE__*/_jsx(\"h3\", {\n className: \"list-title\",\n children: \"Recently Closed from Dashboard\"\n }), closedMarkdowns.map(markdown => /*#__PURE__*/_jsxs(\"div\", {\n className: \"list-item\",\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"title\",\n onClick: () => onOpen(markdown),\n children: markdown.title\n }), /*#__PURE__*/_jsx(\"button\", {\n className: \"btn-link icon\",\n type: \"button\",\n onClick: () => {\n this.handleDeleteButtonClick(markdown);\n },\n children: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsTrash\n })\n })]\n }, markdown.id)), /*#__PURE__*/_jsxs(Modal, {\n isOpen: isDeleteModalShown,\n toggle: this.handleDeleteModalClose,\n className: \"modal-dialog-centered markdown-delete-modal\",\n children: [/*#__PURE__*/_jsx(ModalHeader, {\n children: \"Are you sure you want to permanently delete this note?\"\n }), /*#__PURE__*/_jsx(ModalBody, {\n children: \"You can't undo this action.\"\n }), /*#__PURE__*/_jsxs(ModalFooter, {\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"secondary\",\n onClick: this.handleDeleteModalClose,\n children: \"Cancel\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"danger\",\n onClick: () => {\n this.handleDeleteMarkdown(toBeDeleted);\n },\n children: \"Delete\"\n })]\n })]\n })]\n })]\n })\n });\n }\n}\n_defineProperty(MarkdownStartPage, \"defaultProps\", {\n closedMarkdowns: [],\n onOpen: () => undefined,\n onCreate: () => undefined,\n onDelete: () => undefined\n});\nexport default MarkdownStartPage;\n//# sourceMappingURL=MarkdownStartPage.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport memoize from 'memoize-one';\nclass MarkdownUtils {\n /**\n * Retrieves a new markdown title that does not conflict with the current titles\n * @param usedTitles Markdown titles that are already in use\n * @returns The new title\n */\n static getNewMarkdownTitle(usedTitles) {\n var title = \"\".concat(MarkdownUtils.DEFAULT_TITLE);\n var titleIndex = 0;\n while (usedTitles.indexOf(title) >= 0) {\n titleIndex += 1;\n title = \"\".concat(MarkdownUtils.DEFAULT_TITLE, \"-\").concat(titleIndex);\n }\n return title;\n }\n}\n_defineProperty(MarkdownUtils, \"DEFAULT_TITLE\", 'Note');\n_defineProperty(MarkdownUtils, \"DEFAULT_CONTENT\", '# Markdown Note\\n\\nThis note can be edited using **markdown** for styling.');\n_defineProperty(MarkdownUtils, \"getClosedMarkdowns\", memoize(closedPanels => closedPanels.filter(panel => panel.component === 'MarkdownPanel' && panel.props.panelState.content !== '' && panel.props.panelState.content !== null).reverse()));\nexport default MarkdownUtils;\n//# sourceMappingURL=MarkdownUtils.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport React, { Component, Suspense, lazy } from 'react';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport { getClosedPanelsForDashboard, LayoutUtils, PanelEvent } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport { assertNotNull } from '@deephaven/utils';\nimport { LoadingOverlay } from '@deephaven/components';\nimport Panel from \"./CorePanel.js\";\nimport MarkdownContainer from \"../controls/markdown/MarkdownContainer.js\";\nimport MarkdownStartPage from \"../controls/markdown/MarkdownStartPage.js\";\nimport \"./MarkdownPanel.css\";\nimport MarkdownUtils from \"../controls/markdown/MarkdownUtils.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar MarkdownEditor = /*#__PURE__*/lazy(() => import('../controls/markdown/MarkdownEditor'));\nvar log = Log.module('MarkdownPanel');\nexport class MarkdownPanel extends Component {\n constructor(props) {\n super(props);\n _defineProperty(this, \"markdownEditor\", void 0);\n _defineProperty(this, \"editor\", void 0);\n _defineProperty(this, \"getClosedMarkdowns\", memoize(MarkdownUtils.getClosedMarkdowns));\n this.handleContainerDoubleClick = this.handleContainerDoubleClick.bind(this);\n this.handleCreateMarkdown = this.handleCreateMarkdown.bind(this);\n this.handleDeleteMarkdown = this.handleDeleteMarkdown.bind(this);\n this.handleOpenMarkdown = this.handleOpenMarkdown.bind(this);\n this.handleEditorInitialized = this.handleEditorInitialized.bind(this);\n this.handleEditorBlur = this.handleEditorBlur.bind(this);\n this.handleEditorResize = this.handleEditorResize.bind(this);\n var {\n panelState\n } = props;\n var content = null;\n if (panelState != null && panelState.content != null) {\n if (panelState.content !== '') {\n ({\n content\n } = panelState);\n } else {\n content = MarkdownUtils.DEFAULT_CONTENT;\n }\n }\n this.state = {\n isStartPageShown: content == null && this.getClosedMarkdowns(props.closedPanels).length !== 0,\n isEditing: false,\n content,\n // eslint-disable-next-line react/no-unused-state\n panelState\n };\n this.markdownEditor = null;\n }\n setEditorPosition(clickPositionY) {\n assertNotNull(this.markdownEditor);\n var {\n container: markdownEditorContainer\n } = this.markdownEditor;\n if (this.editor && markdownEditorContainer != null) {\n var _this$editor$getModel, _this$editor$getModel2;\n var contentTop = markdownEditorContainer.getBoundingClientRect().top;\n var contentScrollTop = markdownEditorContainer.scrollTop;\n var contentScrollHeight = markdownEditorContainer.scrollHeight;\n var totalLines = (_this$editor$getModel = (_this$editor$getModel2 = this.editor.getModel()) === null || _this$editor$getModel2 === void 0 ? void 0 : _this$editor$getModel2.getLineCount()) !== null && _this$editor$getModel !== void 0 ? _this$editor$getModel : 0;\n var lineToFocus = Math.round((contentScrollTop + clickPositionY - contentTop) / contentScrollHeight * totalLines);\n if (lineToFocus > totalLines) {\n lineToFocus = totalLines;\n }\n this.editor.revealLine(lineToFocus);\n this.editor.setPosition({\n lineNumber: lineToFocus,\n column: 1\n });\n this.editor.focus();\n }\n }\n handleContainerDoubleClick(event) {\n var {\n isEditing\n } = this.state;\n var dbClickPositionY = event.clientY;\n if (!isEditing) {\n this.setState({\n isEditing: true\n }, () => {\n this.setEditorPosition(dbClickPositionY);\n });\n }\n }\n handleEditorInitialized(editor) {\n log.debug('Markdown Editor Initialized...');\n this.editor = editor;\n }\n handleCreateMarkdown() {\n log.debug('create markdown...');\n this.setState({\n isStartPageShown: false,\n content: '',\n isEditing: true,\n // eslint-disable-next-line react/no-unused-state\n panelState: {\n content: ''\n }\n }, () => {\n if (this.editor != null && this.editor.focus != null) {\n this.editor.focus();\n }\n });\n }\n handleOpenMarkdown(markdown) {\n log.debug('open markdown...', markdown);\n var {\n glContainer,\n glEventHub\n } = this.props;\n var config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n glEventHub.emit(PanelEvent.REOPEN, markdown, config);\n }\n handleDeleteMarkdown(markdown) {\n var {\n glEventHub\n } = this.props;\n glEventHub.emit(PanelEvent.DELETE, markdown);\n }\n handleEditorBlur(event) {\n var _this$editor;\n log.debug(\"markdown content changed, saving...\");\n var {\n isEditing\n } = this.state;\n\n // if not in edit mode, or in edit mode but blur went to an internal monaco field (like search)\n if (!isEditing || this.markdownEditor != null && this.markdownEditor.container != null && this.markdownEditor.container.contains(event.relatedTarget)) {\n return;\n }\n var content = (_this$editor = this.editor) === null || _this$editor === void 0 ? void 0 : _this$editor.getValue();\n this.setState({\n content,\n isEditing: false,\n // eslint-disable-next-line react/no-unused-state\n panelState: {\n content\n }\n });\n }\n handleEditorResize() {\n var {\n isEditing\n } = this.state;\n if (isEditing && this.editor) {\n this.editor.layout();\n }\n }\n render() {\n var {\n glContainer,\n glEventHub,\n closedPanels\n } = this.props;\n var {\n isEditing,\n isStartPageShown,\n content\n } = this.state;\n var closedMarkdowns = this.getClosedMarkdowns(closedPanels);\n return /*#__PURE__*/_jsx(Panel, {\n glContainer: glContainer,\n glEventHub: glEventHub,\n className: \"markdown-panel\",\n componentPanel: this,\n onResize: this.handleEditorResize,\n onBlur: this.handleEditorBlur,\n isClonable: true,\n isRenamable: true,\n children: isStartPageShown ? /*#__PURE__*/_jsx(MarkdownStartPage, {\n closedMarkdowns: closedMarkdowns,\n onCreate: this.handleCreateMarkdown,\n onOpen: this.handleOpenMarkdown,\n onDelete: this.handleDeleteMarkdown\n }) : /*#__PURE__*/_jsx(MarkdownContainer, {\n isEditing: isEditing,\n onDoubleClick: this.handleContainerDoubleClick,\n children: /*#__PURE__*/_jsx(Suspense, {\n fallback: /*#__PURE__*/_jsx(LoadingOverlay, {\n \"data-testid\": \"markdown-panel-loading\"\n }),\n children: /*#__PURE__*/_jsx(MarkdownEditor, {\n ref: markdownEditor => {\n this.markdownEditor = markdownEditor;\n },\n isEditing: isEditing,\n content: content !== null && content !== void 0 ? content : MarkdownUtils.DEFAULT_CONTENT,\n onEditorInitialized: this.handleEditorInitialized\n })\n })\n })\n });\n }\n}\n_defineProperty(MarkdownPanel, \"defaultProps\", {\n panelState: null\n});\n_defineProperty(MarkdownPanel, \"COMPONENT\", 'MarkdownPanel');\nvar mapStateToProps = (state, ownProps) => {\n var {\n localDashboardId\n } = ownProps;\n return {\n closedPanels: getClosedPanelsForDashboard(state, localDashboardId)\n };\n};\nvar ConnectedMarkdownPanel = connect(mapStateToProps, null, null, {\n forwardRef: true\n})(MarkdownPanel);\nexport default ConnectedMarkdownPanel;\n//# sourceMappingURL=MarkdownPanel.js.map","function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n// Wrapper for the Notebook for use in a golden layout container\nimport React, { Component, Suspense, lazy } from 'react';\nimport ReactDOM from 'react-dom';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { BasicModal, ContextActions, DropdownMenu, Tooltip, GLOBAL_SHORTCUTS, Button, LoadingOverlay } from '@deephaven/components';\nimport { MonacoUtils, ScriptEditor, ScriptEditorUtils, SHORTCUTS } from '@deephaven/console';\nimport { FileUtils, NewItemModal } from '@deephaven/file-explorer';\nimport { vsSave, vsKebabVertical, dhFileSearch, vsPlay, dhRunSelection, vsCheck, vsCopy, dhICursor, vsTrash } from '@deephaven/icons';\nimport { getFileStorage, updateNotebookSettings as updateNotebookSettingsAction, getNotebookSettings } from '@deephaven/redux';\nimport classNames from 'classnames';\nimport debounce from 'lodash.debounce';\nimport { PanelEvent } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport { assertNotNull, Pending, PromiseUtils } from '@deephaven/utils';\nimport { ConsoleEvent, NotebookEvent } from \"../events/index.js\";\nimport { getDashboardSessionWrapper } from \"../redux/index.js\";\nimport Panel from \"./CorePanel.js\";\nimport \"./NotebookPanel.css\";\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nvar MarkdownNotebook = /*#__PURE__*/lazy(() => import('./MarkdownNotebook'));\nvar log = Log.module('NotebookPanel');\nvar DEBOUNCE_PANEL_STATE_UPDATE = 400;\nclass NotebookPanel extends Component {\n static handleError(error) {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n log.error(error);\n }\n\n /**\n * Returns number of unsaved notebooks.\n */\n static unsavedNotebookCount() {\n return document.querySelectorAll(\".\".concat(NotebookPanel.UNSAVED_INDICATOR_CLASS_NAME, \".\").concat(NotebookPanel.UNSAVED_STATUS_CLASS_NAME)).length;\n }\n static languageFromFileName(fileName) {\n var extension = FileUtils.getExtension(fileName).toLowerCase();\n switch (extension) {\n case 'py':\n case 'python':\n return 'python';\n case 'groovy':\n return 'groovy';\n case 'scala':\n return 'scala';\n default:\n return null;\n }\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"pending\", void 0);\n _defineProperty(this, \"debouncedSavePanelState\", void 0);\n _defineProperty(this, \"debouncedLoad\", void 0);\n _defineProperty(this, \"notebook\", void 0);\n _defineProperty(this, \"tabTitleElement\", void 0);\n _defineProperty(this, \"tabInitOnce\", void 0);\n _defineProperty(this, \"editor\", void 0);\n _defineProperty(this, \"getSettings\", memoize((initialSettings, isMinimapEnabled) => _objectSpread(_objectSpread({}, initialSettings), {}, {\n minimap: {\n enabled: isMinimapEnabled\n }\n })));\n _defineProperty(this, \"getOverflowActions\", memoize((isMinimapEnabled, isWordWrapEnabled, formatOnSave) => {\n var actions = [{\n title: 'Find',\n icon: dhFileSearch,\n action: this.handleFind,\n group: ContextActions.groups.high,\n shortcut: SHORTCUTS.NOTEBOOK.FIND,\n order: 10\n }, {\n title: 'Copy File',\n icon: vsCopy,\n action: this.handleCopy,\n group: ContextActions.groups.medium,\n order: 20\n }, {\n title: 'Rename File',\n icon: dhICursor,\n action: this.handleShowRename,\n group: ContextActions.groups.medium,\n order: 30\n }, {\n title: 'Delete File',\n icon: vsTrash,\n action: this.handleDelete,\n group: ContextActions.groups.medium,\n order: 40\n }, {\n title: 'Show Minimap',\n icon: isMinimapEnabled ? vsCheck : undefined,\n action: this.handleMinimapChange,\n group: ContextActions.groups.low,\n shortcut: SHORTCUTS.NOTEBOOK.MINIMAP,\n order: 20\n }, {\n title: 'Word Wrap',\n icon: isWordWrapEnabled ? vsCheck : undefined,\n action: this.handleWordWrapChange,\n group: ContextActions.groups.low,\n shortcut: SHORTCUTS.NOTEBOOK.WORDWRAP,\n order: 30\n }];\n if (this.canFormat()) {\n actions.push({\n title: 'Format Document',\n action: this.handleFormat,\n group: ContextActions.groups.low,\n order: 10\n });\n actions.push({\n title: 'Format on Save',\n icon: formatOnSave ? vsCheck : undefined,\n action: this.handleFormatOnSaveChange,\n group: ContextActions.groups.low,\n order: 15\n });\n }\n return actions;\n }));\n this.handleCloseCancel = this.handleCloseCancel.bind(this);\n this.handleCloseDiscard = this.handleCloseDiscard.bind(this);\n this.handleCloseSave = this.handleCloseSave.bind(this);\n this.handleCopy = this.handleCopy.bind(this);\n this.handleDelete = this.handleDelete.bind(this);\n this.handleDeleteConfirm = this.handleDeleteConfirm.bind(this);\n this.handleDeleteCancel = this.handleDeleteCancel.bind(this);\n this.handleEditorInitialized = this.handleEditorInitialized.bind(this);\n this.handleEditorWillDestroy = this.handleEditorWillDestroy.bind(this);\n this.handleEditorChange = this.handleEditorChange.bind(this);\n this.handleFind = this.handleFind.bind(this);\n this.handleMinimapChange = this.handleMinimapChange.bind(this);\n this.handleWordWrapChange = this.handleWordWrapChange.bind(this);\n this.handleFormatOnSaveChange = this.handleFormatOnSaveChange.bind(this);\n this.handleLinkClick = this.handleLinkClick.bind(this);\n this.handleLoadSuccess = this.handleLoadSuccess.bind(this);\n this.handleLoadError = this.handleLoadError.bind(this);\n this.handlePanelDropped = this.handlePanelDropped.bind(this);\n this.handleRenameFile = this.handleRenameFile.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleRunCommand = this.handleRunCommand.bind(this);\n this.handleRunAll = this.handleRunAll.bind(this);\n this.handleRunSelected = this.handleRunSelected.bind(this);\n this.handleSave = this.handleSave.bind(this);\n this.handleSaveAsCancel = this.handleSaveAsCancel.bind(this);\n this.handleSaveAsSubmit = this.handleSaveAsSubmit.bind(this);\n this.handleSaveError = this.handleSaveError.bind(this);\n this.handleSaveSuccess = this.handleSaveSuccess.bind(this);\n this.handleSessionOpened = this.handleSessionOpened.bind(this);\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleShowRename = this.handleShowRename.bind(this);\n this.handleTab = this.handleTab.bind(this);\n this.handleTabBlur = this.handleTabBlur.bind(this);\n this.handleTabClick = this.handleTabClick.bind(this);\n this.handleTabFocus = this.handleTabFocus.bind(this);\n this.handleTransformLinkUri = this.handleTransformLinkUri.bind(this);\n this.handleOverwrite = this.handleOverwrite.bind(this);\n this.handlePreviewPromotion = this.handlePreviewPromotion.bind(this);\n this.handleFormat = this.handleFormat.bind(this);\n this.canFormat = this.canFormat.bind(this);\n this.getDropdownOverflowActions = this.getDropdownOverflowActions.bind(this);\n this.pending = new Pending();\n this.debouncedSavePanelState = debounce(this.savePanelState.bind(this), DEBOUNCE_PANEL_STATE_UPDATE);\n this.debouncedLoad = debounce(this.load.bind(this), DEBOUNCE_PANEL_STATE_UPDATE);\n this.notebook = null;\n this.tabTitleElement = null;\n this.tabInitOnce = false;\n var {\n isDashboardActive,\n session,\n sessionLanguage,\n panelState\n } = props;\n var settings = {\n value: '',\n language: '',\n wordWrap: 'off'\n };\n var fileMetadata = null;\n var {\n isPreview\n } = props;\n if (panelState != null) {\n ({\n fileMetadata = fileMetadata,\n isPreview = isPreview,\n settings = settings\n } = panelState);\n }\n\n // Not showing the unsaved indicator for null file id and editor content === '',\n // may need to implement some other indication that this notebook has never been saved\n var hasFileId = fileMetadata != null && FileUtils.hasPath(fileMetadata.itemName);\n\n // Unsaved if file id != null and content != null\n // OR file id is null AND content is not null or ''\n var isUnsaved = hasFileId === true && settings.value != null || !hasFileId && settings.value != null && settings.value.length > 0;\n var changeCount = isUnsaved ? 1 : 0;\n this.state = {\n error: undefined,\n isDashboardActive,\n isLoading: true,\n isLoaded: false,\n isPreview,\n savedChangeCount: 0,\n changeCount,\n fileMetadata,\n settings,\n session,\n sessionLanguage,\n // eslint-disable-next-line react/no-unused-state\n panelState: {\n fileMetadata,\n settings\n },\n showCloseModal: false,\n showDeleteModal: false,\n showSaveAsModal: false,\n scriptCode: '',\n formatOnSave: false\n };\n log.debug('constructor', props, this.state);\n }\n componentDidMount() {\n var {\n glContainer,\n glEventHub\n } = this.props;\n var {\n tab\n } = glContainer;\n if (tab != null) this.initTab(tab);\n this.initNotebookContent();\n glEventHub.on(NotebookEvent.RENAME_FILE, this.handleRenameFile);\n glEventHub.on(PanelEvent.DROPPED, this.handlePanelDropped);\n glContainer.on(NotebookEvent.PROMOTE_FROM_PREVIEW, this.handlePreviewPromotion);\n }\n componentDidUpdate(prevProps, prevState) {\n var {\n isPreview,\n settings\n } = this.state;\n var {\n wordWrap\n } = settings;\n var {\n notebookSettings\n } = this.props;\n if (isPreview !== prevState.isPreview) {\n this.setPreviewStatus();\n }\n if (wordWrap !== prevState.settings.wordWrap) {\n this.updateEditorWordWrap();\n this.debouncedSavePanelState();\n }\n if (notebookSettings.isMinimapEnabled !== prevProps.notebookSettings.isMinimapEnabled) {\n this.updateEditorMinimap();\n }\n }\n componentWillUnmount() {\n this.debouncedSavePanelState.flush();\n this.pending.cancel();\n var {\n glEventHub,\n glContainer\n } = this.props;\n var {\n fileMetadata,\n isPreview\n } = this.state;\n glEventHub.off(NotebookEvent.RENAME_FILE, this.handleRenameFile);\n glEventHub.off(PanelEvent.DROPPED, this.handlePanelDropped);\n glContainer.off(NotebookEvent.PROMOTE_FROM_PREVIEW, this.handlePreviewPromotion);\n glEventHub.emit(NotebookEvent.UNREGISTER_FILE, fileMetadata, isPreview);\n }\n // Called by TabEvent. Happens once when created, but also each time its moved.\n // when moved, need to re-init the unsaved indicators on title elements\n initTab(tab) {\n if (!this.tabInitOnce) {\n this.tabInitOnce = true;\n this.initTabCloseOverride();\n }\n this.initTabClasses(tab);\n }\n\n /**\n * Adds a beforeClose handler to check if a notebook needs to be saved\n * Call panel close with force if the check can be skipped\n *\n * Note that firing a close event manually may trigger before state update occurs\n * In those instances, use force\n */\n initTabCloseOverride() {\n var {\n glContainer\n } = this.props;\n glContainer.beforeClose(options => {\n if ((options === null || options === void 0 ? void 0 : options.force) === true) {\n return true;\n }\n var {\n changeCount,\n savedChangeCount\n } = this.state;\n if (changeCount !== savedChangeCount) {\n this.setState({\n showCloseModal: true\n });\n return false;\n }\n return true;\n });\n }\n initTabClasses(tab) {\n var tabElement = tab.element.get(0);\n assertNotNull(tabElement);\n var titleElement = tabElement.querySelector('.lm_title');\n this.tabTitleElement = titleElement;\n titleElement === null || titleElement === void 0 || titleElement.classList.add('notebook-title');\n this.setPreviewStatus();\n }\n getNotebookValue() {\n var {\n changeCount,\n savedChangeCount,\n settings\n } = this.state;\n var {\n value\n } = settings;\n if (changeCount !== savedChangeCount && this.notebook) {\n var notebookValue = this.notebook.getValue();\n return notebookValue != null ? notebookValue : value;\n }\n return value;\n }\n initNotebookContent() {\n // Init from file,\n // fallback to content from settings for unsaved notebook\n var {\n fileMetadata,\n settings,\n isPreview\n } = this.state;\n if (fileMetadata && fileMetadata.id) {\n log.debug('Init content from file');\n this.registerFileMetadata(fileMetadata, isPreview);\n this.load();\n return;\n }\n if (settings.value != null) {\n log.debug('Use content passed in the settings prop');\n this.handleLoadSuccess();\n return;\n }\n // No settings, no metadata\n this.handleLoadError(new Error('Missing file metadata'));\n }\n closeFileTabById(id) {\n var {\n glEventHub\n } = this.props;\n glEventHub.emit(NotebookEvent.CLOSE_FILE, {\n id\n });\n }\n\n // Associate file id with the current tab\n // so the next time the file is opened this tab can be focused instead of opening a new tab\n registerFileMetadata(fileMetadata, isPreview) {\n var {\n glEventHub,\n metadata\n } = this.props;\n var {\n id: tabId\n } = metadata;\n glEventHub.emit(NotebookEvent.REGISTER_FILE, tabId, fileMetadata, isPreview);\n }\n renameTab(id, title) {\n var {\n glEventHub\n } = this.props;\n glEventHub.emit(NotebookEvent.RENAME, id, title);\n }\n load() {\n var {\n fileMetadata,\n settings\n } = this.state;\n assertNotNull(fileMetadata);\n var {\n id\n } = fileMetadata;\n var {\n fileStorage\n } = this.props;\n this.pending.add(fileStorage.loadFile(id)).then(loadedFile => {\n var _NotebookPanel$langua;\n log.debug('Loaded file', loadedFile);\n var {\n filename: itemName\n } = loadedFile;\n var {\n itemName: prevItemName\n } = this.state;\n if (itemName !== prevItemName) {\n var {\n metadata\n } = this.props;\n var {\n id: tabId\n } = metadata;\n this.renameTab(tabId, FileUtils.getBaseName(itemName));\n }\n var updatedSettings = _objectSpread(_objectSpread({}, settings), {}, {\n language: (_NotebookPanel$langua = NotebookPanel.languageFromFileName(itemName)) !== null && _NotebookPanel$langua !== void 0 ? _NotebookPanel$langua : ''\n });\n if (settings.value == null) {\n updatedSettings.value = loadedFile.content;\n }\n if (settings.wordWrap === undefined) {\n settings.wordWrap = 'off';\n }\n this.setState({\n fileMetadata: {\n id: itemName,\n itemName\n },\n settings: updatedSettings\n });\n this.debouncedSavePanelState();\n }).then(this.handleLoadSuccess).catch(this.handleLoadError);\n }\n\n /**\n * Attempts to save the notebook.\n * @returns Returns true if save has begun, false if user needed to be prompted\n */\n save() {\n var {\n fileMetadata\n } = this.state;\n if (fileMetadata && FileUtils.hasPath(fileMetadata.itemName)) {\n var content = this.getNotebookValue();\n if (content !== undefined) {\n this.saveContent(fileMetadata.itemName, content);\n return true;\n }\n return false;\n }\n this.setState({\n showSaveAsModal: true\n });\n return false;\n }\n\n /**\n * Update existing file content\n * @param filename The name of the file\n * @param content New file content\n */\n saveContent(filename, content) {\n log.debug('saveContent', filename, content);\n this.updateSavedChangeCount();\n var {\n fileStorage\n } = this.props;\n this.pending.add(fileStorage.saveFile({\n filename,\n content,\n basename: filename\n })).then(this.handleSaveSuccess).catch(this.handleSaveError);\n }\n updateSavedChangeCount() {\n this.setState(_ref => {\n var {\n changeCount\n } = _ref;\n return {\n savedChangeCount: changeCount\n };\n });\n }\n setPreviewStatus() {\n if (!this.tabTitleElement) {\n return;\n }\n var {\n isPreview\n } = this.state;\n log.debug('setPreviewStatus', this.tabTitleElement, isPreview);\n if (isPreview) {\n this.tabTitleElement.classList.add('is-preview');\n } else {\n this.tabTitleElement.classList.remove('is-preview');\n }\n }\n handlePreviewPromotion() {\n this.removePreviewStatus();\n }\n savePanelState() {\n this.setState(state => {\n var {\n changeCount,\n savedChangeCount,\n fileMetadata,\n isPreview,\n settings: initialSettings\n } = state;\n var value = this.getNotebookValue();\n // notebooks with no unsaved changes have value === null in dehydrated state\n // content will be loaded from file when hydrating\n var dehydratedValue = changeCount !== savedChangeCount ? value : undefined;\n var settings = _objectSpread(_objectSpread({}, initialSettings), {}, {\n value\n });\n var dehydratedSettings = _objectSpread(_objectSpread({}, initialSettings), {}, {\n value: dehydratedValue\n });\n var panelState = {\n settings: dehydratedSettings,\n fileMetadata,\n isPreview\n };\n log.debug('Saving panel state', panelState);\n return {\n settings,\n // eslint-disable-next-line react/no-unused-state\n panelState\n };\n });\n }\n handleCloseDiscard() {\n this.setState({\n showCloseModal: false\n });\n var {\n glContainer\n } = this.props;\n glContainer.close({\n force: true\n });\n }\n handleCloseSave() {\n this.setState({\n showCloseModal: false\n });\n if (this.save()) {\n var {\n glContainer\n } = this.props;\n glContainer.close({\n force: true\n });\n }\n }\n handleCloseCancel() {\n this.setState({\n showCloseModal: false\n });\n }\n\n /**\n * Closes overwritten tabs\n * @param fileName The name of the file to be overwritten\n */\n handleOverwrite(fileName) {\n var {\n glEventHub\n } = this.props;\n glEventHub.emit(NotebookEvent.CLOSE_FILE, {\n id: fileName,\n itemName: fileName\n }, {\n force: true\n });\n this.focus();\n }\n handleCopy() {\n var _this = this;\n return _asyncToGenerator(function* () {\n var {\n fileStorage,\n glEventHub,\n session\n } = _this.props;\n var {\n fileMetadata,\n settings\n } = _this.state;\n assertNotNull(fileMetadata);\n var {\n language\n } = settings;\n var {\n itemName\n } = fileMetadata;\n var copyName = yield FileUtils.getUniqueCopyFileName(fileStorage, itemName);\n log.debug('handleCopy', fileMetadata, itemName, copyName);\n yield fileStorage.copyFile(itemName, copyName);\n var newFileMetadata = {\n id: copyName,\n itemName: copyName\n };\n var notebookSettings = {\n value: null,\n language\n };\n glEventHub.emit(NotebookEvent.SELECT_NOTEBOOK, session, language, notebookSettings, newFileMetadata, true);\n })();\n }\n handleDelete() {\n log.debug('handleDelete, pending confirmation');\n this.setState({\n showDeleteModal: true\n });\n }\n handleDeleteConfirm() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n var {\n fileStorage,\n glContainer,\n glEventHub\n } = _this2.props;\n var {\n fileMetadata\n } = _this2.state;\n log.debug('handleDeleteConfirm', fileMetadata === null || fileMetadata === void 0 ? void 0 : fileMetadata.itemName);\n _this2.setState({\n showDeleteModal: false\n });\n if (!fileMetadata) {\n return;\n }\n if (FileUtils.hasPath(fileMetadata.itemName) && (// eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n yield FileUtils.fileExists(fileStorage, fileMetadata.itemName))) {\n glEventHub.emit(NotebookEvent.CLOSE_FILE, fileMetadata, {\n force: true\n });\n fileStorage.deleteFile(fileMetadata.itemName);\n } else {\n glContainer.close({\n force: true\n });\n }\n })();\n }\n handleDeleteCancel() {\n this.setState({\n showDeleteModal: false\n });\n }\n handleEditorInitialized(innerEditor) {\n this.editor = innerEditor;\n }\n handleEditorWillDestroy() {\n this.editor = undefined;\n }\n handleEditorChange(e) {\n log.debug2('handleEditorChanged', e);\n this.removePreviewStatus();\n this.setState(state => {\n var {\n changeCount,\n savedChangeCount\n } = state;\n var {\n isUndoing,\n isRedoing\n } = e;\n if (isUndoing) {\n // Note that it's possible to undo past where the user last saved, if they save and then undo for example\n return {\n changeCount: changeCount - 1,\n savedChangeCount\n };\n }\n if (!isRedoing && changeCount < savedChangeCount) {\n // We made another change after undoing some changes from the previous save\n // Just reset the saved counter to zero and increase the unchanged saves\n // It'll be set correctly on the next save\n return {\n changeCount: changeCount + 1,\n savedChangeCount: 0\n };\n }\n return {\n changeCount: changeCount + 1,\n savedChangeCount\n };\n });\n this.debouncedSavePanelState();\n }\n handleFind() {\n if (this.notebook) {\n this.notebook.toggleFind();\n }\n }\n updateEditorMinimap() {\n if (this.editor) {\n var {\n notebookSettings\n } = this.props;\n this.editor.updateOptions({\n minimap: {\n enabled: notebookSettings.isMinimapEnabled\n }\n });\n }\n }\n handleMinimapChange() {\n var _notebookSettings$isM;\n var {\n notebookSettings,\n updateNotebookSettings\n } = this.props;\n var newSettings = {\n isMinimapEnabled: !((_notebookSettings$isM = notebookSettings.isMinimapEnabled) !== null && _notebookSettings$isM !== void 0 ? _notebookSettings$isM : false)\n };\n updateNotebookSettings(newSettings);\n }\n updateEditorWordWrap() {\n if (this.editor) {\n var {\n settings\n } = this.state;\n var {\n wordWrap\n } = settings;\n this.editor.updateOptions({\n wordWrap\n });\n }\n }\n handleWordWrapChange() {\n if (this.editor) {\n this.setState(prevState => {\n var {\n settings\n } = prevState;\n var wordWrap = settings.wordWrap === 'on' ? 'off' : 'on';\n return {\n settings: _objectSpread(_objectSpread({}, settings), {}, {\n wordWrap\n })\n };\n });\n }\n }\n handleFormatOnSaveChange() {\n var _notebookSettings$for;\n var {\n notebookSettings,\n updateNotebookSettings\n } = this.props;\n var newSettings = {\n formatOnSave: !((_notebookSettings$for = notebookSettings.formatOnSave) !== null && _notebookSettings$for !== void 0 ? _notebookSettings$for : false)\n };\n updateNotebookSettings(newSettings);\n }\n\n /**\n * @param event The click event from clicking on the link\n */\n handleLinkClick(event) {\n var {\n notebooksUrl,\n session,\n sessionLanguage\n } = this.props;\n var {\n href\n } = event.currentTarget;\n if (!href || !href.startsWith(notebooksUrl)) {\n return;\n }\n event.stopPropagation();\n event.preventDefault();\n var notebookPath = \"/\".concat(href.substring(notebooksUrl.length)).replace(/%20/g, ' ');\n if (notebookPath === '/') {\n log.debug('Ignoring invalid notebook link', notebookPath);\n return;\n }\n log.debug('Notebook link clicked, opening', notebookPath);\n var {\n glEventHub\n } = this.props;\n var notebookSettings = {\n value: null,\n language: sessionLanguage\n };\n var fileMetadata = {\n id: notebookPath,\n itemName: notebookPath\n };\n glEventHub.emit(NotebookEvent.SELECT_NOTEBOOK, session, sessionLanguage, notebookSettings, fileMetadata);\n }\n handleLoadSuccess() {\n this.setState({\n error: undefined,\n isLoaded: true,\n isLoading: false\n });\n }\n handleLoadError(errorParam) {\n var error = errorParam;\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n if (PromiseUtils.isTimedOut(error)) {\n error = new Error('File not found.');\n }\n log.error(error);\n this.setState({\n error,\n isLoading: false\n });\n }\n handleSave() {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n log.debug('handleSave');\n var {\n notebookSettings\n } = _this3.props;\n var {\n formatOnSave = false\n } = notebookSettings;\n if (formatOnSave) {\n yield _this3.handleFormat();\n }\n _this3.save();\n })();\n }\n handleSaveSuccess(file) {\n var _NotebookPanel$langua2;\n var {\n fileStorage\n } = this.props;\n var fileMetadata = {\n id: file.filename,\n itemName: file.filename\n };\n var language = (_NotebookPanel$langua2 = NotebookPanel.languageFromFileName(file.filename)) !== null && _NotebookPanel$langua2 !== void 0 ? _NotebookPanel$langua2 : '';\n this.setState(state => {\n var {\n fileMetadata: oldMetadata\n } = state;\n var settings = _objectSpread(_objectSpread({}, state.settings), {}, {\n language\n });\n log.debug('handleSaveSuccess', fileMetadata, oldMetadata, settings);\n if (oldMetadata && FileUtils.hasPath(oldMetadata.itemName) && oldMetadata.itemName !== fileMetadata.itemName) {\n log.debug('handleSaveSuccess deleting old file', oldMetadata.itemName);\n fileStorage.deleteFile(oldMetadata.itemName).catch(NotebookPanel.handleError);\n }\n return {\n fileMetadata,\n settings,\n isPreview: false\n };\n });\n this.debouncedSavePanelState();\n this.registerFileMetadata(fileMetadata, false);\n }\n handleSaveError(error) {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n // There was an error saving, just reset the savedChangeCount\n // It's possible if they undo changes they'll be back at the spot where it was last saved successfully,\n // But we may as well continue showing the error until they actually save again\n this.setState({\n savedChangeCount: 0\n });\n log.error(error);\n }\n handleSaveAsCancel() {\n this.setState({\n showSaveAsModal: false\n });\n }\n handleSaveAsSubmit(name) {\n var _this$getNotebookValu;\n var isOverwrite = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (isOverwrite) {\n this.handleOverwrite(name);\n }\n log.debug('handleSaveAsSubmit', name);\n var {\n fileMetadata\n } = this.state;\n if (!fileMetadata) {\n return;\n }\n var {\n itemName: prevItemName\n } = fileMetadata;\n var content = (_this$getNotebookValu = this.getNotebookValue()) !== null && _this$getNotebookValu !== void 0 ? _this$getNotebookValu : '';\n this.setState({\n showSaveAsModal: false\n });\n if (FileUtils.getBaseName(prevItemName) !== FileUtils.getBaseName(name)) {\n var {\n metadata\n } = this.props;\n var {\n id: tabId\n } = metadata;\n this.renameTab(tabId, FileUtils.getBaseName(name));\n }\n this.saveContent(name, content);\n }\n canFormat() {\n var _this$notebook;\n return ((_this$notebook = this.notebook) === null || _this$notebook === void 0 ? void 0 : _this$notebook.editor) != null ? MonacoUtils.canFormat(this.notebook.editor) : false;\n }\n handleFormat() {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n var _this4$notebook;\n if (((_this4$notebook = _this4.notebook) === null || _this4$notebook === void 0 ? void 0 : _this4$notebook.editor) != null) {\n yield MonacoUtils.formatDocument(_this4.notebook.editor);\n }\n })();\n }\n handleRenameFile(oldName, newName, panelState) {\n var {\n fileMetadata,\n panelState: curPanelState\n } = this.state;\n var {\n glContainer\n } = this.props;\n if ((fileMetadata === null || fileMetadata === void 0 ? void 0 : fileMetadata.itemName) === \"/\".concat(newName) && panelState && JSON.stringify(curPanelState) !== JSON.stringify(panelState)) {\n glContainer.close();\n return;\n }\n if (fileMetadata && fileMetadata.id === oldName) {\n this.setState({\n fileMetadata: {\n id: newName,\n itemName: newName\n }\n });\n this.debouncedSavePanelState();\n }\n }\n handleResize() {\n var _this$notebook2;\n (_this$notebook2 = this.notebook) === null || _this$notebook2 === void 0 || _this$notebook2.updateDimensions();\n }\n handleRunCommand(command) {\n this.runCommand(command);\n }\n handleRunAll() {\n var _this$notebook$getVal;\n if (!this.notebook) {\n log.error('Editor is not initialized.');\n return;\n }\n this.runCommand((_this$notebook$getVal = this.notebook.getValue()) !== null && _this$notebook$getVal !== void 0 ? _this$notebook$getVal : undefined);\n }\n handleRunSelected() {\n if (!this.notebook) {\n log.error('Editor is not initialized.');\n return;\n }\n this.runCommand(this.notebook.getSelectedCommand());\n }\n handleSessionOpened(session, _ref2) {\n var {\n language\n } = _ref2;\n this.setState({\n session,\n sessionLanguage: language\n });\n }\n handleSessionClosed() {\n this.setState({\n session: undefined,\n sessionLanguage: undefined\n });\n }\n handleShow() {\n var _this$notebook3;\n log.debug('handleShow');\n (_this$notebook3 = this.notebook) === null || _this$notebook3 === void 0 || _this$notebook3.updateDimensions();\n }\n handlePanelDropped(droppedId) {\n var {\n metadata: {\n id\n }\n } = this.props;\n // re-render necessary for portal after being dropped\n if (droppedId === id) this.forceUpdate();\n }\n handleShowRename() {\n this.setState({\n showSaveAsModal: true\n });\n }\n handleTab(tab) {\n log.debug('NotebookPanel tab event', tab);\n this.initTab(tab);\n }\n handleTabFocus() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n log.debug('handleTabFocus', ...args);\n var {\n glContainer\n } = this.props;\n this.setState({\n isDashboardActive: true\n });\n if (this.notebook && !glContainer.isHidden) {\n this.notebook.updateDimensions();\n }\n }\n handleTabBlur() {\n log.debug('handleTabBlur');\n this.setState({\n isDashboardActive: false\n });\n }\n handleTabClick(e) {\n log.debug('handle NotebookPanel tab click');\n this.focus();\n if (e.detail === 2) {\n this.removePreviewStatus();\n }\n }\n\n /**\n * Transform the link URI to load from where the notebook is if it's relative\n * @param src The link to transform\n * @returns String the transformed link\n */\n handleTransformLinkUri(src) {\n var {\n notebooksUrl\n } = this.props;\n var {\n fileMetadata\n } = this.state;\n if (src.endsWith('/')) {\n return src;\n }\n if (src.startsWith('/')) {\n return \"\".concat(notebooksUrl).concat(src.substring(1));\n }\n var itemName = fileMetadata === null || fileMetadata === void 0 ? void 0 : fileMetadata.itemName;\n if (itemName === undefined) {\n return src;\n }\n if (itemName.charAt(0) === '/') {\n itemName = itemName.substring(1);\n }\n var itemUri = new URL(itemName, notebooksUrl);\n return new URL(src, itemUri).href;\n }\n focus() {\n requestAnimationFrame(() => {\n if (this.notebook) {\n this.notebook.focus();\n }\n });\n }\n createNotebook(itemName, language) {\n var content = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var {\n glEventHub\n } = this.props;\n var {\n session,\n sessionLanguage,\n settings\n } = this.state;\n var notebookSettings = _objectSpread(_objectSpread({}, settings), {}, {\n language,\n value: content\n });\n var fileMetadata = {\n id: null,\n itemName\n };\n log.debug('handleCreateNotebook', session, sessionLanguage, notebookSettings, fileMetadata);\n glEventHub.emit(NotebookEvent.CREATE_NOTEBOOK, session, sessionLanguage, notebookSettings, fileMetadata);\n }\n runCommand(command) {\n if (command === undefined || command === '') {\n log.debug('Ignoring empty command.');\n return;\n }\n this.removePreviewStatus();\n var {\n glEventHub\n } = this.props;\n glEventHub.emit(ConsoleEvent.SEND_COMMAND, command, false, true);\n }\n removePreviewStatus() {\n this.setState(_ref3 => {\n var {\n isPreview\n } = _ref3;\n if (isPreview) {\n var {\n fileMetadata\n } = this.state;\n if (fileMetadata) {\n this.registerFileMetadata(fileMetadata, false);\n }\n return {\n isPreview: false\n };\n }\n return null;\n });\n }\n getDropdownOverflowActions() {\n var {\n notebookSettings\n } = this.props;\n var {\n isMinimapEnabled,\n formatOnSave\n } = notebookSettings;\n var {\n settings: initialSettings\n } = this.state;\n return this.getOverflowActions(isMinimapEnabled !== null && isMinimapEnabled !== void 0 ? isMinimapEnabled : false, this.getSettings(initialSettings, isMinimapEnabled !== null && isMinimapEnabled !== void 0 ? isMinimapEnabled : false).wordWrap === 'on', formatOnSave !== null && formatOnSave !== void 0 ? formatOnSave : false);\n }\n render() {\n var _fileMetadata$itemNam, _notebookSettings$isM2, _settings$value;\n var {\n fileStorage,\n glContainer,\n glContainer: {\n tab\n },\n glEventHub,\n notebookSettings\n } = this.props;\n var {\n changeCount,\n savedChangeCount,\n error,\n isDashboardActive,\n isLoaded,\n isLoading,\n isPreview,\n fileMetadata,\n session,\n sessionLanguage,\n settings: initialSettings,\n showCloseModal,\n showDeleteModal,\n showSaveAsModal\n } = this.state;\n // We don't want to steal focus if this isn't shown or it's just a preview\n var focusOnMount = isDashboardActive && !glContainer.isHidden && !isPreview;\n var itemName = (_fileMetadata$itemNam = fileMetadata === null || fileMetadata === void 0 ? void 0 : fileMetadata.itemName) !== null && _fileMetadata$itemNam !== void 0 ? _fileMetadata$itemNam : NotebookPanel.DEFAULT_NAME;\n var isMarkdown = itemName.endsWith('.md');\n var isExistingItem = (fileMetadata === null || fileMetadata === void 0 ? void 0 : fileMetadata.id) != null;\n var settings = this.getSettings(initialSettings, (_notebookSettings$isM2 = notebookSettings.isMinimapEnabled) !== null && _notebookSettings$isM2 !== void 0 ? _notebookSettings$isM2 : false);\n var isSessionConnected = session != null;\n var isLanguageMatching = sessionLanguage === settings.language;\n var runButtonsDisabled = !isLoaded || !isSessionConnected || !isLanguageMatching;\n var toolbarDisabled = !isLoaded;\n var contextActions = [{\n action: this.handleSave,\n shortcut: GLOBAL_SHORTCUTS.SAVE\n }, {\n action: this.handleMinimapChange,\n shortcut: SHORTCUTS.NOTEBOOK.MINIMAP\n }, {\n action: this.handleWordWrapChange,\n shortcut: SHORTCUTS.NOTEBOOK.WORDWRAP\n }];\n var disabledRunButtonTooltip = ScriptEditorUtils.getDisabledRunTooltip(isSessionConnected, isLanguageMatching, 'Notebook extension', 'Run');\n var disabledRunSelectedButtonTooltip = ScriptEditorUtils.getDisabledRunTooltip(isSessionConnected, isLanguageMatching, 'Notebook extension', 'Run Selected');\n var additionalActions = [{\n title: isExistingItem ? 'Rename' : 'Save As…',\n order: 10,\n group: ContextActions.groups.high,\n action: this.handleShowRename\n }, {\n title: 'Copy File',\n action: this.handleCopy,\n group: ContextActions.groups.high,\n order: 20\n }];\n var portal = tab === null || tab === void 0 ? void 0 : tab.element.find('.lm_title_before').get(0);\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [portal != null && /*#__PURE__*/ReactDOM.createPortal(/*#__PURE__*/_jsx(\"span\", {\n className: classNames(NotebookPanel.UNSAVED_INDICATOR_CLASS_NAME, {\n [NotebookPanel.UNSAVED_STATUS_CLASS_NAME]: changeCount !== savedChangeCount\n })\n }), portal // tab.element is jquery element, we want a dom element\n ), /*#__PURE__*/_jsxs(Panel, {\n className: \"notebook-container\",\n componentPanel: this,\n glContainer: glContainer,\n glEventHub: glEventHub,\n onTab: this.handleTab,\n onResize: this.handleResize,\n onShow: this.handleShow,\n onTabClicked: this.handleTabClick,\n onTabFocus: this.handleTabFocus,\n onTabBlur: this.handleTabBlur,\n onSessionOpen: this.handleSessionOpened,\n onSessionClose: this.handleSessionClosed,\n additionalActions: additionalActions,\n renderTabTooltip: () => itemName,\n children: [!isMarkdown && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"notebook-toolbar\",\n children: [/*#__PURE__*/_jsxs(\"span\", {\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn-play\",\n onClick: this.handleRunAll,\n disabled: runButtonsDisabled,\n icon: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsPlay,\n transform: \"grow-4\"\n }),\n tooltip: \"Run \".concat(SHORTCUTS.NOTEBOOK.RUN.getDisplayText()),\n \"aria-label\": \"Run\"\n }), disabledRunButtonTooltip != null && /*#__PURE__*/_jsx(Tooltip, {\n children: disabledRunButtonTooltip\n })]\n }), /*#__PURE__*/_jsxs(\"span\", {\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn-play\",\n onClick: this.handleRunSelected,\n disabled: runButtonsDisabled,\n icon: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhRunSelection,\n transform: \"grow-4\"\n }),\n tooltip: \"Run Selected \".concat(SHORTCUTS.NOTEBOOK.RUN_SELECTED.getDisplayText()),\n \"aria-label\": \"Run Selected\"\n }), disabledRunSelectedButtonTooltip != null && /*#__PURE__*/_jsx(Tooltip, {\n children: disabledRunSelectedButtonTooltip\n })]\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"mr-auto\",\n disabled: toolbarDisabled,\n onClick: this.handleSave,\n icon: vsSave,\n tooltip: \"Save \".concat(GLOBAL_SHORTCUTS.SAVE.getDisplayText()),\n \"aria-label\": \"Save\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn-overflow\",\n disabled: toolbarDisabled,\n icon: vsKebabVertical,\n tooltip: \"More Actions...\",\n onClick: () => {\n // no-op: click is handled in `DropdownMenu`\n },\n children: /*#__PURE__*/_jsx(DropdownMenu, {\n actions: this.getDropdownOverflowActions,\n popperOptions: NotebookPanel.POPPER_OPTIONS\n })\n })]\n }), /*#__PURE__*/_jsx(ScriptEditor, {\n isLoaded: isLoaded,\n isLoading: isLoading,\n error: error,\n onChange: this.handleEditorChange,\n onRunCommand: this.handleRunCommand,\n session: session,\n sessionLanguage: sessionLanguage,\n onEditorInitialized: this.handleEditorInitialized,\n onEditorWillDestroy: this.handleEditorWillDestroy,\n settings: settings,\n focusOnMount: focusOnMount,\n ref: notebook => {\n this.notebook = notebook;\n }\n })]\n }), isMarkdown && /*#__PURE__*/_jsx(Suspense, {\n fallback: /*#__PURE__*/_jsx(LoadingOverlay, {\n \"data-testid\": \"notebook-panel-loading\"\n }),\n children: /*#__PURE__*/_jsx(MarkdownNotebook, {\n content: (_settings$value = settings.value) !== null && _settings$value !== void 0 ? _settings$value : '',\n onLinkClick: this.handleLinkClick,\n onRunCode: this.handleRunCommand,\n transformImageUri: this.handleTransformLinkUri,\n transformLinkUri: this.handleTransformLinkUri\n })\n }), /*#__PURE__*/_jsx(NewItemModal, {\n isOpen: showSaveAsModal,\n type: \"file\",\n defaultValue: itemName,\n title: isExistingItem ? 'Rename' : 'Save file as',\n onSubmit: this.handleSaveAsSubmit,\n onCancel: this.handleSaveAsCancel,\n notifyOnExtensionChange: true,\n storage: fileStorage\n }), /*#__PURE__*/_jsx(BasicModal, {\n isOpen: showDeleteModal,\n headerText: \"Are you sure you want to delete \\\"\".concat(itemName, \"\\\"?\"),\n bodyText: \"You cannot undo this action.\",\n onCancel: this.handleDeleteCancel,\n onConfirm: this.handleDeleteConfirm,\n confirmButtonText: \"Delete\"\n }), /*#__PURE__*/_jsx(BasicModal, {\n isOpen: showCloseModal,\n headerText: \"Do you want to save the changes you made to \".concat(itemName, \"?\"),\n bodyText: \"Your changes will be lost if you don't save them.\",\n onCancel: this.handleCloseCancel,\n onDiscard: this.handleCloseDiscard,\n onConfirm: this.handleCloseSave,\n discardButtonText: \"Discard Changes\",\n confirmButtonText: \"Save\"\n }), /*#__PURE__*/_jsx(ContextActions, {\n actions: contextActions\n })]\n })]\n });\n }\n}\n_defineProperty(NotebookPanel, \"COMPONENT\", 'NotebookPanel');\n_defineProperty(NotebookPanel, \"POPPER_OPTIONS\", {\n placement: 'bottom-end'\n});\n_defineProperty(NotebookPanel, \"DEFAULT_NAME\", 'Untitled');\n_defineProperty(NotebookPanel, \"UNSAVED_INDICATOR_CLASS_NAME\", 'editor-unsaved-indicator');\n_defineProperty(NotebookPanel, \"UNSAVED_STATUS_CLASS_NAME\", 'is-unsaved');\n_defineProperty(NotebookPanel, \"defaultProps\", {\n isDashboardActive: true,\n isPreview: false,\n session: null,\n sessionLanguage: null,\n notebookSettings: {\n isMinimapEnabled: true\n }\n});\nvar mapStateToProps = (state, ownProps) => {\n var fileStorage = getFileStorage(state);\n var notebookSettings = getNotebookSettings(state);\n var sessionWrapper = getDashboardSessionWrapper(state, ownProps.localDashboardId);\n var {\n session,\n config: sessionConfig\n } = sessionWrapper !== null && sessionWrapper !== void 0 ? sessionWrapper : {};\n var {\n type: sessionLanguage\n } = sessionConfig !== null && sessionConfig !== void 0 ? sessionConfig : {};\n return {\n fileStorage,\n notebookSettings,\n session,\n sessionLanguage\n };\n};\nvar ConnectedNotebookPanel = connect(mapStateToProps, {\n updateNotebookSettings: updateNotebookSettingsAction\n}, null, {\n forwardRef: true\n})(NotebookPanel);\nexport default ConnectedNotebookPanel;\n//# sourceMappingURL=NotebookPanel.js.map","import React, { useCallback, useRef } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhRefresh } from '@deephaven/icons';\nimport { Button } from '@deephaven/components';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport function PandasReloadButton(_ref) {\n var {\n onClick\n } = _ref;\n var buttonRef = useRef(null);\n var handleClick = useCallback(e => {\n var _buttonRef$current;\n (_buttonRef$current = buttonRef.current) === null || _buttonRef$current === void 0 || _buttonRef$current.blur();\n onClick(e);\n }, [onClick]);\n return /*#__PURE__*/_jsxs(Button, {\n ref: buttonRef,\n kind: \"primary\",\n className: \"btn-pandas\",\n onClick: handleClick,\n tooltip: \"Click to refresh pandas dataframe, updates do not occur automatically.\",\n children: [\"pandas dataframe\", /*#__PURE__*/_jsxs(\"span\", {\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhRefresh,\n transform: \"shrink-1\",\n className: \"mr-1\"\n }), \"Reload\"]\n })]\n });\n}\nexport default PandasReloadButton;\n//# sourceMappingURL=PandasReloadButton.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint-disable react/jsx-props-no-spreading */\n/* eslint-disable react/no-unused-state */\nimport React, { Component } from 'react';\nimport { IrisGridModel } from '@deephaven/iris-grid';\nimport ConnectedIrisGridPanel from \"./IrisGridPanel.js\";\nimport { PandasReloadButton } from \"./PandasReloadButton.js\";\nimport \"./PandasPanel.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * Wraps and IrisGridPanel to add a refresh button for Pandas.\n */\nclass PandasPanel extends Component {\n constructor(props) {\n super(props);\n // eslint-disable-next-line react/sort-comp\n _defineProperty(this, \"irisGridRef\", void 0);\n _defineProperty(this, \"model\", null);\n this.irisGridRef = /*#__PURE__*/React.createRef();\n this.handleDisconnect = this.handleDisconnect.bind(this);\n this.handleReload = this.handleReload.bind(this);\n this.handleGridStateChange = this.handleGridStateChange.bind(this);\n this.handlePanelStateUpdate = this.handlePanelStateUpdate.bind(this);\n var {\n panelState\n } = props;\n this.state = {\n shouldFocusGrid: false,\n panelState,\n // Dehydrated panel state that can load this panel\n makeModel: this.wrapMakeModel(props.makeModel)\n };\n }\n componentDidUpdate(prevProps) {\n var {\n makeModel: prevMakeModel\n } = prevProps;\n var {\n makeModel\n } = this.props;\n if (prevMakeModel !== makeModel) {\n this.setState({\n makeModel: this.wrapMakeModel(makeModel)\n });\n }\n }\n componentWillUnmount() {\n if (this.model != null) {\n this.stopListening(this.model);\n }\n }\n wrapMakeModel(makeModel) {\n var _this = this;\n return /*#__PURE__*/_asyncToGenerator(function* () {\n // Need to listen for disconnect in the model, so we know when to throw this makeModel away\n var model = yield makeModel();\n if (_this.model != null) {\n _this.stopListening(_this.model);\n }\n _this.model = model;\n _this.startListening(model);\n return model;\n });\n }\n startListening(model) {\n model.addEventListener(IrisGridModel.EVENT.DISCONNECT, this.handleDisconnect);\n }\n stopListening(model) {\n model.removeEventListener(IrisGridModel.EVENT.DISCONNECT, this.handleDisconnect);\n }\n handleDisconnect() {\n var _this$irisGridRef$cur;\n // Once a Pandas widget is closed, the underlying table is closed and cannot be reconnected to.\n // Reset the model to undefined so IrisGridPanel doesn't try to use it anymore.\n (_this$irisGridRef$cur = this.irisGridRef.current) === null || _this$irisGridRef$cur === void 0 || _this$irisGridRef$cur.setState({\n model: undefined\n });\n }\n handleReload() {\n var _this$irisGridRef$cur2;\n (_this$irisGridRef$cur2 = this.irisGridRef.current) === null || _this$irisGridRef$cur2 === void 0 || _this$irisGridRef$cur2.initModel();\n this.setState({\n shouldFocusGrid: true\n });\n }\n handleGridStateChange() {\n var _this$irisGridRef$cur3;\n var {\n shouldFocusGrid\n } = this.state;\n if (shouldFocusGrid && (_this$irisGridRef$cur3 = this.irisGridRef.current) !== null && _this$irisGridRef$cur3 !== void 0 && (_this$irisGridRef$cur3 = _this$irisGridRef$cur3.irisGrid) !== null && _this$irisGridRef$cur3 !== void 0 && (_this$irisGridRef$cur3 = _this$irisGridRef$cur3.current) !== null && _this$irisGridRef$cur3 !== void 0 && _this$irisGridRef$cur3.grid) {\n this.irisGridRef.current.irisGrid.current.grid.focus();\n this.setState({\n shouldFocusGrid: false\n });\n }\n }\n handlePanelStateUpdate(panelState) {\n this.setState({\n panelState\n });\n }\n render() {\n var {\n makeModel\n } = this.state;\n return /*#__PURE__*/_jsx(ConnectedIrisGridPanel, _objectSpread(_objectSpread({\n ref: this.irisGridRef,\n onStateChange: this.handleGridStateChange,\n onPanelStateUpdate: this.handlePanelStateUpdate\n }, this.props), {}, {\n makeModel: makeModel,\n children: /*#__PURE__*/_jsx(PandasReloadButton, {\n onClick: this.handleReload\n })\n }));\n }\n}\n_defineProperty(PandasPanel, \"defaultProps\", {\n panelState: null\n});\n_defineProperty(PandasPanel, \"COMPONENT\", 'PandasPanel');\nexport default PandasPanel;\n//# sourceMappingURL=PandasPanel.js.map","function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { isDirectory } from '@deephaven/file-explorer';\nexport class MockFileStorageTable {\n constructor(items) {\n _defineProperty(this, \"items\", void 0);\n _defineProperty(this, \"onUpdateCallback\", void 0);\n this.items = items;\n }\n\n /* eslint-disable class-methods-use-this */\n setSearch(search) {\n // no-op\n }\n setExpanded(path, expanded) {\n // only sets expansion for the FileExplorer in NewItemModal\n if (path.charAt(path.length - 1) === '/') {\n for (var i = 0; i < this.items.length; i += 1) {\n var item = this.items[i];\n if (isDirectory(item) && (\"\".concat(item.filename, \"/\") === path || item.filename === path)) {\n item.isExpanded = expanded;\n }\n }\n }\n return Promise.resolve();\n }\n collapseAll() {\n for (var i = 0; i < this.items.length; i += 1) {\n var item = this.items[i];\n if (isDirectory(item)) {\n item.isExpanded = false;\n }\n }\n return Promise.resolve();\n }\n getViewportData() {\n return Promise.resolve({\n items: this.items,\n // Fill in with mock items\n offset: 0\n });\n }\n getSnapshot(sortedRanges) {\n return _asyncToGenerator(function* () {\n throw new Error('Method not implemented.');\n })();\n }\n setViewport(viewport) {\n var _this = this;\n return _asyncToGenerator(function* () {\n var _this$onUpdateCallbac;\n var loadedViewportData = yield _this.getViewportData();\n (_this$onUpdateCallbac = _this.onUpdateCallback) === null || _this$onUpdateCallbac === void 0 || _this$onUpdateCallbac.call(_this, loadedViewportData);\n })();\n }\n setFilters(config) {\n // no-op\n }\n setSorts(config) {\n // no-op\n }\n setReversed(isReversed) {\n // no-op\n }\n close() {\n // no-op\n }\n onUpdate(callback) {\n this.onUpdateCallback = callback;\n return jest.fn();\n }\n get size() {\n return this.items.length;\n }\n}\nexport default MockFileStorageTable;\n//# sourceMappingURL=MockFileStorageTable.js.map","function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { FileNotFoundError, FileUtils } from '@deephaven/file-explorer';\nimport MockFileStorageTable from \"./MockFileStorageTable.js\";\nexport class MockFileStorage {\n constructor(items) {\n _defineProperty(this, \"items\", void 0);\n this.items = items;\n }\n getTable() {\n var _this = this;\n return _asyncToGenerator(function* () {\n return new MockFileStorageTable(_this.items);\n })();\n }\n\n /* eslint-disable class-methods-use-this */\n saveFile(file) {\n throw new Error('Method not implemented.');\n }\n loadFile(name) {\n throw new Error('Method not implemented.');\n }\n copyFile(name, newName) {\n return _asyncToGenerator(function* () {\n throw new Error('Method not implemented.');\n })();\n }\n deleteFile(name) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n _this2.items = _this2.items.filter(value => value.filename !== name);\n })();\n }\n moveFile(name, newName) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n for (var i = 0; i < _this3.items.length; i += 1) {\n if (_this3.items[i].filename === name) {\n _this3.items[i].filename = newName;\n _this3.items[i].basename = FileUtils.getBaseName(newName);\n _this3.items[i].id = newName;\n break;\n }\n }\n })();\n }\n info(name) {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n var allItems = _this4.items.filter(value => value.filename === name);\n if (allItems.length === 0) {\n throw new FileNotFoundError();\n }\n if (allItems.length > 1) {\n throw new Error('More than one matching file found');\n }\n var itemDetails = allItems[0];\n return {\n filename: itemDetails.filename,\n basename: itemDetails.basename,\n id: itemDetails.filename,\n type: itemDetails.type\n };\n })();\n }\n createDirectory(name) {\n throw new Error('Method not implemented.');\n }\n}\nexport default MockFileStorage;\n//# sourceMappingURL=MockFileStorage.js.map","import CorePanelImport from \"./CorePanel.js\";\nexport { default as ChartPanel } from \"./ChartPanel.js\";\nexport * from \"./ChartPanel.js\";\nexport * from \"./ChartPanelUtils.js\";\nexport { default as CommandHistoryPanel } from \"./CommandHistoryPanel.js\";\nexport { default as ConsolePanel } from \"./ConsolePanel.js\";\nexport { default as DropdownFilterPanel } from \"./DropdownFilterPanel.js\";\nexport { default as FileExplorerPanel } from \"./FileExplorerPanel.js\";\nexport { default as FilterSetManager } from \"./FilterSetManager.js\";\nexport { default as FilterSetManagerPanel } from \"./FilterSetManagerPanel.js\";\nexport { default as InputFilterPanel } from \"./InputFilterPanel.js\";\nexport { default as IrisGridPanel } from \"./IrisGridPanel.js\";\nexport * from \"./IrisGridPanel.js\";\nexport * from \"./IrisGridPanelTypes.js\";\nexport { default as LogPanel } from \"./LogPanel.js\";\nexport { default as MarkdownPanel } from \"./MarkdownPanel.js\";\nexport { default as NotebookPanel } from \"./NotebookPanel.js\";\nexport { default as PandasPanel } from \"./PandasPanel.js\";\nexport * from \"./PandasPanel.js\";\nexport * from \"./WidgetPanelTypes.js\";\nexport { default as WidgetPanel } from \"./WidgetPanel.js\";\nexport { default as WidgetPanelTooltip } from \"./WidgetPanelTooltip.js\";\nexport { default as MockFileStorage } from \"./MockFileStorage.js\";\nexport var CorePanel = CorePanelImport;\n\n/**\n * @deprecated Use CorePanel instead.\n */\nexport var Panel = CorePanelImport;\n//# sourceMappingURL=index.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nimport { forwardRef, useCallback } from 'react';\nimport { useDeferredApi } from '@deephaven/jsapi-bootstrap';\nimport { ChartModelFactory } from '@deephaven/chart';\nimport { IrisGridUtils } from '@deephaven/iris-grid';\nimport { getTimeZone, store } from '@deephaven/redux';\nimport { assertNotNull } from '@deephaven/utils';\nimport { isChartPanelDehydratedProps, isChartPanelTableMetadata } from \"./panels/index.js\";\nimport ConnectedChartPanel from \"./panels/ChartPanel.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction createChartModel(_x, _x2, _x3, _x4) {\n return _createChartModel.apply(this, arguments);\n}\nfunction _createChartModel() {\n _createChartModel = _asyncToGenerator(function* (dh, metadata, panelFetch, panelState) {\n var settings = {};\n var tableName = '';\n var tableSettings = {};\n if (isChartPanelTableMetadata(metadata)) {\n settings = metadata.settings;\n tableName = metadata.table;\n tableSettings = metadata.tableSettings;\n }\n if (panelState != null) {\n if (panelState.tableSettings != null) {\n tableSettings = panelState.tableSettings;\n }\n if (panelState.table != null) {\n tableName = panelState.table;\n }\n if (panelState.settings != null) {\n settings = _objectSpread(_objectSpread({}, settings), panelState.settings);\n }\n }\n if (tableName != null && tableName !== '') {\n var table = yield panelFetch();\n new IrisGridUtils(dh).applyTableSettings(table, tableSettings, getTimeZone(store.getState()));\n return ChartModelFactory.makeModelFromSettings(dh, settings, table);\n }\n var figure = yield panelFetch();\n return ChartModelFactory.makeModel(dh, settings, figure);\n });\n return _createChartModel.apply(this, arguments);\n}\nexport var ChartPanelPlugin = /*#__PURE__*/forwardRef((props, ref) => {\n var panelState = isChartPanelDehydratedProps(props) ? props.panelState : undefined;\n var {\n fetch: panelFetch,\n metadata,\n localDashboardId\n } = props;\n assertNotNull(metadata);\n var [dh, error] = useDeferredApi(metadata);\n var makeModel = useCallback(/*#__PURE__*/_asyncToGenerator(function* () {\n if (error != null) {\n throw error;\n }\n if (dh == null) {\n return new Promise(() => {\n // We don't have the API yet, just return an unresolved promise so it shows as loading\n });\n }\n return createChartModel(dh, metadata, panelFetch, panelState);\n }), [dh, error, metadata, panelFetch, panelState]);\n return /*#__PURE__*/_jsx(ConnectedChartPanel, _objectSpread(_objectSpread({\n ref: ref\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, props), {}, {\n metadata: metadata,\n localDashboardId: localDashboardId,\n makeModel: makeModel\n }));\n});\nChartPanelPlugin.displayName = 'ChartPanelPlugin';\nexport default ChartPanelPlugin;\n//# sourceMappingURL=ChartPanelPlugin.js.map","function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nimport { useEffect, useState } from 'react';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { Chart, ChartModelFactory } from '@deephaven/chart';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function ChartWidgetPlugin(props) {\n var dh = useApi();\n var [model, setModel] = useState();\n var {\n fetch\n } = props;\n useEffect(() => {\n var cancelled = false;\n function init() {\n return _init.apply(this, arguments);\n }\n function _init() {\n _init = _asyncToGenerator(function* () {\n var figure = yield fetch();\n var newModel = yield ChartModelFactory.makeModel(dh, undefined, figure);\n if (!cancelled) {\n setModel(newModel);\n }\n });\n return _init.apply(this, arguments);\n }\n init();\n return () => {\n cancelled = true;\n };\n }, [dh, fetch]);\n return model ? /*#__PURE__*/_jsx(Chart, {\n model: model\n }) : null;\n}\nexport default ChartWidgetPlugin;\n//# sourceMappingURL=ChartWidgetPlugin.js.map","import { PluginType } from '@deephaven/plugin';\nimport { vsGraph } from '@deephaven/icons';\nimport { ChartWidgetPlugin } from \"./ChartWidgetPlugin.js\";\nimport { ChartPanelPlugin } from \"./ChartPanelPlugin.js\";\nvar ChartPluginConfig = {\n name: 'ChartPanel',\n title: 'Chart',\n type: PluginType.WIDGET_PLUGIN,\n component: ChartWidgetPlugin,\n panelComponent: ChartPanelPlugin,\n supportedTypes: 'Figure',\n icon: vsGraph\n};\nexport default ChartPluginConfig;\n//# sourceMappingURL=ChartPluginConfig.js.map","function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nimport { useCallback } from 'react';\nimport { ChartUtils } from '@deephaven/chart';\nimport { assertIsDashboardPluginProps, LayoutUtils, useListener } from '@deephaven/dashboard';\nimport { nanoid } from 'nanoid';\nimport { IrisGridEvent } from \"./events/index.js\";\nimport { ChartPanel } from \"./panels/index.js\";\n/**\n * Listens for IrisGridEvent.CREATE_CHART and creates a chart from the settings provided\n * Requires the GridPlugin and ChartPlugin plugins to be loaded as well\n */\nexport function ChartBuilderPlugin(props) {\n assertIsDashboardPluginProps(props);\n var {\n id,\n layout\n } = props;\n var handleCreateChart = useCallback(_ref => {\n var {\n metadata,\n panelId = nanoid(),\n table\n } = _ref;\n var {\n settings\n } = metadata;\n var fetchTable = /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(function* () {\n return table;\n });\n return function fetchTable() {\n return _ref2.apply(this, arguments);\n };\n }();\n var title = ChartUtils.titleFromSettings(settings);\n var config = {\n type: 'react-component',\n component: ChartPanel.COMPONENT,\n props: {\n localDashboardId: id,\n id: panelId,\n metadata,\n fetch: fetchTable\n },\n title,\n id: panelId\n };\n var {\n root\n } = layout;\n LayoutUtils.openComponent({\n root,\n config\n });\n }, [id, layout]);\n useListener(layout.eventHub, IrisGridEvent.CREATE_CHART, handleCreateChart);\n return null;\n}\nexport default ChartBuilderPlugin;\n//# sourceMappingURL=ChartBuilderPlugin.js.map","import { PluginType } from '@deephaven/plugin';\nimport ChartBuilderPlugin from \"./ChartBuilderPlugin.js\";\nvar ChartBuilderPluginConfig = {\n name: 'ChartBuilderPlugin',\n type: PluginType.DASHBOARD_PLUGIN,\n component: ChartBuilderPlugin\n};\nexport default ChartBuilderPluginConfig;\n//# sourceMappingURL=ChartBuilderPluginConfig.js.map","import { useEffect } from 'react';\nimport { MonacoProviders } from '@deephaven/console';\nimport { useAppSelector } from '@deephaven/dashboard';\nimport { getNotebookSettings } from '@deephaven/redux';\n\n/**\n * Hook to configure Ruff settings in Monaco.\n * The enabled status and settings are read from redux.\n * Any changes to the redux values will be applied to the Monaco providers.\n */\nexport function useConfigureRuff() {\n var {\n python: {\n linter = {}\n } = {}\n } = useAppSelector(getNotebookSettings);\n var {\n isEnabled: ruffEnabled = false,\n config: ruffConfig\n } = linter;\n useEffect(function setRuffSettings() {\n MonacoProviders.isRuffEnabled = ruffEnabled;\n MonacoProviders.setRuffSettings(ruffConfig); // Also inits Ruff if needed\n }, [ruffEnabled, ruffConfig]);\n}\nexport default useConfigureRuff;\n//# sourceMappingURL=useConfigureRuff.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { assertIsDashboardPluginProps, DashboardUtils, LayoutUtils, useListener, usePanelRegistration } from '@deephaven/dashboard';\nimport { FileUtils } from '@deephaven/file-explorer';\nimport { isComponent } from '@deephaven/golden-layout';\nimport Log from '@deephaven/log';\nimport { useCallback, useRef, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { nanoid } from 'nanoid';\nimport { ConsoleEvent, NotebookEvent } from \"./events/index.js\";\nimport { ConsolePanel, CommandHistoryPanel, FileExplorerPanel, LogPanel, NotebookPanel } from \"./panels/index.js\";\nimport { setDashboardConsoleSettings } from \"./redux/index.js\";\nimport useConfigureRuff from \"./useConfigureRuff.js\";\nvar log = Log.module('ConsolePlugin');\nfunction isNotebookPanel(panel) {\n return panel.notebook !== undefined;\n}\nfunction assertIsConsolePluginProps(props) {\n assertIsDashboardPluginProps(props);\n}\nexport function ConsolePlugin(props) {\n assertIsConsolePluginProps(props);\n var {\n id,\n hydrateConsole,\n layout,\n panelManager,\n registerComponent,\n notebooksUrl\n } = props;\n var notebookIndex = useRef(0);\n // Map from file ID to panel ID\n var [openFileMap, setOpenFileMap] = useState(new Map());\n var [previewFileMap, setPreviewFileMap] = useState(new Map());\n useConfigureRuff();\n var dispatch = useDispatch();\n var getConsolePanel = useCallback(() => panelManager.getLastUsedPanelOfType(ConsolePanel), [panelManager]);\n var addOpenFileMapEntry = useCallback((key, value) => {\n setOpenFileMap(map => new Map(map.set(key, value)));\n }, [setOpenFileMap]);\n var deleteOpenFileMapEntry = useCallback(key => {\n setOpenFileMap(map => {\n map.delete(key);\n return new Map(map);\n });\n }, [setOpenFileMap]);\n var addPreviewFileMapEntry = useCallback((key, value) => {\n setPreviewFileMap(map => new Map(map.set(key, value)));\n }, [setPreviewFileMap]);\n var deletePreviewFileMapEntry = useCallback(key => {\n setPreviewFileMap(map => {\n map.delete(key);\n return new Map(map);\n });\n }, [setPreviewFileMap]);\n var handleSendCommand = useCallback(function (command) {\n var focus = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var execute = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var trimmedCommand = command && command.trim();\n if (!trimmedCommand) {\n log.info('Ignoring empty code');\n } else {\n var consolePanel = getConsolePanel();\n if (!consolePanel || !(consolePanel instanceof ConsolePanel.WrappedComponent)) {\n log.error('Console panel not found');\n return;\n }\n log.debug('Send command: ', command, focus, execute);\n consolePanel.addCommand(command, focus, execute);\n }\n }, [getConsolePanel]);\n var handleSettingsChanged = useCallback(consoleSettings => {\n dispatch(setDashboardConsoleSettings(id, consoleSettings));\n }, [dispatch, id]);\n var getNotebookFileName = useCallback(_ref => {\n var {\n language\n } = _ref;\n var extension = language === 'python' ? 'py' : language;\n var title = null;\n if (extension == null) {\n log.debug('No extension for language', language);\n title = \"Untitled-\".concat(notebookIndex.current);\n } else {\n title = \"Untitled-\".concat(notebookIndex.current, \".\").concat(extension);\n }\n notebookIndex.current += 1;\n return title;\n }, []);\n var getPanelIdForFileMetadata = useCallback(function (fileMetadata) {\n var createIfNecessary = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var {\n id: fileId\n } = fileMetadata;\n if (fileId != null && openFileMap.has(fileId)) {\n return openFileMap.get(fileId);\n }\n if (fileId != null && previewFileMap.has(fileId)) {\n return previewFileMap.get(fileId);\n }\n if (createIfNecessary) {\n return nanoid();\n }\n return undefined;\n }, [openFileMap, previewFileMap]);\n var renamePanel = useCallback((panelId, newTitle) => {\n LayoutUtils.renameComponent(layout.root, {\n id: panelId\n }, newTitle);\n }, [layout.root]);\n var renameFilePanel = useCallback((oldName, newName) => {\n log.debug('Rename file panel', oldName, newName);\n var panelId;\n if (openFileMap.has(oldName)) {\n panelId = openFileMap.get(oldName);\n deleteOpenFileMapEntry(oldName);\n if (panelId != null) {\n addOpenFileMapEntry(newName, panelId);\n }\n }\n if (previewFileMap.has(oldName)) {\n panelId = previewFileMap.get(oldName);\n deletePreviewFileMapEntry(oldName);\n if (panelId != null) {\n addPreviewFileMapEntry(newName, panelId);\n }\n }\n if (panelId === undefined) {\n log.debug2(\"File \".concat(oldName, \" isn't open, no need to rename the tab\"));\n return;\n }\n renamePanel(panelId, FileUtils.getBaseName(newName));\n }, [openFileMap, previewFileMap, renamePanel, addOpenFileMapEntry, addPreviewFileMapEntry, deleteOpenFileMapEntry, deletePreviewFileMapEntry]);\n\n /**\n * Show the panel for the given file metadata.\n * If the panel is not already open, then it just logs an error and does nothing.\n */\n var showFilePanel = useCallback(fileMetadata => {\n var panelId = getPanelIdForFileMetadata(fileMetadata, false);\n if (panelId == null) {\n log.error('Could not find panel id for file metadata', fileMetadata);\n return;\n }\n LayoutUtils.activateTab(layout.root, {\n id: panelId\n });\n }, [getPanelIdForFileMetadata, layout.root]);\n var registerFilePanel = useCallback((panelId, fileMetadata, isPreview) => {\n log.debug('registerFilePanel', panelId, fileMetadata, isPreview);\n if (fileMetadata == null || fileMetadata.id == null) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n var {\n id: fileId\n } = fileMetadata;\n if (isPreview) {\n addPreviewFileMapEntry(fileId, panelId);\n return;\n }\n if (openFileMap.has(fileId)) {\n var existingPanelId = openFileMap.get(fileId);\n if (panelId === existingPanelId) {\n log.debug(\"Update tab title for file \".concat(fileId));\n var {\n itemName\n } = fileMetadata;\n renameFilePanel(fileId, itemName);\n } else {\n log.error(\"File \".concat(fileId, \" already associated with a different tab \").concat(existingPanelId));\n }\n return;\n }\n addOpenFileMapEntry(fileId, panelId);\n\n // De-register preview tab\n if (previewFileMap.has(fileId)) {\n deletePreviewFileMapEntry(fileId);\n }\n }, [openFileMap, previewFileMap, renameFilePanel, addOpenFileMapEntry, addPreviewFileMapEntry, deletePreviewFileMapEntry]);\n var unregisterFilePanel = useCallback((fileMetadata, isPreview) => {\n log.debug('unregisterFileTab', fileMetadata, isPreview);\n if (fileMetadata == null || fileMetadata.id == null) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n var {\n id: fileId\n } = fileMetadata;\n if (isPreview) {\n deletePreviewFileMapEntry(fileId);\n return;\n }\n deleteOpenFileMapEntry(fileId);\n }, [deleteOpenFileMapEntry, deletePreviewFileMapEntry]);\n var closeFilePanel = useCallback((fileMetadata, options) => {\n log.debug('closeFilePanel', fileMetadata);\n var {\n id: fileId\n } = fileMetadata;\n if (fileId == null) {\n log.warn('File ID is null, ignore close event');\n return;\n }\n var panelId = null;\n var isPreview = false;\n if (openFileMap.has(fileId)) {\n panelId = openFileMap.get(fileId);\n } else if (previewFileMap.has(fileId)) {\n panelId = previewFileMap.get(fileId);\n isPreview = true;\n } else {\n log.debug(\"File \".concat(fileId, \" isn't open, ignore close event\"));\n return;\n }\n unregisterFilePanel(fileMetadata, isPreview);\n LayoutUtils.closeComponent(layout.root, {\n id: panelId\n }, options);\n }, [layout.root, openFileMap, previewFileMap, unregisterFilePanel]);\n var getNotebookTitle = useCallback(fileMetadata => {\n var {\n itemName\n } = fileMetadata;\n return FileUtils.getBaseName(itemName);\n }, []);\n var fileIsOpen = useCallback(fileMetadata => {\n var {\n id: fileId\n } = fileMetadata;\n log.debug('fileIsOpen', fileMetadata, fileId, openFileMap);\n return fileId != null && openFileMap.has(fileId);\n }, [openFileMap]);\n var fileIsOpenAsPreview = useCallback(fileMetadata => {\n var {\n id: fileId\n } = fileMetadata;\n log.debug('fileIsOpenAsPreview', fileMetadata, fileId, previewFileMap);\n return fileId != null && previewFileMap.has(fileId);\n }, [previewFileMap]);\n\n /*\n * Attempts to focus the panel with the provided panelId\n */\n var focusPanelById = useCallback(panelId => {\n if (panelId == null) {\n return;\n }\n var panel = panelManager.getOpenedPanelById(panelId);\n if (panel && isNotebookPanel(panel)) {\n panel.focus();\n }\n }, [panelManager]);\n var makeConfig = useCallback(_ref2 => {\n var {\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n isPreview = false\n } = _ref2;\n var panelState = {\n settings,\n fileMetadata\n };\n var title = getNotebookTitle(fileMetadata);\n return {\n type: 'react-component',\n component: NotebookPanel.COMPONENT,\n isFocusOnShow: false,\n props: {\n localDashboardId: id,\n metadata: {\n id: panelId\n },\n session,\n sessionLanguage,\n panelState,\n isPreview,\n notebooksUrl\n },\n title,\n id: panelId\n };\n }, [getNotebookTitle, id, notebooksUrl]);\n var createNotebook = useCallback(function (session, sessionLanguage, settings) {\n var fileMetadata = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {\n id: null,\n itemName: getNotebookFileName(settings)\n };\n var panelId = getPanelIdForFileMetadata(fileMetadata);\n if (fileIsOpen(fileMetadata) && panelId != null) {\n log.debug('File is already open, focus panel');\n showFilePanel(fileMetadata);\n focusPanelById(panelId);\n return;\n }\n\n // Should never happen because getPanelForFileMetadata will create an ID by default\n if (panelId == null) {\n log.error('Panel ID for file metadata is null');\n return;\n }\n var stack = LayoutUtils.getStackForComponentTypes(layout.root, [NotebookPanel.COMPONENT]);\n var config = makeConfig({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage\n });\n log.debug('createNotebook', config, openFileMap);\n LayoutUtils.openComponentInStack(stack, config);\n }, [fileIsOpen, focusPanelById, getNotebookFileName, getPanelIdForFileMetadata, layout.root, makeConfig, openFileMap, showFilePanel]);\n var selectNotebook = useCallback(function (session, sessionLanguage, settings, fileMetadata) {\n var shouldFocus = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n log.debug('selectNotebook', fileMetadata, shouldFocus);\n var isFileOpen = fileIsOpen(fileMetadata);\n var isFileOpenAsPreview = fileIsOpenAsPreview(fileMetadata);\n var [previewId] = [...previewFileMap.values()];\n var isPreview = !shouldFocus;\n var panelId = isPreview && previewId ? previewId : getPanelIdForFileMetadata(fileMetadata);\n if (panelId == null || panelId === '') {\n throw new Error(\"Unable to retrieve or create panelId for metadata: \".concat(JSON.stringify(fileMetadata)));\n }\n\n // If the file is already open, show it\n if (isFileOpen || isFileOpenAsPreview) {\n showFilePanel(fileMetadata);\n } else {\n var stack = LayoutUtils.getStackForComponentTypes(layout.root, [NotebookPanel.COMPONENT]);\n var config = makeConfig({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n isPreview\n });\n\n // This will replace the existing preview by panelId if needed\n LayoutUtils.openComponentInStack(stack, config);\n }\n\n // If the file is open as a preview and focused, promote to non-preview\n if (isFileOpenAsPreview && shouldFocus) {\n var fileId = fileMetadata.id;\n var _stack = LayoutUtils.getStackForConfig(layout.root, {\n component: NotebookPanel.COMPONENT,\n id: panelId\n });\n var item = LayoutUtils.getContentItemInStack(_stack, {\n component: NotebookPanel.COMPONENT,\n id: panelId\n });\n if (fileId != null && item && isComponent(item)) {\n item.container.emit(NotebookEvent.PROMOTE_FROM_PREVIEW);\n deletePreviewFileMapEntry(fileId);\n addOpenFileMapEntry(fileId, panelId);\n }\n }\n if (shouldFocus) {\n // Focus the tab if we're supposed to\n focusPanelById(panelId);\n }\n }, [showFilePanel, fileIsOpen, fileIsOpenAsPreview, focusPanelById, getPanelIdForFileMetadata, layout.root, makeConfig, previewFileMap, deletePreviewFileMapEntry, addOpenFileMapEntry]);\n\n /** Attempts to send the text to a notebook matching the passed in settings */\n var sendToNotebook = useCallback(function (session, sessionLanguage) {\n var settings = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var createIfNecessary = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n var notebookPanel = panelManager.getLastUsedPanelOfType(NotebookPanel);\n if (notebookPanel && isNotebookPanel(notebookPanel)) {\n if (settings != null && settings.value != null && notebookPanel.notebook != null) {\n notebookPanel.notebook.append(settings.value);\n }\n } else if (createIfNecessary) {\n createNotebook(session, sessionLanguage, settings);\n }\n }, [createNotebook, panelManager]);\n var hydrateNotebook = useCallback((panelProps, panelDashboardId) => DashboardUtils.hydrate(_objectSpread(_objectSpread({}, panelProps), {}, {\n notebooksUrl\n }), panelDashboardId), [notebooksUrl]);\n usePanelRegistration(registerComponent, ConsolePanel, hydrateConsole);\n usePanelRegistration(registerComponent, CommandHistoryPanel);\n usePanelRegistration(registerComponent, FileExplorerPanel);\n usePanelRegistration(registerComponent, LogPanel);\n usePanelRegistration(registerComponent, NotebookPanel, hydrateNotebook);\n useListener(layout.eventHub, ConsoleEvent.SEND_COMMAND, handleSendCommand);\n useListener(layout.eventHub, ConsoleEvent.SETTINGS_CHANGED, handleSettingsChanged);\n useListener(layout.eventHub, NotebookEvent.CLOSE_FILE, closeFilePanel);\n useListener(layout.eventHub, NotebookEvent.CREATE_NOTEBOOK, createNotebook);\n useListener(layout.eventHub, NotebookEvent.SELECT_NOTEBOOK, selectNotebook);\n useListener(layout.eventHub, NotebookEvent.RENAME, renamePanel);\n useListener(layout.eventHub, NotebookEvent.RENAME_FILE, renameFilePanel);\n useListener(layout.eventHub, NotebookEvent.SEND_TO_NOTEBOOK, sendToNotebook);\n useListener(layout.eventHub, NotebookEvent.REGISTER_FILE, registerFilePanel);\n useListener(layout.eventHub, NotebookEvent.UNREGISTER_FILE, unregisterFilePanel);\n return null;\n}\nexport default ConsolePlugin;\n//# sourceMappingURL=ConsolePlugin.js.map","import { useCallback, useEffect, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { nanoid } from 'nanoid';\nimport { assertIsDashboardPluginProps, LayoutUtils, PanelEvent, updateDashboardData, useListener } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport { TextUtils } from '@deephaven/utils';\nimport { InputFilterEvent } from \"./events/index.js\";\nimport { DropdownFilterPanel, FilterSetManagerPanel, InputFilterPanel } from \"./panels/index.js\";\nimport { useFilterChangedListener, useFilterColumnsChangedListener, useFilterTableChangedListener } from \"./FilterEvents.js\";\nvar log = Log.module('FilterPlugin');\nexport function FilterPlugin(props) {\n assertIsDashboardPluginProps(props);\n var {\n id: localDashboardId,\n layout,\n registerComponent\n } = props;\n var dispatch = useDispatch();\n var [panelColumns] = useState(() => new Map());\n var [panelFilters] = useState(() => new Map());\n var [panelTables] = useState(() => new Map());\n var sendUpdate = useCallback(() => {\n var columns = Array.from(panelColumns.values()).flat().sort((a, b) => {\n var aName = TextUtils.toLower(a.name);\n var bName = TextUtils.toLower(b.name);\n if (aName !== bName) {\n return aName > bName ? 1 : -1;\n }\n var aType = TextUtils.toLower(a.type);\n var bType = TextUtils.toLower(b.type);\n if (aType !== bType) {\n return aType > bType ? 1 : -1;\n }\n return 0;\n }).reduce((array, column) => {\n if (array.length === 0 || TextUtils.toLower(array[array.length - 1].name) !== TextUtils.toLower(column.name) || TextUtils.toLower(array[array.length - 1].type) !== TextUtils.toLower(column.type)) {\n array.push(column);\n }\n return array;\n }, []);\n var filters = Array.from(panelFilters.values()).flat().sort((a, b) => a.timestamp - b.timestamp);\n var tableMap = new Map(panelTables);\n log.debug('sendUpdate', {\n columns,\n filters,\n tableMap\n });\n dispatch(updateDashboardData(localDashboardId, {\n columns,\n filters,\n tableMap\n }));\n }, [dispatch, localDashboardId, panelColumns, panelFilters, panelTables]);\n\n /**\n * Handler for the COLUMNS_CHANGED event.\n * @param sourceId The id of the component that's emitting the filter change\n * @param columns The columns in this panel. Null to clear the columns.\n */\n var handleColumnsChanged = useCallback((sourceId, columns) => {\n log.debug2('handleColumnsChanged', sourceId, columns);\n if (columns == null) {\n panelColumns.delete(sourceId);\n } else {\n panelColumns.set(sourceId, [].concat(columns));\n }\n sendUpdate();\n }, [panelColumns, sendUpdate]);\n\n /**\n * Handler for the FILTERS_CHANGED event.\n * @param sourceId The id of the component that's emitting the filter change\n * @param filters The input filters set by the panel\n */\n var handleFiltersChanged = useCallback((sourceId, filters) => {\n log.debug2('handleFiltersChanged', sourceId, filters);\n if (filters == null) {\n panelFilters.delete(sourceId);\n } else {\n panelFilters.set(sourceId, [].concat(filters !== null && filters !== void 0 ? filters : []));\n }\n sendUpdate();\n }, [panelFilters, sendUpdate]);\n var handleTableChanged = useCallback((sourceId, table) => {\n log.debug2('handleTableChanged', sourceId, table);\n if (table == null) {\n panelTables.delete(sourceId);\n } else {\n panelTables.set(sourceId, table);\n }\n sendUpdate();\n }, [panelTables, sendUpdate]);\n var handlePanelUnmount = useCallback(panel => {\n log.debug2('handlePanelUnmount', panel);\n var panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId != null) {\n panelColumns.delete(panelId);\n panelTables.delete(panelId);\n panelFilters.delete(panelId);\n }\n sendUpdate();\n }, [panelColumns, panelFilters, panelTables, sendUpdate]);\n var handleOpenDropdown = useCallback(_ref => {\n var {\n title = 'DropdownFilter',\n metadata = {},\n panelState = null,\n id = nanoid(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = undefined\n } = _ref;\n var config = {\n type: 'react-component',\n component: DropdownFilterPanel.COMPONENT,\n props: {\n id,\n metadata,\n panelState,\n localDashboardId\n },\n title,\n id\n };\n var {\n root\n } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent\n });\n }, [layout, localDashboardId]);\n var handleOpenInput = useCallback(_ref2 => {\n var {\n title = 'InputFilter',\n metadata = {},\n panelState = null,\n id = nanoid(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = undefined\n } = _ref2;\n var config = {\n type: 'react-component',\n component: InputFilterPanel.COMPONENT,\n props: {\n id,\n metadata,\n panelState,\n localDashboardId\n },\n title,\n id\n };\n var {\n root\n } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent\n });\n }, [layout, localDashboardId]);\n var handleOpenFilterSetManager = useCallback(_ref3 => {\n var {\n title = 'FilterSets',\n metadata = {},\n panelState = null,\n id = nanoid(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = undefined\n } = _ref3;\n var config = {\n type: 'react-component',\n component: FilterSetManagerPanel.COMPONENT,\n props: {\n id,\n metadata,\n panelState,\n localDashboardId\n },\n title,\n id\n };\n var {\n root\n } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent\n });\n }, [layout, localDashboardId]);\n useEffect(function registerComponentsAndReturnCleanup() {\n var cleanups = [registerComponent(DropdownFilterPanel.COMPONENT, DropdownFilterPanel), registerComponent(InputFilterPanel.COMPONENT, InputFilterPanel), registerComponent(FilterSetManagerPanel.COMPONENT, FilterSetManagerPanel)];\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n }, [registerComponent]);\n useFilterColumnsChangedListener(layout.eventHub, handleColumnsChanged);\n useFilterChangedListener(layout.eventHub, handleFiltersChanged);\n useFilterTableChangedListener(layout.eventHub, handleTableChanged);\n useListener(layout.eventHub, InputFilterEvent.OPEN_DROPDOWN, handleOpenDropdown);\n useListener(layout.eventHub, InputFilterEvent.OPEN_INPUT, handleOpenInput);\n useListener(layout.eventHub, InputFilterEvent.OPEN_FILTER_SET_MANAGER, handleOpenFilterSetManager);\n useListener(layout.eventHub, PanelEvent.UNMOUNT, handlePanelUnmount);\n return null;\n}\nexport default FilterPlugin;\n//# sourceMappingURL=FilterPlugin.js.map","import { PluginType } from '@deephaven/plugin';\nimport FilterPlugin from \"./FilterPlugin.js\";\nvar FilterPluginConfig = {\n name: 'FilterPlugin',\n type: PluginType.DASHBOARD_PLUGIN,\n component: FilterPlugin\n};\nexport default FilterPluginConfig;\n//# sourceMappingURL=FilterPluginConfig.js.map","import { useCallback } from 'react';\nimport { isTablePlugin, isLegacyTablePlugin, usePlugins } from '@deephaven/plugin';\nimport Log from '@deephaven/log';\nvar log = Log.module('@deephaven/app-utils/useTablePlugin');\n\n/**\n * Creates a table plugin loader function.\n * @returns A function to load a Table plugin element by name\n */\nexport function useLoadTablePlugin() {\n var plugins = usePlugins();\n var plugin = useCallback(name => {\n // First check if we have any plugin modules loaded that match the TablePlugin.\n var pluginModule = plugins.get(name);\n if (pluginModule != null) {\n if (isTablePlugin(pluginModule)) {\n return pluginModule.component;\n }\n if (isLegacyTablePlugin(pluginModule)) {\n return pluginModule.TablePlugin;\n }\n }\n var errorMessage = \"Unable to find table plugin \".concat(name, \".\");\n log.error(errorMessage);\n throw new Error(errorMessage);\n }, [plugins]);\n return plugin;\n}\nexport default useLoadTablePlugin;\n//# sourceMappingURL=useLoadTablePlugin.js.map","function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nimport { useMemo } from 'react';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { IrisGridModelFactory } from '@deephaven/iris-grid';\nimport { useLoadTablePlugin } from \"./useLoadTablePlugin.js\";\n/**\n * Hydrate the props for a grid panel\n * @param fetchTable Function to fetch the Table object\n * @param id ID of the dashboard\n * @param metadata Optional serializable metadata for re-fetching the table later\n * @returns Props hydrated for a grid panel\n */\nexport function useHydrateGrid(fetchTable, id, metadata) {\n var api = useApi();\n var loadPlugin = useLoadTablePlugin();\n var hydratedProps = useMemo(() => ({\n loadPlugin,\n localDashboardId: id,\n makeModel: function () {\n var _makeModel = _asyncToGenerator(function* () {\n var table = yield fetchTable();\n return IrisGridModelFactory.makeModel(api, table);\n });\n function makeModel() {\n return _makeModel.apply(this, arguments);\n }\n return makeModel;\n }(),\n metadata\n }), [api, fetchTable, id, loadPlugin, metadata]);\n return hydratedProps;\n}\nexport default useHydrateGrid;\n//# sourceMappingURL=useHydrateGrid.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { forwardRef } from 'react';\nimport useHydrateGrid from \"./useHydrateGrid.js\";\nimport ConnectedIrisGridPanel from \"./panels/IrisGridPanel.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport var GridPanelPlugin = /*#__PURE__*/forwardRef((props, ref) => {\n var {\n localDashboardId,\n fetch,\n metadata\n } = props;\n var hydratedProps = useHydrateGrid(fetch, localDashboardId, metadata);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return /*#__PURE__*/_jsx(ConnectedIrisGridPanel, _objectSpread(_objectSpread({\n ref: ref\n }, props), hydratedProps));\n});\nGridPanelPlugin.displayName = 'GridPanelPlugin';\nexport default GridPanelPlugin;\n//# sourceMappingURL=GridPanelPlugin.js.map","function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { IrisGridModel, IrisGridModelFactory } from '@deephaven/iris-grid';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n/** Pass in a table `fetch` function, will load the model and handle any errors */\nexport function useIrisGridModel(fetch) {\n var dh = useApi();\n var [model, setModel] = useState();\n var [error, setError] = useState();\n var [isLoading, setIsLoading] = useState(true);\n var makeModel = useCallback(/*#__PURE__*/_asyncToGenerator(function* () {\n var table = yield fetch();\n return IrisGridModelFactory.makeModel(dh, table);\n }), [dh, fetch]);\n var reload = useCallback(/*#__PURE__*/_asyncToGenerator(function* () {\n setIsLoading(true);\n setError(undefined);\n try {\n var newModel = yield makeModel();\n setModel(newModel);\n setIsLoading(false);\n } catch (e) {\n setError(e);\n setIsLoading(false);\n }\n }), [makeModel]);\n useEffect(() => {\n var cancelled = false;\n function init() {\n return _init.apply(this, arguments);\n }\n function _init() {\n _init = _asyncToGenerator(function* () {\n setIsLoading(true);\n setError(undefined);\n try {\n var newModel = yield makeModel();\n if (!cancelled) {\n setModel(newModel);\n setIsLoading(false);\n }\n } catch (e) {\n if (!cancelled) {\n setError(e);\n setIsLoading(false);\n }\n }\n });\n return _init.apply(this, arguments);\n }\n init();\n return () => {\n cancelled = true;\n };\n }, [makeModel]);\n useEffect(function startListeningModel() {\n if (!model) {\n return;\n }\n\n // If the table inside a widget is disconnected, then don't bother trying to listen to reconnect, just close it and show a message\n // Widget closes the table already when it is disconnected, so no need to close it again\n function handleDisconnect() {\n setError(new Error('Table disconnected'));\n setModel(undefined);\n setIsLoading(false);\n }\n model.addEventListener(IrisGridModel.EVENT.DISCONNECT, handleDisconnect);\n return () => {\n model.removeEventListener(IrisGridModel.EVENT.DISCONNECT, handleDisconnect);\n };\n }, [model]);\n var result = useMemo(() => {\n if (isLoading) {\n return {\n reload,\n status: 'loading'\n };\n }\n if (error != null) {\n return {\n error,\n reload,\n status: 'error'\n };\n }\n if (model != null) {\n return {\n model,\n reload,\n status: 'success'\n };\n }\n throw new Error('Invalid state');\n }, [error, isLoading, model, reload]);\n return result;\n}\n//# sourceMappingURL=useIrisGridModel.js.map","import { useCallback, useEffect, useMemo } from 'react';\nimport { IrisGridUtils } from '@deephaven/iris-grid';\nimport { useLayoutManager, useDashboardId, useAppSelector, useDhId } from '@deephaven/dashboard';\nimport { getInputFiltersForDashboard } from \"./redux/index.js\";\nimport { emitFilterColumnsChanged, emitFilterTableChanged } from \"./FilterEvents.js\";\n/**\n * Subscribes to the dashboard column filters (a.k.a. InputFilter) for the current panel or widget, and\n * adds the columns provided to the filter options in the dashboard.\n * @param columns The columns this source has available for filtering.\n * These are used to populate filter options in the UI (InputFilter, DropdownFilter).\n * null can be used to indicate the source is not yet ready which is useful\n * to preserve\n * @param table The table for this source if applicable.\n * This is used to enable ChartBuilder from IrisGrid.\n * @returns The dashboard column filters (InputFilter[]) that apply to the columns provided.\n */\nexport function useDashboardColumnFilters(columns, table) {\n var {\n eventHub\n } = useLayoutManager();\n var dashboardId = useDashboardId();\n var panelId = useDhId();\n useEffect(function columnsChanged() {\n if (panelId == null || columns == null) {\n return;\n }\n emitFilterColumnsChanged(eventHub, panelId, columns);\n }, [eventHub, panelId, columns]);\n useEffect(function tableChanged() {\n if (table == null || panelId == null) {\n return;\n }\n emitFilterTableChanged(eventHub, panelId, table);\n }, [eventHub, panelId, table]);\n\n // Cleanup separately because filtering the table or other operations can get a new columns array,\n // and we are using null to indicate unmount, not change\n useEffect(function cleanupOnUnmount() {\n if (panelId == null) {\n return;\n }\n return () => {\n emitFilterColumnsChanged(eventHub, panelId, null);\n emitFilterTableChanged(eventHub, panelId, null);\n };\n }, [eventHub, panelId]);\n var getInputFilters = useCallback(s => getInputFiltersForDashboard(s, dashboardId), [dashboardId]);\n var reduxInputFilters = useAppSelector(getInputFilters);\n var inputFilters = useMemo(() => IrisGridUtils.getInputFiltersForColumns(columns !== null && columns !== void 0 ? columns : [],\n // They may have picked a column, but not actually entered a value yet. In that case, don't need to update.\n reduxInputFilters.filter(_ref => {\n var {\n value,\n excludePanelIds\n } = _ref;\n return value != null && (excludePanelIds == null || panelId != null && !excludePanelIds.includes(panelId));\n })), [columns, panelId, reduxInputFilters]);\n return inputFilters;\n}\nexport default useDashboardColumnFilters;\n//# sourceMappingURL=useDashboardColumnFilters.js.map","import { useCallback, useEffect, useMemo } from 'react';\nimport clamp from 'lodash.clamp';\nimport { useAppSelector, useDashboardId, useDhId, useLayoutManager, usePanelId } from '@deephaven/dashboard';\nimport { assertNotNull } from '@deephaven/utils';\nimport { emitLinkPointSelected, emitLinkSourceDataSelected, emitRegisterLinkTarget } from \"./linker/LinkerEvent.js\";\nimport { getColumnSelectionValidatorForDashboard, getLinksForDashboard } from \"./redux/index.js\";\nexport function useGridLinker(model, irisGrid) {\n var {\n eventHub\n } = useLayoutManager();\n var dashboardId = useDashboardId();\n var dhId = useDhId();\n var panelId = usePanelId();\n var getLinks = useCallback(s => getLinksForDashboard(s, dashboardId), [dashboardId]);\n var links = useAppSelector(getLinks);\n var linkColumns = useMemo(() => {\n var columnSet = new Set();\n links.forEach(link => {\n if (link.start.panelId === dhId) {\n columnSet.add(link.start.columnName);\n }\n });\n return [...columnSet];\n }, [links, dhId]);\n var getColumnSelectionValidator = useCallback(s => getColumnSelectionValidatorForDashboard(s, dashboardId), [dashboardId]);\n var columnSelectionValidator = useAppSelector(getColumnSelectionValidator);\n var isColumnSelectionValid = useCallback(column => {\n if (columnSelectionValidator && column && dhId != null) {\n return columnSelectionValidator(dhId, column, {\n type: 'tableLink'\n });\n }\n return false;\n }, [columnSelectionValidator, dhId]);\n var isSelectingColumn = columnSelectionValidator != null;\n var onDataSelected = useCallback((row, dataMap) => {\n if (dhId == null) {\n return;\n }\n emitLinkSourceDataSelected(eventHub, dhId, dataMap);\n }, [eventHub, dhId]);\n var getCoordinates = useCallback(columnName => {\n var _gridWrapper$getBound, _allColumnXs$get, _allColumnWidths$get;\n if (!model || !irisGrid) {\n return null;\n }\n var {\n gridWrapper\n } = irisGrid;\n var rect = (_gridWrapper$getBound = gridWrapper === null || gridWrapper === void 0 ? void 0 : gridWrapper.getBoundingClientRect()) !== null && _gridWrapper$getBound !== void 0 ? _gridWrapper$getBound : null;\n if (rect == null || rect.width <= 0 || rect.height <= 0) {\n return null;\n }\n var {\n metrics\n } = irisGrid.state;\n assertNotNull(metrics);\n var {\n columnHeaderHeight,\n allColumnXs,\n allColumnWidths,\n right,\n columnHeaderMaxDepth\n } = metrics;\n var columnIndex = model.getColumnIndexByName(columnName);\n assertNotNull(columnIndex);\n var visibleIndex = irisGrid.getVisibleColumn(columnIndex);\n var columnX = (_allColumnXs$get = allColumnXs.get(visibleIndex)) !== null && _allColumnXs$get !== void 0 ? _allColumnXs$get : 0;\n var columnWidth = (_allColumnWidths$get = allColumnWidths.get(visibleIndex)) !== null && _allColumnWidths$get !== void 0 ? _allColumnWidths$get : 0;\n var x = clamp(visibleIndex > right ? rect.right : rect.left + columnX + columnWidth * 0.5, rect.left, rect.right);\n var y = rect.top + columnHeaderHeight * columnHeaderMaxDepth;\n return [x, y];\n }, [model, irisGrid]);\n var onColumnSelected = useCallback(column => {\n if (dhId == null) {\n return;\n }\n emitLinkPointSelected(eventHub, dhId, column, {\n type: 'tableLink'\n });\n }, [eventHub, dhId]);\n useEffect(function registerTarget() {\n if (!irisGrid || panelId == null || dhId == null) {\n return;\n }\n emitRegisterLinkTarget(eventHub, dhId, {\n getCoordinates,\n setFilterValues: irisGrid.setFilterMap,\n unsetFilterValue: () => {\n // No-op\n },\n panelId\n });\n return () => {\n emitRegisterLinkTarget(eventHub, dhId, null);\n };\n }, [eventHub, dhId, getCoordinates, irisGrid, panelId]);\n return {\n alwaysFetchColumns: linkColumns,\n columnSelectionValidator: isColumnSelectionValid,\n isSelectingColumn,\n onColumnSelected,\n onDataSelected\n };\n}\nexport default useGridLinker;\n//# sourceMappingURL=useGridLinker.js.map","import { forwardRef, useMemo } from 'react';\nimport { LayoutUtils, useLayoutManager, usePanelId } from '@deephaven/dashboard';\nimport useLoadTablePlugin from \"./useLoadTablePlugin.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport var TablePluginWrapper = /*#__PURE__*/forwardRef((_ref, ref) => {\n var {\n name,\n model,\n filter,\n fetchColumns,\n selectedRanges,\n irisGridRef,\n pluginState,\n onStateChange\n } = _ref;\n var loadPlugin = useLoadTablePlugin();\n var Plugin = useMemo(() => loadPlugin(name), [loadPlugin, name]);\n var layoutManager = useLayoutManager();\n var panelId = usePanelId();\n var panelName = useMemo(() => {\n var _panelItem$config$tit;\n if (panelId == null) {\n return 'unknown';\n }\n var panelItem = LayoutUtils.getContentItemById(layoutManager.root, panelId);\n return (_panelItem$config$tit = panelItem === null || panelItem === void 0 ? void 0 : panelItem.config.title) !== null && _panelItem$config$tit !== void 0 ? _panelItem$config$tit : 'unknown';\n }, [layoutManager.root, panelId]);\n var panel = useMemo(() => ({\n irisGrid: irisGridRef,\n getTableName: () => panelName\n }), [irisGridRef, panelName]);\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"iris-grid-plugin\",\n children: /*#__PURE__*/_jsx(Plugin, {\n ref: ref,\n filter: filter,\n fetchColumns: fetchColumns,\n model: model,\n table: model.table,\n tableName: panelName,\n selectedRanges: selectedRanges,\n onStateChange: onStateChange,\n pluginState: pluginState\n // Mimic the panel containing `irisGrid.current` for backwards compatibility\n // since we don't have an IrisGridPanel to use here.\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n ,\n panel: panel\n })\n });\n});\nTablePluginWrapper.displayName = 'TablePluginWrapper';\nexport default TablePluginWrapper;\n//# sourceMappingURL=TablePluginWrapper.js.map","import { useCallback, useMemo, useRef, useState } from 'react';\nimport { usePersistentState } from '@deephaven/plugin';\nimport { isIrisGridTableModelTemplate } from '@deephaven/iris-grid';\nimport { TablePluginWrapper } from \"./TablePluginWrapper.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * Hook to get a TablePlugin component and the IrisGrid props derived from the plugin.\n * The returned props should be passed to the IrisGrid component or merged with other sources\n * of the same props.\n * @param props The properties for the table plugin. The props object itself does not need to be memoized,\n * but the values inside it should be stable to avoid unnecessary re-renders.\n * @returns Object containing `Plugin` key which is the Plugin component.\n * The remaining object keys are IrisGrid props associated with the plugin.\n */\nexport function useTablePlugin(_ref) {\n var {\n model,\n irisGridRef,\n irisGridUtils,\n selectedRanges\n } = _ref;\n var [pluginFilters, setPluginFilters] = useState([]);\n var customFilters = useMemo(() => model != null && irisGridUtils != null && isIrisGridTableModelTemplate(model) ? irisGridUtils.getFiltersFromInputFilters(model.table.columns, pluginFilters, model.formatter.timeZone) : [], [model, irisGridUtils, pluginFilters]);\n var [alwaysFetchColumns, setAlwaysFetchColumns] = useState([]);\n var pluginRef = useRef(null);\n var [pluginState, setPluginState] = usePersistentState(undefined, {\n version: 1,\n // pluginName will be undefined on first call when re-hydrating,\n // so use a constant type to avoid re-hydration issues with the persistent state type\n type: 'GridWidgetTablePluginState'\n });\n var Plugin = useMemo(() => model != null && isIrisGridTableModelTemplate(model) && model.table.pluginName != null ? /*#__PURE__*/_jsx(TablePluginWrapper, {\n ref: pluginRef,\n name: model.table.pluginName,\n model: model,\n filter: setPluginFilters,\n fetchColumns: setAlwaysFetchColumns,\n selectedRanges: selectedRanges,\n irisGridRef: irisGridRef,\n pluginState: pluginState,\n onStateChange: setPluginState\n }) : null, [model, selectedRanges, irisGridRef, pluginState, setPluginState]);\n var onContextMenu = useCallback(data => {\n var _pluginRef$current$ge, _pluginRef$current, _pluginRef$current$ge2;\n return (_pluginRef$current$ge = (_pluginRef$current = pluginRef.current) === null || _pluginRef$current === void 0 || (_pluginRef$current$ge2 = _pluginRef$current.getMenu) === null || _pluginRef$current$ge2 === void 0 ? void 0 : _pluginRef$current$ge2.call(_pluginRef$current, data)) !== null && _pluginRef$current$ge !== void 0 ? _pluginRef$current$ge : [];\n }, []);\n return {\n Plugin,\n customFilters,\n alwaysFetchColumns,\n onContextMenu\n };\n}\nexport default useTablePlugin;\n//# sourceMappingURL=useTablePlugin.js.map","var _excluded = [\"alwaysFetchColumns\"];\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { useCallback, useMemo, useRef, useState } from 'react';\nimport { usePersistentState } from '@deephaven/plugin';\nimport { IrisGrid, IrisGridCacheUtils, IrisGridUtils, isIrisGridTableModelTemplate } from '@deephaven/iris-grid';\nimport { useSelector } from 'react-redux';\nimport { getSettings } from '@deephaven/redux';\nimport { LoadingOverlay } from '@deephaven/components';\nimport { useLayoutManager, useListener } from '@deephaven/dashboard';\nimport { assertNotNull, getErrorMessage } from '@deephaven/utils';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { useIrisGridModel } from \"./useIrisGridModel.js\";\nimport useDashboardColumnFilters from \"./useDashboardColumnFilters.js\";\nimport { InputFilterEvent } from \"./events/index.js\";\nimport useGridLinker from \"./useGridLinker.js\";\nimport { useTablePlugin } from \"./useTablePlugin.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function GridWidgetPlugin(_ref) {\n var _model$columns;\n var {\n fetch\n } = _ref;\n var settings = useSelector(getSettings);\n var {\n eventHub\n } = useLayoutManager();\n var fetchResult = useIrisGridModel(fetch);\n var model = fetchResult.status === 'success' ? fetchResult.model : undefined;\n var dh = useApi();\n var irisGridUtils = useMemo(() => new IrisGridUtils(dh), [dh]);\n var [state, setState] = usePersistentState(undefined, {\n version: 1,\n type: 'GridWidgetPlugin'\n });\n var initialState = useRef(state);\n var hydratedState = useMemo(() => {\n if (fetchResult.status !== 'success' || initialState.current === undefined) {\n return;\n }\n return _objectSpread(_objectSpread({}, irisGridUtils.hydrateIrisGridState(fetchResult.model, initialState.current)), IrisGridUtils.hydrateGridState(fetchResult.model, initialState.current));\n }, [fetchResult, irisGridUtils]);\n var dehydrateIrisGridState = useMemo(() => IrisGridCacheUtils.makeMemoizedCombinedGridStateDehydrator(), []);\n var handleIrisGridChange = useCallback((irisGridState, gridState) => {\n if (fetchResult.status !== 'success' || irisGridState == null || gridState == null) {\n return;\n }\n var newState = dehydrateIrisGridState(fetchResult.model, irisGridState, gridState);\n setState(newState);\n }, [fetchResult, setState, dehydrateIrisGridState]);\n var inputFilters = useDashboardColumnFilters((_model$columns = model === null || model === void 0 ? void 0 : model.columns) !== null && _model$columns !== void 0 ? _model$columns : null, model != null && isIrisGridTableModelTemplate(model) ? model.table : undefined);\n var irisGridRef = useRef(null);\n var _useGridLinker = useGridLinker(fetchResult.status === 'success' ? fetchResult.model : null, irisGridRef.current),\n {\n alwaysFetchColumns: linkerAlwaysFetchColumns\n } = _useGridLinker,\n linkerProps = _objectWithoutProperties(_useGridLinker, _excluded);\n var handleClearAllFilters = useCallback(() => {\n if (irisGridRef.current == null) {\n return;\n }\n irisGridRef.current.clearAllFilters();\n }, []);\n useListener(eventHub, InputFilterEvent.CLEAR_ALL_FILTERS, handleClearAllFilters);\n var [selection, setSelection] = useState([]);\n var {\n Plugin,\n customFilters,\n alwaysFetchColumns: filterFetchColumns,\n onContextMenu\n } = useTablePlugin({\n model,\n irisGridRef,\n irisGridUtils,\n selectedRanges: selection\n });\n var alwaysFetchColumns = useMemo(() => {\n var columnSet = new Set([...linkerAlwaysFetchColumns, ...filterFetchColumns]);\n return [...columnSet];\n }, [linkerAlwaysFetchColumns, filterFetchColumns]);\n if (fetchResult.status === 'loading') {\n return /*#__PURE__*/_jsx(LoadingOverlay, {\n isLoading: true,\n \"data-testid\": \"grid-widget-plugin-loading\"\n });\n }\n if (fetchResult.status === 'error') {\n return /*#__PURE__*/_jsx(LoadingOverlay, {\n \"data-testid\": \"grid-widget-plugin-loading-error\",\n errorMessage: getErrorMessage(fetchResult.error),\n isLoading: false\n });\n }\n assertNotNull(model, 'Model should be defined when fetch is successful');\n return /*#__PURE__*/_jsx(IrisGrid, _objectSpread(_objectSpread(_objectSpread({\n ref: irisGridRef,\n model: model,\n settings: settings,\n onStateChange: handleIrisGridChange,\n onSelectionChanged: setSelection,\n onContextMenu: onContextMenu,\n inputFilters: inputFilters,\n customFilters: customFilters\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, linkerProps), {}, {\n alwaysFetchColumns: alwaysFetchColumns\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, hydratedState), {}, {\n children: Plugin\n }));\n}\nexport default GridWidgetPlugin;\n//# sourceMappingURL=GridWidgetPlugin.js.map","import { PluginType } from '@deephaven/plugin';\nimport { dhTable } from '@deephaven/icons';\nimport { GridWidgetPlugin } from \"./GridWidgetPlugin.js\";\nimport { GridPanelPlugin } from \"./GridPanelPlugin.js\";\nvar GridPluginConfig = {\n name: 'IrisGridPanel',\n title: 'Table',\n type: PluginType.WIDGET_PLUGIN,\n component: GridWidgetPlugin,\n panelComponent: GridPanelPlugin,\n supportedTypes: ['Table', 'TreeTable', 'HierarchicalTable', 'PartitionedTable'],\n icon: dhTable\n};\nexport default GridPluginConfig;\n//# sourceMappingURL=GridPluginConfig.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { nanoid } from 'nanoid';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\n\n// [x,y] screen coordinates used by the Linker\n\nexport function isLinkableFromPanel(panel) {\n var p = panel;\n return typeof p.getCoordinateForColumn === 'function';\n}\nexport function isLinkablePanel(panel) {\n var p = panel;\n return isLinkableFromPanel(panel) && typeof p.setFilterMap === 'function' && typeof p.unsetFilterValue === 'function';\n}\nexport function isLinkableColumn(column) {\n // TODO: core/#3358 Use preview/original type property instead of checking description\n return column.description == null || !column.description.startsWith('Preview of type: ');\n}\nvar log = Log.module('LinkerUtils');\n\n/**\n * Collection of utility functions for use with the Linker\n */\nclass LinkerUtils {\n /**\n * Retrieve the type of link given parameters.\n * @param start The link start\n * @param end The link end\n * @param isolatedLinkerPanelId Whether there's an isolated linker\n * @returns The type of link, or invalid if there's an error\n */\n static isLinkValid(start, end, isolatedLinkerPanelId) {\n // Panel compatibility checks:\n // Link ends should point to different non-null panelIds\n // For isolated linker one of the panels should match isolated panel id\n if (start.panelId == null || end.panelId == null || start.panelId === end.panelId || isolatedLinkerPanelId != null && isolatedLinkerPanelId !== start.panelId && isolatedLinkerPanelId !== end.panelId) {\n log.debug2('Incompatible panel ids', start, end, isolatedLinkerPanelId);\n return false;\n }\n\n // Check column type compatibility\n var {\n columnType: startColumnType\n } = start;\n var {\n columnType: endColumnType\n } = end;\n\n // Null columnType in ending link point allows linking to any type\n var isCompatibleType = endColumnType === null || TableUtils.isCompatibleType(startColumnType, endColumnType);\n if (!isCompatibleType) {\n log.debug2('Incompatible type', startColumnType, endColumnType);\n return false;\n }\n return true;\n }\n\n /**\n * Find column matching the link point\n * @param columns Columns to search in\n * @param linkPoint Link point to find column for\n * @param linkPoint.columnName Column name to find\n * @param linkPoint.columnType Column type to find\n * @returns Column matching the link point, undefined if not found\n */\n static findColumn(columns, _ref) {\n var {\n columnName,\n columnType\n } = _ref;\n return columns.find(_ref2 => {\n var {\n name,\n type\n } = _ref2;\n return name === columnName && type === columnType;\n });\n }\n\n /**\n * Clone links for a given panel id\n * @param links Original links array\n * @param panelId Original panel id\n * @param cloneId Cloned panel id\n * @returns Cloned links array or empty array if no new links added\n */\n static cloneLinksForPanel(links, panelId, cloneId) {\n var clonedLinks = [];\n links.forEach(link => {\n var _link$end;\n if (link.start.panelId === panelId && link.type !== 'filterSource') {\n clonedLinks.push(_objectSpread(_objectSpread({}, link), {}, {\n id: nanoid(),\n start: _objectSpread(_objectSpread({}, link.start), {}, {\n panelId: cloneId\n })\n }));\n } else if (((_link$end = link.end) === null || _link$end === void 0 ? void 0 : _link$end.panelId) === panelId) {\n clonedLinks.push(_objectSpread(_objectSpread({}, link), {}, {\n id: nanoid(),\n end: _objectSpread(_objectSpread({}, link.end), {}, {\n panelId: cloneId\n })\n }));\n }\n });\n return clonedLinks;\n }\n}\nexport default LinkerUtils;\n//# sourceMappingURL=LinkerUtils.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport React, { Component } from 'react';\nimport memoize from 'memoize-one';\nimport classNames from 'classnames';\nimport { Button, DropdownMenu } from '@deephaven/components';\nimport { vsTrash, vsTriangleDown } from '@deephaven/icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Type as FilterType, getLabelForNumberFilter, getLabelForTextFilter, getLabelForDateFilter } from '@deephaven/filters';\nimport Log from '@deephaven/log';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport \"./LinkerLink.css\";\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nvar log = Log.module('LinkerLink');\n\n/** The constant for how droopy the links are. Increase for more droopiness. */\nvar DROOP = 0.015;\nvar DROOP_EXPONENT = 1.5;\nvar TRIANGLE_HEIGHT = 12;\nvar TRIANGLE_BASE = 12;\nvar TRIANGLE_TIP = 2;\nvar TRIANGLE_HYPOTENUSE = Math.sqrt((TRIANGLE_BASE * 0.5) ** 2 + TRIANGLE_HEIGHT ** 2);\nvar TRIANGLE_THETA = Math.asin(TRIANGLE_BASE * 0.5 / TRIANGLE_HEIGHT);\nvar CLIP_RADIUS = 15;\nvar HALF_PI = Math.PI * 0.5;\nexport class LinkerLink extends Component {\n /**\n * Make an SVG path for a circle at the specified coordinates.\n * @param x The x coordinate for the centre of the circle\n * @param y The y coordinate for the centre of the circle\n * @param r Radius of the circle\n * @returns The SVG string path\n */\n static makeCirclePath(x, y, r) {\n return \"M \".concat(x, \" \").concat(y, \" m -\").concat(r, \",0 a \").concat(r, \",\").concat(r, \" 0 1,0 \").concat(r * 2, \",0 a \").concat(r, \",\").concat(r, \" 0 1,0 -\").concat(r * 2, \",0 z\");\n }\n static getLabelForLinkFilter(columnType, filterType) {\n try {\n if (TableUtils.isNumberType(columnType) || TableUtils.isCharType(columnType)) {\n return getLabelForNumberFilter(filterType);\n }\n if (TableUtils.isTextType(columnType)) {\n return getLabelForTextFilter(filterType);\n }\n if (TableUtils.isDateType(columnType)) {\n return getLabelForDateFilter(filterType);\n }\n if (TableUtils.isBooleanType(columnType)) {\n if (filterType === FilterType.eq) {\n return 'is equal to';\n }\n if (filterType === FilterType.notEq) {\n return 'is not equal to';\n }\n }\n throw new Error(\"Unrecognized column type: \".concat(columnType));\n } catch (e) {\n log.warn(e);\n return '';\n }\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"getOperators\", memoize((linkId, columnType) => {\n var {\n onOperatorChanged\n } = this.props;\n var filterTypes = TableUtils.getFilterTypes(columnType);\n if (TableUtils.isBooleanType(columnType)) {\n filterTypes = [FilterType.eq, FilterType.notEq];\n }\n return filterTypes.flatMap((type, index) => {\n // Remove case-insensitive string comparisons\n if (type === 'eqIgnoreCase' || type === \"notEqIgnoreCase\") {\n return [];\n }\n var symbol = '';\n if (type === 'startsWith') {\n symbol = 'a*';\n } else if (type === 'endsWith') {\n symbol = '*z';\n } else {\n symbol = TableUtils.getFilterOperatorString(type);\n }\n return [{\n title: LinkerLink.getLabelForLinkFilter(columnType, type),\n icon: /*#__PURE__*/_jsx(\"b\", {\n children: symbol\n }),\n action: () => onOperatorChanged(linkId, type),\n order: index\n }];\n });\n }));\n this.handleClick = this.handleClick.bind(this);\n this.handleMouseEnter = this.handleMouseEnter.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleDelete = this.handleDelete.bind(this);\n this.getDropdownActions = this.getDropdownActions.bind(this);\n this.state = {\n isHovering: undefined\n };\n }\n handleClick(event) {\n event.stopPropagation();\n event.preventDefault();\n var {\n id,\n onClick,\n onDelete\n } = this.props;\n if (event.altKey) {\n onDelete(id);\n } else {\n onClick(id);\n }\n }\n handleMouseEnter() {\n this.setState({\n isHovering: true\n });\n }\n handleMouseLeave() {\n this.setState({\n isHovering: false\n });\n }\n handleDelete() {\n var {\n id,\n onDelete\n } = this.props;\n onDelete(id);\n }\n getDropdownActions() {\n var {\n id,\n startColumnType\n } = this.props;\n if (startColumnType != null) {\n return this.getOperators(id, startColumnType);\n }\n return [];\n }\n render() {\n var {\n className,\n operator,\n isSelected,\n x1,\n y1,\n x2,\n y2,\n id,\n startColumnType,\n type\n } = this.props;\n var {\n isHovering\n } = this.state;\n\n // Path between the two points\n var len = Math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2);\n var theta = Math.atan2(y2 - y1, x2 - x1);\n var xMult = Math.sin(theta);\n var yMult = Math.cos(theta) + 2;\n var maxX = window.innerWidth;\n var maxY = window.innerHeight;\n var minX = 0;\n var minY = 0;\n var qx = Math.max(minX, Math.min(x1 + (x2 - x1) / 2 + xMult * (len * DROOP) ** DROOP_EXPONENT, maxX));\n var qy = Math.max(minY, Math.min(y1 + (y2 - y1) / 2 + yMult * (len * DROOP) ** DROOP_EXPONENT, maxY));\n var path = \"M \".concat(x1, \" \").concat(y1, \" Q \").concat(qx, \" \").concat(qy, \" \").concat(x2, \" \").concat(y2);\n\n // path for a 100%, 100% rect, then two paths for circles at point\n var selectClipPath = \"M \".concat(minX, \" \").concat(minY, \" L \").concat(minX, \" \").concat(maxY, \" L \").concat(maxX, \" \").concat(maxY, \" L \").concat(maxX, \" \").concat(minY, \" z\\n \").concat(LinkerLink.makeCirclePath(x1, y1, CLIP_RADIUS), \"\\n \").concat(LinkerLink.makeCirclePath(x2, y2, CLIP_RADIUS));\n var clipPathId = \"link-select-clip-\".concat(id);\n\n // Calculate location of the end triangle\n // We draw it instead of using markers to allow for transitions in the style\n var endTheta = Math.atan2(y2 - qy, x2 - qx);\n var t2theta = endTheta - TRIANGLE_THETA + Math.PI;\n var t3theta = endTheta + TRIANGLE_THETA + Math.PI;\n var tx1 = x2 + Math.cos(endTheta) * TRIANGLE_TIP;\n var ty1 = y2 + Math.sin(endTheta) * TRIANGLE_TIP;\n var tx2 = tx1 + Math.cos(t2theta) * TRIANGLE_HYPOTENUSE;\n var ty2 = ty1 + Math.sin(t2theta) * TRIANGLE_HYPOTENUSE;\n var tx3 = tx1 + Math.cos(t3theta) * TRIANGLE_HYPOTENUSE;\n var ty3 = ty1 + Math.sin(t3theta) * TRIANGLE_HYPOTENUSE;\n var points = \"\".concat(tx1, \",\").concat(ty1, \" \").concat(tx2, \",\").concat(ty2, \" \").concat(tx3, \",\").concat(ty3);\n\n // Button offset calculations\n var midX = 0.25 * x1 + 0.5 * qx + 0.25 * x2;\n var midY = 0.25 * y1 + 0.5 * qy + 0.25 * y2;\n var dMidX = qx - x1 + (x2 - qx);\n var dMidY = qy - y1 + (y2 - qy);\n var slopeAtMid = dMidY / dMidX;\n var DISTANCE_FROM_MID = 20;\n var topOffsetX = DISTANCE_FROM_MID / Math.sqrt(1 + slopeAtMid ** 2);\n var topOffsetY = topOffsetX * slopeAtMid;\n var bottomOffsetX = topOffsetX * -1;\n var bottomOffsetY = topOffsetY * -1;\n if (!Number.isFinite(slopeAtMid)) {\n bottomOffsetX = 10;\n bottomOffsetY = 5;\n topOffsetX = 10;\n topOffsetY = -35;\n } else if (slopeAtMid > 0) {\n topOffsetX *= -1;\n topOffsetY *= -1;\n bottomOffsetX *= -1;\n bottomOffsetY *= -1;\n bottomOffsetX -= 50 - 10 * (Math.abs(theta) % HALF_PI);\n bottomOffsetY += 10 * (Math.abs(theta) % HALF_PI);\n topOffsetX -= 50 - 10 * (Math.abs(theta) % HALF_PI);\n topOffsetY += 10 * (Math.abs(theta) % HALF_PI);\n } else if (slopeAtMid < 0) {\n bottomOffsetX += 10 * (Math.abs(theta) % HALF_PI);\n bottomOffsetY += 10 * (Math.abs(theta) % HALF_PI);\n topOffsetX += 10 * (Math.abs(theta) % HALF_PI);\n topOffsetY += 10 * (Math.abs(theta) % HALF_PI);\n } else {\n bottomOffsetX = 15;\n bottomOffsetY = 10;\n topOffsetX = -25;\n topOffsetY = 10;\n }\n var symbol = '';\n if (operator !== undefined) {\n if (operator === 'startsWith') {\n symbol = 'a*';\n } else if (operator === 'endsWith') {\n symbol = '*z';\n } else {\n symbol = TableUtils.getFilterOperatorString(operator);\n }\n }\n var showOperator = type !== 'chartLink' && type !== 'filterSource';\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsxs(\"svg\", {\n className: classNames(className, {\n hovering: isHovering\n }),\n children: [/*#__PURE__*/_jsx(\"clipPath\", {\n id: clipPathId,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: selectClipPath,\n clipRule: \"evenodd\"\n })\n }), /*#__PURE__*/_jsx(\"path\", {\n className: \"link-select\",\n d: path,\n onClick: this.handleClick,\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n clipPath: \"url(#\".concat(clipPathId, \")\"),\n \"data-testid\": \"link-select\"\n }), /*#__PURE__*/_jsx(\"path\", {\n className: \"link-background\",\n d: path\n }), /*#__PURE__*/_jsx(\"path\", {\n className: \"link-foreground\",\n d: path\n }), /*#__PURE__*/_jsx(\"circle\", {\n className: \"link-dot\",\n cx: x1,\n cy: y1,\n r: \"5\"\n }), /*#__PURE__*/_jsx(\"polygon\", {\n className: \"link-triangle\",\n points: points\n })]\n }), startColumnType != null && isSelected && /*#__PURE__*/_jsxs(_Fragment, {\n children: [showOperator && /*#__PURE__*/_jsx(Button, {\n kind: \"primary\",\n className: \"btn-fab btn-operator\",\n style: {\n top: midY + (slopeAtMid >= 0 ? topOffsetY : bottomOffsetY),\n left: midX + (slopeAtMid >= 0 ? topOffsetX : bottomOffsetX)\n },\n onClick: () => {\n // no-op: click is handled in `DropdownMenu'\n },\n icon: /*#__PURE__*/_jsxs(\"div\", {\n className: \"fa-md fa-layers\",\n children: [/*#__PURE__*/_jsx(\"b\", {\n children: symbol\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsTriangleDown,\n transform: \"right-8 down-9 shrink-5\"\n })]\n }),\n tooltip: \"Change comparison operator\",\n children: /*#__PURE__*/_jsx(DropdownMenu, {\n actions: this.getDropdownActions,\n popperOptions: {\n placement: 'bottom-start'\n }\n })\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"primary\",\n className: \"btn-fab btn-delete\",\n style: {\n top: midY + (slopeAtMid < 0 ? topOffsetY : bottomOffsetY),\n left: midX + (slopeAtMid < 0 ? topOffsetX : bottomOffsetX)\n },\n onClick: this.handleDelete,\n icon: vsTrash,\n tooltip: \"Delete\"\n })]\n })]\n });\n }\n}\n_defineProperty(LinkerLink, \"defaultProps\", {\n className: '',\n isSelected: false,\n onClick() {\n // no-op\n },\n onDelete() {\n // no-op\n }\n});\nexport default LinkerLink;\n//# sourceMappingURL=LinkerLink.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport { Button, ContextActions, GLOBAL_SHORTCUTS, Tooltip } from '@deephaven/components';\nimport { LayoutUtils } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport { vsGripper } from '@deephaven/icons';\nimport { Type as FilterType } from '@deephaven/filters';\nimport clamp from 'lodash.clamp';\nimport { isLinkableFromPanel } from \"./LinkerUtils.js\";\nimport LinkerLink from \"./LinkerLink.js\";\nimport \"./LinkerOverlayContent.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('LinkerOverlayContent');\nexport class LinkerOverlayContent extends Component {\n constructor(props) {\n super(props);\n _defineProperty(this, \"dialogRef\", void 0);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseUp = this.handleMouseUp.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleKeyUp = this.handleKeyUp.bind(this);\n this.handleEscapePressed = this.handleEscapePressed.bind(this);\n this.handleOperatorChanged = this.handleOperatorChanged.bind(this);\n this.dialogRef = /*#__PURE__*/React.createRef();\n this.state = {\n mouse: undefined,\n dialog: undefined,\n offset: {\n x: 0,\n y: 0\n },\n isDragging: false,\n mode: 'select'\n };\n }\n componentDidMount() {\n window.addEventListener('blur', this.handleBlur, true);\n window.addEventListener('mousemove', this.handleMouseMove, true);\n window.addEventListener('mouseup', this.handleMouseUp, true);\n window.addEventListener('keydown', this.handleKeyDown, true);\n window.addEventListener('keyup', this.handleKeyUp, true);\n window.addEventListener('resize', this.handleResize, true);\n }\n\n // eslint-disable-next-line react/sort-comp\n componentDidCatch(error, info) {\n log.error('componentDidCatch', error, info);\n }\n componentWillUnmount() {\n window.removeEventListener('blur', this.handleBlur, true);\n window.removeEventListener('mousemove', this.handleMouseMove, true);\n window.removeEventListener('mouseup', this.handleMouseUp, true);\n window.removeEventListener('keydown', this.handleKeyDown, true);\n window.removeEventListener('keyup', this.handleKeyUp, true);\n window.removeEventListener('resize', this.handleResize, true);\n }\n /** Gets the on screen points for a link start or end spec */\n getPointFromLinkPoint(linkPoint) {\n var {\n panelManager,\n linkTargetPropMap\n } = this.props;\n var {\n panelId: linkPointId,\n columnName\n } = linkPoint;\n var panelId = linkPointId;\n var linkTargetHandlers = linkTargetPropMap.get(linkPointId);\n if (linkTargetHandlers != null) {\n panelId = linkTargetHandlers.panelId;\n var coordinates = linkTargetHandlers.getCoordinates(columnName);\n if (coordinates != null) {\n return coordinates;\n }\n }\n var panel = panelManager.getOpenedPanelById(panelId);\n if (linkTargetHandlers == null && panel != null) {\n if (!isLinkableFromPanel(panel)) {\n throw new Error(\"Panel does not have getCoordinateForColumn method: \".concat(panelId));\n }\n try {\n // TODO: remove try/catch when IDS-7371 is fixed.\n // getCoordinateForColumn throws an exception when accessing\n // columns on a model while it reconnects\n var coordinate = panel.getCoordinateForColumn(columnName);\n if (coordinate != null) {\n return coordinate;\n }\n } catch (e) {\n log.error('Could not get coordinate for column', columnName, panel);\n }\n }\n // Fallback to panel container if the panel itself\n // crashed, unmounted, and removed from openedPanelMap.\n var glContainer = panelManager.getContainerByPanelId(panelId);\n if (glContainer == null) {\n throw new Error(\"Unable to find panel container for id: \".concat(panelId));\n }\n return LayoutUtils.getTabPoint(glContainer);\n }\n handleOperatorChanged(linkId, type) {\n var {\n links,\n onLinksUpdated\n } = this.props;\n var newLinks = links.map(link => link.id === linkId ? _objectSpread(_objectSpread({}, link), {}, {\n operator: type\n }) : link);\n onLinksUpdated(newLinks);\n }\n handleBlur() {\n this.setState({\n mode: 'select'\n });\n }\n handleResize() {\n var {\n dialog\n } = this.state;\n if (dialog && this.dialogRef.current) {\n var rect = this.dialogRef.current.getBoundingClientRect();\n var dialogX = clamp(dialog.x, 0, window.innerWidth - rect.width);\n var dialogY = clamp(dialog.y, 0, window.innerHeight - rect.height);\n this.setState({\n dialog: {\n x: dialogX,\n y: dialogY\n }\n });\n }\n }\n handleMouseMove(event) {\n var {\n offset,\n isDragging\n } = this.state;\n this.setState({\n mouse: {\n x: event.clientX,\n y: event.clientY\n }\n });\n if (isDragging && this.dialogRef.current) {\n var rect = this.dialogRef.current.getBoundingClientRect();\n var dialogX = clamp(window.innerWidth - (event.clientX + rect.width + offset.x), 0, window.innerWidth - rect.width);\n var dialogY = clamp(window.innerHeight - (event.clientY + rect.height + offset.y), 0, window.innerHeight - rect.height);\n this.setState({\n dialog: {\n x: dialogX,\n y: dialogY\n }\n });\n }\n }\n handleMouseDown(event) {\n event.preventDefault();\n var offset = {\n x: 0,\n y: 0\n };\n if (this.dialogRef.current) {\n var rect = this.dialogRef.current.getBoundingClientRect();\n offset.x = rect.right - (rect.width + event.clientX);\n offset.y = rect.bottom - (rect.height + event.clientY);\n }\n this.setState({\n isDragging: true,\n offset\n });\n }\n handleMouseUp() {\n this.setState({\n isDragging: false\n });\n }\n handleKeyDown(event) {\n if (event.key === 'Alt') {\n event.preventDefault();\n this.setState({\n mode: 'delete'\n });\n } else if (event.key === 'Delete' || event.key === 'Backspace') {\n var {\n selectedIds,\n onLinkDeleted\n } = this.props;\n event.preventDefault();\n selectedIds.forEach(id => onLinkDeleted(id));\n }\n }\n handleKeyUp(event) {\n if (event.key === 'Alt') {\n event.preventDefault();\n this.setState({\n mode: 'select'\n });\n }\n }\n handleEscapePressed() {\n var {\n onCancel\n } = this.props;\n onCancel();\n }\n render() {\n var {\n disabled,\n links,\n selectedIds,\n messageText,\n onLinkSelected,\n onLinkDeleted,\n onAllLinksDeleted,\n onDone\n } = this.props;\n var {\n mouse,\n dialog,\n isDragging,\n mode\n } = this.state;\n var visibleLinks = links.map(link => {\n try {\n var _mouse$x, _mouse$y;\n var {\n id,\n type,\n isReversed,\n start,\n end,\n operator\n } = link;\n var startColumnType = start.columnType;\n var [x1, y1] = this.getPointFromLinkPoint(start);\n var x2 = (_mouse$x = mouse === null || mouse === void 0 ? void 0 : mouse.x) !== null && _mouse$x !== void 0 ? _mouse$x : x1;\n var y2 = (_mouse$y = mouse === null || mouse === void 0 ? void 0 : mouse.y) !== null && _mouse$y !== void 0 ? _mouse$y : y1;\n if (end != null) {\n [x2, y2] = this.getPointFromLinkPoint(end);\n }\n if (isReversed != null && isReversed) {\n var [tmpX, tmpY] = [x1, y1];\n [x1, y1] = [x2, y2];\n [x2, y2] = [tmpX, tmpY];\n }\n var className = classNames('linker-link', {\n disabled\n }, {\n 'link-filter-source': type === 'filterSource'\n }, {\n 'link-invalid': type === 'invalid'\n }, {\n interactive: link.end == null\n }, {\n 'link-is-selected': selectedIds.has(id)\n }, {\n 'danger-delete': mode === 'delete'\n });\n return {\n x1,\n y1,\n x2,\n y2,\n id,\n className,\n operator,\n startColumnType,\n type\n };\n } catch (error) {\n log.warn('Unable to get point for link', link, error);\n return null;\n }\n }).filter(item => item != null);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: classNames('linker-overlay', {\n 'danger-delete': mode === 'delete'\n }),\n children: [visibleLinks.map(_ref => {\n var {\n x1,\n y1,\n x2,\n y2,\n id,\n className,\n operator,\n startColumnType,\n type\n } = _ref;\n return /*#__PURE__*/_jsx(LinkerLink, {\n className: className,\n id: id,\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2,\n onClick: onLinkSelected,\n onDelete: onLinkDeleted,\n isSelected: selectedIds.has(id),\n operator: operator !== null && operator !== void 0 ? operator : FilterType.eq,\n startColumnType: startColumnType,\n type: type,\n onOperatorChanged: this.handleOperatorChanged\n }, id);\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: classNames('linker-toast-dialog', {\n dragging: isDragging\n }),\n ref: this.dialogRef,\n style: {\n bottom: dialog === null || dialog === void 0 ? void 0 : dialog.y,\n right: dialog === null || dialog === void 0 ? void 0 : dialog.x\n },\n \"data-testid\": \"linker-toast-dialog\",\n children: [/*#__PURE__*/_jsx(Button, {\n draggable: true,\n kind: \"inline\",\n className: \"btn-drag-handle\",\n icon: vsGripper,\n onClick: () => {\n // no-op\n },\n onMouseDown: this.handleMouseDown,\n children: !isDragging && /*#__PURE__*/_jsx(Tooltip, {\n children: \"Drag to reposition\"\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"toast-body\",\n children: messageText\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"toast-footer\",\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"secondary\",\n onClick: onAllLinksDeleted,\n children: \"Clear All\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"primary\",\n onClick: onDone,\n children: \"Done\"\n })]\n })]\n }), /*#__PURE__*/_jsx(ContextActions, {\n actions: [{\n action: this.handleEscapePressed,\n shortcut: GLOBAL_SHORTCUTS.LINKER_CLOSE,\n isGlobal: true\n }]\n })]\n });\n }\n}\n_defineProperty(LinkerOverlayContent, \"defaultProps\", {\n disabled: 'false'\n});\nexport default LinkerOverlayContent;\n//# sourceMappingURL=LinkerOverlayContent.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { nanoid } from 'nanoid';\nimport memoize from 'memoize-one';\nimport { FadeTransition } from '@deephaven/components';\nimport { LayoutUtils, PanelEvent } from '@deephaven/dashboard';\nimport { DateTimeColumnFormatter, DateUtils, TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { Type as FilterType } from '@deephaven/filters';\nimport { getActiveTool, getApi, getTimeZone, setActiveTool as setActiveToolAction } from '@deephaven/redux';\nimport { assertNotNull } from '@deephaven/utils';\nimport { getIsolatedLinkerPanelIdForDashboard, getLinksForDashboard, setDashboardLinks as setDashboardLinksAction, addDashboardLinks as addDashboardLinksAction, deleteDashboardLinks as deleteDashboardLinksAction, setDashboardIsolatedLinkerPanelId as setDashboardIsolatedLinkerPanelIdAction, setDashboardColumnSelectionValidator as setDashboardColumnSelectionValidatorAction } from \"../redux/index.js\";\nimport ToolType from \"./ToolType.js\";\nimport { ChartEvent, IrisGridEvent } from \"../events/index.js\";\nimport LinkerOverlayContent from \"./LinkerOverlayContent.js\";\nimport LinkerUtils, { isLinkablePanel, isLinkableColumn } from \"./LinkerUtils.js\";\nimport { listenForFilterColumnsChanged } from \"../FilterEvents.js\";\nimport { listenForLinkPointSelected, listenForLinkSourceDataSelected, listenForRegisterLinkTarget } from \"./LinkerEvent.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar log = Log.module('Linker');\nvar mapState = (state, ownProps) => ({\n activeTool: getActiveTool(state),\n dh: getApi(state),\n isolatedLinkerPanelId: getIsolatedLinkerPanelIdForDashboard(state, ownProps.localDashboardId),\n links: getLinksForDashboard(state, ownProps.localDashboardId),\n timeZone: getTimeZone(state)\n});\nvar connector = connect(mapState, {\n setActiveTool: setActiveToolAction,\n setDashboardLinks: setDashboardLinksAction,\n addDashboardLinks: addDashboardLinksAction,\n deleteDashboardLinks: deleteDashboardLinksAction,\n setDashboardIsolatedLinkerPanelId: setDashboardIsolatedLinkerPanelIdAction,\n setDashboardColumnSelectionValidator: setDashboardColumnSelectionValidatorAction\n});\nexport class Linker extends Component {\n constructor(props) {\n super(props);\n _defineProperty(this, \"linkTargetPropMap\", new Map());\n _defineProperty(this, \"removerFns\", []);\n _defineProperty(this, \"getCachedLinks\", memoize((links, linkInProgress, isolateForPanelId) => {\n var combinedLinks = [...links];\n if (linkInProgress != null && linkInProgress.start != null) {\n combinedLinks.push(linkInProgress);\n }\n if (isolateForPanelId !== undefined) {\n return combinedLinks.filter(link => {\n var _link$start, _link$end;\n return (link === null || link === void 0 || (_link$start = link.start) === null || _link$start === void 0 ? void 0 : _link$start.panelId) === isolateForPanelId || (link === null || link === void 0 || (_link$end = link.end) === null || _link$end === void 0 ? void 0 : _link$end.panelId) === isolateForPanelId || (link === null || link === void 0 ? void 0 : link.end) == null;\n });\n }\n // Show all links in regular linker mode -- both isolated and not\n return combinedLinks;\n }));\n this.handleCancel = this.handleCancel.bind(this);\n this.handleDone = this.handleDone.bind(this);\n this.handlePanelCloned = this.handlePanelCloned.bind(this);\n this.handleColumnsChanged = this.handleColumnsChanged.bind(this);\n this.handlePanelClosed = this.handlePanelClosed.bind(this);\n this.handleLayoutStateChanged = this.handleLayoutStateChanged.bind(this);\n this.handleAllLinksDeleted = this.handleAllLinksDeleted.bind(this);\n this.handleLinkDeleted = this.handleLinkDeleted.bind(this);\n this.handleLinksUpdated = this.handleLinksUpdated.bind(this);\n this.handleChartColumnSelect = this.handleChartColumnSelect.bind(this);\n this.handleGridColumnSelect = this.handleGridColumnSelect.bind(this);\n this.handleUpdateValues = this.handleUpdateValues.bind(this);\n this.handleStateChange = this.handleStateChange.bind(this);\n this.handleExited = this.handleExited.bind(this);\n this.handleLinkPointSelected = this.handleLinkPointSelected.bind(this);\n this.handleTargetRegistered = this.handleTargetRegistered.bind(this);\n this.handleLinkSelected = this.handleLinkSelected.bind(this);\n this.handlePanelDragging = this.handlePanelDragging.bind(this);\n this.handlePanelDropped = this.handlePanelDropped.bind(this);\n this.isColumnSelectionValid = this.isColumnSelectionValid.bind(this);\n this.state = {\n linkInProgress: undefined,\n selectedIds: new Set(),\n isDraggingPanel: false\n };\n }\n componentDidMount() {\n var {\n layout\n } = this.props;\n this.startListening(layout);\n this.updateSelectionValidators();\n }\n componentDidUpdate(prevProps) {\n var {\n activeTool,\n layout\n } = this.props;\n if (layout !== prevProps.layout) {\n this.stopListening(prevProps.layout);\n this.startListening(layout);\n }\n if (activeTool !== prevProps.activeTool) {\n this.updateSelectionValidators();\n if (activeTool === ToolType.DEFAULT) {\n this.reset();\n }\n }\n }\n componentDidCatch(error, info) {\n log.error('componentDidCatch', error, info);\n }\n componentWillUnmount() {\n var {\n layout\n } = this.props;\n this.stopListening(layout);\n }\n startListening(layout) {\n layout.on('stateChanged', this.handleLayoutStateChanged);\n var {\n eventHub\n } = layout;\n eventHub.on(IrisGridEvent.COLUMN_SELECTED, this.handleGridColumnSelect);\n eventHub.on(IrisGridEvent.DATA_SELECTED, this.handleUpdateValues);\n eventHub.on(IrisGridEvent.STATE_CHANGED, this.handleStateChange);\n eventHub.on(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);\n eventHub.on(PanelEvent.CLONED, this.handlePanelCloned);\n this.removerFns = [listenForFilterColumnsChanged(eventHub, this.handleColumnsChanged), listenForLinkPointSelected(eventHub, this.handleLinkPointSelected), listenForLinkSourceDataSelected(eventHub, this.handleUpdateValues), listenForRegisterLinkTarget(eventHub, this.handleTargetRegistered)];\n eventHub.on(PanelEvent.CLOSE, this.handlePanelClosed);\n eventHub.on(PanelEvent.CLOSED, this.handlePanelClosed);\n eventHub.on(PanelEvent.DRAGGING, this.handlePanelDragging);\n eventHub.on(PanelEvent.DROPPED, this.handlePanelDropped);\n }\n stopListening(layout) {\n layout.off('stateChanged', this.handleLayoutStateChanged);\n var {\n eventHub\n } = layout;\n eventHub.off(IrisGridEvent.COLUMN_SELECTED, this.handleGridColumnSelect);\n eventHub.off(IrisGridEvent.DATA_SELECTED, this.handleUpdateValues);\n eventHub.off(IrisGridEvent.STATE_CHANGED, this.handleStateChange);\n eventHub.off(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);\n eventHub.off(PanelEvent.CLONED, this.handlePanelCloned);\n eventHub.off(PanelEvent.CLOSE, this.handlePanelClosed);\n eventHub.off(PanelEvent.CLOSED, this.handlePanelClosed);\n eventHub.off(PanelEvent.DRAGGING, this.handlePanelDragging);\n eventHub.off(PanelEvent.DROPPED, this.handlePanelDropped);\n this.removerFns.forEach(remove => remove());\n this.removerFns = [];\n }\n reset() {\n this.setState({\n linkInProgress: undefined,\n selectedIds: new Set()\n });\n }\n handleCancel() {\n var {\n linkInProgress\n } = this.state;\n if (linkInProgress == null) {\n var {\n setActiveTool\n } = this.props;\n setActiveTool(ToolType.DEFAULT);\n }\n this.setState({\n linkInProgress: undefined\n });\n }\n handleDone() {\n var {\n setActiveTool\n } = this.props;\n setActiveTool(ToolType.DEFAULT);\n }\n handleChartColumnSelect(panel, column) {\n var panelId = LayoutUtils.getIdFromPanel(panel);\n assertNotNull(panelId);\n this.columnSelected(panelId, column, 'chartLink', true);\n }\n handleColumnsChanged(sourceId, columns) {\n log.debug('handleColumnsChanged', sourceId, columns);\n var {\n links\n } = this.props;\n if (sourceId == null) {\n log.error('Invalid filter columns source id', sourceId);\n return;\n }\n\n // Columns is null when dh.ui widgets with linker capability are closed\n if (columns == null) {\n this.deleteLinksForPanelId(sourceId);\n return;\n }\n // NOTE: links need to be updated to use sourceId instead of panelId. This will be done when we implement linker for dh.ui widgets DH-18840\n // Delete links that start or end on non-existent column in the updated panel\n var linksToDelete = links.filter(_ref => {\n var {\n start,\n end\n } = _ref;\n return start.panelId === sourceId && LinkerUtils.findColumn(columns, start) == null || end != null && end.panelId === sourceId && LinkerUtils.findColumn(columns, end) == null;\n });\n this.deleteLinks(linksToDelete);\n }\n handleGridColumnSelect(panel, column) {\n if (!isLinkableColumn(column)) {\n log.debug2('Column is not filterable');\n return;\n }\n var panelId = LayoutUtils.getIdFromPanel(panel);\n assertNotNull(panelId);\n this.columnSelected(panelId, column, 'tableLink');\n }\n handleLinkPointSelected(sourceId, column, options) {\n var {\n type\n } = options;\n var isIsolatedLinker = type === 'filterSource';\n var isAlwaysEnd = type === 'chartLink' || type === 'filterSource';\n\n // filterSource type should open in isolated linker mode\n if (!this.isOverlayShown() && sourceId != null && isIsolatedLinker) {\n var {\n links,\n localDashboardId,\n setActiveTool,\n setDashboardIsolatedLinkerPanelId\n } = this.props;\n var panelLinks = links.filter(link => {\n var _link$start2, _link$end2;\n return ((_link$start2 = link.start) === null || _link$start2 === void 0 ? void 0 : _link$start2.panelId) === sourceId || ((_link$end2 = link.end) === null || _link$end2 === void 0 ? void 0 : _link$end2.panelId) === sourceId;\n });\n\n // Initial click on the filter source button with linker inactive\n // Show linker in isolated mode for panel\n setActiveTool(ToolType.LINKER);\n setDashboardIsolatedLinkerPanelId(localDashboardId, sourceId);\n if (panelLinks.length === 0) {\n // Source not linked - start new link in isolated linker mode\n // Need to pass panelId for overrideIsolatedLinkerPanelId\n // as redux prop update at this point not yet propagated\n this.columnSelected(sourceId, column, type, isAlwaysEnd, sourceId);\n }\n return;\n }\n this.columnSelected(sourceId, column, type, isAlwaysEnd);\n }\n\n /**\n * Track a column selection and build the link from it.\n * @param sourceId The ID of the source for the column selection\n * @param column The column that was selected\n * @param type The type of the link point\n * @param isAlwaysEndPoint True if the selection is always the end point, even if it's the first column selected. Defaults to false.\n * @param overrideIsolatedLinkerPanelId isolatedLinkerPanelId to use when method is called before prop changes propagate\n */\n columnSelected(sourceId, column, type) {\n var isAlwaysEndPoint = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var overrideIsolatedLinkerPanelId = arguments.length > 4 ? arguments[4] : undefined;\n if (overrideIsolatedLinkerPanelId === undefined && !this.isOverlayShown()) {\n return;\n }\n var {\n isolatedLinkerPanelId\n } = this.props;\n var {\n linkInProgress\n } = this.state;\n var {\n name: columnName,\n type: columnType\n } = column;\n if (linkInProgress == null || linkInProgress.start == null) {\n var newLink = {\n id: nanoid(),\n start: {\n panelId: sourceId,\n columnName,\n columnType\n },\n type: 'invalid',\n isReversed: isAlwaysEndPoint\n };\n if (isAlwaysEndPoint) {\n newLink.endType = type;\n }\n log.debug('starting link', newLink);\n this.setState({\n linkInProgress: newLink\n });\n } else {\n var _linkInProgress$endTy;\n var {\n links\n } = this.props;\n var {\n start,\n id,\n isReversed = false\n } = linkInProgress;\n var end = {\n panelId: sourceId,\n columnName,\n columnType\n };\n var isValid = !(isReversed && isAlwaysEndPoint) &&\n // Cannot add a point which is only an end when we already have an end\n LinkerUtils.isLinkValid(isReversed ? end : start, isReversed ? start : end, overrideIsolatedLinkerPanelId !== null && overrideIsolatedLinkerPanelId !== void 0 ? overrideIsolatedLinkerPanelId : isolatedLinkerPanelId);\n if (!isValid) {\n log.debug('Ignore invalid link connection', linkInProgress, end);\n return;\n }\n\n // The end point is what determines the type\n // If the link is reversed, we already set the type on the linkInProgress\n var finalType = (_linkInProgress$endTy = linkInProgress.endType) !== null && _linkInProgress$endTy !== void 0 ? _linkInProgress$endTy : type;\n switch (finalType) {\n case 'invalid':\n log.debug('Ignore invalid link connection', linkInProgress, end);\n return;\n case 'filterSource':\n {\n // filterSource links have a limit of 1 link per target\n // New link validation passed, delete existing links before adding the new one\n var existingLinkPanelId = isReversed !== undefined && isReversed ? start.panelId : end.panelId;\n // In cases with multiple targets per panel (i.e. chart filters)\n // links would have to be filtered by panelId and columnName and columnType\n var linksToDelete = links.filter(_ref2 => {\n var {\n end: panelLinkEnd\n } = _ref2;\n return (panelLinkEnd === null || panelLinkEnd === void 0 ? void 0 : panelLinkEnd.panelId) === existingLinkPanelId;\n });\n this.deleteLinks(linksToDelete);\n break;\n }\n case 'chartLink':\n {\n var existingLinkEnd = isReversed === true ? start : end;\n var existingLinkStart = isReversed === true ? end : start;\n log.debug('creating chartlink', {\n existingLinkEnd,\n start,\n end\n });\n // Don't allow linking more than one column per source to each chart column\n var _linksToDelete = links.filter(_ref3 => {\n var {\n end: panelLinkEnd,\n start: panelLinkStart\n } = _ref3;\n return (panelLinkStart === null || panelLinkStart === void 0 ? void 0 : panelLinkStart.panelId) === existingLinkStart.panelId && (panelLinkEnd === null || panelLinkEnd === void 0 ? void 0 : panelLinkEnd.panelId) === existingLinkEnd.panelId && (panelLinkEnd === null || panelLinkEnd === void 0 ? void 0 : panelLinkEnd.columnName) === existingLinkEnd.columnName && (panelLinkEnd === null || panelLinkEnd === void 0 ? void 0 : panelLinkEnd.columnType) === existingLinkEnd.columnType;\n });\n this.deleteLinks(_linksToDelete);\n break;\n }\n case 'tableLink':\n // No-op\n break;\n }\n\n // Create a completed link from link in progress\n var _newLink = {\n start: isReversed ? end : start,\n end: isReversed ? start : end,\n id,\n type: finalType,\n operator: FilterType.eq\n };\n log.info('creating link', _newLink);\n this.setState({\n linkInProgress: undefined,\n selectedIds: new Set([id])\n }, () => {\n // Adding link after updating state\n // otherwise both new link and linkInProgress could be rendered at the same time\n // resulting in \"multiple children with same key\" error\n this.addLinks([_newLink]);\n });\n }\n }\n unsetFilterValueForLink(link) {\n var {\n panelManager\n } = this.props;\n if (link.end) {\n var _linkTargetPropMap$ge;\n var {\n end\n } = link;\n var {\n panelId,\n columnName,\n columnType\n } = end;\n var {\n linkTargetPropMap\n } = this;\n var unsetFilterValue = (_linkTargetPropMap$ge = linkTargetPropMap.get(panelId)) === null || _linkTargetPropMap$ge === void 0 ? void 0 : _linkTargetPropMap$ge.unsetFilterValue;\n if (unsetFilterValue) {\n unsetFilterValue(columnName, columnType);\n return;\n }\n var endPanel = panelManager.getOpenedPanelById(panelId);\n if (!endPanel) {\n log.debug('endPanel no longer exists or target is not a panel. Ignoring unsetFilterValue', panelId);\n } else if (isLinkablePanel(endPanel)) {\n endPanel.unsetFilterValue(columnName, columnType);\n } else {\n log.debug('endPanel.unsetFilterValue not implemented', endPanel);\n }\n }\n }\n\n /**\n * Set filters for a given panel ID\n * @param panelId ID of panel to set filters on\n * @param filterMap Map of column name to column type, text, and value\n */\n setPanelFilterMap(panelId, filterMap) {\n var _linkTargetPropMap$ge2;\n log.debug('Set filter data for panel:', panelId, filterMap);\n var {\n panelManager\n } = this.props;\n var {\n linkTargetPropMap\n } = this;\n var setFilterValues = (_linkTargetPropMap$ge2 = linkTargetPropMap.get(panelId)) === null || _linkTargetPropMap$ge2 === void 0 ? void 0 : _linkTargetPropMap$ge2.setFilterValues;\n if (setFilterValues) {\n setFilterValues(filterMap);\n return;\n }\n var panel = panelManager.getOpenedPanelById(panelId);\n if (!panel) {\n log.debug('panel no longer exists or target is not a panel. Ignoring setFilterMap', panelId);\n } else if (isLinkablePanel(panel)) {\n panel.setFilterMap(filterMap);\n } else {\n log.debug('panel.setFilterMap not implemented', panelId, panel);\n }\n }\n addLinks(links) {\n var {\n addDashboardLinks,\n localDashboardId\n } = this.props;\n addDashboardLinks(localDashboardId, links);\n }\n deleteLinks(links) {\n var clearAll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var {\n localDashboardId\n } = this.props;\n links.forEach(link => this.unsetFilterValueForLink(link));\n if (clearAll) {\n var {\n setDashboardLinks\n } = this.props;\n setDashboardLinks(localDashboardId, []);\n } else if (links.length > 0) {\n var {\n deleteDashboardLinks\n } = this.props;\n deleteDashboardLinks(localDashboardId, links.map(_ref4 => {\n var {\n id\n } = _ref4;\n return id;\n }));\n }\n }\n handleAllLinksDeleted() {\n var {\n links,\n isolatedLinkerPanelId\n } = this.props;\n if (isolatedLinkerPanelId === undefined) {\n this.deleteLinks(links, true);\n } else {\n var isolatedLinks = links.filter(link => {\n var _link$start3, _link$end3;\n return (link === null || link === void 0 || (_link$start3 = link.start) === null || _link$start3 === void 0 ? void 0 : _link$start3.panelId) === isolatedLinkerPanelId || (link === null || link === void 0 || (_link$end3 = link.end) === null || _link$end3 === void 0 ? void 0 : _link$end3.panelId) === isolatedLinkerPanelId;\n });\n this.deleteLinks(isolatedLinks);\n }\n this.reset();\n }\n handleLinkDeleted(linkId) {\n var {\n links\n } = this.props;\n var link = links.find(l => l.id === linkId);\n if (link) {\n this.deleteLinks([link]);\n } else {\n log.error('Unable to find link to delete', linkId);\n }\n }\n handleTargetRegistered(sourceId, handlers) {\n var {\n linkTargetPropMap\n } = this;\n if (handlers == null) {\n linkTargetPropMap.delete(sourceId);\n } else {\n linkTargetPropMap.set(sourceId, handlers);\n }\n }\n handleUpdateValues(sourceId, dataMap) {\n var {\n dh,\n links,\n timeZone\n } = this.props;\n // Map of panel ID to filterMap\n var panelFilterMap = new Map();\n // Instead of setting filters one by one for each link,\n // combine them so they could be set in a single call per target panel\n for (var i = 0; i < links.length; i += 1) {\n var {\n start,\n end,\n operator\n } = links[i];\n if (start.panelId === sourceId && end != null) {\n var _filterMap$get$filter, _filterMap$get;\n var {\n panelId: endPanelId,\n columnName,\n columnType\n } = end;\n // Map of column name to column type and filter value\n var existingFilterMap = panelFilterMap.get(endPanelId);\n var filterMap = existingFilterMap !== null && existingFilterMap !== void 0 ? existingFilterMap : new Map();\n var filterList = (_filterMap$get$filter = (_filterMap$get = filterMap.get(columnName)) === null || _filterMap$get === void 0 ? void 0 : _filterMap$get.filterList) !== null && _filterMap$get$filter !== void 0 ? _filterMap$get$filter : [];\n var {\n visibleIndex: startColumnIndex,\n isExpandable,\n isGrouped\n } = dataMap[start.columnName];\n var {\n value\n } = dataMap[start.columnName];\n var text = \"\".concat(value);\n if (value === null && isExpandable && isGrouped) {\n // Clear filter on empty rollup grouping columns\n value = undefined;\n }\n if (columnType != null && TableUtils.isDateType(columnType)) {\n var dateFilterFormatter = new DateTimeColumnFormatter(dh, {\n timeZone,\n showTimeZone: false,\n showTSeparator: true,\n defaultDateTimeFormatString: DateUtils.FULL_DATE_FORMAT\n });\n // The values are Dates for dateType values, not string like everything else\n text = dateFilterFormatter.format(value);\n }\n filterList.push({\n operator,\n text,\n value,\n startColumnIndex\n });\n filterMap.set(columnName, {\n columnType,\n filterList\n });\n panelFilterMap.set(endPanelId, filterMap);\n }\n }\n\n // Apply combined filters to all target panels\n panelFilterMap.forEach((filterMap, endPanelId) => {\n this.setPanelFilterMap(endPanelId, filterMap);\n });\n }\n handlePanelCloned(panel, cloneConfig) {\n var {\n links\n } = this.props;\n var panelId = LayoutUtils.getIdFromPanel(panel);\n var cloneId = cloneConfig.id;\n if (panelId != null) {\n var linksToAdd = LinkerUtils.cloneLinksForPanel(links, panelId, cloneId);\n this.addLinks(linksToAdd);\n }\n }\n handlePanelDragging(componentId) {\n var {\n links\n } = this.props;\n for (var i = 0; i < links.length; i += 1) {\n var link = links[i];\n var {\n start,\n end\n } = link;\n if (start.panelId === componentId || (end === null || end === void 0 ? void 0 : end.panelId) === componentId) {\n this.setState({\n isDraggingPanel: true\n });\n return;\n }\n }\n }\n handlePanelDropped() {\n this.setState({\n isDraggingPanel: false\n });\n }\n handlePanelClosed(panelId) {\n // Delete links on PanelEvent.CLOSE and PanelEvent.CLOSED instead of UNMOUNT\n // because the panels can get unmounted on errors and we want to keep the links if that happens\n log.debug(\"Panel \".concat(panelId, \" closed, deleting links.\"));\n this.deleteLinksForPanelId(panelId);\n }\n handleLinkSelected(linkId) {\n this.setState({\n selectedIds: new Set([linkId])\n });\n }\n handleLinksUpdated(newLinks) {\n var {\n localDashboardId,\n setDashboardLinks\n } = this.props;\n setDashboardLinks(localDashboardId, newLinks);\n }\n handleLayoutStateChanged() {\n this.forceUpdate();\n }\n handleStateChange() {\n this.forceUpdate();\n }\n handleExited() {\n // Has to be done after linker exit animation to avoid flashing non-isolated links\n var {\n localDashboardId,\n setDashboardIsolatedLinkerPanelId\n } = this.props;\n setDashboardIsolatedLinkerPanelId(localDashboardId, undefined);\n }\n\n /**\n * Delete all links for a provided panel ID. Needs to be done whenever a panel is closed or unmounted.\n * @param panelId The panel ID to delete links for\n */\n deleteLinksForPanelId(panelId) {\n var {\n links\n } = this.props;\n for (var i = 0; i < links.length; i += 1) {\n var link = links[i];\n var {\n start,\n end,\n id\n } = link;\n if (start.panelId === panelId || (end === null || end === void 0 ? void 0 : end.panelId) === panelId) {\n this.handleLinkDeleted(id);\n }\n }\n }\n isOverlayShown() {\n var {\n activeTool\n } = this.props;\n return activeTool === ToolType.LINKER;\n }\n updateSelectionValidators() {\n var {\n activeTool,\n setDashboardColumnSelectionValidator,\n localDashboardId\n } = this.props;\n switch (activeTool) {\n case ToolType.LINKER:\n setDashboardColumnSelectionValidator(localDashboardId, this.isColumnSelectionValid);\n break;\n default:\n setDashboardColumnSelectionValidator(localDashboardId, undefined);\n break;\n }\n }\n updateLinkInProgressType() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'invalid';\n this.setState(_ref5 => {\n var {\n linkInProgress\n } = _ref5;\n if (linkInProgress !== undefined) {\n return {\n linkInProgress: _objectSpread(_objectSpread({}, linkInProgress), {}, {\n type\n })\n };\n }\n return null;\n });\n }\n isColumnSelectionValid(panelOrId, tableColumn, options) {\n var _linkInProgress$endTy2;\n var {\n linkInProgress\n } = this.state;\n var {\n isolatedLinkerPanelId\n } = this.props;\n // This is backwards compatibility for Grizzly Enterprise panels\n // IrisGridPanel is the only allowed start point for a link\n // The enterprise panels will not call this method with options\n // They are also JS and removed in sanluis, so figure this is best for now\n var isAlwaysEnd = typeof panelOrId === 'string' ? options.type === 'filterSource' || options.type === 'chartLink' : LayoutUtils.getComponentNameFromPanel(panelOrId) !== 'IrisGridPanel';\n if (tableColumn == null) {\n if ((linkInProgress === null || linkInProgress === void 0 ? void 0 : linkInProgress.start) != null) {\n // Link started, end point is not a valid target\n this.updateLinkInProgressType('invalid');\n }\n return false;\n }\n\n // TODO: Use preview/original type property when core/#3358 is completed\n if (!isLinkableColumn(tableColumn)) {\n log.debug2('Column is not filterable', tableColumn.description);\n if ((linkInProgress === null || linkInProgress === void 0 ? void 0 : linkInProgress.start) != null) {\n this.updateLinkInProgressType('invalid');\n }\n return false;\n }\n\n // Link not started yet - no need to update type\n if ((linkInProgress === null || linkInProgress === void 0 ? void 0 : linkInProgress.start) == null) {\n return true;\n }\n var {\n isReversed = false,\n start\n } = linkInProgress;\n var panelId = typeof panelOrId === 'string' ? panelOrId : LayoutUtils.getIdFromPanel(panelOrId);\n if (panelId == null) {\n return false;\n }\n\n // We've already selected an end point, so we can't select another one\n if (isReversed && isAlwaysEnd) {\n this.updateLinkInProgressType('invalid');\n return false;\n }\n var end = {\n panelId,\n columnName: tableColumn.name,\n columnType: tableColumn.type\n };\n var isValid = isReversed ? LinkerUtils.isLinkValid(end, start, isolatedLinkerPanelId) : LinkerUtils.isLinkValid(start, end, isolatedLinkerPanelId);\n this.updateLinkInProgressType(isValid ? (_linkInProgress$endTy2 = linkInProgress.endType) !== null && _linkInProgress$endTy2 !== void 0 ? _linkInProgress$endTy2 : options.type : 'invalid');\n return isValid;\n }\n render() {\n var {\n links,\n isolatedLinkerPanelId,\n panelManager\n } = this.props;\n var {\n linkInProgress,\n selectedIds,\n isDraggingPanel\n } = this.state;\n var isLinkOverlayShown = this.isOverlayShown();\n var disabled = linkInProgress != null && linkInProgress.start != null;\n var linkerOverlayMessage = isolatedLinkerPanelId === undefined ? 'Click a column source, then click a column target to create a filter link. The filter comparison operator used by a selected link can be changed. Delete a filter link by clicking the delete button or with alt+click. Click done when finished.' : 'Create a link between the source column button and a table column by clicking on one, then the other. Delete a filter link by clicking the delete button or with alt+click. Click done when finished.';\n return !isDraggingPanel ? /*#__PURE__*/_jsx(FadeTransition, {\n in: isLinkOverlayShown,\n mountOnEnter: true,\n unmountOnExit: true,\n onExited: this.handleExited,\n children: /*#__PURE__*/_jsx(LinkerOverlayContent, {\n disabled: disabled,\n panelManager: panelManager,\n links: this.getCachedLinks(links, linkInProgress, isolatedLinkerPanelId),\n selectedIds: selectedIds,\n messageText: linkerOverlayMessage,\n onLinkSelected: this.handleLinkSelected,\n onLinkDeleted: this.handleLinkDeleted,\n onAllLinksDeleted: this.handleAllLinksDeleted,\n onLinksUpdated: this.handleLinksUpdated,\n onDone: this.handleDone,\n onCancel: this.handleCancel,\n linkTargetPropMap: this.linkTargetPropMap\n })\n }) : null;\n }\n}\nvar ConnectedLinker = connector(Linker);\nexport default ConnectedLinker;\n//# sourceMappingURL=Linker.js.map","import React from 'react';\nimport { assertIsDashboardPluginProps } from '@deephaven/dashboard';\nimport Linker from \"./linker/Linker.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function LinkerPlugin(props) {\n assertIsDashboardPluginProps(props);\n var {\n id,\n layout,\n panelManager\n } = props;\n return /*#__PURE__*/_jsx(Linker, {\n layout: layout,\n localDashboardId: id,\n panelManager: panelManager\n });\n}\nexport default LinkerPlugin;\n//# sourceMappingURL=LinkerPlugin.js.map","import { PluginType } from '@deephaven/plugin';\nimport LinkerPlugin from \"./LinkerPlugin.js\";\nvar LinkerPluginConfig = {\n name: 'LinkerPlugin',\n type: PluginType.DASHBOARD_PLUGIN,\n component: LinkerPlugin\n};\nexport default LinkerPluginConfig;\n//# sourceMappingURL=LinkerPluginConfig.js.map","import { useCallback, useEffect } from 'react';\nimport { nanoid } from 'nanoid';\nimport { assertIsDashboardPluginProps, LayoutUtils, useListener } from '@deephaven/dashboard';\nimport { MarkdownPanel } from \"./panels/index.js\";\nimport MarkdownUtils from \"./controls/markdown/MarkdownUtils.js\";\nimport MarkdownEvent from \"./events/MarkdownEvent.js\";\nexport function MarkdownPlugin(props) {\n assertIsDashboardPluginProps(props);\n var {\n id,\n layout,\n panelManager,\n registerComponent\n } = props;\n var handleOpen = useCallback(function () {\n var {\n title = '',\n metadata = {},\n id: panelId = nanoid(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = undefined\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var openedMarkdowns = panelManager.getOpenedPanelConfigsOfType(MarkdownPanel.COMPONENT);\n var usedTitles = openedMarkdowns.map(markdown => {\n var _markdown$title;\n return (_markdown$title = markdown.title) !== null && _markdown$title !== void 0 ? _markdown$title : '';\n });\n var panelTitle = title != null && title !== '' ? title : MarkdownUtils.getNewMarkdownTitle(usedTitles);\n var content = null;\n var config = {\n type: 'react-component',\n component: MarkdownPanel.COMPONENT,\n props: {\n id: panelId,\n metadata,\n panelState: {\n content\n },\n localDashboardId: id\n },\n title: panelTitle,\n id: panelId\n };\n var {\n root\n } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent\n });\n }, [id, layout, panelManager]);\n useEffect(function registerComponentsAndReturnCleanup() {\n var cleanups = [registerComponent(MarkdownPanel.COMPONENT, MarkdownPanel)];\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n }, [registerComponent]);\n useListener(layout.eventHub, MarkdownEvent.OPEN, handleOpen);\n return null;\n}\nexport default MarkdownPlugin;\n//# sourceMappingURL=MarkdownPlugin.js.map","import { PluginType } from '@deephaven/plugin';\nimport MarkdownPlugin from \"./MarkdownPlugin.js\";\nvar MarkdownPluginConfig = {\n name: 'MarkdownPlugin',\n type: PluginType.DASHBOARD_PLUGIN,\n component: MarkdownPlugin\n};\nexport default MarkdownPluginConfig;\n//# sourceMappingURL=MarkdownPluginConfig.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { forwardRef } from 'react';\nimport { PandasPanel } from \"./panels/index.js\";\nimport useHydrateGrid from \"./useHydrateGrid.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport var PandasPanelPlugin = /*#__PURE__*/forwardRef((props, ref) => {\n var {\n localDashboardId,\n fetch,\n metadata\n } = props;\n var hydratedProps = useHydrateGrid(fetch, localDashboardId, metadata);\n return (\n /*#__PURE__*/\n // eslint-disable-next-line react/jsx-props-no-spreading\n _jsx(PandasPanel, _objectSpread(_objectSpread({\n ref: ref\n }, props), hydratedProps))\n );\n});\nPandasPanelPlugin.displayName = 'PandasPanelPlugin';\nexport default PandasPanelPlugin;\n//# sourceMappingURL=PandasPanelPlugin.js.map","import IrisGrid from '@deephaven/iris-grid';\nimport { LoadingOverlay } from '@deephaven/components';\nimport { getErrorMessage } from '@deephaven/utils';\nimport { PandasReloadButton } from \"./panels/PandasReloadButton.js\";\nimport { useIrisGridModel } from \"./useIrisGridModel.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function PandasWidgetPlugin(_ref) {\n var {\n fetch\n } = _ref;\n var fetchResult = useIrisGridModel(fetch);\n if (fetchResult.status === 'loading') {\n return /*#__PURE__*/_jsx(LoadingOverlay, {\n isLoading: true,\n \"data-testid\": \"pandas-widget-plugin-loading\"\n });\n }\n if (fetchResult.status === 'error') {\n return /*#__PURE__*/_jsx(LoadingOverlay, {\n errorMessage: getErrorMessage(fetchResult.error),\n isLoading: false,\n \"data-testid\": \"pandas-widget-plugin-loading-error\"\n });\n }\n var {\n model,\n reload\n } = fetchResult;\n return /*#__PURE__*/_jsx(IrisGrid, {\n model: model,\n children: /*#__PURE__*/_jsx(PandasReloadButton, {\n onClick: reload\n })\n });\n}\nexport default PandasWidgetPlugin;\n//# sourceMappingURL=PandasWidgetPlugin.js.map","import { PluginType } from '@deephaven/plugin';\nimport { dhPandas } from '@deephaven/icons';\nimport { PandasWidgetPlugin } from \"./PandasWidgetPlugin.js\";\nimport { PandasPanelPlugin } from \"./PandasPanelPlugin.js\";\nvar PandasPluginConfig = {\n name: 'PandasPanel',\n title: 'Pandas',\n type: PluginType.WIDGET_PLUGIN,\n component: PandasWidgetPlugin,\n panelComponent: PandasPanelPlugin,\n supportedTypes: 'pandas.DataFrame',\n icon: dhPandas\n};\nexport default PandasPluginConfig;\n//# sourceMappingURL=PandasPluginConfig.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { useMemo, useCallback, useEffect, forwardRef } from 'react';\nimport { nanoid } from 'nanoid';\nimport { assertIsDashboardPluginProps, LayoutUtils, canHaveRef, usePanelOpenListener } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport { isWidgetPlugin, usePlugins } from '@deephaven/plugin';\nimport { WidgetPanel } from \"./panels/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar log = Log.module('WidgetLoaderPlugin');\nexport function WrapWidgetPlugin(plugin) {\n var _plugin$component$dis;\n function Wrapper(props, ref) {\n var _metadata$type, _metadata$name;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var C = plugin.component;\n var {\n metadata\n } = props;\n var panelDescriptor = _objectSpread(_objectSpread({}, metadata), {}, {\n type: (_metadata$type = metadata === null || metadata === void 0 ? void 0 : metadata.type) !== null && _metadata$type !== void 0 ? _metadata$type : plugin.type,\n name: (_metadata$name = metadata === null || metadata === void 0 ? void 0 : metadata.name) !== null && _metadata$name !== void 0 ? _metadata$name : 'Widget'\n });\n var hasRef = canHaveRef(C);\n return /*#__PURE__*/_jsx(WidgetPanel, _objectSpread(_objectSpread({\n descriptor: panelDescriptor\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, props), {}, {\n children: hasRef ? /*#__PURE__*/_jsx(C\n // eslint-disable-next-line react/jsx-props-no-spreading\n , _objectSpread(_objectSpread({}, props), {}, {\n ref: ref\n })) : /*#__PURE__*/_jsx(C\n // eslint-disable-next-line react/jsx-props-no-spreading\n , _objectSpread({}, props))\n }));\n }\n Wrapper.displayName = \"WidgetLoaderPlugin(\".concat((_plugin$component$dis = plugin.component.displayName) !== null && _plugin$component$dis !== void 0 ? _plugin$component$dis : plugin.name, \")\");\n return /*#__PURE__*/forwardRef(Wrapper);\n}\n\n/**\n * Widget to automatically open any supported WidgetPlugin types as panels\n * if the widget is emitted from the server as the result of executed code.\n *\n * Does not open panels for widgets that are not supported by any plugins.\n * Does not open panels for widgets that are a component of a larger widget or UI element.\n *\n * @param props Dashboard plugin props\n * @returns React element\n */\nexport function WidgetLoaderPlugin(props) {\n var plugins = usePlugins();\n var supportedTypes = useMemo(() => {\n var typeMap = new Map();\n plugins.forEach(plugin => {\n if (!isWidgetPlugin(plugin)) {\n return;\n }\n [plugin.supportedTypes].flat().forEach(supportedType => {\n if (supportedType != null && supportedType !== '') {\n if (typeMap.has(supportedType)) {\n var _typeMap$get;\n log.warn(\"Multiple WidgetPlugins handling type \".concat(supportedType, \". Replacing \").concat((_typeMap$get = typeMap.get(supportedType)) === null || _typeMap$get === void 0 ? void 0 : _typeMap$get.name, \" with \").concat(plugin.name, \" to handle \").concat(supportedType));\n }\n typeMap.set(supportedType, plugin);\n }\n });\n });\n return typeMap;\n }, [plugins]);\n assertIsDashboardPluginProps(props);\n var {\n id,\n layout,\n registerComponent\n } = props;\n var handlePanelOpen = useCallback(_ref => {\n var _widget$name;\n var {\n dragEvent,\n panelId = nanoid(),\n fetch,\n widget\n } = _ref;\n var {\n type\n } = widget;\n var plugin = type != null ? supportedTypes.get(type) : null;\n if (plugin == null) {\n return;\n }\n var name = (_widget$name = widget.name) !== null && _widget$name !== void 0 ? _widget$name : type;\n var panelProps = {\n localDashboardId: id,\n metadata: widget,\n fetch\n };\n var config = {\n type: 'react-component',\n component: plugin.name,\n props: panelProps,\n title: name,\n id: panelId\n };\n var {\n root\n } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n dragEvent\n });\n }, [id, layout, supportedTypes]);\n useEffect(() => {\n var deregisterFns = [...new Set(supportedTypes.values())].map(plugin => {\n var {\n panelComponent\n } = plugin;\n if (panelComponent == null) {\n return registerComponent(plugin.name, WrapWidgetPlugin(plugin));\n }\n return registerComponent(plugin.name, panelComponent);\n });\n return () => {\n deregisterFns.forEach(deregister => deregister());\n };\n }, [registerComponent, supportedTypes]);\n\n /**\n * Listen for panel open events so we know when to open a panel\n */\n usePanelOpenListener(layout.eventHub, handlePanelOpen);\n return null;\n}\nexport default WidgetLoaderPlugin;\n//# sourceMappingURL=WidgetLoaderPlugin.js.map","import { PluginType } from '@deephaven/plugin';\nimport WidgetLoaderPlugin from \"./WidgetLoaderPlugin.js\";\nvar WidgetLoaderPluginConfig = {\n name: 'WidgetLoaderPlugin',\n type: PluginType.DASHBOARD_PLUGIN,\n component: WidgetLoaderPlugin\n};\nexport default WidgetLoaderPluginConfig;\n//# sourceMappingURL=WidgetLoaderPluginConfig.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nclass ControlType {}\n_defineProperty(ControlType, \"DROPDOWN_FILTER\", 'ControlType.DROPDOWN_FILTER');\n_defineProperty(ControlType, \"INPUT_FILTER\", 'ControlType.INPUT_FILTER');\n_defineProperty(ControlType, \"MARKDOWN\", 'ControlType.MARKDOWN');\n_defineProperty(ControlType, \"FILTER_SET_MANAGER\", 'ControlType.FILTER_SET_MANAGER');\nexport default ControlType;\n//# sourceMappingURL=ControlType.js.map","import PropTypes from 'prop-types';\nvar Panel = PropTypes.shape({\n state: PropTypes.shape({\n panelState: PropTypes.shape({})\n })\n});\nvar LinkPoint = PropTypes.shape({\n panelId: PropTypes.string.isRequired,\n columnName: PropTypes.string.isRequired,\n columnType: PropTypes.string.isRequired\n});\nvar LinkPointUntyped = PropTypes.shape({\n panelId: PropTypes.string.isRequired,\n columnName: PropTypes.string.isRequired\n});\nvar Link = PropTypes.shape({\n start: LinkPointUntyped,\n end: LinkPointUntyped,\n id: PropTypes.string,\n isReversed: PropTypes.bool\n});\nvar Links = PropTypes.arrayOf(Link);\nvar User = PropTypes.shape({\n name: PropTypes.string.isRequired,\n operateAs: PropTypes.string.isRequired,\n groups: PropTypes.arrayOf(PropTypes.string).isRequired,\n permissions: PropTypes.shape({\n canUsePanels: PropTypes.bool.isRequired,\n canCopy: PropTypes.bool.isRequired,\n canDownloadCsv: PropTypes.bool.isRequired,\n canLogout: PropTypes.bool.isRequired\n }).isRequired\n});\nvar UIPropTypes = Object.freeze({\n LinkPoint,\n Link,\n Links,\n Panel,\n User\n});\nexport default UIPropTypes;\n//# sourceMappingURL=UIPropTypes.js.map","import PropTypes from 'prop-types';\nvar nullableBoolean = (props, propName) => props[propName] === null ? null : PropTypes.bool;\nvar nullableString = (props, propName) => props[propName] === null ? null : PropTypes.string;\nvar CommonPropTypes = Object.freeze({\n nullableBoolean,\n nullableString\n});\nexport default CommonPropTypes;\n//# sourceMappingURL=CommonPropTypes.js.map"],"file":"assets/index-ByXhtFz6.js"}