@deephaven/code-studio 0.60.0 → 0.60.1-alpha.4

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 (31) hide show
  1. package/build/assets/AppRoot-78d4d9e3.js +5 -0
  2. package/build/assets/AppRoot-78d4d9e3.js.map +1 -0
  3. package/build/assets/{ControlType-aed38d2a.js → ControlType-6564be64.js} +14 -14
  4. package/build/assets/ControlType-6564be64.js.map +1 -0
  5. package/build/assets/{FontBootstrap-03312de4.js → FontBootstrap-7c2011d9.js} +2 -2
  6. package/build/assets/{FontBootstrap-03312de4.js.map → FontBootstrap-7c2011d9.js.map} +1 -1
  7. package/build/assets/{IrisGrid-95f2b562.js → IrisGrid-9b7bdb62.js} +7 -7
  8. package/build/assets/{IrisGrid-95f2b562.js.map → IrisGrid-9b7bdb62.js.map} +1 -1
  9. package/build/assets/{IrisGridModelFactory-83f4e8e3.js → IrisGridModelFactory-13cf501d.js} +3 -3
  10. package/build/assets/{IrisGridModelFactory-83f4e8e3.js.map → IrisGridModelFactory-13cf501d.js.map} +1 -1
  11. package/build/assets/{StyleGuideRoot-f74fbaec.js → StyleGuideRoot-1e7a89ef.js} +2 -2
  12. package/build/assets/{StyleGuideRoot-f74fbaec.js.map → StyleGuideRoot-1e7a89ef.js.map} +1 -1
  13. package/build/assets/index-110a15f5.js +2 -0
  14. package/build/assets/index-110a15f5.js.map +1 -0
  15. package/build/assets/{index-8f18b8a1.js → index-4799bb94.js} +2 -2
  16. package/build/assets/{index-8f18b8a1.js.map → index-4799bb94.js.map} +1 -1
  17. package/build/assets/{index-aeb6c8aa.js → index-cdb214b1.js} +2 -2
  18. package/build/assets/{index-aeb6c8aa.js.map → index-cdb214b1.js.map} +1 -1
  19. package/build/assets/usePlugins-d26d6337.js +3 -0
  20. package/build/assets/usePlugins-d26d6337.js.map +1 -0
  21. package/build/assets/{useUser-2b2d3085.js → useUser-3f49dc07.js} +2 -2
  22. package/build/assets/{useUser-2b2d3085.js.map → useUser-3f49dc07.js.map} +1 -1
  23. package/build/index.html +1 -1
  24. package/package.json +31 -31
  25. package/build/assets/AppRoot-4e766647.js +0 -5
  26. package/build/assets/AppRoot-4e766647.js.map +0 -1
  27. package/build/assets/ControlType-aed38d2a.js.map +0 -1
  28. package/build/assets/index-e5c706d4.js +0 -2
  29. package/build/assets/index-e5c706d4.js.map +0 -1
  30. package/build/assets/usePlugins-ed18184b.js +0 -3
  31. package/build/assets/usePlugins-ed18184b.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index-aeb6c8aa.js","sources":["../../../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/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/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/MarkdownEditor.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/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/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/controls/markdown/MarkdownUtils.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":["function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nclass ChartEvent {}\n_defineProperty(ChartEvent, \"OPEN\", 'ChartEvent.OPEN');\n_defineProperty(ChartEvent, \"CLOSE\", 'ChartEvent.CLOSE');\n_defineProperty(ChartEvent, \"COLUMN_SELECTED\", 'ChartEvent.COLUMN_SELECTED');\nexport default ChartEvent;\n//# sourceMappingURL=ChartEvent.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nexport class IrisGridEvent {}\n_defineProperty(IrisGridEvent, \"OPEN_GRID\", 'IrisGridEvent.OPEN_GRID');\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(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nclass PandasEvent {}\n_defineProperty(PandasEvent, \"OPEN\", 'PandasEvent.OPEN');\n_defineProperty(PandasEvent, \"CLOSE\", 'PandasEvent.CLOSE');\nexport default PandasEvent;\n//# sourceMappingURL=PandasEvent.js.map","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { CopyButton } from '@deephaven/components';\nimport { GLPropTypes, LayoutUtils } from '@deephaven/dashboard';\nimport \"./WidgetPanelTooltip.css\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nfunction WidgetPanelTooltip(props) {\n var {\n widgetType,\n widgetName,\n glContainer,\n description,\n children\n } = props;\n var panelTitle = LayoutUtils.getTitleFromContainer(glContainer);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"tab-tooltip-grid-container\",\n children: [/*#__PURE__*/_jsxs(\"span\", {\n className: \"tab-tooltip-title\",\n children: [widgetType, \" Name\"]\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"tab-tooltip-name-wrapper\",\n children: [/*#__PURE__*/_jsx(\"span\", {\n className: \"tab-tooltip-name\",\n children: widgetName\n }), /*#__PURE__*/_jsx(CopyButton, {\n className: \"tab-tooltip-copy\",\n tooltip: \"Copy name\",\n copy: widgetName\n })]\n }), widgetName !== panelTitle && /*#__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: panelTitle\n })]\n }), description && /*#__PURE__*/_jsx(\"div\", {\n className: \"tab-tooltip-description\",\n children: description\n }), children]\n });\n}\nWidgetPanelTooltip.propTypes = {\n glContainer: GLPropTypes.Container.isRequired,\n widgetType: PropTypes.string,\n widgetName: PropTypes.string,\n description: PropTypes.string,\n children: PropTypes.node\n};\nWidgetPanelTooltip.defaultProps = {\n widgetType: '',\n widgetName: '',\n description: null,\n children: null\n};\nexport default WidgetPanelTooltip;\n//# sourceMappingURL=WidgetPanelTooltip.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport { ContextActions } from '@deephaven/components';\nimport { copyToClipboard } from '@deephaven/utils';\nimport Panel from \"./Panel.js\";\nimport WidgetPanelTooltip from \"./WidgetPanelTooltip.js\";\nimport \"./WidgetPanel.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { 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 super(props);\n _defineProperty(this, \"getCachedRenderTabTooltip\", memoize((showTabTooltip, glContainer, widgetType, widgetName, description) => showTabTooltip ? () => /*#__PURE__*/_jsx(WidgetPanelTooltip, {\n glContainer: glContainer,\n widgetType: widgetType,\n widgetName: widgetName,\n description: description\n }) : null));\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n this.handleSessionOpened = this.handleSessionOpened.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 widgetName\n } = this.props;\n copyToClipboard(widgetName);\n }\n getErrorMessage() {\n var {\n errorMessage\n } = this.props;\n var {\n isClientDisconnected,\n isPanelDisconnected,\n isWidgetDisconnected,\n isWaitingForReconnect\n } = this.state;\n if (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 widgetName,\n widgetType\n } = this.props;\n return \"Variable \\\"\".concat(widgetName, \"\\\" not set.\\n\").concat(widgetType, \" does not exist yet.\");\n }\n if (isWidgetDisconnected) {\n var {\n widgetName: _widgetName\n } = this.props;\n return \"\".concat(_widgetName, \" is unavailable.\");\n }\n return undefined;\n }\n handleSessionClosed() {\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(...arguments);\n }\n handleSessionOpened() {\n var {\n onSessionOpen\n } = this.props;\n onSessionOpen(...arguments);\n }\n render() {\n var {\n children,\n className,\n componentPanel,\n isLoaded,\n isLoading,\n glContainer,\n glEventHub,\n isDisconnected,\n isClonable,\n isRenamable,\n showTabTooltip,\n renderTabTooltip,\n widgetType,\n widgetName,\n description,\n onClearAllFilters,\n onHide,\n onFocus,\n onBlur,\n onResize,\n onShow,\n onTabBlur,\n onTabFocus,\n onTabClicked\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, glContainer, widgetType, widgetName, description);\n var additionalActions = [{\n title: \"Copy \".concat(widgetType, \" Name\"),\n group: ContextActions.groups.medium,\n order: 20,\n action: this.handleCopyName\n }];\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: this.handleSessionOpened,\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 errorMessage: null,\n isClonable: true,\n isDisconnected: false,\n isLoading: false,\n isLoaded: true,\n isRenamable: true,\n showTabTooltip: true,\n widgetName: 'Widget',\n widgetType: 'Widget',\n renderTabTooltip: null,\n description: '',\n onFocus: () => undefined,\n onBlur: () => undefined,\n onHide: () => undefined,\n onClearAllFilters: () => undefined,\n onResize: () => undefined,\n onSessionClose: () => undefined,\n onSessionOpen: () => undefined,\n onShow: () => undefined,\n onTabBlur: () => undefined,\n onTabFocus: () => undefined,\n onTabClicked: () => undefined\n});\nexport default WidgetPanel;\n//# sourceMappingURL=WidgetPanel.js.map","import React, { useCallback, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { ButtonOld } from '@deephaven/components';\nimport { vsPass, vsWarning } from '@deephaven/icons';\nimport { TextUtils } from '@deephaven/utils';\nimport \"./ChartFilterOverlay.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { 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(ButtonOld, {\n onClick: handleAddClick,\n className: \"btn-primary\",\n children: \"Add Input Filters\"\n }), /*#__PURE__*/_jsx(ButtonOld, {\n onClick: handleOpenLinker,\n className: \"btn-primary\",\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}\nChartFilterOverlay.propTypes = {\n columnMap: PropTypes.instanceOf(Map).isRequired,\n inputFilterMap: PropTypes.instanceOf(Map).isRequired,\n linkedColumnMap: PropTypes.instanceOf(Map).isRequired,\n onAdd: PropTypes.func.isRequired,\n onOpenLinker: PropTypes.func.isRequired,\n waitingFilterMap: PropTypes.instanceOf(Map).isRequired,\n waitingInputMap: PropTypes.instanceOf(Map).isRequired\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 } from \"react/jsx-runtime\";\nimport { 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 if (_onMouseEnter) _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);\nChartColumnSelectorOverlay.defaultProps = {\n onMouseEnter: () => undefined,\n onMouseLeave: () => undefined\n};\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","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport { CSSTransition } from 'react-transition-group';\nimport debounce from 'lodash.debounce';\nimport { Chart, ChartUtils, isFigureChartModel } from '@deephaven/chart';\nimport { getOpenedPanelMapForDashboard, LayoutUtils } from '@deephaven/dashboard';\nimport { IrisGridUtils } from '@deephaven/iris-grid';\nimport { ThemeExport } 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, ChartEvent } 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 { jsx as _jsx } from \"react/jsx-runtime\";\nimport { 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) : false,\n isActive: linkedColumnMap.has(column.name)\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,\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 (!model) {\n return;\n }\n if (makeModel !== prevProps.makeModel) {\n this.initModel();\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 });\n var {\n makeModel\n } = this.props;\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 glEventHub.emit(ChartEvent.COLUMN_SELECTED, this, columnMap.get(columnName));\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 }\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 }\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(dh.plot.Figure.create(new ChartUtils(dh).makeFigureSettings(settings, source))).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 glEventHub.emit(InputFilterEvent.COLUMNS_CHANGED, this, 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 _updatedFilterMap;\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 < 1) {\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 = 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 name;\n if (isChartPanelTableMetadata(metadata)) {\n name = metadata.table;\n } else if (isChartPanelFigureMetadata(metadata)) {\n name = metadata.figure;\n } else {\n name = metadata.name;\n }\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 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 widgetName: name,\n widgetType: \"Chart\",\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(CSSTransition, {\n in: isWaitingForFilter && !isSelectingColumn && !isLoading,\n timeout: ThemeExport.transitionMs,\n classNames: \"fade\",\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(CSSTransition, {\n in: isSelectingColumn,\n timeout: ThemeExport.transitionMs,\n classNames: \"fade\",\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(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 shortid from 'shortid';\nimport Log from '@deephaven/log';\nimport \"./DropdownFilter.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { 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 _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: shortid(),\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 ? 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(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport debounce from 'lodash.debounce';\nimport deepEqual from '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 { Pending, PromiseUtils } from '@deephaven/utils';\nimport DropdownFilter from \"../controls/dropdown-filter/DropdownFilter.js\";\nimport { InputFilterEvent } from \"../events/index.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 { jsx as _jsx } from \"react/jsx-runtime\";\nvar log = Log.module('DropdownFilterPanel');\nvar DROPDOWN_FILTER_DEBOUNCE = 250;\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 _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 _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 _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 _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 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, _timestamp;\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 = 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 glEventHub.emit(InputFilterEvent.COLUMN_SELECTED, this, DropdownFilterPanel.SOURCE_COLUMN);\n }\n handleClearAllFilters() {\n var _this$dropdownFilterR, _this$dropdownFilterR2;\n (_this$dropdownFilterR = this.dropdownFilterRef) === null || _this$dropdownFilterR === void 0 ? void 0 : (_this$dropdownFilterR2 = _this$dropdownFilterR.current) === null || _this$dropdownFilterR2 === void 0 ? void 0 : _this$dropdownFilterR2.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$dropdownFilterR3, _this$dropdownFilterR4;\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$dropdownFilterR3 = this.dropdownFilterRef) === null || _this$dropdownFilterR3 === void 0 ? void 0 : (_this$dropdownFilterR4 = _this$dropdownFilterR3.current) === null || _this$dropdownFilterR4 === void 0 ? void 0 : _this$dropdownFilterR4.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 glEventHub.emit(InputFilterEvent.FILTERS_CHANGED, this, {\n name,\n type,\n value: value != null ? value : '=null',\n timestamp,\n excludePanelIds\n });\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 }\n handleSourceMouseLeave() {\n var {\n columnSelectionValidator\n } = this.props;\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, undefined);\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) : [];\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 widgetName: \"Dropdown Filter\",\n widgetType: \"DropdownFilter\",\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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 shortid from 'shortid';\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, RadioItem, Select } from '@deephaven/components';\nimport \"./FilterSetManager.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { 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 ? 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 = shortid();\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(event) {\n this.setState({\n restoreFullState: event.target.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(_ref10 => {\n var {\n id\n } = _ref10;\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(_ref11 => {\n var {\n id\n } = _ref11;\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 ? void 0 : _this$dropdownRef$cur.focus();\n }\n focusRenameInput() {\n var _this$renameInputRef$;\n (_this$renameInputRef$ = this.renameInputRef.current) === null || _this$renameInputRef$ === void 0 ? 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 onChange: this.handleRestoreFullStateChange,\n value: \"\".concat(restoreFullState),\n children: [/*#__PURE__*/_jsx(RadioItem, {\n value: \"false\",\n children: \"Restore only filters\"\n }), /*#__PURE__*/_jsx(RadioItem, {\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(_ref12 => {\n var {\n id,\n title\n } = _ref12;\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(_ref13 => {\n var {\n id,\n title\n } = _ref13;\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","import React from 'react';\nimport { GLPropTypes } from '@deephaven/dashboard';\nimport PropTypes from 'prop-types';\nimport WidgetPanelTooltip from \"./WidgetPanelTooltip.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { 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 widgetName,\n glContainer,\n description\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 /*#__PURE__*/_jsxs(WidgetPanelTooltip, {\n widgetType: \"Table\",\n widgetName: widgetName,\n glContainer: glContainer,\n description: description,\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}\nIrisGridPanelTooltip.propTypes = {\n glContainer: GLPropTypes.Container.isRequired,\n widgetName: PropTypes.string.isRequired,\n description: PropTypes.string\n};\nIrisGridPanelTooltip.defaultProps = {\n description: null\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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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, IrisGridUtils, isIrisGridTableModelTemplate, IrisGridTableModel } from '@deephaven/iris-grid';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { getSettings, getUser, getWorkspace } from '@deephaven/redux';\nimport { assertNotNull, PromiseUtils } from '@deephaven/utils';\nimport { ContextMenuRoot } from '@deephaven/components';\nimport { InputFilterEvent, 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 { jsx as _jsx } from \"react/jsx-runtime\";\nvar log = Log.module('IrisGridPanel');\nvar DEBOUNCE_PANEL_STATE_UPDATE = 500;\nvar PLUGIN_COMPONENTS = {\n IrisGrid,\n IrisGridTableModel,\n ContextMenuRoot\n};\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.\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(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, \"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, user, workspace, pluginState) => {\n if (!model || !isIrisGridTableModelTemplate(model) || Plugin == null || model.table == null) {\n return null;\n }\n\n // The panel in the deprecated props makes an ugly dependency of the plugin on the panel\n // Since we didn't have TS when the old plugins would have been implemented,\n // just pass the deprecated props without type checking\n // so we can break the ugly dependency of plugin on panel\n var deprecatedProps = {\n panel: this,\n onFilter: this.handlePluginFilter,\n onFetchColumns: this.handlePluginFetchColumns,\n user,\n workspace,\n components: PLUGIN_COMPONENTS\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 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, \"getDehydratedIrisGridState\", memoize((model, sorts, advancedFilters, customColumnFormatMap, isFilterBarShown, quickFilters, customColumns, reverseType, rollupConfig, showSearchBar, searchValue, selectDistinctColumns, selectedSearchColumns, invertSearchColumns, userColumnWidths, userRowHeights, aggregationSettings, pendingDataMap, frozenColumns, conditionalFormats, columnHeaderGroups, partitionConfig) => {\n assertNotNull(this.irisGridUtils);\n return this.irisGridUtils.dehydrateIrisGridState(model, {\n advancedFilters,\n aggregationSettings,\n customColumnFormatMap,\n isFilterBarShown,\n metrics: {\n userColumnWidths,\n userRowHeights\n },\n quickFilters,\n customColumns,\n reverseType,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n sorts,\n invertSearchColumns,\n pendingDataMap,\n frozenColumns,\n conditionalFormats,\n columnHeaderGroups,\n partitionConfig\n });\n }));\n _defineProperty(this, \"getDehydratedGridState\", memoize((model, movedColumns, movedRows, isStuckToBottom, isStuckToRight) => IrisGridUtils.dehydrateGridState(model, {\n isStuckToBottom,\n isStuckToRight,\n movedColumns,\n movedRows\n })));\n _defineProperty(this, \"getCachedPanelState\", memoize((irisGridPanelState, irisGridState, gridState, pluginState) => ({\n irisGridPanelState,\n irisGridState,\n gridState,\n pluginState\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 var {\n advancedFilters,\n aggregationSettings,\n customColumnFormatMap,\n isFilterBarShown,\n quickFilters,\n customColumns,\n reverseType,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n sorts,\n invertSearchColumns,\n metrics,\n pendingDataMap,\n frozenColumns,\n conditionalFormats,\n columnHeaderGroups,\n partitionConfig\n } = irisGridState;\n assertNotNull(model);\n assertNotNull(metrics);\n var {\n userColumnWidths,\n userRowHeights\n } = metrics;\n assertNotNull(gridState);\n var {\n isStuckToBottom,\n isStuckToRight,\n movedColumns,\n movedRows\n } = gridState;\n var panelState = this.getCachedPanelState(this.getDehydratedIrisGridPanelState(model, isSelectingPartition, partitions, advancedSettings), this.getDehydratedIrisGridState(model, sorts, advancedFilters, customColumnFormatMap, isFilterBarShown, quickFilters, customColumns, reverseType, rollupConfig, showSearchBar, searchValue, selectDistinctColumns, selectedSearchColumns, invertSearchColumns, userColumnWidths, userRowHeights, aggregationSettings, pendingDataMap, frozenColumns, conditionalFormats, columnHeaderGroups, partitionConfig), this.getDehydratedGridState(model, movedColumns, movedRows, isStuckToBottom, isStuckToRight), 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 ? 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 isFilterBarShown: false,\n quickFilters: new Map(),\n sorts: [],\n userColumnWidths: new Map(),\n userRowHeights: new Map(),\n reverseType: TableUtils.REVERSE_TYPE.NONE,\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 });\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: _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 ? 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 }\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 ? 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 glEventHub.emit(InputFilterEvent.TABLE_CHANGED, this, 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 } = 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: {\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 glEventHub.emit(IrisGridEvent.COLUMN_SELECTED, this, column);\n }\n handleDataSelected(row, dataMap) {\n var {\n glEventHub\n } = this.props;\n glEventHub.emit(IrisGridEvent.DATA_SELECTED, this, 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: _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 glEventHub.emit(InputFilterEvent.TABLE_CHANGED, this, 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 glEventHub.emit(InputFilterEvent.COLUMNS_CHANGED, this, 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 = Math.max(rect.left, Math.min(visibleIndex > right ? rect.right : rect.left + columnX + columnWidth * 0.5, 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 }\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: _gridState,\n irisGridState: _irisGridState2,\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 isFilterBarShown,\n quickFilters,\n reverseType,\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 conditionalFormats,\n columnHeaderGroups,\n partitionConfig\n } = this.irisGridUtils.hydrateIrisGridState(model, _objectSpread(_objectSpread({}, _irisGridState2), irisGridStateOverrides));\n var {\n isStuckToBottom,\n isStuckToRight,\n movedColumns,\n movedRows\n } = IrisGridUtils.hydrateGridState(model, _objectSpread(_objectSpread({}, _gridState), gridStateOverrides), _irisGridState2.customColumns);\n this.setState({\n advancedFilters,\n advancedSettings,\n conditionalFormats,\n customColumns,\n customColumnFormatMap,\n isFilterBarShown,\n isSelectingPartition,\n movedColumns,\n movedRows,\n partitions,\n quickFilters,\n reverseType,\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$curren, _this$irisGrid$curren2;\n var grid = (_this$irisGrid$curren = (_this$irisGrid$curren2 = this.irisGrid.current) === null || _this$irisGrid$curren2 === void 0 ? void 0 : _this$irisGrid$curren2.grid) !== null && _this$irisGrid$curren !== void 0 ? _this$irisGrid$curren : 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 panelState,\n user,\n workspace,\n settings,\n theme\n } = this.props;\n var {\n advancedFilters,\n aggregationSettings,\n advancedSettings,\n conditionalFormats,\n customColumns,\n customColumnFormatMap,\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 reverseType,\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 name = getTableNameFromMetadata(metadata);\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, user, workspace, pluginState);\n var {\n permissions\n } = user;\n var {\n canCopy,\n canDownloadCsv\n } = permissions;\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 widgetName: name,\n widgetType: \"Table\",\n description: description,\n componentPanel: this,\n renderTabTooltip: () => /*#__PURE__*/_jsx(IrisGridPanelTooltip, {\n model: model,\n widgetName: name,\n glContainer: glContainer,\n description: description\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 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 movedColumns: movedColumns,\n movedRows: movedRows,\n partitions: partitions,\n partitionConfig: partitionConfig,\n quickFilters: quickFilters,\n reverseType: reverseType,\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 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 } = _ref6;\n return {\n inputFilters: getInputFiltersForDashboard(state, localDashboardId),\n links: getLinksForDashboard(state, localDashboardId),\n columnSelectionValidator: getColumnSelectionValidatorForDashboard(state, localDashboardId),\n user: getUser(state),\n workspace: getWorkspace(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(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 } from \"react/jsx-runtime\";\nimport { 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 _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(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport debounce from 'lodash.debounce';\nimport Panel from \"./Panel.js\";\nimport InputFilter from \"../controls/input-filter/InputFilter.js\";\nimport { InputFilterEvent } from \"../events/index.js\";\nimport { getColumnsForDashboard } from \"../redux/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar INPUT_FILTER_DEBOUNCE = 250;\nclass InputFilterPanel extends Component {\n // Have to explicitly specify displayName\n // otherwise it gets minified and breaks LayoutUtils.getComponentName\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\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\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 ? void 0 : _this$inputFilterRef$.clearFilter();\n }\n sendUpdate(name, type, value, timestamp) {\n var {\n glEventHub\n } = this.props;\n glEventHub.emit(InputFilterEvent.FILTERS_CHANGED, this, {\n name,\n type,\n value,\n timestamp\n });\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 ? 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_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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 \"./Panel.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: _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(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsEdit } from '@deephaven/icons';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { 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(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 } from \"react/jsx-runtime\";\nimport { 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(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { PureComponent } from 'react';\nimport Markdown from 'react-markdown';\nimport { Code, Editor } from '@deephaven/console';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar renderMarkdown = props => {\n var {\n children,\n className\n } = props;\n var language = className !== undefined && className !== null && className !== void 0 && className.startsWith('language-') ? className.substring(9) : 'plaintext';\n return /*#__PURE__*/_jsx(\"pre\", {\n children: /*#__PURE__*/_jsx(\"code\", {\n children: /*#__PURE__*/_jsx(Code, {\n language: language,\n children: React.Children.map(children, child => typeof child === 'string' ? child.trim() : child)\n })\n })\n });\n};\nexport default class MarkdownEditor extends PureComponent {\n constructor(props) {\n super(props);\n _defineProperty(this, \"container\", void 0);\n this.container = null;\n }\n render() {\n var {\n isEditing,\n content,\n onEditorInitialized\n } = this.props;\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"markdown-editor-container\",\n ref: container => {\n this.container = container;\n },\n children: isEditing ? /*#__PURE__*/_jsx(Editor, {\n settings: {\n language: 'markdown',\n value: content,\n lineNumbers: 'off'\n },\n onEditorInitialized: onEditorInitialized\n }) : /*#__PURE__*/_jsx(Markdown, {\n components: {\n code: renderMarkdown\n },\n children: content\n })\n });\n }\n}\n_defineProperty(MarkdownEditor, \"defaultProps\", {\n isEditing: false,\n content: ''\n});\n//# sourceMappingURL=MarkdownEditor.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } 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 Panel from \"./Panel.js\";\nimport MarkdownContainer from \"../controls/markdown/MarkdownContainer.js\";\nimport MarkdownStartPage from \"../controls/markdown/MarkdownStartPage.js\";\nimport MarkdownEditor from \"../controls/markdown/MarkdownEditor.js\";\nimport \"./MarkdownPanel.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\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(closedPanels => closedPanels.filter(panel => panel.component === 'MarkdownPanel').reverse()));\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 ({\n content\n } = panelState);\n }\n this.state = {\n isStartPageShown: content == null,\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) {\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(MarkdownEditor, {\n ref: markdownEditor => {\n this.markdownEditor = markdownEditor;\n },\n isEditing: isEditing,\n content: content !== null && content !== void 0 ? content : undefined,\n onEditorInitialized: this.handleEditorInitialized\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 } from \"react/jsx-runtime\";\nimport { 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 ? 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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint-disable react/jsx-props-no-spreading */\n/* eslint-disable react/no-unused-state */\nimport React, { Component } from 'react';\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 _defineProperty(this, \"irisGridRef\", void 0);\n this.irisGridRef = /*#__PURE__*/React.createRef();\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 // Dehydrated panel state that can load this panel\n };\n }\n\n handleReload() {\n var _this$irisGridRef$cur;\n (_this$irisGridRef$cur = this.irisGridRef.current) === null || _this$irisGridRef$cur === void 0 ? void 0 : _this$irisGridRef$cur.initModel();\n this.setState({\n shouldFocusGrid: true\n });\n }\n handleGridStateChange() {\n var _this$irisGridRef$cur2, _this$irisGridRef$cur3, _this$irisGridRef$cur4;\n var {\n shouldFocusGrid\n } = this.state;\n if (shouldFocusGrid && (_this$irisGridRef$cur2 = this.irisGridRef.current) !== null && _this$irisGridRef$cur2 !== void 0 && (_this$irisGridRef$cur3 = _this$irisGridRef$cur2.irisGrid) !== null && _this$irisGridRef$cur3 !== void 0 && (_this$irisGridRef$cur4 = _this$irisGridRef$cur3.current) !== null && _this$irisGridRef$cur4 !== void 0 && _this$irisGridRef$cur4.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 return /*#__PURE__*/_jsx(ConnectedIrisGridPanel, _objectSpread(_objectSpread({\n ref: this.irisGridRef,\n onStateChange: this.handleGridStateChange,\n onPanelStateUpdate: this.handlePanelStateUpdate\n }, this.props), {}, {\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(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 ? 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(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nimport { forwardRef, useMemo } from 'react';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { useConnection } from '@deephaven/jsapi-components';\nimport { ChartModelFactory, useChartTheme } from '@deephaven/chart';\nimport { IrisGridUtils } from '@deephaven/iris-grid';\nimport { getTimeZone, store } from '@deephaven/redux';\nimport { isChartPanelDehydratedProps, isChartPanelFigureMetadata, 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, _x5, _x6) {\n return _createChartModel.apply(this, arguments);\n}\nfunction _createChartModel() {\n _createChartModel = _asyncToGenerator(function* (dh, chartTheme, connection, metadata, fetch, panelState) {\n var settings;\n var tableName;\n var figureName;\n var tableSettings;\n if (isChartPanelTableMetadata(metadata)) {\n settings = metadata.settings;\n tableName = metadata.table;\n figureName = undefined;\n tableSettings = metadata.tableSettings;\n } else {\n settings = {};\n tableName = '';\n figureName = isChartPanelFigureMetadata(metadata) ? metadata.figure : metadata.name;\n 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.figure != null) {\n figureName = panelState.figure;\n }\n if (panelState.settings != null) {\n settings = _objectSpread(_objectSpread({}, settings), panelState.settings);\n }\n }\n if (figureName == null && tableName == null) {\n var figure = yield fetch();\n return ChartModelFactory.makeModel(dh, settings, figure, chartTheme);\n }\n if (figureName != null) {\n var _figure;\n if (metadata.type === dh.VariableType.FIGURE) {\n var _definition = {\n name: figureName,\n type: dh.VariableType.FIGURE\n };\n _figure = yield connection.getObject(_definition);\n } else {\n _figure = yield fetch();\n }\n return ChartModelFactory.makeModel(dh, settings, _figure, chartTheme);\n }\n var definition = {\n name: tableName,\n type: dh.VariableType.TABLE\n };\n var table = yield connection.getObject(definition);\n new IrisGridUtils(dh).applyTableSettings(table, tableSettings, getTimeZone(store.getState()));\n return ChartModelFactory.makeModelFromSettings(dh,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n settings, table, chartTheme);\n });\n return _createChartModel.apply(this, arguments);\n}\nexport var ChartPanelPlugin = /*#__PURE__*/forwardRef((props, ref) => {\n var dh = useApi();\n var chartTheme = useChartTheme();\n var connection = useConnection();\n var panelState = isChartPanelDehydratedProps(props) ? props.panelState : undefined;\n var {\n fetch,\n metadata,\n localDashboardId\n } = props;\n var hydratedProps = useMemo(() => ({\n metadata: metadata,\n localDashboardId,\n makeModel: () => {\n if (metadata == null) {\n throw new Error('Metadata is required for chart panel');\n }\n return createChartModel(dh, chartTheme, connection, metadata, fetch, panelState);\n }\n }), [dh, connection, fetch, panelState, metadata, localDashboardId, chartTheme]);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return /*#__PURE__*/_jsx(ConnectedChartPanel, _objectSpread(_objectSpread({\n ref: ref\n }, props), hydratedProps));\n});\nChartPanelPlugin.displayName = 'ChartPanelPlugin';\nexport default ChartPanelPlugin;\n//# sourceMappingURL=ChartPanelPlugin.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nimport { useEffect, useState } from 'react';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { Chart, ChartModelFactory, useChartTheme } from '@deephaven/chart';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function ChartWidgetPlugin(props) {\n var dh = useApi();\n var chartTheme = useChartTheme();\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, chartTheme);\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, chartTheme]);\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","import { useCallback } from 'react';\nimport { ChartModelFactory, ChartUtils, useChartTheme } from '@deephaven/chart';\nimport { assertIsDashboardPluginProps, LayoutUtils, useListener } from '@deephaven/dashboard';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport shortid from 'shortid';\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 dh = useApi();\n var chartTheme = useChartTheme();\n var handleCreateChart = useCallback(_ref => {\n var {\n metadata,\n panelId = shortid.generate(),\n table\n } = _ref;\n var {\n settings\n } = metadata;\n var makeModel = () => ChartModelFactory.makeModelFromSettings(dh, settings, table, chartTheme);\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 makeModel\n },\n title,\n id: panelId\n };\n var {\n root\n } = layout;\n LayoutUtils.openComponent({\n root,\n config\n });\n }, [chartTheme, dh, 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 shortid from 'shortid';\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\";\nvar log = Log.module('FilterPlugin');\nfunction flattenArray(accumulator, currentValue) {\n return accumulator.concat(currentValue);\n}\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()).reduce(flattenArray, []).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()).reduce(flattenArray, []).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 panel The component that's emitting the filter change\n * @param columns The columns in this panel\n */\n var handleColumnsChanged = useCallback((panel, columns) => {\n log.debug2('handleColumnsChanged', panel, columns);\n panelColumns.set(panel, [].concat(columns));\n sendUpdate();\n }, [panelColumns, sendUpdate]);\n\n /**\n * Handler for the FILTERS_CHANGED event.\n * @param {Component} panel The component that's emitting the filter change\n * @param {FilterChangeEvent|Array<FilterChangeEvent>} filters The input filters set by the panel\n */\n var handleFiltersChanged = useCallback((panel, filters) => {\n log.debug2('handleFiltersChanged', panel, filters);\n panelFilters.set(panel, [].concat(filters));\n sendUpdate();\n }, [panelFilters, sendUpdate]);\n var handleTableChanged = useCallback((panel, table) => {\n log.debug2('handleTableChanged', panel, table);\n panelTables.set(LayoutUtils.getIdFromPanel(panel), table);\n sendUpdate();\n }, [panelTables, sendUpdate]);\n var handlePanelUnmount = useCallback(panel => {\n log.debug2('handlePanelUnmount', panel);\n panelColumns.delete(panel);\n panelFilters.delete(panel);\n panelTables.delete(LayoutUtils.getIdFromPanel(panel));\n sendUpdate();\n }, [panelColumns, panelFilters, panelTables, sendUpdate]);\n var handleOpenDropdown = useCallback(_ref => {\n var {\n title = 'DropdownFilter',\n metadata = {},\n panelState = null,\n id = shortid.generate(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = null\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 = shortid.generate(),\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 = shortid.generate(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = null\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 useListener(layout.eventHub, InputFilterEvent.COLUMNS_CHANGED, handleColumnsChanged);\n useListener(layout.eventHub, InputFilterEvent.FILTERS_CHANGED, handleFiltersChanged);\n useListener(layout.eventHub, InputFilterEvent.TABLE_CHANGED, 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(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nimport { useMemo } from 'react';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { IrisGridModelFactory } from '@deephaven/iris-grid';\nimport { useLoadTablePlugin } from \"./useLoadTablePlugin.js\";\nexport function useHydrateGrid(fetch, id) {\n var dh = 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 fetch();\n return IrisGridModelFactory.makeModel(dh, table);\n });\n function makeModel() {\n return _makeModel.apply(this, arguments);\n }\n return makeModel;\n }()\n }), [dh, loadPlugin, fetch, id]);\n return hydratedProps;\n}\nexport default useHydrateGrid;\n//# sourceMappingURL=useHydrateGrid.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 } = props;\n var hydratedProps = useHydrateGrid(fetch, localDashboardId);\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(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nimport { useEffect, useState } from 'react';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { IrisGrid, IrisGridModelFactory } from '@deephaven/iris-grid';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function GridWidgetPlugin(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 table = yield fetch();\n var newModel = yield IrisGridModelFactory.makeModel(dh, table);\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(IrisGrid, {\n model: model\n }) : null;\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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport shortid from 'shortid';\nimport { LayoutUtils } from '@deephaven/dashboard';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { ChartPanel, IrisGridPanel, DropdownFilterPanel } from \"../panels/index.js\"; // [x,y] screen coordinates used by the Linker\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 var _column$description;\n // TODO: core/#3358 Use preview/original type property instead of checking description\n return column.description === undefined || !((_column$description = column.description) !== null && _column$description !== void 0 && _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 getLinkType(start, end, isolatedLinkerPanelId) {\n var _LinkerUtils$ALLOWED_;\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 === null || start === void 0 ? void 0 : start.panelId) == null || (end === null || end === void 0 ? void 0 : 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 'invalid';\n }\n if (start.panelComponent == null || end.panelComponent == null) {\n log.error('PanelComponent should not be null', start, end);\n return 'invalid';\n }\n var isCompatibleComponent = (_LinkerUtils$ALLOWED_ = LinkerUtils.ALLOWED_LINKS.get(start.panelComponent)) === null || _LinkerUtils$ALLOWED_ === void 0 ? void 0 : _LinkerUtils$ALLOWED_.includes(end.panelComponent);\n if (isCompatibleComponent === undefined || !isCompatibleComponent) {\n log.debug2('Incompatible panel components', start, end);\n return 'invalid';\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 'invalid';\n }\n\n // If all checks pass, link type is determined by the target panel component\n switch (end.panelComponent) {\n case LayoutUtils.getComponentName(ChartPanel):\n return 'chartLink';\n case LayoutUtils.getComponentName(IrisGridPanel):\n return 'tableLink';\n case LayoutUtils.getComponentName(DropdownFilterPanel):\n return 'filterSource';\n default:\n }\n log.debug2('Incompatible target panel component', end.panelComponent);\n return 'invalid';\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: shortid.generate(),\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: shortid.generate(),\n end: _objectSpread(_objectSpread({}, link.end), {}, {\n panelId: cloneId\n })\n }));\n }\n });\n return clonedLinks;\n }\n}\n_defineProperty(LinkerUtils, \"ALLOWED_LINKS\", new Map([[LayoutUtils.getComponentName(IrisGridPanel), [LayoutUtils.getComponentName(IrisGridPanel), LayoutUtils.getComponentName(ChartPanel), LayoutUtils.getComponentName(DropdownFilterPanel)]]]));\nexport default LinkerUtils;\n//# sourceMappingURL=LinkerUtils.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { 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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 clamp from 'lodash.clamp';\nimport { isLinkableFromPanel } from \"./LinkerUtils.js\";\nimport LinkerLink from \"./LinkerLink.js\";\nimport \"./LinkerOverlayContent.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { 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 } = this.props;\n var {\n panelId,\n columnName\n } = linkPoint;\n var panel = panelManager.getOpenedPanelById(panelId);\n if (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,\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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport shortid from 'shortid';\nimport memoize from 'memoize-one';\nimport { CSSTransition } from 'react-transition-group';\nimport { ThemeExport } 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 { 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, InputFilterEvent } from \"../events/index.js\";\nimport LinkerOverlayContent from \"./LinkerOverlayContent.js\";\nimport LinkerUtils, { isLinkablePanel, isLinkableColumn } from \"./LinkerUtils.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, \"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 ? void 0 : (_link$start = link.start) === null || _link$start === void 0 ? void 0 : _link$start.panelId) === isolateForPanelId || (link === null || link === void 0 ? 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.handleFilterColumnSelect = this.handleFilterColumnSelect.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.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 eventHub.on(InputFilterEvent.COLUMN_SELECTED, this.handleFilterColumnSelect);\n eventHub.on(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);\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(InputFilterEvent.COLUMN_SELECTED, this.handleFilterColumnSelect);\n eventHub.off(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);\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 }\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 this.columnSelected(panel, column, true);\n }\n handleFilterColumnSelect(panel, column) {\n log.debug('handleFilterColumnSelect', this.isOverlayShown());\n var {\n links,\n localDashboardId,\n setActiveTool,\n setDashboardIsolatedLinkerPanelId\n } = this.props;\n var panelId = LayoutUtils.getIdFromPanel(panel);\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) === panelId || ((_link$end2 = link.end) === null || _link$end2 === void 0 ? void 0 : _link$end2.panelId) === panelId;\n });\n if (!this.isOverlayShown() && panelId != null) {\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, panelId);\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(panel, column, true, panelId);\n }\n return;\n }\n\n // Filter source clicked with linker active\n this.columnSelected(panel, column, true);\n }\n handleColumnsChanged(panel, columns) {\n log.debug('handleColumnsChanged', panel, columns);\n var {\n links\n } = this.props;\n var panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n log.error('Invalid panelId', panel);\n return;\n }\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 === panelId && LinkerUtils.findColumn(columns, start) == null || end != null && end.panelId === panelId && 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 this.columnSelected(panel, column);\n }\n\n /**\n * Track a column selection and build the link from it.\n * @param panel The panel component that is the source for the column selection\n * @param column The column that was selected\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(panel, column) {\n var isAlwaysEndPoint = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var overrideIsolatedLinkerPanelId = arguments.length > 3 ? arguments[3] : 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 panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n return;\n }\n var panelComponent = LayoutUtils.getComponentNameFromPanel(panel);\n var {\n name: columnName,\n type: columnType\n } = column;\n if (linkInProgress == null || linkInProgress.start == null) {\n var newLink = {\n id: shortid.generate(),\n start: {\n panelId,\n panelComponent,\n columnName,\n columnType\n },\n // Link starts with type Invalid as linking a source to itself is not allowed\n type: 'invalid',\n isReversed: isAlwaysEndPoint\n };\n log.debug('starting link', newLink);\n this.setState({\n linkInProgress: newLink\n });\n } else {\n var {\n links\n } = this.props;\n var {\n start,\n id,\n isReversed\n } = linkInProgress;\n var end = {\n panelId,\n panelComponent,\n columnName,\n columnType\n };\n var type = LinkerUtils.getLinkType(isReversed !== undefined && isReversed ? end : start, isReversed !== undefined && isReversed ? start : end, overrideIsolatedLinkerPanelId !== null && overrideIsolatedLinkerPanelId !== void 0 ? overrideIsolatedLinkerPanelId : isolatedLinkerPanelId);\n switch (type) {\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 !== undefined && isReversed ? end : start,\n end: isReversed !== undefined && isReversed ? start : end,\n id,\n type,\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 {\n end\n } = link;\n var {\n panelId,\n columnName,\n columnType\n } = end;\n var endPanel = panelManager.getOpenedPanelById(panelId);\n if (!endPanel) {\n log.debug('endPanel no longer exists, 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 log.debug('Set filter data for panel:', panelId, filterMap);\n var {\n panelManager\n } = this.props;\n var panel = panelManager.getOpenedPanelById(panelId);\n if (!panel) {\n log.debug('panel no longer exists, 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 ? void 0 : (_link$start3 = link.start) === null || _link$start3 === void 0 ? void 0 : _link$start3.panelId) === isolatedLinkerPanelId || (link === null || link === void 0 ? 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 handleUpdateValues(panel, dataMap) {\n var panelId = LayoutUtils.getIdFromPanel(panel);\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 === panelId && end != null) {\n var {\n panelId: endPanelId,\n columnName,\n columnType\n } = end;\n // Map of column name to column type and filter value\n var filterMap = panelFilterMap.has(endPanelId) ? panelFilterMap.get(endPanelId) : new Map();\n var filterList = filterMap.has(columnName) === true ? filterMap.get(columnName).filterList : [];\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 var filter = {\n operator,\n text,\n value,\n startColumnIndex\n };\n filterList.push(filter);\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(panel, tableColumn) {\n var {\n linkInProgress\n } = this.state;\n var {\n isolatedLinkerPanelId\n } = this.props;\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();\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,\n start\n } = linkInProgress;\n var panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n return false;\n }\n var end = {\n panelId,\n panelComponent: LayoutUtils.getComponentNameFromPanel(panel),\n columnName: tableColumn.name,\n columnType: tableColumn.type\n };\n var type = isReversed !== undefined && isReversed ? LinkerUtils.getLinkType(end, start, isolatedLinkerPanelId) : LinkerUtils.getLinkType(start, end, isolatedLinkerPanelId);\n this.updateLinkInProgressType(type);\n return type !== 'invalid';\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(CSSTransition, {\n in: isLinkOverlayShown,\n timeout: ThemeExport.transitionMs,\n classNames: \"fade\",\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 })\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","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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.');\nexport default MarkdownUtils;\n//# sourceMappingURL=MarkdownUtils.js.map","import { useCallback, useEffect } from 'react';\nimport shortid from 'shortid';\nimport { assertIsDashboardPluginProps, dehydrate, hydrate, 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 dehydrateMarkdown = useCallback(config => {\n var {\n title,\n componentState,\n props: configProps\n } = config;\n var {\n panelState = null\n } = configProps;\n if (componentState != null) {\n ({\n panelState = null\n } = componentState);\n }\n if (title == null || panelState == null || panelState.content == null || panelState.content.length === 0 || panelState.content === MarkdownUtils.DEFAULT_CONTENT) {\n // We don't want to save it if there's no content\n return null;\n }\n return dehydrate(config);\n }, []);\n var handleOpen = useCallback(function () {\n var {\n title = '',\n metadata = {},\n id: panelId = shortid.generate(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = null\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var openedMarkdowns = panelManager.getOpenedPanelConfigsOfType(MarkdownPanel.COMPONENT);\n var closedMarkdowns = panelManager.getClosedPanelConfigsOfType(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 = closedMarkdowns.length > 0 ? null : MarkdownUtils.DEFAULT_CONTENT;\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, hydrate, dehydrateMarkdown)];\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n }, [dehydrateMarkdown, 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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 } = props;\n var hydratedProps = useHydrateGrid(fetch, localDashboardId);\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","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nimport { useCallback, useEffect, useState } from 'react';\nimport IrisGrid, { IrisGridModelFactory } from '@deephaven/iris-grid';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { LoadingOverlay } from '@deephaven/components';\nimport { PandasReloadButton } from \"./panels/PandasReloadButton.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nexport function PandasWidgetPlugin(props) {\n var dh = useApi();\n var [model, setModel] = useState();\n var [isLoading, setIsLoading] = useState(true);\n var [isLoaded, setIsLoaded] = useState(false);\n var {\n fetch\n } = props;\n var makeModel = useCallback( /*#__PURE__*/_asyncToGenerator(function* () {\n var table = yield fetch();\n return IrisGridModelFactory.makeModel(dh, table);\n }), [dh, fetch]);\n var handleReload = useCallback( /*#__PURE__*/_asyncToGenerator(function* () {\n setIsLoading(true);\n var newModel = yield makeModel();\n setModel(newModel);\n setIsLoading(false);\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 var newModel = yield makeModel();\n if (!cancelled) {\n setModel(newModel);\n setIsLoaded(true);\n setIsLoading(false);\n }\n });\n return _init.apply(this, arguments);\n }\n init();\n setIsLoading(true);\n return () => {\n cancelled = true;\n };\n }, [makeModel]);\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(LoadingOverlay, {\n isLoaded: isLoaded,\n isLoading: isLoading\n }), model && /*#__PURE__*/_jsx(IrisGrid, {\n model: model,\n children: /*#__PURE__*/_jsx(PandasReloadButton, {\n onClick: handleReload\n })\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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { useMemo, useCallback, useEffect, forwardRef } from 'react';\nimport shortid from 'shortid';\nimport { assertIsDashboardPluginProps, PanelEvent, LayoutUtils, useListener, canHaveRef } from '@deephaven/dashboard';\nimport { isWidgetPlugin, usePlugins } from '@deephaven/plugin';\nimport Log from '@deephaven/log';\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var C = plugin.component;\n var {\n metadata\n } = props;\n var hasRef = canHaveRef(C);\n return /*#__PURE__*/_jsx(WidgetPanel, _objectSpread(_objectSpread({\n widgetName: metadata === null || metadata === void 0 ? void 0 : metadata.name,\n widgetType: plugin.title\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$title;\n var {\n dragEvent,\n fetch,\n panelId = shortid.generate(),\n widget\n } = _ref;\n var {\n id: widgetId,\n type\n } = widget;\n var name = (_widget$title = widget.title) !== null && _widget$title !== void 0 ? _widget$title : widget.name;\n var plugin = supportedTypes.get(type);\n if (plugin == null) {\n return;\n }\n var metadata = {\n id: widgetId,\n name,\n type\n };\n var panelProps = {\n localDashboardId: id,\n metadata,\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 useListener(layout.eventHub, PanelEvent.OPEN, 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"],"names":["_defineProperty","obj","key","value","_toPropertyKey","arg","_toPrimitive","input","hint","prim","res","ChartEvent","ChartEvent$1","IrisGridEvent","IrisGridEvent$1","PandasEvent","PandasEvent$1","WidgetPanelTooltip","props","widgetType","widgetName","glContainer","description","children","panelTitle","LayoutUtils","_jsxs","_jsx","CopyButton","_Fragment","GLPropTypes","PropTypes","WidgetPanel","PureComponent","memoize","showTabTooltip","copyToClipboard","errorMessage","isClientDisconnected","isPanelDisconnected","isWidgetDisconnected","isWaitingForReconnect","_widgetName","onSessionClose","onSessionOpen","className","componentPanel","isLoaded","isLoading","glEventHub","isDisconnected","isClonable","isRenamable","renderTabTooltip","onClearAllFilters","onHide","onFocus","onBlur","onResize","onShow","onTabBlur","onTabFocus","onTabClicked","isPanelInactive","doRenderTabTooltip","additionalActions","ContextActions","Panel","classNames","WidgetPanel$1","ChartFilterOverlay","_ref","columnMap","inputFilterMap","linkedColumnMap","onAdd","onOpenLinker","waitingFilterMap","waitingInputMap","inputMessage","useMemo","waitingColumns","needsInputFilterValue","columnName","needsLinkValue","columnsText","TextUtils","item","columns","handleAddClick","useCallback","event","handleOpenLinker","isWaitingFilters","isWaitingInput","column","isColumnWaiting","icon","vsWarning","vsPass","FontAwesomeIcon","ButtonOld","ChartColumnSelectorOverlay","onColumnSelected","_onMouseEnter","onMouseLeave","SocketedButton","isChartPanelTableMetadata","metadata","isChartPanelFigureMetadata","isGLChartPanelState","panelState","settings","tableSettings","isChartPanelDehydratedProps","ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread","target","i","source","log","Log","UPDATE_MODEL_DEBOUNCE","hasInputFilter","panel","hasPanelState","ChartPanel","Component","isFilterRequired","filterMap","filter","name","inputFilters","inputFilter","type","links","panelId","link","assertNotNull","columnSelectionValidator","debounce","React","Pending","filterValueMap","prevProps","prevState","makeModel","model","isLinked","isFigureChartModel","resolved","table","dh","isActive","isHidden","localDashboardId","setActiveTool","setDashboardIsolatedLinkerPanelId","ToolType","prevModel","error","PromiseUtils","ChartUtils","figure","sourcePanel","sourcePanelState","IrisGridUtils","update","_ref2","prevSettings","_ref3","InputFilterEvent","_element$getBoundingC","element","rect","x","y","filterMapParam","state","_updatedFilterMap","updatedFilterMap","_ref4","columnType","filterList","_inputFilterMap$get","filterValue","inputFilterValue","prevInputFilters","deletedInputFilters","prevInputFilter","changedInputFilters","forceUpdate","needsUpdate","linkValue","_ref5","defaultTitle","filterTitle","_ref6","newState","isLinkerActive","Plotly","containerRef","isWaitingForFilter","isSelectingColumn","Chart","CSSTransition","ThemeExport","mapStateToProps","ownProps","sourcePanelId","panelTableMap","getTableMapForDashboard","openedPanelMap","getOpenedPanelMapForDashboard","activeTool","getActiveTool","isolatedLinkerPanelId","getIsolatedLinkerPanelIdForDashboard","getColumnSelectionValidatorForDashboard","getInputFiltersForDashboard","getLinksForDashboard","getSettings","ConnectedChartPanel","connect","setActiveToolAction","setDashboardIsolatedLinkerPanelIdAction","ChartPanel$1","UPDATE_DEBOUNCE","DropdownFilter","TableUtils","selectedColumn","selectedIndex","options","columnItem","index","values","val","memoizee","shortType","onChange","isValueShown","_column","_isValueShown","_value","shortid","eventTargetValue","allColumns","valueIndex","_this$dropdownRef$cur","oldValue","oldIsValueShown","_source$columnName","disableLinking","onSourceMouseEnter","onSourceMouseLeave","settingsError","disableCancel","id","columnSelectionDisabled","sourceButtonLabel","columnOptions","valueOptions","selectedOption","disableSave","isFlipped","sourceColumnId","filterColumnId","CardFlip","Select","Button","vsGear","DropdownFilter$1","DROPDOWN_FILTER_DEBOUNCE","dashboardLinks","getColumnsForDashboard","getApi","connector","DropdownFilterPanel","rawValues","formatter","_link$end","_panelTableMap$get","_table$columns$find","FormatterUtils","DateTimeColumnFormatter","_name","_type","timestamp","Formatter","sourceTable","valuesTable","prevSource","prevSourceTable","sourceSize","panelLinks","sendUpdate","_timestamp","prevTimestamp","wasFlipped","skipUpdate","isFlip","detail","_this$dropdownFilterR","_this$dropdownFilterR2","_this$dropdownFilterR3","_this$dropdownFilterR4","_this$getSource","excludePanelIds","sorts","filters","valuesColumn","columnFormats","deepEqual","_ref7","rows","row","settingsErrorMessage","panelErrorMessage","formattedValues","ConnectedDropdownFilterPanel","DropdownFilterPanel$1","NAME_INPUT_PLACEHOLDER","EMPTY_LIST_PLACEHOLDER","FilterSetManager","_document$querySelect","overlay","memoizeOne","filterSets","renameSet","modifiedFilterSets","selectedId","isEmptyList","onUpdateSets","editId","getFilterState","panels","nameInputValue","_nameInputValue$trim","trimmedName","title","_nameInputValue$trim2","restoreFullState","nameInputError","namedFilterSet","updatedModifiedFilterSets","prevFilterSets","newSelectedIndex","newSelectedId","selectedSetIndex","_ref8","_ref9","selectedSet","_ref10","onApply","filterSet","_ref11","_this$renameInputRef$","isNameInputScreen","isRenamingExistingSet","isEmptyEditList","isInitialScreen","isEditListScreen","captureSetIcon","vsCircleLargeFilled","vsDeviceCamera","dhNewCircleLargeFilled","updateSetIcon","vsArrowSmallUp","vsSave","vsCircleSlash","RadioGroup","RadioItem","_ref12","vsEdit","vsTrash","_ref13","dhRefresh","FilterSetManager$1","IrisGridPanelTooltip","_model$rowCount","_model$pendingRowCoun","_model$floatingBottom","_model$floatingTopRow","_model$columnCount","rowCount","formattedRowCount","columnCount","formattedcolumnCount","isLegacyIrisGridPanelMetadata","irisGridPanelMetadata","isIrisGridPanelMetadata","DEBOUNCE_PANEL_STATE_UPDATE","PLUGIN_COMPONENTS","IrisGrid","IrisGridTableModel","ContextMenuRoot","getTableNameFromMetadata","IrisGridPanel","pluginFetchColumns","columnSet","start","Plugin","user","workspace","pluginState","isIrisGridTableModelTemplate","deprecatedProps","isSelectingPartition","partitions","advancedSettings","advancedFilters","customColumnFormatMap","isFilterBarShown","quickFilters","customColumns","reverseType","rollupConfig","showSearchBar","searchValue","selectDistinctColumns","selectedSearchColumns","invertSearchColumns","userColumnWidths","userRowHeights","aggregationSettings","pendingDataMap","frozenColumns","conditionalFormats","columnHeaderGroups","partitionConfig","movedColumns","movedRows","isStuckToBottom","isStuckToRight","irisGridPanelState","irisGridState","gridState","onPanelStateUpdate","oldPanelState","metrics","_panelState","AdvancedSettings","modelParam","irisGridStateOverrides","modelQueue","_irisGridState","m","modelChange","_this$irisGridUtils$g","_this$irisGridUtils","pluginFilters","data","_this$pluginRef$curre","_this$pluginRef$curre2","_this$pluginRef$curre3","tableColumn","onStateChange","isModelReady","dataMap","loadPlugin","_pluginName","irisGrid","IrisGridModel","_gridWrapper$getBound","_allColumnXs$get","_allColumnWidths$get","gridWrapper","columnHeaderHeight","allColumnXs","allColumnWidths","right","columnHeaderMaxDepth","columnIndex","visibleIndex","columnX","columnWidth","indexedQuickFilters","indexedAdvancedFilters","overrides","gridStateOverrides","originalIrisGridStateOverrides","_gridState","_irisGridState2","savedQuickFilters","savedAdvancedFilters","_this$irisGrid$curren","_this$irisGrid$curren2","grid","_model$description","_panelState$pluginSta","getDownloadWorker","theme","childrenContent","permissions","canCopy","canDownloadCsv","DEFAULT_DASHBOARD_ID","getUser","getWorkspace","ConnectedIrisGridPanel","IrisGridPanel$1","InputFilter","propColumn","inputLength","titleLabel","InputFilter$1","INPUT_FILTER_DEBOUNCE","InputFilterPanel","_this$inputFilterRef$","_this$inputFilterRef$2","ConnectedInputFilterPanel","InputFilterPanel$1","hasSetPanelState","FilterSetManagerPanel","configs","config","dashboardOpenedPanelMap","componentName","_state","setDashboardFilterSets","prevAdvancedFilters","prevQuickFilters","inputFilterState","getFilterSetsForDashboard","ConnectedFilterSetManagerPanel","setDashboardFilterSetsAction","FilterSetManagerPanel$1","MarkdownContainer","isEditing","onDoubleClick","MarkdownStartPage","markdown","onDelete","closedMarkdowns","onOpen","onCreate","isDeleteModalShown","toBeDeleted","Modal","ModalHeader","ModalBody","ModalFooter","MarkdownStartPage$1","renderMarkdown","language","Code","child","MarkdownEditor","content","onEditorInitialized","container","Editor","Markdown","MarkdownPanel","closedPanels","clickPositionY","markdownEditorContainer","_this$editor$getModel","_this$editor$getModel2","contentTop","contentScrollTop","contentScrollHeight","totalLines","lineToFocus","dbClickPositionY","editor","PanelEvent","_this$editor","isStartPageShown","markdownEditor","getClosedPanelsForDashboard","ConnectedMarkdownPanel","MarkdownPanel$1","PandasReloadButton","onClick","buttonRef","useRef","handleClick","e","_buttonRef$current","PandasPanel","_this$irisGridRef$cur","_this$irisGridRef$cur2","_this$irisGridRef$cur3","_this$irisGridRef$cur4","shouldFocusGrid","PandasPanel$1","asyncGeneratorStep","gen","resolve","reject","_next","_throw","info","_asyncToGenerator","fn","self","args","err","MockFileStorageTable","items","search","path","expanded","isDirectory","sortedRanges","viewport","_this","_this$onUpdateCallbac","loadedViewportData","isReversed","callback","MockFileStorageTable$1","MockFileStorage","file","newName","_this2","_this3","FileUtils","_this4","allItems","FileNotFoundError","itemDetails","MockFileStorage$1","createChartModel","_x","_x2","_x3","_x4","_x5","_x6","_createChartModel","chartTheme","connection","fetch","tableName","figureName","ChartModelFactory","_figure","_definition","definition","getTimeZone","store","ChartPanelPlugin","forwardRef","ref","useApi","useChartTheme","useConnection","hydratedProps","ChartPanelPlugin$1","ChartWidgetPlugin","setModel","useState","useEffect","cancelled","init","_init","newModel","ChartPluginConfig","PluginType","vsGraph","ChartPluginConfig$1","ChartBuilderPlugin","assertIsDashboardPluginProps","layout","handleCreateChart","root","useListener","ChartBuilderPluginConfig","ChartBuilderPluginConfig$1","flattenArray","accumulator","currentValue","FilterPlugin","registerComponent","dispatch","useDispatch","panelColumns","panelFilters","panelTables","a","aName","bName","aType","bType","array","tableMap","updateDashboardData","handleColumnsChanged","handleFiltersChanged","handleTableChanged","handlePanelUnmount","handleOpenDropdown","focusElement","createNewStack","dragEvent","handleOpenInput","handleOpenFilterSetManager","cleanups","cleanup","FilterPluginConfig","FilterPluginConfig$1","useLoadTablePlugin","plugins","usePlugins","plugin","pluginModule","isTablePlugin","isLegacyTablePlugin","useHydrateGrid","_makeModel","IrisGridModelFactory","GridPanelPlugin","GridPanelPlugin$1","GridWidgetPlugin","GridPluginConfig","dhTable","GridPluginConfig$1","isLinkableFromPanel","p","isLinkablePanel","isLinkableColumn","_column$description","LinkerUtils","end","_LinkerUtils$ALLOWED_","isCompatibleComponent","startColumnType","endColumnType","isCompatibleType","cloneId","clonedLinks","LinkerUtils$1","DROOP","DROOP_EXPONENT","TRIANGLE_HEIGHT","TRIANGLE_BASE","TRIANGLE_TIP","TRIANGLE_HYPOTENUSE","TRIANGLE_THETA","CLIP_RADIUS","HALF_PI","LinkerLink","r","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","LinkerLink$1","LinkerOverlayContent","linkPoint","panelManager","coordinate","onLinksUpdated","newLinks","dialog","dialogX","clamp","dialogY","offset","isDragging","selectedIds","onLinkDeleted","onCancel","disabled","messageText","onLinkSelected","onAllLinksDeleted","onDone","mouse","mode","visibleLinks","_mouse$x","_mouse$y","tmpX","tmpY","vsGripper","Tooltip","GLOBAL_SHORTCUTS","LinkerOverlayContent$1","mapState","setDashboardLinksAction","addDashboardLinksAction","deleteDashboardLinksAction","setDashboardColumnSelectionValidatorAction","Linker","linkInProgress","isolateForPanelId","combinedLinks","_link$start","eventHub","_link$start2","_link$end2","linksToDelete","isAlwaysEndPoint","overrideIsolatedLinkerPanelId","panelComponent","newLink","existingLinkPanelId","panelLinkEnd","existingLinkEnd","existingLinkStart","_linksToDelete","panelLinkStart","_newLink","endPanel","addDashboardLinks","clearAll","setDashboardLinks","deleteDashboardLinks","isolatedLinks","_link$start3","_link$end3","l","timeZone","panelFilterMap","endPanelId","startColumnIndex","isExpandable","isGrouped","text","dateFilterFormatter","DateUtils","cloneConfig","linksToAdd","componentId","setDashboardColumnSelectionValidator","isDraggingPanel","isLinkOverlayShown","linkerOverlayMessage","ConnectedLinker","Linker$1","LinkerPlugin","LinkerPluginConfig","LinkerPluginConfig$1","MarkdownUtils","usedTitles","titleIndex","MarkdownUtils$1","MarkdownPlugin","dehydrateMarkdown","componentState","configProps","dehydrate","handleOpen","openedMarkdowns","_markdown$title","hydrate","MarkdownEvent","MarkdownPluginConfig","MarkdownPluginConfig$1","PandasPanelPlugin","PandasPanelPlugin$1","PandasWidgetPlugin","setIsLoading","setIsLoaded","handleReload","LoadingOverlay","PandasPluginConfig","dhPandas","PandasPluginConfig$1","WrapWidgetPlugin","_plugin$component$dis","Wrapper","C","hasRef","canHaveRef","WidgetLoaderPlugin","supportedTypes","typeMap","isWidgetPlugin","supportedType","_typeMap$get","handlePanelOpen","_widget$title","widget","widgetId","panelProps","deregisterFns","deregister","WidgetLoaderPluginConfig","WidgetLoaderPluginConfig$1","LinkPoint","LinkPointUntyped","Link","Links","User","UIPropTypes","UIPropTypes$1","nullableBoolean","propName","nullableString","CommonPropTypes","CommonPropTypes$1"],"mappings":"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"}
