@deephaven/code-studio 1.15.1 → 1.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/build/assets/{AppRoot-yoU6xO7o.js → AppRoot-BwEVs27P.js} +6 -6
  2. package/build/assets/{AppRoot-yoU6xO7o.js.map → AppRoot-BwEVs27P.js.map} +1 -1
  3. package/build/assets/{Chart-B-lgYFRk.js → Chart-d1LFGOMH.js} +2 -2
  4. package/build/assets/{Chart-B-lgYFRk.js.map → Chart-d1LFGOMH.js.map} +1 -1
  5. package/build/assets/{ControlType-BXDfYonb.js → ControlType-Etqnd6n0.js} +4 -4
  6. package/build/assets/{ControlType-BXDfYonb.js.map → ControlType-Etqnd6n0.js.map} +1 -1
  7. package/build/assets/{FormatterUtils-VvugcpnR.js → FormatterUtils-DclplMcY.js} +2 -2
  8. package/build/assets/{FormatterUtils-VvugcpnR.js.map → FormatterUtils-DclplMcY.js.map} +1 -1
  9. package/build/assets/{Grid-BhSfx_MV.js → Grid-NUf6WtL2.js} +2 -2
  10. package/build/assets/{Grid-BhSfx_MV.js.map → Grid-NUf6WtL2.js.map} +1 -1
  11. package/build/assets/GridTokenMouseHandler-X4KdhlOq.js +2 -0
  12. package/build/assets/GridTokenMouseHandler-X4KdhlOq.js.map +1 -0
  13. package/build/assets/{IrisGrid-CxxjDqw5.js → IrisGrid-Bh9yAG6T.js} +3 -3
  14. package/build/assets/{IrisGrid-CxxjDqw5.js.map → IrisGrid-Bh9yAG6T.js.map} +1 -1
  15. package/build/assets/{IrisGridModel-DSlx1u3X.js → IrisGridModel-DDGkzyRh.js} +3 -3
  16. package/build/assets/{IrisGridModel-DSlx1u3X.js.map → IrisGridModel-DDGkzyRh.js.map} +1 -1
  17. package/build/assets/{IrisGridShortcuts-RA3wXust.js → IrisGridShortcuts-D2g_Rl9k.js} +2 -2
  18. package/build/assets/{IrisGridShortcuts-RA3wXust.js.map → IrisGridShortcuts-D2g_Rl9k.js.map} +1 -1
  19. package/build/assets/{IrisGridThemeProvider-6it02n4x.js → IrisGridThemeProvider-BTuQfmMf.js} +6 -6
  20. package/build/assets/IrisGridThemeProvider-BTuQfmMf.js.map +1 -0
  21. package/build/assets/{LocalWorkspaceStorage-BZKRnSF8.js → LocalWorkspaceStorage-C3ldThpP.js} +2 -2
  22. package/build/assets/{LocalWorkspaceStorage-BZKRnSF8.js.map → LocalWorkspaceStorage-C3ldThpP.js.map} +1 -1
  23. package/build/assets/{MarkdownEditor-C2AAm9ih.js → MarkdownEditor-Bww40EVD.js} +2 -2
  24. package/build/assets/{MarkdownEditor-C2AAm9ih.js.map → MarkdownEditor-Bww40EVD.js.map} +1 -1
  25. package/build/assets/{MarkdownNotebook-DBOYivNl.js → MarkdownNotebook-CTVzzJtp.js} +2 -2
  26. package/build/assets/{MarkdownNotebook-DBOYivNl.js.map → MarkdownNotebook-CTVzzJtp.js.map} +1 -1
  27. package/build/assets/{MissingPartitionError-uL8lR3Hy.js → MissingPartitionError-jNITaf6f.js} +2 -2
  28. package/build/assets/{MissingPartitionError-uL8lR3Hy.js.map → MissingPartitionError-jNITaf6f.js.map} +1 -1
  29. package/build/assets/{MockChartModel-DTdba9NN.js → MockChartModel-Cc0LZyRl.js} +2 -2
  30. package/build/assets/{MockChartModel-DTdba9NN.js.map → MockChartModel-Cc0LZyRl.js.map} +1 -1
  31. package/build/assets/{StyleGuideRoot-DTTYIKzl.js → StyleGuideRoot-BvO87vbL.js} +2 -2
  32. package/build/assets/{StyleGuideRoot-DTTYIKzl.js.map → StyleGuideRoot-BvO87vbL.js.map} +1 -1
  33. package/build/assets/{index-Pb0fT4BS.js → index-BzMWwrSc.js} +4 -4
  34. package/build/assets/{index-Pb0fT4BS.js.map → index-BzMWwrSc.js.map} +1 -1
  35. package/build/assets/index-D44-83Ub.js +2 -0
  36. package/build/assets/index-D44-83Ub.js.map +1 -0
  37. package/build/assets/{index-SLNddBo_.js → index-D9pGoiog.js} +3 -3
  38. package/build/assets/{index-SLNddBo_.js.map → index-D9pGoiog.js.map} +1 -1
  39. package/build/index.html +2 -2
  40. package/package.json +18 -18
  41. package/build/assets/GridTokenMouseHandler-Dem4pZ7B.js +0 -2
  42. package/build/assets/GridTokenMouseHandler-Dem4pZ7B.js.map +0 -1
  43. package/build/assets/IrisGridThemeProvider-6it02n4x.js.map +0 -1
  44. package/build/assets/index-DZpheLqH.js +0 -2
  45. package/build/assets/index-DZpheLqH.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"mappings":"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","names":["CardFlip","_ref","className","isFlipped","children","dataTestId","getComponent","key","front","useRef","transitionStart","useCallback","event","transitionEnd","useEffect","refObj","_jsxs","classNames","_jsx","asyncGeneratorStep","n","t","e","r","o","c","i","u","_asyncToGenerator","_next","_throw","DeferredApiContext","createContext","useDeferredApi","widget","api","setApi","useState","error","setError","deferredApi","useContext","contextApi","ApiContext","isCancelled","loadApi","_loadApi","newApi","ownKeys","_objectSpread","_defineProperty","_toPropertyKey","_toPrimitive","log","Log","FigureChartModel","ChartModel","dh","figure","_this","settings","debounce","axisTypeMap","ChartUtils","pendingSeries","_loop","_chart$showLegend","series","chart","memoize","columnType","formatter","dataFormatter","timeZone","value","range","rangeStart","rangeEnd","valueParser","axis","source","_this$figure$charts$","_this2","charts","activeSeriesNames","_loop2","j","axes","title","xAxis","yAxis","_axisTypeMap$get$find","_axisTypeMap$get","_axisTypeMap$get$find2","_axisTypeMap$get2","xAxisIndex","a","yAxisIndex","annotation","allSeriesNames","inactiveSeriesNames","seriesName","_i","showLegend","_this$renderOptions$w","_this$renderOptions","seriesData","oneClick","columns","callback","figureUpdateEvent","seriesArray","sources","type","valueTranslator","dataArray","data","renderOptions","isDownsamplingDisabled","rect","_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","plotWidth","plotHeight","axisFormats","axisFormat","axisLayoutProperty","props","sourceType","name","plotStyle","property","set","xLow","xHigh","width","x","_xLow","_xHigh","y","yLow","yHigh","ids","labels","filterMap","_this3","_loop3","keys","column","ChartModelFactory","table","tableCopy","isFigureChartModel","model","IrisGridTableModel","IrisGridTableModelTemplate","Formatter","inputTable","inputTableKeys","EMPTY_ARRAY","inputTableValues","layoutHintsFrontColumns","layoutHintsBackColumns","layoutHintsFrozenColumns","userFrozenColumns","_","index","_this$inputTable","_this$inputTable2","_this$layoutHints$fro","_this$layoutHints","_this$layoutHints$bac","_this$layoutHints2","_this$layoutHints$fro2","_this$layoutHints3","_this$table$descripti","customColumns","formatColumns","EventShimCustomEvent","IrisGridModel","partitions","_this4","partitionFilters","partition","partitionColumn","partitionFilter","filter","totalsConfig","PromiseUtils","totalsTable","err","columnIndex","_this5","modelIndex","columnName","ranges","_superprop_getPendingDataMap","_superprop_setPendingDataMap","_value","_this6","_this6$inputTable","assertNotNull","keyColumns","pendingAreaRange","pendingRanges","GridRange","newDataMap","pendingRange","tableAreaRange","tableRanges","deleteTable","keyColumn","keyIndex","filters","row","columnFilters","_filter","agg","curr","_agg$and","_agg$or","startRow","valueType","insensitive","contains","isBackwards","_this7","EmptyIrisGridModel","depth","columnAlignmentMap","sort","rollupConfig","selectDistinctColumns","EMPTY_MAP","map","count","top","bottom","includeHeaders","formatValue","groups","isPartitionedTableWithBaseTable","partitionedTable","IrisGridPartitionedTableModel","_this$columns$column$","MissingPartitionError","isMissingPartitionError","makeModel","TableUtils","IrisGridTreeTableModel","IrisGridProxyModel","target","prop","receiver","_Object$getOwnPropert","proxyHasGetter","proxyHasProp","proxyHasFn","trueTarget","_Object$getOwnPropert2","proxyHasSetter","detail","oldModel","oldColumns","isIrisGridTableModelTemplate","modelPromise","events","isPartitionedGridModelProvider","isPartitionedGridModel","partitionConfig","deepEqual","columnNames","IrisGridModelFactory","_arguments","areGridStatesEqual","gridStateA","gridStateB","compareKeys","areIrisGridStatesEqual","irisGridStateA","irisGridStateB","compareStateKeys","makeMemoizedGridStateDehydrator","memoizeOne","gridState","IrisGridUtils","_ref2","modelA","modelB","makeMemoizedIrisGridStateDehydrator","irisGridState","irisGridUtils","_ref3","_ref4","makeMemoizedCombinedGridStateDehydrator","_ref5","_ref6","IrisGridCacheUtils","useLayoutManager","layoutManager","LayoutManagerContext","migrateState","state","from","to","migrations","migratedState","currentVersion","possibleMigration","m","migration","usePersistentState","initialState","config","panelId","useDhId","hookId","useMemo","nanoid","context","PersistentStateContext","version","deleteOnUnmount","setState","persistedData","stateWithConfig","useDebugValue","ChartEvent","IrisGridEvent","PandasEvent","TabEvent","DashboardTabEvent","WidgetPanelTooltip","descriptor","description","displayName","formattedType","CopyButton","_Fragment","XWidgetPanelTooltip","createXComponent","WidgetPanel","PureComponent","showTabTooltip","_descriptor$displayTy","propsAdditionalActions","ContextActions","copyToClipboard","errorMessage","isClientDisconnected","isPanelDisconnected","isWidgetDisconnected","isWaitingForReconnect","session","onSessionClose","componentPanel","isLoaded","isLoading","glContainer","glEventHub","isDisconnected","isClonable","isRenamable","renderTabTooltip","onClearAllFilters","onHide","onFocus","onBlur","onResize","onSessionOpen","onShow","onTabBlur","onTabFocus","onTabClicked","isPanelInactive","doRenderTabTooltip","additionalActions","Panel","XWidgetPanel","ChartFilterOverlay","columnMap","inputFilterMap","linkedColumnMap","onAdd","onOpenLinker","waitingFilterMap","waitingInputMap","inputMessage","waitingColumns","needsInputFilterValue","needsLinkValue","columnsText","TextUtils","item","handleAddClick","handleOpenLinker","isWaitingFilters","isWaitingInput","isColumnWaiting","icon","vsWarning","vsPass","FontAwesomeIcon","Button","ChartColumnSelectorOverlay","onColumnSelected","_onMouseEnter","onMouseLeave","SocketedButton","isChartPanelTableMetadata","metadata","isChartPanelFigureMetadata","isGLChartPanelState","panelState","tableSettings","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","Component","isFilterRequired","inputFilters","inputFilter","links","LayoutUtils","link","columnSelectionValidator","_metadata$figure","_metadata$name","React","Pending","_metadata","filterValueMap","prevProps","prevState","isLinked","resolved","isActive","isHidden","localDashboardId","setActiveTool","setDashboardIsolatedLinkerPanelId","ToolType","prevModel","sourcePanel","sourcePanelState","update","prevSettings","_element$getBoundingC","element","filterMapParam","updatedFilterMap","filterList","_inputFilterMap$get","filterValue","inputFilterValue","prevInputFilters","deletedInputFilters","prevInputFilter","changedInputFilters","forceUpdate","needsUpdate","linkValue","defaultTitle","filterTitle","newState","isLinkerActive","Plotly","containerRef","isWaitingForFilter","isSelectingColumn","Chart","FadeTransition","mapStateToProps","ownProps","sourcePanelId","panelTableMap","getTableMapForDashboard","openedPanelMap","getOpenedPanelMapForDashboard","activeTool","getActiveTool","isolatedLinkerPanelId","getIsolatedLinkerPanelIdForDashboard","getColumnSelectionValidatorForDashboard","getInputFiltersForDashboard","getLinksForDashboard","getSettings","ConnectedChartPanel","connect","setActiveToolAction","setDashboardIsolatedLinkerPanelIdAction","UPDATE_DEBOUNCE","DropdownFilter","selectedColumn","selectedIndex","options","columnItem","values","val","memoizee","shortType","onChange","isValueShown","_column","_isValueShown","eventTargetValue","allColumns","valueIndex","_this$dropdownRef$cur","oldValue","oldIsValueShown","_source$columnName","disableLinking","onSourceMouseEnter","onSourceMouseLeave","settingsError","disableCancel","id","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","FormatterUtils","DateTimeColumnFormatter","_name","_type","timestamp","sourceTable","valuesTable","prevSource","prevSourceTable","sourceSize","panelLinks","sendUpdate","prevTimestamp","wasFlipped","skipUpdate","isFlip","_this$dropdownFilterR","_this$dropdownFilterR2","_this$getSource","excludePanelIds","sorts","valuesColumn","columnFormats","_ref7","rows","settingsErrorMessage","panelErrorMessage","formattedValues","ConnectedDropdownFilterPanel","NAME_INPUT_PLACEHOLDER","EMPTY_LIST_PLACEHOLDER","FilterSetManager","_document$querySelect","overlay","filterSets","renameSet","modifiedFilterSets","selectedId","isEmptyList","onUpdateSets","editId","getFilterState","panels","nameInputValue","_nameInputValue$trim","trimmedName","_nameInputValue$trim2","restoreFullState","nameInputError","namedFilterSet","updatedModifiedFilterSets","prevFilterSets","newSelectedIndex","newSelectedId","selectedSetIndex","_ref8","_ref9","selectedSet","_ref0","onApply","filterSet","_ref1","_this$renameInputRef$","isNameInputScreen","isRenamingExistingSet","isEmptyEditList","isInitialScreen","isEditListScreen","captureSetIcon","vsCircleLargeFilled","vsDeviceCamera","dhNewCircleLargeFilled","updateSetIcon","vsArrowSmallUp","vsSave","vsCircleSlash","RadioGroup","Radio","_ref10","vsEdit","vsTrash","_ref11","dhRefresh","IrisGridPanelTooltip","_model$rowCount","_model$pendingRowCoun","_model$floatingBottom","_model$floatingTopRow","_model$columnCount","rowCount","formattedRowCount","columnCount","formattedcolumnCount","isLegacyIrisGridPanelMetadata","irisGridPanelMetadata","isIrisGridPanelMetadata","DEBOUNCE_PANEL_STATE_UPDATE","getTableNameFromMetadata","IrisGridPanel","pluginFetchColumns","columnSet","start","Plugin","pluginState","_this$irisGrid$curren","deprecatedProps","isSelectingPartition","advancedSettings","irisGridPanelState","onPanelStateUpdate","oldPanelState","_panelState","AdvancedSettings","modelParam","irisGridStateOverrides","modelQueue","aggregationSettings","modelChange","_this$irisGridUtils$g","_this$irisGridUtils","pluginFilters","_this$pluginRef$curre","_this$pluginRef$curre2","_this$pluginRef$curre3","tableColumn","onStateChange","isModelReady","dataMap","loadPlugin","pluginName","irisGrid","_gridWrapper$getBound","_allColumnXs$get","_allColumnWidths$get","gridWrapper","metrics","columnHeaderHeight","allColumnXs","allColumnWidths","right","columnHeaderMaxDepth","visibleIndex","columnX","columnWidth","clamp","quickFilters","advancedFilters","indexedQuickFilters","indexedAdvancedFilters","overrides","gridStateOverrides","originalIrisGridStateOverrides","savedQuickFilters","savedAdvancedFilters","customColumnFormatMap","isFilterBarShown","reverse","userColumnWidths","userRowHeights","showSearchBar","searchValue","selectedSearchColumns","invertSearchColumns","pendingDataMap","frozenColumns","conditionalFormats","columnHeaderGroups","isStuckToBottom","isStuckToRight","movedColumns","movedRows","_this$irisGrid$curren2","_this$irisGrid$curren3","grid","_model$description","_panelState$pluginSta","getDownloadWorker","mouseHandlers","user","renderer","getMetricCalculator","theme","childrenContent","permissions","canCopy","canDownloadCsv","widgetPanelDescriptor","IrisGrid","DEFAULT_DASHBOARD_ID","getUser","ConnectedIrisGridPanel","InputFilter","propColumn","inputLength","titleLabel","INPUT_FILTER_DEBOUNCE","InputFilterPanel","_this$inputFilterRef$","_this$inputFilterRef$2","ConnectedInputFilterPanel","hasSetPanelState","FilterSetManagerPanel","configs","dashboardOpenedPanelMap","componentName","setDashboardFilterSets","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","lazy","__vitePreload","MarkdownPanel","content","clickPositionY","markdownEditorContainer","_this$editor$getModel","_this$editor$getModel2","contentTop","contentScrollTop","contentScrollHeight","totalLines","lineToFocus","dbClickPositionY","editor","PanelEvent","_this$editor","isStartPageShown","Suspense","LoadingOverlay","markdownEditor","getClosedPanelsForDashboard","ConnectedMarkdownPanel","PandasReloadButton","onClick","buttonRef","handleClick","_buttonRef$current","PandasPanel","prevMakeModel","_this$irisGridRef$cur","_this$irisGridRef$cur2","_this$irisGridRef$cur3","shouldFocusGrid","MockFileStorageTable","items","search","path","expanded","isDirectory","sortedRanges","viewport","_this$onUpdateCallbac","loadedViewportData","isReversed","MockFileStorage","file","newName","FileUtils","allItems","FileNotFoundError","itemDetails","CorePanel","CorePanelImport","createChartModel","_x","_x2","_x3","_x4","_createChartModel","panelFetch","tableName","getTimeZone","store","ChartPanelPlugin","forwardRef","ref","ChartWidgetPlugin","useApi","setModel","fetch","cancelled","init","_init","newModel","ChartPluginConfig","PluginType","vsGraph","ChartBuilderPlugin","assertIsDashboardPluginProps","layout","handleCreateChart","fetchTable","root","useListener","ChartBuilderPluginConfig","FilterPlugin","registerComponent","dispatch","useDispatch","panelColumns","panelFilters","panelTables","b","aName","bName","aType","bType","array","tableMap","updateDashboardData","handleColumnsChanged","sourceId","handleFiltersChanged","handleTableChanged","handlePanelUnmount","handleOpenDropdown","focusElement","createNewStack","dragEvent","handleOpenInput","handleOpenFilterSetManager","cleanups","cleanup","FilterPluginConfig","useLoadTablePlugin","plugins","usePlugins","plugin","pluginModule","isTablePlugin","isLegacyTablePlugin","useHydrateGrid","hydratedProps","_makeModel","GridPanelPlugin","useIrisGridModel","setIsLoading","reload","handleDisconnect","result","useDashboardColumnFilters","eventHub","dashboardId","useDashboardId","getInputFilters","s","reduxInputFilters","useAppSelector","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","_excluded","_objectWithoutProperties","_objectWithoutPropertiesLoose","GridWidgetPlugin","_model$columns","useSelector","fetchResult","hydratedState","dehydrateIrisGridState","handleIrisGridChange","_useGridLinker","linkerAlwaysFetchColumns","linkerProps","handleClearAllFilters","selection","setSelection","filterFetchColumns","getErrorMessage","GridPluginConfig","dhTable","isLinkableFromPanel","p","isLinkablePanel","isLinkableColumn","LinkerUtils","end","startColumnType","endColumnType","isCompatibleType","cloneId","clonedLinks","DROOP","DROOP_EXPONENT","TRIANGLE_HEIGHT","TRIANGLE_BASE","TRIANGLE_TIP","TRIANGLE_HYPOTENUSE","TRIANGLE_THETA","CLIP_RADIUS","HALF_PI","LinkerLink","filterType","getLabelForNumberFilter","getLabelForTextFilter","getLabelForDateFilter","FilterType","linkId","onOperatorChanged","filterTypes","symbol","operator","isSelected","x1","y1","x2","y2","isHovering","len","theta","xMult","yMult","maxX","maxY","minX","minY","qx","qy","selectClipPath","clipPathId","endTheta","t2theta","t3theta","tx1","ty1","tx2","ty2","tx3","ty3","points","midX","midY","dMidX","dMidY","slopeAtMid","DISTANCE_FROM_MID","topOffsetX","topOffsetY","bottomOffsetX","bottomOffsetY","showOperator","vsTriangleDown","DropdownMenu","LinkerOverlayContent","info","linkPoint","panelManager","linkTargetPropMap","linkPointId","linkTargetHandlers","coordinates","coordinate","onLinksUpdated","newLinks","dialog","dialogX","dialogY","offset","isDragging","selectedIds","onLinkDeleted","onCancel","disabled","messageText","onLinkSelected","onAllLinksDeleted","onDone","mouse","mode","visibleLinks","_mouse$x","_mouse$y","tmpX","tmpY","vsGripper","Tooltip","GLOBAL_SHORTCUTS","mapState","setDashboardLinksAction","addDashboardLinksAction","deleteDashboardLinksAction","setDashboardColumnSelectionValidatorAction","Linker","linkInProgress","isolateForPanelId","combinedLinks","_link$start","remove","linksToDelete","isIsolatedLinker","isAlwaysEnd","_link$start2","_link$end2","isAlwaysEndPoint","overrideIsolatedLinkerPanelId","newLink","_linkInProgress$endTy","isValid","finalType","existingLinkPanelId","panelLinkEnd","existingLinkEnd","existingLinkStart","_linksToDelete","panelLinkStart","_newLink","_linkTargetPropMap$ge","unsetFilterValue","endPanel","_linkTargetPropMap$ge2","setFilterValues","addDashboardLinks","clearAll","setDashboardLinks","deleteDashboardLinks","isolatedLinks","_link$start3","_link$end3","l","handlers","panelFilterMap","_filterMap$get$filter","_filterMap$get","endPanelId","existingFilterMap","startColumnIndex","isExpandable","isGrouped","text","dateFilterFormatter","DateUtils","cloneConfig","linksToAdd","componentId","setDashboardColumnSelectionValidator","panelOrId","_linkInProgress$endTy2","isDraggingPanel","isLinkOverlayShown","linkerOverlayMessage","ConnectedLinker","LinkerPlugin","LinkerPluginConfig","MarkdownPlugin","handleOpen","openedMarkdowns","_markdown$title","panelTitle","MarkdownEvent","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","panelProps","deregisterFns","panelComponent","deregister","usePanelOpenListener","WidgetLoaderPluginConfig","PropTypes","LinkPoint","LinkPointUntyped","Link","Links","User","UIPropTypes","nullableBoolean","propName","nullableString","CommonPropTypes"],"ignoreList":[],"sources":["../../../components/dist/CardFlip.js","../../../jsapi-bootstrap/dist/useDeferredApi.js","../../../chart/dist/FigureChartModel.js","../../../chart/dist/ChartModelFactory.js","../../../chart/dist/isFigureChartModel.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/dist/layout/useLayoutManager.js","../../../dashboard/dist/usePersistentState.js","../../../dashboard-core-plugins/dist/events/ChartEvent.js","../../../dashboard-core-plugins/dist/events/IrisGridEvent.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/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/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/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/prop-types/UIPropTypes.js","../../../dashboard-core-plugins/dist/prop-types/CommonPropTypes.js"],"sourcesContent":["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","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/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoizee';\nimport { debounce, set } from 'lodash';\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","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","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","import { useContext, useDebugValue, useEffect, useMemo, useState } from 'react';\nimport { nanoid } from 'nanoid';\nimport { PersistentStateContext } from \"./PersistentStateContext.js\";\nimport { useDhId } from \"./useDhId.js\";\n/**\n * Migrates persisted state to the provided version using the provided migrations.\n *\n * @param state The current state\n * @param from The current version\n * @param to The version to migrate to\n * @param migrations The list of all migrations (may include those already applied)\n * @param type The type of the state. Used for better error messages\n * @returns The state at the new version\n * @throws Error if trying to migrate backwards or no migration exists for the to version\n */\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 * @param config.deleteOnUnmount If true, the state will be deleted from the PersistentStateProvider when the component using this hook is unmounted. Defaults to true.\n * May be useful to set to false for components which are conditionally rendered within a panel like console creator settings.\n * @returns [state, setState] tuple just like useState.\n */\nexport function usePersistentState(initialState, config) {\n var panelId = useDhId();\n var hookId = useMemo(() => nanoid(), []);\n var context = useContext(PersistentStateContext);\n var {\n type,\n version,\n migrations = [],\n deleteOnUnmount = true\n } = config;\n var [state, setState] = useState(() => {\n var persistedData = panelId != null ? context === null || context === void 0 ? void 0 : context.getState(panelId, type) : undefined;\n if (persistedData == null) {\n return typeof initialState === 'function' ? initialState() : initialState;\n }\n if (persistedData.version !== version) {\n return migrateState(persistedData.state, persistedData.version, version, migrations, type);\n }\n return persistedData.state;\n });\n var stateWithConfig = useMemo(() => ({\n type,\n version,\n state\n }), [state, type, version]);\n useDebugValue(stateWithConfig);\n useEffect(function addState() {\n if (panelId != null) {\n context === null || context === void 0 || context.addState(hookId, panelId, stateWithConfig);\n }\n }, [context, hookId, panelId, stateWithConfig]);\n useEffect(function removeOnUnmount() {\n return () => {\n if (deleteOnUnmount && panelId != null) {\n context === null || context === void 0 || context.removeState(hookId, panelId, type);\n }\n };\n }, [context, deleteOnUnmount, hookId, panelId, type]);\n useEffect(() => () => {\n if (panelId != null) {\n context === null || context === void 0 || context.deregisterHook(hookId, panelId, type);\n }\n }, [context, hookId, panelId, type]);\n return [state, setState];\n}\nexport default usePersistentState;\n//# sourceMappingURL=usePersistentState.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","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 UNSAFE_className: \"tab-tooltip-copy\",\n tooltip: \"Copy name\",\n copy: name,\n isQuiet: true\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","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","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 { 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/dashboard';\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 { 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, usePersistentState } 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","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-Pb0fT4BS.js"}