1
+ {"version":3,"file":"index-cdb214b1.js","sources":["../../../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/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/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/MarkdownEditor.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/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/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/controls/markdown/MarkdownUtils.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":["function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nclass ChartEvent {}\n_defineProperty(ChartEvent, \"OPEN\", 'ChartEvent.OPEN');\n_defineProperty(ChartEvent, \"CLOSE\", 'ChartEvent.CLOSE');\n_defineProperty(ChartEvent, \"COLUMN_SELECTED\", 'ChartEvent.COLUMN_SELECTED');\nexport default ChartEvent;\n//# sourceMappingURL=ChartEvent.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nexport class IrisGridEvent {}\n_defineProperty(IrisGridEvent, \"OPEN_GRID\", 'IrisGridEvent.OPEN_GRID');\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(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nclass PandasEvent {}\n_defineProperty(PandasEvent, \"OPEN\", 'PandasEvent.OPEN');\n_defineProperty(PandasEvent, \"CLOSE\", 'PandasEvent.CLOSE');\nexport default PandasEvent;\n//# sourceMappingURL=PandasEvent.js.map","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { CopyButton } from '@deephaven/components';\nimport { GLPropTypes, LayoutUtils } from '@deephaven/dashboard';\nimport \"./WidgetPanelTooltip.css\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nfunction WidgetPanelTooltip(props) {\n var {\n widgetType,\n widgetName,\n glContainer,\n description,\n children\n } = props;\n var panelTitle = LayoutUtils.getTitleFromContainer(glContainer);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"tab-tooltip-grid-container\",\n children: [/*#__PURE__*/_jsxs(\"span\", {\n className: \"tab-tooltip-title\",\n children: [widgetType, \" Name\"]\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"tab-tooltip-name-wrapper\",\n children: [/*#__PURE__*/_jsx(\"span\", {\n className: \"tab-tooltip-name\",\n children: widgetName\n }), /*#__PURE__*/_jsx(CopyButton, {\n className: \"tab-tooltip-copy\",\n tooltip: \"Copy name\",\n copy: widgetName\n })]\n }), widgetName !== panelTitle && /*#__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: panelTitle\n })]\n }), description && /*#__PURE__*/_jsx(\"div\", {\n className: \"tab-tooltip-description\",\n children: description\n }), children]\n });\n}\nWidgetPanelTooltip.propTypes = {\n glContainer: GLPropTypes.Container.isRequired,\n widgetType: PropTypes.string,\n widgetName: PropTypes.string,\n description: PropTypes.string,\n children: PropTypes.node\n};\nWidgetPanelTooltip.defaultProps = {\n widgetType: '',\n widgetName: '',\n description: null,\n children: null\n};\nexport default WidgetPanelTooltip;\n//# sourceMappingURL=WidgetPanelTooltip.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport { ContextActions } from '@deephaven/components';\nimport { copyToClipboard } from '@deephaven/utils';\nimport Panel from \"./Panel.js\";\nimport WidgetPanelTooltip from \"./WidgetPanelTooltip.js\";\nimport \"./WidgetPanel.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { 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 super(props);\n _defineProperty(this, \"getCachedRenderTabTooltip\", memoize((showTabTooltip, glContainer, widgetType, widgetName, description) => showTabTooltip ? () => /*#__PURE__*/_jsx(WidgetPanelTooltip, {\n glContainer: glContainer,\n widgetType: widgetType,\n widgetName: widgetName,\n description: description\n }) : null));\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n this.handleSessionOpened = this.handleSessionOpened.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 widgetName\n } = this.props;\n copyToClipboard(widgetName);\n }\n getErrorMessage() {\n var {\n errorMessage\n } = this.props;\n var {\n isClientDisconnected,\n isPanelDisconnected,\n isWidgetDisconnected,\n isWaitingForReconnect\n } = this.state;\n if (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 widgetName,\n widgetType\n } = this.props;\n return \"Variable \\\"\".concat(widgetName, \"\\\" not set.\\n\").concat(widgetType, \" does not exist yet.\");\n }\n if (isWidgetDisconnected) {\n var {\n widgetName: _widgetName\n } = this.props;\n return \"\".concat(_widgetName, \" is unavailable.\");\n }\n return undefined;\n }\n handleSessionClosed() {\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(...arguments);\n }\n handleSessionOpened() {\n var {\n onSessionOpen\n } = this.props;\n onSessionOpen(...arguments);\n }\n render() {\n var {\n children,\n className,\n componentPanel,\n isLoaded,\n isLoading,\n glContainer,\n glEventHub,\n isDisconnected,\n isClonable,\n isRenamable,\n showTabTooltip,\n renderTabTooltip,\n widgetType,\n widgetName,\n description,\n onClearAllFilters,\n onHide,\n onFocus,\n onBlur,\n onResize,\n onShow,\n onTabBlur,\n onTabFocus,\n onTabClicked\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, glContainer, widgetType, widgetName, description);\n var additionalActions = [{\n title: \"Copy \".concat(widgetType, \" Name\"),\n group: ContextActions.groups.medium,\n order: 20,\n action: this.handleCopyName\n }];\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: this.handleSessionOpened,\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 errorMessage: null,\n isClonable: true,\n isDisconnected: false,\n isLoading: false,\n isLoaded: true,\n isRenamable: true,\n showTabTooltip: true,\n widgetName: 'Widget',\n widgetType: 'Widget',\n renderTabTooltip: null,\n description: '',\n onFocus: () => undefined,\n onBlur: () => undefined,\n onHide: () => undefined,\n onClearAllFilters: () => undefined,\n onResize: () => undefined,\n onSessionClose: () => undefined,\n onSessionOpen: () => undefined,\n onShow: () => undefined,\n onTabBlur: () => undefined,\n onTabFocus: () => undefined,\n onTabClicked: () => undefined\n});\nexport default WidgetPanel;\n//# sourceMappingURL=WidgetPanel.js.map","import React, { useCallback, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { ButtonOld } from '@deephaven/components';\nimport { vsPass, vsWarning } from '@deephaven/icons';\nimport { TextUtils } from '@deephaven/utils';\nimport \"./ChartFilterOverlay.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { 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(ButtonOld, {\n onClick: handleAddClick,\n className: \"btn-primary\",\n children: \"Add Input Filters\"\n }), /*#__PURE__*/_jsx(ButtonOld, {\n onClick: handleOpenLinker,\n className: \"btn-primary\",\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}\nChartFilterOverlay.propTypes = {\n columnMap: PropTypes.instanceOf(Map).isRequired,\n inputFilterMap: PropTypes.instanceOf(Map).isRequired,\n linkedColumnMap: PropTypes.instanceOf(Map).isRequired,\n onAdd: PropTypes.func.isRequired,\n onOpenLinker: PropTypes.func.isRequired,\n waitingFilterMap: PropTypes.instanceOf(Map).isRequired,\n waitingInputMap: PropTypes.instanceOf(Map).isRequired\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 } from \"react/jsx-runtime\";\nimport { 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 if (_onMouseEnter) _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);\nChartColumnSelectorOverlay.defaultProps = {\n onMouseEnter: () => undefined,\n onMouseLeave: () => undefined\n};\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","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport { CSSTransition } from 'react-transition-group';\nimport debounce from 'lodash.debounce';\nimport { Chart, ChartUtils, isFigureChartModel } from '@deephaven/chart';\nimport { getOpenedPanelMapForDashboard, LayoutUtils } from '@deephaven/dashboard';\nimport { IrisGridUtils } from '@deephaven/iris-grid';\nimport { ThemeExport } 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, ChartEvent } 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 { jsx as _jsx } from \"react/jsx-runtime\";\nimport { 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) : false,\n isActive: linkedColumnMap.has(column.name)\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,\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 (!model) {\n return;\n }\n if (makeModel !== prevProps.makeModel) {\n this.initModel();\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 });\n var {\n makeModel\n } = this.props;\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 glEventHub.emit(ChartEvent.COLUMN_SELECTED, this, columnMap.get(columnName));\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 }\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 }\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(dh.plot.Figure.create(new ChartUtils(dh).makeFigureSettings(settings, source))).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 glEventHub.emit(InputFilterEvent.COLUMNS_CHANGED, this, 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 _updatedFilterMap;\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 < 1) {\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 = 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 name;\n if (isChartPanelTableMetadata(metadata)) {\n name = metadata.table;\n } else if (isChartPanelFigureMetadata(metadata)) {\n name = metadata.figure;\n } else {\n name = metadata.name;\n }\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 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 widgetName: name,\n widgetType: \"Chart\",\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(CSSTransition, {\n in: isWaitingForFilter && !isSelectingColumn && !isLoading,\n timeout: ThemeExport.transitionMs,\n classNames: \"fade\",\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(CSSTransition, {\n in: isSelectingColumn,\n timeout: ThemeExport.transitionMs,\n classNames: \"fade\",\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(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 shortid from 'shortid';\nimport Log from '@deephaven/log';\nimport \"./DropdownFilter.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { 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 _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: shortid(),\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 ? 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(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport debounce from 'lodash.debounce';\nimport deepEqual from '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 { Pending, PromiseUtils } from '@deephaven/utils';\nimport DropdownFilter from \"../controls/dropdown-filter/DropdownFilter.js\";\nimport { InputFilterEvent } from \"../events/index.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 { jsx as _jsx } from \"react/jsx-runtime\";\nvar log = Log.module('DropdownFilterPanel');\nvar DROPDOWN_FILTER_DEBOUNCE = 250;\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 _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 _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 _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 _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 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, _timestamp;\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 = 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 glEventHub.emit(InputFilterEvent.COLUMN_SELECTED, this, DropdownFilterPanel.SOURCE_COLUMN);\n }\n handleClearAllFilters() {\n var _this$dropdownFilterR, _this$dropdownFilterR2;\n (_this$dropdownFilterR = this.dropdownFilterRef) === null || _this$dropdownFilterR === void 0 ? void 0 : (_this$dropdownFilterR2 = _this$dropdownFilterR.current) === null || _this$dropdownFilterR2 === void 0 ? void 0 : _this$dropdownFilterR2.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$dropdownFilterR3, _this$dropdownFilterR4;\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$dropdownFilterR3 = this.dropdownFilterRef) === null || _this$dropdownFilterR3 === void 0 ? void 0 : (_this$dropdownFilterR4 = _this$dropdownFilterR3.current) === null || _this$dropdownFilterR4 === void 0 ? void 0 : _this$dropdownFilterR4.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 glEventHub.emit(InputFilterEvent.FILTERS_CHANGED, this, {\n name,\n type,\n value: value != null ? value : '=null',\n timestamp,\n excludePanelIds\n });\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 }\n handleSourceMouseLeave() {\n var {\n columnSelectionValidator\n } = this.props;\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, undefined);\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) : [];\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 widgetName: \"Dropdown Filter\",\n widgetType: \"DropdownFilter\",\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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 shortid from 'shortid';\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, RadioItem, Select } from '@deephaven/components';\nimport \"./FilterSetManager.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { 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 ? 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 = shortid();\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(event) {\n this.setState({\n restoreFullState: event.target.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(_ref10 => {\n var {\n id\n } = _ref10;\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(_ref11 => {\n var {\n id\n } = _ref11;\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 ? void 0 : _this$dropdownRef$cur.focus();\n }\n focusRenameInput() {\n var _this$renameInputRef$;\n (_this$renameInputRef$ = this.renameInputRef.current) === null || _this$renameInputRef$ === void 0 ? 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 onChange: this.handleRestoreFullStateChange,\n value: \"\".concat(restoreFullState),\n children: [/*#__PURE__*/_jsx(RadioItem, {\n value: \"false\",\n children: \"Restore only filters\"\n }), /*#__PURE__*/_jsx(RadioItem, {\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(_ref12 => {\n var {\n id,\n title\n } = _ref12;\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(_ref13 => {\n var {\n id,\n title\n } = _ref13;\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","import React from 'react';\nimport { GLPropTypes } from '@deephaven/dashboard';\nimport PropTypes from 'prop-types';\nimport WidgetPanelTooltip from \"./WidgetPanelTooltip.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { 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 widgetName,\n glContainer,\n description\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 /*#__PURE__*/_jsxs(WidgetPanelTooltip, {\n widgetType: \"Table\",\n widgetName: widgetName,\n glContainer: glContainer,\n description: description,\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}\nIrisGridPanelTooltip.propTypes = {\n glContainer: GLPropTypes.Container.isRequired,\n widgetName: PropTypes.string.isRequired,\n description: PropTypes.string\n};\nIrisGridPanelTooltip.defaultProps = {\n description: null\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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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, IrisGridUtils, isIrisGridTableModelTemplate, IrisGridTableModel } from '@deephaven/iris-grid';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { getSettings, getUser, getWorkspace } from '@deephaven/redux';\nimport { assertNotNull, PromiseUtils } from '@deephaven/utils';\nimport { ContextMenuRoot } from '@deephaven/components';\nimport { InputFilterEvent, 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 { jsx as _jsx } from \"react/jsx-runtime\";\nvar log = Log.module('IrisGridPanel');\nvar DEBOUNCE_PANEL_STATE_UPDATE = 500;\nvar PLUGIN_COMPONENTS = {\n IrisGrid,\n IrisGridTableModel,\n ContextMenuRoot\n};\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.\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(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, \"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, user, workspace, pluginState) => {\n if (!model || !isIrisGridTableModelTemplate(model) || Plugin == null || model.table == null) {\n return null;\n }\n\n // The panel in the deprecated props makes an ugly dependency of the plugin on the panel\n // Since we didn't have TS when the old plugins would have been implemented,\n // just pass the deprecated props without type checking\n // so we can break the ugly dependency of plugin on panel\n var deprecatedProps = {\n panel: this,\n onFilter: this.handlePluginFilter,\n onFetchColumns: this.handlePluginFetchColumns,\n user,\n workspace,\n components: PLUGIN_COMPONENTS\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 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, \"getDehydratedIrisGridState\", memoize((model, sorts, advancedFilters, customColumnFormatMap, isFilterBarShown, quickFilters, customColumns, reverseType, rollupConfig, showSearchBar, searchValue, selectDistinctColumns, selectedSearchColumns, invertSearchColumns, userColumnWidths, userRowHeights, aggregationSettings, pendingDataMap, frozenColumns, conditionalFormats, columnHeaderGroups, partitionConfig) => {\n assertNotNull(this.irisGridUtils);\n return this.irisGridUtils.dehydrateIrisGridState(model, {\n advancedFilters,\n aggregationSettings,\n customColumnFormatMap,\n isFilterBarShown,\n metrics: {\n userColumnWidths,\n userRowHeights\n },\n quickFilters,\n customColumns,\n reverseType,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n sorts,\n invertSearchColumns,\n pendingDataMap,\n frozenColumns,\n conditionalFormats,\n columnHeaderGroups,\n partitionConfig\n });\n }));\n _defineProperty(this, \"getDehydratedGridState\", memoize((model, movedColumns, movedRows, isStuckToBottom, isStuckToRight) => IrisGridUtils.dehydrateGridState(model, {\n isStuckToBottom,\n isStuckToRight,\n movedColumns,\n movedRows\n })));\n _defineProperty(this, \"getCachedPanelState\", memoize((irisGridPanelState, irisGridState, gridState, pluginState) => ({\n irisGridPanelState,\n irisGridState,\n gridState,\n pluginState\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 var {\n advancedFilters,\n aggregationSettings,\n customColumnFormatMap,\n isFilterBarShown,\n quickFilters,\n customColumns,\n reverseType,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n sorts,\n invertSearchColumns,\n metrics,\n pendingDataMap,\n frozenColumns,\n conditionalFormats,\n columnHeaderGroups,\n partitionConfig\n } = irisGridState;\n assertNotNull(model);\n assertNotNull(metrics);\n var {\n userColumnWidths,\n userRowHeights\n } = metrics;\n assertNotNull(gridState);\n var {\n isStuckToBottom,\n isStuckToRight,\n movedColumns,\n movedRows\n } = gridState;\n var panelState = this.getCachedPanelState(this.getDehydratedIrisGridPanelState(model, isSelectingPartition, partitions, advancedSettings), this.getDehydratedIrisGridState(model, sorts, advancedFilters, customColumnFormatMap, isFilterBarShown, quickFilters, customColumns, reverseType, rollupConfig, showSearchBar, searchValue, selectDistinctColumns, selectedSearchColumns, invertSearchColumns, userColumnWidths, userRowHeights, aggregationSettings, pendingDataMap, frozenColumns, conditionalFormats, columnHeaderGroups, partitionConfig), this.getDehydratedGridState(model, movedColumns, movedRows, isStuckToBottom, isStuckToRight), 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 ? 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 isFilterBarShown: false,\n quickFilters: new Map(),\n sorts: [],\n userColumnWidths: new Map(),\n userRowHeights: new Map(),\n reverseType: TableUtils.REVERSE_TYPE.NONE,\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 });\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: _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 ? 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 }\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 ? 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 glEventHub.emit(InputFilterEvent.TABLE_CHANGED, this, 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 } = 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: {\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 glEventHub.emit(IrisGridEvent.COLUMN_SELECTED, this, column);\n }\n handleDataSelected(row, dataMap) {\n var {\n glEventHub\n } = this.props;\n glEventHub.emit(IrisGridEvent.DATA_SELECTED, this, 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: _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 glEventHub.emit(InputFilterEvent.TABLE_CHANGED, this, 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 glEventHub.emit(InputFilterEvent.COLUMNS_CHANGED, this, 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 = Math.max(rect.left, Math.min(visibleIndex > right ? rect.right : rect.left + columnX + columnWidth * 0.5, 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 }\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: _gridState,\n irisGridState: _irisGridState2,\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 isFilterBarShown,\n quickFilters,\n reverseType,\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 conditionalFormats,\n columnHeaderGroups,\n partitionConfig\n } = this.irisGridUtils.hydrateIrisGridState(model, _objectSpread(_objectSpread({}, _irisGridState2), irisGridStateOverrides));\n var {\n isStuckToBottom,\n isStuckToRight,\n movedColumns,\n movedRows\n } = IrisGridUtils.hydrateGridState(model, _objectSpread(_objectSpread({}, _gridState), gridStateOverrides), _irisGridState2.customColumns);\n this.setState({\n advancedFilters,\n advancedSettings,\n conditionalFormats,\n customColumns,\n customColumnFormatMap,\n isFilterBarShown,\n isSelectingPartition,\n movedColumns,\n movedRows,\n partitions,\n quickFilters,\n reverseType,\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$curren, _this$irisGrid$curren2;\n var grid = (_this$irisGrid$curren = (_this$irisGrid$curren2 = this.irisGrid.current) === null || _this$irisGrid$curren2 === void 0 ? void 0 : _this$irisGrid$curren2.grid) !== null && _this$irisGrid$curren !== void 0 ? _this$irisGrid$curren : 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 panelState,\n user,\n workspace,\n settings,\n theme\n } = this.props;\n var {\n advancedFilters,\n aggregationSettings,\n advancedSettings,\n conditionalFormats,\n customColumns,\n customColumnFormatMap,\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 reverseType,\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 name = getTableNameFromMetadata(metadata);\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, user, workspace, pluginState);\n var {\n permissions\n } = user;\n var {\n canCopy,\n canDownloadCsv\n } = permissions;\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 widgetName: name,\n widgetType: \"Table\",\n description: description,\n componentPanel: this,\n renderTabTooltip: () => /*#__PURE__*/_jsx(IrisGridPanelTooltip, {\n model: model,\n widgetName: name,\n glContainer: glContainer,\n description: description\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 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 movedColumns: movedColumns,\n movedRows: movedRows,\n partitions: partitions,\n partitionConfig: partitionConfig,\n quickFilters: quickFilters,\n reverseType: reverseType,\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 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 } = _ref6;\n return {\n inputFilters: getInputFiltersForDashboard(state, localDashboardId),\n links: getLinksForDashboard(state, localDashboardId),\n columnSelectionValidator: getColumnSelectionValidatorForDashboard(state, localDashboardId),\n user: getUser(state),\n workspace: getWorkspace(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(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 } from \"react/jsx-runtime\";\nimport { 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 _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(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport debounce from 'lodash.debounce';\nimport Panel from \"./Panel.js\";\nimport InputFilter from \"../controls/input-filter/InputFilter.js\";\nimport { InputFilterEvent } from \"../events/index.js\";\nimport { getColumnsForDashboard } from \"../redux/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar INPUT_FILTER_DEBOUNCE = 250;\nclass InputFilterPanel extends Component {\n // Have to explicitly specify displayName\n // otherwise it gets minified and breaks LayoutUtils.getComponentName\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\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\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 ? void 0 : _this$inputFilterRef$.clearFilter();\n }\n sendUpdate(name, type, value, timestamp) {\n var {\n glEventHub\n } = this.props;\n glEventHub.emit(InputFilterEvent.FILTERS_CHANGED, this, {\n name,\n type,\n value,\n timestamp\n });\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 ? 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_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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 \"./Panel.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: _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(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsEdit } from '@deephaven/icons';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { 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(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 } from \"react/jsx-runtime\";\nimport { 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(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { PureComponent } from 'react';\nimport Markdown from 'react-markdown';\nimport { Code, Editor } from '@deephaven/console';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar renderMarkdown = props => {\n var {\n children,\n className\n } = props;\n var language = className !== undefined && className !== null && className !== void 0 && className.startsWith('language-') ? className.substring(9) : 'plaintext';\n return /*#__PURE__*/_jsx(\"pre\", {\n children: /*#__PURE__*/_jsx(\"code\", {\n children: /*#__PURE__*/_jsx(Code, {\n language: language,\n children: React.Children.map(children, child => typeof child === 'string' ? child.trim() : child)\n })\n })\n });\n};\nexport default class MarkdownEditor extends PureComponent {\n constructor(props) {\n super(props);\n _defineProperty(this, \"container\", void 0);\n this.container = null;\n }\n render() {\n var {\n isEditing,\n content,\n onEditorInitialized\n } = this.props;\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"markdown-editor-container\",\n ref: container => {\n this.container = container;\n },\n children: isEditing ? /*#__PURE__*/_jsx(Editor, {\n settings: {\n language: 'markdown',\n value: content,\n lineNumbers: 'off'\n },\n onEditorInitialized: onEditorInitialized\n }) : /*#__PURE__*/_jsx(Markdown, {\n components: {\n code: renderMarkdown\n },\n children: content\n })\n });\n }\n}\n_defineProperty(MarkdownEditor, \"defaultProps\", {\n isEditing: false,\n content: ''\n});\n//# sourceMappingURL=MarkdownEditor.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } 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 Panel from \"./Panel.js\";\nimport MarkdownContainer from \"../controls/markdown/MarkdownContainer.js\";\nimport MarkdownStartPage from \"../controls/markdown/MarkdownStartPage.js\";\nimport MarkdownEditor from \"../controls/markdown/MarkdownEditor.js\";\nimport \"./MarkdownPanel.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\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(closedPanels => closedPanels.filter(panel => panel.component === 'MarkdownPanel').reverse()));\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 ({\n content\n } = panelState);\n }\n this.state = {\n isStartPageShown: content == null,\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) {\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(MarkdownEditor, {\n ref: markdownEditor => {\n this.markdownEditor = markdownEditor;\n },\n isEditing: isEditing,\n content: content !== null && content !== void 0 ? content : undefined,\n onEditorInitialized: this.handleEditorInitialized\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 } from \"react/jsx-runtime\";\nimport { 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 ? 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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint-disable react/jsx-props-no-spreading */\n/* eslint-disable react/no-unused-state */\nimport React, { Component } from 'react';\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 _defineProperty(this, \"irisGridRef\", void 0);\n this.irisGridRef = /*#__PURE__*/React.createRef();\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 // Dehydrated panel state that can load this panel\n };\n }\n\n handleReload() {\n var _this$irisGridRef$cur;\n (_this$irisGridRef$cur = this.irisGridRef.current) === null || _this$irisGridRef$cur === void 0 ? void 0 : _this$irisGridRef$cur.initModel();\n this.setState({\n shouldFocusGrid: true\n });\n }\n handleGridStateChange() {\n var _this$irisGridRef$cur2, _this$irisGridRef$cur3, _this$irisGridRef$cur4;\n var {\n shouldFocusGrid\n } = this.state;\n if (shouldFocusGrid && (_this$irisGridRef$cur2 = this.irisGridRef.current) !== null && _this$irisGridRef$cur2 !== void 0 && (_this$irisGridRef$cur3 = _this$irisGridRef$cur2.irisGrid) !== null && _this$irisGridRef$cur3 !== void 0 && (_this$irisGridRef$cur4 = _this$irisGridRef$cur3.current) !== null && _this$irisGridRef$cur4 !== void 0 && _this$irisGridRef$cur4.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 return /*#__PURE__*/_jsx(ConnectedIrisGridPanel, _objectSpread(_objectSpread({\n ref: this.irisGridRef,\n onStateChange: this.handleGridStateChange,\n onPanelStateUpdate: this.handlePanelStateUpdate\n }, this.props), {}, {\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(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 ? 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(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nimport { forwardRef, useMemo } from 'react';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { useConnection } from '@deephaven/jsapi-components';\nimport { ChartModelFactory, useChartTheme } from '@deephaven/chart';\nimport { IrisGridUtils } from '@deephaven/iris-grid';\nimport { getTimeZone, store } from '@deephaven/redux';\nimport { isChartPanelDehydratedProps, isChartPanelFigureMetadata, 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, _x5, _x6) {\n return _createChartModel.apply(this, arguments);\n}\nfunction _createChartModel() {\n _createChartModel = _asyncToGenerator(function* (dh, chartTheme, connection, metadata, fetch, panelState) {\n var settings;\n var tableName;\n var figureName;\n var tableSettings;\n if (isChartPanelTableMetadata(metadata)) {\n settings = metadata.settings;\n tableName = metadata.table;\n figureName = undefined;\n tableSettings = metadata.tableSettings;\n } else {\n settings = {};\n tableName = '';\n figureName = isChartPanelFigureMetadata(metadata) ? metadata.figure : metadata.name;\n 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.figure != null) {\n figureName = panelState.figure;\n }\n if (panelState.settings != null) {\n settings = _objectSpread(_objectSpread({}, settings), panelState.settings);\n }\n }\n if (figureName == null && tableName == null) {\n var figure = yield fetch();\n return ChartModelFactory.makeModel(dh, settings, figure, chartTheme);\n }\n if (figureName != null) {\n var _figure;\n if (metadata.type === dh.VariableType.FIGURE) {\n var _definition = {\n name: figureName,\n type: dh.VariableType.FIGURE\n };\n _figure = yield connection.getObject(_definition);\n } else {\n _figure = yield fetch();\n }\n return ChartModelFactory.makeModel(dh, settings, _figure, chartTheme);\n }\n var definition = {\n name: tableName,\n type: dh.VariableType.TABLE\n };\n var table = yield connection.getObject(definition);\n new IrisGridUtils(dh).applyTableSettings(table, tableSettings, getTimeZone(store.getState()));\n return ChartModelFactory.makeModelFromSettings(dh,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n settings, table, chartTheme);\n });\n return _createChartModel.apply(this, arguments);\n}\nexport var ChartPanelPlugin = /*#__PURE__*/forwardRef((props, ref) => {\n var dh = useApi();\n var chartTheme = useChartTheme();\n var connection = useConnection();\n var panelState = isChartPanelDehydratedProps(props) ? props.panelState : undefined;\n var {\n fetch,\n metadata,\n localDashboardId\n } = props;\n var hydratedProps = useMemo(() => ({\n metadata: metadata,\n localDashboardId,\n makeModel: () => {\n if (metadata == null) {\n throw new Error('Metadata is required for chart panel');\n }\n return createChartModel(dh, chartTheme, connection, metadata, fetch, panelState);\n }\n }), [dh, connection, fetch, panelState, metadata, localDashboardId, chartTheme]);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return /*#__PURE__*/_jsx(ConnectedChartPanel, _objectSpread(_objectSpread({\n ref: ref\n }, props), hydratedProps));\n});\nChartPanelPlugin.displayName = 'ChartPanelPlugin';\nexport default ChartPanelPlugin;\n//# sourceMappingURL=ChartPanelPlugin.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nimport { useEffect, useState } from 'react';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { Chart, ChartModelFactory, useChartTheme } from '@deephaven/chart';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function ChartWidgetPlugin(props) {\n var dh = useApi();\n var chartTheme = useChartTheme();\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, chartTheme);\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, chartTheme]);\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","import { useCallback } from 'react';\nimport { ChartModelFactory, ChartUtils, useChartTheme } from '@deephaven/chart';\nimport { assertIsDashboardPluginProps, LayoutUtils, useListener } from '@deephaven/dashboard';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport shortid from 'shortid';\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 dh = useApi();\n var chartTheme = useChartTheme();\n var handleCreateChart = useCallback(_ref => {\n var {\n metadata,\n panelId = shortid.generate(),\n table\n } = _ref;\n var {\n settings\n } = metadata;\n var makeModel = () => ChartModelFactory.makeModelFromSettings(dh, settings, table, chartTheme);\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 makeModel\n },\n title,\n id: panelId\n };\n var {\n root\n } = layout;\n LayoutUtils.openComponent({\n root,\n config\n });\n }, [chartTheme, dh, 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 shortid from 'shortid';\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\";\nvar log = Log.module('FilterPlugin');\nfunction flattenArray(accumulator, currentValue) {\n return accumulator.concat(currentValue);\n}\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()).reduce(flattenArray, []).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()).reduce(flattenArray, []).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 panel The component that's emitting the filter change\n * @param columns The columns in this panel\n */\n var handleColumnsChanged = useCallback((panel, columns) => {\n log.debug2('handleColumnsChanged', panel, columns);\n panelColumns.set(panel, [].concat(columns));\n sendUpdate();\n }, [panelColumns, sendUpdate]);\n\n /**\n * Handler for the FILTERS_CHANGED event.\n * @param {Component} panel The component that's emitting the filter change\n * @param {FilterChangeEvent|Array<FilterChangeEvent>} filters The input filters set by the panel\n */\n var handleFiltersChanged = useCallback((panel, filters) => {\n log.debug2('handleFiltersChanged', panel, filters);\n panelFilters.set(panel, [].concat(filters));\n sendUpdate();\n }, [panelFilters, sendUpdate]);\n var handleTableChanged = useCallback((panel, table) => {\n log.debug2('handleTableChanged', panel, table);\n panelTables.set(LayoutUtils.getIdFromPanel(panel), table);\n sendUpdate();\n }, [panelTables, sendUpdate]);\n var handlePanelUnmount = useCallback(panel => {\n log.debug2('handlePanelUnmount', panel);\n panelColumns.delete(panel);\n panelFilters.delete(panel);\n panelTables.delete(LayoutUtils.getIdFromPanel(panel));\n sendUpdate();\n }, [panelColumns, panelFilters, panelTables, sendUpdate]);\n var handleOpenDropdown = useCallback(_ref => {\n var {\n title = 'DropdownFilter',\n metadata = {},\n panelState = null,\n id = shortid.generate(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = null\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 = shortid.generate(),\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 = shortid.generate(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = null\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 useListener(layout.eventHub, InputFilterEvent.COLUMNS_CHANGED, handleColumnsChanged);\n useListener(layout.eventHub, InputFilterEvent.FILTERS_CHANGED, handleFiltersChanged);\n useListener(layout.eventHub, InputFilterEvent.TABLE_CHANGED, 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(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nimport { useMemo } from 'react';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { IrisGridModelFactory } from '@deephaven/iris-grid';\nimport { useLoadTablePlugin } from \"./useLoadTablePlugin.js\";\nexport function useHydrateGrid(fetch, id) {\n var dh = 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 fetch();\n return IrisGridModelFactory.makeModel(dh, table);\n });\n function makeModel() {\n return _makeModel.apply(this, arguments);\n }\n return makeModel;\n }()\n }), [dh, loadPlugin, fetch, id]);\n return hydratedProps;\n}\nexport default useHydrateGrid;\n//# sourceMappingURL=useHydrateGrid.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 } = props;\n var hydratedProps = useHydrateGrid(fetch, localDashboardId);\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(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nimport { useEffect, useState } from 'react';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { IrisGrid, IrisGridModelFactory } from '@deephaven/iris-grid';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function GridWidgetPlugin(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 table = yield fetch();\n var newModel = yield IrisGridModelFactory.makeModel(dh, table);\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(IrisGrid, {\n model: model\n }) : null;\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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport shortid from 'shortid';\nimport { LayoutUtils } from '@deephaven/dashboard';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { ChartPanel, IrisGridPanel, DropdownFilterPanel } from \"../panels/index.js\"; // [x,y] screen coordinates used by the Linker\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 var _column$description;\n // TODO: core/#3358 Use preview/original type property instead of checking description\n return column.description === undefined || !((_column$description = column.description) !== null && _column$description !== void 0 && _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 getLinkType(start, end, isolatedLinkerPanelId) {\n var _LinkerUtils$ALLOWED_;\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 === null || start === void 0 ? void 0 : start.panelId) == null || (end === null || end === void 0 ? void 0 : 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 'invalid';\n }\n if (start.panelComponent == null || end.panelComponent == null) {\n log.error('PanelComponent should not be null', start, end);\n return 'invalid';\n }\n var isCompatibleComponent = (_LinkerUtils$ALLOWED_ = LinkerUtils.ALLOWED_LINKS.get(start.panelComponent)) === null || _LinkerUtils$ALLOWED_ === void 0 ? void 0 : _LinkerUtils$ALLOWED_.includes(end.panelComponent);\n if (isCompatibleComponent === undefined || !isCompatibleComponent) {\n log.debug2('Incompatible panel components', start, end);\n return 'invalid';\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 'invalid';\n }\n\n // If all checks pass, link type is determined by the target panel component\n switch (end.panelComponent) {\n case LayoutUtils.getComponentName(ChartPanel):\n return 'chartLink';\n case LayoutUtils.getComponentName(IrisGridPanel):\n return 'tableLink';\n case LayoutUtils.getComponentName(DropdownFilterPanel):\n return 'filterSource';\n default:\n }\n log.debug2('Incompatible target panel component', end.panelComponent);\n return 'invalid';\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: shortid.generate(),\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: shortid.generate(),\n end: _objectSpread(_objectSpread({}, link.end), {}, {\n panelId: cloneId\n })\n }));\n }\n });\n return clonedLinks;\n }\n}\n_defineProperty(LinkerUtils, \"ALLOWED_LINKS\", new Map([[LayoutUtils.getComponentName(IrisGridPanel), [LayoutUtils.getComponentName(IrisGridPanel), LayoutUtils.getComponentName(ChartPanel), LayoutUtils.getComponentName(DropdownFilterPanel)]]]));\nexport default LinkerUtils;\n//# sourceMappingURL=LinkerUtils.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { 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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 clamp from 'lodash.clamp';\nimport { isLinkableFromPanel } from \"./LinkerUtils.js\";\nimport LinkerLink from \"./LinkerLink.js\";\nimport \"./LinkerOverlayContent.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { 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 } = this.props;\n var {\n panelId,\n columnName\n } = linkPoint;\n var panel = panelManager.getOpenedPanelById(panelId);\n if (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,\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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport shortid from 'shortid';\nimport memoize from 'memoize-one';\nimport { CSSTransition } from 'react-transition-group';\nimport { ThemeExport } 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 { 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, InputFilterEvent } from \"../events/index.js\";\nimport LinkerOverlayContent from \"./LinkerOverlayContent.js\";\nimport LinkerUtils, { isLinkablePanel, isLinkableColumn } from \"./LinkerUtils.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, \"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 ? void 0 : (_link$start = link.start) === null || _link$start === void 0 ? void 0 : _link$start.panelId) === isolateForPanelId || (link === null || link === void 0 ? 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.handleFilterColumnSelect = this.handleFilterColumnSelect.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.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 eventHub.on(InputFilterEvent.COLUMN_SELECTED, this.handleFilterColumnSelect);\n eventHub.on(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);\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(InputFilterEvent.COLUMN_SELECTED, this.handleFilterColumnSelect);\n eventHub.off(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);\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 }\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 this.columnSelected(panel, column, true);\n }\n handleFilterColumnSelect(panel, column) {\n log.debug('handleFilterColumnSelect', this.isOverlayShown());\n var {\n links,\n localDashboardId,\n setActiveTool,\n setDashboardIsolatedLinkerPanelId\n } = this.props;\n var panelId = LayoutUtils.getIdFromPanel(panel);\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) === panelId || ((_link$end2 = link.end) === null || _link$end2 === void 0 ? void 0 : _link$end2.panelId) === panelId;\n });\n if (!this.isOverlayShown() && panelId != null) {\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, panelId);\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(panel, column, true, panelId);\n }\n return;\n }\n\n // Filter source clicked with linker active\n this.columnSelected(panel, column, true);\n }\n handleColumnsChanged(panel, columns) {\n log.debug('handleColumnsChanged', panel, columns);\n var {\n links\n } = this.props;\n var panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n log.error('Invalid panelId', panel);\n return;\n }\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 === panelId && LinkerUtils.findColumn(columns, start) == null || end != null && end.panelId === panelId && 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 this.columnSelected(panel, column);\n }\n\n /**\n * Track a column selection and build the link from it.\n * @param panel The panel component that is the source for the column selection\n * @param column The column that was selected\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(panel, column) {\n var isAlwaysEndPoint = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var overrideIsolatedLinkerPanelId = arguments.length > 3 ? arguments[3] : 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 panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n return;\n }\n var panelComponent = LayoutUtils.getComponentNameFromPanel(panel);\n var {\n name: columnName,\n type: columnType\n } = column;\n if (linkInProgress == null || linkInProgress.start == null) {\n var newLink = {\n id: shortid.generate(),\n start: {\n panelId,\n panelComponent,\n columnName,\n columnType\n },\n // Link starts with type Invalid as linking a source to itself is not allowed\n type: 'invalid',\n isReversed: isAlwaysEndPoint\n };\n log.debug('starting link', newLink);\n this.setState({\n linkInProgress: newLink\n });\n } else {\n var {\n links\n } = this.props;\n var {\n start,\n id,\n isReversed\n } = linkInProgress;\n var end = {\n panelId,\n panelComponent,\n columnName,\n columnType\n };\n var type = LinkerUtils.getLinkType(isReversed !== undefined && isReversed ? end : start, isReversed !== undefined && isReversed ? start : end, overrideIsolatedLinkerPanelId !== null && overrideIsolatedLinkerPanelId !== void 0 ? overrideIsolatedLinkerPanelId : isolatedLinkerPanelId);\n switch (type) {\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 !== undefined && isReversed ? end : start,\n end: isReversed !== undefined && isReversed ? start : end,\n id,\n type,\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 {\n end\n } = link;\n var {\n panelId,\n columnName,\n columnType\n } = end;\n var endPanel = panelManager.getOpenedPanelById(panelId);\n if (!endPanel) {\n log.debug('endPanel no longer exists, 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 log.debug('Set filter data for panel:', panelId, filterMap);\n var {\n panelManager\n } = this.props;\n var panel = panelManager.getOpenedPanelById(panelId);\n if (!panel) {\n log.debug('panel no longer exists, 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 ? void 0 : (_link$start3 = link.start) === null || _link$start3 === void 0 ? void 0 : _link$start3.panelId) === isolatedLinkerPanelId || (link === null || link === void 0 ? 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 handleUpdateValues(panel, dataMap) {\n var panelId = LayoutUtils.getIdFromPanel(panel);\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 === panelId && end != null) {\n var {\n panelId: endPanelId,\n columnName,\n columnType\n } = end;\n // Map of column name to column type and filter value\n var filterMap = panelFilterMap.has(endPanelId) ? panelFilterMap.get(endPanelId) : new Map();\n var filterList = filterMap.has(columnName) === true ? filterMap.get(columnName).filterList : [];\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 var filter = {\n operator,\n text,\n value,\n startColumnIndex\n };\n filterList.push(filter);\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(panel, tableColumn) {\n var {\n linkInProgress\n } = this.state;\n var {\n isolatedLinkerPanelId\n } = this.props;\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();\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,\n start\n } = linkInProgress;\n var panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n return false;\n }\n var end = {\n panelId,\n panelComponent: LayoutUtils.getComponentNameFromPanel(panel),\n columnName: tableColumn.name,\n columnType: tableColumn.type\n };\n var type = isReversed !== undefined && isReversed ? LinkerUtils.getLinkType(end, start, isolatedLinkerPanelId) : LinkerUtils.getLinkType(start, end, isolatedLinkerPanelId);\n this.updateLinkInProgressType(type);\n return type !== 'invalid';\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(CSSTransition, {\n in: isLinkOverlayShown,\n timeout: ThemeExport.transitionMs,\n classNames: \"fade\",\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 })\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","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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.');\nexport default MarkdownUtils;\n//# sourceMappingURL=MarkdownUtils.js.map","import { useCallback, useEffect } from 'react';\nimport shortid from 'shortid';\nimport { assertIsDashboardPluginProps, dehydrate, hydrate, 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 dehydrateMarkdown = useCallback(config => {\n var {\n title,\n componentState,\n props: configProps\n } = config;\n var {\n panelState = null\n } = configProps;\n if (componentState != null) {\n ({\n panelState = null\n } = componentState);\n }\n if (title == null || panelState == null || panelState.content == null || panelState.content.length === 0 || panelState.content === MarkdownUtils.DEFAULT_CONTENT) {\n // We don't want to save it if there's no content\n return null;\n }\n return dehydrate(config);\n }, []);\n var handleOpen = useCallback(function () {\n var {\n title = '',\n metadata = {},\n id: panelId = shortid.generate(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = null\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var openedMarkdowns = panelManager.getOpenedPanelConfigsOfType(MarkdownPanel.COMPONENT);\n var closedMarkdowns = panelManager.getClosedPanelConfigsOfType(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 = closedMarkdowns.length > 0 ? null : MarkdownUtils.DEFAULT_CONTENT;\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, hydrate, dehydrateMarkdown)];\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n }, [dehydrateMarkdown, 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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 } = props;\n var hydratedProps = useHydrateGrid(fetch, localDashboardId);\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","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nimport { useCallback, useEffect, useState } from 'react';\nimport IrisGrid, { IrisGridModelFactory } from '@deephaven/iris-grid';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { LoadingOverlay } from '@deephaven/components';\nimport { PandasReloadButton } from \"./panels/PandasReloadButton.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nexport function PandasWidgetPlugin(props) {\n var dh = useApi();\n var [model, setModel] = useState();\n var [isLoading, setIsLoading] = useState(true);\n var [isLoaded, setIsLoaded] = useState(false);\n var {\n fetch\n } = props;\n var makeModel = useCallback( /*#__PURE__*/_asyncToGenerator(function* () {\n var table = yield fetch();\n return IrisGridModelFactory.makeModel(dh, table);\n }), [dh, fetch]);\n var handleReload = useCallback( /*#__PURE__*/_asyncToGenerator(function* () {\n setIsLoading(true);\n var newModel = yield makeModel();\n setModel(newModel);\n setIsLoading(false);\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 var newModel = yield makeModel();\n if (!cancelled) {\n setModel(newModel);\n setIsLoaded(true);\n setIsLoading(false);\n }\n });\n return _init.apply(this, arguments);\n }\n init();\n setIsLoading(true);\n return () => {\n cancelled = true;\n };\n }, [makeModel]);\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(LoadingOverlay, {\n isLoaded: isLoaded,\n isLoading: isLoading\n }), model && /*#__PURE__*/_jsx(IrisGrid, {\n model: model,\n children: /*#__PURE__*/_jsx(PandasReloadButton, {\n onClick: handleReload\n })\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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { useMemo, useCallback, useEffect, forwardRef } from 'react';\nimport shortid from 'shortid';\nimport { assertIsDashboardPluginProps, PanelEvent, LayoutUtils, useListener, canHaveRef } from '@deephaven/dashboard';\nimport { isWidgetPlugin, usePlugins } from '@deephaven/plugin';\nimport Log from '@deephaven/log';\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var C = plugin.component;\n var {\n metadata\n } = props;\n var hasRef = canHaveRef(C);\n return /*#__PURE__*/_jsx(WidgetPanel, _objectSpread(_objectSpread({\n widgetName: metadata === null || metadata === void 0 ? void 0 : metadata.name,\n widgetType: plugin.title\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$title;\n var {\n dragEvent,\n fetch,\n panelId = shortid.generate(),\n widget\n } = _ref;\n var {\n id: widgetId,\n type\n } = widget;\n var name = (_widget$title = widget.title) !== null && _widget$title !== void 0 ? _widget$title : widget.name;\n var plugin = supportedTypes.get(type);\n if (plugin == null) {\n return;\n }\n var metadata = {\n id: widgetId,\n name,\n type\n };\n var panelProps = {\n localDashboardId: id,\n metadata,\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 useListener(layout.eventHub, PanelEvent.OPEN, 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"],"names":["_defineProperty","obj","key","value","_toPropertyKey","arg","_toPrimitive","input","hint","prim","res","ChartEvent","ChartEvent$1","IrisGridEvent","IrisGridEvent$1","PandasEvent","PandasEvent$1","WidgetPanelTooltip","props","widgetType","widgetName","glContainer","description","children","panelTitle","LayoutUtils","_jsxs","_jsx","CopyButton","_Fragment","GLPropTypes","PropTypes","WidgetPanel","PureComponent","memoize","showTabTooltip","copyToClipboard","errorMessage","isClientDisconnected","isPanelDisconnected","isWidgetDisconnected","isWaitingForReconnect","_widgetName","onSessionClose","onSessionOpen","className","componentPanel","isLoaded","isLoading","glEventHub","isDisconnected","isClonable","isRenamable","renderTabTooltip","onClearAllFilters","onHide","onFocus","onBlur","onResize","onShow","onTabBlur","onTabFocus","onTabClicked","isPanelInactive","doRenderTabTooltip","additionalActions","ContextActions","Panel","classNames","WidgetPanel$1","ChartFilterOverlay","_ref","columnMap","inputFilterMap","linkedColumnMap","onAdd","onOpenLinker","waitingFilterMap","waitingInputMap","inputMessage","useMemo","waitingColumns","needsInputFilterValue","columnName","needsLinkValue","columnsText","TextUtils","item","columns","handleAddClick","useCallback","event","handleOpenLinker","isWaitingFilters","isWaitingInput","column","isColumnWaiting","icon","vsWarning","vsPass","FontAwesomeIcon","ButtonOld","ChartColumnSelectorOverlay","onColumnSelected","_onMouseEnter","onMouseLeave","SocketedButton","isChartPanelTableMetadata","metadata","isChartPanelFigureMetadata","isGLChartPanelState","panelState","settings","tableSettings","isChartPanelDehydratedProps","ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread","target","i","source","log","Log","UPDATE_MODEL_DEBOUNCE","hasInputFilter","panel","hasPanelState","ChartPanel","Component","isFilterRequired","filterMap","filter","name","inputFilters","inputFilter","type","links","panelId","link","assertNotNull","columnSelectionValidator","debounce","React","Pending","filterValueMap","prevProps","prevState","makeModel","model","isLinked","isFigureChartModel","resolved","table","dh","isActive","isHidden","localDashboardId","setActiveTool","setDashboardIsolatedLinkerPanelId","ToolType","prevModel","error","PromiseUtils","ChartUtils","figure","sourcePanel","sourcePanelState","IrisGridUtils","update","_ref2","prevSettings","_ref3","InputFilterEvent","_element$getBoundingC","element","rect","x","y","filterMapParam","state","_updatedFilterMap","updatedFilterMap","_ref4","columnType","filterList","_inputFilterMap$get","filterValue","inputFilterValue","prevInputFilters","deletedInputFilters","prevInputFilter","changedInputFilters","forceUpdate","needsUpdate","linkValue","_ref5","defaultTitle","filterTitle","_ref6","newState","isLinkerActive","Plotly","containerRef","isWaitingForFilter","isSelectingColumn","Chart","CSSTransition","ThemeExport","mapStateToProps","ownProps","sourcePanelId","panelTableMap","getTableMapForDashboard","openedPanelMap","getOpenedPanelMapForDashboard","activeTool","getActiveTool","isolatedLinkerPanelId","getIsolatedLinkerPanelIdForDashboard","getColumnSelectionValidatorForDashboard","getInputFiltersForDashboard","getLinksForDashboard","getSettings","ConnectedChartPanel","connect","setActiveToolAction","setDashboardIsolatedLinkerPanelIdAction","ChartPanel$1","UPDATE_DEBOUNCE","DropdownFilter","TableUtils","selectedColumn","selectedIndex","options","columnItem","index","values","val","memoizee","shortType","onChange","isValueShown","_column","_isValueShown","_value","shortid","eventTargetValue","allColumns","valueIndex","_this$dropdownRef$cur","oldValue","oldIsValueShown","_source$columnName","disableLinking","onSourceMouseEnter","onSourceMouseLeave","settingsError","disableCancel","id","columnSelectionDisabled","sourceButtonLabel","columnOptions","valueOptions","selectedOption","disableSave","isFlipped","sourceColumnId","filterColumnId","CardFlip","Select","Button","vsGear","DropdownFilter$1","DROPDOWN_FILTER_DEBOUNCE","dashboardLinks","getColumnsForDashboard","getApi","connector","DropdownFilterPanel","rawValues","formatter","_link$end","_panelTableMap$get","_table$columns$find","FormatterUtils","DateTimeColumnFormatter","_name","_type","timestamp","Formatter","sourceTable","valuesTable","prevSource","prevSourceTable","sourceSize","panelLinks","sendUpdate","_timestamp","prevTimestamp","wasFlipped","skipUpdate","isFlip","detail","_this$dropdownFilterR","_this$dropdownFilterR2","_this$dropdownFilterR3","_this$dropdownFilterR4","_this$getSource","excludePanelIds","sorts","filters","valuesColumn","columnFormats","deepEqual","_ref7","rows","row","settingsErrorMessage","panelErrorMessage","formattedValues","ConnectedDropdownFilterPanel","DropdownFilterPanel$1","NAME_INPUT_PLACEHOLDER","EMPTY_LIST_PLACEHOLDER","FilterSetManager","_document$querySelect","overlay","memoizeOne","filterSets","renameSet","modifiedFilterSets","selectedId","isEmptyList","onUpdateSets","editId","getFilterState","panels","nameInputValue","_nameInputValue$trim","trimmedName","title","_nameInputValue$trim2","restoreFullState","nameInputError","namedFilterSet","updatedModifiedFilterSets","prevFilterSets","newSelectedIndex","newSelectedId","selectedSetIndex","_ref8","_ref9","selectedSet","_ref10","onApply","filterSet","_ref11","_this$renameInputRef$","isNameInputScreen","isRenamingExistingSet","isEmptyEditList","isInitialScreen","isEditListScreen","captureSetIcon","vsCircleLargeFilled","vsDeviceCamera","dhNewCircleLargeFilled","updateSetIcon","vsArrowSmallUp","vsSave","vsCircleSlash","RadioGroup","RadioItem","_ref12","vsEdit","vsTrash","_ref13","dhRefresh","FilterSetManager$1","IrisGridPanelTooltip","_model$rowCount","_model$pendingRowCoun","_model$floatingBottom","_model$floatingTopRow","_model$columnCount","rowCount","formattedRowCount","columnCount","formattedcolumnCount","isLegacyIrisGridPanelMetadata","irisGridPanelMetadata","isIrisGridPanelMetadata","DEBOUNCE_PANEL_STATE_UPDATE","PLUGIN_COMPONENTS","IrisGrid","IrisGridTableModel","ContextMenuRoot","getTableNameFromMetadata","IrisGridPanel","pluginFetchColumns","columnSet","start","Plugin","user","workspace","pluginState","isIrisGridTableModelTemplate","deprecatedProps","isSelectingPartition","partitions","advancedSettings","advancedFilters","customColumnFormatMap","isFilterBarShown","quickFilters","customColumns","reverseType","rollupConfig","showSearchBar","searchValue","selectDistinctColumns","selectedSearchColumns","invertSearchColumns","userColumnWidths","userRowHeights","aggregationSettings","pendingDataMap","frozenColumns","conditionalFormats","columnHeaderGroups","partitionConfig","movedColumns","movedRows","isStuckToBottom","isStuckToRight","irisGridPanelState","irisGridState","gridState","onPanelStateUpdate","oldPanelState","metrics","_panelState","AdvancedSettings","modelParam","irisGridStateOverrides","modelQueue","_irisGridState","m","modelChange","_this$irisGridUtils$g","_this$irisGridUtils","pluginFilters","data","_this$pluginRef$curre","_this$pluginRef$curre2","_this$pluginRef$curre3","tableColumn","onStateChange","isModelReady","dataMap","loadPlugin","_pluginName","irisGrid","IrisGridModel","_gridWrapper$getBound","_allColumnXs$get","_allColumnWidths$get","gridWrapper","columnHeaderHeight","allColumnXs","allColumnWidths","right","columnHeaderMaxDepth","columnIndex","visibleIndex","columnX","columnWidth","indexedQuickFilters","indexedAdvancedFilters","overrides","gridStateOverrides","originalIrisGridStateOverrides","_gridState","_irisGridState2","savedQuickFilters","savedAdvancedFilters","_this$irisGrid$curren","_this$irisGrid$curren2","grid","_model$description","_panelState$pluginSta","getDownloadWorker","theme","childrenContent","permissions","canCopy","canDownloadCsv","DEFAULT_DASHBOARD_ID","getUser","getWorkspace","ConnectedIrisGridPanel","IrisGridPanel$1","InputFilter","propColumn","inputLength","titleLabel","InputFilter$1","INPUT_FILTER_DEBOUNCE","InputFilterPanel","_this$inputFilterRef$","_this$inputFilterRef$2","ConnectedInputFilterPanel","InputFilterPanel$1","hasSetPanelState","FilterSetManagerPanel","configs","config","dashboardOpenedPanelMap","componentName","_state","setDashboardFilterSets","prevAdvancedFilters","prevQuickFilters","inputFilterState","getFilterSetsForDashboard","ConnectedFilterSetManagerPanel","setDashboardFilterSetsAction","FilterSetManagerPanel$1","MarkdownContainer","isEditing","onDoubleClick","MarkdownStartPage","markdown","onDelete","closedMarkdowns","onOpen","onCreate","isDeleteModalShown","toBeDeleted","Modal","ModalHeader","ModalBody","ModalFooter","MarkdownStartPage$1","renderMarkdown","language","Code","child","MarkdownEditor","content","onEditorInitialized","container","Editor","Markdown","MarkdownPanel","closedPanels","clickPositionY","markdownEditorContainer","_this$editor$getModel","_this$editor$getModel2","contentTop","contentScrollTop","contentScrollHeight","totalLines","lineToFocus","dbClickPositionY","editor","PanelEvent","_this$editor","isStartPageShown","markdownEditor","getClosedPanelsForDashboard","ConnectedMarkdownPanel","MarkdownPanel$1","PandasReloadButton","onClick","buttonRef","useRef","handleClick","e","_buttonRef$current","PandasPanel","_this$irisGridRef$cur","_this$irisGridRef$cur2","_this$irisGridRef$cur3","_this$irisGridRef$cur4","shouldFocusGrid","PandasPanel$1","asyncGeneratorStep","gen","resolve","reject","_next","_throw","info","_asyncToGenerator","fn","self","args","err","MockFileStorageTable","items","search","path","expanded","isDirectory","sortedRanges","viewport","_this","_this$onUpdateCallbac","loadedViewportData","isReversed","callback","MockFileStorageTable$1","MockFileStorage","file","newName","_this2","_this3","FileUtils","_this4","allItems","FileNotFoundError","itemDetails","MockFileStorage$1","createChartModel","_x","_x2","_x3","_x4","_x5","_x6","_createChartModel","chartTheme","connection","fetch","tableName","figureName","ChartModelFactory","_figure","_definition","definition","getTimeZone","store","ChartPanelPlugin","forwardRef","ref","useApi","useChartTheme","useConnection","hydratedProps","ChartPanelPlugin$1","ChartWidgetPlugin","setModel","useState","useEffect","cancelled","init","_init","newModel","ChartPluginConfig","PluginType","vsGraph","ChartPluginConfig$1","ChartBuilderPlugin","assertIsDashboardPluginProps","layout","handleCreateChart","root","useListener","ChartBuilderPluginConfig","ChartBuilderPluginConfig$1","flattenArray","accumulator","currentValue","FilterPlugin","registerComponent","dispatch","useDispatch","panelColumns","panelFilters","panelTables","a","aName","bName","aType","bType","array","tableMap","updateDashboardData","handleColumnsChanged","handleFiltersChanged","handleTableChanged","handlePanelUnmount","handleOpenDropdown","focusElement","createNewStack","dragEvent","handleOpenInput","handleOpenFilterSetManager","cleanups","cleanup","FilterPluginConfig","FilterPluginConfig$1","useLoadTablePlugin","plugins","usePlugins","plugin","pluginModule","isTablePlugin","isLegacyTablePlugin","useHydrateGrid","_makeModel","IrisGridModelFactory","GridPanelPlugin","GridPanelPlugin$1","GridWidgetPlugin","GridPluginConfig","dhTable","GridPluginConfig$1","isLinkableFromPanel","p","isLinkablePanel","isLinkableColumn","_column$description","LinkerUtils","end","_LinkerUtils$ALLOWED_","isCompatibleComponent","startColumnType","endColumnType","isCompatibleType","cloneId","clonedLinks","LinkerUtils$1","DROOP","DROOP_EXPONENT","TRIANGLE_HEIGHT","TRIANGLE_BASE","TRIANGLE_TIP","TRIANGLE_HYPOTENUSE","TRIANGLE_THETA","CLIP_RADIUS","HALF_PI","LinkerLink","r","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","LinkerLink$1","LinkerOverlayContent","linkPoint","panelManager","coordinate","onLinksUpdated","newLinks","dialog","dialogX","clamp","dialogY","offset","isDragging","selectedIds","onLinkDeleted","onCancel","disabled","messageText","onLinkSelected","onAllLinksDeleted","onDone","mouse","mode","visibleLinks","_mouse$x","_mouse$y","tmpX","tmpY","vsGripper","Tooltip","GLOBAL_SHORTCUTS","LinkerOverlayContent$1","mapState","setDashboardLinksAction","addDashboardLinksAction","deleteDashboardLinksAction","setDashboardColumnSelectionValidatorAction","Linker","linkInProgress","isolateForPanelId","combinedLinks","_link$start","eventHub","_link$start2","_link$end2","linksToDelete","isAlwaysEndPoint","overrideIsolatedLinkerPanelId","panelComponent","newLink","existingLinkPanelId","panelLinkEnd","existingLinkEnd","existingLinkStart","_linksToDelete","panelLinkStart","_newLink","endPanel","addDashboardLinks","clearAll","setDashboardLinks","deleteDashboardLinks","isolatedLinks","_link$start3","_link$end3","l","timeZone","panelFilterMap","endPanelId","startColumnIndex","isExpandable","isGrouped","text","dateFilterFormatter","DateUtils","cloneConfig","linksToAdd","componentId","setDashboardColumnSelectionValidator","isDraggingPanel","isLinkOverlayShown","linkerOverlayMessage","ConnectedLinker","Linker$1","LinkerPlugin","LinkerPluginConfig","LinkerPluginConfig$1","MarkdownUtils","usedTitles","titleIndex","MarkdownUtils$1","MarkdownPlugin","dehydrateMarkdown","componentState","configProps","dehydrate","handleOpen","openedMarkdowns","_markdown$title","hydrate","MarkdownEvent","MarkdownPluginConfig","MarkdownPluginConfig$1","PandasPanelPlugin","PandasPanelPlugin$1","PandasWidgetPlugin","setIsLoading","setIsLoaded","handleReload","LoadingOverlay","PandasPluginConfig","dhPandas","PandasPluginConfig$1","WrapWidgetPlugin","_plugin$component$dis","Wrapper","C","hasRef","canHaveRef","WidgetLoaderPlugin","supportedTypes","typeMap","isWidgetPlugin","supportedType","_typeMap$get","handlePanelOpen","_widget$title","widget","widgetId","panelProps","deregisterFns","deregister","WidgetLoaderPluginConfig","WidgetLoaderPluginConfig$1","LinkPoint","LinkPointUntyped","Link","Links","User","UIPropTypes","UIPropTypes$1","nullableBoolean","propName","nullableString","CommonPropTypes","CommonPropTypes$1"],"mappings":"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"}