1
+ {"version":3,"mappings":"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","names":["CardFlip","_ref","className","isFlipped","children","dataTestId","getComponent","key","front","useRef","transitionStart","useCallback","event","transitionEnd","useEffect","refObj","_jsxs","classNames","_jsx","asyncGeneratorStep","n","t","e","r","o","c","i","u","_asyncToGenerator","_next","_throw","DeferredApiContext","createContext","useDeferredApi","widget","api","setApi","useState","error","setError","deferredApi","useContext","contextApi","ApiContext","isCancelled","loadApi","_loadApi","newApi","ownKeys","_objectSpread","_defineProperty","_toPropertyKey","_toPrimitive","log","Log","FigureChartModel","ChartModel","dh","figure","_this","settings","debounce","axisTypeMap","ChartUtils","pendingSeries","_loop","_chart$showLegend","series","chart","memoize","columnType","formatter","dataFormatter","timeZone","value","range","rangeStart","rangeEnd","valueParser","axis","source","_this$figure$charts$","_this2","charts","activeSeriesNames","_loop2","j","axes","title","xAxis","yAxis","_axisTypeMap$get$find","_axisTypeMap$get","_axisTypeMap$get$find2","_axisTypeMap$get2","xAxisIndex","a","yAxisIndex","annotation","allSeriesNames","inactiveSeriesNames","seriesName","_i","showLegend","_this$renderOptions$w","_this$renderOptions","seriesData","oneClick","columns","callback","figureUpdateEvent","seriesArray","sources","type","valueTranslator","dataArray","data","renderOptions","isDownsamplingDisabled","rect","_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","plotWidth","plotHeight","axisFormats","axisFormat","axisLayoutProperty","props","sourceType","name","plotStyle","property","set","xLow","xHigh","width","x","_xLow","_xHigh","y","yLow","yHigh","ids","labels","filterMap","_this3","_loop3","keys","column","ChartModelFactory","table","tableCopy","isFigureChartModel","model","IrisGridTableModel","IrisGridTableModelTemplate","Formatter","inputTable","inputTableKeys","EMPTY_ARRAY","inputTableValues","layoutHintsFrontColumns","layoutHintsBackColumns","layoutHintsFrozenColumns","userFrozenColumns","_","index","_this$inputTable","_this$inputTable2","_this$layoutHints$fro","_this$layoutHints","_this$layoutHints$bac","_this$layoutHints2","_this$layoutHints$fro2","_this$layoutHints3","_this$table$descripti","customColumns","formatColumns","EventShimCustomEvent","IrisGridModel","partitions","_this4","partitionFilters","partition","partitionColumn","partitionFilter","filter","totalsConfig","PromiseUtils","totalsTable","err","columnIndex","_this5","modelIndex","columnName","ranges","_superprop_getPendingDataMap","_superprop_setPendingDataMap","_value","_this6","_this6$inputTable","assertNotNull","keyColumns","pendingAreaRange","pendingRanges","GridRange","newDataMap","pendingRange","tableAreaRange","tableRanges","deleteTable","keyColumn","keyIndex","filters","row","columnFilters","_filter","agg","curr","_agg$and","_agg$or","startRow","valueType","insensitive","contains","isBackwards","_this7","EmptyIrisGridModel","depth","columnAlignmentMap","sort","rollupConfig","selectDistinctColumns","EMPTY_MAP","map","count","top","bottom","includeHeaders","formatValue","groups","isPartitionedTableWithBaseTable","partitionedTable","IrisGridPartitionedTableModel","_this$columns$column$","MissingPartitionError","isMissingPartitionError","makeModel","TableUtils","IrisGridTreeTableModel","IrisGridProxyModel","target","prop","receiver","_Object$getOwnPropert","proxyHasGetter","proxyHasProp","proxyHasFn","trueTarget","_Object$getOwnPropert2","proxyHasSetter","detail","oldModel","oldColumns","isIrisGridTableModelTemplate","modelPromise","events","isPartitionedGridModelProvider","isPartitionedGridModel","partitionConfig","deepEqual","columnNames","IrisGridModelFactory","_arguments","areGridStatesEqual","gridStateA","gridStateB","compareKeys","areIrisGridStatesEqual","irisGridStateA","irisGridStateB","compareStateKeys","makeMemoizedGridStateDehydrator","memoizeOne","gridState","IrisGridUtils","_ref2","modelA","modelB","makeMemoizedIrisGridStateDehydrator","irisGridState","irisGridUtils","_ref3","_ref4","makeMemoizedCombinedGridStateDehydrator","_ref5","_ref6","IrisGridCacheUtils","useLayoutManager","layoutManager","LayoutManagerContext","migrateState","state","from","to","migrations","migratedState","currentVersion","possibleMigration","m","migration","usePersistentState","initialState","config","panelId","useDhId","hookId","useMemo","nanoid","context","PersistentStateContext","version","deleteOnUnmount","setState","persistedData","stateWithConfig","useDebugValue","ChartEvent","IrisGridEvent","PandasEvent","TabEvent","DashboardTabEvent","WidgetPanelTooltip","descriptor","description","displayName","formattedType","CopyButton","_Fragment","XWidgetPanelTooltip","createXComponent","WidgetPanel","PureComponent","showTabTooltip","_descriptor$displayTy","propsAdditionalActions","ContextActions","copyToClipboard","errorMessage","isClientDisconnected","isPanelDisconnected","isWidgetDisconnected","isWaitingForReconnect","session","onSessionClose","componentPanel","isLoaded","isLoading","glContainer","glEventHub","isDisconnected","isClonable","isRenamable","renderTabTooltip","onClearAllFilters","onHide","onFocus","onBlur","onResize","onSessionOpen","onShow","onTabBlur","onTabFocus","onTabClicked","isPanelInactive","doRenderTabTooltip","additionalActions","Panel","XWidgetPanel","ChartFilterOverlay","columnMap","inputFilterMap","linkedColumnMap","onAdd","onOpenLinker","waitingFilterMap","waitingInputMap","inputMessage","waitingColumns","needsInputFilterValue","needsLinkValue","columnsText","TextUtils","item","handleAddClick","handleOpenLinker","isWaitingFilters","isWaitingInput","isColumnWaiting","icon","vsWarning","vsPass","FontAwesomeIcon","Button","ChartColumnSelectorOverlay","onColumnSelected","_onMouseEnter","onMouseLeave","SocketedButton","isChartPanelTableMetadata","metadata","isChartPanelFigureMetadata","isGLChartPanelState","panelState","tableSettings","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","Component","isFilterRequired","inputFilters","inputFilter","links","LayoutUtils","link","columnSelectionValidator","_metadata$figure","_metadata$name","React","Pending","_metadata","filterValueMap","prevProps","prevState","isLinked","resolved","isActive","isHidden","localDashboardId","setActiveTool","setDashboardIsolatedLinkerPanelId","ToolType","prevModel","sourcePanel","sourcePanelState","update","prevSettings","_element$getBoundingC","element","filterMapParam","updatedFilterMap","filterList","_inputFilterMap$get","filterValue","inputFilterValue","prevInputFilters","deletedInputFilters","prevInputFilter","changedInputFilters","forceUpdate","needsUpdate","linkValue","defaultTitle","filterTitle","newState","isLinkerActive","Plotly","containerRef","isWaitingForFilter","isSelectingColumn","Chart","FadeTransition","mapStateToProps","ownProps","sourcePanelId","panelTableMap","getTableMapForDashboard","openedPanelMap","getOpenedPanelMapForDashboard","activeTool","getActiveTool","isolatedLinkerPanelId","getIsolatedLinkerPanelIdForDashboard","getColumnSelectionValidatorForDashboard","getInputFiltersForDashboard","getLinksForDashboard","getSettings","ConnectedChartPanel","connect","setActiveToolAction","setDashboardIsolatedLinkerPanelIdAction","UPDATE_DEBOUNCE","DropdownFilter","selectedColumn","selectedIndex","options","columnItem","values","val","memoizee","shortType","onChange","isValueShown","_column","_isValueShown","eventTargetValue","allColumns","valueIndex","_this$dropdownRef$cur","oldValue","oldIsValueShown","_source$columnName","disableLinking","onSourceMouseEnter","onSourceMouseLeave","settingsError","disableCancel","id","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","FormatterUtils","DateTimeColumnFormatter","_name","_type","timestamp","sourceTable","valuesTable","prevSource","prevSourceTable","sourceSize","panelLinks","sendUpdate","prevTimestamp","wasFlipped","skipUpdate","isFlip","_this$dropdownFilterR","_this$dropdownFilterR2","_this$getSource","excludePanelIds","sorts","valuesColumn","columnFormats","_ref7","rows","settingsErrorMessage","panelErrorMessage","formattedValues","ConnectedDropdownFilterPanel","NAME_INPUT_PLACEHOLDER","EMPTY_LIST_PLACEHOLDER","FilterSetManager","_document$querySelect","overlay","filterSets","renameSet","modifiedFilterSets","selectedId","isEmptyList","onUpdateSets","editId","getFilterState","panels","nameInputValue","_nameInputValue$trim","trimmedName","_nameInputValue$trim2","restoreFullState","nameInputError","namedFilterSet","updatedModifiedFilterSets","prevFilterSets","newSelectedIndex","newSelectedId","selectedSetIndex","_ref8","_ref9","selectedSet","_ref0","onApply","filterSet","_ref1","_this$renameInputRef$","isNameInputScreen","isRenamingExistingSet","isEmptyEditList","isInitialScreen","isEditListScreen","captureSetIcon","vsCircleLargeFilled","vsDeviceCamera","dhNewCircleLargeFilled","updateSetIcon","vsArrowSmallUp","vsSave","vsCircleSlash","RadioGroup","Radio","_ref10","vsEdit","vsTrash","_ref11","dhRefresh","IrisGridPanelTooltip","_model$rowCount","_model$pendingRowCoun","_model$floatingBottom","_model$floatingTopRow","_model$columnCount","rowCount","formattedRowCount","columnCount","formattedcolumnCount","isLegacyIrisGridPanelMetadata","irisGridPanelMetadata","isIrisGridPanelMetadata","DEBOUNCE_PANEL_STATE_UPDATE","getTableNameFromMetadata","IrisGridPanel","pluginFetchColumns","columnSet","start","Plugin","pluginState","_this$irisGrid$curren","deprecatedProps","isSelectingPartition","advancedSettings","irisGridPanelState","onPanelStateUpdate","oldPanelState","_panelState","AdvancedSettings","modelParam","irisGridStateOverrides","modelQueue","aggregationSettings","modelChange","_this$irisGridUtils$g","_this$irisGridUtils","pluginFilters","_this$pluginRef$curre","_this$pluginRef$curre2","_this$pluginRef$curre3","tableColumn","onStateChange","isModelReady","dataMap","loadPlugin","pluginName","irisGrid","_gridWrapper$getBound","_allColumnXs$get","_allColumnWidths$get","gridWrapper","metrics","columnHeaderHeight","allColumnXs","allColumnWidths","right","columnHeaderMaxDepth","visibleIndex","columnX","columnWidth","clamp","quickFilters","advancedFilters","indexedQuickFilters","indexedAdvancedFilters","overrides","gridStateOverrides","originalIrisGridStateOverrides","savedQuickFilters","savedAdvancedFilters","customColumnFormatMap","isFilterBarShown","reverse","userColumnWidths","userRowHeights","showSearchBar","searchValue","selectedSearchColumns","invertSearchColumns","pendingDataMap","frozenColumns","conditionalFormats","columnHeaderGroups","isStuckToBottom","isStuckToRight","movedColumns","movedRows","_this$irisGrid$curren2","_this$irisGrid$curren3","grid","_model$description","_panelState$pluginSta","getDownloadWorker","mouseHandlers","user","renderer","getMetricCalculator","theme","childrenContent","permissions","canCopy","canDownloadCsv","widgetPanelDescriptor","IrisGrid","DEFAULT_DASHBOARD_ID","getUser","ConnectedIrisGridPanel","InputFilter","propColumn","inputLength","titleLabel","INPUT_FILTER_DEBOUNCE","InputFilterPanel","_this$inputFilterRef$","_this$inputFilterRef$2","ConnectedInputFilterPanel","hasSetPanelState","FilterSetManagerPanel","configs","dashboardOpenedPanelMap","componentName","setDashboardFilterSets","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","lazy","__vitePreload","MarkdownPanel","content","clickPositionY","markdownEditorContainer","_this$editor$getModel","_this$editor$getModel2","contentTop","contentScrollTop","contentScrollHeight","totalLines","lineToFocus","dbClickPositionY","editor","PanelEvent","_this$editor","isStartPageShown","Suspense","LoadingOverlay","markdownEditor","getClosedPanelsForDashboard","ConnectedMarkdownPanel","PandasReloadButton","onClick","buttonRef","handleClick","_buttonRef$current","PandasPanel","prevMakeModel","_this$irisGridRef$cur","_this$irisGridRef$cur2","_this$irisGridRef$cur3","shouldFocusGrid","MockFileStorageTable","items","search","path","expanded","isDirectory","sortedRanges","viewport","_this$onUpdateCallbac","loadedViewportData","isReversed","MockFileStorage","file","newName","FileUtils","allItems","FileNotFoundError","itemDetails","CorePanel","CorePanelImport","createChartModel","_x","_x2","_x3","_x4","_createChartModel","panelFetch","tableName","getTimeZone","store","ChartPanelPlugin","forwardRef","ref","ChartWidgetPlugin","useApi","setModel","fetch","cancelled","init","_init","newModel","ChartPluginConfig","PluginType","vsGraph","ChartBuilderPlugin","assertIsDashboardPluginProps","layout","handleCreateChart","fetchTable","root","useListener","ChartBuilderPluginConfig","FilterPlugin","registerComponent","dispatch","useDispatch","panelColumns","panelFilters","panelTables","b","aName","bName","aType","bType","array","tableMap","updateDashboardData","handleColumnsChanged","sourceId","handleFiltersChanged","handleTableChanged","handlePanelUnmount","handleOpenDropdown","focusElement","createNewStack","dragEvent","handleOpenInput","handleOpenFilterSetManager","cleanups","cleanup","FilterPluginConfig","useLoadTablePlugin","plugins","usePlugins","plugin","pluginModule","isTablePlugin","isLegacyTablePlugin","useHydrateGrid","hydratedProps","_makeModel","GridPanelPlugin","useIrisGridModel","setIsLoading","reload","handleDisconnect","result","useDashboardColumnFilters","eventHub","dashboardId","useDashboardId","getInputFilters","s","reduxInputFilters","useAppSelector","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","_excluded","_objectWithoutProperties","_objectWithoutPropertiesLoose","GridWidgetPlugin","_model$columns","useSelector","fetchResult","hydratedState","dehydrateIrisGridState","handleIrisGridChange","_useGridLinker","linkerAlwaysFetchColumns","linkerProps","handleClearAllFilters","selection","setSelection","filterFetchColumns","getErrorMessage","GridPluginConfig","dhTable","isLinkableFromPanel","p","isLinkablePanel","isLinkableColumn","LinkerUtils","end","startColumnType","endColumnType","isCompatibleType","cloneId","clonedLinks","DROOP","DROOP_EXPONENT","TRIANGLE_HEIGHT","TRIANGLE_BASE","TRIANGLE_TIP","TRIANGLE_HYPOTENUSE","TRIANGLE_THETA","CLIP_RADIUS","HALF_PI","LinkerLink","filterType","getLabelForNumberFilter","getLabelForTextFilter","getLabelForDateFilter","FilterType","linkId","onOperatorChanged","filterTypes","symbol","operator","isSelected","x1","y1","x2","y2","isHovering","len","theta","xMult","yMult","maxX","maxY","minX","minY","qx","qy","selectClipPath","clipPathId","endTheta","t2theta","t3theta","tx1","ty1","tx2","ty2","tx3","ty3","points","midX","midY","dMidX","dMidY","slopeAtMid","DISTANCE_FROM_MID","topOffsetX","topOffsetY","bottomOffsetX","bottomOffsetY","showOperator","vsTriangleDown","DropdownMenu","LinkerOverlayContent","info","linkPoint","panelManager","linkTargetPropMap","linkPointId","linkTargetHandlers","coordinates","coordinate","onLinksUpdated","newLinks","dialog","dialogX","dialogY","offset","isDragging","selectedIds","onLinkDeleted","onCancel","disabled","messageText","onLinkSelected","onAllLinksDeleted","onDone","mouse","mode","visibleLinks","_mouse$x","_mouse$y","tmpX","tmpY","vsGripper","Tooltip","GLOBAL_SHORTCUTS","mapState","setDashboardLinksAction","addDashboardLinksAction","deleteDashboardLinksAction","setDashboardColumnSelectionValidatorAction","Linker","linkInProgress","isolateForPanelId","combinedLinks","_link$start","remove","linksToDelete","isIsolatedLinker","isAlwaysEnd","_link$start2","_link$end2","isAlwaysEndPoint","overrideIsolatedLinkerPanelId","newLink","_linkInProgress$endTy","isValid","finalType","existingLinkPanelId","panelLinkEnd","existingLinkEnd","existingLinkStart","_linksToDelete","panelLinkStart","_newLink","_linkTargetPropMap$ge","unsetFilterValue","endPanel","_linkTargetPropMap$ge2","setFilterValues","addDashboardLinks","clearAll","setDashboardLinks","deleteDashboardLinks","isolatedLinks","_link$start3","_link$end3","l","handlers","panelFilterMap","_filterMap$get$filter","_filterMap$get","endPanelId","existingFilterMap","startColumnIndex","isExpandable","isGrouped","text","dateFilterFormatter","DateUtils","cloneConfig","linksToAdd","componentId","setDashboardColumnSelectionValidator","panelOrId","_linkInProgress$endTy2","isDraggingPanel","isLinkOverlayShown","linkerOverlayMessage","ConnectedLinker","LinkerPlugin","LinkerPluginConfig","MarkdownPlugin","handleOpen","openedMarkdowns","_markdown$title","panelTitle","MarkdownEvent","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","panelProps","deregisterFns","panelComponent","deregister","usePanelOpenListener","WidgetLoaderPluginConfig","PropTypes","LinkPoint","LinkPointUntyped","Link","Links","User","UIPropTypes","nullableBoolean","propName","nullableString","CommonPropTypes"],"ignoreList":[],"sources":["../../../components/dist/CardFlip.js","../../../jsapi-bootstrap/dist/useDeferredApi.js","../../../chart/dist/FigureChartModel.js","../../../chart/dist/ChartModelFactory.js","../../../chart/dist/isFigureChartModel.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/dist/layout/useLayoutManager.js","../../../dashboard/dist/usePersistentState.js","../../../dashboard-core-plugins/dist/events/ChartEvent.js","../../../dashboard-core-plugins/dist/events/IrisGridEvent.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/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/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/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/prop-types/UIPropTypes.js","../../../dashboard-core-plugins/dist/prop-types/CommonPropTypes.js"],"sourcesContent":["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","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/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoizee';\nimport { debounce, set } from 'lodash';\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","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","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","import { useContext, useDebugValue, useEffect, useMemo, useState } from 'react';\nimport { nanoid } from 'nanoid';\nimport { PersistentStateContext } from \"./PersistentStateContext.js\";\nimport { useDhId } from \"./useDhId.js\";\n/**\n * Migrates persisted state to the provided version using the provided migrations.\n *\n * @param state The current state\n * @param from The current version\n * @param to The version to migrate to\n * @param migrations The list of all migrations (may include those already applied)\n * @param type The type of the state. Used for better error messages\n * @returns The state at the new version\n * @throws Error if trying to migrate backwards or no migration exists for the to version\n */\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 * @param config.deleteOnUnmount If true, the state will be deleted from the PersistentStateProvider when the component using this hook is unmounted. Defaults to true.\n * May be useful to set to false for components which are conditionally rendered within a panel like console creator settings.\n * @returns [state, setState] tuple just like useState.\n */\nexport function usePersistentState(initialState, config) {\n var panelId = useDhId();\n var hookId = useMemo(() => nanoid(), []);\n var context = useContext(PersistentStateContext);\n var {\n type,\n version,\n migrations = [],\n deleteOnUnmount = true\n } = config;\n var [state, setState] = useState(() => {\n var persistedData = panelId != null ? context === null || context === void 0 ? void 0 : context.getState(panelId, type) : undefined;\n if (persistedData == null) {\n return typeof initialState === 'function' ? initialState() : initialState;\n }\n if (persistedData.version !== version) {\n return migrateState(persistedData.state, persistedData.version, version, migrations, type);\n }\n return persistedData.state;\n });\n var stateWithConfig = useMemo(() => ({\n type,\n version,\n state\n }), [state, type, version]);\n useDebugValue(stateWithConfig);\n useEffect(function addState() {\n if (panelId != null) {\n context === null || context === void 0 || context.addState(hookId, panelId, stateWithConfig);\n }\n }, [context, hookId, panelId, stateWithConfig]);\n useEffect(function removeOnUnmount() {\n return () => {\n if (deleteOnUnmount && panelId != null) {\n context === null || context === void 0 || context.removeState(hookId, panelId, type);\n }\n };\n }, [context, deleteOnUnmount, hookId, panelId, type]);\n useEffect(() => () => {\n if (panelId != null) {\n context === null || context === void 0 || context.deregisterHook(hookId, panelId, type);\n }\n }, [context, hookId, panelId, type]);\n return [state, setState];\n}\nexport default usePersistentState;\n//# sourceMappingURL=usePersistentState.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","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 UNSAFE_className: \"tab-tooltip-copy\",\n tooltip: \"Copy name\",\n copy: name,\n isQuiet: true\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","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","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 { 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/dashboard';\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 { 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, usePersistentState } 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","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-BzMWwrSc.js"}