@deephaven/embed-grid 0.59.1-beta.6 → 0.59.1-deferred-api.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/assets/{App-585365a5.js → App-4c423894.js} +2 -2
- package/build/assets/{App-585365a5.js.map → App-4c423894.js.map} +1 -1
- package/build/assets/{index-2e427db2.js → index-464834cc.js} +2 -2
- package/build/assets/{index-2e427db2.js.map → index-464834cc.js.map} +1 -1
- package/build/assets/index-62057e3f.js +4 -0
- package/build/assets/index-62057e3f.js.map +1 -0
- package/build/assets/{useUser-19819f7d.js → useUser-6f1bdc71.js} +2 -2
- package/build/assets/{useUser-19819f7d.js.map → useUser-6f1bdc71.js.map} +1 -1
- package/build/index.html +1 -1
- package/package.json +14 -14
- package/build/assets/index-1cc0d87c.js +0 -4
- package/build/assets/index-1cc0d87c.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-1cc0d87c.js","sources":["../../../utils/dist/ErrorUtils.js","../../../utils/dist/UIConstants.js","../../../components/dist/dialogs/ActionButtonDialogTrigger.js","../../../react-hooks/dist/SelectionUtils.js","../../../react-hooks/dist/SpectrumUtils.js","../../../react-hooks/dist/useIsMountedRef.js","../../../react-hooks/dist/useAsyncInterval.js","../../../react-hooks/dist/useCallbackWithAction.js","../../../react-hooks/dist/useDebouncedCallback.js","../../../react-hooks/dist/useDependentState.js","../../../react-hooks/dist/useEffectNTimesWhen.js","../../../react-hooks/dist/useIsEqualMemo.js","../../../react-hooks/dist/useFormWithDetachedSubmitButton.js","../../../react-hooks/dist/useMappedRef.js","../../../react-hooks/dist/useMappedSelection.js","../../../react-hooks/dist/useOnScrollRef.js","../../../react-hooks/dist/usePopoverOnScrollRef.js","../../../react-hooks/dist/usePromiseFactory.js","../../../react-hooks/dist/usePropChangeCallback.js","../../../react-hooks/dist/useOnScrollOffsetChangeCallback.js","../../../react-hooks/dist/useDebouncedValue.js","../../../react-hooks/dist/useSetAttributesCallback.js","../../../react-hooks/dist/useSpectrumDisableSpellcheckRef.js","../../../react-hooks/dist/useWindowedListData.js","../../../react-hooks/dist/useResizeObserver.js","../../../components/dist/dialogs/ConfirmationDialog.js","../../../components/dist/actions/ConfirmActionButton.js","../../../components/dist/actions/IconActionButton.js","../../../components/dist/AutoCompleteInput.js","../../../components/dist/AutoResizeTextarea.js","../../../components/dist/ButtonGroup.js","../../../components/dist/modal/DebouncedModal.js","../../../components/dist/modal/InfoModal.js","../../../components/dist/modal/ModalFooter.js","../../../components/dist/BasicModal.js","../../../components/dist/ButtonOld.js","../../../components/dist/BulkActionBar.js","../../../components/dist/CardFlip.js","../../../components/dist/Collapse.js","../../../components/dist/TimeInput.js","../../../components/dist/CustomTimeSelect.js","../../../components/dist/DateInput.js","../../../components/dist/DebouncedSearchInput.js","../../../components/dist/EditableItemList.js","../../../components/dist/ErrorBoundary.js","../../../components/dist/HierarchicalCheckboxMenu.js","../../../components/dist/navigation/NavTab.js","../../../components/dist/navigation/NavTabList.js","../../../components/dist/theme/ThemePicker.js","../../../components/dist/theme/Logo.js","../../../components/dist/RandomAreaPlotAnimation.js","../../../components/dist/TextWithTooltip.js","../../../components/dist/SearchableCombobox.js","../../../components/dist/SocketedButton.js","../../../components/dist/TableViewEmptyState.js","../../../components/dist/TimeSlider.js","../../../components/dist/ToastNotification.js","../../../components/dist/ValidateLabelInput.js","../../../jsapi-bootstrap/dist/useCreateClient.js","../../../jsapi-bootstrap/dist/ClientBootstrap.js","../../../jsapi-bootstrap/dist/useClient.js","../../../jsapi-components/dist/HookTestUtils.js","../../../jsapi-utils/dist/MessageUtils.js","../../../jsapi-utils/dist/NoConsolesError.js","../../../jsapi-utils/dist/SessionUtils.js","../../../jsapi-components/dist/useTableListener.js","../../../jsapi-components/dist/ColumnNameError.js","../../../jsapi-components/dist/TableDisconnectError.js","../../../jsapi-components/dist/useTable.js","../../../jsapi-components/dist/useTableColumn.js","../../../jsapi-components/dist/TableInput.js","../../../jsapi-components/dist/useBroadcastChannel.js","../../../jsapi-components/dist/useBroadcastLoginListener.js","../../../jsapi-components/dist/RefreshTokenUtils.js","../../../jsapi-components/dist/RefreshTokenBootstrap.js","../../../jsapi-components/dist/useTableUtils.js","../../../jsapi-components/dist/useCheckIfExistsValue.js","../../../jsapi-components/dist/useDebouncedViewportSearch.js","../../../jsapi-components/dist/useDebouncedViewportSelectionFilter.js","../../../jsapi-components/dist/useFilterConditionFactories.js","../../../jsapi-components/dist/useFilteredItemsWithDefaultValue.js","../../../jsapi-components/dist/useGetItemPosition.js","../../../jsapi-components/dist/useTableSize.js","../../../jsapi-components/dist/useInitializeViewportData.js","../../../jsapi-components/dist/useSetPaddedViewportCallback.js","../../../jsapi-components/dist/useViewportData.js","../../../jsapi-components/dist/useViewportFilter.js","../../../jsapi-components/dist/useSearchableViewportData.js","../../../jsapi-components/dist/useNotNullOrEmptyFilter.js","../../../jsapi-components/dist/useTableClose.js","../../../jsapi-components/dist/usePickerWithSelectedValues.js","../../../jsapi-components/dist/useSelectDistinctTable.js","../../../jsapi-components/dist/useShowOnlyEmptyFilter.js","../../../jsapi-components/dist/useValueFilter.js","../../../app-utils/dist/components/FontBootstrap.js","../../../plugin/dist/PluginsContext.js","../../../plugin/dist/PluginTypes.js","../../../plugin/dist/PluginUtils.js","../../../plugin/dist/usePlugins.js","../../../plugin/dist/WidgetView.js","../../../auth-plugins/dist/AuthPlugin.js","../../../auth-plugins/dist/AuthHandlerTypes.js","../../../auth-plugins/dist/AuthenticationError.js","../../../auth-plugins/dist/AuthPluginBase.js","../../../auth-plugins/dist/AuthPluginAnonymous.js","../../../auth-plugins/dist/AuthPluginParent.js","../../../auth-plugins/dist/LoginForm.js","../../../auth-plugins/dist/Login.js","../../../auth-plugins/dist/AuthPluginPsk.js","../../../auth-plugins/dist/UserUtils.js","../../../chart/dist/plotly/createPlotlyComponent.js","../../../chart/dist/plotly/Plotly.js","../../../chart/dist/ChartModel.js","../../../chart/dist/ChartUtils.js","../../../chart/dist/DownsamplingError.js","../../../chart/dist/Chart.js","../../../chart/dist/FigureChartModel.js","../../../chart/dist/ChartModelFactory.js","../../../chart/dist/ChartTheme.js","../../../chart/dist/MockChartModel.js","../../../chart/dist/plotly/Plot.js","../../../chart/dist/ChartThemeProvider.js","../../../chart/dist/isFigureChartModel.js","../../../chart/dist/useChartTheme.js","../../../golden-layout/dist/config/Config.js","../../../golden-layout/dist/config/ItemConfig.js","../../../golden-layout/dist/utils/EventEmitter.js","../../../golden-layout/dist/container/ItemContainer.js","../../../golden-layout/dist/utils/utils.js","../../../golden-layout/dist/utils/DragListener.js","../../../golden-layout/dist/utils/ReactComponentHandler.js","../../../golden-layout/dist/utils/ConfigMinifier.js","../../../golden-layout/dist/utils/BubblingEvent.js","../../../golden-layout/dist/utils/EventHub.js","../../../golden-layout/dist/controls/BrowserPopout.js","../../../golden-layout/dist/controls/DragProxy.js","../../../golden-layout/dist/controls/DragSource.js","../../../golden-layout/dist/controls/DragSourceFromEvent.js","../../../golden-layout/dist/controls/DropTargetIndicator.js","../../../golden-layout/dist/controls/HeaderButton.js","../../../golden-layout/dist/errors/ConfigurationError.js","../../../golden-layout/dist/items/AbstractContentItem.js","../../../golden-layout/dist/items/Component.js","../../../golden-layout/dist/items/RowOrColumn.js","../../../golden-layout/dist/items/Root.js","../../../golden-layout/dist/items/Stack.js","../../../golden-layout/dist/controls/Tab.js","../../../golden-layout/dist/controls/Header.js","../../../golden-layout/dist/controls/Splitter.js","../../../golden-layout/dist/base.js","../../../golden-layout/dist/LayoutManager.js","../../../golden-layout/dist/GoldenLayoutThemeExport.js","../../../dashboard/dist/layout/LayoutUtils.js","../../../dashboard/dist/PanelPlaceholder.js","../../../dashboard/dist/PanelEvent.js","../../../dashboard/dist/DashboardPlugin.js","../../../dashboard/dist/PanelManager.js","../../../dashboard/dist/PanelErrorBoundary.js","../../../dashboard/dist/DashboardUtils.js","../../../dashboard/dist/layout/LayoutManagerContext.js","../../../dashboard/dist/layout/GLPropTypes.js","../../../dashboard/dist/layout/useListener.js","../../../dashboard/dist/layout/usePanelRegistration.js","../../../dashboard/dist/layout/useDashboardPanel.js","../../../dashboard/dist/layout/useLayoutManager.js","../../../redux/dist/reducers/common/replaceByIdReducer.js","../../../redux/dist/reducerRegistry.js","../../../dashboard/dist/redux/actionTypes.js","../../../dashboard/dist/redux/reducers/dashboardData.js","../../../dashboard/dist/redux/reducers/index.js","../../../dashboard/dist/redux/selectors.js","../../../dashboard/dist/redux/actions.js","../../../dashboard/dist/redux/index.js","../../../dashboard/dist/DashboardPanelWrapper.js","../../../dashboard/dist/DashboardLayout.js","../../../dashboard/dist/Dashboard.js","../../../dashboard/dist/DashboardConstants.js","../../../console/dist/monaco/MonacoThemeProvider.js","../../../iris-grid/dist/IrisGridTestUtils.js","../../../iris-grid/dist/TableViewportUpdater.js","../../../iris-grid/dist/TreeTableViewportUpdater.js","../../../app-utils/dist/plugins/remote-component.config.js","../../../app-utils/dist/plugins/loadRemoteModule.js","../../../app-utils/dist/plugins/PluginUtils.js","../../../app-utils/dist/plugins/RemoteComponent.js","../../../app-utils/dist/components/PluginsBootstrap.js","../../../app-utils/dist/components/LoginNotifier.js","../../../app-utils/dist/components/AuthBootstrap.js","../../../app-utils/dist/components/ConnectionBootstrap.js","../../../app-utils/dist/utils/ConnectUtils.js","../../../app-utils/dist/components/FontsLoaded.js","../../../app-utils/dist/components/ServerConfigBootstrap.js","../../../app-utils/dist/components/useServerConfig.js","../../../app-utils/dist/components/UserBootstrap.js","../../../app-utils/dist/components/ThemeBootstrap.js","../../../app-utils/dist/components/AppBootstrap.js"],"sourcesContent":["/**\n * Returns an error message from an object. Guaranteed not to be an empty string.\n * @param error Error object to get the message from.\n * @returns Error message, or undefined if there is no message.\n */\nexport function getErrorMessage(error) {\n var errorObj = error;\n if (error instanceof CustomEvent) {\n errorObj = error.detail;\n }\n var message = '';\n if (errorObj instanceof Error) {\n message = errorObj.message;\n } else if (errorObj != null) {\n message = \"\".concat(errorObj);\n }\n message = message.trim();\n if (message.length > 0) {\n return message;\n }\n return undefined;\n}\nexport default getErrorMessage;\n//# sourceMappingURL=ErrorUtils.js.map","export var ACTION_ICON_HEIGHT = 24;\nexport var COMBO_BOX_ITEM_HEIGHT = 32;\nexport var COMBO_BOX_TOP_OFFSET = 4;\nexport var LIST_VIEW_ROW_HEIGHT = 32;\nexport var TABLE_ROW_HEIGHT = 33;\nexport var SCROLL_DEBOUNCE_MS = 150;\nexport var SEARCH_DEBOUNCE_MS = 200;\nexport var VIEWPORT_SIZE = 500;\nexport var VIEWPORT_PADDING = 250;\nexport var SPELLCHECK_FALSE_ATTRIBUTE = {\n spellCheck: false\n};\n//# sourceMappingURL=UIConstants.js.map","var _excluded = [\"ariaLabel\", \"icon\", \"isQuiet\", \"labelText\", \"children\", \"onOpenChange\", \"tooltip\"];\nfunction 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 _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport { ActionButton, DialogTrigger, Icon, Text } from '@adobe/react-spectrum';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Tooltip } from \"../popper/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Dialog trigger based on an ActionButton.\n */\nexport function ActionButtonDialogTrigger(_ref) {\n var {\n ariaLabel,\n icon,\n isQuiet,\n labelText,\n children,\n onOpenChange,\n tooltip\n } = _ref,\n styleProps = _objectWithoutProperties(_ref, _excluded);\n var iconClassName = labelText == null && tooltip != null ? 'action-button-icon-with-tooltip' : undefined;\n return /*#__PURE__*/_jsxs(DialogTrigger, {\n type: \"popover\",\n onOpenChange: onOpenChange,\n children: [/*#__PURE__*/_jsxs(ActionButton\n // eslint-disable-next-line react/jsx-props-no-spreading\n , _objectSpread(_objectSpread({}, styleProps), {}, {\n \"aria-label\": ariaLabel !== null && ariaLabel !== void 0 ? ariaLabel : labelText,\n isQuiet: isQuiet,\n children: [/*#__PURE__*/_jsx(Icon, {\n UNSAFE_className: iconClassName,\n children: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: icon\n })\n }), labelText == null ? null : /*#__PURE__*/_jsx(Text, {\n children: labelText\n }), tooltip == null ? null : /*#__PURE__*/_jsx(Tooltip, {\n children: tooltip\n })]\n })), children]\n });\n}\nexport default ActionButtonDialogTrigger;\n//# sourceMappingURL=ActionButtonDialogTrigger.js.map","import { generateRange } from '@deephaven/utils';\n\n/**\n * Returns the number of selected items or 'all' if all items are selected.\n * @param size Total size of collection that can have selections\n * @param selection Set of selected keys or 'all'\n */\nexport function getSelectedItemCountOrAll(size, selection) {\n if (size === 0) {\n return 0;\n }\n if (selection === 'all' || size === selection.size) {\n return 'all';\n }\n return selection.size;\n}\n\n/**\n * Check 2 SelectionT objects for value equality.\n * @param selectionA\n * @param selectionB\n */\nexport function isSelectionEqual(selectionA, selectionB) {\n if (selectionA === selectionB) {\n return true;\n }\n if (selectionA === 'all' || selectionB === 'all') {\n return false;\n }\n if (selectionA.size !== selectionB.size) {\n return false;\n }\n return [...selectionA.keys()].every(key => selectionB.has(key));\n}\n\n/**\n * Check 2 `SelectionMaybeInverted` instances for value equality.\n * @param selectionA\n * @param selectionB\n */\nexport function isSelectionMaybeInvertedEqual(selectionA, selectionB) {\n return selectionA.isInverted === selectionB.isInverted && isSelectionEqual(selectionA.selection, selectionB.selection);\n}\n\n/**\n * Map a React Spectrum `Selection` to another `Selection`\n * @param selectedItemKeys\n * @param getItem\n * @param mapItem\n */\nexport function mapSelection(selectedItemKeys, getItem, mapItem) {\n if (selectedItemKeys === 'all') {\n return 'all';\n }\n var keys = [...selectedItemKeys.keys()];\n return new Set(keys.map(key => mapItem(getItem(key))));\n}\n\n/**\n * Takes a Selection state and determines if there is a more optimal selection\n * that can be used. For example, if the user selects all and then deselects an\n * item, we want to filter by \"not that value\" instead of equal to all selected\n * values. Similarly, if 'all' items are selected, we want to optimize this as\n * \"no filter\".\n * @param selection The selection to optimize\n * @param totalRecords The total number of records that can potentially be selected\n */\nexport function optimizeSelection(selection, totalRecords) {\n var isInverted = selection === 'all' || selection.size > totalRecords / 2;\n var optimizedSelection = selection;\n if (isInverted) {\n optimizedSelection = selection === 'all' ? new Set() : new Set(\n // Create a new set from any key that is not selected\n [...generateRange(0, totalRecords - 1)].filter(i => !selection.has(String(i))).map(i => String(i)));\n }\n return {\n selection: optimizedSelection,\n isInverted\n };\n}\n//# sourceMappingURL=SelectionUtils.js.map","/**\n * Creates validation props for a Spectrum field. If `isValid` is true, returns\n * empty props. If false, returns { errorMessage, validationState: 'invalid' }\n * @param isValid Whether props represent valid state\n * @param errorMessage Error message in the case `isValid` is false\n */\nexport function createValidationProps(isValid, errorMessage) {\n if (isValid) {\n return {};\n }\n return {\n errorMessage,\n validationState: 'invalid'\n };\n}\n\n/**\n * Extract DOM node from React Spectrum component ref.\n * @param ref\n */\nexport function extractSpectrumHTMLElement(ref) {\n var _ref$UNSAFE_getDOMNod;\n return (_ref$UNSAFE_getDOMNod = ref === null || ref === void 0 ? void 0 : ref.UNSAFE_getDOMNode()) !== null && _ref$UNSAFE_getDOMNod !== void 0 ? _ref$UNSAFE_getDOMNod : null;\n}\n\n/**\n * Extract lastElementChild from DOM element for given React Spectrum component\n * ref.\n * @param ref\n */\nexport function extractSpectrumLastChildHTMLElement(ref) {\n var maybeHTMLElement = ref === null || ref === void 0 ? void 0 : ref.UNSAFE_getDOMNode().lastElementChild;\n return identityExtractHTMLElement(maybeHTMLElement);\n}\n\n/**\n * Find the popover associated with a given Spectrum ComboBox ref.\n * @param ref\n */\nexport function findSpectrumComboBoxScrollArea(ref) {\n var maybeHTMLElement = ref === null || ref === void 0 ? void 0 : ref.UNSAFE_getDOMNode();\n var input = maybeHTMLElement === null || maybeHTMLElement === void 0 ? void 0 : maybeHTMLElement.querySelector('input');\n var popupId = input === null || input === void 0 ? void 0 : input.getAttribute('aria-controls');\n var scrollArea = popupId == null ? null : document.getElementById(popupId);\n return scrollArea;\n}\n\n/**\n * Returns the given object if it is an HTMLElement. Otherwise returns null.\n * @param maybeHTMLElement\n */\nexport function identityExtractHTMLElement(maybeHTMLElement) {\n return maybeHTMLElement instanceof HTMLElement ? maybeHTMLElement : null;\n}\n//# sourceMappingURL=SpectrumUtils.js.map","import { useEffect, useRef } from 'react';\n\n/**\n * Returns a ref which tracks whether the component is mounted or not.\n */\nexport function useIsMountedRef() {\n var isMountedRef = useRef(false);\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n return isMountedRef;\n}\nexport default useIsMountedRef;\n//# sourceMappingURL=useIsMountedRef.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, useRef } from 'react';\nimport Log from '@deephaven/log';\nimport { useIsMountedRef } from \"./useIsMountedRef.js\";\nvar log = Log.module('useAsyncInterval');\n\n/**\n * Calls the given async callback at a target interval.\n *\n * If the callback takes less time than the target interval, the target interval\n * for the next tick will be adjusted to target the remaining time in the current\n * interval.\n *\n * e.g. If the target interval is 1000ms, and the callback takes 50ms to resolve,\n * the next tick will be scheduled for 950ms from now via `setTimeout(callback, 950)`.\n *\n * If the callback takes longer than the target interval, the next tick will be\n * scheduled immediately via `setTimeout(callback, 0)`. In such cases, the time\n * between ticks may be > than the target interval, but this guarantees that\n * a callback won't be scheduled until after the previous one has resolved.\n * @param callback Callback to call at the target interval\n * @param targetIntervalMs Target interval in milliseconds to call the callback\n */\nexport function useAsyncInterval(callback, targetIntervalMs) {\n var isMountedRef = useIsMountedRef();\n var setTimeoutRef = useRef(0);\n var trackingCountRef = useRef(0);\n var trackingStartedRef = useRef(null);\n var tick = useCallback( /*#__PURE__*/_asyncToGenerator(function* () {\n var now = Date.now();\n trackingCountRef.current += 1;\n\n // If this is our first tick, treat it as if we've already waited the full\n // interval, otherwise calculate the elapsed time since the last tick\n var elapsedSinceLastTick = trackingStartedRef.current == null ? targetIntervalMs : now - trackingStartedRef.current;\n trackingStartedRef.current = now;\n try {\n yield callback();\n } catch (err) {\n log.error('A tick error occurred:', err);\n }\n if (!isMountedRef.current) {\n return;\n }\n elapsedSinceLastTick += Date.now() - trackingStartedRef.current;\n\n // Calculate any elapsed time beyond the target interval.\n var overage = Math.max(0, elapsedSinceLastTick - targetIntervalMs);\n var nextTickInterval = Math.max(0, targetIntervalMs - overage);\n setTimeoutRef.current = window.setTimeout(tick, nextTickInterval);\n }), [callback, isMountedRef, targetIntervalMs]);\n useEffect(() => {\n trackingStartedRef.current = null;\n tick();\n return () => {\n window.clearTimeout(setTimeoutRef.current);\n };\n }, [targetIntervalMs, tick]);\n}\nexport default useAsyncInterval;\n//# sourceMappingURL=useAsyncInterval.js.map","import { useCallback } from 'react';\n\n/**\n * Wrap a callback function + an additional \"action\" function in\n * a new function. The new function takes the parameters belonging to\n * the callback and passes them through. The action function will\n * not receive any parameters.\n * @param callback Function\n * @param action Parameterless function to call after the callback\n */\nexport function useCallbackWithAction(callback, action) {\n return useCallback(function () {\n var result = callback(...arguments);\n action();\n return result;\n }, [action, callback]);\n}\nexport default useCallbackWithAction;\n//# sourceMappingURL=useCallbackWithAction.js.map","import { useEffect, useMemo } from 'react';\nimport debounce from 'lodash.debounce';\n\n/**\n * Wraps a given callback in a cancelable, debounced function. The debounced\n * callback is automatically cancelled if the callback reference changes or the\n * component unmounts.\n * @param callback callback function to debounce\n * @param debounceMs debounce milliseconds\n * @returns a cancelable, debounced function\n */\nexport function useDebouncedCallback(callback, debounceMs) {\n var debouncedCallback = useMemo(() => debounce(callback, debounceMs), [callback, debounceMs]);\n useEffect(() => () => debouncedCallback.cancel(), [debouncedCallback]);\n return debouncedCallback;\n}\nexport default useDebouncedCallback;\n//# sourceMappingURL=useDebouncedCallback.js.map","import { useEffect, useState } from 'react';\n\n/**\n * Returns a stateful value, and a function to update it. The value will also\n * be updated if the input value changes.\n * @param inputValue This will be used as the initial state value and will also\n * update the state if it changes.\n */\nexport function useDependentState(inputValue) {\n var [state, setState] = useState(inputValue);\n useEffect(() => {\n setState(inputValue);\n }, [inputValue]);\n return [state, setState];\n}\nexport default useDependentState;\n//# sourceMappingURL=useDependentState.js.map","import { useEffect, useRef } from 'react';\n\n/**\n * Custom useEffect hook that runs an effect function up to `n` times as long\n * as a given `condition` value is true.\n *\n * The effect will be evaluated whenever the dependency array, the value of `n`,\n * or the `condition` value changes. If the counter is < n and the condition is\n * true, the effectCallback will be run, and the counter will be incremented.\n * Note that the counter will never get reset even if parameters change.\n * @param effectCallback Effect function to run\n * @param effectCallbackDependencies Dependencies for the effect function\n * @param n Number of times to run when condition is met\n * @param condition Condition that must be true to run\n */\nexport function useEffectNTimesWhen(effectCallback, effectCallbackDependencies, n, condition) {\n var countRef = useRef(0);\n useEffect(() => {\n if (countRef.current >= n) {\n return;\n }\n if (condition) {\n countRef.current += 1;\n effectCallback();\n }\n // The `effectCallback` is intentionally excluded from the dependencies list\n // below since its reference may change on every render. Instead, the\n // `effectCallbackDependencies` arg is used to indicate when a change should\n // invalidate the `effectCallback` reference. The eslint configuration for\n // `react-hooks/exhaustive-deps` will validate that the `effectCallback` and\n // `effectCallbackDependencies` args are in sync at the call site of\n // `useEffectNTimesWhen`.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [n, condition, ...effectCallbackDependencies]);\n}\nexport default useEffectNTimesWhen;\n//# sourceMappingURL=useEffectNTimesWhen.js.map","import { useRef } from 'react';\n\n/**\n * Memoize a value based on an isEqual predicate instead of reference equality.\n * @param value Value to memoize\n * @param isEqual Predicate to see if value has changed since last render\n */\nexport function useIsEqualMemo(value, isEqual) {\n var previousValueRef = useRef(value);\n var currentValue = isEqual(previousValueRef.current, value) ? previousValueRef.current : value;\n previousValueRef.current = currentValue;\n return currentValue;\n}\nexport default useIsEqualMemo;\n//# sourceMappingURL=useIsEqualMemo.js.map","import { useCallback, useMemo } from 'react';\nimport shortid from 'shortid';\nfunction preventDefault(event) {\n event.preventDefault();\n}\n/**\n * Returns props to associate a form with a submit button. It generates a unique\n * id that will be assigned to the form `id` attribute and a button `form`\n * attribute. Useful for cases where a submit button exists outside of the form.\n *\n * e.g.\n *\n * const preventDefaultFormSubmit = true;\n * const { formProps, submitButtonProps } = useFormWithDetachedSubmitButton(preventDefaultFormSubmit);\n *\n * <form {...formProps}></form>\n * <button {...submitButtonProps} type=\"submit\">Submit</button>\n *\n * @param enableDefaultFormSubmitBehavior Optionally enable default form submit behavior.\n * @returns props that can be spread on a form component + a submit button component.\n */\nexport default function useFormWithDetachedSubmitButton() {\n var enableDefaultFormSubmitBehavior = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var formId = useMemo(() => \"useSubmitButtonRef-\".concat(shortid()), []);\n var submitButtonRef = useCallback(buttonEl => {\n buttonEl === null || buttonEl === void 0 ? void 0 : buttonEl.UNSAFE_getDOMNode().setAttribute('form', formId);\n }, [formId]);\n var formProps = useMemo(() => ({\n id: formId,\n onSubmit: enableDefaultFormSubmitBehavior ? undefined : preventDefault\n }), [formId, enableDefaultFormSubmitBehavior]);\n var submitButtonProps = useMemo(() => ({\n form: formId,\n ref: submitButtonRef\n }), [formId, submitButtonRef]);\n return {\n formProps,\n submitButtonProps\n };\n}\n//# sourceMappingURL=useFormWithDetachedSubmitButton.js.map","import { useCallback } from 'react';\n\n/**\n * Returns a callback ref that will map it's argument\n * and set the given targetRef with the result.\n * @param targetRef Ref to assign mapped result to\n * @param map Function to map given ref value to another value\n */\nexport function useMappedRef(targetRef, map) {\n return useCallback(ref => {\n if (typeof targetRef === 'function') {\n targetRef(map(ref));\n } else {\n // eslint-disable-next-line no-param-reassign\n targetRef.current = map(ref);\n }\n }, [map, targetRef]);\n}\nexport default useMappedRef;\n//# sourceMappingURL=useMappedRef.js.map","import { useMemo } from 'react';\nimport { mapSelection, optimizeSelection } from \"./SelectionUtils.js\";\n/**\n * Given viewport data, maps the current selectedKeys to an optimized selection.\n * The keys are mapped to new values via a `mapItem` function.\n * @param viewportData The viewport to map selections for\n * @param mapItem A function to map an item in the viewport to a new value\n */\nexport function useMappedSelection(viewportData, mapItem) {\n var {\n getItem,\n selectedKeys,\n items\n } = viewportData;\n return useMemo(() => {\n var {\n selection,\n isInverted\n } = optimizeSelection(selectedKeys, items.length);\n return {\n selection: mapSelection(selection, getItem, mapItem),\n isInverted\n };\n }, [selectedKeys, items.length, getItem, mapItem]);\n}\nexport default useMappedSelection;\n//# sourceMappingURL=useMappedSelection.js.map","import { useCallback, useEffect, useRef } from 'react';\nimport { identityExtractHTMLElement } from '@deephaven/utils';\n\n/**\n * Return a ref that can be used to subscribe to scroll events.\n * @param onScroll Scroll event handler\n * @param extractHTMLElement Optional extraction handler to get the HTML element\n * to subscribe to scroll events. If no extraction handler is given, the argument\n * passed to the callback will be subscribed to if it is an HTML element.\n */\nexport function useOnScrollRef(onScroll) {\n var extractHTMLElement = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : identityExtractHTMLElement;\n var cleanupRef = useRef();\n\n // Cleanup on unmount\n useEffect(() => () => {\n var _cleanupRef$current;\n return (_cleanupRef$current = cleanupRef.current) === null || _cleanupRef$current === void 0 ? void 0 : _cleanupRef$current.call(cleanupRef);\n }, []);\n return useCallback(ref => {\n var _cleanupRef$current2;\n (_cleanupRef$current2 = cleanupRef.current) === null || _cleanupRef$current2 === void 0 ? void 0 : _cleanupRef$current2.call(cleanupRef);\n var element = extractHTMLElement(ref);\n if (!element) {\n return;\n }\n element.addEventListener('scroll', onScroll);\n\n // Hold a reference to a function that can cleanup scroll event registration\n cleanupRef.current = () => {\n element.removeEventListener('scroll', onScroll);\n cleanupRef.current = undefined;\n };\n }, [extractHTMLElement, onScroll]);\n}\nexport default useOnScrollRef;\n//# sourceMappingURL=useOnScrollRef.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, useRef, useState } from 'react';\n/**\n * This hook provides a way to attach a scroll event listener to a scroll area\n * inside a popover component. Popovers for picker components only exist when\n * the picker is open, and they get attached to the DOM outside of the child\n * tree, so we have to provide a function that can find the target DOM element\n * to attach the listener to.\n * @param findScrollArea Function to retreive the DOM element to attach a scroll\n * event listener to\n * @param onScroll Scroll event listener function to attach\n * @param getInitialScrollPosition Function to retrieve the initial scroll position.\n */\nexport function usePopoverOnScrollRef(findScrollArea, onScroll, getInitialScrollPosition) {\n var ref = useRef(null);\n var [scrollAreaEl, setScrollAreaEl] = useState(null);\n var scrollToInitialPosition = useCallback( /*#__PURE__*/_asyncToGenerator(function* () {\n if (scrollAreaEl == null || getInitialScrollPosition == null) {\n return;\n }\n var position = yield getInitialScrollPosition();\n scrollAreaEl.scroll(0, position);\n }), [getInitialScrollPosition, scrollAreaEl]);\n useEffect(() => {\n scrollAreaEl === null || scrollAreaEl === void 0 ? void 0 : scrollAreaEl.addEventListener('scroll', onScroll);\n scrollToInitialPosition();\n return () => {\n scrollAreaEl === null || scrollAreaEl === void 0 ? void 0 : scrollAreaEl.removeEventListener('scroll', onScroll);\n };\n }, [onScroll, scrollAreaEl, scrollToInitialPosition]);\n\n // Popovers for picker components only exist when the popover opens, so we\n // have to wait to attach scroll listeners\n var onOpenChange = useCallback(isOpen => {\n if (isOpen) {\n // setTimeout is necessary for popover to be available\n setTimeout(() => {\n setScrollAreaEl(findScrollArea(ref.current));\n }, 0);\n }\n }, [findScrollArea]);\n return {\n ref,\n onOpenChange\n };\n}\nexport default usePopoverOnScrollRef;\n//# sourceMappingURL=usePopoverOnScrollRef.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); }); }; }\n/* eslint-disable import/prefer-default-export */\nimport { useState, useCallback, useEffect } from 'react';\n\n/**\n * Configuration options for `usePromiseFactory` hook.\n */\n\n/**\n * Return type of `usePromiseFactory` hook.\n */\n\n/**\n * Manages the result of a promise factory function in a synchronous way.\n * @param promiseFactory The factory function which creates the promise to be awaited.\n * @param args arguments to pass to the factory function.\n * @returns object containing resolved data or error information.\n */\nexport default function usePromiseFactory(promiseFactory, args) {\n var {\n autoLoad = true\n } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var [data, setData] = useState(null);\n var [error, setError] = useState(null);\n var [isLoading, setIsLoading] = useState(false);\n var loadPromise = useCallback( /*#__PURE__*/_asyncToGenerator(function* () {\n setIsLoading(true);\n try {\n var resolved = yield promiseFactory(...args);\n setData(resolved);\n setError(null);\n } catch (err) {\n setData(null);\n setError(err);\n } finally {\n setIsLoading(false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }), [promiseFactory, ...args]);\n useEffect(() => {\n if (autoLoad) {\n loadPromise();\n }\n }, [autoLoad, loadPromise]);\n return {\n data,\n error,\n isError: error != null,\n isLoading,\n reload: loadPromise\n };\n}\n//# sourceMappingURL=usePromiseFactory.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 { useCallback } from 'react';\n\n/**\n * Returns a callback that can update a prop on an object. The update is done\n * by making a copy of the original object with an updated version of the prop\n * and passing the copy to a callback function.\n *\n * e.g.\n * const [value, setValue] = useState({\n * first: 'John',\n * last: 'Doe'\n * });\n *\n * const onLastNameChange = usePropChangeCallback(\n * value,\n * 'last',\n * setValue\n * );\n *\n * // This will create a new object { first: 'John', last: 'Smith' } and pass it to `setValue`\n * onLastNameChange('Smith');\n *\n * The optional `defaultValue` controls the callback signature. If provided, the\n * callback will support passing in null or undefined values.\n *\n * e.g.\n *\n * const onLastNameChange = usePropChangeCallback(\n * value,\n * 'last',\n * setValue,\n * ''\n * );\n *\n * onLastNameChange('Smith'); // { first: 'John', last: 'Smith' }\n * onLastNameChange(null); // { first: 'John', last: '' }\n * onLastNameChange(undefined); // { first: 'John', last: '' }\n *\n * @param value The object to update\n * @param propName The prop name to update\n * @param onChange A callback to pass the newly created object with updated prop value\n * @param defaultValue Optional default value. If provided, the returned callback\n * signature will allow null or undefined values to be passed in.\n */\n\nexport function usePropChangeCallback(value, propName, onChange, defaultValue) {\n var hasDefault = arguments.length === 4;\n return useCallback(propValue => {\n var newValue = hasDefault ? propValue !== null && propValue !== void 0 ? propValue : defaultValue : propValue;\n onChange(_objectSpread(_objectSpread({}, value), {}, {\n [propName]: newValue\n }));\n }, [onChange, value, propName, hasDefault, defaultValue]);\n}\nexport default usePropChangeCallback;\n//# sourceMappingURL=usePropChangeCallback.js.map","import { useCallback, useRef } from 'react';\n\n/**\n * Returns a callback that transforms a scroll event handler to an offset\n * change handler. Supports an optional debounce as well.\n * @param offsetSize\n * @param onChange\n * @param debounceMs\n */\nexport function useOnScrollOffsetChangeCallback(offsetSize, onChange) {\n var debounceMs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var debounceTimeout = useRef();\n var previousOffsetRef = useRef(0);\n return useCallback(event => {\n // clear previous debounce timer\n window.clearTimeout(debounceTimeout.current);\n debounceTimeout.current = window.setTimeout(() => {\n var offset = Math.floor(event.target.scrollTop / offsetSize);\n if (previousOffsetRef.current !== offset) {\n previousOffsetRef.current = offset;\n onChange(offset);\n }\n }, debounceMs);\n }, [debounceMs, offsetSize, onChange]);\n}\nexport default useOnScrollOffsetChangeCallback;\n//# sourceMappingURL=useOnScrollOffsetChangeCallback.js.map","import { useEffect, useState } from 'react';\n\n/**\n * Debounces a value.\n * Returns the initial value immediately.\n * Returns the latest value after no changes have occurred for the debounce duration.\n * @param value Value to debounce\n * @param debounceMs Amount of time to debounce\n * @returns The debounced value\n */\nexport function useDebouncedValue(value, debounceMs) {\n var [debouncedValue, setDebouncedValue] = useState(value);\n useEffect(() => {\n var timeoutId = setTimeout(() => {\n setDebouncedValue(value);\n }, debounceMs);\n return () => {\n clearTimeout(timeoutId);\n };\n }, [value, debounceMs]);\n return debouncedValue;\n}\nexport default useDebouncedValue;\n//# sourceMappingURL=useDebouncedValue.js.map","import { useCallback } from 'react';\n\n/**\n * Returns a callback that sets attributes on elements based on given selectors.\n * @param attributes Attributes object containing prop name + values to set\n * @param selectors Optional `querySelector` param to target child elements. If\n * omitted, will target the rootEl\n */\nexport function useSetAttributesCallback(attributes, selectors) {\n return useCallback(rootEl => {\n if (rootEl == null) {\n return;\n }\n var targets = selectors == null ? [rootEl] : rootEl.querySelectorAll(selectors);\n targets.forEach(target => {\n Object.entries(attributes).forEach(_ref => {\n var [prop, value] = _ref;\n target.setAttribute(prop, value);\n });\n });\n }, [attributes, selectors]);\n}\nexport default useSetAttributesCallback;\n//# sourceMappingURL=useSetAttributesCallback.js.map","import { SPELLCHECK_FALSE_ATTRIBUTE } from '@deephaven/utils';\nimport { extractSpectrumHTMLElement } from \"./SpectrumUtils.js\";\nimport useMappedRef from \"./useMappedRef.js\";\nimport useSetAttributesCallback from \"./useSetAttributesCallback.js\";\n/**\n * Returns a callback ref that can be assigned to a React Spectrum component.\n * to set `spellCheck=false` on child elements based on given selectors.\n * @param selectors Optional `querySelector` argument to target child elements.\n * If omitted, the attributes will be applied to the root element returned by\n * `UNSAFE_getDOMNode()` on the component ref.\n */\nexport function useSpectrumDisableSpellcheckRef(selectors) {\n var disableSpellcheck = useSetAttributesCallback(SPELLCHECK_FALSE_ATTRIBUTE, selectors);\n return useMappedRef(disableSpellcheck, extractSpectrumHTMLElement);\n}\nexport default useSpectrumDisableSpellcheckRef;\n//# sourceMappingURL=useSpectrumDisableSpellcheckRef.js.map","import { useCallback, useMemo, useState } from 'react';\n\n/**\n * Subset of React Stately ListData + bulkUpdate.\n */\n\n/**\n * Manages state associated with an immutable list of data.\n *\n * This hook is a revised version of React Stately's\n * `useListData` hook with a couple of improvements.\n * - Added support for bulk update\n * - Proper memoization of the return object + its members\n * - Using Iterable instead of spread function arguments to avoid stack overflow\n * for large lists\n * - findItem - method to look for item without throwing an exception if it isn't found\n *\n * @param options.getKey Optional function to derive a key from an item in the list\n */\nexport function useWindowedListData() {\n var {\n getKey = defaultGetKey\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var [items, setItems] = useState([]);\n var [selectedKeys, setSelectedKeys] = useState(() => new Set());\n\n /** Determine if key matches an item's key */\n var matchKey = useCallback(key => item => getKey(item) === key, [getKey]);\n\n /** Search for item with given key. Returns null if not found. */\n var findItem = useCallback(key => {\n var _items$find;\n return (_items$find = items.find(matchKey(key))) !== null && _items$find !== void 0 ? _items$find : null;\n }, [items, matchKey]);\n\n /**\n * Get item with the given key. Throws an error if matching item does not exist.\n * Use `findItem` to return null instead of throwing an error.\n */\n var getItem = useCallback(key => {\n var item = findItem(key);\n if (item == null) {\n throw new Error(\"No item found matching key: \".concat(key));\n }\n return item;\n }, [findItem]);\n\n /** Append items to the end of the list */\n var append = useCallback(values => {\n setItems(prevItems => [...prevItems, ...values]);\n }, []);\n\n /** Insert items starting at the given index */\n var insert = useCallback((index, values) => {\n setItems(prevItems => [...prevItems.slice(0, index), ...values, ...prevItems.slice(index)]);\n }, []);\n\n /** Remove items with the given keys */\n var remove = useCallback(keys => {\n var keySet = new Set(keys);\n setItems(prevItems => prevItems.filter(item => !keySet.has(getKey(item))));\n }, [getKey]);\n\n /** Put a given item in the slot corresponding to a given key */\n var update = useCallback((key, item) => {\n var i = items.findIndex(matchKey(key));\n if (i === -1) {\n return;\n }\n setItems(prevItems => [...prevItems.slice(0, i), item, ...prevItems.slice(i + 1)]);\n }, [items, matchKey]);\n\n /**\n * Bulk update items from a map of keys to items. It is optimized to only\n * re-create the list 1x.\n */\n var bulkUpdate = useCallback(itemMap => {\n if (itemMap.size === 0) {\n return;\n }\n var indices = [];\n var indexMap = new Map();\n\n // Build a sorted array of indices for keys we want to update + a map\n // of those indices to their respective keys.\n // eslint-disable-next-line no-restricted-syntax\n for (var _key of itemMap.keys()) {\n var i = items.findIndex(matchKey(_key));\n indices.push(i);\n indexMap.set(i, _key);\n }\n indices.sort((a, b) => a - b);\n var newItems = [];\n\n // Build a new items array replacing any items corresponding to our\n // indices array.\n items.forEach((item, i) => {\n if (indices[0] === i) {\n /* eslint-disable @typescript-eslint/no-non-null-assertion */\n var _key2 = indexMap.get(indices.shift());\n var newItem = itemMap.get(_key2);\n /* eslint-enable @typescript-eslint/no-non-null-assertion */\n\n newItems.push(newItem);\n } else {\n newItems.push(item);\n }\n });\n setItems(newItems);\n }, [items, matchKey]);\n var listData = useMemo(() => ({\n items,\n selectedKeys,\n append,\n bulkUpdate,\n findItem,\n getItem,\n insert,\n remove,\n setItems,\n setSelectedKeys,\n update\n }), [append, bulkUpdate, findItem, getItem, insert, items, remove, setItems, selectedKeys, update]);\n return listData;\n}\n\n/**\n * Default getKey function simply returns item.key if the property exists. If\n * not, an error is thrown.\n * @param item\n */\nexport function defaultGetKey(item) {\n var hasKey = item != null && typeof item === 'object' && 'key' in item;\n if (!hasKey) {\n throw new Error('Item does not have a `key` prop.');\n }\n return item.key;\n}\nexport default useWindowedListData;\n//# sourceMappingURL=useWindowedListData.js.map","import { useEffect } from 'react';\n\n/**\n * Listen for resize events on an element using ResizeObserver\n * @param element Element to listen for resizing on\n * @param onResize Callback triggered when the element resizes\n */\nexport function useResizeObserver(element, onResize) {\n useEffect(() => {\n if (element == null) {\n return;\n }\n var resizeObserverInstance = new window.ResizeObserver(onResize);\n resizeObserverInstance.observe(element);\n return () => {\n if (element != null) {\n resizeObserverInstance.unobserve(element);\n }\n };\n }, [element, onResize]);\n}\nexport default useResizeObserver;\n//# sourceMappingURL=useResizeObserver.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\nimport { Button, ButtonGroup, Content, Dialog, Divider, Form, Heading } from '@adobe/react-spectrum';\nimport { useFormWithDetachedSubmitButton } from '@deephaven/react-hooks';\nimport styles from \"../SpectrumComponent.module.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nexport function ConfirmationDialog(_ref) {\n var {\n heading,\n confirmationButtonLabel,\n children,\n onCancel,\n onConfirm\n } = _ref;\n var {\n formProps,\n submitButtonProps\n } = useFormWithDetachedSubmitButton();\n return /*#__PURE__*/_jsxs(Dialog, {\n children: [/*#__PURE__*/_jsx(Heading, {\n level: 3,\n UNSAFE_className: styles.spectrumDialogComponentHeading,\n children: heading\n }), /*#__PURE__*/_jsx(Divider, {}), /*#__PURE__*/_jsx(Content, {\n children: /*#__PURE__*/_jsx(Form\n // eslint-disable-next-line react/jsx-props-no-spreading\n , _objectSpread(_objectSpread({}, formProps), {}, {\n children: children\n }))\n }), /*#__PURE__*/_jsxs(ButtonGroup, {\n children: [/*#__PURE__*/_jsx(Button, {\n variant: \"secondary\",\n onPress: onCancel,\n children: \"Cancel\"\n }), /*#__PURE__*/_jsx(Button, _objectSpread(_objectSpread({}, submitButtonProps), {}, {\n // eslint-disable-next-line react/style-prop-object\n style: \"fill\",\n variant: \"negative\",\n onPress: onConfirm,\n type: \"submit\",\n children: confirmationButtonLabel\n }))]\n })]\n });\n}\nexport default ConfirmationDialog;\n//# sourceMappingURL=ConfirmationDialog.js.map","import { useCallback } from 'react';\nimport { vsTrash } from '@deephaven/icons';\nimport { ACTION_ICON_HEIGHT } from '@deephaven/utils';\nimport { ActionButtonDialogTrigger, ConfirmationDialog } from \"../dialogs/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function ConfirmActionButton(_ref) {\n var {\n ariaLabel,\n heading,\n confirmationButtonLabel,\n isHidden,\n children,\n tooltip,\n onConfirm: _onConfirm\n } = _ref;\n var renderDialog = useCallback(close => /*#__PURE__*/_jsx(ConfirmationDialog, {\n heading: heading,\n confirmationButtonLabel: confirmationButtonLabel,\n onCancel: close,\n onConfirm: () => {\n close();\n _onConfirm();\n },\n children: children\n }), [children, confirmationButtonLabel, heading, _onConfirm]);\n return /*#__PURE__*/_jsx(ActionButtonDialogTrigger, {\n ariaLabel: ariaLabel,\n icon: vsTrash,\n isHidden: isHidden,\n isQuiet: true,\n height: ACTION_ICON_HEIGHT,\n tooltip: tooltip,\n children: renderDialog\n });\n}\nexport default ConfirmActionButton;\n//# sourceMappingURL=ConfirmActionButton.js.map","var _excluded = [\"icon\", \"label\", \"tooltip\"];\nfunction 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 _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n/* eslint-disable react/jsx-props-no-spreading */\nimport { ActionButton, Icon } from '@adobe/react-spectrum';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { ACTION_ICON_HEIGHT } from '@deephaven/utils';\nimport { Tooltip } from \"../popper/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nexport function IconActionButton(_ref) {\n var {\n icon,\n label,\n tooltip\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/_jsxs(ActionButton, _objectSpread(_objectSpread({}, props), {}, {\n \"aria-label\": label,\n isQuiet: true,\n height: ACTION_ICON_HEIGHT,\n children: [/*#__PURE__*/_jsx(Icon, {\n UNSAFE_className: tooltip == null ? undefined : 'action-button-icon-with-tooltip',\n children: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: icon\n })\n }), tooltip == null ? null : /*#__PURE__*/_jsx(Tooltip, {\n children: tooltip\n })]\n }));\n}\nIconActionButton.displayName = 'IconActionButton';\nexport default IconActionButton;\n//# sourceMappingURL=IconActionButton.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/**\n * An Input component that pops and filters auto complete options as you type.\n *\n * props:\n * @param options :[{\n * title: 'option title for display',\n * value: 'option value' //option value\n * }]\n * @param popperOptions options for the Popper\n * @param onChange called when the value is changed from the pulldown\n * @param inputPlaceholder place holder for the input box\n * @param disabled disable both input & drop down\n * @param className an optional class name applied to the input element\n * @param defaultTitle the default title to display\n * @param spellCheck flag to disable spell checking, defaults to true\n * @param onEnter called when the Enter key is typed in the input element\n *\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport memoize from 'memoizee';\nimport classNames from 'classnames';\nimport debounce from 'lodash.debounce';\nimport { Popper } from \"./popper/index.js\";\nimport \"./AutoCompleteInput.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar DEBOUNCE_DELAY = 100;\nvar MENU_NAVIGATION_DIRECTION;\n(function (MENU_NAVIGATION_DIRECTION) {\n MENU_NAVIGATION_DIRECTION[\"UP\"] = \"UP\";\n MENU_NAVIGATION_DIRECTION[\"DOWN\"] = \"DOWN\";\n})(MENU_NAVIGATION_DIRECTION || (MENU_NAVIGATION_DIRECTION = {}));\nclass AutoCompleteInput extends Component {\n constructor(props) {\n super(props);\n _defineProperty(this, \"popper\", void 0);\n _defineProperty(this, \"cbContainer\", void 0);\n _defineProperty(this, \"menuContainer\", void 0);\n _defineProperty(this, \"input\", void 0);\n _defineProperty(this, \"getCachedFilteredOptions\", memoize((options, input) => options.filter(\n // supports partial match\n option => option.title.toLowerCase().indexOf(input.toLowerCase()) >= 0)));\n var {\n popperOptions\n } = this.props;\n popperOptions = _objectSpread({\n placement: 'bottom-end',\n modifiers: {\n preventOverflow: {\n enabled: false\n }\n }\n }, popperOptions);\n this.state = {\n title: '',\n filteredOptions: [],\n keyboardOptionIndex: 0,\n menuIsOpen: false,\n inputWidth: 100,\n invalid: false,\n popperOptions\n };\n this.handleMenuKeyDown = this.handleMenuKeyDown.bind(this);\n this.handleMenuBlur = this.handleMenuBlur.bind(this);\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleInputKeyDown = this.handleInputKeyDown.bind(this);\n this.handleInputBlur = this.handleInputBlur.bind(this);\n this.handelInputFocus = this.handelInputFocus.bind(this);\n this.handleInputClick = this.handleInputClick.bind(this);\n this.updateInputValue = debounce(this.updateInputValue, DEBOUNCE_DELAY);\n this.handleOptionClick = this.handleOptionClick.bind(this);\n this.handleMenuOpened = this.handleMenuOpened.bind(this);\n this.handleMenuExited = this.handleMenuExited.bind(this);\n this.popper = /*#__PURE__*/React.createRef();\n this.cbContainer = /*#__PURE__*/React.createRef();\n this.menuContainer = /*#__PURE__*/React.createRef();\n this.input = /*#__PURE__*/React.createRef();\n }\n setInputWidth() {\n if (this.cbContainer.current) {\n this.setState({\n inputWidth: this.cbContainer.current.getBoundingClientRect().width\n });\n }\n }\n // validation needs to be an exact case-sensitve match on value\n getValueAndValidate(title) {\n if (!title) {\n this.setState({\n invalid: false\n });\n return {\n value: title,\n isValid: false\n };\n }\n\n // validate\n var {\n options\n } = this.props;\n var result = options.filter(option => option.title.toLowerCase() === title.toLowerCase());\n if (result.length < 1) {\n this.setState({\n invalid: true\n });\n return {\n value: title,\n isValid: false\n };\n }\n this.setState({\n invalid: false\n });\n return {\n value: result[0].value,\n isValid: true\n };\n }\n\n // validate typed entries emit change event using value\n updateInputValue(title) {\n var {\n menuIsOpen\n } = this.state;\n var {\n value,\n isValid\n } = this.getValueAndValidate(title);\n if (menuIsOpen) this.processFilterChange(title);\n this.fireOnChange(value, isValid);\n }\n fireOnChange(value) {\n var isValid = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var {\n onChange\n } = this.props;\n onChange(value, isValid);\n }\n processFilterChange(filter) {\n var _this$popper$current;\n var {\n options\n } = this.props;\n var {\n menuIsOpen\n } = this.state;\n var filteredOptions = filter ? this.getCachedFilteredOptions(options, filter) : options;\n var perfectMatch = filteredOptions.length === 1 && filteredOptions[0].title === filter;\n this.setState({\n filteredOptions,\n keyboardOptionIndex: 0\n });\n if (perfectMatch && menuIsOpen) {\n this.closeMenu();\n return;\n }\n (_this$popper$current = this.popper.current) === null || _this$popper$current === void 0 ? void 0 : _this$popper$current.scheduleUpdate(); // filtered options list can change size, may need to be repositioned\n }\n\n resetValue() {\n this.setState({\n title: ''\n });\n this.fireOnChange('');\n }\n handleResize() {\n this.setInputWidth();\n }\n handleMenuKeyDown(event) {\n var _this$input$current;\n var {\n filteredOptions,\n keyboardOptionIndex\n } = this.state;\n var option = filteredOptions[keyboardOptionIndex];\n switch (event.key) {\n case 'Enter':\n case 'ArrowRight':\n event.stopPropagation();\n event.preventDefault();\n if (option != null) {\n this.setState({\n title: option.title,\n invalid: false\n });\n this.fireOnChange(option.value);\n }\n this.closeMenu();\n (_this$input$current = this.input.current) === null || _this$input$current === void 0 ? void 0 : _this$input$current.focus();\n break;\n case 'ArrowUp':\n event.stopPropagation();\n event.preventDefault();\n this.navigateMenu(AutoCompleteInput.MENU_NAVIGATION_DIRECTION.UP);\n break;\n case 'ArrowDown':\n event.stopPropagation();\n event.preventDefault();\n this.navigateMenu(AutoCompleteInput.MENU_NAVIGATION_DIRECTION.DOWN);\n break;\n case 'Tab':\n event.stopPropagation();\n event.preventDefault();\n if (event.shiftKey) {\n this.navigateMenu(AutoCompleteInput.MENU_NAVIGATION_DIRECTION.UP);\n break;\n }\n this.navigateMenu(AutoCompleteInput.MENU_NAVIGATION_DIRECTION.DOWN);\n break;\n case 'Escape':\n event.preventDefault();\n event.stopPropagation();\n this.closeMenu();\n break;\n default:\n break;\n }\n }\n navigateMenu(direction) {\n var {\n filteredOptions,\n keyboardOptionIndex\n } = this.state;\n var newKeyboardOptionIndex = keyboardOptionIndex;\n if (direction === AutoCompleteInput.MENU_NAVIGATION_DIRECTION.UP) {\n if (keyboardOptionIndex > 0) {\n newKeyboardOptionIndex = (newKeyboardOptionIndex - 1) % filteredOptions.length;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex\n });\n } else if (keyboardOptionIndex === 0) {\n newKeyboardOptionIndex = filteredOptions.length - 1;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex\n });\n }\n } else if (direction === AutoCompleteInput.MENU_NAVIGATION_DIRECTION.DOWN) {\n if (keyboardOptionIndex < filteredOptions.length) {\n newKeyboardOptionIndex = (newKeyboardOptionIndex + 1) % filteredOptions.length;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex\n });\n }\n }\n this.scrollOptionIntoView(newKeyboardOptionIndex);\n }\n handleInputKeyDown(event) {\n var {\n onEnter\n } = this.props;\n var {\n menuIsOpen\n } = this.state;\n if (menuIsOpen) {\n this.handleMenuKeyDown(event);\n } else if (event.key === 'Enter') {\n onEnter();\n } else if (event.key === 'Escape') {\n this.resetValue();\n event.preventDefault();\n event.stopPropagation();\n } else if (!(event.key === 'ArrowRight' || event.key === 'ArrowLeft' || event.key === 'Tab' || event.key === 'Shift')) {\n this.openMenu();\n }\n }\n handleInputChange(event) {\n this.setState({\n title: event.target.value\n });\n this.updateInputValue(event.target.value);\n }\n handleOptionClick(option) {\n var _this$input$current2;\n this.setState({\n title: option.title,\n invalid: false\n });\n this.fireOnChange(option.value);\n this.closeMenu();\n (_this$input$current2 = this.input.current) === null || _this$input$current2 === void 0 ? void 0 : _this$input$current2.focus();\n }\n handelInputFocus() {\n var {\n menuIsOpen\n } = this.state;\n if (!menuIsOpen) {\n this.openMenu();\n }\n }\n handleInputClick() {\n var {\n menuIsOpen\n } = this.state;\n if (!menuIsOpen) {\n this.openMenu();\n }\n }\n handleInputBlur(event) {\n var {\n menuIsOpen\n } = this.state;\n if (menuIsOpen && event.relatedTarget instanceof Element && this.popper.current !== null && this.popper.current.element.contains(event.relatedTarget)) {\n return;\n }\n this.closeMenu(false);\n }\n handleMenuBlur(event) {\n // if blur event is caused by focusing on the input or focus on options don't close menu\n if (event.relatedTarget === this.input.current || event.relatedTarget instanceof Element && this.popper.current !== null && this.popper.current.element.contains(event.relatedTarget)) {\n return;\n }\n this.closeMenu(false);\n }\n handleMenuOpened() {\n var _this$input$current3;\n (_this$input$current3 = this.input.current) === null || _this$input$current3 === void 0 ? void 0 : _this$input$current3.focus();\n }\n handleMenuExited() {\n var {\n menuIsOpen\n } = this.state;\n if (menuIsOpen) {\n this.setState({\n menuIsOpen: false,\n keyboardOptionIndex: 0\n });\n }\n }\n openMenu() {\n var {\n title\n } = this.state;\n this.processFilterChange(title);\n this.setInputWidth();\n this.setState({\n menuIsOpen: true\n });\n\n // https://github.com/reactjs/react-transition-group/issues/382\n window.requestAnimationFrame(() => {\n var _this$popper$current2;\n (_this$popper$current2 = this.popper.current) === null || _this$popper$current2 === void 0 ? void 0 : _this$popper$current2.show();\n });\n }\n closeMenu() {\n var _this$popper$current3;\n var focusInput = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n this.setState({\n menuIsOpen: false,\n keyboardOptionIndex: 0\n });\n if (focusInput) {\n var _this$input$current4;\n (_this$input$current4 = this.input.current) === null || _this$input$current4 === void 0 ? void 0 : _this$input$current4.focus();\n }\n (_this$popper$current3 = this.popper.current) === null || _this$popper$current3 === void 0 ? void 0 : _this$popper$current3.hide();\n }\n scrollOptionIntoView(index) {\n if (this.menuContainer.current) {\n var _this$menuContainer$c;\n (_this$menuContainer$c = this.menuContainer.current.children.item(index)) === null || _this$menuContainer$c === void 0 ? void 0 : _this$menuContainer$c.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest'\n });\n }\n }\n renderMenuElement() {\n var {\n inputWidth\n } = this.state;\n return /*#__PURE__*/_jsx(\"div\", {\n className: classNames('aci-options'),\n ref: this.menuContainer,\n role: \"presentation\",\n onKeyDown: this.handleMenuKeyDown,\n style: {\n width: inputWidth\n },\n onBlur: this.handleMenuBlur,\n children: this.renderOptions()\n });\n }\n renderOptions() {\n var {\n noMatchText\n } = this.props;\n var {\n title,\n filteredOptions\n } = this.state;\n if (title && filteredOptions.length === 0) {\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"no-match\",\n children: noMatchText\n });\n }\n return filteredOptions.map((option, index) => this.renderOption(option, index));\n }\n renderOption(option, index) {\n var {\n keyboardOptionIndex\n } = this.state;\n var key = \"option-\".concat(index, \"-\").concat(option.value);\n return /*#__PURE__*/_jsx(\"button\", {\n type: \"button\",\n className: classNames('aci-option-btn', {\n 'keyboard-active': keyboardOptionIndex === index\n }),\n onClick: () => this.handleOptionClick(option),\n onFocus: () => this.setState({\n keyboardOptionIndex: index\n }),\n children: option.title\n }, key);\n }\n render() {\n var {\n options,\n inputPlaceholder,\n disabled,\n className,\n defaultTitle,\n spellCheck,\n 'data-testid': dataTestId\n } = this.props;\n var {\n title,\n menuIsOpen,\n popperOptions,\n invalid\n } = this.state;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"aci-container\",\n ref: this.cbContainer,\n children: [/*#__PURE__*/_jsx(\"input\", {\n value: title || defaultTitle,\n className: classNames('form-control', className, 'aci-input', {\n 'is-invalid': invalid && !menuIsOpen\n }),\n ref: this.input,\n onChange: this.handleInputChange,\n placeholder: inputPlaceholder || options[0].title,\n disabled: disabled,\n onFocus: this.handelInputFocus,\n onClick: this.handleInputClick,\n onBlur: this.handleInputBlur,\n onKeyDown: this.handleInputKeyDown,\n spellCheck: spellCheck,\n \"data-testid\": dataTestId\n }), /*#__PURE__*/_jsx(Popper, {\n ref: this.popper,\n options: popperOptions,\n className: classNames('aci-options-popper interactive'),\n onEntered: this.handleMenuOpened,\n onExited: this.handleMenuExited,\n children: this.renderMenuElement()\n })]\n });\n }\n}\n_defineProperty(AutoCompleteInput, \"propTypes\", {\n options: PropTypes.arrayOf(PropTypes.shape({\n title: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired\n })).isRequired,\n popperOptions: PropTypes.shape({}),\n onChange: PropTypes.func,\n inputPlaceholder: PropTypes.string,\n disabled: PropTypes.bool,\n className: PropTypes.string,\n defaultTitle: PropTypes.string,\n spellCheck: PropTypes.bool,\n onEnter: PropTypes.func,\n noMatchText: PropTypes.string,\n 'data-testid': PropTypes.string\n});\n_defineProperty(AutoCompleteInput, \"defaultProps\", {\n onChange() {\n // no-op\n },\n inputPlaceholder: '',\n disabled: false,\n className: '',\n defaultTitle: '',\n popperOptions: null,\n spellCheck: true,\n onEnter() {\n // no-op\n },\n noMatchText: 'No matching items found',\n 'data-testid': undefined\n});\n_defineProperty(AutoCompleteInput, \"MENU_NAVIGATION_DIRECTION\", MENU_NAVIGATION_DIRECTION);\nexport default AutoCompleteInput;\n//# sourceMappingURL=AutoCompleteInput.js.map","import React, { useState, useRef, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport \"./AutoResizeTextarea.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * Makes a textarea that auto resizes based on contents, its height grows with new lines.\n * If a delimeter is set, such as \" -\" or \" \", as used by jvm args or env vars\n * then the field will also \"explode\" the value by the delimiter over new lines\n * on focus, and implode on blur. By default, it doesn't word wrap.\n */\nfunction AutoResizeTextarea(_ref) {\n var {\n className = '',\n value: propsValue,\n onChange,\n spellCheck = false,\n placeholder = '',\n disabled = false,\n delimiter = '',\n id = '',\n 'data-testid': dataTestId\n } = _ref;\n var [value, setValue] = useState(propsValue);\n var [isPastedChange, setIsPastedChange] = useState(false);\n var element = useRef(null);\n useEffect(function syncStateWithProp() {\n // keep state value in sync with prop changes\n setValue(propsValue);\n }, [propsValue]);\n function explode(input) {\n // split by delimiter, commonly \" \" or \" -\"\n // strip empty strings (if delimiter is space, and there are multiple spaces in a row)\n // and join with new line and a trimmed delimeter (get rid of leading spaces)\n return input.trim().split(delimiter).filter(string => string) // remove empty strings\n .join(\"\\n\".concat(delimiter.trim()));\n }\n function implode(input) {\n return input.split('\\n').map(string => string.trim()).join(' ');\n }\n function reCalculateLayout() {\n if (!element.current) {\n return;\n }\n element.current.style.height = '0'; // shrink component to get scrollHeight\n var resizedHeight = element.current.scrollHeight + (element.current.offsetHeight - element.current.clientHeight);\n // accounts for border, padding is captured by scroll height\n if (resizedHeight > 0) element.current.style.height = \"\".concat(resizedHeight, \"px\");\n }\n function handleChange(event) {\n var newValue = event.target.value;\n if (isPastedChange) {\n if (delimiter) newValue = explode(newValue);\n setIsPastedChange(false);\n }\n setValue(newValue);\n onChange(newValue);\n }\n function handleFocus() {\n if (!element.current) {\n return;\n }\n if (delimiter) {\n setValue(explode(value));\n reCalculateLayout();\n }\n element.current.scrollLeft = 0;\n // scroll left as it can be disorienting if you click on a long line\n }\n\n // make it explode when dragging the resize handle\n // by making it trigger focus (which normally doesn't\n // trigger when just resizing).\n function handleMouseDown() {\n if (!element.current) return;\n if (document.activeElement === element.current) return;\n element.current.focus();\n }\n function handleBlur() {\n if (delimiter) {\n setValue(implode(value));\n onChange(implode(value));\n }\n }\n function handlePaste() {\n setIsPastedChange(true);\n }\n useEffect(function reCalculate() {\n reCalculateLayout();\n }, [value]);\n return /*#__PURE__*/_jsx(\"textarea\", {\n ref: element,\n id: id,\n className: classNames(className, 'auto-resize-textarea form-control'),\n placeholder: placeholder,\n value: value,\n rows: 1,\n onChange: handleChange,\n onFocus: handleFocus,\n onMouseDown: handleMouseDown,\n onBlur: handleBlur,\n onPaste: handlePaste,\n spellCheck: spellCheck,\n disabled: disabled,\n \"data-testid\": dataTestId\n });\n}\nAutoResizeTextarea.propTypes = {\n value: PropTypes.string.isRequired,\n onChange: PropTypes.func.isRequired,\n className: PropTypes.string,\n placeholder: PropTypes.string,\n spellCheck: PropTypes.bool,\n disabled: PropTypes.bool,\n delimiter: PropTypes.string,\n id: PropTypes.string,\n 'data-testid': PropTypes.string\n};\nAutoResizeTextarea.defaultProps = {\n className: '',\n id: '',\n placeholder: '',\n disabled: false,\n spellCheck: false,\n delimiter: '',\n 'data-testid': undefined\n};\nexport default AutoResizeTextarea;\n//# sourceMappingURL=AutoResizeTextarea.js.map","import React from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction ButtonGroup(props) {\n var {\n children,\n className,\n style,\n 'data-testid': dataTestId\n } = props;\n return /*#__PURE__*/_jsx(\"div\", {\n className: classNames('btn-group', className),\n style: style,\n role: \"group\",\n \"data-testid\": dataTestId,\n children: children\n });\n}\nButtonGroup.displayName = 'ButtonGroup';\nButtonGroup.propTypes = {\n children: PropTypes.node.isRequired,\n className: PropTypes.string,\n style: PropTypes.object,\n 'data-testid': PropTypes.string\n};\nButtonGroup.defaultProps = {\n className: null,\n style: {},\n 'data-testid': undefined\n};\nexport default ButtonGroup;\n//# sourceMappingURL=ButtonGroup.js.map","import React from 'react';\nimport { useDebouncedValue } from '@deephaven/react-hooks';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Display a modal after a debounce time. Blocks the screen from interaction immediately,\n * but then waits the set debounce time before rendering the modal.\n */\nfunction DebouncedModal(_ref) {\n var {\n blockInteraction = true,\n children,\n debounceMs,\n isOpen = false\n } = _ref;\n var debouncedIsOpen = useDebouncedValue(isOpen, debounceMs);\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [blockInteraction && isOpen && /*#__PURE__*/_jsx(\"div\", {\n className: \"modal-backdrop\",\n style: {\n backgroundColor: 'transparent'\n },\n \"data-testid\": \"debounced-modal-backdrop\"\n }), /*#__PURE__*/React.cloneElement(children, {\n isOpen: isOpen && debouncedIsOpen\n })]\n });\n}\nexport default DebouncedModal;\n//# sourceMappingURL=DebouncedModal.js.map","import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Modal from \"./Modal.js\";\nimport ModalBody from \"./ModalBody.js\";\nimport \"./InfoModal.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * A modal that displays a message with an icon. Can be used for informational messages, warnings, or errors.\n * Does not have any buttons and cannot be dismissed.\n */\nfunction InfoModal(_ref) {\n var {\n className,\n icon,\n isOpen = false,\n subtitle,\n title\n } = _ref;\n return /*#__PURE__*/_jsx(Modal, {\n isOpen: isOpen,\n className: className,\n children: /*#__PURE__*/_jsx(ModalBody, {\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"info-modal\",\n children: [icon != null && /*#__PURE__*/_jsx(\"div\", {\n className: \"message-icon\",\n children: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: icon\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"message-header\",\n children: title\n }), subtitle != null && /*#__PURE__*/_jsx(\"div\", {\n className: \"message-content\",\n children: subtitle\n })]\n })\n })\n });\n}\nexport default InfoModal;\n//# sourceMappingURL=InfoModal.js.map","import React from 'react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction ModalFooter(_ref) {\n var {\n className = 'modal-footer',\n children,\n 'data-testid': dataTestId\n } = _ref;\n return /*#__PURE__*/_jsx(\"div\", {\n className: className,\n \"data-testid\": dataTestId,\n children: children\n });\n}\nexport default ModalFooter;\n//# sourceMappingURL=ModalFooter.js.map","import React, { useRef, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport ButtonGroup from \"./ButtonGroup.js\";\nimport Button from \"./Button.js\";\nimport { Modal, ModalBody, ModalFooter, ModalHeader } from \"./modal/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * A basic modal dialog with two buttons: cancel / confirm.\n *\n * @param isOpen indicates if the modal dialog is open\n * @param headerText text displayed in the modal header\n * @param bodyText text displayed in the modal body\n * @param onCancel callback for the cancel button; if not provided, button not shown\n * @param onConfirm callback for the confirm button\n * @param onDiscard callback for the discard button; if not provided, button not shown\n * @param cancelButtonText optional text for the cancel button, defaults to 'Cancel'\n * @param confirmButtonText optional text for the confirm button, defaults to 'Okay'\n * @param discardButtonText optional text for the discard button, defaults to 'Discard'\n */\nfunction BasicModal(props) {\n var {\n isOpen,\n headerText,\n bodyText,\n onCancel,\n onConfirm,\n onDiscard,\n onModalDisable,\n cancelButtonText = 'Cancel',\n confirmButtonText = 'Okay',\n discardButtonText = 'Discard',\n isConfirmDanger = false,\n children,\n 'data-testid': dataTestId\n } = props;\n var confirmButton = useRef(null);\n var disableModalCheckbox = useRef(null);\n var onConfirmClicked = useCallback(() => {\n if (disableModalCheckbox.current !== null && disableModalCheckbox.current.checked && onModalDisable) {\n onModalDisable();\n }\n onConfirm();\n }, [onConfirm, onModalDisable]);\n var onOpened = useCallback(() => {\n var _confirmButton$curren;\n (_confirmButton$curren = confirmButton.current) === null || _confirmButton$curren === void 0 ? void 0 : _confirmButton$curren.focus();\n }, []);\n var modalBody = '';\n if (isOpen) {\n modalBody = typeof bodyText === 'function' ? bodyText() : bodyText;\n }\n return /*#__PURE__*/_jsxs(Modal, {\n isOpen: isOpen,\n onOpened: onOpened,\n children: [/*#__PURE__*/_jsx(ModalHeader, {\n closeButton: false,\n children: headerText\n }), /*#__PURE__*/_jsx(ModalBody, {\n children: modalBody\n }), /*#__PURE__*/_jsxs(ModalFooter, {\n children: [onModalDisable && /*#__PURE__*/_jsxs(\"div\", {\n className: \"custom-control custom-checkbox form-group mr-auto\",\n children: [/*#__PURE__*/_jsx(\"input\", {\n type: \"checkbox\",\n className: \"custom-control-input\",\n id: \"move-confirmation-checkbox\",\n defaultChecked: false,\n ref: disableModalCheckbox,\n \"data-testid\": dataTestId !== undefined ? \"\".concat(dataTestId, \"-checkbox-confirm\") : undefined\n }), /*#__PURE__*/_jsx(\"label\", {\n className: \"custom-control-label\",\n htmlFor: \"move-confirmation-checkbox\",\n children: \"Don't ask me again\"\n })]\n }), onDiscard && /*#__PURE__*/_jsx(Button, {\n kind: \"secondary\",\n className: \"mr-auto\",\n \"data-dismiss\": \"modal\",\n onClick: onDiscard,\n \"data-testid\": dataTestId !== undefined ? \"\".concat(dataTestId, \"-btn-discard\") : undefined,\n children: discardButtonText\n }), onCancel && /*#__PURE__*/_jsx(Button, {\n kind: \"secondary\",\n \"data-dismiss\": \"modal\",\n onClick: onCancel,\n \"data-testid\": dataTestId !== undefined ? \"\".concat(dataTestId, \"-btn-cancel\") : undefined,\n children: cancelButtonText\n }), /*#__PURE__*/_jsxs(ButtonGroup, {\n children: [/*#__PURE__*/_jsx(Button, {\n kind: isConfirmDanger ? 'danger' : 'primary',\n onClick: onConfirmClicked,\n ref: confirmButton,\n \"data-testid\": dataTestId !== undefined ? \"\".concat(dataTestId, \"-btn-confirm\") : undefined,\n children: confirmButtonText\n }), children]\n })]\n })]\n });\n}\nBasicModal.propTypes = {\n isOpen: PropTypes.bool.isRequired,\n headerText: PropTypes.string.isRequired,\n bodyText: PropTypes.oneOfType([PropTypes.string, PropTypes.func]).isRequired,\n onCancel: PropTypes.func,\n onConfirm: PropTypes.func.isRequired,\n onDiscard: PropTypes.func,\n onModalDisable: PropTypes.func,\n cancelButtonText: PropTypes.string,\n confirmButtonText: PropTypes.string,\n discardButtonText: PropTypes.string,\n children: PropTypes.node,\n 'data-testid': PropTypes.string\n};\nBasicModal.defaultProps = {\n children: undefined,\n cancelButtonText: 'Cancel',\n confirmButtonText: 'Okay',\n discardButtonText: 'Discard',\n onCancel: undefined,\n onDiscard: undefined,\n onModalDisable: undefined,\n 'data-testid': undefined\n};\nexport default BasicModal;\n//# sourceMappingURL=BasicModal.js.map","import React from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar Button = /*#__PURE__*/React.forwardRef((props, ref) => {\n var {\n children,\n className,\n disabled,\n onClick,\n style,\n id\n } = props;\n return /*#__PURE__*/_jsx(\"button\", {\n ref: ref,\n type: \"button\",\n className: classNames('btn', className),\n onClick: onClick,\n style: style,\n disabled: disabled,\n id: id,\n children: children\n });\n});\nButton.displayName = 'Button';\nButton.propTypes = {\n children: PropTypes.node,\n className: PropTypes.string,\n disabled: PropTypes.bool,\n onClick: PropTypes.func,\n style: PropTypes.shape({}),\n id: PropTypes.string\n};\nButton.defaultProps = {\n children: null,\n className: '',\n disabled: false,\n onClick: () => null,\n style: {},\n id: ''\n};\nexport default Button;\n//# sourceMappingURL=ButtonOld.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 { ActionBar } from '@adobe/react-spectrum';\nimport commonStyles from \"./SpectrumComponent.module.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function BulkActionBar(_ref) {\n var {\n styleProps,\n selectedItemCount,\n onClearSelection\n } = _ref;\n return /*#__PURE__*/_jsx(ActionBar, _objectSpread(_objectSpread({\n UNSAFE_className: commonStyles.spectrumActionBar\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, styleProps), {}, {\n isEmphasized: true,\n selectedItemCount: selectedItemCount,\n onClearSelection: onClearSelection\n }));\n}\nexport default BulkActionBar;\n//# sourceMappingURL=BulkActionBar.js.map","import React, { useCallback, useEffect, useRef } from 'react';\nimport classNames from 'classnames';\nimport \"./CardFlip.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Card flip component, switches between a front and back face being visible.\n * Has logic to handle overflow on body, caused by perspective transforms\n * and moves z-index to top during transition.\n * @param isFlipped true shows second child, false shows first child\n * @param children Expects exactly two children\n * @returns\n */\nfunction CardFlip(_ref) {\n var {\n className,\n isFlipped,\n children,\n 'data-testid': dataTestId\n } = _ref;\n var getComponent = key => {\n if (children.length !== 2) {\n throw new Error('CardFlip requires 2 children to function');\n }\n return children[key];\n };\n var front = useRef(null);\n var transitionStart = useCallback(event => {\n if (event.target === event.currentTarget) {\n document.body.classList.add('card-flip--is-flipping');\n }\n }, []);\n var transitionEnd = useCallback(event => {\n if (event.target === event.currentTarget) {\n document.body.classList.remove('card-flip--is-flipping');\n }\n }, []);\n useEffect(function setIsFlippingClassOnTransitionStart() {\n if (!front.current) throw Error('ref undefined');\n front.current.addEventListener('transitionstart', transitionStart);\n var refObj = front.current;\n return function cleanupListener() {\n if (refObj != null) {\n return refObj.removeEventListener('transitionstart', transitionStart);\n }\n };\n }, [transitionStart]);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: classNames(className, {\n 'card-flip--show-front': isFlipped,\n 'card-flip--show-back': !isFlipped\n }),\n \"data-testid\": dataTestId,\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"card-flip--back\",\n children: getComponent(0)\n }), /*#__PURE__*/_jsx(\"div\", {\n ref: front,\n className: \"card-flip--front\",\n onTransitionEnd: transitionEnd,\n children: getComponent(1)\n })]\n });\n}\nexport default CardFlip;\n//# sourceMappingURL=CardFlip.js.map","function _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// Port of https://github.com/react-bootstrap/react-bootstrap/blob/master/src/Collapse.js\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { CSSTransition } from 'react-transition-group';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nclass Collapse extends Component {\n static handleEnter(elemParam) {\n var elem = elemParam;\n elem.style.height = '0';\n }\n static handleEntering(elemParam) {\n var elem = elemParam;\n elem.style.height = \"\".concat(Collapse.getHeight(elem), \"px\");\n }\n static handleExiting(elemParam) {\n var elem = elemParam;\n elem.style.height = '0';\n }\n static handleExit(elemParam) {\n var elem = elemParam;\n elem.style.height = \"\".concat(Collapse.getHeight(elem), \"px\");\n }\n static getHeight(elem) {\n var scrollBarWidth = elem.scrollWidth - elem.clientWidth;\n return elem.scrollHeight - scrollBarWidth;\n }\n constructor(props) {\n super(props);\n this.handleEntered = this.handleEntered.bind(this);\n }\n handleEntered(elemParam) {\n var elem = elemParam;\n elem.style.height = '';\n var {\n autoFocusOnShow\n } = this.props;\n if (autoFocusOnShow !== undefined && autoFocusOnShow) {\n var input = elem.querySelector('input, select, textarea');\n if (input != null) {\n input.focus();\n }\n }\n }\n render() {\n var {\n children: _children,\n className,\n in: inTransition,\n 'data-testid': dataTestId\n } = this.props;\n return /*#__PURE__*/_jsx(CSSTransition, {\n in: inTransition,\n classNames: {\n enterActive: 'collapsing',\n enterDone: 'collapse show',\n exitActive: 'collapsing',\n exitDone: 'collapse'\n },\n onEnter: Collapse.handleEnter,\n onEntering: Collapse.handleEntering,\n onEntered: this.handleEntered,\n onExit: Collapse.handleExit,\n onExiting: Collapse.handleExiting,\n timeout: 350,\n children: state => /*#__PURE__*/_jsx(\"div\", {\n className: classNames({\n collapse: state === 'exited'\n }, className),\n \"data-testid\": dataTestId,\n children: _children\n })\n });\n }\n}\n_defineProperty(Collapse, \"propTypes\", {\n className: PropTypes.string,\n in: PropTypes.bool.isRequired,\n children: PropTypes.node.isRequired,\n autoFocusOnShow: PropTypes.bool,\n 'data-testid': PropTypes.string\n});\n_defineProperty(Collapse, \"defaultProps\", {\n className: '',\n autoFocusOnShow: false,\n 'data-testid': undefined\n});\nexport default Collapse;\n//# sourceMappingURL=Collapse.js.map","import React, { useCallback, useEffect, useImperativeHandle, useRef, useState } from 'react';\nimport Log from '@deephaven/log';\nimport { TimeUtils } from '@deephaven/utils';\nimport MaskedInput from \"./MaskedInput.js\";\nimport { DEFAULT_GET_PREFERRED_REPLACEMENT_STRING } from \"./MaskedInputUtils.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar log = Log.module('TimeInput');\nvar TIME_PATTERN = '([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]';\nvar EXAMPLES = ['00:00:00', '12:34:56', '23:59:59'];\nfunction fixIncompleteValue(value) {\n // If value is not a complete HH:mm:ss time, fill missing parts with 0\n if (value != null) {\n return \"\".concat(value.substring(0, 8).replace(/\\u2007/g, '0')).concat(\"00:00:00\".substring(value.length));\n }\n return value;\n}\n\n// Forward ref causes a false positive for display-name in eslint:\n// https://github.com/yannickcr/eslint-plugin-react/issues/2269\n// eslint-disable-next-line react/display-name\nvar TimeInput = /*#__PURE__*/React.forwardRef((props, ref) => {\n var {\n allowValueWrapping = true,\n className = '',\n onChange = () => false,\n value: propsValue = 0,\n onFocus = () => false,\n onBlur = () => false,\n onSelect = () => false,\n 'data-testid': dataTestId\n } = props;\n var [value, setValue] = useState(TimeUtils.formatTime(propsValue));\n var parsedValueRef = useRef(propsValue);\n var [selection, _setSelection] = useState();\n var inputRef = useRef(null);\n useImperativeHandle(ref, () => ({\n focus: () => {\n var _inputRef$current;\n (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.focus();\n },\n setSelection: newSelection => {\n var _inputRef$current2;\n (_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 ? void 0 : _inputRef$current2.focus();\n _setSelection(newSelection);\n }\n }), []);\n useEffect(function setFormattedTime() {\n // Ignore value prop update if it matches the displayed value\n // to preserve the displayed value while typing\n if (parsedValueRef.current !== propsValue) {\n setValue(TimeUtils.formatTime(propsValue));\n parsedValueRef.current = propsValue;\n }\n }, [parsedValueRef, propsValue]);\n function getNextSegmentValue(range, delta, segmentValue) {\n // Delta is backward because negative Y is up\n var maxValue = range.selectionStart === 0 ? 24 : 60;\n var newSegmentValue = parseInt(segmentValue, 10) - delta;\n if (Number.isNaN(newSegmentValue)) {\n newSegmentValue = 0;\n } else if (allowValueWrapping) {\n // Add max value and re-mod so we don't get negative values after mod\n newSegmentValue = (newSegmentValue % maxValue + maxValue) % maxValue;\n } else {\n newSegmentValue = Math.min(Math.max(0, newSegmentValue), maxValue - 1);\n }\n return \"\".concat(newSegmentValue).padStart(2, '0');\n }\n function getPreferredReplacementString(replaceValue, replaceIndex, newChar, selectionStart, selectionEnd) {\n if (selectionStart === 0 && selectionEnd === 2 && replaceIndex === 1 && parseInt(newChar, 10) > 1) {\n // DH-10082 Special case for when typing `3` when it's already 12\n return \"0\".concat(newChar).concat(replaceValue.substring(2));\n }\n return DEFAULT_GET_PREFERRED_REPLACEMENT_STRING(replaceValue, replaceIndex, newChar);\n }\n var handleChange = useCallback(newValue => {\n log.debug('handleChange', newValue);\n setValue(newValue);\n parsedValueRef.current = TimeUtils.parseTime(fixIncompleteValue(newValue));\n onChange(parsedValueRef.current);\n }, [onChange]);\n var handleBlur = useCallback(() => {\n var fixedValue = fixIncompleteValue(value);\n // Update the value displayed in the input\n // onChange with the fixed value already triggered in handleChange\n if (fixedValue !== value) {\n setValue(fixedValue);\n }\n onBlur();\n }, [value, onBlur]);\n var handleSelect = useCallback(newSelection => {\n _setSelection(newSelection);\n onSelect(newSelection);\n }, [onSelect]);\n return /*#__PURE__*/_jsx(MaskedInput, {\n ref: inputRef,\n className: className,\n example: EXAMPLES,\n getNextSegmentValue: getNextSegmentValue,\n getPreferredReplacementString: getPreferredReplacementString,\n onChange: handleChange,\n onSelect: handleSelect,\n pattern: TIME_PATTERN,\n selection: selection,\n value: value,\n onFocus: onFocus,\n onBlur: handleBlur,\n \"data-testid\": dataTestId\n });\n});\nTimeInput.defaultProps = {\n allowValueWrapping: true,\n className: '',\n onChange: () => false,\n onSelect: () => false,\n value: 0,\n onFocus: () => false,\n onBlur: () => false,\n 'data-testid': undefined\n};\nexport default TimeInput;\n//# sourceMappingURL=TimeInput.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 { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsCheck } from '@deephaven/icons';\nimport { TimeUtils } from '@deephaven/utils';\nimport classNames from 'classnames';\nimport TimeInput from \"./TimeInput.js\";\nimport DropdownMenu from \"./menu-actions/DropdownMenu.js\";\nimport \"./CustomTimeSelect.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar CUSTOM_OPTION = -1;\nvar MENU_NAVIGATION_DIRECTION;\n(function (MENU_NAVIGATION_DIRECTION) {\n MENU_NAVIGATION_DIRECTION[\"UP\"] = \"UP\";\n MENU_NAVIGATION_DIRECTION[\"DOWN\"] = \"DOWN\";\n})(MENU_NAVIGATION_DIRECTION || (MENU_NAVIGATION_DIRECTION = {}));\nclass CustomTimeSelect extends Component {\n constructor(props) {\n super(props);\n _defineProperty(this, \"csContainer\", void 0);\n _defineProperty(this, \"menuContainer\", void 0);\n _defineProperty(this, \"button\", void 0);\n _defineProperty(this, \"input\", void 0);\n var {\n value,\n valueToTime\n } = props;\n this.toggleMenu = this.toggleMenu.bind(this);\n this.handleMenuKeyDown = this.handleMenuKeyDown.bind(this);\n this.closeMenu = this.closeMenu.bind(this);\n this.handleOptionClick = this.handleOptionClick.bind(this);\n this.handleOptionFocus = this.handleOptionFocus.bind(this);\n this.handleMenuOpened = this.handleMenuOpened.bind(this);\n this.handleMenuExited = this.handleMenuExited.bind(this);\n this.handleCustomInput = this.handleCustomInput.bind(this);\n this.csContainer = /*#__PURE__*/React.createRef();\n this.menuContainer = /*#__PURE__*/React.createRef();\n this.button = /*#__PURE__*/React.createRef();\n this.input = /*#__PURE__*/React.createRef();\n this.state = {\n keyboardOptionIndex: 0,\n menuIsOpen: false,\n inputWidth: 100,\n customTime: valueToTime(value),\n inputFocused: false\n };\n }\n getSelectedText() {\n var {\n options,\n value,\n placeholder\n } = this.props;\n var {\n customTime\n } = this.state;\n if (value === null) {\n return placeholder;\n }\n for (var i = 0; i < options.length; i += 1) {\n var option = options[i];\n if (option.value === value) {\n return option.title;\n }\n }\n return TimeUtils.formatTime(customTime);\n }\n setInputWidth() {\n if (this.csContainer.current) {\n this.setState({\n inputWidth: this.csContainer.current.getBoundingClientRect().width\n });\n }\n }\n focus() {\n var _this$button$current;\n (_this$button$current = this.button.current) === null || _this$button$current === void 0 ? void 0 : _this$button$current.focus();\n }\n updateInputValue(value) {\n var {\n onChange\n } = this.props;\n onChange(value);\n }\n handleResize() {\n this.setInputWidth();\n }\n handleMenuKeyDown(event) {\n var _this$button$current2;\n var {\n keyboardOptionIndex,\n inputFocused\n } = this.state;\n var {\n options\n } = this.props;\n switch (event.key) {\n case 'Enter':\n case ' ':\n // Space Bar\n if (inputFocused) {\n this.updateFromCustom();\n } else {\n this.updateInputValue(options[keyboardOptionIndex].value);\n }\n this.closeMenu();\n (_this$button$current2 = this.button.current) === null || _this$button$current2 === void 0 ? void 0 : _this$button$current2.focus();\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'Tab':\n if (event.shiftKey) {\n this.handleMenuNavigation(CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP);\n } else {\n this.handleMenuNavigation(CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN);\n }\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowUp':\n this.handleMenuNavigation(CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP);\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowDown':\n this.handleMenuNavigation(CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN);\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'Escape':\n this.closeMenu();\n break;\n default:\n break;\n }\n }\n handleMenuNavigation(direction) {\n var {\n keyboardOptionIndex,\n inputFocused\n } = this.state;\n var {\n options\n } = this.props;\n var menuOptionsLength = options.length;\n var newKeyboardOptionIndex = keyboardOptionIndex;\n switch (direction) {\n case CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP:\n if (!inputFocused && keyboardOptionIndex === 0) {\n this.focusInput();\n break;\n } else if (inputFocused) {\n this.focusOption(keyboardOptionIndex);\n }\n if (keyboardOptionIndex > 0 && !inputFocused) {\n newKeyboardOptionIndex = (newKeyboardOptionIndex - 1) % menuOptionsLength;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex\n });\n } else if (keyboardOptionIndex === 0) {\n newKeyboardOptionIndex = menuOptionsLength - 1;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex\n });\n }\n this.scrollOptionIntoView(newKeyboardOptionIndex);\n break;\n case CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN:\n if (!inputFocused && keyboardOptionIndex === menuOptionsLength - 1) {\n this.focusInput();\n break;\n } else if (inputFocused) {\n this.focusOption(keyboardOptionIndex);\n }\n if (keyboardOptionIndex < menuOptionsLength && !(inputFocused && keyboardOptionIndex === 0)) {\n newKeyboardOptionIndex = (newKeyboardOptionIndex + 1) % menuOptionsLength;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex\n });\n }\n this.scrollOptionIntoView(newKeyboardOptionIndex);\n break;\n default:\n break;\n }\n }\n handleOptionClick(event) {\n var optionIndex = Number(event.currentTarget.value);\n var {\n options,\n timeToValue\n } = this.props;\n var {\n customTime\n } = this.state;\n if (optionIndex === CUSTOM_OPTION) {\n var update = timeToValue(customTime);\n this.updateAndClose(update);\n } else {\n this.updateAndClose(options[optionIndex].value);\n }\n }\n updateAndClose(update) {\n var _this$button$current3;\n this.updateInputValue(update);\n this.closeMenu();\n (_this$button$current3 = this.button.current) === null || _this$button$current3 === void 0 ? void 0 : _this$button$current3.focus();\n }\n handleOptionFocus(event) {\n this.setState({\n keyboardOptionIndex: Number(event.target.value)\n });\n }\n handleMenuOpened() {\n var _this$menuContainer$c;\n var {\n options,\n value\n } = this.props;\n var {\n keyboardOptionIndex\n } = this.state;\n this.scrollOptionIntoView(keyboardOptionIndex);\n var activeOption = (_this$menuContainer$c = this.menuContainer.current) === null || _this$menuContainer$c === void 0 ? void 0 : _this$menuContainer$c.querySelector('.cs-option-btn.keyboard-active');\n if (activeOption instanceof HTMLElement) {\n activeOption.focus();\n }\n if (value === null) {\n return;\n }\n var valueIndex = options.map(option => option.value).indexOf(value);\n if (valueIndex < 0) {\n // The custom option should be selected\n this.focusInput();\n }\n }\n focusInput() {\n var _this$input$current;\n (_this$input$current = this.input.current) === null || _this$input$current === void 0 ? void 0 : _this$input$current.focus();\n }\n focusOption(index) {\n var _this$menuContainer$c2;\n var options = (_this$menuContainer$c2 = this.menuContainer.current) === null || _this$menuContainer$c2 === void 0 ? void 0 : _this$menuContainer$c2.querySelector('.cs-options');\n if (options && options.children != null) {\n var option = options.children.item(index);\n if (option instanceof HTMLElement) {\n option.focus();\n }\n }\n }\n handleMenuExited() {\n var {\n menuIsOpen\n } = this.state;\n if (menuIsOpen) {\n this.setState({\n menuIsOpen: false,\n keyboardOptionIndex: 0\n });\n }\n }\n handleCustomInput(value) {\n var {\n timeToValue\n } = this.props;\n var update = timeToValue(value);\n this.updateInputValue(update);\n this.setState({\n customTime: value\n });\n }\n updateFromCustom() {\n var {\n timeToValue\n } = this.props;\n var {\n customTime\n } = this.state;\n var update = timeToValue(customTime);\n this.updateInputValue(update);\n }\n toggleMenu(event) {\n var {\n menuIsOpen\n } = this.state;\n if (menuIsOpen) {\n this.closeMenu();\n } else {\n this.openMenu();\n }\n event.stopPropagation();\n }\n openMenu() {\n this.updateKeyboardIndex();\n this.setInputWidth();\n this.setState({\n menuIsOpen: true\n });\n }\n closeMenu() {\n var focusButton = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n this.setState({\n menuIsOpen: false\n });\n if (focusButton) {\n var _this$button$current4;\n (_this$button$current4 = this.button.current) === null || _this$button$current4 === void 0 ? void 0 : _this$button$current4.focus();\n }\n }\n updateKeyboardIndex() {\n var {\n options,\n value\n } = this.props;\n if (value === null) {\n return;\n }\n var valueIndex = options.map(option => option.value).indexOf(value);\n if (valueIndex > 0) {\n this.setState({\n keyboardOptionIndex: valueIndex\n });\n }\n }\n scrollOptionIntoView(index) {\n var _this$menuContainer$c3;\n var options = (_this$menuContainer$c3 = this.menuContainer.current) === null || _this$menuContainer$c3 === void 0 ? void 0 : _this$menuContainer$c3.querySelector('.cs-options');\n if (options && options.children != null) {\n var activeOption = options.children.item(index);\n if (activeOption instanceof HTMLElement && activeOption.offsetTop > CustomTimeSelect.DROP_DOWN_MENU_HEIGHT) {\n options.scrollTop = activeOption.offsetTop - CustomTimeSelect.DROP_DOWN_MENU_HEIGHT;\n } else if (activeOption instanceof HTMLElement && activeOption.offsetTop < 0 || index === 0) {\n options.scrollTop = 0;\n }\n }\n }\n renderMenuElement() {\n var {\n inputWidth\n } = this.state;\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"cs-menu-container\",\n ref: this.menuContainer,\n role: \"presentation\",\n onKeyDown: this.handleMenuKeyDown,\n onClick: event => {\n event.stopPropagation();\n },\n style: {\n width: inputWidth\n },\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"cs-options-container\",\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"cs-options\",\n children: this.renderOptions()\n })\n })\n });\n }\n renderOptions() {\n var {\n options,\n value,\n icon,\n customText\n } = this.props;\n var {\n keyboardOptionIndex,\n customTime,\n inputFocused\n } = this.state;\n var matchFound = false;\n var optionArray = [];\n for (var index = 0; index < options.length; index += 1) {\n var option = options[index];\n var key = \"option-\".concat(index, \"-\").concat(option.value);\n matchFound = matchFound || option.value === value;\n optionArray.push( /*#__PURE__*/_jsxs(\"button\", {\n type: \"button\",\n value: index,\n className: classNames('cs-option-btn', {\n 'keyboard-active': keyboardOptionIndex === index && !inputFocused\n }),\n onClick: this.handleOptionClick,\n onFocus: this.handleOptionFocus,\n children: [option.value === value && /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: icon,\n className: \"mr-2\"\n }), option.value !== value && /*#__PURE__*/_jsx(\"span\", {\n className: \"mr-4\"\n }), option.title]\n }, key));\n }\n optionArray.push( /*#__PURE__*/_jsx(\"hr\", {\n className: \"cs-divider\"\n }, \"option-divider\"));\n optionArray.push( /*#__PURE__*/_jsxs(\"button\", {\n type: \"button\",\n value: CUSTOM_OPTION,\n className: classNames('cs-option-btn', {\n 'keyboard-active': inputFocused\n }),\n onClick: this.handleOptionClick,\n onFocus: this.handleOptionFocus,\n children: [!matchFound && value !== null ? /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: icon,\n className: \"mr-2\"\n }) : /*#__PURE__*/_jsx(\"span\", {\n className: \"mr-4\"\n }), customText]\n }, \"option-custom-label\"));\n optionArray.push( /*#__PURE__*/_jsxs(\"div\", {\n className: \"cs-custom-container\",\n children: [/*#__PURE__*/_jsx(\"span\", {\n className: \"mr-2\"\n }), /*#__PURE__*/_jsx(TimeInput, {\n ref: this.input,\n onChange: this.handleCustomInput,\n value: customTime,\n onFocus: () => this.setState({\n inputFocused: true\n }),\n onBlur: () => this.setState({\n inputFocused: false\n })\n }, \"option-input\"), /*#__PURE__*/_jsx(\"span\", {\n className: \"ml-2\"\n })]\n }, \"cs-custom-container\"));\n optionArray.push( /*#__PURE__*/_jsx(\"hr\", {\n className: \"mb-2\"\n }, \"option-end\"));\n return optionArray;\n }\n render() {\n var {\n disabled,\n invalid,\n value,\n 'data-testid': dataTestId\n } = this.props;\n var {\n menuIsOpen\n } = this.state;\n var {\n popperOptions\n } = this.props;\n popperOptions = _objectSpread({\n placement: 'bottom-end',\n modifiers: {\n preventOverflow: {\n enabled: false\n }\n }\n }, popperOptions);\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"input-group cs-container context-menu\",\n ref: this.csContainer,\n \"data-testid\": dataTestId,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: classNames('input-group-append cs-dropdown', {\n 'cs-dropdown-invalid': invalid\n }),\n children: /*#__PURE__*/_jsxs(\"button\", {\n type: \"button\",\n className: classNames('btn cs-btn form-control', {\n 'cs-btn-invalid': invalid\n }),\n ref: this.button,\n onClick: this.toggleMenu,\n disabled: disabled,\n children: [/*#__PURE__*/_jsx(\"span\", {\n className: classNames({\n 'text-muted': value === null\n }),\n children: this.getSelectedText()\n }), /*#__PURE__*/_jsx(\"span\", {\n className: \"cs-caret\"\n }), /*#__PURE__*/_jsx(DropdownMenu, {\n isShown: menuIsOpen,\n actions: {\n menuElement: this.renderMenuElement()\n },\n popperOptions: popperOptions,\n popperClassName: \"CustomTimeSelect\",\n onMenuOpened: this.handleMenuOpened,\n onMenuClosed: this.handleMenuExited,\n menuStyle: {\n maxWidth: '100rem'\n }\n })]\n })\n })\n });\n }\n}\n_defineProperty(CustomTimeSelect, \"MENU_NAVIGATION_DIRECTION\", MENU_NAVIGATION_DIRECTION);\n_defineProperty(CustomTimeSelect, \"DROP_DOWN_MENU_HEIGHT\", 125);\n_defineProperty(CustomTimeSelect, \"defaultProps\", {\n onChange() {\n // no-op\n },\n value: null,\n disabled: false,\n popperOptions: {},\n icon: vsCheck,\n customText: 'Custom',\n placeholder: 'Select a time',\n valueToTime: value => value === null ? 0 : Math.round(value / 1000),\n timeToValue: time => time * 1000,\n invalid: false,\n 'data-testid': undefined\n});\nexport default CustomTimeSelect;\n//# sourceMappingURL=CustomTimeSelect.js.map","import React, { useCallback, useState } from 'react';\nimport classNames from 'classnames';\nimport Log from '@deephaven/log';\nimport MaskedInput from \"./MaskedInput.js\";\nimport { getNextSegmentValue } from \"./DateInputUtils.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar log = Log.module('DateInput');\nvar DATE_PATTERN = '[12][0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])';\nvar EXAMPLES = ['2000-01-01', '2022-12-31'];\nvar DATE_FORMAT = 'YYYY-MM-DD';\nvar DateInput = /*#__PURE__*/React.forwardRef((props, ref) => {\n var {\n className = '',\n onChange = () => undefined,\n defaultValue = '',\n onFocus = () => undefined,\n onBlur = () => undefined,\n 'data-testid': dataTestId\n } = props;\n var [value, setValue] = useState(defaultValue);\n var [selection, setSelection] = useState();\n var handleChange = useCallback(newValue => {\n log.debug('handleChange', newValue);\n setValue(newValue);\n onChange(newValue);\n }, [onChange]);\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"d-flex flex-row align-items-center\",\n children: /*#__PURE__*/_jsx(MaskedInput, {\n ref: ref,\n className: classNames(className),\n example: EXAMPLES,\n getNextSegmentValue: getNextSegmentValue,\n onChange: handleChange,\n onSelect: setSelection,\n pattern: DATE_PATTERN,\n placeholder: DATE_FORMAT,\n selection: selection,\n value: value,\n onFocus: onFocus,\n onBlur: onBlur,\n \"data-testid\": dataTestId\n })\n });\n});\nDateInput.displayName = 'DateInput';\nexport default DateInput;\n//# sourceMappingURL=DateInput.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 debounce from 'lodash.debounce';\nimport SearchInput from \"./SearchInput.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nclass DebouncedSearchInput extends PureComponent {\n constructor(props) {\n super(props);\n _defineProperty(this, \"searchInput\", void 0);\n this.searchInput = /*#__PURE__*/React.createRef();\n this.handleChange = this.handleChange.bind(this);\n this.sendUpdate = debounce(this.sendUpdate.bind(this), props.debounceMs);\n this.state = {\n value: props.value\n };\n }\n componentDidUpdate(prevProps) {\n var {\n value\n } = this.props;\n if (prevProps.value !== value) {\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({\n value\n });\n }\n }\n focus() {\n var _this$searchInput$cur;\n (_this$searchInput$cur = this.searchInput.current) === null || _this$searchInput$cur === void 0 ? void 0 : _this$searchInput$cur.focus();\n }\n handleChange(event) {\n this.setState({\n value: event.target.value\n }, this.sendUpdate);\n }\n sendUpdate() {\n var {\n onChange\n } = this.props;\n var {\n value\n } = this.state;\n onChange(value);\n }\n render() {\n var {\n placeholder,\n className,\n matchCount,\n id,\n 'data-testid': dataTestId\n } = this.props;\n var {\n value\n } = this.state;\n return /*#__PURE__*/_jsx(SearchInput, {\n value: value,\n placeholder: placeholder,\n onChange: this.handleChange,\n className: className,\n matchCount: matchCount,\n ref: this.searchInput,\n id: id,\n \"data-testid\": dataTestId\n });\n }\n}\n_defineProperty(DebouncedSearchInput, \"defaultProps\", {\n placeholder: 'Search',\n className: '',\n matchCount: null,\n debounceMs: 250,\n id: '',\n 'data-testid': undefined\n});\nexport default DebouncedSearchInput;\n//# sourceMappingURL=DebouncedSearchInput.js.map","import React, { useCallback, useMemo, useState } from 'react';\nimport classNames from 'classnames';\nimport clamp from 'lodash.clamp';\nimport { vsAdd, vsTrash } from '@deephaven/icons';\nimport { RangeUtils } from '@deephaven/utils';\nimport Button from \"./Button.js\";\nimport ItemList from \"./ItemList.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n// Display a list of items with an input for adding new items, and Add/Delete buttons\nfunction EditableItemList(props) {\n var {\n isInvalid = false,\n items,\n onAdd = () => undefined,\n onDelete = () => undefined,\n validate = () => null\n } = props;\n var [inputError, setInputError] = useState(null);\n var [selectedRanges, setSelectedRanges] = useState([]);\n var [value, setValue] = useState('');\n var handleSelectionChange = useCallback(ranges => {\n setSelectedRanges(ranges);\n }, []);\n var handleDelete = useCallback(() => {\n onDelete(RangeUtils.getItemsInRanges(items, selectedRanges));\n setSelectedRanges([]);\n }, [items, selectedRanges, onDelete]);\n var handleAdd = useCallback(() => {\n if (value === '') {\n return;\n }\n var validationError = validate(value);\n if (validationError == null) {\n onAdd(value);\n setValue('');\n } else {\n setInputError(validationError);\n }\n }, [value, onAdd, validate]);\n var handleInputChange = useCallback(event => {\n var {\n value: inputValue\n } = event.target;\n setValue(inputValue);\n setInputError(inputValue === '' ? null : validate(inputValue));\n }, [validate]);\n var handleInputFocus = useCallback(() => {\n setSelectedRanges([]);\n }, []);\n var handleInputKeyDown = useCallback(event => {\n if (event.key === 'Enter') {\n handleAdd();\n }\n }, [handleAdd]);\n var containerHeight = useMemo(() => 14 + clamp(items.length, 1, 6) * ItemList.DEFAULT_ROW_HEIGHT, [items.length]);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: classNames('editable-item-list-container', {\n 'is-invalid': isInvalid\n }),\n children: [/*#__PURE__*/_jsx(\"div\", {\n style: {\n height: containerHeight\n },\n children: /*#__PURE__*/_jsx(ItemList, {\n itemCount: items.length,\n items: items.map((item, index) => ({\n value: item,\n isSelected: RangeUtils.isSelected(selectedRanges, index)\n })),\n offset: 0,\n selectedRanges: selectedRanges,\n onSelectionChange: handleSelectionChange,\n isMultiSelect: true\n })\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"d-flex flex-row pt-2\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"d-flex flex-grow-1\",\n children: /*#__PURE__*/_jsx(\"input\", {\n className: classNames('form-control', {\n 'is-invalid': inputError != null\n }),\n placeholder: \"Enter value\",\n type: \"text\",\n value: value,\n onChange: handleInputChange,\n onFocus: handleInputFocus,\n onKeyDown: handleInputKeyDown\n })\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"d-flex align-items-start mt-1 ml-2\",\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n onClick: handleAdd,\n disabled: inputError != null || value === '',\n icon: vsAdd,\n tooltip: \"Add new item\",\n \"data-testid\": \"add-item-button\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n onClick: handleDelete,\n disabled: selectedRanges.length === 0,\n icon: vsTrash,\n tooltip: \"Delete selected items\",\n \"data-testid\": \"delete-item-button\"\n })]\n })]\n })]\n });\n}\nexport default EditableItemList;\n//# sourceMappingURL=EditableItemList.js.map","import Log from '@deephaven/log';\nimport React, { Component } from 'react';\nimport LoadingOverlay from \"./LoadingOverlay.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar log = Log.module('ErrorBoundary');\n/**\n * Error boundary for catching render errors in React. Displays an error message if an error is caught by default, or you can specify a fallback component to render.\n * https://react.dev/reference/react/Component#catching-rendering-errors-with-an-error-boundary\n */\nexport class ErrorBoundary extends Component {\n static getDerivedStateFromError(error) {\n return {\n error\n };\n }\n constructor(props) {\n super(props);\n this.state = {\n error: undefined\n };\n }\n componentDidCatch(error, errorInfo) {\n var {\n onError\n } = this.props;\n log.error('Error caught by ErrorBoundary', error, errorInfo);\n onError === null || onError === void 0 ? void 0 : onError(error, errorInfo);\n }\n render() {\n var {\n children,\n className,\n fallback\n } = this.props;\n var {\n error\n } = this.state;\n if (error != null) {\n if (fallback != null) {\n return fallback;\n }\n return /*#__PURE__*/_jsx(\"div\", {\n className: className,\n children: /*#__PURE__*/_jsx(LoadingOverlay, {\n errorMessage: \"\".concat(error),\n isLoading: false,\n isLoaded: false\n })\n });\n }\n return children;\n }\n}\nexport default ErrorBoundary;\n//# sourceMappingURL=ErrorBoundary.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 { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport classNames from 'classnames';\nimport Checkbox from \"./Checkbox.js\";\nimport Popper from \"./popper/Popper.js\";\nimport \"./HierarchicalCheckboxMenu.css\";\nimport Button from \"./Button.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * A pull down menu that displays a hierarchy of checkboxes.\n *\n * Currently supports only two levels of check boxes. The input should be a Map\n * where the keys are the parent names. The values can a boolean if the parent\n * has no children or another Map where keys are child names and values are booleans.\n *\n * Here is an example:\n * const INITIAL_TYPE_MAP = new Map([\n * ['Queries', new Map([['Live', true], ['Batch', true]])],\n * [\n * 'DBA Queries',\n * new Map([\n * ['Data Merge', true],\n * ['Data Validation', true],\n * ['Imports', true],\n * ['Data Services', true],\n * ]),\n * ],\n * ['Helper Queries', true],\n * ]);\n *\n * When a checkbox is changed, this component will make a deep copy of the Map\n * with the appropriate booleans changed. It will then call onUpdateValueMap\n * with the new Map.\n */\nclass HierarchicalCheckboxMenu extends Component {\n static isParentSelected(parent, valueMap) {\n var children = valueMap.get(parent);\n if (children === undefined) {\n return false;\n }\n if (typeof children === 'boolean') {\n // This parent has no children\n return children;\n }\n var includesTrue = Array.from(children.values()).includes(true);\n var includesFalse = Array.from(children.values()).includes(false);\n if (includesTrue && includesFalse) {\n // Indeterminate\n return null;\n }\n return includesTrue;\n }\n constructor(props) {\n super(props);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.toggleValueFor = this.toggleValueFor.bind(this);\n this.selectAll = this.selectAll.bind(this);\n this.clear = this.clear.bind(this);\n this.state = {\n menuIsOpen: false\n };\n }\n toggleMenu(event) {\n event.stopPropagation();\n event.preventDefault();\n this.setState(state => {\n var {\n menuIsOpen\n } = state;\n return {\n menuIsOpen: !menuIsOpen\n };\n });\n }\n toggleValueFor(parent, child) {\n var {\n valueMap,\n onUpdateValueMap\n } = this.props;\n\n // Make a deep copy of the Map and toggle the boolean for parent / child\n var map = new Map(valueMap);\n var children = map.get(parent);\n if (children instanceof Map) {\n var newChildren = new Map(children);\n if (child != null) {\n newChildren.set(child, children.get(child) === undefined);\n } else {\n var parentSelected = HierarchicalCheckboxMenu.isParentSelected(parent, map);\n var newChildValue = parentSelected == null || !parentSelected;\n children.forEach((_, key) => newChildren.set(key, newChildValue));\n }\n map.set(parent, newChildren);\n } else {\n map.set(parent, children == null || !children);\n }\n\n // The parent was clicked so all children must be toggled\n var currentChildren = map.get(parent);\n if (child === undefined && currentChildren !== undefined && typeof currentChildren !== 'boolean') {\n var _parentSelected = HierarchicalCheckboxMenu.isParentSelected(parent, valueMap);\n if (_parentSelected != null && _parentSelected) {\n currentChildren.forEach((_, key) => currentChildren.set(key, false));\n } else {\n // for parent selection of false or null (indeterminate), select everything\n currentChildren.forEach((_, key) => currentChildren.set(key, true));\n }\n }\n onUpdateValueMap(map);\n }\n setAllValues(value) {\n var {\n valueMap,\n onUpdateValueMap\n } = this.props;\n\n // Make a deep copy of the Map and set everything\n var copy = new Map();\n valueMap.forEach((child, parent) => {\n if (typeof child === 'boolean') {\n copy.set(parent, value);\n } else {\n var children = new Map();\n child.forEach((_, key) => children.set(key, value));\n copy.set(parent, children);\n }\n });\n onUpdateValueMap(copy);\n }\n selectAll() {\n this.setAllValues(true);\n }\n clear() {\n this.setAllValues(false);\n }\n renderMenuElement() {\n var {\n valueMap,\n 'data-testid': dataTestId\n } = this.props;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"hcm-menu-container\",\n children: [Array.from(valueMap.entries()).map(_ref => {\n var [parent, children] = _ref;\n return /*#__PURE__*/_jsxs(\"div\", {\n children: [/*#__PURE__*/_jsx(Checkbox, {\n className: \"hcm-parent\",\n checked: HierarchicalCheckboxMenu.isParentSelected(parent, valueMap),\n onChange: () => this.toggleValueFor(parent),\n children: parent\n }), children !== undefined && typeof children !== 'boolean' && Array.from(children.entries()).map(_ref2 => {\n var [child, value] = _ref2;\n return /*#__PURE__*/_jsx(Checkbox, {\n className: \"hcm-child\",\n checked: value,\n onChange: () => this.toggleValueFor(parent, child),\n children: child\n }, child);\n })]\n }, parent);\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n onClick: this.selectAll,\n \"data-testid\": dataTestId !== undefined ? \"\".concat(dataTestId, \"-btn-select-all\") : undefined,\n children: \"Select All\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n onClick: this.clear,\n \"data-testid\": dataTestId !== undefined ? \"\".concat(dataTestId, \"-btn-clear\") : undefined,\n children: \"Clear\"\n })]\n });\n }\n render() {\n var {\n menuText,\n className,\n icon,\n id,\n 'data-testid': dataTestId\n } = this.props;\n var {\n menuIsOpen\n } = this.state;\n return /*#__PURE__*/_jsxs(\"button\", {\n type: \"button\",\n className: classNames('btn hcm-btn', className),\n onClick: this.toggleMenu,\n id: id,\n \"data-testid\": dataTestId,\n children: [/*#__PURE__*/_jsxs(\"span\", {\n children: [icon && /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: icon,\n className: \"hcm-icon mr-1\"\n }), menuText]\n }), /*#__PURE__*/_jsx(\"span\", {\n className: \"cs-caret\"\n }), /*#__PURE__*/_jsx(Popper, {\n options: {\n placement: 'bottom'\n },\n isShown: menuIsOpen,\n onExited: () => {\n this.setState({\n menuIsOpen: false\n });\n },\n closeOnBlur: true,\n interactive: true,\n children: this.renderMenuElement()\n })]\n });\n }\n}\n_defineProperty(HierarchicalCheckboxMenu, \"defaultProps\", {\n className: '',\n icon: null,\n id: '',\n 'data-testid': undefined\n});\nexport default HierarchicalCheckboxMenu;\n//# sourceMappingURL=HierarchicalCheckboxMenu.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, { memo } from 'react';\nimport classNames from 'classnames';\nimport { Draggable } from 'react-beautiful-dnd';\nimport { vsClose } from '@deephaven/icons';\nimport Button from \"../Button.js\";\nimport ContextActions from \"../context-actions/ContextActions.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar NavTab = /*#__PURE__*/memo(_ref => {\n var {\n tab,\n onClose,\n onSelect,\n isActive,\n activeRef,\n index,\n isDraggable,\n contextActions\n } = _ref;\n var {\n key,\n isClosable = onClose != null,\n title\n } = tab;\n return /*#__PURE__*/_jsx(Draggable, {\n draggableId: key,\n index: index,\n isDragDisabled: !isDraggable,\n children: (provided, snapshot) => /*#__PURE__*/_jsxs(\"div\", {\n className: \"context-menu-wrapper\",\n ref: isActive ? activeRef : null,\n children: [/*#__PURE__*/_jsxs(\"div\", _objectSpread(_objectSpread(_objectSpread({\n ref: provided.innerRef\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, provided.draggableProps), provided.dragHandleProps), {}, {\n className: classNames('btn btn-link btn-nav-tab', {\n active: isActive\n }, {\n dragging: snapshot.isDragging\n }),\n \"data-testid\": \"btn-nav-tab-\".concat(title),\n role: \"tab\",\n tabIndex: 0,\n onClick: e => {\n e.target.focus();\n // focus is normally set on mousedown, but dnd calls preventDefault for drag purposes\n // so we can call focus on the firing of the actual click event manually\n\n onSelect(key);\n },\n onKeyPress: event => {\n if (event.key === 'Enter') onSelect(key);\n },\n children: [title, isClosable && /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn-nav-tab-close\",\n onClick: event => {\n onClose === null || onClose === void 0 ? void 0 : onClose(key);\n event.stopPropagation();\n event.preventDefault();\n },\n icon: vsClose,\n tooltip: \"Close\"\n })]\n })), /*#__PURE__*/_jsx(ContextActions, {\n actions: contextActions\n })]\n })\n }, key);\n});\nNavTab.displayName = 'NavTab';\nexport default NavTab;\n//# sourceMappingURL=NavTab.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, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport clamp from 'lodash.clamp';\nimport { DragDropContext, Droppable } from 'react-beautiful-dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsChevronRight, vsChevronLeft } from '@deephaven/icons';\nimport { useResizeObserver } from '@deephaven/react-hooks';\nimport DragUtils from \"../DragUtils.js\";\nimport Button from \"../Button.js\";\nimport NavTab from \"./NavTab.js\";\nimport \"./NavTabList.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n// mouse hold timeout to act as hold instead of click\nvar CLICK_TIMEOUT = 500;\n\n// mouse hold acceleration\nvar START_SPEED = 0.01;\nvar ACCELERATION = 0.0005;\nfunction isScrolledLeft(element) {\n return element.scrollLeft === 0;\n}\nfunction isScrolledRight(element) {\n return element.scrollLeft + element.clientWidth === element.scrollWidth || element.scrollWidth === 0;\n}\nfunction makeBaseContextActions(tab, tabs, onClose) {\n var {\n isClosable = false,\n key\n } = tab;\n var contextActions = [];\n if (isClosable && onClose != null) {\n contextActions.push({\n title: 'Close',\n order: 10,\n group: 20,\n action: () => {\n onClose(key);\n }\n });\n var disabled = true;\n for (var i = tabs.length - 1; i > 0; i -= 1) {\n if (tabs[i].key === tab.key) break;\n if (tabs[i].isClosable === true) {\n disabled = false;\n break;\n }\n }\n contextActions.push({\n title: 'Close to the Right',\n order: 20,\n group: 20,\n action: () => {\n for (var _i = tabs.length - 1; _i > 0; _i -= 1) {\n if (tabs[_i].key === key) break;\n if (tabs[_i].isClosable === true) onClose(tabs[_i].key);\n }\n },\n disabled\n });\n contextActions.push({\n title: 'Close All',\n order: 30,\n group: 20,\n action: () => {\n tabs.forEach(t => {\n if (t.isClosable === true) onClose(t.key);\n });\n }\n });\n }\n return contextActions;\n}\nfunction NavTabList(_ref) {\n var {\n activeKey,\n tabs,\n onSelect,\n onReorder,\n onClose,\n makeContextActions\n } = _ref;\n var containerRef = useRef();\n var [isOverflowing, setIsOverflowing] = useState(true);\n var [disableScrollLeft, setDisableScrollLeft] = useState(true);\n var [disableScrollRight, setDisableScrollRight] = useState(true);\n var handleResize = useCallback(() => {\n if (containerRef.current == null) {\n return;\n }\n if (containerRef.current.clientWidth < containerRef.current.scrollWidth && tabs.length > 0) {\n setIsOverflowing(true);\n } else {\n setIsOverflowing(false);\n }\n setDisableScrollLeft(isScrolledLeft(containerRef.current));\n setDisableScrollRight(isScrolledRight(containerRef.current));\n }, [tabs]);\n useResizeObserver(containerRef.current, handleResize);\n var onDragEnd = useCallback(result => {\n DragUtils.stopDragging();\n\n // dropped outside the list\n if (!result.destination) {\n return;\n }\n onReorder === null || onReorder === void 0 ? void 0 : onReorder(result.source.index, result.destination.index);\n }, [onReorder]);\n var handleScroll = useCallback(() => {\n if (containerRef.current == null) {\n return;\n }\n var shouldDisableScrollLeft = isScrolledLeft(containerRef.current);\n if (shouldDisableScrollLeft !== disableScrollLeft) {\n setDisableScrollLeft(shouldDisableScrollLeft);\n }\n var shouldDisableScrollRight = isScrolledRight(containerRef.current);\n if (shouldDisableScrollRight !== disableScrollRight) {\n setDisableScrollRight(shouldDisableScrollRight);\n }\n }, [disableScrollLeft, disableScrollRight]);\n var continuousScrollRef = useRef({\n cancelClick: false\n });\n var handleLeftClick = useCallback(() => {\n if (containerRef.current == null || continuousScrollRef.current.cancelClick) {\n return;\n }\n var {\n children\n } = containerRef.current;\n for (var i = children.length - 1; i >= 0; i -= 1) {\n var child = children[i];\n // Subtract 5px from left edge to account for rounding of offset values\n if (child.offsetLeft < containerRef.current.scrollLeft - 5) {\n child.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'start'\n });\n return;\n }\n }\n }, []);\n var handleRightClick = useCallback(() => {\n if (containerRef.current == null || continuousScrollRef.current.cancelClick) {\n return;\n }\n var {\n children\n } = containerRef.current;\n for (var i = 0; i < children.length; i += 1) {\n var child = children[i];\n // Add 5px to right edge to account for rounding of offset values\n if (child.offsetLeft + 5 > containerRef.current.scrollLeft + containerRef.current.offsetWidth) {\n child.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'end'\n });\n return;\n }\n }\n }, []);\n\n /**\n * Recurively called after initial timeout on mousedown. Continuously scroll with acceleration.\n * Cancelled by mouseup handler cancelling the animationFrame.\n * @param direction of scroll, left or right\n * @param startX starting position of scroll\n * @param deltaX delta from intial startX calculated recursively\n * @param prevTimestamp called on subsequent delta frames\n */\n var handleMouseRepeat = useCallback(function (direction, startX) {\n var deltaX = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var prevTimestamp = arguments.length > 3 ? arguments[3] : undefined;\n var container = containerRef.current;\n if (container == null) {\n return;\n }\n continuousScrollRef.current.cancelClick = true;\n if (direction === 'left') {\n // eslint-disable-next-line no-param-reassign\n container.scrollLeft = startX - deltaX;\n } else if (direction === 'right') {\n // eslint-disable-next-line no-param-reassign\n container.scrollLeft = startX + deltaX;\n }\n\n // eslint-disable-next-line no-param-reassign\n continuousScrollRef.current.rAF = requestAnimationFrame(timestamp => {\n var startTime = prevTimestamp !== null && prevTimestamp !== void 0 ? prevTimestamp : timestamp;\n var deltaTime = timestamp - startTime;\n var newDeltaX = START_SPEED * deltaTime + 0.5 * ACCELERATION * deltaTime ** 2;\n newDeltaX = Math.min(newDeltaX, container.scrollWidth);\n // scrollLeft enforces a limit but no point letting delta increment beyond scrollWidth\n\n handleMouseRepeat(direction, startX, newDeltaX, startTime);\n });\n }, []);\n var endContinuousScroll = useCallback(() => {\n var {\n holdTimer,\n rAF\n } = continuousScrollRef.current;\n if (holdTimer != null) {\n clearTimeout(holdTimer);\n continuousScrollRef.current.holdTimer = undefined;\n }\n if (rAF != null) {\n cancelAnimationFrame(rAF);\n continuousScrollRef.current.rAF = undefined;\n }\n window.removeEventListener('mouseup', endContinuousScroll);\n }, []);\n useEffect(() => () => window.removeEventListener('mouseup', endContinuousScroll), [endContinuousScroll]);\n var handleMouseDown = useCallback(direction => {\n if (containerRef.current != null) {\n continuousScrollRef.current.holdTimer = window.setTimeout(handleMouseRepeat, CLICK_TIMEOUT, direction, containerRef.current.scrollLeft);\n }\n continuousScrollRef.current.cancelClick = false;\n window.addEventListener('mouseup', endContinuousScroll);\n }, [endContinuousScroll, handleMouseRepeat]);\n var handleMouseDownLeft = useCallback(() => {\n handleMouseDown('left');\n }, [handleMouseDown]);\n var handleMouseDownRight = useCallback(() => {\n handleMouseDown('right');\n }, [handleMouseDown]);\n\n // React binds to the root as a passive listener for wheel\n // This prevents the wheel event from being canceled\n // Bypass React's event system so we can prevent the default behavior\n // https://github.com/facebook/react/issues/14856\n useEffect(function handleWheel() {\n var _containerRef$current;\n var onWheel = e => {\n e.stopPropagation();\n e.preventDefault();\n var nav = e.currentTarget;\n var delta = Math.abs(e.deltaY) > Math.abs(e.deltaX) ? e.deltaY : e.deltaX;\n\n // Scrolling jumps too far sometimes, so clamp to get a smoother scroll\n nav.scrollLeft += clamp(delta, -30, 30);\n };\n (_containerRef$current = containerRef.current) === null || _containerRef$current === void 0 ? void 0 : _containerRef$current.addEventListener('wheel', onWheel);\n return () => {\n var _containerRef$current2;\n (_containerRef$current2 = containerRef.current) === null || _containerRef$current2 === void 0 ? void 0 : _containerRef$current2.removeEventListener('wheel', onWheel);\n };\n }, []);\n var tabContextActionMap = useMemo(() => {\n var tabContextActions = new Map();\n tabs.forEach(tab => {\n var {\n key\n } = tab;\n var contextActions = [() => makeBaseContextActions(tab, tabs, onClose), () => {\n var _makeContextActions;\n return (_makeContextActions = makeContextActions === null || makeContextActions === void 0 ? void 0 : makeContextActions(tab)) !== null && _makeContextActions !== void 0 ? _makeContextActions : [];\n }];\n tabContextActions.set(key, contextActions);\n });\n return tabContextActions;\n }, [makeContextActions, tabs, onClose]);\n var activeTabRef = useRef(null);\n var activeTab = tabs.find(tab => tab.key === activeKey);\n var navTabs = tabs.map((tab, index) => {\n var {\n key\n } = tab;\n var isActive = tab === activeTab;\n return /*#__PURE__*/_jsx(NavTab, {\n tab: tab,\n index: index,\n isActive: isActive,\n activeRef: activeTabRef,\n onSelect: onSelect,\n onClose: onClose,\n isDraggable: onReorder != null,\n contextActions: tabContextActionMap.get(key)\n }, key);\n });\n useEffect(\n // Needs to be in a useEffect so the ref is updated\n function scrollActiveTabIntoView() {\n if (activeTabRef.current != null) {\n activeTabRef.current.scrollIntoView({\n block: 'nearest',\n inline: 'nearest'\n });\n }\n }, [activeKey]);\n return /*#__PURE__*/_jsxs(\"nav\", {\n className: \"nav-container\",\n children: [isOverflowing && /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n icon: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsChevronLeft,\n transform: \"grow-4\"\n }),\n className: \"tab-controls-btn tab-controls-btn-left\",\n tooltip: \"Scroll left\",\n onClick: handleLeftClick,\n onMouseDown: handleMouseDownLeft,\n disabled: disableScrollLeft\n }), /*#__PURE__*/_jsx(DragDropContext, {\n onDragStart: DragUtils.startDragging,\n onDragEnd: onDragEnd,\n children: /*#__PURE__*/_jsx(Droppable, {\n droppableId: \"droppable-tab-navigation\",\n direction: \"horizontal\",\n children: (provided, snapshot) => /*#__PURE__*/_jsxs(\"div\", _objectSpread(_objectSpread({\n ref: r => {\n if (r == null) {\n return;\n }\n containerRef.current = r;\n provided.innerRef(r);\n }\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, provided.droppableProps), {}, {\n className: classNames('nav nav-tabs', {\n dragging: snapshot.draggingFromThisWith\n }),\n role: \"tablist\",\n onScroll: handleScroll,\n children: [navTabs, provided.placeholder]\n }))\n })\n }), isOverflowing && /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n icon: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsChevronRight,\n transform: \"grow-4\"\n }),\n className: \"tab-controls-btn tab-controls-btn-right\",\n tooltip: \"Scroll right\",\n onClick: handleRightClick,\n onMouseDown: handleMouseDownRight,\n disabled: disableScrollRight\n })]\n });\n}\nexport default NavTabList;\n//# sourceMappingURL=NavTabList.js.map","import { useCallback } from 'react';\nimport { Item, Picker } from '@adobe/react-spectrum';\nimport useTheme from \"./useTheme.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function ThemePicker() {\n var {\n selectedThemeKey,\n setSelectedThemeKey,\n themes\n } = useTheme();\n var onSelectionChange = useCallback(key => {\n setSelectedThemeKey(key);\n }, [setSelectedThemeKey]);\n return /*#__PURE__*/_jsx(Picker, {\n label: \"Pick a color scheme\",\n items: themes,\n selectedKey: selectedThemeKey,\n onSelectionChange: onSelectionChange,\n children: item => /*#__PURE__*/_jsx(Item, {\n children: item.name\n }, item.themeKey)\n });\n}\nexport default ThemePicker;\n//# sourceMappingURL=ThemePicker.js.map","import classNames from 'classnames';\nimport \"./Logo.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function Logo(_ref) {\n var {\n className,\n style\n } = _ref;\n return /*#__PURE__*/_jsx(\"div\", {\n className: classNames('dh-logo', className),\n style: style\n });\n}\nexport default Logo;\n//# sourceMappingURL=Logo.js.map","/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable react/display-name */\n\nimport React, { useEffect, useState, useRef, useMemo } from 'react';\nimport debounce from 'lodash.debounce';\nimport { assertNotNull } from '@deephaven/utils';\nimport \"./RandomAreaPlotAnimation.css\";\nimport { resolveCssVariablesInRecord, useTheme } from \"./theme/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar VOLATILITY = 0.025; // how spikey the data gets\nvar LOW = 0.9;\nvar HIGH = 0.1;\nvar START_Y = 0.618;\nvar GRID_SIZE = 80;\nvar PATTERN = {\n SIZE: 8,\n DOT_SIZE: 2\n};\nvar PX_PER_SECOND = 18;\nvar RESIZE_DEBOUNCE = 250;\nvar INTERACTION_TIMEOUT = 60 * 1000;\nvar THEME_COLOR_VARIABLES = {\n background: 'var(--dh-color-random-area-plot-animation-bg)',\n foregroundFill: 'var(--dh-color-random-area-plot-animation-fg-fill)',\n foregroundStroke: 'var(--dh-color-random-area-plot-animation-fg-stroke)',\n gridColor: 'var(--dh-color-random-area-plot-animation-grid)'\n};\n\n/**\n * Resolve theme colors needed for our animation.\n */\nfunction getRandomAreaPlotAnimationThemeColors() {\n return resolveCssVariablesInRecord(THEME_COLOR_VARIABLES);\n}\n\n// Draw a background canvas, paint it with a fun chart looking animation\nvar RandomAreaPlotAnimation = /*#__PURE__*/React.memo(() => {\n var {\n activeThemes\n } = useTheme();\n var themeColors = useMemo(getRandomAreaPlotAnimationThemeColors, [activeThemes]);\n var canvas = useRef(null);\n var container = useRef(null);\n var [shade, setShade] = useState(false);\n var scale = window.devicePixelRatio;\n var ctx;\n var pattern;\n var width;\n var height;\n var rAF;\n var lastTimestamp = null;\n var data = [];\n function setCanvasSize() {\n var _ctx;\n // Set canvas size to fill screen\n if (container.current != null) {\n width = container.current.offsetWidth;\n height = container.current.offsetHeight;\n }\n if (canvas.current != null) {\n canvas.current.style.width = \"\".concat(width, \"px\");\n canvas.current.style.height = \"\".concat(height, \"px\");\n canvas.current.width = width * scale;\n canvas.current.height = height * scale;\n }\n (_ctx = ctx) === null || _ctx === void 0 ? void 0 : _ctx.scale(scale, scale);\n }\n\n // Returns the background fill create offscreen as pattern\n function createPatternFill() {\n var {\n foregroundFill,\n foregroundStroke\n } = themeColors;\n\n // create the off-screen canvas\n var canvasPattern = document.createElement('canvas');\n canvasPattern.width = PATTERN.SIZE;\n canvasPattern.height = PATTERN.SIZE;\n var contextPattern = canvasPattern.getContext('2d');\n\n // draw pattern to off-screen context\n if (contextPattern != null) {\n contextPattern.fillStyle = foregroundStroke;\n contextPattern.fillRect(0, 0, PATTERN.DOT_SIZE, PATTERN.DOT_SIZE);\n\n // add an overlay fill\n contextPattern.fillStyle = foregroundFill;\n contextPattern.fillRect(0, 0, PATTERN.SIZE, PATTERN.SIZE);\n }\n return contextPattern === null || contextPattern === void 0 ? void 0 : contextPattern.createPattern(canvasPattern, 'repeat');\n }\n\n /**\n * Generates a step in a random walk between LOW - HIGH given a previous value\n * data is always in 0-1 data space so its scaleable\n * data space is converted to screen space inside draw functions\n * @param prev previous random walk step\n * @return new random walk step\n */\n function randomWalk(prev) {\n var rand = Math.random() - 0.5; // give it directionality\n var change = VOLATILITY * rand; // scale by volatity constant\n\n // ensure directional bounce off approaching edges\n if (prev < HIGH) {\n change = Math.abs(change);\n } else if (prev > LOW) {\n change = -Math.abs(change);\n }\n return prev + change;\n }\n function initData() {\n var startingData = [];\n var y = START_Y; // always start towards the bottom of the screen\n for (var x = 0; x < width + PX_PER_SECOND; x += 1) {\n y = randomWalk(y);\n startingData.push(y);\n }\n return startingData;\n }\n function setDataSize() {\n while (data.length >= width + PX_PER_SECOND) {\n data.pop();\n }\n while (data.length < width + PX_PER_SECOND) {\n data.push(randomWalk(data[data.length - 1]));\n }\n }\n function drawAreaLine(path, context) {\n context.beginPath();\n // start offscreen\n context.moveTo(-1, height + 1);\n context.lineTo(-1, height * path[0]);\n\n // draw the line\n for (var i = 0; i < path.length; i += 1) {\n context.lineTo(i, height * path[i]);\n }\n\n // close offscreen\n context.lineTo(width + PX_PER_SECOND, height * path[path.length - 1]);\n context.lineTo(width + PX_PER_SECOND, height + 1);\n context.closePath();\n }\n function drawGridLines(context) {\n context.beginPath();\n // draw verticals\n for (var x = 1; x < width; x += GRID_SIZE) {\n context.moveTo(x, 0);\n context.lineTo(x, height);\n }\n // draw horizontals\n for (var y = 1; y < height; y += GRID_SIZE) {\n context.moveTo(0, y);\n context.lineTo(width, y);\n }\n }\n\n /**\n * Main draw loop for where the animation happens\n * all the styling happens within drawCanvas from paths generated by other functions\n * @param timestamp passed in callback from requestAnimationFrame\n */\n function drawCanvas(timestamp) {\n var _lastTimestamp, _lastTimestamp2, _lastTimestamp3;\n lastTimestamp = (_lastTimestamp = lastTimestamp) !== null && _lastTimestamp !== void 0 ? _lastTimestamp : timestamp;\n var {\n background,\n foregroundStroke,\n gridColor\n } = themeColors;\n assertNotNull(ctx);\n // clear the canvas\n ctx.fillStyle = background;\n ctx.fillRect(0, 0, width, height);\n drawGridLines(ctx);\n ctx.lineWidth = 1;\n ctx.strokeStyle = gridColor;\n ctx.stroke();\n\n // for speeds less then 60 px per second, subpixel motion is required to look smooth\n var subPixelMotion = (((_lastTimestamp2 = lastTimestamp) !== null && _lastTimestamp2 !== void 0 ? _lastTimestamp2 : 0) - (timestamp !== null && timestamp !== void 0 ? timestamp : 0)) / (1000 / PX_PER_SECOND);\n ctx.translate(subPixelMotion, 0);\n drawAreaLine(data, ctx);\n ctx.lineWidth = 2;\n ctx.strokeStyle = foregroundStroke;\n ctx.stroke();\n ctx.translate(-subPixelMotion, 0); // we don't pattern to shift however\n if (pattern != null) {\n ctx.fillStyle = pattern;\n }\n ctx.fill();\n ctx.setTransform(scale, 0, 0, scale, 0, 0); // reset the translate matrix to normal\n\n // generate new data points\n if ((timestamp !== null && timestamp !== void 0 ? timestamp : 0) - ((_lastTimestamp3 = lastTimestamp) !== null && _lastTimestamp3 !== void 0 ? _lastTimestamp3 : 0) > 1000 / PX_PER_SECOND) {\n var _lastTimestamp4;\n // number of points to add since last update\n var numberOfPoints = Math.floor(((timestamp !== null && timestamp !== void 0 ? timestamp : 0) - ((_lastTimestamp4 = lastTimestamp) !== null && _lastTimestamp4 !== void 0 ? _lastTimestamp4 : 0)) / (1000 / PX_PER_SECOND));\n for (var i = 0; i < numberOfPoints; i += 1) {\n data.shift();\n data.push(randomWalk(data[data.length - 1]));\n }\n lastTimestamp = timestamp;\n }\n if (rAF != null) {\n cancelAnimationFrame(rAF);\n }\n rAF = requestAnimationFrame(drawCanvas);\n }\n\n // debounce the resize so its not overly aggresive\n var debouncedHandleResize = debounce(() => {\n rAF = requestAnimationFrame(timestamp => {\n setCanvasSize(); // setCanvas can cause lag if not debounced\n\n // fill or remove extra data points\n setDataSize();\n\n // opening devtools triggers a blur then resize,\n // need to reset shade as we are restarting animation\n setShade(false);\n drawCanvas(timestamp);\n });\n }, RESIZE_DEBOUNCE, {\n leading: true\n } // resize immediately, once.\n );\n\n function pauseAnimation() {\n // pause animation when browser window is blurred to conserve CPU usage\n setShade(true);\n if (rAF != null) {\n cancelAnimationFrame(rAF);\n }\n rAF = null;\n lastTimestamp = null;\n }\n\n // when timeout expires, pause animation\n var resetIdleTimeout = debounce(() => {\n pauseAnimation();\n }, INTERACTION_TIMEOUT);\n function startAnimation() {\n // can fire multiple times, check if rAF is null first\n // restart animation loop, and fade back in\n if (rAF == null) {\n setShade(false);\n setCanvasSize();\n setDataSize();\n rAF = requestAnimationFrame(drawCanvas);\n }\n resetIdleTimeout();\n }\n function handleActivity() {\n if (document.hasFocus()) {\n // only if document has focus (mousemove can fire on non-focused tabs)\n startAnimation();\n }\n }\n function handleResize() {\n // pause and debounce animation during resize for better resizing performance\n if (rAF != null) {\n cancelAnimationFrame(rAF);\n }\n resetIdleTimeout(); // treat resizing as a form of activity\n debouncedHandleResize();\n }\n\n // react mount/unmount hooks\n useEffect(() => {\n var _canvas$current;\n ctx = (_canvas$current = canvas.current) === null || _canvas$current === void 0 ? void 0 : _canvas$current.getContext('2d', {\n alpha: false\n });\n setCanvasSize();\n data = initData();\n pattern = createPatternFill();\n\n // start draw loop\n drawCanvas();\n resetIdleTimeout();\n window.addEventListener('resize', handleResize);\n window.addEventListener('focus', startAnimation);\n window.addEventListener('blur', pauseAnimation);\n\n // don't burn cpu if the user is \"idle\", start a timer that resets\n // on any user activity, and on timeout expiry pause the animation\n window.addEventListener('mousemove', handleActivity);\n window.addEventListener('keydown', handleActivity);\n return () => {\n if (rAF != null) {\n cancelAnimationFrame(rAF);\n }\n window.removeEventListener('resize', handleResize);\n window.removeEventListener('focus', startAnimation);\n window.removeEventListener('blur', pauseAnimation);\n window.removeEventListener('mousemove', handleActivity);\n window.removeEventListener('keydown', handleActivity);\n resetIdleTimeout.cancel();\n debouncedHandleResize.cancel();\n };\n }, [themeColors]);\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"random-area-plot-animation-container\",\n ref: container,\n children: /*#__PURE__*/_jsx(\"canvas\", {\n ref: canvas,\n className: shade ? 'shade' : ''\n })\n });\n});\nexport default RandomAreaPlotAnimation;\n//# sourceMappingURL=RandomAreaPlotAnimation.js.map","import { useMemo } from 'react';\nimport { Text } from '@adobe/react-spectrum';\nimport stylesCommon from \"./SpectrumComponent.module.css\";\nimport { Tooltip } from \"./popper/index.js\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nexport function TextWithTooltip(_ref) {\n var {\n text,\n placement = 'top-start'\n } = _ref;\n var options = useMemo(() => ({\n placement\n }), [placement]);\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(Text, {\n UNSAFE_className: stylesCommon.spectrumEllipsis,\n children: text !== null && text !== void 0 ? text :\n /*#__PURE__*/\n /* so that height doesn't collapse when empty */\n _jsx(_Fragment, {\n children: \"\\xA0\"\n })\n }), text == null || text === '' ? null : /*#__PURE__*/_jsx(Tooltip, {\n options: options,\n children: text\n })]\n });\n}\nexport default TextWithTooltip;\n//# sourceMappingURL=TextWithTooltip.js.map","var _excluded = [\"scrollRef\", \"getItemDisplayText\", \"getKey\"];\nfunction 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 _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n/* eslint-disable react/jsx-props-no-spreading */\nimport { useCallback } from 'react';\nimport { ComboBox, Item } from '@adobe/react-spectrum';\nimport TextWithTooltip from \"./TextWithTooltip.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function SearchableCombobox(_ref) {\n var {\n scrollRef,\n getItemDisplayText,\n getKey\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n var renderItem = useCallback(item => {\n var key = getKey(item);\n var displayText = getItemDisplayText(item);\n return /*#__PURE__*/_jsx(Item, {\n textValue: displayText !== null && displayText !== void 0 ? displayText : String(key),\n children: /*#__PURE__*/_jsx(TextWithTooltip, {\n text: displayText\n })\n }, key);\n }, [getItemDisplayText, getKey]);\n return /*#__PURE__*/_jsx(ComboBox, _objectSpread(_objectSpread({}, props), {}, {\n // The `ref`prop type defined by React Spectrum is incorrect here\n ref: scrollRef,\n menuTrigger: \"focus\"\n // Type assertion is necessary since <ComboBox> types don't recognize the\n // generic key arg\n ,\n onSelectionChange: props.onSelectionChange,\n children: renderItem\n }));\n}\nexport default SearchableCombobox;\n//# sourceMappingURL=SearchableCombobox.js.map","import React from 'react';\nimport classNames from 'classnames';\nimport { dhExclamation, vsLink } from '@deephaven/icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport \"./SocketedButton.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar SocketedButton = /*#__PURE__*/React.forwardRef((props, ref) => {\n var {\n children,\n className,\n disabled,\n id,\n isLinked,\n isLinkedSource,\n isInvalid,\n onClick,\n onMouseEnter,\n onMouseLeave,\n style,\n 'data-testid': dataTestId\n } = props;\n return /*#__PURE__*/_jsxs(\"button\", {\n ref: ref,\n type: \"button\",\n className: classNames('btn-socketed', {\n 'btn-socketed-linked': isLinked !== undefined && isLinked || isLinkedSource\n }, {\n 'btn-socketed-linked-source': isLinkedSource\n }, {\n 'is-invalid': isInvalid\n }, className),\n id: id,\n onClick: onClick,\n onMouseEnter: onMouseEnter,\n onMouseLeave: onMouseLeave,\n style: style,\n disabled: disabled,\n \"data-testid\": dataTestId,\n children: [children, /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsLink,\n className: \"linked btn-socketed-icon\",\n transform: \"down-1\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhExclamation,\n className: \"is-invalid btn-socketed-icon\"\n })]\n });\n});\nSocketedButton.displayName = 'SocketedButton';\nSocketedButton.defaultProps = {\n children: undefined,\n className: '',\n disabled: false,\n id: undefined,\n isLinked: false,\n isLinkedSource: false,\n isInvalid: false,\n onClick: undefined,\n onMouseEnter: undefined,\n onMouseLeave: undefined,\n style: undefined,\n 'data-testid': undefined\n};\nexport default SocketedButton;\n//# sourceMappingURL=SocketedButton.js.map","import { useEffect, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Content, Heading, Icon, IllustratedMessage } from '@adobe/react-spectrum';\nimport { vsEmptyWindow } from '@deephaven/icons';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar DEFAULT_DELAY_MS = 500;\nexport function TableViewEmptyState(_ref) {\n var {\n heading,\n content,\n delayMs = DEFAULT_DELAY_MS\n } = _ref;\n var [show, setShow] = useState(false);\n\n // Spectrum `TableView` will render the result of `renderEmptyState` prop\n // immediately, and it will be hidden once data loads. In cases where the data\n // load is quick, there is a jarring flicker, and the empty data message is\n // not helpful. This delay will avoid showing the message if data loads within\n // the `delayMs`.\n useEffect(() => {\n window.setTimeout(() => {\n setShow(true);\n }, delayMs);\n }, [delayMs]);\n return show ? /*#__PURE__*/_jsxs(IllustratedMessage, {\n children: [/*#__PURE__*/_jsx(Icon, {\n size: \"XXL\",\n children: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsEmptyWindow\n })\n }), /*#__PURE__*/_jsx(Heading, {\n children: heading\n }), content == null ? null : /*#__PURE__*/_jsx(Content, {\n children: content\n })]\n }) : null;\n}\nexport default TableViewEmptyState;\n//# sourceMappingURL=TableViewEmptyState.js.map","/* eslint-disable react/no-array-index-key */\n// array maps being used are static, this is fine.\n\nimport React, { useCallback, useMemo, useRef, useState, useEffect } from 'react';\nimport classNames from 'classnames';\nimport TimeInput from \"./TimeInput.js\";\nimport StyleExports from \"./TimeSlider.module.css\";\nimport \"./TimeSlider.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 HANDLE_SIZE = parseInt(StyleExports['handle-size'], 10);\nvar POPOVER_WIDTH = parseInt(StyleExports['popover-width'], 10);\nvar SECONDS_IN_DAY = 24 * 60 * 60 - 1; // Max is actually 23:59:59\nvar SNAP_NEAREST_MINUTES = 5 * 60; // rounds in 5 minute intervals\n\n/**\n * Creates a time slider for setting a start and end time, that can also run overnight\n * @param props takes times in seconds 0 - 86399 and a callback\n */\nfunction TimeSlider(_ref) {\n var {\n startTime: propStartTime,\n endTime: propEndTime,\n onChange,\n isStartModified = false,\n isEndModified = false,\n 'data-testid': dataTestId\n } = _ref;\n var [startTime, setStartTime] = useState(propStartTime);\n var [endTime, setEndTime] = useState(propEndTime);\n var track = useRef(null); // we need the track width while calulculating time from handle drag\n\n // updates state if props change\n useEffect(function setTimeOnPropTimeChange() {\n setStartTime(propStartTime);\n setEndTime(propEndTime);\n }, [propStartTime, propEndTime]);\n var updateTime = useCallback((newStartTime, newEndTime) => {\n var start = newStartTime;\n var end = newEndTime;\n if (start === end) {\n if (end < SECONDS_IN_DAY) {\n end += 1;\n } else {\n start -= 1;\n }\n }\n setStartTime(start);\n setEndTime(end);\n onChange({\n startTime: start,\n endTime: end\n });\n }, [setStartTime, setEndTime, onChange]);\n var handleStartTimeChange = useCallback(newStartTime => {\n updateTime(newStartTime, endTime);\n }, [updateTime, endTime]);\n var handleEndTimeChange = useCallback(newEndTime => {\n updateTime(startTime, newEndTime);\n }, [updateTime, startTime]);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"time-slider\",\n \"data-testid\": dataTestId,\n children: [/*#__PURE__*/_jsx(PopOvers, {\n startTime: startTime,\n endTime: endTime,\n onStartTimeChange: handleStartTimeChange,\n onEndTimeChange: handleEndTimeChange,\n isStartModified: isStartModified,\n isEndModified: isEndModified\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"track\",\n ref: track,\n children: [/*#__PURE__*/_jsx(TrackFills, {\n startTime: startTime,\n endTime: endTime\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"ticks\",\n children: Array(24).fill(null).map((value, index) => /*#__PURE__*/_jsx(\"div\", {\n className: \"tick\"\n }, index))\n }), /*#__PURE__*/_jsx(Handle, {\n track: track,\n time: startTime,\n setTime: handleStartTimeChange\n }), /*#__PURE__*/_jsx(Handle, {\n track: track,\n time: endTime,\n setTime: handleEndTimeChange\n })]\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"tick-labels\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"tick-label\",\n children: \"0:00\"\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"tick-label-wrapper\",\n children: Array(24).fill(null).map((value, index) => /*#__PURE__*/_jsx(\"div\", {\n className: \"tick-label\",\n children: \"\".concat(index + 1, \":00\")\n }, index))\n })]\n })]\n });\n}\nfunction PopOvers(props) {\n var {\n startTime,\n endTime,\n onStartTimeChange,\n onEndTimeChange,\n isStartModified,\n isEndModified,\n 'data-testid': dataTestId\n } = props;\n var swapTimes = startTime > endTime;\n var [firstTime, setFirstTime] = useState(swapTimes ? endTime : startTime);\n var [secondTime, setSecondTime] = useState(swapTimes ? startTime : endTime);\n var firstTimeRef = useRef(null);\n var secondTimeRef = useRef(null);\n // Keep track of selection in both time inputs\n var firstTimeSelectionRef = useRef(null);\n var secondTimeSelectionRef = useRef(null);\n useEffect(function setTimeOnPropTimeChange() {\n setFirstTime(startTime > endTime ? endTime : startTime);\n setSecondTime(startTime > endTime ? startTime : endTime);\n }, [startTime, endTime]);\n useEffect(function setFocusOnSwapTimesChange() {\n if (firstTimeSelectionRef.current !== null) {\n var _secondTimeRef$curren;\n (_secondTimeRef$curren = secondTimeRef.current) === null || _secondTimeRef$curren === void 0 ? void 0 : _secondTimeRef$curren.setSelection(firstTimeSelectionRef.current);\n }\n if (secondTimeSelectionRef.current !== null) {\n var _firstTimeRef$current;\n (_firstTimeRef$current = firstTimeRef.current) === null || _firstTimeRef$current === void 0 ? void 0 : _firstTimeRef$current.setSelection(secondTimeSelectionRef.current);\n }\n }, [swapTimes]);\n function onFirstTimeChange(value) {\n if (startTime <= endTime) {\n onStartTimeChange(value);\n } else {\n onEndTimeChange(value);\n }\n }\n function onSecondTimeChange(value) {\n if (startTime <= endTime) {\n onEndTimeChange(value);\n } else {\n onStartTimeChange(value);\n }\n }\n var onFirstTimeSelect = useCallback(selection => {\n firstTimeSelectionRef.current = selection;\n secondTimeSelectionRef.current = null;\n }, []);\n var onSecondTimeSelect = useCallback(selection => {\n firstTimeSelectionRef.current = null;\n secondTimeSelectionRef.current = selection;\n }, []);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"time-slider-popovers\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"flex\",\n style: {\n flexBasis: \"calc(\".concat(firstTime / SECONDS_IN_DAY * 100, \"% - \").concat(POPOVER_WIDTH / 2, \"px)\")\n }\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"handle-popper\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n className: classNames({\n modified: swapTimes ? isEndModified : isStartModified\n }),\n children: swapTimes ? 'End Time' : 'Start Time'\n }), /*#__PURE__*/_jsx(TimeInput, {\n ref: firstTimeRef,\n allowValueWrapping: false,\n value: firstTime,\n onChange: onFirstTimeChange,\n onSelect: onFirstTimeSelect,\n \"data-testid\": dataTestId !== undefined ? \"\".concat(dataTestId, \"-input-1\") : undefined\n })]\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"flex-spacer\"\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"handle-popper\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n className: classNames({\n modified: swapTimes ? isStartModified : isEndModified\n }),\n children: swapTimes ? 'Start Time' : 'End Time'\n }), /*#__PURE__*/_jsx(TimeInput, {\n ref: secondTimeRef,\n allowValueWrapping: false,\n value: secondTime,\n onChange: onSecondTimeChange,\n onSelect: onSecondTimeSelect,\n \"data-testid\": dataTestId !== undefined ? \"\".concat(dataTestId, \"-input-2\") : undefined\n })]\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"flex\",\n style: {\n flexBasis: \"calc(\".concat((SECONDS_IN_DAY - secondTime) / SECONDS_IN_DAY * 100, \"% - \").concat(POPOVER_WIDTH / 2, \"px)\")\n }\n })]\n });\n}\n/**\n * Shades the area between or outside of handles according to if start or endtime is greater.\n */\nfunction TrackFills(props) {\n var {\n startTime,\n endTime,\n 'data-testid': dataTestId\n } = props;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"track-fills\",\n \"data-testid\": dataTestId,\n children: [startTime > endTime && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"track-fill track-fill-start\",\n style: {\n transform: \"scaleX(\".concat(endTime / SECONDS_IN_DAY, \")\")\n }\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"track-fill track-fill-end\",\n style: {\n transform: \"scaleX(\".concat((SECONDS_IN_DAY - startTime) / SECONDS_IN_DAY, \")\")\n }\n })]\n }), startTime < endTime && /*#__PURE__*/_jsx(\"div\", {\n className: \"track-fill track-fill-middle\",\n style: {\n transform: \"translateX(\".concat(startTime / SECONDS_IN_DAY * 100, \"%) scaleX(\").concat((endTime - startTime) / SECONDS_IN_DAY, \")\")\n }\n })]\n });\n}\n/**\n * Creates a draggable handle the sets the time\n */\nfunction Handle(props) {\n var {\n track,\n time,\n setTime,\n 'data-testid': dataTestId\n } = props;\n\n /**\n * Takes the time and generate our translation string taking into account handle offset.\n * The handle offset changes for the first and last tick range dynmaically. Normally,\n * the center of the handle (size/2) is the selection origin, but at edges, it becomes either\n * end of the handle, requireing a relative offset range of 0 - 0.5, and 0.5 - 1 of handle size.\n * @param t time in seconds\n */\n var transform = useMemo(() => {\n var ONE_HOUR = 60 * 60;\n var handleOffset = HANDLE_SIZE / 2;\n if (time < ONE_HOUR) {\n handleOffset = time / ONE_HOUR * (HANDLE_SIZE / 2); // 0 - 0.5 Handle size\n } else if (time > 23 * ONE_HOUR) {\n handleOffset = HANDLE_SIZE / 2 + 1 / (SECONDS_IN_DAY - 23 * ONE_HOUR) * (time - 23 * ONE_HOUR) * (HANDLE_SIZE / 2); // 0.5 - 1 Handle size\n }\n\n return \"translateX(calc(\".concat(time / SECONDS_IN_DAY * 100, \"% - \").concat(handleOffset, \"px))\");\n }, [time]);\n var calculatePositionAsTime = useCallback(clientX => {\n if (!track.current) {\n return 0;\n }\n var trackRect = track.current.getBoundingClientRect();\n var leftEdge = Math.max(clientX - trackRect.left, 0);\n // get position as 0-1 on slider and mulitply by seconds in a day to convert to time\n var preciseTime = SECONDS_IN_DAY * Math.min(1, leftEdge / trackRect.width);\n // snap to nearest N(5) minute interval\n var roundedTime = SNAP_NEAREST_MINUTES * Math.round(preciseTime / SNAP_NEAREST_MINUTES);\n // prevent over-rounding to 24:00:00\n var limitMax = Math.min(SECONDS_IN_DAY, roundedTime);\n return limitMax;\n }, [track]);\n var handleMouseMove = useCallback(_ref2 => {\n var {\n clientX\n } = _ref2;\n setTime(calculatePositionAsTime(clientX));\n }, [setTime, calculatePositionAsTime]);\n var handleMouseUp = useCallback(_ref3 => {\n var {\n clientX\n } = _ref3;\n setTime(calculatePositionAsTime(clientX));\n window.removeEventListener('mousemove', handleMouseMove);\n window.removeEventListener('mouseup', handleMouseUp);\n document.documentElement.classList.remove('drag-pointer-events-none');\n }, [setTime, calculatePositionAsTime, handleMouseMove]);\n var startDragListening = useCallback(() => {\n window.addEventListener('mousemove', handleMouseMove);\n window.addEventListener('mouseup', handleMouseUp);\n document.documentElement.classList.add('drag-pointer-events-none');\n }, [handleMouseMove, handleMouseUp]);\n var stopDragListening = useCallback(() => {\n window.removeEventListener('mousemove', handleMouseMove);\n window.removeEventListener('mouseup', handleMouseUp);\n document.documentElement.classList.remove('drag-pointer-events-none');\n }, [handleMouseMove, handleMouseUp]);\n var handleMouseDown = useCallback(() => {\n startDragListening();\n }, [startDragListening]);\n useEffect(function removeListenersOnUnmount() {\n return () => {\n stopDragListening();\n };\n }, [stopDragListening]);\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"handle-track\",\n style: {\n transform\n },\n children: /*#__PURE__*/_jsx(\"button\", {\n className: \"handle\",\n type: \"button\",\n \"aria-label\": \"Change time\",\n onMouseDown: handleMouseDown,\n \"data-testid\": dataTestId\n })\n });\n}\nexport default TimeSlider;\n//# sourceMappingURL=TimeSlider.js.map","import React from 'react';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport { vsClose } from '@deephaven/icons';\nimport Button from \"./Button.js\";\nimport ThemeExport from \"./ThemeExport.js\";\nimport \"./ToastNotification.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction ToastNotification(_ref) {\n var {\n buttons,\n isShown = false,\n classNames: classNamesProp,\n message,\n type,\n onClick,\n onDismiss,\n 'data-testid': dataTestId\n } = _ref;\n var hasButtons = buttons && buttons.length !== 0;\n return /*#__PURE__*/_jsx(CSSTransition, {\n in: isShown,\n timeout: ThemeExport.transitionMs,\n classNames: \"toast-notification-slide-up\",\n mountOnEnter: true,\n unmountOnExit: true,\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: classNames('toast-notification', classNamesProp, type),\n role: \"presentation\",\n onClick: onClick,\n onKeyPress: onClick,\n \"data-testid\": dataTestId,\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"message-container\",\n children: /*#__PURE__*/_jsx(\"span\", {\n className: \"message\",\n children: message\n })\n }), /*#__PURE__*/_jsx(CSSTransition, {\n in: hasButtons,\n timeout: ThemeExport.transitionSlowMs,\n classNames: \"fade\",\n mountOnEnter: true,\n unmountOnExit: true,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"buttons-container\",\n children: buttons\n })\n }), onDismiss && /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n icon: vsClose,\n tooltip: \"Close notification\",\n className: \"my-2\",\n onClick: onDismiss\n })]\n })\n });\n}\nToastNotification.TYPE = Object.freeze({\n ERROR: 'error'\n});\nexport default ToastNotification;\n//# sourceMappingURL=ToastNotification.js.map","import React, { useRef } from 'react';\nimport classNames from 'classnames';\nimport shortid from 'shortid';\nimport \"./ValidateLabelInput.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Takes a child and add a label and validaton error\n */\nexport function ValidateLabelInput(props) {\n var {\n children,\n className,\n labelText,\n hintText,\n isModified,\n validationError,\n showValidationError = true,\n 'data-testid': dataTestId,\n id: idProp\n } = props;\n var {\n current: id\n } = useRef(idProp !== null && idProp !== void 0 ? idProp : shortid());\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(\"label\", {\n className: classNames('validate-label', className, {\n modified: isModified\n }),\n htmlFor: id,\n \"data-testid\": dataTestId,\n children: labelText\n }), React.Children.toArray(children).map(child => {\n if (! /*#__PURE__*/React.isValidElement(child)) {\n // eslint-disable-next-line react/jsx-key\n return /*#__PURE__*/_jsx(\"div\", {\n className: classNames(className),\n children: child\n });\n }\n\n // toArray strips null children\n return /*#__PURE__*/React.cloneElement(child, {\n className: classNames(child.props.className, {\n 'is-invalid': validationError\n })\n });\n }), hintText !== undefined && /*#__PURE__*/_jsx(\"small\", {\n className: \"form-text text-muted\",\n children: hintText\n }), validationError !== undefined && showValidationError && /*#__PURE__*/_jsx(\"p\", {\n className: \"validate-label-error text-danger\",\n children: validationError\n })]\n });\n}\nexport default ValidateLabelInput;\n//# sourceMappingURL=ValidateLabelInput.js.map","import { useEffect, useMemo } from 'react';\nimport useApi from \"./useApi.js\";\nexport function useCreateClient(serverUrl, options) {\n var api = useApi();\n var client = useMemo(() => new api.CoreClient(serverUrl, options), [api, serverUrl, options]);\n useEffect(() => () => {\n client.disconnect();\n }, [client]);\n return client;\n}\nexport default useCreateClient;\n//# sourceMappingURL=useCreateClient.js.map","import React, { createContext } from 'react';\nimport useCreateClient from \"./useCreateClient.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport var ClientContext = /*#__PURE__*/createContext(null);\n/**\n * ClientBootstrap component. Handles creating the client.\n */\nexport function ClientBootstrap(_ref) {\n var {\n serverUrl,\n options,\n children\n } = _ref;\n var client = useCreateClient(serverUrl, options);\n return /*#__PURE__*/_jsx(ClientContext.Provider, {\n value: client,\n children: children\n });\n}\nexport default ClientBootstrap;\n//# sourceMappingURL=ClientBootstrap.js.map","import { useContextOrThrow } from '@deephaven/react-hooks';\nimport { ClientContext } from \"./ClientBootstrap.js\";\nexport function useClient() {\n return useContextOrThrow(ClientContext, 'No Client available in useClient. Was code wrapped in ClientBootstrap or ClientContext.Provider?');\n}\nexport default useClient;\n//# sourceMappingURL=useClient.js.map","import React from 'react';\nimport { ApiContext } from '@deephaven/jsapi-bootstrap';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function makeApiContextWrapper(dh) {\n return function ApiContextWrapper(_ref) {\n var {\n children\n } = _ref;\n return /*#__PURE__*/_jsx(ApiContext.Provider, {\n value: dh,\n children: children\n });\n };\n}\nexport default {\n makeApiContextWrapper\n};\n//# sourceMappingURL=HookTestUtils.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 shortid from 'shortid';\nimport Log from '@deephaven/log';\nimport { TimeoutError } from '@deephaven/utils';\nvar log = Log.module('MessageUtils');\nexport var LOGIN_OPTIONS_REQUEST = 'io.deephaven.message.LoginOptions.request';\nexport var SESSION_DETAILS_REQUEST = 'io.deephaven.message.SessionDetails.request';\n\n/**\n * Use a BroadcastChannel for sending messages between tabs, such as when the user logs out.\n */\nexport var BROADCAST_CHANNEL_NAME = 'io.deephaven.broadcast';\n\n/**\n * Event emitted when the user has logged in successfully\n */\nexport var BROADCAST_LOGIN_MESSAGE = 'io.deephaven.broadcast.Login';\n\n/**\n * Event emitted when the user has logged out\n */\nexport var BROADCAST_LOGOUT_MESSAGE = 'io.deephaven.broadcast.Logout';\nexport function isMessage(obj) {\n var message = obj;\n return message != null && typeof message.id === 'string' && typeof message.message === 'string';\n}\nexport function isBroadcastLoginMessage(obj) {\n return isMessage(obj) && obj.message === BROADCAST_LOGIN_MESSAGE;\n}\nexport function isBroadcastLogoutMessage(obj) {\n return isMessage(obj) && obj.message === BROADCAST_LOGOUT_MESSAGE;\n}\nexport function isResponse(obj) {\n var response = obj;\n return response != null && typeof response.id === 'string';\n}\n\n/**\n * Make message object with optional payload\n * @param message Message string\n * @param id Unique message id\n * @param payload Payload to send\n * @returns Message\n */\nexport function makeMessage(message) {\n var id = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : shortid();\n var payload = arguments.length > 2 ? arguments[2] : undefined;\n return {\n message,\n id,\n payload\n };\n}\n\n/**\n * Make response object for given message id\n * @param messageId Id of the request message to respond to\n * @param payload Payload to respond with\n * @returns Response\n */\nexport function makeResponse(messageId, payload) {\n return {\n id: messageId,\n payload\n };\n}\nexport function getWindowParent() {\n if (window.opener != null) {\n return window.opener;\n }\n if (window.parent != null && window.parent !== window) {\n return window.parent;\n }\n return null;\n}\n\n/**\n * Request data from the parent window and wait for response\n * @param request Request message to send to the parent window\n * @param timeout Timeout in ms\n * @returns Payload of the given type, or undefined\n */\nexport function requestParentResponse(_x) {\n return _requestParentResponse.apply(this, arguments);\n}\nfunction _requestParentResponse() {\n _requestParentResponse = _asyncToGenerator(function* (request) {\n var timeout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 30000;\n var parent = getWindowParent();\n if (parent == null) {\n throw new Error('window parent is null, unable to send request.');\n }\n return new Promise((resolve, reject) => {\n var timeoutId;\n var id = shortid();\n var listener = event => {\n var {\n data\n } = event;\n if (!isResponse(data)) {\n log.debug('Ignoring non-deephaven response', data);\n return;\n }\n log.debug('Received message', data);\n if ((data === null || data === void 0 ? void 0 : data.id) !== id) {\n log.debug(\"Ignore message, id doesn't match\", data);\n return;\n }\n window.clearTimeout(timeoutId);\n window.removeEventListener('message', listener);\n resolve(data.payload);\n };\n window.addEventListener('message', listener);\n timeoutId = window.setTimeout(() => {\n window.removeEventListener('message', listener);\n reject(new TimeoutError('Request timed out'));\n }, timeout);\n parent.postMessage(makeMessage(request, id), '*');\n });\n });\n return _requestParentResponse.apply(this, arguments);\n}\n//# sourceMappingURL=MessageUtils.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 NoConsolesError extends Error {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"isNoConsolesError\", true);\n }\n}\nexport function isNoConsolesError(error) {\n return error.isNoConsolesError;\n}\nexport default NoConsolesError;\n//# sourceMappingURL=NoConsolesError.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 Log from '@deephaven/log';\nimport shortid from 'shortid';\nimport { requestParentResponse, SESSION_DETAILS_REQUEST } from \"./MessageUtils.js\";\nimport NoConsolesError, { isNoConsolesError } from \"./NoConsolesError.js\";\nvar log = Log.module('SessionUtils');\n/**\n * @returns New connection to the server\n */\nexport function createConnection(dh, websocketUrl) {\n log.info(\"Starting connection to '\".concat(websocketUrl, \"'...\"));\n return new dh.IdeConnection(websocketUrl);\n}\n\n/**\n * Create a new session using the default URL\n * @returns A session and config that is ready to use\n */\nexport function createSessionWrapper(_x, _x2, _x3) {\n return _createSessionWrapper.apply(this, arguments);\n}\nfunction _createSessionWrapper() {\n _createSessionWrapper = _asyncToGenerator(function* (dh, connection, details) {\n log.info('Getting console types...');\n var types = yield connection.getConsoleTypes();\n if (types.length === 0) {\n throw new NoConsolesError('No console types available');\n }\n log.info('Available types:', types);\n var type = types[0];\n log.info('Starting session with type', type);\n var session = yield connection.startSession(type);\n var config = {\n type,\n id: shortid.generate()\n };\n log.info('Console session established', config);\n return {\n session,\n config,\n connection,\n details,\n dh\n };\n });\n return _createSessionWrapper.apply(this, arguments);\n}\nexport function createCoreClient(dh, websocketUrl, options) {\n log.info('createCoreClient', websocketUrl);\n return new dh.CoreClient(websocketUrl, options);\n}\nfunction isSessionDetails(obj) {\n return obj != null && typeof obj === 'object';\n}\nfunction requestParentSessionDetails() {\n return _requestParentSessionDetails.apply(this, arguments);\n}\nfunction _requestParentSessionDetails() {\n _requestParentSessionDetails = _asyncToGenerator(function* () {\n var response = yield requestParentResponse(SESSION_DETAILS_REQUEST);\n if (!isSessionDetails(response)) {\n throw new Error(\"Unexpected session details response: \".concat(response));\n }\n return response;\n });\n return _requestParentSessionDetails.apply(this, arguments);\n}\nexport function getSessionDetails() {\n return _getSessionDetails.apply(this, arguments);\n}\nfunction _getSessionDetails() {\n _getSessionDetails = _asyncToGenerator(function* () {\n var searchParams = new URLSearchParams(window.location.search);\n switch (searchParams.get('authProvider')) {\n case 'parent':\n return requestParentSessionDetails();\n }\n return {};\n });\n return _getSessionDetails.apply(this, arguments);\n}\nexport function loadSessionWrapper(_x4, _x5, _x6) {\n return _loadSessionWrapper.apply(this, arguments);\n}\nfunction _loadSessionWrapper() {\n _loadSessionWrapper = _asyncToGenerator(function* (dh, connection, sessionDetails) {\n var sessionWrapper;\n try {\n sessionWrapper = yield createSessionWrapper(dh, connection, sessionDetails);\n } catch (e) {\n // Consoles may be disabled on the server, but we should still be able to start up and open existing objects\n if (!isNoConsolesError(e)) {\n throw e;\n }\n }\n return sessionWrapper;\n });\n return _loadSessionWrapper.apply(this, arguments);\n}\n//# sourceMappingURL=SessionUtils.js.map","import { useEffect } from 'react';\nimport Log from '@deephaven/log';\nvar log = Log.module('useTableListener');\nexport var useTableListener = (eventEmitter, eventName, callback) => useEffect(function initEventEmitter() {\n if (eventEmitter == null) {\n log.debug2('Emitter undefined, skipping addEventListener', eventName);\n return;\n }\n log.debug2('Adding listener', eventName);\n return eventEmitter.addEventListener(eventName, callback);\n}, [eventEmitter, eventName, callback]);\nexport default useTableListener;\n//# sourceMappingURL=useTableListener.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 ColumnNameError extends Error {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"isColumnNameError\", true);\n }\n}\nexport default ColumnNameError;\n//# sourceMappingURL=ColumnNameError.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 TableDisconnectError extends Error {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"isTableDisconnectError\", true);\n }\n}\nexport default TableDisconnectError;\n//# sourceMappingURL=TableDisconnectError.js.map","import { useCallback, useEffect, useState } from 'react';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport Log from '@deephaven/log';\nimport useTableListener from \"./useTableListener.js\";\nimport ColumnNameError from \"./ColumnNameError.js\";\nimport TableDisconnectError from \"./TableDisconnectError.js\";\nvar log = Log.module('useTable');\nvar useTable = (table, firstRow, lastRow, columnNames) => {\n var dh = useApi();\n var [columns, setColumns] = useState(undefined);\n var [data, setData] = useState([]);\n var [columnError, setColumnError] = useState(null);\n var [tableError, setTableError] = useState(null);\n useEffect(() => {\n if (columnNames === undefined) {\n setColumns(table === null || table === void 0 ? void 0 : table.columns);\n setColumnError(null);\n return;\n }\n try {\n setColumns(table === null || table === void 0 ? void 0 : table.findColumns(columnNames));\n setColumnError(null);\n } catch (e) {\n log.error(\"Column not found\", e, columnNames);\n setColumnError(new ColumnNameError('Invalid columnNames argument'));\n }\n }, [table, columnNames]);\n useEffect(() => {\n if (!columns || !table) {\n log.debug2('Table or column not initialized, skip viewport update.');\n return;\n }\n log.debug2('Setting viewport', firstRow, lastRow);\n table.setViewport(firstRow, lastRow, columns);\n }, [columns, table, firstRow, lastRow]);\n var handleUpdate = useCallback(_ref => {\n var {\n detail\n } = _ref;\n if (!columns) {\n log.error('Columns not initialized.');\n return;\n }\n var viewportData = columns.map(column => detail.rows.map(r => r.get(column)));\n setData(viewportData);\n }, [columns]);\n var handleDisconnect = useCallback(() => {\n setTableError(new TableDisconnectError('Table disconnected'));\n }, []);\n var handleReconnect = useCallback(() => {\n setTableError(null);\n }, []);\n useTableListener(table, dh.Table.EVENT_UPDATED, handleUpdate);\n useTableListener(table, dh.Table.EVENT_DISCONNECT, handleDisconnect);\n useTableListener(table, dh.Table.EVENT_RECONNECT, handleReconnect);\n return {\n columns,\n data,\n error: tableError !== null && tableError !== void 0 ? tableError : columnError\n };\n};\nexport default useTable;\n//# sourceMappingURL=useTable.js.map","import { useMemo } from 'react';\nimport useTable from \"./useTable.js\";\n/**\n * Subscribe to viewport updates on a single table column\n * @param table Table to get the data from\n * @param firstRow First viewport row\n * @param lastRow Last viewport row\n * @param columnName Column to get the data from\n * @returns Column object, data array for the column, error, setViewport method\n */\nvar useTableColumn = (table, firstRow, lastRow, columnName) => {\n var columnNames = useMemo(() => [columnName], [columnName]);\n var {\n columns = [],\n data = [],\n error\n } = useTable(table, firstRow, lastRow, columnNames);\n return {\n column: columns[0],\n data: data[0],\n error\n };\n};\nexport default useTableColumn;\n//# sourceMappingURL=useTableColumn.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 React, { useCallback, useState, useRef, useEffect, useMemo } from 'react';\nimport classNames from 'classnames';\nimport { LoadingOverlay, SearchInput, SelectValueList } from '@deephaven/components';\nimport { PromiseUtils } from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport { Formatter, FormatterUtils } from '@deephaven/jsapi-utils';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport useTableColumn from \"./useTableColumn.js\";\nimport \"./TableInput.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('TableInput');\nvar SIZE_LIMIT = 250;\nfunction TableInput(props) {\n var _table$size, _error$message;\n var {\n className = undefined,\n columnName,\n settings,\n defaultValue = [],\n isInvalid = false,\n onChange = () => false,\n onBlur = () => false,\n table: tablePromise\n } = props;\n var parentRef = useRef(null);\n var dh = useApi();\n var formatter = useMemo(() => {\n var columnFormats = FormatterUtils.getColumnFormats(settings);\n var dateTimeFormatterOptions = FormatterUtils.getDateTimeFormatterOptions(settings);\n var {\n defaultDecimalFormatOptions = {},\n defaultIntegerFormatOptions = {}\n } = settings;\n return new Formatter(dh, columnFormats, dateTimeFormatterOptions, defaultDecimalFormatOptions, defaultIntegerFormatOptions);\n }, [dh, settings]);\n var [searchValue, setSearchValue] = useState('');\n var [selection, setSelection] = useState(new Set(defaultValue));\n var [table, setTable] = useState();\n var listRef = useRef(null);\n var itemCount = Math.min((_table$size = table === null || table === void 0 ? void 0 : table.size) !== null && _table$size !== void 0 ? _table$size : 0, SIZE_LIMIT);\n var {\n column,\n data,\n error\n } = useTableColumn(table, 0, SIZE_LIMIT - 1, columnName);\n var formatValue = useCallback(value => column ? formatter.getFormattedString(value, column.type, column.name) : \"\".concat(value), [column, formatter]);\n var [items, updatedSelection] = useMemo(() => {\n var removedItems = new Set(selection);\n var result = [];\n if (data == null) {\n // Viewport not initialized\n return [result, null];\n }\n data.forEach(v => {\n var value = \"\".concat(v);\n var isSelected = selection.has(value);\n if (isSelected) {\n removedItems.delete(value);\n }\n result.push({\n value,\n displayValue: formatValue(v),\n isSelected\n });\n });\n if (removedItems.size > 0) {\n log.debug2('Selection has items that are missing from the viewport');\n var newSelection = new Set(selection);\n Array.from(removedItems).forEach(value => {\n newSelection.delete(value);\n });\n return [result, newSelection];\n }\n return [result, null];\n }, [data, selection, formatValue]);\n useEffect(() => {\n if (updatedSelection !== null) {\n setSelection(updatedSelection);\n onChange(Array.from(updatedSelection));\n }\n }, [onChange, updatedSelection]);\n var initTable = useCallback( /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (promise) {\n try {\n var resolved = yield promise;\n log.debug('Table resolved', resolved);\n setTable(resolved);\n } catch (e) {\n if (PromiseUtils.isCanceled(e)) {\n return;\n }\n log.error(e);\n }\n });\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }(), []);\n useEffect(() => {\n var cancelablePromise = PromiseUtils.makeCancelable(tablePromise);\n initTable(cancelablePromise);\n return () => {\n log.debug2('Cancel table promise');\n cancelablePromise.cancel();\n };\n }, [tablePromise, initTable]);\n\n // Scroll the item matching the input into view\n var handleSearchChange = useCallback(e => {\n var {\n value\n } = e.target;\n setSearchValue(value);\n var index = items.findIndex(item => item.displayValue.includes(value));\n if (index > -1) {\n var _listRef$current;\n log.debug2(\"Found \".concat(value, \" at index \").concat(index));\n (_listRef$current = listRef.current) === null || _listRef$current === void 0 ? void 0 : _listRef$current.scrollIntoView(index);\n } else {\n log.debug2(\"\".concat(value, \" not found\"));\n }\n }, [items, listRef]);\n var handleSelect = useCallback(index => {\n log.debug('handleSelect', index);\n if (index >= items.length) {\n log.error('Invalid index', index);\n return;\n }\n var selectedValue = items[index].value;\n var newSelection = new Set(selection);\n if (items[index].isSelected) {\n newSelection.delete(selectedValue);\n } else {\n newSelection.add(selectedValue);\n }\n setSelection(newSelection);\n onChange(Array.from(newSelection));\n }, [onChange, items, selection]);\n var handleSelectAll = useCallback(() => {\n var values = items.map(item => item.value);\n var newSelection = new Set(values);\n setSelection(newSelection);\n onChange(values);\n }, [items, onChange]);\n var handleClearSelection = useCallback(() => {\n setSelection(new Set());\n onChange([]);\n }, [onChange]);\n var handleViewportChange = useCallback(() => {\n // no-op\n }, []);\n var handleChildBlur = useCallback(e => {\n var _parentRef$current;\n var {\n relatedTarget\n } = e;\n log.debug('handleChildBlur', relatedTarget, relatedTarget instanceof HTMLElement, parentRef.current, (_parentRef$current = parentRef.current) === null || _parentRef$current === void 0 ? void 0 : _parentRef$current.contains(relatedTarget));\n if (!relatedTarget || parentRef.current && relatedTarget instanceof HTMLElement && !parentRef.current.contains(relatedTarget)) {\n onBlur();\n }\n }, [onBlur]);\n var isEmpty = items.length === 0;\n return /*#__PURE__*/_jsxs(\"div\", {\n ref: parentRef,\n className: classNames('table-input-container d-flex flex-column position-relative', className),\n children: [/*#__PURE__*/_jsx(SearchInput, {\n disabled: !!error || isEmpty,\n value: searchValue,\n placeholder: \"Search\",\n onChange: handleSearchChange,\n className: \"mb-2 d-flex\",\n onBlur: handleChildBlur\n }), /*#__PURE__*/_jsx(SelectValueList, {\n className: \"table-input-list\",\n disabled: table === undefined || isEmpty,\n isInvalid: isInvalid,\n items: isEmpty ? [{\n value: 'Empty',\n isSelected: false\n }] : items,\n itemCount: itemCount,\n offset: 0,\n onSelect: handleSelect,\n onViewportChange: handleViewportChange,\n ref: listRef,\n onBlur: handleChildBlur\n }), table && /*#__PURE__*/_jsxs(\"div\", {\n className: \"meta-row\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"d-flex align-items-center text-muted small\",\n children: table != null && table.size > itemCount && /*#__PURE__*/_jsxs(_Fragment, {\n children: [\"Table is too large, showing the first \", SIZE_LIMIT, \" items.\"]\n })\n }), /*#__PURE__*/_jsxs(\"div\", {\n children: [/*#__PURE__*/_jsx(\"button\", {\n type: \"button\",\n className: \"btn btn-link\",\n onBlur: handleChildBlur,\n onClick: handleSelectAll,\n children: \"Select All\"\n }), /*#__PURE__*/_jsx(\"button\", {\n type: \"button\",\n className: \"btn btn-link mr-a\",\n onBlur: handleChildBlur,\n onClick: handleClearSelection,\n children: \"Clear\"\n })]\n })]\n }), table == null || error && /*#__PURE__*/_jsx(\"div\", {\n className: \"h-100 w-100 position-absolute\",\n children: /*#__PURE__*/_jsx(LoadingOverlay, {\n isLoaded: table != null,\n isLoading: table == null && error == null,\n errorMessage: (_error$message = error === null || error === void 0 ? void 0 : error.message) !== null && _error$message !== void 0 ? _error$message : null\n })\n })]\n });\n}\nTableInput.displayName = 'TableInput';\nTableInput.defaultProps = {\n isInvalid: false,\n className: undefined\n};\nexport default TableInput;\n//# sourceMappingURL=TableInput.js.map","import { BROADCAST_CHANNEL_NAME, isMessage } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { EMPTY_FUNCTION } from '@deephaven/utils';\nimport { useEffect, useMemo } from 'react';\nvar log = Log.module('useBroadcastChannel');\nexport function useBroadcastChannel() {\n var onEvent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : EMPTY_FUNCTION;\n var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : BROADCAST_CHANNEL_NAME;\n var channel = useMemo(() => new BroadcastChannel(name), [name]);\n useEffect(() => () => {\n channel.close();\n }, [channel]);\n useEffect(() => {\n function handleEvent(event) {\n var {\n data\n } = event;\n if (!isMessage(data)) {\n log.debug('Ignoring non-deephaven message', data);\n return;\n }\n log.debug('event received', data);\n onEvent(event);\n }\n channel.addEventListener('message', handleEvent);\n return () => {\n channel.removeEventListener('message', handleEvent);\n };\n }, [channel, onEvent]);\n return channel;\n}\nexport default useBroadcastChannel;\n//# sourceMappingURL=useBroadcastChannel.js.map","import { isBroadcastLoginMessage, isBroadcastLogoutMessage } from '@deephaven/jsapi-utils';\nimport { useCallback } from 'react';\nimport useBroadcastChannel from \"./useBroadcastChannel.js\";\nexport function useBroadcastLoginListener(onLogin, onLogout) {\n var onMessage = useCallback(event => {\n if (isBroadcastLoginMessage(event.data)) {\n onLogin === null || onLogin === void 0 ? void 0 : onLogin(event.data);\n } else if (isBroadcastLogoutMessage(event.data)) {\n onLogout === null || onLogout === void 0 ? void 0 : onLogout(event.data);\n }\n }, [onLogin, onLogout]);\n useBroadcastChannel(onMessage);\n}\nexport default useBroadcastLoginListener;\n//# sourceMappingURL=useBroadcastLoginListener.js.map","import { createContext } from 'react';\nimport Cookies from 'js-cookie';\nimport Log from '@deephaven/log';\nexport var REFRESH_TOKEN_KEY = 'io.deephaven.web.client.auth.refreshToken';\nexport var RefreshTokenContext = /*#__PURE__*/createContext(null);\nvar log = Log.module('RefreshTokenUtils');\n\n/**\n * Read the refresh token from our cookie store\n * @returns RefreshToken if it exists, null otherwise\n */\nexport function readRefreshToken() {\n var cookieToken = Cookies.get(REFRESH_TOKEN_KEY);\n try {\n if (cookieToken != null) {\n return JSON.parse(cookieToken);\n }\n } catch (e) {\n log.error('Error parsing refresh token', cookieToken, e);\n }\n return null;\n}\n\n/**\n * Store the provided refresh token as a cookie\n * @param token The refresh token to store\n */\nexport function storeRefreshToken(token) {\n if (token == null) {\n Cookies.remove(REFRESH_TOKEN_KEY);\n return;\n }\n var cookieToken = JSON.stringify({\n bytes: token.bytes,\n expiry: token.expiry\n });\n var expires = new Date(token.expiry);\n Cookies.set(REFRESH_TOKEN_KEY, cookieToken, {\n secure: true,\n sameSite: 'strict',\n expires\n });\n}\n//# sourceMappingURL=RefreshTokenUtils.js.map","import React, { useCallback, useEffect, useState } from 'react';\nimport { useApi, useClient } from '@deephaven/jsapi-bootstrap';\nimport useBroadcastLoginListener from \"./useBroadcastLoginListener.js\";\nimport { readRefreshToken, RefreshTokenContext, storeRefreshToken } from \"./RefreshTokenUtils.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * RefreshTokenBootstrap component. Handles storing and reading the refresh token.\n */\nexport function RefreshTokenBootstrap(_ref) {\n var {\n children\n } = _ref;\n var api = useApi();\n var client = useClient();\n var [token, setToken] = useState(readRefreshToken());\n useEffect(function listenForTokenUpdates() {\n var cleanup = client.addEventListener(api.CoreClient.EVENT_REFRESH_TOKEN_UPDATED, event => {\n var {\n detail: newToken\n } = event;\n storeRefreshToken(newToken);\n setToken(newToken);\n });\n return cleanup;\n }, [api, client, token]);\n var onLogin = useCallback(() => {\n setToken(readRefreshToken());\n }, []);\n var onLogout = useCallback(() => {\n storeRefreshToken(null);\n setToken(null);\n }, []);\n useBroadcastLoginListener(onLogin, onLogout);\n return /*#__PURE__*/_jsx(RefreshTokenContext.Provider, {\n value: token,\n children: children\n });\n}\nexport default RefreshTokenBootstrap;\n//# sourceMappingURL=RefreshTokenBootstrap.js.map","import { useMemo } from 'react';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { TableUtils } from '@deephaven/jsapi-utils';\n\n/**\n * Get a `TableUtils` instance using `dh` api from the current context.\n */\nexport function useTableUtils() {\n var dh = useApi();\n return useMemo(() => new TableUtils(dh), [dh]);\n}\nexport default useTableUtils;\n//# sourceMappingURL=useTableUtils.js.map","import { useCallback, useState } from 'react';\nimport { useDebouncedValue, usePromiseFactory } from '@deephaven/react-hooks';\nimport useTableUtils from \"./useTableUtils.js\";\n/**\n * Manage a trimmed text value and check if it exists in a list of table columns.\n * @param table The table to check for the value\n * @param columnNames The column names to check\n * @param debounceMs Debounce timer for re-checking the value\n * @param isCaseSensitive Whether the value check is case sensitive\n */\nexport function useCheckIfExistsValue(table, columnNames, debounceMs, isCaseSensitive) {\n var tableUtils = useTableUtils();\n var [valueTrimmed, setValueTrimmed] = useState('');\n var valueTrimmedDebounced = useDebouncedValue(valueTrimmed, debounceMs);\n var trimAndUpdateValue = useCallback(text => {\n setValueTrimmed(text.trim());\n }, []);\n var {\n data: valueExistsData,\n isLoading: valueExistsIsLoading\n } = usePromiseFactory(tableUtils.doesColumnValueExist, [table, columnNames, valueTrimmedDebounced, isCaseSensitive]);\n\n // If value check is loading or if debounce hasn't settled, set\n // `matchesExistingValue` to null since it is indeterminate\n var valueExists = valueExistsIsLoading || valueTrimmed !== valueTrimmedDebounced ? null : valueExistsData;\n return {\n valueTrimmed,\n valueTrimmedDebounced,\n valueExists,\n trimAndUpdateValue\n };\n}\nexport default useCheckIfExistsValue;\n//# sourceMappingURL=useCheckIfExistsValue.js.map","import debounce from 'lodash.debounce';\nimport Log from '@deephaven/log';\nimport { useEffect, useMemo } from 'react';\nimport useTableUtils from \"./useTableUtils.js\";\nvar log = Log.module('useDebouncedViewportSearch');\nexport var DEBOUNCE_VIEWPORT_SEARCH_MS = 200;\n\n/**\n * React hook that returns a debounced search callback for filtering a table\n * viewport.\n * @param viewportData Table viewport to filter\n * @param columnName Column name to filter by\n * @param debounceMs Millisecond value to debounce\n * @returns A debounced search function\n */\nexport function useDebouncedViewportSearch(viewportData, columnName) {\n var debounceMs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : DEBOUNCE_VIEWPORT_SEARCH_MS;\n var tableUtils = useTableUtils();\n var {\n table,\n applyFiltersAndRefresh\n } = viewportData;\n var debouncedSearch = useMemo(() => debounce(searchText => {\n log.debug(\"Applying debounced searchText '\".concat(searchText, \"'\"));\n if (table == null) {\n return;\n }\n var searchTextTrimmed = searchText.trim();\n if (searchTextTrimmed === '') {\n applyFiltersAndRefresh([]);\n return;\n }\n var column = table.findColumn(columnName);\n var value = tableUtils.makeFilterValue(column.type, searchTextTrimmed);\n var filter = [column.filter().contains(value)];\n applyFiltersAndRefresh(filter);\n }, debounceMs), [applyFiltersAndRefresh, columnName, debounceMs, table, tableUtils]);\n useEffect(() => () => {\n log.debug('Cancelling debounced search function');\n debouncedSearch.cancel();\n }, [debouncedSearch]);\n return debouncedSearch;\n}\nexport default useDebouncedViewportSearch;\n//# sourceMappingURL=useDebouncedViewportSearch.js.map","import { createSelectedValuesFilter } from '@deephaven/jsapi-utils';\nimport { isSelectionMaybeInvertedEqual, useDebouncedValue, useIsEqualMemo, useMappedSelection } from '@deephaven/react-hooks';\nimport { useMemo } from 'react';\nimport useTableUtils from \"./useTableUtils.js\";\nexport var DEBOUNCE_MS = 300;\n/**\n * Creates a filter factory for the current selected keys of a viewport. The\n * selected keys will be mapped to values to match in a given column name. The\n * resulting filter factory is debounced to allow some cushion for cases where\n * a user rapidly changes selections, e.g. in a checkbox list.\n */\nexport function useDebouncedViewportSelectionFilter(_ref) {\n var {\n viewportData,\n columnName,\n shouldSelectAllOnNoSelection,\n mapItemToValue\n } = _ref;\n var tableUtils = useTableUtils();\n\n // Map selection to values contained in the column to filter\n var valuesSelection = useMappedSelection(viewportData, mapItemToValue);\n\n // Debounce so user can rapidly select multiple items in a row without the\n // cost of updating the table on each change\n var debouncedValuesSelection = useDebouncedValue(valuesSelection, DEBOUNCE_MS);\n\n // In cases where a user rapidly selects then deselects the selection\n // reference will change, but the state it represents will remain unchanged.\n // Memoize based on the selection value to avoid unnecessarily re-applying\n // table filters.\n var memoValuesSelection = useIsEqualMemo(debouncedValuesSelection, isSelectionMaybeInvertedEqual);\n return useMemo(() => createSelectedValuesFilter(tableUtils, columnName, memoValuesSelection.selection, shouldSelectAllOnNoSelection, memoValuesSelection.isInverted), [columnName, memoValuesSelection, shouldSelectAllOnNoSelection, tableUtils]);\n}\nexport default useDebouncedViewportSelectionFilter;\n//# sourceMappingURL=useDebouncedViewportSelectionFilter.js.map","import { useMemo } from 'react';\nimport { removeNullAndUndefined } from '@deephaven/utils';\nexport function useFilterConditionFactories(maybeTable) {\n for (var _len = arguments.length, filterConditionFactories = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n filterConditionFactories[_key - 1] = arguments[_key];\n }\n return useMemo(() => removeNullAndUndefined(...filterConditionFactories.map(f => f(maybeTable))),\n // Intentionally disabling hooks check so we can spread\n // the array items as dependencies.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [maybeTable, ...filterConditionFactories]);\n}\nexport default useFilterConditionFactories;\n//# sourceMappingURL=useFilterConditionFactories.js.map","import { useMemo, useRef } from 'react';\n/**\n * Takes an array of items and adds a default item to the top of the list if:\n * 1. defaultDisplayValue is provided\n * 2. The `searchText` is empty or\n * The `searchText` is contained (case insensitive) in the default item display text.\n * @param items List of items filtered on `searchText`\n * @param displayProp The item prop containing display text\n * @param searchText The current search text that is filtering the items\n * @param defaultDisplayValue The display text to set as the default item `displayProp` value\n */\nexport function useFilteredItemsWithDefaultValue(items, displayProp, searchText, defaultDisplayValue) {\n // Exclude search text from updating the memo. This ensures that adding /\n // removing of the default item stays in sync with data loading. Otherwise,\n // the item can move while data is still loading.\n var searchTextRef = useRef('');\n searchTextRef.current = searchText;\n return useMemo(() => {\n // If the list is still loading, items will exist, but their item prop will be undefined\n var isLoading = items.length > 0 && items[0].item == null;\n if (!isLoading && defaultDisplayValue != null && (searchTextRef.current === '' || defaultDisplayValue.toLowerCase().includes(searchTextRef.current.toLowerCase()))) {\n return [{\n key: defaultDisplayValue,\n item: {\n [displayProp]: defaultDisplayValue\n }\n }, ...items];\n }\n return items;\n }, [defaultDisplayValue, displayProp, items]);\n}\nexport default useFilteredItemsWithDefaultValue;\n//# sourceMappingURL=useFilteredItemsWithDefaultValue.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 } from 'react';\n/**\n * Gets an item's position in a list of items based on its row index in a table.\n * @param table Table to search for the item in\n * @param columnName Column name to search for the item in\n * @param defaultValue Optional default value. This would be the first item in\n * the list and not expected to be in the Table.\n * @param itemHeight Height of each item in the list\n * @param topOffset Optional pixel offset from the top of the list\n * @param value Value to search for in the column\n */\nexport function useGetItemPosition(_ref) {\n var {\n table,\n columnName,\n defaultValue,\n itemHeight,\n topOffset = 0,\n value\n } = _ref;\n return useCallback( /*#__PURE__*/_asyncToGenerator(function* () {\n if (table == null || value === '' || value === defaultValue) {\n return topOffset;\n }\n var column = table.findColumn(columnName);\n var rowIndex = yield table.seekRow(0, column, 'String', value);\n\n // If a default item exists at the top of the list, offset the item index by 1\n var defaultItemOffset = defaultValue == null ? 0 : 1;\n return (rowIndex + defaultItemOffset) * itemHeight + topOffset;\n }), [columnName, defaultValue, itemHeight, table, topOffset, value]);\n}\nexport default useGetItemPosition;\n//# sourceMappingURL=useGetItemPosition.js.map","import { useState } from 'react';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { getSize } from '@deephaven/jsapi-utils';\nimport useTableListener from \"./useTableListener.js\";\n/**\n * React hook that returns the size of a given table or zero if table is null or\n * undefined. The hook subscribes to the dh.Table.EVENT_SIZECHANGED event and\n * triggers a re-render if any events are received to ensure we have the current\n * size.\n * @param table The table to check the size on.\n */\nexport function useTableSize(table) {\n var [, forceRerender] = useState(0);\n var dh = useApi();\n useTableListener(table, dh.Table.EVENT_SIZECHANGED, () => {\n forceRerender(i => i + 1);\n });\n return getSize(table);\n}\nexport default useTableSize;\n//# sourceMappingURL=useTableSize.js.map","import { useEffect } from 'react';\nimport { generateEmptyKeyedItems } from '@deephaven/jsapi-utils';\nimport { useWindowedListData } from '@deephaven/react-hooks';\nimport Log from '@deephaven/log';\nimport useTableSize from \"./useTableSize.js\";\nvar log = Log.module('useInitializeViewportData');\n\n/**\n * Initializes a ListData instance that can be used for windowed views of a\n * Table. The list must always contain a KeyedItem for every record in the table,\n * so it is pre-populated with empty items that can be updated with real data as\n * the window changes.\n *\n * IMPORTANT: this will create an empty KeyedItem object for every row in the\n * source table. This is intended for \"human\" sized tables such as those used in\n * admin panels. This is not suitable for \"machine\" scale with millions+ rows.\n * @param table The table that will be used to determine the list size.\n * @returns a WindowedListData object.\n */\nexport function useInitializeViewportData(table) {\n var viewportData = useWindowedListData({});\n\n // If the table changes size, we need to re-initialize it.\n var targetSize = Math.max(0, useTableSize(table));\n\n // Whenever the table reference or size changes, replace the list with empty\n // items. This is preferred over updating items in place to avoid the user\n // seeing items shift around multiple times.\n useEffect(() => {\n var currentSize = viewportData.items.length;\n if (targetSize !== currentSize) {\n log.debug('size changed:', {\n currentSize,\n targetSize\n });\n viewportData.setItems(Array.from(generateEmptyKeyedItems(0, targetSize - 1)));\n }\n\n // Intentionally excluding viewportData since it changes on every render.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [targetSize, table]);\n return viewportData;\n}\nexport default useInitializeViewportData;\n//# sourceMappingURL=useInitializeViewportData.js.map","import { useCallback } from 'react';\nimport { getSize, padFirstAndLastRow } from '@deephaven/jsapi-utils';\n\n/**\n * Creates a callback function that will set a Table viewport. The callback has\n * a closure over the Table, a desired viewport size, and additional padding.\n * These will be combined with a first row index passed to the callback to\n * calculate the final viewport.\n * @param table Table to call `setViewport` on.\n * @param viewportSize The desired viewport size.\n * @param viewportPadding Padding to add before and after the viewport.\n * @returns A callback function for setting the viewport.\n */\nexport function useSetPaddedViewportCallback(table, viewportSize, viewportPadding) {\n return useCallback(function setPaddedViewport(firstRow) {\n var [first, last] = padFirstAndLastRow(firstRow, viewportSize, viewportPadding, getSize(table));\n table === null || table === void 0 ? void 0 : table.setViewport(first, last);\n }, [table, viewportPadding, viewportSize]);\n}\nexport default useSetPaddedViewportCallback;\n//# sourceMappingURL=useSetPaddedViewportCallback.js.map","import { useCallback, useEffect, useMemo } from 'react';\nimport { defaultRowDeserializer, isClosed, createOnTableUpdatedHandler } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { useOnScrollOffsetChangeCallback } from '@deephaven/react-hooks';\nimport { SCROLL_DEBOUNCE_MS } from '@deephaven/utils';\nimport useInitializeViewportData from \"./useInitializeViewportData.js\";\nimport useSetPaddedViewportCallback from \"./useSetPaddedViewportCallback.js\";\nimport useTableSize from \"./useTableSize.js\";\nimport useTableListener from \"./useTableListener.js\";\nvar log = Log.module('useViewportData');\n/**\n * Sets up state management for windowed Table viewports. Returns a ListData\n * instance for managing items associated with the Table + a `setViewport`\n * callback for changing the current viewport.\n *\n * IMPORTANT: this will create an empty KeyedItem object for every row in the\n * source table. This is intended for \"human\" sized tables such as those used in\n * admin panels. This is not suitable for \"machine\" scale with millions+ rows.\n * @param table\n * @param itemHeight\n * @param viewportSize\n * @param viewportPadding\n * @returns An object for managing Table viewport state.\n */\nexport function useViewportData(_ref) {\n var {\n table,\n itemHeight = 1,\n scrollDebounce = SCROLL_DEBOUNCE_MS,\n viewportSize = 10,\n viewportPadding = 50,\n deserializeRow = defaultRowDeserializer\n } = _ref;\n var viewportData = useInitializeViewportData(table);\n var setPaddedViewport = useSetPaddedViewportCallback(table, viewportSize, viewportPadding);\n var setViewport = useCallback(firstRow => {\n if (table && !isClosed(table)) {\n setPaddedViewport(firstRow);\n } else {\n log.debug('setViewport called on closed table.', table);\n }\n }, [table, setPaddedViewport]);\n var applyFiltersAndRefresh = useCallback(filters => {\n if (table && !isClosed(table)) {\n table.applyFilter(filters);\n setViewport(0);\n } else {\n log.debug('applyFiltersAndRefresh called on closed table.', table);\n }\n }, [setViewport, table]);\n var dh = useApi();\n var onTableUpdated = useMemo(() => createOnTableUpdatedHandler(viewportData, deserializeRow), [deserializeRow, viewportData]);\n useTableListener(table, dh.Table.EVENT_UPDATED, onTableUpdated);\n var size = useTableSize(table);\n useEffect(() => {\n // Hydrate the viewport with real data. This will fetch data from index\n // 0 to the end of the viewport + padding.\n setViewport(0);\n }, [table, setViewport, size]);\n var onScroll = useOnScrollOffsetChangeCallback(itemHeight, setViewport, scrollDebounce);\n return useMemo(() => ({\n viewportData,\n size,\n table,\n applyFiltersAndRefresh,\n setViewport,\n onScroll\n }), [applyFiltersAndRefresh, onScroll, setViewport, size, table, viewportData]);\n}\nexport default useViewportData;\n//# sourceMappingURL=useViewportData.js.map","import { useEffect } from 'react';\n/**\n * Applies a filter to a viewport.\n * @param viewportData Viewport to filter\n * @param filter Filter to apply\n */\nexport function useViewportFilter(viewportData, filter) {\n var {\n applyFiltersAndRefresh\n } = viewportData;\n useEffect(() => {\n applyFiltersAndRefresh(filter);\n }, [applyFiltersAndRefresh, filter]);\n}\nexport default useViewportFilter;\n//# sourceMappingURL=useViewportFilter.js.map","import { useMemo, useState } from 'react';\nimport { createSearchTextFilter } from '@deephaven/jsapi-utils';\nimport { SEARCH_DEBOUNCE_MS, TABLE_ROW_HEIGHT, VIEWPORT_PADDING, VIEWPORT_SIZE } from '@deephaven/utils';\nimport { useDebouncedCallback } from '@deephaven/react-hooks';\nimport { useTableUtils } from \"./useTableUtils.js\";\nimport useViewportData from \"./useViewportData.js\";\nimport useFilterConditionFactories from \"./useFilterConditionFactories.js\";\nimport useViewportFilter from \"./useViewportFilter.js\";\n/**\n * Use a viewport data list with a search text filter. Supports additional filters.\n * @param maybeTable The table to use\n * @param searchColumnNames The column names to search\n * @param additionalFilterConditionFactories Additional filter condition factories\n */\nexport function useSearchableViewportData(maybeTable, searchColumnNames) {\n var tableUtils = useTableUtils();\n var [searchText, setSearchText] = useState('');\n var searchTextFilter = useMemo(() => createSearchTextFilter(tableUtils, searchColumnNames, searchText), [searchColumnNames, searchText, tableUtils]);\n var onSearchTextChange = useDebouncedCallback(setSearchText, SEARCH_DEBOUNCE_MS);\n var list = useViewportData({\n table: maybeTable,\n itemHeight: TABLE_ROW_HEIGHT,\n viewportSize: VIEWPORT_SIZE,\n viewportPadding: VIEWPORT_PADDING\n });\n for (var _len = arguments.length, additionalFilterConditionFactories = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n additionalFilterConditionFactories[_key - 2] = arguments[_key];\n }\n var filter = useFilterConditionFactories(list.table, searchTextFilter, ...additionalFilterConditionFactories);\n useViewportFilter(list, filter);\n return {\n list,\n onSearchTextChange\n };\n}\nexport default useSearchableViewportData;\n//# sourceMappingURL=useSearchableViewportData.js.map","import { useMemo } from 'react';\nimport { createFilterConditionFactory, createNotNullOrEmptyFilterCondition } from '@deephaven/jsapi-utils';\nimport useTableUtils from \"./useTableUtils.js\";\nexport function useNotNullOrEmptyFilter(columnNames) {\n var conditionOperator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'or';\n var tableUtils = useTableUtils();\n var notNullOrEmptyFilterCondition = useMemo(() => createNotNullOrEmptyFilterCondition(tableUtils), [tableUtils]);\n return useMemo(() => createFilterConditionFactory(columnNames, notNullOrEmptyFilterCondition, conditionOperator), [columnNames, conditionOperator, notNullOrEmptyFilterCondition]);\n}\nexport default useNotNullOrEmptyFilter;\n//# sourceMappingURL=useNotNullOrEmptyFilter.js.map","import { useEffect } from 'react';\nimport { isClosed } from '@deephaven/jsapi-utils';\n\n/**\n * React hook that closes a given table when the reference changes or when the\n * component unmounts.\n * @param table\n */\nexport default function useTableClose(table) {\n useEffect(() => () => {\n if (table == null) {\n return;\n }\n if (!isClosed(table)) {\n table.close();\n }\n }, [table]);\n}\n//# sourceMappingURL=useTableClose.js.map","import { useCallback, useMemo, useState } from 'react';\nimport { createSearchTextFilter, createSelectedValuesFilter } from '@deephaven/jsapi-utils';\nimport { useDebouncedCallback, usePromiseFactory } from '@deephaven/react-hooks';\nimport { COMBO_BOX_ITEM_HEIGHT, SEARCH_DEBOUNCE_MS, VIEWPORT_PADDING, VIEWPORT_SIZE } from '@deephaven/utils';\nimport useFilterConditionFactories from \"./useFilterConditionFactories.js\";\nimport useViewportData from \"./useViewportData.js\";\nimport useViewportFilter from \"./useViewportFilter.js\";\nimport useTableUtils from \"./useTableUtils.js\";\nimport useTableClose from \"./useTableClose.js\";\n/**\n * Manages a list of available items that can be searched and selected. Selected\n * items are removed from the list and managed in a selectedValueMap data\n * structure. Useful for components that contain a picker but show selected\n * values in a separate component.\n * @param maybeTable\n * @param columnName\n * @param mapItemToValue\n * @param filterConditionFactories\n */\nexport function usePickerWithSelectedValues(maybeTable, columnName, mapItemToValue) {\n var tableUtils = useTableUtils();\n\n // `searchText` should always be up to date for controlled search input.\n // `debouncedSearchText` will get updated after a delay to avoid updating\n // filters on every key stroke.\n var [searchText, setSearchText] = useState('');\n var [debouncedSearchText, setDebouncedSearchText] = useState('');\n var [selectedKey, setSelectedKey] = useState(null);\n var [selectedValueMap, setSelectedValueMap] = useState(() => new Map());\n var {\n data: valueExists,\n isLoading: valueExistsIsLoading\n } = usePromiseFactory(tableUtils.doesColumnValueExist, [maybeTable, columnName, debouncedSearchText, false /* isCaseSensitive */]);\n\n // If value exists check is still loading or if debounce hasn't completed, set\n // `searchTextExists` to null since it is indeterminate.\n var searchTextExists = valueExistsIsLoading || debouncedSearchText !== searchText ? null : valueExists;\n var searchTextFilter = useMemo(() => createSearchTextFilter(tableUtils, columnName, debouncedSearchText), [columnName, debouncedSearchText, tableUtils]);\n\n // Filter out selected values from the picker\n var excludeSelectedValuesFilter = useMemo(() => createSelectedValuesFilter(tableUtils, columnName, new Set(selectedValueMap.keys()), false, true), [columnName, selectedValueMap, tableUtils]);\n for (var _len = arguments.length, filterConditionFactories = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {\n filterConditionFactories[_key - 3] = arguments[_key];\n }\n var {\n data: listTable\n } = usePromiseFactory(tableUtils.createDistinctSortedColumnTable, [maybeTable, columnName, 'asc', ...filterConditionFactories]);\n useTableClose(listTable);\n var list = useViewportData({\n table: listTable,\n itemHeight: COMBO_BOX_ITEM_HEIGHT,\n viewportSize: VIEWPORT_SIZE,\n viewportPadding: VIEWPORT_PADDING\n });\n var hasSearchTextWithZeroResults = searchText.length > 0 && list.size === 0;\n var searchTextIsInSelectedValues = selectedValueMap.has(searchText);\n var onDebouncedSearchTextChange = useDebouncedCallback(setDebouncedSearchText, SEARCH_DEBOUNCE_MS);\n var onSearchTextChange = useCallback(text => {\n setSearchText(text);\n onDebouncedSearchTextChange(text);\n }, [onDebouncedSearchTextChange]);\n var setSelectedKeyOnNextFrame = useDebouncedCallback(setSelectedKey, 0);\n var onSelectKey = useCallback(key => {\n setSearchText('');\n setDebouncedSearchText('');\n\n // Set the selection temporarily to avoid the picker staying open\n setSelectedKey(key);\n\n // Clear the selection on next frame since selected items get removed from\n // the list and added to `selectedValues` Map\n setSelectedKeyOnNextFrame(null);\n\n // key will be null in scenarios where search text doesn't match an item\n // and user clicks outside of picker\n if (key == null) {\n return;\n }\n var item = list.viewportData.findItem(key);\n if (item == null) {\n return;\n }\n var value = mapItemToValue(item);\n setSelectedValueMap(prev => {\n var next = new Map(prev);\n next.set(value, {\n value\n });\n return next;\n });\n }, [setSelectedKeyOnNextFrame, list.viewportData, mapItemToValue]);\n var onAddValues = useCallback(values => {\n setSelectedValueMap(prev => {\n if (values.size === 0) {\n return prev;\n }\n var next = new Map(prev);\n\n // eslint-disable-next-line no-restricted-syntax\n for (var value of values) {\n next.set(value, {\n value\n });\n }\n return next;\n });\n }, []);\n var onRemoveValues = useCallback(values => {\n setSelectedValueMap(prev => {\n if (values === 'all') {\n return new Map();\n }\n var next = new Map(prev);\n\n // eslint-disable-next-line no-restricted-syntax\n for (var value of values) {\n next.delete(value);\n }\n return next;\n });\n }, []);\n var filter = useFilterConditionFactories(list.table, searchTextFilter, excludeSelectedValuesFilter);\n useViewportFilter(list, filter);\n return useMemo(() => ({\n list,\n hasSearchTextWithZeroResults,\n searchText,\n searchTextExists,\n searchTextIsInSelectedValues,\n selectedKey,\n selectedValueMap,\n onSearchTextChange,\n onSelectKey,\n onAddValues,\n onRemoveValues\n }), [hasSearchTextWithZeroResults, list, onAddValues, onRemoveValues, onSearchTextChange, onSelectKey, searchText, searchTextExists, searchTextIsInSelectedValues, selectedKey, selectedValueMap]);\n}\nexport default usePickerWithSelectedValues;\n//# sourceMappingURL=usePickerWithSelectedValues.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 } from 'react';\nimport { usePromiseFactory } from '@deephaven/react-hooks';\n\n/**\n * Return type of `useSelectDistinctTable` hook.\n */\n\n/**\n * Creates and subscribes to a `selectDistinct` derived table and unsubscribes\n * on unmount.\n * @param table The table to call `selectDistinct` on.\n * @param columnNames The list of column names to pass to `selectDistinct`.\n */\nexport default function useSelectDistinctTable(table) {\n for (var _len = arguments.length, columnNames = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n columnNames[_key - 1] = arguments[_key];\n }\n var selectDistinct = useCallback( /*#__PURE__*/_asyncToGenerator(function* () {\n var _table$selectDistinct;\n return (_table$selectDistinct = table === null || table === void 0 ? void 0 : table.selectDistinct(table.findColumns(columnNames))) !== null && _table$selectDistinct !== void 0 ? _table$selectDistinct : null;\n }),\n // Disabling the exhaustive checks due to the spreading of `columnNames`\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [table, ...columnNames]);\n var {\n data: distinctTable,\n error,\n isError,\n isLoading\n } = usePromiseFactory(selectDistinct, []);\n useEffect(() => () => {\n distinctTable === null || distinctTable === void 0 ? void 0 : distinctTable.close();\n }, [distinctTable]);\n return {\n distinctTable,\n error,\n isError,\n isLoading\n };\n}\n//# sourceMappingURL=useSelectDistinctTable.js.map","import { useMemo } from 'react';\nimport { createFilterConditionFactory, createShowOnlyEmptyFilterCondition } from '@deephaven/jsapi-utils';\nimport useTableUtils from \"./useTableUtils.js\";\n/**\n * Creates a filter condition factory that can be toggle on or off. If on, the\n * filter will match only values that are null or empty strings. If off, the\n * filter will match all values.\n * @param isOn Whether the filter is on or off\n * @param columnNames Column names to filter\n */\nexport function useShowOnlyEmptyFilter(isOn, columnNames) {\n var tableUtils = useTableUtils();\n var createColumnCondition = useMemo(() => createShowOnlyEmptyFilterCondition(tableUtils, isOn), [isOn, tableUtils]);\n return useMemo(() => createFilterConditionFactory(columnNames, createColumnCondition), [columnNames, createColumnCondition]);\n}\nexport default useShowOnlyEmptyFilter;\n//# sourceMappingURL=useShowOnlyEmptyFilter.js.map","import { useMemo } from 'react';\nimport { createValueFilter } from '@deephaven/jsapi-utils';\nimport useTableUtils from \"./useTableUtils.js\";\n/**\n * Create a filter condition factory for a filter operator that matches the given value.\n * @param columnNames Column names to compare value to\n * @param value Value to match\n * @param operator Operator to use for matching\n */\nexport function useValueFilter(columnNames, value, operator) {\n var tableUtils = useTableUtils();\n return useMemo(() => createValueFilter(tableUtils, columnNames, value, operator), [columnNames, operator, tableUtils, value]);\n}\nexport default useValueFilter;\n//# sourceMappingURL=useValueFilter.js.map","import React, { createContext, useEffect, useState } from 'react';\nimport 'fira';\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 var FontsLoadedContext = /*#__PURE__*/createContext(false);\n/**\n * FontBootstrap component. Handles preloading fonts.\n */\nexport function FontBootstrap(_ref) {\n var {\n fontClassNames = ['fira-sans-regular', 'fira-sans-semibold', 'fira-mono'],\n children\n } = _ref;\n var [isLoaded, setIsLoaded] = useState(false);\n useEffect(function initFonts() {\n document.fonts.ready.then(() => {\n setIsLoaded(true);\n });\n }, []);\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(FontsLoadedContext.Provider, {\n value: isLoaded,\n children: children\n }), /*#__PURE__*/_jsx(\"div\", {\n id: \"preload-fonts\",\n style: {\n visibility: 'hidden',\n position: 'absolute',\n top: -10000\n },\n children: fontClassNames.map(className => /*#__PURE__*/_jsx(\"p\", {\n className: className,\n children: \"preload\"\n }, className))\n })]\n });\n}\nexport default FontBootstrap;\n//# sourceMappingURL=FontBootstrap.js.map","import { createContext } from 'react';\nexport var PluginsContext = /*#__PURE__*/createContext(null);\nexport default PluginsContext;\n//# sourceMappingURL=PluginsContext.js.map","export var PluginType = Object.freeze({\n AUTH_PLUGIN: 'AuthPlugin',\n DASHBOARD_PLUGIN: 'DashboardPlugin',\n WIDGET_PLUGIN: 'WidgetPlugin',\n TABLE_PLUGIN: 'TablePlugin',\n THEME_PLUGIN: 'ThemePlugin'\n});\n\n/**\n * @deprecated Use DashboardPlugin instead\n */\n\nexport function isLegacyDashboardPlugin(plugin) {\n return 'DashboardPlugin' in plugin;\n}\n\n/**\n * @deprecated Use AuthPlugin instead\n */\n\nexport function isLegacyAuthPlugin(plugin) {\n return 'AuthPlugin' in plugin;\n}\n\n/**\n * @deprecated Use TablePlugin instead\n */\n\nexport function isLegacyTablePlugin(plugin) {\n return 'TablePlugin' in plugin;\n}\n\n/**\n * @deprecated Use Plugin instead\n */\n\nexport function isLegacyPlugin(plugin) {\n return isLegacyDashboardPlugin(plugin) || isLegacyAuthPlugin(plugin) || isLegacyTablePlugin(plugin);\n}\n\n/**\n * A plugin that will be mounted to the dashboard.\n */\n\nexport function isDashboardPlugin(plugin) {\n return 'type' in plugin && plugin.type === PluginType.DASHBOARD_PLUGIN;\n}\nexport function isWidgetPlugin(plugin) {\n return 'type' in plugin && plugin.type === PluginType.WIDGET_PLUGIN;\n}\nexport function isTablePlugin(plugin) {\n return 'type' in plugin && plugin.type === PluginType.TABLE_PLUGIN;\n}\n\n/**\n * Map from auth config keys to their values\n * E.g. Map { AuthHandlers → \"io.deephaven.auth.AnonymousAuthenticationHandler\" }\n */\n\n/**\n * Props for the auth plugin component to render\n */\n\nexport function isAuthPlugin(plugin) {\n return 'type' in plugin && plugin.type === PluginType.AUTH_PLUGIN;\n}\n/** Type guard to check if given plugin is a `ThemePlugin` */\nexport function isThemePlugin(plugin) {\n return 'type' in plugin && plugin.type === PluginType.THEME_PLUGIN;\n}\n//# sourceMappingURL=PluginTypes.js.map","import { isValidElement } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { getThemeKey } from '@deephaven/components';\nimport { vsPreview } from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport { isWidgetPlugin, isThemePlugin } from \"./PluginTypes.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar log = Log.module('@deephaven/plugin.PluginUtils');\nexport function pluginSupportsType(plugin, type) {\n if (plugin == null || !isWidgetPlugin(plugin)) {\n return false;\n }\n return [plugin.supportedTypes].flat().some(t => t === type);\n}\nexport function getIconForPlugin(plugin) {\n var defaultIcon = /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsPreview\n });\n if (!isWidgetPlugin(plugin)) {\n return defaultIcon;\n }\n var {\n icon\n } = plugin;\n if (icon == null) {\n return defaultIcon;\n }\n if ( /*#__PURE__*/isValidElement(icon)) {\n return icon;\n }\n return /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: icon\n });\n}\n\n/**\n * Extract theme data from theme plugins in the given plugin map.\n * @param pluginMap\n */\nexport function getThemeDataFromPlugins(pluginMap) {\n var themePluginEntries = [...pluginMap.entries()].filter(entry => isThemePlugin(entry[1]));\n log.debug('Getting theme data from plugins', themePluginEntries);\n return themePluginEntries.map(_ref => {\n var [pluginName, plugin] = _ref;\n // Normalize to an array since config can be an array of configs or a\n // single config\n var configs = Array.isArray(plugin.themes) ? plugin.themes : [plugin.themes];\n return configs.map(_ref2 => {\n var {\n name,\n baseTheme,\n styleContent\n } = _ref2;\n return {\n baseThemeKey: \"default-\".concat(baseTheme !== null && baseTheme !== void 0 ? baseTheme : 'dark'),\n themeKey: getThemeKey(pluginName, name),\n name,\n styleContent\n };\n });\n }).flat();\n}\n//# sourceMappingURL=PluginUtils.js.map","import { useContextOrThrow } from '@deephaven/react-hooks';\nimport { PluginsContext } from \"./PluginsContext.js\";\nexport function usePlugins() {\n return useContextOrThrow(PluginsContext, 'No Plugins available in usePlugins. This can happen when plugins have not finished loading or if code is not wrapped in PluginsContext.Provider.');\n}\nexport default usePlugins;\n//# sourceMappingURL=usePlugins.js.map","import React, { useMemo } from 'react';\nimport usePlugins from \"./usePlugins.js\";\nimport { isWidgetPlugin } from \"./PluginTypes.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function WidgetView(_ref) {\n var {\n fetch,\n type\n } = _ref;\n var plugins = usePlugins();\n var plugin = useMemo(() => [...plugins.values()].filter(isWidgetPlugin).find(p => [p.supportedTypes].flat().includes(type)), [plugins, type]);\n if (plugin != null) {\n var Component = plugin.component;\n return /*#__PURE__*/_jsx(Component, {\n fetch: fetch\n });\n }\n throw new Error(\"Unknown widget type '\".concat(type, \"'\"));\n}\nexport default WidgetView;\n//# sourceMappingURL=WidgetView.js.map","/**\n * Map from auth config keys to their values\n * E.g. Map { AuthHandlers → \"io.deephaven.auth.AnonymousAuthenticationHandler\" }\n */\n\n/**\n * Props for the auth plugin component to render\n */\n\n/**\n * Whether the auth plugin is available given the current configuration\n */\n\nexport function isAuthPlugin(plugin) {\n if (plugin == null) return false;\n var authPlugin = plugin;\n return authPlugin.Component !== undefined && typeof authPlugin.isAvailable === 'function';\n}\n//# sourceMappingURL=AuthPlugin.js.map","export var AUTH_HANDLER_TYPE_ANONYMOUS = 'io.deephaven.auth.AnonymousAuthenticationHandler';\nexport var AUTH_HANDLER_TYPE_PSK = 'io.deephaven.authentication.psk.PskAuthenticationHandler';\n//# sourceMappingURL=AuthHandlerTypes.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 AuthenticationError extends Error {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"name\", 'AuthenticationError');\n _defineProperty(this, \"isAuthenticationError\", true);\n }\n}\nexport default AuthenticationError;\n//# sourceMappingURL=AuthenticationError.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 React, { useEffect, useState } from 'react';\nimport { LoadingOverlay } from '@deephaven/components';\nimport { useClient } from '@deephaven/jsapi-bootstrap';\nimport Log from '@deephaven/log';\nimport { CanceledPromiseError, getErrorMessage } from '@deephaven/utils';\nimport AuthenticationError from \"./AuthenticationError.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nvar log = Log.module('AuthPluginBase');\n/**\n * Base AuthPlugin that gets passed a function for retrieving the login options, and then attempting to login with them.\n * @param getLoginOptions Function that returns a promise for the login options\n */\nfunction AuthPluginBase(_ref) {\n var {\n children,\n getLoginOptions\n } = _ref;\n var client = useClient();\n var [error, setError] = useState();\n var [isLoggedIn, setIsLoggedIn] = useState(false);\n useEffect(() => {\n var isCanceled = false;\n function verifyNotCanceled() {\n if (isCanceled) {\n throw new CanceledPromiseError('Login canceled.');\n }\n }\n function login() {\n return _login.apply(this, arguments);\n }\n function _login() {\n _login = _asyncToGenerator(function* () {\n try {\n var loginOptions = yield getLoginOptions();\n verifyNotCanceled();\n log.info('Logging in...');\n yield client.login(loginOptions);\n verifyNotCanceled();\n setIsLoggedIn(true);\n } catch (e) {\n if (!isCanceled) {\n var _getErrorMessage;\n log.error('Unable to login:', e);\n var message = (_getErrorMessage = getErrorMessage(e)) !== null && _getErrorMessage !== void 0 ? _getErrorMessage : 'Unable to login. Verify credentials.';\n setError(new AuthenticationError(message));\n setIsLoggedIn(false);\n }\n }\n });\n return _login.apply(this, arguments);\n }\n login();\n return () => {\n isCanceled = true;\n };\n }, [client, getLoginOptions]);\n if (!isLoggedIn) {\n return /*#__PURE__*/_jsx(LoadingOverlay, {\n \"data-testid\": \"auth-base-loading\",\n isLoading: error == null,\n isLoaded: false,\n errorMessage: getErrorMessage(error)\n });\n }\n\n // eslint-disable-next-line react/jsx-no-useless-fragment\n return /*#__PURE__*/_jsx(_Fragment, {\n children: children\n });\n}\nexport default AuthPluginBase;\n//# sourceMappingURL=AuthPluginBase.js.map","import React, { useCallback } from 'react';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { AUTH_HANDLER_TYPE_ANONYMOUS } from \"./AuthHandlerTypes.js\";\nimport AuthPluginBase from \"./AuthPluginBase.js\";\nimport { UserPermissionsOverrideContext } from \"./UserContexts.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar permissionsOverrides = {\n canLogout: false\n};\n\n/**\n * AuthPlugin that tries to login anonymously. Fails if anonymous login fails\n */\nfunction Component(_ref) {\n var {\n children\n } = _ref;\n var dh = useApi();\n var getLoginOptions = useCallback(() => ({\n type: dh.CoreClient.LOGIN_TYPE_ANONYMOUS\n }), [dh]);\n return /*#__PURE__*/_jsx(AuthPluginBase, {\n getLoginOptions: getLoginOptions,\n children: /*#__PURE__*/_jsx(UserPermissionsOverrideContext.Provider, {\n value: permissionsOverrides,\n children: children\n })\n });\n}\nvar AuthPluginAnonymous = {\n Component,\n isAvailable: authHandlers => authHandlers.includes(AUTH_HANDLER_TYPE_ANONYMOUS)\n};\nexport default AuthPluginAnonymous;\n//# sourceMappingURL=AuthPluginAnonymous.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 React from 'react';\nimport { getWindowParent, LOGIN_OPTIONS_REQUEST, requestParentResponse } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport AuthPluginBase from \"./AuthPluginBase.js\";\nimport { UserPermissionsOverrideContext } from \"./UserContexts.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar log = Log.module('AuthPluginParent');\nvar permissionsOverrides = {\n canLogout: false\n};\nfunction isLoginOptions(options) {\n return options != null && typeof options.type === 'string';\n}\nfunction getLoginOptions() {\n return _getLoginOptions.apply(this, arguments);\n}\nfunction _getLoginOptions() {\n _getLoginOptions = _asyncToGenerator(function* () {\n log.info('Logging in by delegating to parent window...');\n var response = yield requestParentResponse(LOGIN_OPTIONS_REQUEST);\n if (!isLoginOptions(response)) {\n throw new Error(\"Unexpected login options response: \".concat(response));\n }\n return response;\n });\n return _getLoginOptions.apply(this, arguments);\n}\nfunction getWindowAuthProvider() {\n var _URLSearchParams$get;\n return (_URLSearchParams$get = new URLSearchParams(window.location.search).get('authProvider')) !== null && _URLSearchParams$get !== void 0 ? _URLSearchParams$get : '';\n}\n\n/**\n * AuthPlugin that tries to delegate to the parent window for authentication. Fails if there is no parent window.\n */\nfunction Component(_ref) {\n var {\n children\n } = _ref;\n return /*#__PURE__*/_jsx(AuthPluginBase, {\n getLoginOptions: getLoginOptions,\n children: /*#__PURE__*/_jsx(UserPermissionsOverrideContext.Provider, {\n value: permissionsOverrides,\n children: children\n })\n });\n}\nvar AuthPluginParent = {\n Component,\n isAvailable: () => getWindowParent() != null && getWindowAuthProvider() === 'parent'\n};\nexport default AuthPluginParent;\n//# sourceMappingURL=AuthPluginParent.js.map","import { LoadingSpinner } from '@deephaven/components';\nimport classNames from 'classnames';\nimport React from 'react';\nimport \"./LoginForm.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nexport function LoginForm(_ref) {\n var {\n children,\n errorMessage,\n isLoggingIn = false,\n onSubmit: _onSubmit\n } = _ref;\n return /*#__PURE__*/_jsxs(\"form\", {\n className: \"login-form\",\n onSubmit: event => {\n event.preventDefault();\n event.stopPropagation();\n _onSubmit === null || _onSubmit === void 0 ? void 0 : _onSubmit(event);\n },\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"flex-spacer\"\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"flex-wrapper\",\n children: [/*#__PURE__*/_jsx(\"fieldset\", {\n disabled: isLoggingIn,\n className: \"container-fluid\",\n children: children\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"form-group d-flex justify-content-end align-items-center mb-0\",\n children: /*#__PURE__*/_jsxs(\"button\", {\n type: \"submit\",\n className: classNames('btn btn-primary', {\n 'btn-spinner': isLoggingIn\n }, {\n 'btn-cancelable': isLoggingIn\n }),\n \"data-testid\": \"btn-login\",\n children: [isLoggingIn && /*#__PURE__*/_jsxs(\"span\", {\n children: [/*#__PURE__*/_jsx(LoadingSpinner, {\n className: \"mr-2 loading-spinner-vertical-align\"\n }), /*#__PURE__*/_jsx(\"span\", {\n className: \"btn-normal-content\",\n children: \"Logging in\"\n }), /*#__PURE__*/_jsx(\"span\", {\n className: \"btn-hover-content\",\n children: \"Cancel\"\n })]\n }), !isLoggingIn && 'Login']\n })\n })]\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"flex-spacer\",\n children: errorMessage != null && /*#__PURE__*/_jsx(\"p\", {\n className: \"error-message mb-0\",\n role: \"alert\",\n children: \"\".concat(errorMessage)\n })\n })]\n });\n}\nexport default LoginForm;\n//# sourceMappingURL=LoginForm.js.map","import React from 'react';\nimport { RandomAreaPlotAnimation } from '@deephaven/components';\nimport \"./Login.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nexport function Login(_ref) {\n var {\n children,\n logoPath = './logo.png'\n } = _ref;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"login-container\",\n children: [/*#__PURE__*/_jsx(RandomAreaPlotAnimation, {}), /*#__PURE__*/_jsxs(\"div\", {\n className: \"login-box\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"logo\",\n children: /*#__PURE__*/_jsx(\"img\", {\n src: logoPath,\n alt: \"Deephaven Data Labs\"\n })\n }), children, /*#__PURE__*/_jsxs(\"p\", {\n className: \"footer\",\n children: [\"\\xA9 2016-\", new Date().getFullYear(), \" Deephaven Data Labs LLC. Patent Pending.\"]\n })]\n })]\n });\n}\nexport default Login;\n//# sourceMappingURL=Login.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 React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport { LoadingOverlay, ThemeExport } from '@deephaven/components';\nimport { useClient } from '@deephaven/jsapi-bootstrap';\nimport { useBroadcastLoginListener } from '@deephaven/jsapi-components';\nimport Log from '@deephaven/log';\nimport { getErrorMessage } from '@deephaven/utils';\nimport Cookies from 'js-cookie';\nimport LoginForm from \"./LoginForm.js\";\nimport Login from \"./Login.js\";\nimport AuthenticationError from \"./AuthenticationError.js\";\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 AUTH_TYPE = 'io.deephaven.authentication.psk.PskAuthenticationHandler';\nvar PSK_QUERY_PARAM_KEY = 'psk';\nvar PSK_TOKEN_KEY = 'io.deephaven.web.client.auth.psk.token';\nvar log = Log.module('AuthPluginPsk');\nfunction getWindowToken() {\n return new URLSearchParams(window.location.search).get(PSK_QUERY_PARAM_KEY);\n}\nfunction clearWindowToken() {\n log.debug2('clearWindowToken');\n var url = new URL(window.location.href);\n url.searchParams.delete(PSK_QUERY_PARAM_KEY);\n window.history.replaceState(null, '', url.href);\n}\nfunction readCookieToken() {\n var _Cookies$get;\n return (_Cookies$get = Cookies.get(PSK_TOKEN_KEY)) !== null && _Cookies$get !== void 0 ? _Cookies$get : null;\n}\nfunction storeCookieToken(token) {\n log.debug2('Storing token in cookie', token);\n if (token != null) {\n Cookies.set(PSK_TOKEN_KEY, token, {\n secure: true,\n sameSite: 'strict'\n });\n } else {\n Cookies.remove(PSK_TOKEN_KEY);\n }\n}\n/**\n * AuthPlugin that tries to login using a pre-shared key.\n * Add the `psk=<token>` parameter to your URL string to set the token.\n */\nfunction Component(_ref) {\n var {\n children,\n logoPath\n } = _ref;\n var client = useClient();\n var inputField = useRef(null);\n var loginPromise = useRef(null);\n var [error, setError] = useState();\n var [isInputRequired, setIsInputRequired] = useState(false);\n var [isLoggedIn, setIsLoggedIn] = useState(false);\n var [isLoggingIn, setIsLoggingIn] = useState(false);\n var [token, setToken] = useState('');\n var login = useCallback(\n /*#__PURE__*/\n // eslint-disable-next-line @typescript-eslint/no-inferrable-types\n function () {\n var _ref2 = _asyncToGenerator(function* (loginToken) {\n var showError = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n log.info('Logging in...');\n setIsLoggingIn(true);\n var newLoginPromise = null;\n try {\n newLoginPromise = client.login({\n type: AUTH_TYPE,\n token: loginToken\n });\n loginPromise.current = newLoginPromise;\n yield newLoginPromise;\n log.info('Logged in successfully');\n if (loginPromise.current !== newLoginPromise) {\n return;\n }\n storeCookieToken(loginToken);\n setIsLoggedIn(true);\n } catch (e) {\n if (loginPromise.current !== newLoginPromise) {\n return;\n }\n setIsInputRequired(true);\n if (showError) {\n var _getErrorMessage;\n log.error('Unable to login', e);\n var message = (_getErrorMessage = getErrorMessage(e)) !== null && _getErrorMessage !== void 0 ? _getErrorMessage : 'Unable to login: Verify credentials.';\n setError(new AuthenticationError(message));\n }\n }\n setIsLoggingIn(false);\n });\n return function (_x) {\n return _ref2.apply(this, arguments);\n };\n }(), [client]);\n var cancelLogin = useCallback(() => {\n loginPromise.current = null;\n setIsLoggingIn(false);\n }, []);\n var onLogin = useCallback( /*#__PURE__*/_asyncToGenerator(function* () {\n log.debug('onLogin');\n\n // User logged in successfully in another tab, we should be able to read the token from the cookie and login\n var newToken = readCookieToken();\n if (isLoggedIn || isLoggingIn || newToken == null) {\n return;\n }\n login(newToken, false);\n }), [isLoggedIn, isLoggingIn, login]);\n var onLogout = useCallback(() => {\n storeCookieToken(null);\n }, []);\n useBroadcastLoginListener(onLogin, onLogout);\n useEffect(() => {\n var isCanceled = false;\n function initialLogin() {\n return _initialLogin.apply(this, arguments);\n }\n function _initialLogin() {\n _initialLogin = _asyncToGenerator(function* () {\n var _getWindowToken;\n var initialToken = (_getWindowToken = getWindowToken()) !== null && _getWindowToken !== void 0 ? _getWindowToken : readCookieToken();\n clearWindowToken();\n if (initialToken == null) {\n setIsInputRequired(true);\n return;\n }\n setIsLoggingIn(true);\n try {\n yield client.login({\n type: AUTH_TYPE,\n token: initialToken\n });\n if (!isCanceled) {\n storeCookieToken(initialToken);\n setIsLoggedIn(true);\n setIsLoggingIn(false);\n }\n } catch (e) {\n if (!isCanceled) {\n setIsInputRequired(true);\n setIsLoggingIn(false);\n }\n }\n });\n return _initialLogin.apply(this, arguments);\n }\n initialLogin();\n return () => {\n isCanceled = true;\n };\n }, [client]);\n var handleSubmit = useCallback(() => {\n if (!isLoggingIn) {\n login(token);\n } else {\n cancelLogin();\n }\n }, [cancelLogin, isLoggingIn, login, token]);\n useEffect(function autoFocusInput() {\n var _inputField$current;\n (_inputField$current = inputField.current) === null || _inputField$current === void 0 ? void 0 : _inputField$current.focus();\n }, [inputField, isInputRequired]);\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [isLoggedIn && children, isInputRequired && /*#__PURE__*/_jsx(CSSTransition, {\n in: !isLoggedIn,\n timeout: ThemeExport.transitionMs,\n classNames: \"fade\",\n mountOnEnter: true,\n unmountOnExit: true,\n children: /*#__PURE__*/_jsx(Login, {\n logoPath: logoPath,\n children: /*#__PURE__*/_jsx(LoginForm, {\n errorMessage: getErrorMessage(error),\n isLoggingIn: isLoggingIn,\n onSubmit: handleSubmit,\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"form-group\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n htmlFor: \"auth-psk-token-input\",\n children: \"Token\"\n }), /*#__PURE__*/_jsx(\"input\", {\n id: \"auth-psk-token-input\",\n name: \"token\",\n className: \"input-token form-control\",\n type: \"text\",\n autoComplete: \"username\",\n autoCapitalize: \"none\",\n autoCorrect: \"off\",\n spellCheck: \"false\",\n ref: inputField,\n value: token,\n onChange: event => {\n setError(undefined);\n setToken(event.target.value);\n }\n })]\n })\n })\n })\n }), /*#__PURE__*/_jsx(LoadingOverlay, {\n \"data-testid\": \"auth-psk-loading\",\n isLoaded: isLoggedIn || isInputRequired,\n isLoading: !isLoggedIn && !isInputRequired\n })]\n });\n}\nvar AuthPluginPsk = {\n Component,\n isAvailable: authHandlers => authHandlers.includes(AUTH_TYPE)\n};\nexport default AuthPluginPsk;\n//# sourceMappingURL=AuthPluginPsk.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 Log from '@deephaven/log';\nvar log = Log.module('UserUtils');\n\n/**\n * Retrieve a value from the AppInit config\n * @param serverConfig Server config map\n * @param key The AppInit key to retrieve\n * @returns The value for the AppInit key\n */\nexport function getAppInitValue(serverConfig, key) {\n return serverConfig.get(\"internal.webClient.appInit.\".concat(key));\n}\n\n/**\n * Retrieve a user object provided the server config and overrides\n * @param serverConfig Server config map\n * @param overrides Override values for the user\n * @param permissionsOverrides Override specific permissions for the user\n * @returns The user object\n */\nexport function getUserFromConfig(serverConfig) {\n var _getValue, _getValue2, _getValue$split, _getValue3;\n var overrides = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var permissionsOverrides = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n function getValue(key) {\n return getAppInitValue(serverConfig, key);\n }\n function getBooleanValue(key, defaultValue) {\n var value = getValue(key);\n if (value === 'true') {\n return true;\n }\n if (value === 'false') {\n return false;\n }\n if (value !== undefined) {\n log.warn(\"Unexpected value for \".concat(key, \": \").concat(value));\n }\n return defaultValue;\n }\n var name = (_getValue = getValue('name')) !== null && _getValue !== void 0 ? _getValue : '';\n var operateAs = (_getValue2 = getValue('operateAs')) !== null && _getValue2 !== void 0 ? _getValue2 : name;\n var groups = (_getValue$split = (_getValue3 = getValue('groups')) === null || _getValue3 === void 0 ? void 0 : _getValue3.split(',')) !== null && _getValue$split !== void 0 ? _getValue$split : [];\n var canCopy = getBooleanValue('canCopy', true);\n var canDownloadCsv = getBooleanValue('canDownloadCsv', true);\n var canUsePanels = getBooleanValue('canUsePanels', true);\n var canLogout = getBooleanValue('canLogout', true);\n return _objectSpread(_objectSpread({\n name,\n operateAs,\n groups\n }, overrides), {}, {\n permissions: _objectSpread({\n canUsePanels,\n canCopy,\n canDownloadCsv,\n canLogout\n }, permissionsOverrides)\n });\n}\nexport default {\n getAppInitValue,\n getUser: getUserFromConfig\n};\n//# sourceMappingURL=UserUtils.js.map","// Import the react customizable bundle for building, only pull in the modules we need\n// This reduces the build size. Plotly has a lot of modules we don't need/use.\n// https://github.com/plotly/react-plotly.js#customizing-the-plotlyjs-bundle\nimport createPlotlyComponent from 'react-plotly.js/factory.js';\n\n// Webpack 5 (used in docusaurus) gives an object w/ a default key\n// This is probably something on react-plotly.js's side\n// Or because we lazy load this and Docusaurus ends up w/ some complications between ESM and CJS\nexport default typeof createPlotlyComponent === 'function' ? createPlotlyComponent :\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\ncreatePlotlyComponent.default;\n//# sourceMappingURL=createPlotlyComponent.js.map","/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* eslint-disable global-require */\n// Create a partial plot with only the kinds of charts we need\n// https://github.com/plotly/plotly.js/#modules\n\n// Plotly types don't export anything other than core, so ignore the import type errors\nimport Plotly from 'plotly.js/lib/core.js';\n// @ts-ignore\nimport bar from 'plotly.js/lib/bar.js';\n// @ts-ignore\nimport histogram from 'plotly.js/lib/histogram.js';\n// @ts-ignore\nimport pie from 'plotly.js/lib/pie.js';\n// @ts-ignore\nimport ohlc from 'plotly.js/lib/ohlc.js';\n// @ts-ignore\nimport scattergl from 'plotly.js/lib/scattergl.js';\n// @ts-ignore\nimport treemap from 'plotly.js/lib/treemap.js';\n\n// Load in the trace types we need/support\nPlotly.register([bar, histogram, pie, ohlc, scattergl, treemap]);\nexport default Plotly;\n//# sourceMappingURL=Plotly.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 class-methods-use-this: \"off\" */\n/* eslint no-unused-vars: \"off\" */\n\n/**\n * Model for a Chart\n * All of these methods should return very quickly.\n * If data needs to be loaded asynchronously, return something immediately, then trigger an event for the chart to refresh.\n */\nclass ChartModel {\n constructor(dh) {\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"listeners\", void 0);\n _defineProperty(this, \"formatter\", void 0);\n _defineProperty(this, \"rect\", void 0);\n _defineProperty(this, \"isDownsamplingDisabled\", void 0);\n _defineProperty(this, \"title\", void 0);\n this.dh = dh;\n this.listeners = [];\n this.isDownsamplingDisabled = false;\n }\n getData() {\n return [];\n }\n getDefaultTitle() {\n return '';\n }\n getLayout() {\n return {};\n }\n getFilterColumnMap() {\n return new Map();\n }\n isFilterRequired() {\n return false;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n setFilter(filter) {}\n\n /**\n * Close this model, clean up any underlying subscriptions\n */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n close() {}\n\n /**\n * Set the formatter to use when charting the data.\n * @param formatter The formatter to use to format the charting data\n */\n setFormatter(formatter) {\n this.formatter = formatter;\n }\n\n /**\n * Disable downsampling\n * @param isDownsamplingDisabled True if downsampling should be disabled\n */\n setDownsamplingDisabled(isDownsamplingDisabled) {\n this.isDownsamplingDisabled = isDownsamplingDisabled;\n }\n\n /**\n * Set the dimensions of the plot. May be needed to evaluate some of the percents\n * @param rect The bounding rectangle of the plot\n */\n setDimensions(rect) {\n this.rect = rect;\n }\n setTitle(title) {\n this.title = title;\n }\n\n /**\n * Subscribe to this ChartModel and start listening for all events.\n * @param callback Callback when an event occurs\n */\n subscribe(callback) {\n this.listeners.push(callback);\n }\n unsubscribe(callback) {\n this.listeners = this.listeners.filter(listener => listener !== callback);\n }\n fireEvent(event) {\n for (var i = 0; i < this.listeners.length; i += 1) {\n this.listeners[i](event);\n }\n }\n fireUpdate(data) {\n this.fireEvent(new CustomEvent(ChartModel.EVENT_UPDATED, {\n detail: data\n }));\n }\n fireDisconnect() {\n this.fireEvent(new CustomEvent(ChartModel.EVENT_DISCONNECT));\n }\n fireReconnect() {\n this.fireEvent(new CustomEvent(ChartModel.EVENT_RECONNECT));\n }\n fireDownsampleStart(detail) {\n this.fireEvent(new CustomEvent(ChartModel.EVENT_DOWNSAMPLESTARTED, {\n detail\n }));\n }\n fireDownsampleFinish(detail) {\n this.fireEvent(new CustomEvent(ChartModel.EVENT_DOWNSAMPLEFINISHED, {\n detail\n }));\n }\n fireDownsampleFail(detail) {\n this.fireEvent(new CustomEvent(ChartModel.EVENT_DOWNSAMPLEFAILED, {\n detail\n }));\n }\n fireDownsampleNeeded(detail) {\n this.fireEvent(new CustomEvent(ChartModel.EVENT_DOWNSAMPLENEEDED, {\n detail\n }));\n }\n fireLoadFinished() {\n this.fireEvent(new CustomEvent(ChartModel.EVENT_LOADFINISHED));\n }\n fireError(detail) {\n this.fireEvent(new CustomEvent(ChartModel.EVENT_ERROR, {\n detail\n }));\n }\n}\n_defineProperty(ChartModel, \"EVENT_UPDATED\", 'ChartModel.EVENT_UPDATED');\n_defineProperty(ChartModel, \"EVENT_DISCONNECT\", 'ChartModel.EVENT_DISCONNECT');\n_defineProperty(ChartModel, \"EVENT_RECONNECT\", 'ChartModel.EVENT_RECONNECT');\n_defineProperty(ChartModel, \"EVENT_DOWNSAMPLESTARTED\", 'ChartModel.EVENT_DOWNSAMPLESTARTED');\n_defineProperty(ChartModel, \"EVENT_DOWNSAMPLEFINISHED\", 'ChartModel.EVENT_DOWNSAMPLEFINISHED');\n_defineProperty(ChartModel, \"EVENT_DOWNSAMPLEFAILED\", 'ChartModel.EVENT_DOWNSAMPLEFAILED');\n_defineProperty(ChartModel, \"EVENT_DOWNSAMPLENEEDED\", 'ChartModel.EVENT_DOWNSAMPLENEEDED');\n_defineProperty(ChartModel, \"EVENT_LOADFINISHED\", 'ChartModel.EVENT_LOADFINISHED');\n_defineProperty(ChartModel, \"EVENT_ERROR\", 'ChartModel.EVENT_ERROR');\nexport default ChartModel;\n//# sourceMappingURL=ChartModel.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 Log from '@deephaven/log';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport set from 'lodash.set';\nimport { assertNotNull } from '@deephaven/utils';\nvar log = Log.module('ChartUtils');\nvar BUSINESS_COLUMN_TYPE = 'io.deephaven.time.DateTime';\nvar MILLIS_PER_HOUR = 3600000;\nvar NANOS_PER_MILLI = 1000000;\nfunction isDateWrapper(value) {\n return value.asDate !== undefined;\n}\nfunction isLongWrapper(value) {\n return value.asNumber !== undefined;\n}\nfunction isDateTimeColumnFormatter(value) {\n return value.dhTimeZone !== undefined;\n}\nfunction isRangedPlotlyAxis(value) {\n return value != null && value.range != null && (value.autorange === false || value.autorange === undefined);\n}\nclass ChartUtils {\n /**\n * Generate the plotly error bar data from the passed in data.\n * Iris passes in the values as absolute, plotly needs them as relative.\n * @param x The main data array\n * @param xLow The absolute low values\n * @param xHigh\n * @param theme Theme properties for the chart\n *\n * @returns The error_x object required by plotly, or null if none is required\n */\n static getPlotlyErrorBars(x, xLow, xHigh, theme) {\n var array = xHigh.map((value, i) => value - x[i]);\n var arrayminus = xLow.map((value, i) => x[i] - value);\n return {\n type: 'data',\n symmetric: false,\n array,\n arrayminus,\n color: theme.error_band_line_color\n };\n }\n static convertNumberPrefix(prefix) {\n return prefix.replace(/\\u00A4\\u00A4/g, 'USD').replace(/\\u00A4/g, '$');\n }\n static getPlotlyNumberFormat(formatter, columnType, formatPattern) {\n if (!formatPattern) {\n return null;\n }\n\n // We translate java formatting: https://docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html\n // Into d3 number formatting: https://github.com/d3/d3-format\n // We can't translate number formatting exactly, but should be able to translate the most common cases\n // First split it into the subpatterns; currently only handling the positive subpattern, ignoring the rest\n var subpatterns = formatPattern.split(';');\n var matchArray = subpatterns[0].match(/^([^#,0.]*)([#,]*)([0,]*)(\\.?)(0*)(#*)(E?0*)(%?)(.*)/);\n assertNotNull(matchArray);\n var [, prefix, placeholderDigits, zeroDigits,, decimalDigits, optionalDecimalDigits, numberType, percentSign, suffix] = matchArray;\n var paddingLength = zeroDigits.replace(',', '').length;\n var isCommaSeparated = placeholderDigits.indexOf(',') >= 0 || zeroDigits.indexOf(',') >= 0;\n var comma = isCommaSeparated ? ',' : '';\n var plotlyNumberType = numberType != null && numberType !== '' ? 'e' : 'f';\n var type = percentSign !== '' ? percentSign : plotlyNumberType;\n var decimalLength = decimalDigits.length + optionalDecimalDigits.length;\n // IDS-4565 Plotly uses an older version of d3 which doesn't support the trim option or negative brackets\n // If plotly updates it's d3 version, this should be re-enabled\n // const trimOption = optionalDecimalDigits.length > 0 ? '~' : '';\n var trimOption = '';\n var tickformat = \"0\".concat(paddingLength).concat(comma, \".\").concat(decimalLength).concat(trimOption).concat(type);\n var tickprefix = ChartUtils.convertNumberPrefix(prefix);\n // prefix and suffix are processed the same\n var ticksuffix = ChartUtils.convertNumberPrefix(suffix);\n return {\n tickformat,\n tickprefix,\n ticksuffix,\n automargin: true\n };\n }\n\n /**\n * Adds tick spacing for an axis that has gapBetweenMajorTicks defined.\n *\n * @param axisFormat the current axis format, may be null\n * @param axis the current axis\n * @param isDateType indicates if the columns is a date type\n */\n static addTickSpacing(axisFormat, axis, isDateType) {\n var {\n gapBetweenMajorTicks\n } = axis;\n if (gapBetweenMajorTicks > 0) {\n var updatedFormat = axisFormat || {};\n var tickSpacing = gapBetweenMajorTicks;\n if (isDateType) {\n // Need to convert from nanoseconds to milliseconds\n tickSpacing = gapBetweenMajorTicks / NANOS_PER_MILLI;\n }\n if (axis.log) {\n tickSpacing = Math.log(tickSpacing);\n }\n // Note that tickmode defaults to 'auto'\n updatedFormat.tickmode = 'linear';\n updatedFormat.dtick = tickSpacing;\n return updatedFormat;\n }\n return axisFormat;\n }\n\n /**\n * Retrieve the data source for a given axis in a chart\n * @param chart The chart to get the source for\n * @param axis The axis to find the source for\n * @returns The first source matching this axis\n */\n static getSourceForAxis(chart, axis) {\n for (var i = 0; i < chart.series.length; i += 1) {\n var series = chart.series[i];\n for (var j = 0; j < series.sources.length; j += 1) {\n var source = series.sources[j];\n if (source.axis === axis) {\n return source;\n }\n }\n }\n return null;\n }\n\n /**\n * Get visibility setting for the series object\n * @param name The series name to get the visibility for\n * @param settings Chart settings\n * @returns True for visible series and 'legendonly' for hidden\n */\n static getSeriesVisibility(name, settings) {\n if (settings != null && settings.hiddenSeries != null && settings.hiddenSeries.includes(name)) {\n return 'legendonly';\n }\n return true;\n }\n\n /**\n * Get hidden labels array from chart settings\n * @param settings Chart settings\n * @returns Array of hidden series names\n */\n static getHiddenLabels(settings) {\n if (settings !== null && settings !== void 0 && settings.hiddenSeries) {\n return [...settings.hiddenSeries];\n }\n return [];\n }\n\n /**\n * Create a default series data object. Apply styling to the object afterward.\n * @returns A simple series data object with no styling\n */\n static makeSeriesData(type, mode, name, showLegend) {\n var orientation = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : ChartUtils.ORIENTATION.VERTICAL;\n return {\n type,\n mode,\n name,\n orientation,\n showlegend: showLegend !== null && showLegend !== void 0 ? showLegend : undefined\n };\n }\n\n /**\n * Get the Plotly marker symbol for the provided Deephaven shape\n * Deephaven shapes: https://deephaven.io/enterprise/docs/plotting/visual-formatting/#point-formatting\n * Plotly shapes: https://plotly.com/javascript/reference/scattergl/#scattergl-marker-symbol\n * Table of plotly shapes: https://plotly.com/python/marker-style/#custom-marker-symbols\n * @param deephavenShape Deephaven shape to get the marker symbol for\n */\n static getMarkerSymbol(deephavenShape) {\n switch (deephavenShape) {\n case 'SQUARE':\n return 'square';\n case 'CIRCLE':\n return 'circle';\n case 'DIAMOND':\n return 'diamond';\n case 'UP_TRIANGLE':\n return 'triangle-up';\n case 'DOWN_TRIANGLE':\n return 'triangle-down';\n case 'RIGHT_TRIANGLE':\n return 'triangle-right';\n case 'LEFT_TRIANGLE':\n return 'triangle-left';\n // There don't seem to be any plotly equivalents for ellipse or rectangles\n // Rectangles could be `line-ew`, `line-ns`, or `hourglass` and `bowtie` instead?\n // Ellipse could be `asterisk` or `diamond-wide` instead?\n // Just throw an error, we've already got a bunch of types.\n case 'ELLIPSE':\n case 'HORIZONTAL_RECTANGLE':\n case 'VERTICAL_RECTANGLE':\n default:\n throw new Error(\"Unrecognized shape \".concat(deephavenShape));\n }\n }\n\n /**\n * Get all axes for a given `Figure`. Iterates through all charts axes and concatenates them.\n * @param figure Figure to get all axes for\n */\n static getAllAxes(figure) {\n return figure.charts.reduce((axes, chart) => [...axes, ...chart.axes], []);\n }\n\n /**\n * Get the axis type map for the figure provided\n * @param figure Figure to get the type map for\n * @returns Axis type map for the figure provided\n */\n static getAxisTypeMap(figure) {\n var axes = ChartUtils.getAllAxes(figure);\n return ChartUtils.groupArray(axes, 'type');\n }\n\n /**\n * Retrieve the chart that contains the passed in series from the figure\n * @param figure The figure to retrieve the chart from\n * @param series The series to get the chart for\n */\n static getChartForSeries(figure, series) {\n var {\n charts\n } = figure;\n for (var i = 0; i < charts.length; i += 1) {\n var _chart = charts[i];\n for (var j = 0; j < _chart.series.length; j += 1) {\n if (series === _chart.series[j]) {\n return _chart;\n }\n }\n }\n return null;\n }\n\n /**\n * Get an object mapping axis to their ranges\n * @param layout The plotly layout object to get the ranges from\n * @returns An object mapping the axis name to it's range\n */\n static getLayoutRanges(layout) {\n var ranges = {};\n var keys = Object.keys(layout).filter(key => key.indexOf('axis') >= 0);\n for (var i = 0; i < keys.length; i += 1) {\n var key = keys[i];\n var value = layout[key];\n if (isRangedPlotlyAxis(value)) {\n // Only want to add the range if it's not autoranged\n ranges[key] = [...value.range];\n }\n }\n return ranges;\n }\n static getAxisLayoutProperty(axisProperty, axisIndex) {\n var axisIndexString = axisIndex > 0 ? \"\".concat(axisIndex + 1) : '';\n return \"\".concat(axisProperty !== null && axisProperty !== void 0 ? axisProperty : '', \"axis\").concat(axisIndexString);\n }\n\n /**\n * Converts an open or close period to a declimal. e.g '09:30\" to 9.5\n *\n * @param period the open or close value of the period\n */\n static periodToDecimal(period) {\n var values = period.split(':');\n return Number(values[0]) + Number(values[1]) / 60;\n }\n\n /**\n * Groups an array and returns a map\n * @param array The object to group\n * @param property The property name to group by\n * @returns A map containing the items grouped by their values for the property\n */\n static groupArray(array, property) {\n return array.reduce((result, item) => {\n var _result$get;\n var key = item[property];\n var group = (_result$get = result.get(key)) !== null && _result$get !== void 0 ? _result$get : [];\n group.push(item);\n result.set(key, group);\n return result;\n }, new Map());\n }\n\n /**\n * Parses the colorway property of a theme and returns an array of colors\n * Theme could have a single string with space separated colors or an array of strings representing the colorway\n * @param theme The theme to get colorway from\n * @returns Colorway array for the theme\n */\n static getColorwayFromTheme(theme) {\n var colorway = [];\n if (theme.colorway) {\n if (Array.isArray(theme.colorway)) {\n colorway = theme.colorway;\n } else if (typeof theme.colorway === 'string') {\n colorway = theme.colorway.split(' ');\n } else {\n log.warn(\"Unable to handle colorway property: \".concat(theme.colorway));\n }\n }\n return colorway;\n }\n static titleFromSettings(settings) {\n var {\n series,\n xAxis,\n title = \"\".concat((series !== null && series !== void 0 ? series : []).join(', '), \" by \").concat(xAxis)\n } = settings;\n return title;\n }\n constructor(dh) {\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"daysOfWeek\", void 0);\n this.dh = dh;\n this.daysOfWeek = Object.freeze(dh.calendar.DayOfWeek.values());\n }\n\n /**\n * Retrieve the axis formats from the provided figure.\n * Currently defaults to just the x/y axes.\n * @param figure The figure to get the axis formats for\n * @param formatter The formatter to use when getting the axis format\n * @returns A map of axis layout property names to axis formats\n */\n getAxisFormats(figure, formatter) {\n var _this = this;\n var axisFormats = new Map();\n var nullFormat = {\n tickformat: null,\n ticksuffix: null\n };\n var allAxes = ChartUtils.getAllAxes(figure);\n var axisTypeMap = ChartUtils.groupArray(allAxes, 'type');\n var {\n charts\n } = figure;\n for (var i = 0; i < charts.length; i += 1) {\n var _chart2 = charts[i];\n for (var j = 0; j < _chart2.series.length; j += 1) {\n var series = _chart2.series[j];\n var {\n sources\n } = series;\n var axisSources = sources.filter(source => source.axis);\n var _loop = function _loop() {\n var source = axisSources[k];\n var {\n axis\n } = source;\n var {\n type: axisType\n } = axis;\n var typeAxes = axisTypeMap.get(axisType);\n assertNotNull(typeAxes);\n var axisIndex = typeAxes.indexOf(axis);\n var axisProperty = _this.getAxisPropertyName(axisType);\n if (axisProperty != null) {\n var axisLayoutProperty = ChartUtils.getAxisLayoutProperty(axisProperty, axisIndex);\n if (axisFormats.has(axisLayoutProperty)) {\n log.debug(\"\".concat(axisLayoutProperty, \" already added.\"));\n } else {\n log.debug(\"Adding \".concat(axisLayoutProperty, \" to axisFormats.\"));\n var axisFormat = _this.getPlotlyAxisFormat(source, formatter);\n if (axisFormat === null) {\n axisFormats.set(axisLayoutProperty, nullFormat);\n } else {\n axisFormats.set(axisLayoutProperty, axisFormat);\n var {\n businessCalendar\n } = axis;\n if (businessCalendar != null) {\n var rangebreaks = [];\n var {\n businessPeriods,\n businessDays,\n holidays,\n timeZone: calendarTimeZone\n } = businessCalendar;\n var typeFormatter = formatter === null || formatter === void 0 ? void 0 : formatter.getColumnTypeFormatter(BUSINESS_COLUMN_TYPE);\n var formatterTimeZone;\n if (isDateTimeColumnFormatter(typeFormatter)) {\n formatterTimeZone = typeFormatter.dhTimeZone;\n }\n var timeZoneDiff = formatterTimeZone ? (calendarTimeZone.standardOffset - formatterTimeZone.standardOffset) / 60 : 0;\n if (holidays.length > 0) {\n rangebreaks.push(..._this.createRangeBreakValuesFromHolidays(holidays, calendarTimeZone, formatterTimeZone));\n }\n businessPeriods.forEach(period => rangebreaks.push({\n pattern: 'hour',\n bounds: [ChartUtils.periodToDecimal(period.close) + timeZoneDiff, ChartUtils.periodToDecimal(period.open) + timeZoneDiff]\n }));\n // If there are seven business days, then there is no weekend\n if (businessDays.length < _this.daysOfWeek.length) {\n _this.createBoundsFromDays(businessDays).forEach(weekendBounds => rangebreaks.push({\n pattern: 'day of week',\n bounds: weekendBounds\n }));\n }\n axisFormat.rangebreaks = rangebreaks;\n }\n if (axisFormats.size === _chart2.axes.length) {\n return {\n v: axisFormats\n };\n }\n }\n }\n }\n };\n for (var k = 0; k < axisSources.length; k += 1) {\n var _ret = _loop();\n if (typeof _ret === \"object\") return _ret.v;\n }\n }\n }\n return axisFormats;\n }\n\n /**\n * Converts the Iris plot style into a plotly chart type\n * @param plotStyle The plotStyle to use, see dh.plot.SeriesPlotStyle\n * @param isBusinessTime If the plot is using business time for an axis\n */\n getPlotlyChartType(plotStyle, isBusinessTime) {\n var {\n dh\n } = this;\n switch (plotStyle) {\n case dh.plot.SeriesPlotStyle.SCATTER:\n // scattergl mode is more performant, but doesn't support the rangebreaks we need for businessTime calendars\n return !isBusinessTime ? 'scattergl' : 'scatter';\n case dh.plot.SeriesPlotStyle.LINE:\n // There is also still some artifacting bugs with scattergl: https://github.com/plotly/plotly.js/issues/3522\n // The artifacting only occurs on line plots, which we can draw with fairly decent performance using SVG paths\n // Once the above plotly issue is fixed, scattergl should be used here (when !isBusinessTime)\n return 'scatter';\n case dh.plot.SeriesPlotStyle.BAR:\n case dh.plot.SeriesPlotStyle.STACKED_BAR:\n return 'bar';\n case dh.plot.SeriesPlotStyle.PIE:\n return 'pie';\n case dh.plot.SeriesPlotStyle.TREEMAP:\n return 'treemap';\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 'histogram';\n case dh.plot.SeriesPlotStyle.OHLC:\n return 'ohlc';\n default:\n return undefined;\n }\n }\n\n /**\n * Converts the Iris plot style into a plotly chart mode\n * @param plotStyle The plotStyle to use, see dh.plot.SeriesPlotStyle.*\n * @param areLinesVisible Whether lines are visible or not\n * @param areShapesVisible Whether shapes are visible or not\n */\n getPlotlyChartMode(plotStyle, areLinesVisible, areShapesVisible) {\n var {\n dh\n } = this;\n var modes = new Set();\n switch (plotStyle) {\n case dh.plot.SeriesPlotStyle.SCATTER:\n // Default to only showing shapes in scatter plots\n if (areLinesVisible !== null && areLinesVisible !== void 0 ? areLinesVisible : false) {\n modes.add(ChartUtils.MODE_LINES);\n }\n if (areShapesVisible !== null && areShapesVisible !== void 0 ? areShapesVisible : true) {\n modes.add(ChartUtils.MODE_MARKERS);\n }\n break;\n case dh.plot.SeriesPlotStyle.LINE:\n // Default to only showing lines in line series\n if (areLinesVisible !== null && areLinesVisible !== void 0 ? areLinesVisible : true) {\n modes.add(ChartUtils.MODE_LINES);\n }\n if (areShapesVisible !== null && areShapesVisible !== void 0 ? areShapesVisible : false) {\n modes.add(ChartUtils.MODE_MARKERS);\n }\n break;\n default:\n break;\n }\n return modes.size > 0 ? [...modes].join('+') : undefined;\n }\n\n /**\n * Get the property to set on the series data for plotly\n * @param plotStyle The plot style of the series\n * @param sourceType The source type for the series\n */\n getPlotlyProperty(plotStyle, sourceType) {\n var {\n dh\n } = this;\n switch (plotStyle) {\n case dh.plot.SeriesPlotStyle.PIE:\n switch (sourceType) {\n case dh.plot.SourceType.X:\n return 'labels';\n case dh.plot.SourceType.Y:\n return 'values';\n default:\n break;\n }\n break;\n case dh.plot.SeriesPlotStyle.OHLC:\n switch (sourceType) {\n case dh.plot.SourceType.TIME:\n return 'x';\n default:\n break;\n }\n break;\n case dh.plot.SeriesPlotStyle.TREEMAP:\n switch (sourceType) {\n case dh.plot.SourceType.X:\n return 'ids';\n case dh.plot.SourceType.Y:\n return 'values';\n case dh.plot.SourceType.LABEL:\n return 'labels';\n case dh.plot.SourceType.PARENT:\n return 'parents';\n case dh.plot.SourceType.COLOR:\n return 'marker.colors';\n default:\n break;\n }\n break;\n default:\n break;\n }\n switch (sourceType) {\n case dh.plot.SourceType.X:\n return 'x';\n case dh.plot.SourceType.Y:\n return 'y';\n case dh.plot.SourceType.Z:\n return 'z';\n case dh.plot.SourceType.X_LOW:\n return 'xLow';\n case dh.plot.SourceType.X_HIGH:\n return 'xHigh';\n case dh.plot.SourceType.Y_LOW:\n return 'yLow';\n case dh.plot.SourceType.Y_HIGH:\n return 'yHigh';\n case dh.plot.SourceType.TIME:\n return 'time';\n case dh.plot.SourceType.OPEN:\n return 'open';\n case dh.plot.SourceType.HIGH:\n return 'high';\n case dh.plot.SourceType.LOW:\n return 'low';\n case dh.plot.SourceType.CLOSE:\n return 'close';\n case dh.plot.SourceType.SHAPE:\n return 'shape';\n case dh.plot.SourceType.SIZE:\n return 'size';\n case dh.plot.SourceType.LABEL:\n return 'label';\n case dh.plot.SourceType.COLOR:\n return 'color';\n case dh.plot.SourceType.PARENT:\n return 'parent';\n case dh.plot.SourceType.HOVER_TEXT:\n return 'hovertext';\n case dh.plot.SourceType.TEXT:\n return 'text';\n default:\n throw new Error(\"Unrecognized source type: \".concat(sourceType));\n }\n }\n getPlotlySeriesOrientation(series) {\n var _sources$, _sources$$axis;\n var {\n dh\n } = this;\n var {\n sources\n } = series;\n if (sources.length === 2 && ((_sources$ = sources[0]) === null || _sources$ === void 0 ? void 0 : (_sources$$axis = _sources$.axis) === null || _sources$$axis === void 0 ? void 0 : _sources$$axis.type) === dh.plot.AxisType.Y) {\n return ChartUtils.ORIENTATION.HORIZONTAL;\n }\n return ChartUtils.ORIENTATION.VERTICAL;\n }\n\n /**\n * Create a data series (trace) for use with plotly\n * @param series The series to create the series data with\n * @param axisTypeMap The map of axes grouped by type\n * @param seriesVisibility Visibility setting for the series\n * @param theme The theme properties for the plot. See ChartTheme.js for an example\n * @returns The series data (trace) object for use with plotly.\n */\n makeSeriesDataFromSeries(series, axisTypeMap, seriesVisibility, theme) {\n var showLegend = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;\n var {\n name,\n isLinesVisible,\n isShapesVisible,\n plotStyle,\n lineColor,\n shapeColor,\n sources,\n shape,\n shapeSize\n } = series;\n var isBusinessTime = sources.some(source => {\n var _source$axis;\n return (_source$axis = source.axis) === null || _source$axis === void 0 ? void 0 : _source$axis.businessCalendar;\n });\n var type = this.getChartType(plotStyle, isBusinessTime);\n var mode = this.getPlotlyChartMode(plotStyle, isLinesVisible !== null && isLinesVisible !== void 0 ? isLinesVisible : undefined, isShapesVisible !== null && isShapesVisible !== void 0 ? isShapesVisible : undefined);\n var orientation = this.getPlotlySeriesOrientation(series);\n var seriesData = ChartUtils.makeSeriesData(type, mode, name, showLegend, orientation);\n this.addSourcesToSeriesData(seriesData, plotStyle, sources, axisTypeMap);\n this.addStylingToSeriesData(seriesData, plotStyle, theme, lineColor, shapeColor, shape, shapeSize, seriesVisibility);\n return seriesData;\n }\n addSourcesToSeriesData(seriesDataParam, plotStyle, sources, axisTypeMap) {\n var seriesData = seriesDataParam;\n for (var k = 0; k < sources.length; k += 1) {\n var source = sources[k];\n var {\n axis: _axis,\n type: sourceType\n } = source;\n var dataAttributeName = this.getPlotlyProperty(plotStyle, sourceType);\n set(seriesData, dataAttributeName, []);\n var axisProperty = _axis != null ? this.getAxisPropertyName(_axis.type) : null;\n if (axisProperty != null) {\n var axes = axisTypeMap.get(_axis.type);\n if (axes) {\n var axisIndex = axes.indexOf(_axis);\n var axisIndexString = axisIndex > 0 ? \"\".concat(axisIndex + 1) : '';\n seriesData[\"\".concat(axisProperty, \"axis\")] = \"\".concat(axisProperty).concat(axisIndexString);\n }\n }\n }\n }\n addStylingToSeriesData(seriesDataParam, plotStyle, theme) {\n var lineColor = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n var shapeColor = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;\n var shape = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null;\n var shapeSize = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : null;\n var seriesVisibility = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : null;\n var {\n dh\n } = this;\n var seriesData = seriesDataParam;\n // Add some empty objects so we can fill them in later with details without checking for existence\n seriesData.marker = {\n line: {}\n }; // border line width on markers\n seriesData.line = {\n width: 1 // default line width for lines, should eventually be able to override\n };\n\n if (plotStyle === dh.plot.SeriesPlotStyle.AREA) {\n seriesData.fill = 'tozeroy';\n } else if (plotStyle === dh.plot.SeriesPlotStyle.STACKED_AREA) {\n seriesData.stackgroup = 'stack';\n } else if (plotStyle === dh.plot.SeriesPlotStyle.STEP) {\n seriesData.line.shape = 'hv'; // plot.ly horizontal then vertical step styling\n } else if (plotStyle === dh.plot.SeriesPlotStyle.HISTOGRAM) {\n // The default histfunc in plotly is 'count', but the data passed up from the API provides explicit x/y values and bins\n // Since it's converted to bar, just set the widths of each bar\n seriesData.width = [];\n if (seriesData.marker.line !== undefined) {\n Object.assign(seriesData.marker.line, {\n color: theme.paper_bgcolor,\n width: 1\n });\n }\n } else if (plotStyle === dh.plot.SeriesPlotStyle.OHLC) {\n seriesData.increasing = {\n line: {\n color: theme.ohlc_increasing\n }\n };\n seriesData.decreasing = {\n line: {\n color: theme.ohlc_decreasing\n }\n };\n } else if (plotStyle === dh.plot.SeriesPlotStyle.PIE) {\n seriesData.textinfo = 'label+percent';\n\n // TODO Open DefinitelyTyped/Plotly PR to mark family and size as optional\n // https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/plotly.js/lib/traces/pie.d.ts#L6\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n seriesData.outsidetextfont = {\n color: theme.title_color\n };\n } else if (plotStyle === dh.plot.SeriesPlotStyle.TREEMAP) {\n seriesData.hoverinfo = 'text';\n seriesData.textinfo = 'label+text';\n seriesData.tiling = {\n packing: 'squarify',\n pad: 0\n };\n seriesData.textposition = 'middle center';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n seriesData.outsidetextfont = {\n color: theme.title_color\n };\n }\n if (lineColor != null) {\n if (plotStyle === dh.plot.SeriesPlotStyle.BAR) {\n seriesData.marker.color = lineColor;\n } else {\n seriesData.line.color = lineColor;\n }\n }\n if (shapeColor != null) {\n seriesData.marker.color = shapeColor;\n }\n if (shape != null && shape.length > 0) {\n try {\n seriesData.marker.symbol = ChartUtils.getMarkerSymbol(shape);\n } catch (e) {\n log.warn('Unable to handle shape', shape, ':', e);\n }\n }\n if (shapeSize != null) {\n seriesData.marker.size = shapeSize * ChartUtils.DEFAULT_MARKER_SIZE;\n }\n\n // Skipping pie charts\n // Pie slice visibility is configured in chart layout instead of series data\n if (seriesVisibility != null && plotStyle !== dh.plot.SeriesPlotStyle.PIE) {\n seriesData.visible = seriesVisibility;\n }\n }\n getChartType(plotStyle, isBusinessTime) {\n var {\n dh\n } = this;\n switch (plotStyle) {\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n // When reading data from the `Figure`, it already provides bins and values, so rather than using\n // plot.ly to calculate the bins and sum values, just convert it to a bar chart\n return 'bar';\n default:\n return this.getPlotlyChartType(plotStyle, isBusinessTime);\n }\n }\n\n /**\n * Return the plotly axis property name\n * @param axisType The axis type to get the property name for\n */\n getAxisPropertyName(axisType) {\n var {\n dh\n } = this;\n switch (axisType) {\n case dh.plot.AxisType.X:\n return 'x';\n case dh.plot.AxisType.Y:\n return 'y';\n default:\n return null;\n }\n }\n\n /**\n * Returns the plotly \"side\" value for the provided axis position\n * @param axisPosition The Iris AxisPosition of the axis\n */\n getAxisSide(axisPosition) {\n var {\n dh\n } = this;\n switch (axisPosition) {\n case dh.plot.AxisPosition.BOTTOM:\n return 'bottom';\n case dh.plot.AxisPosition.TOP:\n return 'top';\n case dh.plot.AxisPosition.LEFT:\n return 'left';\n case dh.plot.AxisPosition.RIGHT:\n return 'right';\n default:\n return undefined;\n }\n }\n\n /**\n * Update the layout with all the axes information for the provided figure\n * @param figure Figure to update the axes for\n * @param layoutParam Layout object to update in place\n * @param theme Theme used for displaying the plot\n * @param chartAxisRangeParser Function to retrieve the axis range parser\n * @param plotWidth Width of the plot in pixels\n * @param plotHeight Height of the plot in pixels\n */\n updateFigureAxes(layoutParam, figure, theme, chartAxisRangeParser) {\n var plotWidth = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n var plotHeight = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n var layout = layoutParam;\n var figureAxes = ChartUtils.getAllAxes(figure);\n for (var i = 0; i < figure.charts.length; i += 1) {\n var _chart3 = figure.charts[i];\n var axisRangeParser = chartAxisRangeParser === null || chartAxisRangeParser === void 0 ? void 0 : chartAxisRangeParser(_chart3);\n var bounds = this.getChartBounds(figure, _chart3, plotWidth, plotHeight);\n this.updateLayoutAxes(layout, _chart3.axes, figureAxes, theme, plotWidth, plotHeight, bounds, axisRangeParser);\n }\n this.removeStaleAxes(layout, figureAxes);\n }\n getChartBounds(figure, chart, plotWidth, plotHeight) {\n var _axisPositionMap$get;\n var {\n dh\n } = this;\n var {\n cols,\n rows\n } = figure;\n var {\n column,\n colspan,\n row,\n rowspan\n } = chart;\n var endColumn = column + colspan;\n var endRow = row + rowspan;\n var columnSize = 1 / cols;\n var rowSize = 1 / rows;\n var xMarginSize = ChartUtils.AXIS_SIZE_PX / plotWidth;\n var yMarginSize = ChartUtils.AXIS_SIZE_PX / plotHeight;\n var bounds = {\n // Need to invert the row positioning so the first one defined shows up on top instead of the bottom, since coordinates start in bottom left\n bottom: (rows - endRow) * rowSize + (endRow < rows ? yMarginSize / 2 : 0),\n top: (rows - row) * rowSize - (row > 0 ? yMarginSize / 2 : 0),\n left: column * columnSize + (column > 0 ? xMarginSize / 2 : 0),\n right: endColumn * columnSize - (endColumn < cols ? xMarginSize / 2 : 0)\n };\n\n // Adjust the bounds based on where the legend is\n // For now, always assume the legend is shown on the right\n var axisPositionMap = ChartUtils.groupArray(chart.axes, 'position');\n var rightAxes = (_axisPositionMap$get = axisPositionMap.get(dh.plot.AxisPosition.RIGHT)) !== null && _axisPositionMap$get !== void 0 ? _axisPositionMap$get : [];\n if (rightAxes.length > 0) {\n if (plotWidth > 0) {\n bounds.right -= (bounds.right - bounds.left) * Math.max(0, Math.min(ChartUtils.LEGEND_WIDTH_PX / plotWidth, ChartUtils.MAX_LEGEND_SIZE));\n } else {\n bounds.right -= (bounds.right - bounds.left) * ChartUtils.DEFAULT_AXIS_SIZE;\n }\n }\n return bounds;\n }\n getPlotlyDateFormat(formatter, columnType, formatPattern) {\n var {\n dh\n } = this;\n var tickformat = formatPattern == null ? undefined : formatPattern.replace('%', '%%').replace(/S{9}/g, '%9f').replace(/S{8}/g, '%8f').replace(/S{7}/g, '%7f').replace(/S{6}/g, '%6f').replace(/S{5}/g, '%5f').replace(/S{4}/g, '%4f').replace(/S{3}/g, '%3f').replace(/S{2}/g, '%2f').replace(/S{1}/g, '%1f').replace(/y{4}/g, '%Y').replace(/y{2}/g, '%y').replace(/M{4}/g, '%B').replace(/M{3}/g, '%b').replace(/M{2}/g, '%m').replace(/M{1}/g, '%-m').replace(/E{4,}/g, '%A').replace(/E{1,}/g, '%a').replace(/d{2}/g, '%d').replace(/([^%]|^)d{1}/g, '$1%-d').replace(/H{2}/g, '%H').replace(/h{2}/g, '%I').replace(/h{1}/g, '%-I').replace(/m{2}/g, '%M').replace(/s{2}/g, '%S').replace(\"'T'\", 'T').replace(' z', ''); // timezone added as suffix if necessary\n\n var ticksuffix;\n var dataFormatter = formatter === null || formatter === void 0 ? void 0 : formatter.getColumnTypeFormatter(columnType);\n if (dataFormatter != null && isDateTimeColumnFormatter(dataFormatter) && dataFormatter.dhTimeZone != null && dataFormatter.showTimeZone) {\n ticksuffix = dh.i18n.DateTimeFormat.format(' z', new Date(), dataFormatter.dhTimeZone);\n }\n return {\n tickformat,\n ticksuffix,\n automargin: true\n };\n }\n\n /**\n * Gets the plotly axis formatting information from the source passed in\n * @param source The Source to get the formatter information from\n * @param formatter The current formatter for formatting data\n */\n getPlotlyAxisFormat(source) {\n var formatter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var {\n dh\n } = this;\n var {\n axis,\n columnType\n } = source;\n var {\n formatPattern\n } = axis;\n var axisFormat = null;\n if (TableUtils.isDateType(columnType)) {\n axisFormat = this.getPlotlyDateFormat(formatter, columnType, formatPattern);\n axisFormat = ChartUtils.addTickSpacing(axisFormat, axis, true);\n } else if (TableUtils.isNumberType(columnType)) {\n axisFormat = ChartUtils.getPlotlyNumberFormat(formatter, columnType, formatPattern);\n axisFormat = ChartUtils.addTickSpacing(axisFormat, axis, false);\n }\n if (axis.formatType === dh.plot.AxisFormatType.CATEGORY) {\n if (axisFormat) {\n axisFormat.type = 'category';\n } else {\n axisFormat = {\n type: 'category',\n tickformat: undefined,\n ticksuffix: undefined\n };\n }\n }\n return axisFormat;\n }\n\n /**\n * Updates the axes positions and sizes in the layout object provided.\n * If the axis did not exist in the layout previously, it is created and added.\n * Any axis that no longer exists in axes is removed.\n * With Downsampling enabled, will also update the range on the axis itself as appropriate\n * @param layoutParam The layout object to update\n * @param chartAxes The chart axes to update the layout with\n * @param figureAxes All figure axes to update the layout with\n * @param theme Theme used for displaying the plot\n * @param plotWidth The width of the plot to calculate the axis sizes for\n * @param plotHeight The height of the plot to calculate the axis sizes for\n * @param bounds The bounds for this set of axes\n * @param axisRangeParser A function to retrieve the range parser for a given axis\n */\n updateLayoutAxes(layoutParam, chartAxes, figureAxes, theme) {\n var plotWidth = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n var plotHeight = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n var bounds = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : {\n left: 0,\n top: 0,\n right: 1,\n bottom: 1\n };\n var axisRangeParser = arguments.length > 7 ? arguments[7] : undefined;\n var {\n dh\n } = this;\n var xAxisSize = plotWidth > 0 ? Math.max(ChartUtils.MIN_AXIS_SIZE, Math.min(ChartUtils.AXIS_SIZE_PX / plotHeight, ChartUtils.MAX_AXIS_SIZE)) : ChartUtils.DEFAULT_AXIS_SIZE;\n var yAxisSize = plotHeight > 0 ? Math.max(ChartUtils.MIN_AXIS_SIZE, Math.min(ChartUtils.AXIS_SIZE_PX / plotWidth, ChartUtils.MAX_AXIS_SIZE)) : ChartUtils.DEFAULT_AXIS_SIZE;\n var layout = layoutParam;\n var axisPositionMap = ChartUtils.groupArray(chartAxes, 'position');\n var axisTypeMap = ChartUtils.groupArray(chartAxes, 'type');\n var axisTypes = [...axisTypeMap.keys()];\n var figureAxisTypeMap = ChartUtils.groupArray(figureAxes, 'type');\n for (var j = 0; j < axisTypes.length; j += 1) {\n var axisType = axisTypes[j];\n var axisProperty = this.getAxisPropertyName(axisType);\n if (axisProperty != null) {\n var typeAxes = axisTypeMap.get(axisType);\n var figureTypeAxes = figureAxisTypeMap.get(axisType);\n var isYAxis = axisType === dh.plot.AxisType.Y;\n var plotSize = isYAxis ? plotHeight : plotWidth;\n assertNotNull(typeAxes);\n assertNotNull(figureTypeAxes);\n for (var chartAxisIndex = 0; chartAxisIndex < typeAxes.length; chartAxisIndex += 1) {\n var _axis2 = typeAxes[chartAxisIndex];\n var figureAxisIndex = figureTypeAxes.indexOf(_axis2);\n var axisLayoutProperty = ChartUtils.getAxisLayoutProperty(axisProperty, figureAxisIndex);\n if (layout[axisLayoutProperty] == null) {\n layout[axisLayoutProperty] = this.makeLayoutAxis(axisType, theme);\n }\n var layoutAxis = layout[axisLayoutProperty];\n if (layoutAxis != null) {\n this.updateLayoutAxis(layoutAxis, _axis2, chartAxisIndex, axisPositionMap, xAxisSize, yAxisSize, bounds);\n var {\n range: _range,\n autorange\n } = layoutAxis;\n if (axisRangeParser != null && _range !== undefined && (autorange === undefined || autorange === false)) {\n var rangeParser = axisRangeParser(_axis2);\n var [rangeStart, rangeEnd] = rangeParser(_range);\n log.debug('Setting downsample range', plotSize, rangeStart, rangeEnd);\n _axis2.range(plotSize, rangeStart, rangeEnd);\n } else {\n _axis2.range(plotSize);\n }\n }\n }\n }\n }\n }\n\n /**\n * Remove any axes from the layout param that no longer belong to any series\n * @param layoutParam Layout object to remove stale axes from\n * @param axes All axes in the figure\n */\n removeStaleAxes(layoutParam, axes) {\n var layout = layoutParam;\n var figureAxisTypeMap = ChartUtils.groupArray(axes, 'type');\n var figureAxisTypes = [...figureAxisTypeMap.keys()];\n for (var i = 0; i < figureAxisTypes.length; i += 1) {\n var axisType = figureAxisTypes[i];\n var typeAxes = figureAxisTypeMap.get(axisType);\n assertNotNull(typeAxes);\n var axisIndex = typeAxes.length;\n // Delete any axes that may no longer exist\n var axisProperty = this.getAxisPropertyName(axisType);\n if (axisProperty != null) {\n var axisLayoutProperty = ChartUtils.getAxisLayoutProperty(axisProperty, axisIndex);\n while (layout[axisLayoutProperty] != null) {\n delete layout[axisLayoutProperty];\n axisIndex += 1;\n axisLayoutProperty = ChartUtils.getAxisLayoutProperty(axisProperty, axisIndex);\n }\n }\n }\n }\n\n /**\n * Updates the layout axis object in place\n * @param layoutAxisParam The plotly layout axis param\n * @param axis The Iris Axis to update the plotly layout with\n * @param axisIndex The type index for this axis\n * @param axisPositionMap All the axes mapped by position\n * @param axisSize The size of each axis in percent\n * @param bounds The bounds of the axes domains\n */\n updateLayoutAxis(layoutAxisParam, axis, axisIndex, axisPositionMap, xAxisSize, yAxisSize, bounds) {\n var _axis$label;\n var {\n dh\n } = this;\n var isYAxis = axis.type === dh.plot.AxisType.Y;\n var axisSize = isYAxis ? yAxisSize : xAxisSize;\n var layoutAxis = layoutAxisParam;\n // Enterprise API returns null for empty axis labels\n // Passing null title text to Plotly results in incorrect axis position, DH-9164\n var label = (_axis$label = axis.label) !== null && _axis$label !== void 0 ? _axis$label : '';\n if (layoutAxis.title !== undefined && typeof layoutAxis.title !== 'string') {\n layoutAxis.title.text = label;\n } else {\n layoutAxis.title = {\n text: label\n };\n }\n if (axis.log) {\n layoutAxis.type = 'log';\n }\n layoutAxis.side = this.getAxisSide(axis.position);\n if (axisIndex > 0) {\n var _this$getAxisProperty, _axisPositionMap$get2;\n layoutAxis.overlaying = (_this$getAxisProperty = this.getAxisPropertyName(axis.type)) !== null && _this$getAxisProperty !== void 0 ? _this$getAxisProperty : undefined;\n var positionAxes = (_axisPositionMap$get2 = axisPositionMap.get(axis.position)) !== null && _axisPositionMap$get2 !== void 0 ? _axisPositionMap$get2 : [];\n var sideIndex = positionAxes.indexOf(axis);\n if (sideIndex > 0) {\n layoutAxis.anchor = 'free';\n if (axis.position === dh.plot.AxisPosition.RIGHT) {\n layoutAxis.position = bounds.right + (sideIndex - positionAxes.length + 1) * axisSize;\n } else if (axis.position === dh.plot.AxisPosition.TOP) {\n layoutAxis.position = bounds.top + (sideIndex - positionAxes.length + 1) * axisSize;\n } else if (axis.position === dh.plot.AxisPosition.BOTTOM) {\n layoutAxis.position = bounds.bottom + (positionAxes.length - sideIndex + 1) * axisSize;\n } else if (axis.position === dh.plot.AxisPosition.LEFT) {\n layoutAxis.position = bounds.left + (positionAxes.length - sideIndex + 1) * axisSize;\n }\n }\n } else if (axis.type === dh.plot.AxisType.X) {\n var leftAxes = axisPositionMap.get(dh.plot.AxisPosition.LEFT) || [];\n var rightAxes = axisPositionMap.get(dh.plot.AxisPosition.RIGHT) || [];\n var left = Math.max(bounds.left, bounds.left + (leftAxes.length - 1) * yAxisSize);\n var right = Math.min(bounds.right - (rightAxes.length - 1) * yAxisSize, bounds.right);\n layoutAxis.domain = [left, right];\n } else if (axis.type === dh.plot.AxisType.Y) {\n var bottomAxes = axisPositionMap.get(dh.plot.AxisPosition.BOTTOM) || [];\n var topAxes = axisPositionMap.get(dh.plot.AxisPosition.TOP) || [];\n var bottom = Math.max(bounds.bottom, bounds.bottom + (bottomAxes.length - 1) * xAxisSize);\n var top = Math.min(bounds.top - (topAxes.length - 1) * xAxisSize, bounds.top);\n layoutAxis.domain = [bottom, top];\n }\n }\n\n /**\n * Creates range break bounds for plotly from business days.\n * For example a standard business week of ['MONDAY','TUESDAY','WEDNESDAY','THURSDAY','FRIDAY']\n * will result in [[6,1]] meaning close on Saturday and open on Monday.\n * If you remove Wednesday from the array, then you get two closures [[6, 1], [3, 4]]\n *\n * @param businessDays the days to display on the x-axis\n */\n createBoundsFromDays(businessDays) {\n var businessDaysInt = businessDays.map(day => this.daysOfWeek.indexOf(day));\n var nonBusinessDaysInt = this.daysOfWeek.filter(day => !businessDays.includes(day)).map(day => this.daysOfWeek.indexOf(day));\n // These are the days when business reopens (e.g. Monday after a weekend)\n var reopenDays = new Set();\n nonBusinessDaysInt.forEach(closed => {\n for (var i = closed + 1; i < closed + this.daysOfWeek.length; i += 1) {\n var adjustedDay = i % this.daysOfWeek.length;\n if (businessDaysInt.includes(adjustedDay)) {\n reopenDays.add(adjustedDay);\n break;\n }\n }\n });\n var boundsArray = [];\n // For each reopen day, find the furthest previous closed day\n reopenDays.forEach(open => {\n for (var i = open - 1; i > open - this.daysOfWeek.length; i -= 1) {\n var adjustedDay = i < 0 ? i + this.daysOfWeek.length : i;\n if (businessDaysInt.includes(adjustedDay)) {\n var closedDay = (adjustedDay + 1) % 7;\n boundsArray.push([closedDay, open]);\n break;\n }\n }\n });\n return boundsArray;\n }\n\n /**\n * Creates an array of range breaks for all holidays.\n *\n * @param holidays an array of holidays\n * @param calendarTimeZone the time zone for the business calendar\n * @param formatterTimeZone the time zone for the formatter\n */\n createRangeBreakValuesFromHolidays(holidays, calendarTimeZone, formatterTimeZone) {\n var fullHolidays = [];\n var partialHolidays = [];\n holidays.forEach(holiday => {\n if (holiday.businessPeriods.length > 0) {\n partialHolidays.push(...this.createPartialHoliday(holiday, calendarTimeZone, formatterTimeZone));\n } else {\n fullHolidays.push(this.createFullHoliday(holiday, calendarTimeZone, formatterTimeZone));\n }\n });\n return [{\n values: fullHolidays\n }, ...partialHolidays];\n }\n\n /**\n * Creates the range break value for a full holiday. A full holiday is day that has no business periods.\n *\n * @param holiday the full holiday\n * @param calendarTimeZone the time zone for the business calendar\n * @param formatterTimeZone the time zone for the formatter\n */\n createFullHoliday(holiday, calendarTimeZone, formatterTimeZone) {\n return this.adjustDateForTimeZone(\"\".concat(holiday.date.toString(), \" 00:00:00.000000\"), calendarTimeZone, formatterTimeZone);\n }\n\n /**\n * Creates the range break for a partial holiday. A partial holiday is holiday with business periods\n * that are different than the default business periods.\n *\n * @param holiday the partial holiday\n * @param calendarTimeZone the time zone for the business calendar\n * @param formatterTimeZone the time zone for the formatter\n */\n createPartialHoliday(holiday, calendarTimeZone, formatterTimeZone) {\n // If a holiday has business periods {open1, close1} and {open2, close2}\n // This will generate range breaks for:\n // closed from 00:00 to open1\n // closed from close1 to open2\n // closed from close2 to 23:59:59.999999\n var dateString = holiday.date.toString();\n var closedPeriods = ['00:00'];\n holiday.businessPeriods.forEach(period => {\n closedPeriods.push(period.open);\n closedPeriods.push(period.close);\n });\n // To go up to 23:59:59.999999, we calculate the dvalue using 24 - close\n closedPeriods.push('24:00');\n var rangeBreaks = [];\n for (var i = 0; i < closedPeriods.length; i += 2) {\n var startClose = closedPeriods[i];\n var endClose = closedPeriods[i + 1];\n // Skip over any periods where start and close are the same (zero hours)\n if (startClose !== endClose) {\n var values = [this.adjustDateForTimeZone(\"\".concat(dateString, \" \").concat(startClose, \":00.000000\"), calendarTimeZone, formatterTimeZone)];\n var dvalue = MILLIS_PER_HOUR * (ChartUtils.periodToDecimal(endClose) - ChartUtils.periodToDecimal(startClose));\n rangeBreaks.push({\n values,\n dvalue\n });\n }\n }\n return rangeBreaks;\n }\n\n /**\n * Adjusts a date string from the calendar time zone to the formatter time zone.\n *\n * @param dateString the date string\n * @param calendarTimeZone the time zone for the business calendar\n * @param formatterTimeZone the time zone for the formatter\n */\n adjustDateForTimeZone(dateString, calendarTimeZone, formatterTimeZone) {\n if (formatterTimeZone && formatterTimeZone.standardOffset !== calendarTimeZone.standardOffset) {\n return this.unwrapValue(this.wrapValue(dateString, BUSINESS_COLUMN_TYPE, calendarTimeZone), formatterTimeZone);\n }\n return dateString;\n }\n\n /**\n * Creates the Figure settings from the Chart Builder settings\n * This should be deprecated at some point, and have Chart Builder create the figure settings directly.\n * This logic will still need to exist to translate existing charts, but could be part of a migration script\n * to translate the data.\n * Change when we decide to add more functionality to the Chart Builder.\n * @param settings The chart builder settings\n * @param settings.title The title for this figure\n * @param settings.xAxis The name of the column to use for the x-axis\n * @param settings.series The name of the columns to use for the series of this figure\n * @param settings.type The plot style for this figure\n */\n makeFigureSettings(settings, table) {\n var {\n dh\n } = this;\n var {\n series,\n xAxis: settingsAxis,\n type\n } = settings;\n var title = ChartUtils.titleFromSettings(settings);\n var xAxis = {\n formatType: \"\".concat(dh.plot.AxisFormatType.NUMBER),\n type: \"\".concat(dh.plot.AxisType.X),\n position: \"\".concat(dh.plot.AxisPosition.BOTTOM)\n };\n var yAxis = {\n formatType: \"\".concat(dh.plot.AxisFormatType.NUMBER),\n type: \"\".concat(dh.plot.AxisType.Y),\n position: \"\".concat(dh.plot.AxisPosition.LEFT)\n };\n return {\n charts: [{\n chartType: \"\".concat(dh.plot.ChartType.XY),\n axes: [xAxis, yAxis],\n series: (series !== null && series !== void 0 ? series : []).map(name => ({\n plotStyle: \"\".concat(type),\n name,\n dataSources: [{\n type: \"\".concat(dh.plot.SourceType.X),\n columnName: settingsAxis !== null && settingsAxis !== void 0 ? settingsAxis : '',\n axis: xAxis,\n table\n }, {\n type: \"\".concat(dh.plot.SourceType.Y),\n columnName: name,\n axis: yAxis,\n table\n }]\n }))\n }],\n title\n };\n }\n\n /**\n * Unwraps a value provided from API to a value plotly can understand\n * Eg. Unwraps DateWrapper, LongWrapper objects.\n */\n unwrapValue(value, timeZone) {\n var {\n dh\n } = this;\n if (value != null) {\n if (isDateWrapper(value)) {\n return dh.i18n.DateTimeFormat.format(ChartUtils.DATE_FORMAT, value, timeZone);\n }\n if (isLongWrapper(value)) {\n return value.asNumber();\n }\n }\n return value;\n }\n\n /**\n *\n * @param value The value to wrap up\n * @param columnType The type of column this value is from\n * @param timeZone The time zone if applicable\n */\n wrapValue(value, columnType) {\n var timeZone = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var {\n dh\n } = this;\n if (TableUtils.isDateType(columnType) && typeof value === 'string') {\n // Need to limit the format to the actual length of the string range set in plotly\n // Otherwise parse will fail\n var text = value;\n var format = ChartUtils.DATE_FORMAT.substr(0, value.length);\n var date = dh.i18n.DateTimeFormat.parse(format, text);\n if (!timeZone) {\n return date;\n }\n\n // IDS-5994 Due to date parsing, time zone, and daylight savings shenanigans, we need\n // to pass the actual offset with the time to have it parse correctly.\n // However, the offset can change based on the date because of Daylight Savings\n // So we end up parsing the date multiple times. And curse daylight savings.\n var tzFormat = \"\".concat(format, \" Z\");\n var estimatedOffset = dh.i18n.DateTimeFormat.format('Z', date, timeZone);\n var estimatedDate = dh.i18n.DateTimeFormat.parse(tzFormat, \"\".concat(text, \" \").concat(estimatedOffset));\n var offset = dh.i18n.DateTimeFormat.format('Z', estimatedDate, timeZone);\n return dh.i18n.DateTimeFormat.parse(tzFormat, \"\".concat(text, \" \").concat(offset));\n }\n return value;\n }\n makeLayoutAxis(type, theme) {\n var {\n dh\n } = this;\n var axis = {\n automargin: true,\n gridcolor: theme.gridcolor,\n linecolor: theme.linecolor,\n rangeslider: {\n visible: false\n },\n showline: true,\n ticklen: 5,\n // act as padding, can't find a tick padding\n tickcolor: theme.paper_bgcolor,\n // hide ticks as padding\n tickfont: {\n color: theme.zerolinecolor\n },\n title: {\n font: {\n color: theme.title_color\n }\n },\n legend: {\n font: {\n color: theme.legend_color\n }\n }\n };\n if (type === dh.plot.AxisType.X) {\n Object.assign(axis, {\n showgrid: true\n });\n } else if (type === dh.plot.AxisType.Y) {\n Object.assign(axis, {\n zerolinecolor: theme.zerolinecolor,\n zerolinewidth: 2\n });\n }\n return axis;\n }\n\n /**\n * Creates a plotly layout object based on a given theme.\n * See https://plotly.com/javascript/reference/layout/\n * @param theme The theme to use for the layout\n */\n makeDefaultLayout(theme) {\n var {\n dh\n } = this;\n var {\n /* Used as top level properties of `Layout` */\n /* eslint-disable camelcase */\n paper_bgcolor,\n plot_bgcolor,\n title_color,\n coastline_color,\n land_color,\n ocean_color,\n lake_color,\n river_color\n /* eslint-disable camelcase */\n } = theme;\n var layout = {\n paper_bgcolor,\n plot_bgcolor,\n autosize: true,\n colorway: ChartUtils.getColorwayFromTheme(theme),\n font: {\n family: \"'Fira Sans', sans-serif\",\n color: title_color\n },\n title: {\n font: {\n color: title_color\n },\n yanchor: 'top',\n pad: _objectSpread({}, ChartUtils.DEFAULT_TITLE_PADDING),\n y: 1\n },\n legend: {\n font: {\n color: title_color\n }\n },\n margin: _objectSpread({}, ChartUtils.DEFAULT_MARGIN),\n xaxis: this.makeLayoutAxis(dh.plot.AxisType.X, theme),\n yaxis: this.makeLayoutAxis(dh.plot.AxisType.Y, theme),\n polar: {\n angularaxis: this.makeLayoutAxis(dh.plot.AxisType.SHAPE, theme),\n radialaxis: this.makeLayoutAxis(dh.plot.AxisType.SHAPE, theme),\n bgcolor: theme.plot_bgcolor\n },\n scene: {\n xaxis: this.makeLayoutAxis(dh.plot.AxisType.X, theme),\n yaxis: this.makeLayoutAxis(dh.plot.AxisType.Y, theme),\n zaxis: this.makeLayoutAxis(dh.plot.AxisType.Z, theme)\n },\n geo: {\n showcoastlines: true,\n showframe: false,\n showland: true,\n showocean: true,\n showlakes: true,\n showrivers: true,\n bgcolor: paper_bgcolor,\n coastlinecolor: coastline_color,\n landcolor: land_color,\n oceancolor: ocean_color,\n lakecolor: lake_color,\n rivercolor: river_color\n }\n };\n layout.datarevision = 0;\n return layout;\n }\n\n /**\n * Hydrate settings from a JSONable object\n * @param settings Dehydrated settings\n */\n hydrateSettings(settings) {\n var {\n dh\n } = this;\n return _objectSpread(_objectSpread({}, settings), {}, {\n type: settings.type != null ? dh.plot.SeriesPlotStyle[settings.type] : undefined\n });\n }\n}\n_defineProperty(ChartUtils, \"DEFAULT_AXIS_SIZE\", 0.15);\n_defineProperty(ChartUtils, \"MIN_AXIS_SIZE\", 0.025);\n_defineProperty(ChartUtils, \"MAX_AXIS_SIZE\", 0.2);\n_defineProperty(ChartUtils, \"AXIS_SIZE_PX\", 75);\n_defineProperty(ChartUtils, \"LEGEND_WIDTH_PX\", 50);\n_defineProperty(ChartUtils, \"MAX_LEGEND_SIZE\", 0.25);\n_defineProperty(ChartUtils, \"ORIENTATION\", Object.freeze({\n HORIZONTAL: 'h',\n VERTICAL: 'v'\n}));\n_defineProperty(ChartUtils, \"DATE_FORMAT\", 'yyyy-MM-dd HH:mm:ss.SSSSSS');\n_defineProperty(ChartUtils, \"DEFAULT_MARGIN\", Object.freeze({\n l: 60,\n r: 50,\n t: 30,\n b: 60,\n pad: 0\n}));\n_defineProperty(ChartUtils, \"DEFAULT_TITLE_PADDING\", Object.freeze({\n t: 8\n}));\n_defineProperty(ChartUtils, \"SUBTITLE_LINE_HEIGHT\", 25);\n_defineProperty(ChartUtils, \"DEFAULT_MARKER_SIZE\", 6);\n_defineProperty(ChartUtils, \"MODE_MARKERS\", 'markers');\n_defineProperty(ChartUtils, \"MODE_LINES\", 'lines');\nexport default ChartUtils;\n//# sourceMappingURL=ChartUtils.js.map","function _defineProperty(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 DownsamplingError extends Error {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"isDownsamplingError\", true);\n }\n}\nexport default DownsamplingError;\n//# sourceMappingURL=DownsamplingError.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 deepEqual from 'deep-equal';\nimport memoize from 'memoize-one';\nimport { CopyButton, Popper } from '@deephaven/components';\nimport { vsLoading, dhGraphLineDown, dhWarningFilled } from '@deephaven/icons';\nimport { Formatter, FormatterUtils, DateUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport createPlotlyComponent from \"./plotly/createPlotlyComponent.js\";\nimport Plotly from \"./plotly/Plotly.js\";\nimport ChartModel from \"./ChartModel.js\";\nimport ChartUtils from \"./ChartUtils.js\";\nimport \"./Chart.css\";\nimport DownsamplingError from \"./DownsamplingError.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\";\nvar log = Log.module('Chart');\nexport class Chart extends Component {\n /**\n * Convert a font awesome icon definition to a plotly icon definition\n * @param faIcon The icon to convert\n */\n static convertIcon(faIcon) {\n var [width,,,, path] = faIcon.icon;\n // By default the icons are flipped upside down, so we need to add our own transform\n // https://github.com/plotly/plotly.js/issues/1335\n var stringPath = \"\".concat(path);\n return {\n width,\n path: stringPath,\n ascent: width,\n descent: 0,\n transform: \"matrix(1, 0, 0, 1, 0, 0)\"\n };\n }\n static downsampleButtonTitle(isDownsampleInProgress, isDownsamplingDisabled) {\n if (isDownsampleInProgress) {\n return 'Downsampling in progress...';\n }\n return isDownsamplingDisabled ? 'Downsampling disabled, click to enable' : 'Downsampling enabled, click to disable';\n }\n static downsampleButtonAttr(isDownsampleInProgress, isDownsamplingDisabled) {\n if (isDownsampleInProgress) {\n return 'animation-spin';\n }\n return isDownsamplingDisabled ? undefined : 'fill-active';\n }\n constructor(props) {\n var _props$containerRef;\n super(props);\n _defineProperty(this, \"currentSeries\", void 0);\n _defineProperty(this, \"PlotComponent\", void 0);\n _defineProperty(this, \"plot\", void 0);\n _defineProperty(this, \"plotWrapper\", void 0);\n _defineProperty(this, \"columnFormats\", void 0);\n _defineProperty(this, \"dateTimeFormatterOptions\", void 0);\n _defineProperty(this, \"decimalFormatOptions\", void 0);\n _defineProperty(this, \"integerFormatOptions\", void 0);\n _defineProperty(this, \"rect\", void 0);\n _defineProperty(this, \"ranges\", void 0);\n _defineProperty(this, \"isSubscribed\", void 0);\n _defineProperty(this, \"isLoadedFired\", void 0);\n _defineProperty(this, \"resizeObserver\", void 0);\n _defineProperty(this, \"getCachedConfig\", memoize((downsamplingError, isDownsampleFinished, isDownsampleInProgress, isDownsamplingDisabled, data, error) => {\n var customButtons = [];\n var hasDownsampleError = Boolean(downsamplingError);\n if (hasDownsampleError) {\n customButtons.push({\n name: \"Downsampling failed: \".concat(downsamplingError),\n title: 'Downsampling failed',\n click: () => {\n this.toggleErrorMessage(\"\".concat(downsamplingError));\n },\n icon: Chart.convertIcon(dhWarningFilled),\n attr: 'fill-warning'\n });\n }\n var hasError = Boolean(error);\n if (hasError) {\n customButtons.push({\n name: \"Error: \".concat(error),\n title: \"Error\",\n click: () => {\n this.toggleErrorMessage(\"\".concat(error));\n },\n icon: Chart.convertIcon(dhWarningFilled),\n attr: 'fill-warning'\n });\n }\n if (isDownsampleFinished || isDownsampleInProgress || isDownsamplingDisabled || hasDownsampleError) {\n var name = Chart.downsampleButtonTitle(isDownsampleInProgress, isDownsamplingDisabled);\n var attr = Chart.downsampleButtonAttr(isDownsampleInProgress, isDownsamplingDisabled);\n var icon = isDownsampleInProgress ? vsLoading : dhGraphLineDown;\n customButtons.push({\n name,\n title: 'Downsampling status',\n icon: Chart.convertIcon(icon),\n click: this.handleDownsampleClick,\n attr\n });\n }\n var has2D = data.some(_ref => {\n var {\n type\n } = _ref;\n return type != null && !type.includes('3d');\n });\n var has3D = data.some(_ref2 => {\n var {\n type\n } = _ref2;\n return type != null && type.includes('3d');\n });\n var buttons2D = ['zoomIn2d', 'zoomOut2d', 'autoScale2d', 'resetScale2d'];\n var buttons3D = ['orbitRotation', 'tableRotation', 'resetCameraDefault3d'];\n return {\n displaylogo: false,\n // Display the mode bar if there's an error or downsampling so user can see progress\n // Yes, the value is a boolean or the string 'hover': https://github.com/plotly/plotly.js/blob/master/src/plot_api/plot_config.js#L249\n displayModeBar:\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n isDownsampleInProgress || hasDownsampleError || hasError ? true : 'hover',\n // Each array gets grouped together in the mode bar\n modeBarButtons: [customButtons, ['toImage'], ['zoom2d', 'pan2d'],\n // These work the same for both 2d and 3d\n [...(has2D ? buttons2D : []), ...(has3D ? buttons3D : [])]]\n };\n }));\n this.handleAfterPlot = this.handleAfterPlot.bind(this);\n this.handleDownsampleClick = this.handleDownsampleClick.bind(this);\n this.handleErrorClose = this.handleErrorClose.bind(this);\n this.handleModelEvent = this.handleModelEvent.bind(this);\n this.handlePlotUpdate = this.handlePlotUpdate.bind(this);\n this.handleRelayout = this.handleRelayout.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleRestyle = this.handleRestyle.bind(this);\n this.PlotComponent = createPlotlyComponent(props.Plotly);\n this.plot = /*#__PURE__*/React.createRef();\n this.plotWrapper = (_props$containerRef = props.containerRef) !== null && _props$containerRef !== void 0 ? _props$containerRef : /*#__PURE__*/React.createRef();\n this.columnFormats = [];\n this.dateTimeFormatterOptions = {};\n this.decimalFormatOptions = {};\n this.integerFormatOptions = {};\n this.isSubscribed = false;\n this.isLoadedFired = false;\n this.currentSeries = 0;\n this.resizeObserver = new window.ResizeObserver(this.handleResize);\n this.state = {\n data: null,\n downsamplingError: null,\n isDownsampleFinished: false,\n isDownsampleInProgress: false,\n isDownsamplingDisabled: false,\n error: null,\n shownError: null,\n layout: {\n datarevision: 0\n },\n revision: 0\n };\n }\n componentDidMount() {\n // Need to make sure the model dimensions are up to date before initializing the data\n this.updateDimensions();\n this.updateModelDimensions();\n this.initData();\n this.initFormatter();\n var {\n isActive,\n model\n } = this.props;\n if (isActive) {\n this.subscribe(model);\n }\n if (this.plotWrapper.current != null) {\n this.resizeObserver.observe(this.plotWrapper.current);\n }\n }\n componentDidUpdate(prevProps) {\n var {\n isActive,\n model,\n settings\n } = this.props;\n this.updateFormatterSettings(settings);\n if (model !== prevProps.model) {\n this.unsubscribe(prevProps.model);\n this.subscribe(model);\n }\n if (isActive !== prevProps.isActive) {\n if (isActive) {\n this.updateDimensions();\n this.subscribe(model);\n } else {\n this.unsubscribe(model);\n }\n }\n }\n componentWillUnmount() {\n var {\n model\n } = this.props;\n this.unsubscribe(model);\n this.resizeObserver.disconnect();\n }\n\n // Listen for resizing of the element and update the canvas appropriately\n\n getPlotRect() {\n var _this$plotWrapper$cur, _this$plotWrapper$cur2;\n return (_this$plotWrapper$cur = (_this$plotWrapper$cur2 = this.plotWrapper.current) === null || _this$plotWrapper$cur2 === void 0 ? void 0 : _this$plotWrapper$cur2.getBoundingClientRect()) !== null && _this$plotWrapper$cur !== void 0 ? _this$plotWrapper$cur : null;\n }\n initData() {\n var {\n model\n } = this.props;\n var {\n layout\n } = this.state;\n this.setState({\n data: model.getData(),\n layout: _objectSpread(_objectSpread({}, layout), model.getLayout())\n });\n }\n subscribe(model) {\n if (this.isSubscribed) {\n return;\n }\n if (!this.rect || this.rect.width === 0 || this.rect.height === 0) {\n log.debug2('Delaying subscription until model dimensions are set');\n return;\n }\n model.subscribe(this.handleModelEvent);\n this.isSubscribed = true;\n }\n unsubscribe(model) {\n if (!this.isSubscribed) {\n return;\n }\n model.unsubscribe(this.handleModelEvent);\n this.isSubscribed = false;\n }\n handleAfterPlot() {\n if (this.plot.current != null) {\n // TODO: Translate whatever Don was doing in plotting.js in the afterplot here so that area graphs show up properly\n }\n }\n handleDownsampleClick() {\n this.setState(_ref3 => {\n var {\n isDownsamplingDisabled\n } = _ref3;\n return {\n downsamplingError: null,\n isDownsampleInProgress: false,\n isDownsampleFinished: false,\n isDownsamplingDisabled: !isDownsamplingDisabled\n };\n }, () => {\n var {\n model\n } = this.props;\n var {\n isDownsamplingDisabled\n } = this.state;\n model.setDownsamplingDisabled(isDownsamplingDisabled);\n });\n }\n handleErrorClose() {\n this.setState({\n shownError: null\n });\n }\n handleModelEvent(event) {\n var {\n type,\n detail\n } = event;\n log.debug2('Received data update', type, detail);\n switch (type) {\n case ChartModel.EVENT_UPDATED:\n {\n this.currentSeries += 1;\n this.setState(state => {\n var {\n layout,\n revision\n } = state;\n if (typeof layout.datarevision === 'number') {\n layout.datarevision += 1;\n }\n return {\n data: detail,\n layout,\n revision: revision + 1\n };\n });\n var {\n onUpdate\n } = this.props;\n onUpdate({\n isLoading: !this.isLoadedFired\n });\n break;\n }\n case ChartModel.EVENT_LOADFINISHED:\n {\n var {\n onUpdate: _onUpdate\n } = this.props;\n this.isLoadedFired = true;\n _onUpdate({\n isLoading: false\n });\n break;\n }\n case ChartModel.EVENT_DISCONNECT:\n {\n var {\n onDisconnect\n } = this.props;\n onDisconnect();\n break;\n }\n case ChartModel.EVENT_RECONNECT:\n {\n var {\n onReconnect\n } = this.props;\n onReconnect();\n break;\n }\n case ChartModel.EVENT_DOWNSAMPLESTARTED:\n {\n this.setState({\n isDownsampleFinished: false,\n isDownsampleInProgress: true,\n downsamplingError: null\n });\n break;\n }\n case ChartModel.EVENT_DOWNSAMPLEFINISHED:\n {\n this.setState({\n isDownsampleFinished: true,\n isDownsampleInProgress: false,\n downsamplingError: null\n });\n break;\n }\n case ChartModel.EVENT_DOWNSAMPLENEEDED:\n case ChartModel.EVENT_DOWNSAMPLEFAILED:\n {\n var _detail$message;\n var downsamplingError = (_detail$message = detail.message) !== null && _detail$message !== void 0 ? _detail$message : detail;\n this.setState({\n isDownsampleFinished: false,\n isDownsampleInProgress: false,\n isDownsamplingDisabled: false,\n downsamplingError\n });\n var {\n onError\n } = this.props;\n onError(new DownsamplingError(downsamplingError));\n break;\n }\n case ChartModel.EVENT_ERROR:\n {\n var _error = \"\".concat(detail);\n this.setState({\n error: _error\n });\n var {\n onError: _onError\n } = this.props;\n _onError(new Error(_error));\n break;\n }\n default:\n log.debug('Unknown event type', type, event);\n }\n }\n handlePlotUpdate(figure) {\n // User could have modified zoom/pan here, update the model dimensions\n // We don't need to update the datarevision, as we don't have any data changes\n // until an update comes back from the server anyway\n var {\n layout\n } = figure;\n var ranges = ChartUtils.getLayoutRanges(layout);\n var isRangesChanged = !deepEqual(ranges, this.ranges);\n if (isRangesChanged) {\n this.ranges = ranges;\n this.updateModelDimensions(true);\n }\n }\n handleRelayout(changes) {\n log.debug('handleRelayout', changes);\n if (changes.hiddenlabels != null) {\n var {\n onSettingsChanged\n } = this.props;\n // Pie charts store series visibility in layout.hiddenlabels and trigger relayout on changes\n // Series visibility for other types of charts is handled in handleRestyle\n var hiddenSeries = [...changes.hiddenlabels];\n onSettingsChanged({\n hiddenSeries\n });\n }\n this.updateModelDimensions();\n }\n handleResize() {\n this.updateDimensions();\n }\n handleRestyle(_ref4) {\n var [changes, seriesIndexes] = _ref4;\n log.debug('handleRestyle', changes, seriesIndexes);\n if (Object.keys(changes).includes('visible')) {\n var {\n data\n } = this.state;\n var {\n onSettingsChanged\n } = this.props;\n if (data != null) {\n var hiddenSeries = data.reduce((acc, _ref5) => {\n var {\n name,\n visible\n } = _ref5;\n return name != null && visible === 'legendonly' ? [...acc, name] : acc;\n }, []);\n onSettingsChanged({\n hiddenSeries\n });\n }\n }\n }\n\n /**\n * Toggle the error message. If it is already being displayed, then hide it.\n */\n toggleErrorMessage(error) {\n this.setState(_ref6 => {\n var {\n shownError\n } = _ref6;\n return {\n shownError: shownError === error ? null : error\n };\n });\n }\n\n /**\n * Update the models dimensions and ranges.\n * Note that this will update it all whether the plot size changes OR the range\n * the user is looking at has changed (eg. panning/zooming).\n * Could update each independently, but doing them at the same time keeps the\n * ChartModel API a bit cleaner.\n * @param force Force a change even if the chart dimensions haven't changed (eg. after pan/zoom)\n */\n updateModelDimensions() {\n var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var rect = this.getPlotRect();\n if (!rect) {\n log.warn('Unable to get plotting rect');\n return;\n }\n var isRectChanged = !this.rect || this.rect.width !== rect.width || this.rect.height !== rect.height;\n if (isRectChanged || force) {\n this.rect = rect;\n var {\n isActive,\n model\n } = this.props;\n model.setDimensions(rect);\n // We may need to resubscribe if dimensions were too small before\n if (isActive) {\n this.subscribe(model);\n }\n }\n }\n initFormatter() {\n var {\n settings\n } = this.props;\n this.updateFormatterSettings(settings);\n }\n updateFormatterSettings(settings) {\n var columnFormats = FormatterUtils.getColumnFormats(settings);\n var dateTimeFormatterOptions = FormatterUtils.getDateTimeFormatterOptions(settings);\n var {\n decimalFormatOptions = {},\n integerFormatOptions = {}\n } = settings;\n if (!deepEqual(this.columnFormats, columnFormats) || !deepEqual(this.dateTimeFormatterOptions, dateTimeFormatterOptions) || !deepEqual(this.decimalFormatOptions, decimalFormatOptions) || !deepEqual(this.integerFormatOptions, integerFormatOptions)) {\n this.columnFormats = FormatterUtils.getColumnFormats(settings);\n this.dateTimeFormatterOptions = dateTimeFormatterOptions;\n this.decimalFormatOptions = decimalFormatOptions;\n this.integerFormatOptions = integerFormatOptions;\n this.updateFormatter();\n }\n }\n updateFormatter() {\n var {\n model\n } = this.props;\n var formatter = new Formatter(model.dh, this.columnFormats, this.dateTimeFormatterOptions, this.decimalFormatOptions, this.integerFormatOptions);\n model.setFormatter(formatter);\n }\n updateDimensions() {\n var rect = this.getPlotRect();\n var {\n Plotly: PlotlyProp\n } = this.props;\n if (this.plot.current != null && rect != null && rect.width > 0 && rect.height > 0) {\n // Call relayout to resize avoiding the debouncing plotly does\n // https://github.com/plotly/plotly.js/issues/2769#issuecomment-402099552\n PlotlyProp.relayout(this.plot.current.el, {\n autosize: true\n }).catch(e => {\n log.debug('Unable to resize, promise rejected', e);\n });\n }\n }\n render() {\n var {\n PlotComponent\n } = this;\n var {\n data,\n downsamplingError,\n isDownsampleFinished,\n isDownsampleInProgress,\n isDownsamplingDisabled,\n error,\n shownError,\n layout,\n revision\n } = this.state;\n var config = this.getCachedConfig(downsamplingError, isDownsampleFinished, isDownsampleInProgress, isDownsamplingDisabled, data !== null && data !== void 0 ? data : [], error);\n var isPlotShown = data != null;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"h-100 w-100 chart-wrapper\",\n ref: this.plotWrapper,\n children: [isPlotShown && /*#__PURE__*/_jsx(PlotComponent\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n , {\n ref: this.plot,\n data: data,\n layout: layout,\n revision: revision,\n config: config,\n onAfterPlot: this.handleAfterPlot,\n onError: log.error,\n onRelayout: this.handleRelayout,\n onUpdate: this.handlePlotUpdate,\n onRestyle: this.handleRestyle,\n useResizeHandler: true,\n style: {\n height: '100%',\n width: '100%'\n }\n }), /*#__PURE__*/_jsx(Popper, {\n className: \"chart-error-popper\",\n options: {\n placement: 'top'\n },\n isShown: shownError != null,\n onExited: this.handleErrorClose,\n closeOnBlur: true,\n interactive: true,\n children: shownError != null && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"chart-error\",\n children: shownError\n }), /*#__PURE__*/_jsx(CopyButton, {\n tooltip: \"Copy Error\",\n copy: shownError,\n children: \"Copy Error\"\n })]\n })\n })]\n });\n }\n}\n_defineProperty(Chart, \"defaultProps\", {\n isActive: true,\n settings: {\n timeZone: 'America/New_York',\n defaultDateTimeFormat: DateUtils.FULL_DATE_FORMAT,\n showTimeZone: false,\n showTSeparator: true,\n formatter: []\n },\n Plotly,\n onDisconnect: () => undefined,\n onReconnect: () => undefined,\n onUpdate: () => undefined,\n onError: () => undefined,\n onSettingsChanged: () => undefined\n});\nexport default Chart;\n//# sourceMappingURL=Chart.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 class-methods-use-this: \"off\" */\nimport memoize from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport set from 'lodash.set';\nimport Log from '@deephaven/log';\nimport ChartModel from \"./ChartModel.js\";\nimport ChartUtils from \"./ChartUtils.js\";\nvar log = Log.module('FigureChartModel');\n\n/**\n * Takes a Figure object from a widget to make a model for a chart\n */\nclass FigureChartModel extends ChartModel {\n /**\n * @param dh JSAPI instance\n * @param figure The figure object created by the API\n * @param theme The theme for the figure\n * @param settings Chart settings\n */\n constructor(dh, figure, theme) {\n var _this;\n var settings = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n super(dh);\n _this = this;\n _defineProperty(this, \"chartUtils\", void 0);\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"figure\", void 0);\n _defineProperty(this, \"settings\", void 0);\n _defineProperty(this, \"theme\", void 0);\n _defineProperty(this, \"data\", void 0);\n _defineProperty(this, \"layout\", void 0);\n _defineProperty(this, \"seriesDataMap\", void 0);\n _defineProperty(this, \"pendingSeries\", void 0);\n _defineProperty(this, \"oneClicks\", void 0);\n _defineProperty(this, \"filterColumnMap\", void 0);\n _defineProperty(this, \"lastFilter\", void 0);\n _defineProperty(this, \"isConnected\", void 0);\n _defineProperty(this, \"seriesToProcess\", void 0);\n _defineProperty(this, \"addPendingSeries\", debounce(() => {\n var axisTypeMap = ChartUtils.getAxisTypeMap(this.figure);\n var {\n pendingSeries\n } = this;\n var _loop = function _loop() {\n var _chart$showLegend;\n var series = pendingSeries[i];\n var chart = _this.figure.charts.find(c => c.series.includes(series));\n _this.addSeries(series, axisTypeMap, (_chart$showLegend = chart === null || chart === void 0 ? void 0 : chart.showLegend) !== null && _chart$showLegend !== void 0 ? _chart$showLegend : null);\n series.subscribe();\n // We'll get an update with the data after subscribing\n };\n for (var i = 0; i < pendingSeries.length; i += 1) {\n _loop();\n }\n this.pendingSeries = [];\n }, FigureChartModel.ADD_SERIES_DEBOUNCE));\n _defineProperty(this, \"getTimeZone\", memoize((columnType, formatter) => {\n if (formatter != null) {\n var dataFormatter = formatter.getColumnTypeFormatter(columnType);\n if (dataFormatter != null) {\n return dataFormatter.dhTimeZone;\n }\n }\n return undefined;\n }));\n _defineProperty(this, \"getValueTranslator\", memoize((columnType, formatter) => {\n var timeZone = this.getTimeZone(columnType, formatter);\n return value => this.chartUtils.unwrapValue(value, timeZone);\n }));\n _defineProperty(this, \"getValueParser\", memoize((columnType, formatter) => {\n var timeZone = this.getTimeZone(columnType, formatter);\n return value => this.chartUtils.wrapValue(value, columnType, timeZone);\n }));\n _defineProperty(this, \"getRangeParser\", memoize((columnType, formatter) => range => {\n var [rangeStart, rangeEnd] = range;\n var valueParser = this.getValueParser(columnType, formatter);\n rangeStart = valueParser(rangeStart);\n rangeEnd = valueParser(rangeEnd);\n return [rangeStart, rangeEnd];\n }));\n _defineProperty(this, \"getAxisRangeParser\", memoize((chart, formatter) => axis => {\n var source = ChartUtils.getSourceForAxis(chart, axis);\n if (source != null) {\n return this.getRangeParser(source.columnType, formatter);\n }\n return range => range;\n }));\n this.handleFigureUpdated = this.handleFigureUpdated.bind(this);\n this.handleFigureDisconnected = this.handleFigureDisconnected.bind(this);\n this.handleFigureReconnected = this.handleFigureReconnected.bind(this);\n this.handleFigureSeriesAdded = this.handleFigureSeriesAdded.bind(this);\n this.handleDownsampleStart = this.handleDownsampleStart.bind(this);\n this.handleDownsampleFinish = this.handleDownsampleFinish.bind(this);\n this.handleDownsampleFail = this.handleDownsampleFail.bind(this);\n this.handleDownsampleNeeded = this.handleDownsampleNeeded.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.dh = dh;\n this.chartUtils = new ChartUtils(dh);\n this.figure = figure;\n this.settings = settings;\n this.theme = theme;\n this.data = [];\n var template = {\n data: {},\n layout: this.chartUtils.makeDefaultLayout(theme)\n };\n this.layout = {\n grid: {\n rows: figure.rows,\n columns: figure.cols,\n pattern: 'independent'\n },\n template\n };\n this.seriesDataMap = new Map();\n this.pendingSeries = [];\n this.oneClicks = [];\n this.filterColumnMap = new Map();\n this.lastFilter = new Map();\n this.isConnected = true; // Assume figure is connected to start\n this.seriesToProcess = new Set();\n this.setTitle(this.getDefaultTitle());\n this.initAllSeries();\n this.updateAxisPositions();\n this.startListeningFigure();\n }\n\n // Assume figure is connected to start\n\n close() {\n this.figure.close();\n this.addPendingSeries.cancel();\n this.stopListeningFigure();\n }\n getDefaultTitle() {\n if (this.figure.title != null && this.figure.title.length > 0) {\n return this.figure.title;\n }\n if (this.figure.charts.length === 1) {\n var _this$figure$charts$;\n return (_this$figure$charts$ = this.figure.charts[0].title) !== null && _this$figure$charts$ !== void 0 ? _this$figure$charts$ : '';\n }\n return '';\n }\n initAllSeries() {\n var _this2 = this;\n this.oneClicks = [];\n this.filterColumnMap.clear();\n var {\n charts\n } = this.figure;\n var axisTypeMap = ChartUtils.getAxisTypeMap(this.figure);\n var activeSeriesNames = [];\n this.seriesToProcess = new Set();\n var _loop2 = function _loop2() {\n var chart = charts[i];\n for (var j = 0; j < chart.series.length; j += 1) {\n var series = chart.series[j];\n activeSeriesNames.push(series.name);\n _this2.addSeries(series, axisTypeMap, chart.showLegend);\n }\n\n // Need to add the chart titles as annotations if they are set\n var {\n axes,\n title\n } = chart;\n if (title != null && title.length > 0 && (charts.length > 1 || _this2.figure.title != null)) {\n var xAxis = axes.find(axis => axis.type === _this2.dh.plot.AxisType.X);\n var yAxis = axes.find(axis => axis.type === _this2.dh.plot.AxisType.Y);\n if (xAxis == null || yAxis == null) {\n log.warn('Chart title provided, but unknown how to map to the correct axes for this chart type', chart);\n } else {\n var _axisTypeMap$get$find, _axisTypeMap$get, _axisTypeMap$get$find2, _axisTypeMap$get2;\n var xAxisIndex = ((_axisTypeMap$get$find = (_axisTypeMap$get = axisTypeMap.get(xAxis.type)) === null || _axisTypeMap$get === void 0 ? void 0 : _axisTypeMap$get.findIndex(a => a === xAxis)) !== null && _axisTypeMap$get$find !== void 0 ? _axisTypeMap$get$find : 0) + 1;\n var yAxisIndex = ((_axisTypeMap$get$find2 = (_axisTypeMap$get2 = axisTypeMap.get(yAxis.type)) === null || _axisTypeMap$get2 === void 0 ? void 0 : _axisTypeMap$get2.findIndex(a => a === yAxis)) !== null && _axisTypeMap$get$find2 !== void 0 ? _axisTypeMap$get$find2 : 0) + 1;\n var annotation = {\n align: 'center',\n x: 0.5,\n y: 1,\n yshift: 17,\n text: title,\n showarrow: false,\n // Typing is incorrect in Plotly for this, as it doesn't seem to be typed for the \"domain\" part: https://plotly.com/javascript/reference/layout/annotations/#layout-annotations-items-annotation-xref\n xref: \"x\".concat(xAxisIndex, \" domain\"),\n yref: \"y\".concat(yAxisIndex, \" domain\")\n };\n if (_this2.layout.annotations == null) {\n _this2.layout.annotations = [annotation];\n } else {\n _this2.layout.annotations.push(annotation);\n }\n }\n }\n };\n for (var i = 0; i < charts.length; i += 1) {\n _loop2();\n }\n\n // Remove any series that no longer exist\n var allSeriesNames = [...this.seriesDataMap.keys()];\n var inactiveSeriesNames = allSeriesNames.filter(seriesName => activeSeriesNames.indexOf(seriesName) < 0);\n for (var _i = 0; _i < inactiveSeriesNames.length; _i += 1) {\n var seriesName = inactiveSeriesNames[_i];\n this.seriesDataMap.delete(seriesName);\n }\n }\n\n /**\n * Add a series to the model\n * @param series Series object to add\n * @param axisTypeMap Map of axis type to the axes in this Figure\n * @param showLegend Whether this series should show the legend or not\n */\n addSeries(series, axisTypeMap, showLegend) {\n var {\n dh\n } = this;\n var seriesData = this.chartUtils.makeSeriesDataFromSeries(series, axisTypeMap, ChartUtils.getSeriesVisibility(series.name, this.settings), this.theme, showLegend);\n this.seriesDataMap.set(series.name, seriesData);\n this.seriesToProcess.add(series.name);\n this.data = [...this.seriesDataMap.values()];\n if (series.plotStyle === dh.plot.SeriesPlotStyle.STACKED_BAR) {\n this.layout.barmode = 'stack';\n } else if (series.plotStyle === dh.plot.SeriesPlotStyle.PIE) {\n this.layout.hiddenlabels = ChartUtils.getHiddenLabels(this.settings);\n }\n\n // We only want to force hide the legend if there is only one series that is not a PIE\n // Right now this means that if the user only has one series, they cannot explicitly show the legend until deephaven-core#3254 is implemented\n // TODO: deephaven-core#3254, once done, this can be removed.\n this.layout.showlegend = this.data.length > 1 || series.plotStyle === dh.plot.SeriesPlotStyle.PIE ? showLegend !== null && showLegend !== void 0 ? showLegend : undefined : false;\n if (series.oneClick != null) {\n var {\n oneClick\n } = series;\n var {\n columns\n } = oneClick;\n for (var i = 0; i < columns.length; i += 1) {\n this.filterColumnMap.set(columns[i].name, columns[i]);\n }\n this.oneClicks.push(oneClick);\n }\n this.updateLayoutFormats();\n }\n\n // We need to debounce adding series so we subscribe to them all in the same tick\n // This should no longer be necessary after IDS-5049 lands\n subscribe(callback) {\n super.subscribe(callback);\n if (this.listeners.length === 1) {\n // Need to initialize the series here as we may have missed some series when not subscribed\n this.initAllSeries();\n this.subscribeFigure();\n }\n }\n unsubscribe(callback) {\n super.unsubscribe(callback);\n if (this.listeners.length === 0) {\n this.unsubscribeFigure();\n }\n }\n subscribeFigure() {\n if (!this.isConnected) {\n log.debug('Ignoring subscribe when figure in disconnected state');\n return;\n }\n this.figure.subscribe(this.isDownsamplingDisabled ? this.dh.plot.DownsampleOptions.DISABLE : this.dh.plot.DownsampleOptions.DEFAULT);\n if (this.figure.errors.length > 0) {\n log.error('Errors in figure', this.figure.errors);\n this.fireError(this.figure.errors);\n }\n }\n unsubscribeFigure() {\n this.figure.unsubscribe();\n }\n startListeningFigure() {\n var {\n dh\n } = this;\n this.figure.addEventListener(dh.plot.Figure.EVENT_UPDATED, this.handleFigureUpdated);\n this.figure.addEventListener(dh.plot.Figure.EVENT_SERIES_ADDED, this.handleFigureSeriesAdded);\n this.figure.addEventListener(dh.plot.Figure.EVENT_DISCONNECT, this.handleFigureDisconnected);\n this.figure.addEventListener(dh.plot.Figure.EVENT_RECONNECT, this.handleFigureReconnected);\n this.figure.addEventListener(dh.plot.Figure.EVENT_DOWNSAMPLESTARTED, this.handleDownsampleStart);\n this.figure.addEventListener(dh.plot.Figure.EVENT_DOWNSAMPLEFINISHED, this.handleDownsampleFinish);\n this.figure.addEventListener(dh.plot.Figure.EVENT_DOWNSAMPLEFAILED, this.handleDownsampleFail);\n this.figure.addEventListener(dh.plot.Figure.EVENT_DOWNSAMPLENEEDED, this.handleDownsampleNeeded);\n this.figure.addEventListener(dh.Client.EVENT_REQUEST_FAILED, this.handleRequestFailed);\n }\n stopListeningFigure() {\n var {\n dh\n } = this;\n this.figure.removeEventListener(dh.plot.Figure.EVENT_UPDATED, this.handleFigureUpdated);\n this.figure.removeEventListener(dh.plot.Figure.EVENT_SERIES_ADDED, this.handleFigureSeriesAdded);\n this.figure.removeEventListener(dh.plot.Figure.EVENT_DISCONNECT, this.handleFigureDisconnected);\n this.figure.removeEventListener(dh.plot.Figure.EVENT_RECONNECT, this.handleFigureReconnected);\n this.figure.removeEventListener(dh.plot.Figure.EVENT_DOWNSAMPLESTARTED, this.handleDownsampleStart);\n this.figure.removeEventListener(dh.plot.Figure.EVENT_DOWNSAMPLEFINISHED, this.handleDownsampleFinish);\n this.figure.removeEventListener(dh.plot.Figure.EVENT_DOWNSAMPLEFAILED, this.handleDownsampleFail);\n this.figure.removeEventListener(dh.plot.Figure.EVENT_DOWNSAMPLENEEDED, this.handleDownsampleNeeded);\n this.figure.removeEventListener(dh.Client.EVENT_REQUEST_FAILED, this.handleRequestFailed);\n }\n\n /** Gets the parser for a value with the provided column type */\n\n /**\n * Gets the range parser for a particular column type\n */\n\n /**\n * Gets the parser for parsing the range from an axis within the given chart\n */\n\n handleDownsampleStart(event) {\n log.debug('Downsample started', event);\n this.fireDownsampleStart(event.detail);\n }\n handleDownsampleFinish(event) {\n log.debug('Downsample finished', event);\n this.fireDownsampleFinish(event.detail);\n }\n handleDownsampleFail(event) {\n log.error('Downsample failed', event);\n this.fireDownsampleFail(event.detail);\n }\n handleDownsampleNeeded(event) {\n log.info('Downsample needed', event);\n this.fireDownsampleNeeded(event.detail);\n }\n handleFigureUpdated(event) {\n var {\n detail: figureUpdateEvent\n } = event;\n var {\n series: seriesArray\n } = figureUpdateEvent;\n log.debug2('handleFigureUpdated', seriesArray);\n for (var i = 0; i < seriesArray.length; i += 1) {\n var series = seriesArray[i];\n log.debug2('handleFigureUpdated updating series', series.name);\n var {\n sources\n } = series;\n for (var j = 0; j < sources.length; j += 1) {\n var source = sources[j];\n var {\n columnType,\n type\n } = source;\n var valueTranslator = this.getValueTranslator(columnType, this.formatter);\n var dataArray = figureUpdateEvent.getArray(series, type, valueTranslator);\n this.setDataArrayForSeries(series, type, dataArray);\n }\n this.seriesToProcess.delete(series.name);\n this.cleanSeries(series);\n }\n if (this.seriesToProcess.size === 0) {\n this.fireLoadFinished();\n }\n var {\n data\n } = this;\n this.fireUpdate(data);\n }\n handleRequestFailed(event) {\n log.error('Request failed', event);\n this.fireError([\"\".concat(event.detail)]);\n }\n\n /**\n * Resubscribe to the figure, should be done if settings change\n */\n resubscribe() {\n if (this.listeners.length > 0) {\n this.unsubscribeFigure();\n this.subscribeFigure();\n }\n }\n setFormatter(formatter) {\n super.setFormatter(formatter);\n this.updateLayoutFormats();\n\n // Unsubscribe and resubscribe to trigger a data update\n // Data may need to be translated again because of the new formatter\n this.resubscribe();\n }\n setDownsamplingDisabled(isDownsamplingDisabled) {\n super.setDownsamplingDisabled(isDownsamplingDisabled);\n this.resubscribe();\n }\n handleFigureDisconnected(event) {\n log.debug('Figure disconnected', event);\n this.isConnected = false;\n if (this.listeners.length > 0) {\n this.unsubscribeFigure();\n }\n this.fireDisconnect();\n }\n handleFigureReconnected(event) {\n log.debug('Figure reconnected', event);\n this.isConnected = true;\n\n // It's possible the series have changed completely, as the query could have been changed\n this.initAllSeries();\n this.fireReconnect();\n if (this.listeners.length > 0) {\n this.subscribeFigure();\n }\n }\n handleFigureSeriesAdded(event) {\n var {\n detail: series\n } = event;\n log.debug('handleFigureSeriesAdded', series);\n this.pendingSeries.push(series);\n this.addPendingSeries();\n }\n setDimensions(rect) {\n super.setDimensions(rect);\n this.updateAxisPositions();\n }\n setTitle(title) {\n var _match$length, _match;\n super.setTitle(title);\n\n // Need to recalculate the padding based on how many lines of text the title is\n // Plotly doesn't handle positioning it correctly, and it's an undocumented feature\n var subtitleCount = (_match$length = (_match = (title !== null && title !== void 0 ? title : '').match(/<br>/g)) === null || _match === void 0 ? void 0 : _match.length) !== null && _match$length !== void 0 ? _match$length : 0;\n var margin = ChartUtils.DEFAULT_MARGIN.t + subtitleCount * ChartUtils.SUBTITLE_LINE_HEIGHT;\n if (this.layout.margin) {\n this.layout.margin.t = margin;\n } else {\n this.layout.margin = {\n t: margin\n };\n }\n if (typeof this.layout.title === 'string') {\n this.layout.title = title;\n } else {\n this.layout.title = _objectSpread({}, this.layout.title);\n this.layout.title.text = title;\n this.layout.title.pad = _objectSpread({}, this.layout.title.pad);\n this.layout.title.pad.t = ChartUtils.DEFAULT_TITLE_PADDING.t + subtitleCount * ChartUtils.SUBTITLE_LINE_HEIGHT * 0.5;\n }\n }\n getPlotWidth() {\n var _this$layout$margin$l, _this$layout$margin, _this$layout$margin$r, _this$layout$margin2;\n if (!this.rect || !this.rect.width) {\n return 0;\n }\n return Math.max(this.rect.width - ((_this$layout$margin$l = (_this$layout$margin = this.layout.margin) === null || _this$layout$margin === void 0 ? void 0 : _this$layout$margin.l) !== null && _this$layout$margin$l !== void 0 ? _this$layout$margin$l : 0) - ((_this$layout$margin$r = (_this$layout$margin2 = this.layout.margin) === null || _this$layout$margin2 === void 0 ? void 0 : _this$layout$margin2.r) !== null && _this$layout$margin$r !== void 0 ? _this$layout$margin$r : 0), 0);\n }\n getPlotHeight() {\n var _this$layout$margin$t, _this$layout$margin3, _this$layout$margin$b, _this$layout$margin4;\n if (!this.rect || !this.rect.height) {\n return 0;\n }\n return Math.max(this.rect.height - ((_this$layout$margin$t = (_this$layout$margin3 = this.layout.margin) === null || _this$layout$margin3 === void 0 ? void 0 : _this$layout$margin3.t) !== null && _this$layout$margin$t !== void 0 ? _this$layout$margin$t : 0) - ((_this$layout$margin$b = (_this$layout$margin4 = this.layout.margin) === null || _this$layout$margin4 === void 0 ? void 0 : _this$layout$margin4.b) !== null && _this$layout$margin$b !== void 0 ? _this$layout$margin$b : 0), 0);\n }\n updateAxisPositions() {\n var plotWidth = this.getPlotWidth();\n var plotHeight = this.getPlotHeight();\n this.chartUtils.updateFigureAxes(this.layout, this.figure, this.theme, chart => this.getAxisRangeParser(chart, this.formatter), plotWidth, plotHeight);\n }\n\n /**\n * Updates the format patterns used\n */\n updateLayoutFormats() {\n if (!this.formatter) {\n return;\n }\n var axisFormats = this.chartUtils.getAxisFormats(this.figure, this.formatter);\n axisFormats.forEach((axisFormat, axisLayoutProperty) => {\n log.debug(\"Assigning \".concat(axisLayoutProperty), this.layout[axisLayoutProperty], axisFormat);\n var props = this.layout[axisLayoutProperty];\n if (props != null) {\n Object.assign(props, axisFormat);\n } else {\n log.debug(\"Ignoring null layout.\".concat(axisLayoutProperty));\n }\n });\n }\n\n /**\n * Set a specific array for the array of series properties specified.\n * @param series The series to set the data array for.\n * @param sourceType The source type within that series to set the data for.\n * @param dataArray The array to use for the data for this series source.\n */\n setDataArrayForSeries(series, sourceType, dataArray) {\n var {\n name,\n plotStyle\n } = series;\n var seriesData = this.seriesDataMap.get(name);\n var property = this.chartUtils.getPlotlyProperty(plotStyle, sourceType);\n if (seriesData) {\n set(seriesData, property, dataArray);\n }\n }\n\n /**\n * After setting all the data in the series data, we may need to adjust some other properties\n * Eg. Calculating the width from the xLow/xHigh values; Plot.ly uses `width` instead of a low/high\n * value for x.\n * @param series The series to clean the data for\n */\n cleanSeries(series) {\n var {\n dh\n } = this;\n var {\n name,\n plotStyle\n } = series;\n var seriesData = this.seriesDataMap.get(name);\n if (seriesData == null) {\n return;\n }\n if (plotStyle === dh.plot.SeriesPlotStyle.HISTOGRAM) {\n var {\n xLow,\n xHigh\n } = seriesData;\n if (xLow && xHigh && xLow.length === xHigh.length) {\n var width = [];\n for (var i = 0; i < xLow.length; i += 1) {\n width.push(xHigh[i] - xLow[i]);\n }\n seriesData.width = width;\n }\n } else if (plotStyle === dh.plot.SeriesPlotStyle.LINE || plotStyle === dh.plot.SeriesPlotStyle.ERROR_BAR || plotStyle === dh.plot.SeriesPlotStyle.BAR) {\n var {\n x,\n xLow: _xLow,\n xHigh: _xHigh,\n y,\n yLow,\n yHigh\n } = seriesData;\n if (_xLow && _xHigh && _xLow !== x) {\n seriesData.error_x = ChartUtils.getPlotlyErrorBars(x, _xLow, _xHigh, this.theme);\n }\n if (yLow && yHigh && yLow !== y) {\n seriesData.error_y = ChartUtils.getPlotlyErrorBars(y, yLow, yHigh, this.theme);\n }\n } else if (plotStyle === dh.plot.SeriesPlotStyle.TREEMAP) {\n var {\n ids,\n labels\n } = seriesData;\n if (ids !== undefined && labels === undefined) {\n // If the user only provided IDs, we assign the IDs to the labels property as well automatically\n // Plotly uses the labels primarily, which from our API perspective seems kind of backwards\n seriesData.labels = ids;\n }\n }\n }\n getData() {\n return this.data;\n }\n getLayout() {\n return this.layout;\n }\n getFilterColumnMap() {\n return new Map(this.filterColumnMap);\n }\n isFilterRequired() {\n return this.oneClicks.find(oneClick => oneClick.requireAllFiltersToDisplay) != null;\n }\n\n /**\n * Sets the filter on the model. Will only set the values that have changed.\n * @param filterMap Map of filter column names to values\n */\n setFilter(filterMap) {\n var _this3 = this;\n if (this.oneClicks.length === 0) {\n log.warn('Trying to set a filter, but no one click!');\n return;\n }\n log.debug('setFilter', filterMap);\n var _loop3 = function _loop3() {\n var oneClick = _this3.oneClicks[i];\n var {\n columns\n } = oneClick;\n // Need to get all the keys in case a filter was removed\n var keys = new Set([...filterMap.keys(), ..._this3.lastFilter.keys()]);\n keys.forEach(key => {\n var value = filterMap.get(key);\n if (_this3.lastFilter.get(key) !== value && columns.find(column => column.name === key) != null) {\n oneClick.setValueForColumn(key, value);\n }\n });\n };\n for (var i = 0; i < this.oneClicks.length; i += 1) {\n _loop3();\n }\n this.lastFilter = new Map(filterMap);\n }\n setFigure(figure) {\n this.close();\n this.figure = figure;\n this.setTitle(this.getDefaultTitle());\n this.initAllSeries();\n this.updateAxisPositions();\n this.startListeningFigure();\n if (this.listeners.length > 0) {\n this.subscribeFigure();\n }\n }\n updateSettings(settings) {\n this.settings = settings;\n }\n}\n_defineProperty(FigureChartModel, \"ADD_SERIES_DEBOUNCE\", 50);\nexport default FigureChartModel;\n//# sourceMappingURL=FigureChartModel.js.map","function asyncGeneratorStep(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 ChartUtils from \"./ChartUtils.js\";\nimport FigureChartModel from \"./FigureChartModel.js\";\nclass ChartModelFactory {\n /**\n * Creates a model from the settings provided.\n * Tries to create a Figure in the API with it.\n * @param dh JSAPI instance\n * @param settings The chart builder settings\n * @param settings.isLinked Whether the newly created chart should stay linked with the original table, update when filters are updated\n * @param settings.series The column names to use for creating the series of this chart\n * @param settings.type Chart builder type, from ChartBuilder.types\n * @param settings.xAxis The column name to use for the x-axis\n * @param [settings.hiddenSeries] Array of hidden series names\n * @param table The table to build the model for\n * @param theme The theme for the figure\n * @returns The ChartModel Promise representing the figure\n * CRA sets tsconfig to type check JS based on jsdoc comments. It isn't able to figure out FigureChartModel extends ChartModel\n * This causes TS issues in 1 or 2 spots. Once this is TS it can be returned to just FigureChartModel\n */\n static makeModelFromSettings(dh, settings, table, theme) {\n return _asyncToGenerator(function* () {\n var figure = yield ChartModelFactory.makeFigureFromSettings(dh, settings, table);\n return new FigureChartModel(dh, figure, theme, settings);\n })();\n }\n\n /**\n * Creates a model from the settings provided.\n * Tries to create a Figure in the API with it.\n * @param dh DH JSAPI instance\n * @param settings The chart builder settings\n * @param settings.isLinked Whether the newly created chart should stay linked with the original table, update when filters are updated\n * @param settings.series The column names to use for creating the series of this chart\n * @param settings.type Chart builder type, from ChartBuilder.types\n * @param settings.xAxis The column name to use for the x-axis\n * @param [settings.hiddenSeries] Array of hidden series names\n * @param table The table to build the model for\n * @returns The Figure created with the settings provided\n */\n static makeFigureFromSettings(dh, settings, table) {\n return _asyncToGenerator(function* () {\n // Copy the table first and then re-apply the filters from the original table\n // When we add table linking we'll want to listen to the original table and update\n // the copied table with any changes that occur.\n // The table gets owned by the Figure that gets created, which closes the table\n var tableCopy = yield table.copy();\n tableCopy.applyCustomColumns(table.customColumns);\n tableCopy.applyFilter(table.filter);\n tableCopy.applySort(table.sort);\n return dh.plot.Figure.create(new ChartUtils(dh).makeFigureSettings(settings, tableCopy));\n })();\n }\n\n /**\n * Creates a model from the settings provided.\n * Tries to create a Figure in the API with it.\n * @param dh DH JSAPI instance\n * @param settings The chart builder settings\n * @param settings.isLinked Whether the newly created chart should stay linked with the original table, update when filters are updated\n * @param settings.series The column names to use for creating the series of this chart\n * @param settings.type Chart builder type, from ChartBuilder.types\n * @param settings.xAxis The column name to use for the x-axis\n * @param [settings.hiddenSeries] Array of hidden series names\n * @param figure The figure to build the model for\n * @param theme The theme for the figure\n * @returns The FigureChartModel representing the figure\n * CRA sets tsconfig to type check JS based on jsdoc comments. It isn't able to figure out FigureChartModel extends ChartModel\n * This causes TS issues in 1 or 2 spots. Once this is TS it can be returned to just FigureChartModel\n */\n static makeModel(dh, settings, figure, theme) {\n return _asyncToGenerator(function* () {\n return new FigureChartModel(dh, figure, theme, settings);\n })();\n }\n}\nexport default ChartModelFactory;\n//# sourceMappingURL=ChartModelFactory.js.map","import { getExpressionRanges, resolveCssVariablesInRecord } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { ColorUtils } from '@deephaven/utils';\nimport chartThemeRaw from \"./ChartTheme.module.css\";\nvar log = Log.module('ChartTheme');\nexport function defaultChartTheme() {\n var _chartTheme$colorway;\n var chartTheme = resolveCssVariablesInRecord(chartThemeRaw);\n\n // The color normalization in `resolveCssVariablesInRecord` won't work for\n // colorway since it is an array of colors. We need to explicitly normalize\n // each color expression\n chartTheme.colorway = getExpressionRanges((_chartTheme$colorway = chartTheme.colorway) !== null && _chartTheme$colorway !== void 0 ? _chartTheme$colorway : '').map(_ref => {\n var [start, end] = _ref;\n return ColorUtils.normalizeCssColor(chartTheme.colorway.substring(start, end + 1));\n }).join(' ');\n log.debug2('Chart theme:', chartThemeRaw);\n log.debug2('Chart theme derived:', chartTheme);\n return Object.freeze({\n paper_bgcolor: chartTheme['paper-bgcolor'],\n plot_bgcolor: chartTheme['plot-bgcolor'],\n title_color: chartTheme['title-color'],\n legend_color: chartTheme['legend-color'],\n colorway: chartTheme.colorway,\n gridcolor: chartTheme.gridcolor,\n linecolor: chartTheme.linecolor,\n zerolinecolor: chartTheme.zerolinecolor,\n error_band_line_color: chartTheme['error-band-line-color'],\n ohlc_increasing: chartTheme['ohlc-increasing'],\n ohlc_decreasing: chartTheme['ohlc-decreasing'],\n // Geo\n coastline_color: chartTheme['coastline-color'],\n land_color: chartTheme['land-color'],\n ocean_color: chartTheme['ocean-color'],\n lake_color: chartTheme['lake-color'],\n river_color: chartTheme['river-color']\n });\n}\nexport default defaultChartTheme;\n//# sourceMappingURL=ChartTheme.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 @typescript-eslint/explicit-module-boundary-types */\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\nimport ChartModel from \"./ChartModel.js\";\nimport { defaultChartTheme } from \"./ChartTheme.js\";\nimport ChartUtils from \"./ChartUtils.js\";\n/** Displays a basic random chart */\nclass MockChartModel extends ChartModel {\n static get theme() {\n /* eslint-disable no-underscore-dangle */\n if (MockChartModel._theme == null) {\n MockChartModel._theme = defaultChartTheme();\n }\n return MockChartModel._theme;\n /* eslint-enable no-underscore-dangle */\n }\n\n static makeRandomSeries(offset) {\n var scale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n var steps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 100;\n var dates = [];\n var values = [];\n var smooth = [];\n var linear = [];\n\n // Setting to a fixed seed date so that e2e tests can be deterministic.\n var startDate = new Date('2018-06-01');\n for (var i = 0; i < steps; i += 1) {\n var date = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate() + i - steps);\n dates.push(\"\".concat(date.getFullYear(), \"-\").concat(date.getMonth() + 1, \"-\").concat(date.getDate()));\n var v = (Math.sin(i / steps * offset) * steps / 3 + Math.cos(i * 0.2) * steps / 6 + Math.sin(i * 0.5) * steps / 10 + MockChartModel.random() * steps / 5 + i * MockChartModel.smoothing) * scale;\n v = Math.round(v * 100) / 100; // 2 decimals only\n // using steps acts as amplititude scaling based on value\n // large sine wave for course shape + small sine waves for bumpiness +\n // general randomness noise + index to be constantly up and to the right + smoothing factor\n values.push(v);\n linear.push(40 + i * MockChartModel.smoothing);\n smooth.push(Math.sin(i / steps * offset) * steps / 3 + MockChartModel.random() * steps / 10 + i * MockChartModel.smoothing); // push a smoother version of the same thing\n }\n\n return {\n x: dates,\n y: values,\n s: smooth,\n l: linear\n };\n }\n static makeScatter(series) {\n return {\n name: 'SCTR',\n x: series.x,\n y: series.y,\n type: 'scatter',\n mode: 'markers',\n hoverinfo: 'skip',\n marker: {\n size: 5\n }\n };\n }\n static makeArea(series) {\n return {\n name: 'AREA',\n x: series.x,\n y: series.s,\n type: 'scatter',\n mode: 'line',\n fill: 'tozeroy',\n hoverinfo: 'all',\n line: {\n width: 3\n // area patten gets applied as hack in post render plot.ly callback + css\n }\n };\n }\n\n static makeTrendline(series) {\n return {\n // we probably want to toss the line formula in legend I guess? either that or render it as text manually on plot\n name: 'Trendline <br>R<sup>2</sup> = 0.91',\n x: series.x,\n y: series.l,\n type: 'scatter',\n mode: 'line',\n hoverinfo: 'skip',\n line: {\n width: 3,\n dash: 'dot' // trendlines should follow some sort of color convention + dots/dashed. Remember there can multiple\n // chroma(c.$green).brighten(1.2).hex()\n }\n };\n }\n\n static makeErrorBand(series) {\n // generate continouous error bands values and text\n var erroryforward = [];\n var errorybackward = [];\n for (var i = 0; i < series.y.length; i += 1) {\n var value = series.y[i];\n erroryforward[i] = Math.round((value + 18) * 100) / 100;\n errorybackward[i] = Math.round((value - 18) * 100) / 100;\n }\n\n // makes a closed shape of points winding clockwise for y values\n var errory = erroryforward.concat(errorybackward.reverse());\n return {\n name: 'error',\n x: series.x.concat(series.x.slice().reverse()),\n // winding for x values, that slice just clones so reverse doesn't apply inplace\n y: errory,\n type: 'scatter',\n mode: 'line',\n hoverinfo: 'skip',\n fill: 'toself',\n // there's some ordering bug with scattergl where if the areas traces are ordered after the lines they don't render\n line: {\n width: 0,\n color: MockChartModel.theme.error_band_line_color,\n shape: 'spline'\n }\n };\n }\n static makeLine(series) {\n return {\n name: 'LINE',\n x: series.x,\n y: series.y,\n type: 'scatter',\n mode: 'line',\n hoverinfo: 'x+y+text+name',\n line: {\n width: 3\n }\n };\n }\n static makeRandomData() {\n var series1 = MockChartModel.makeRandomSeries(6);\n var areaPattern = MockChartModel.makeArea(series1);\n var trendLine = MockChartModel.makeTrendline(series1);\n var series2 = MockChartModel.makeRandomSeries(2);\n var line = MockChartModel.makeLine(series2);\n var errorBand = MockChartModel.makeErrorBand(series2);\n return [areaPattern, trendLine, line, errorBand];\n }\n static makeDefaultLayout(dh) {\n var layout = new ChartUtils(dh).makeDefaultLayout(MockChartModel.theme);\n layout.title = 'Chart';\n if (layout.xaxis) {\n layout.xaxis.title = 'Datestamp';\n }\n if (layout.yaxis) {\n layout.yaxis.title = 'Price';\n }\n return layout;\n }\n constructor(dh) {\n var {\n data = MockChartModel.makeRandomData(),\n layout = MockChartModel.makeDefaultLayout(dh),\n filterFields = []\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super(dh);\n _defineProperty(this, \"data\", void 0);\n _defineProperty(this, \"filterFields\", void 0);\n _defineProperty(this, \"layout\", void 0);\n this.data = data;\n this.layout = layout;\n this.filterFields = filterFields;\n }\n getData() {\n return this.data;\n }\n getLayout() {\n return this.layout;\n }\n getFilterColumnMap() {\n var map = new Map();\n for (var i = 0; i < this.filterFields.length; i += 1) {\n var name = this.filterFields[i];\n var type = 'java.lang.String';\n map.set(name, {\n name,\n type\n });\n }\n return map;\n }\n isFilterRequired() {\n return this.filterFields.length > 0;\n }\n setFilter() {\n this.fireUpdate(this.data);\n }\n}\n_defineProperty(MockChartModel, \"random\", Math.random.bind(Math));\n_defineProperty(MockChartModel, \"smoothing\", 1.5);\n_defineProperty(MockChartModel, \"_theme\", void 0);\nexport default MockChartModel;\n//# sourceMappingURL=MockChartModel.js.map","// Import the react customizable bundle for building, only pull in the modules we need\n// This reduces the build size. Plotly has a lot of modules we don't need/use.\n// https://github.com/plotly/react-plotly.js#customizing-the-plotlyjs-bundle\nimport createPlotlyComponent from \"./createPlotlyComponent.js\";\nimport Plotly from \"./Plotly.js\";\nexport default createPlotlyComponent(Plotly);\n//# sourceMappingURL=Plot.js.map","import { createContext, useMemo } from 'react';\nimport { useTheme } from '@deephaven/components';\nimport defaultChartTheme from \"./ChartTheme.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport var ChartThemeContext = /*#__PURE__*/createContext(null);\n/*\n * Provides a chart theme based on the active themes from the ThemeProvider.\n */\nexport function ChartThemeProvider(_ref) {\n var {\n children\n } = _ref;\n var {\n activeThemes\n } = useTheme();\n var chartTheme = useMemo(defaultChartTheme, [activeThemes]);\n return /*#__PURE__*/_jsx(ChartThemeContext.Provider, {\n value: chartTheme,\n children: children\n });\n}\n//# sourceMappingURL=ChartThemeProvider.js.map","export default function isFigureChartModel(model) {\n return model.setFigure !== undefined;\n}\n//# sourceMappingURL=isFigureChartModel.js.map","import { useContextOrThrow } from '@deephaven/react-hooks';\nimport { ChartThemeContext } from \"./ChartThemeProvider.js\";\n/**\n * Hook to get the current `ChartThemeContextValue`.\n */\nexport function useChartTheme() {\n return useContextOrThrow(ChartThemeContext, 'No ChartThemeContext value found.');\n}\nexport default useChartTheme;\n//# sourceMappingURL=useChartTheme.js.map","export var defaultConfig = Object.freeze({\n openPopouts: [],\n settings: {\n hasHeaders: true,\n constrainDragToContainer: true,\n reorderEnabled: true,\n selectionEnabled: false,\n popoutWholeStack: false,\n blockedPopoutsThrowError: true,\n closePopoutsOnUnload: true,\n showPopoutIcon: true,\n showMaximiseIcon: true,\n showCloseIcon: true,\n responsiveMode: 'onload',\n // Can be onload, always, or none.\n tabOverlapAllowance: 0,\n // maximum pixel overlap per tab\n // reorderOnTabMenuClick: true, // Deephaven disabled\n tabControlOffset: 10\n },\n dimensions: {\n borderWidth: 5,\n borderGrabWidth: 10,\n minItemHeight: 10,\n minItemWidth: 10,\n headerHeight: 20,\n dragProxyWidth: 300,\n dragProxyHeight: 200\n },\n labels: {\n close: 'Close',\n maximise: 'Maximize',\n minimise: 'Minimize',\n popout: 'Open in new window',\n popin: 'Pop in',\n tabDropdown: 'Additional tabs',\n tabNextLabel: 'Next',\n tabPreviousLabel: 'Previous'\n },\n content: []\n});\n//# sourceMappingURL=Config.js.map","export function isGLComponentConfig(item) {\n return item.componentName !== undefined;\n}\nexport function isReactComponentConfig(item) {\n return item.component !== undefined;\n}\nexport var itemDefaultConfig = Object.freeze({\n type: 'default',\n isClosable: true,\n isFocusOnShow: true,\n reorderEnabled: true,\n title: ''\n});\n//# sourceMappingURL=ItemConfig.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/**\n * A generic and very fast EventEmitter\n * implementation. On top of emitting the\n * actual event it emits an\n *\n * EventEmitter.ALL_EVENT\n *\n * event for every event triggered. This allows\n * to hook into it and proxy events forwards\n *\n * @constructor\n */\nclass EventEmitter {\n /**\n * The name of the event that's triggered for every other event\n *\n * usage\n *\n * myEmitter.on( EventEmitter.ALL_EVENT, function( eventName, argsArray ){\n * \t//do stuff\n * });\n */\n\n constructor() {\n _defineProperty(this, \"_mSubscriptions\", void 0);\n _defineProperty(this, \"off\", this.unbind);\n _defineProperty(this, \"trigger\", this.emit);\n this._mSubscriptions = {};\n this._mSubscriptions[EventEmitter.ALL_EVENT] = [];\n }\n\n /**\n * Listen for events\n *\n * @param eventName The name of the event to listen to\n * @param callback The callback to execute when the event occurs\n * @param context The value of the this pointer within the callback function\n */\n on(eventName, callback, context) {\n if (typeof callback !== 'function') {\n throw new Error('Tried to listen to event ' + eventName + ' with non-function callback ' + callback);\n }\n if (!this._mSubscriptions[eventName]) {\n this._mSubscriptions[eventName] = [];\n }\n this._mSubscriptions[eventName].push({\n fn: callback,\n ctx: context\n });\n }\n\n /**\n * Emit an event and notify listeners\n *\n * @param eventName The name of the event\n * @param args additional arguments that will be passed to the listener\n */\n emit(eventName) {\n var subs = this._mSubscriptions[eventName];\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n if (subs) {\n for (var i = 0; i < subs.length; i++) {\n var ctx = subs[i].ctx || {};\n try {\n subs[i].fn.apply(ctx, args);\n } catch (e) {\n console.error('Error while emitting event:', e);\n }\n }\n }\n args.unshift(eventName);\n var allEventSubs = this._mSubscriptions[EventEmitter.ALL_EVENT];\n for (var _i = 0; _i < allEventSubs.length; _i++) {\n var _ctx = allEventSubs[_i].ctx || {};\n try {\n allEventSubs[_i].fn.apply(_ctx, args);\n } catch (e) {\n console.error('Error while emitting event to allEventSubs:', e);\n }\n }\n }\n\n /**\n * Removes a listener for an event, or all listeners if no callback and context is provided.\n *\n * @param eventName The name of the event\n * @param callback The previously registered callback method (optional)\n * @param context The previously registered context (optional)\n */\n unbind(eventName, callback, context) {\n if (!this._mSubscriptions[eventName]) {\n throw new Error('No subscriptions to unsubscribe for event ' + eventName);\n }\n var bUnbound = false;\n for (var i = 0; i < this._mSubscriptions[eventName].length; i++) {\n if ((!callback || this._mSubscriptions[eventName][i].fn === callback) && (!context || context === this._mSubscriptions[eventName][i].ctx)) {\n this._mSubscriptions[eventName].splice(i, 1);\n bUnbound = true;\n }\n }\n if (bUnbound === false) {\n throw new Error('Nothing to unbind for ' + eventName);\n }\n }\n\n /**\n * Alias for unbind\n */\n\n /**\n * Alias for emit\n */\n}\n_defineProperty(EventEmitter, \"ALL_EVENT\", '__all');\nexport default EventEmitter;\n//# sourceMappingURL=EventEmitter.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 $ from 'jquery';\nimport { isGLComponentConfig } from \"../config/index.js\";\nimport EventEmitter from \"../utils/EventEmitter.js\";\nexport default class ItemContainer extends EventEmitter {\n // This type is to make TS happy and allow ReactComponentConfig passed to container generic\n\n constructor(config, parent, layoutManager) {\n super();\n _defineProperty(this, \"width\", void 0);\n _defineProperty(this, \"height\", void 0);\n _defineProperty(this, \"title\", void 0);\n _defineProperty(this, \"parent\", void 0);\n _defineProperty(this, \"layoutManager\", void 0);\n _defineProperty(this, \"tab\", void 0);\n _defineProperty(this, \"_config\", void 0);\n _defineProperty(this, \"isHidden\", false);\n _defineProperty(this, \"beforeCloseHandler\", void 0);\n _defineProperty(this, \"_element\", $(['<div class=\"lm_item_container\">', '<div class=\"lm_content\" tabindex=\"-1\"></div>', '</div>'].join('')));\n _defineProperty(this, \"_contentElement\", void 0);\n this.title = isGLComponentConfig(config) ? config.componentName : '';\n this.parent = parent;\n this.layoutManager = layoutManager;\n this._config = config;\n this._contentElement = this._element.find('.lm_content');\n this.beforeCloseHandler = null;\n }\n\n /**\n * Get the inner DOM element the container's content\n * is intended to live in\n */\n getElement() {\n return this._contentElement;\n }\n\n /**\n * Hide the container. Notifies the containers content first\n * and then hides the DOM node. If the container is already hidden\n * this should have no effect\n */\n hide() {\n this.emit('hide');\n this.isHidden = true;\n this._element.hide();\n }\n\n /**\n * Shows a previously hidden container. Notifies the\n * containers content first and then shows the DOM element.\n * If the container is already visible this has no effect.\n */\n show() {\n this.emit('show');\n this.isHidden = false;\n this._element.show();\n // call shown only if the container has a valid size\n if (this.height != 0 || this.width != 0) {\n this.emit('shown');\n }\n }\n\n /**\n * Set the size from within the container. Traverses up\n * the item tree until it finds a row or column element\n * and resizes its items accordingly.\n *\n * If this container isn't a descendant of a row or column\n * it returns false\n * @todo Rework!!!\n * @param width The new width in pixel\n * @param height The new height in pixel\n *\n * @returns resizeSuccesful\n */\n setSize(width, height) {\n var _this$direction, _rowOrColumnChild$con, _rowOrColumnChild$con2;\n var rowOrColumn = this.parent;\n var rowOrColumnChild = null;\n while (rowOrColumn && !rowOrColumn.isColumn && !rowOrColumn.isRow) {\n var _rowOrColumn;\n rowOrColumnChild = rowOrColumn;\n rowOrColumn = rowOrColumn.parent;\n\n /**\n * No row or column has been found\n */\n if ((_rowOrColumn = rowOrColumn) !== null && _rowOrColumn !== void 0 && _rowOrColumn.isRoot) {\n return false;\n }\n }\n if (!rowOrColumn || !rowOrColumnChild) {\n return false;\n }\n var direction = rowOrColumn.isColumn ? 'height' : 'width';\n var newSize = direction === 'height' ? height : width;\n var totalPixel = ((_this$direction = this[direction]) !== null && _this$direction !== void 0 ? _this$direction : 0) * (1 / (((_rowOrColumnChild$con = rowOrColumnChild.config[direction]) !== null && _rowOrColumnChild$con !== void 0 ? _rowOrColumnChild$con : 0) / 100));\n var percentage = newSize / totalPixel * 100;\n var delta = (((_rowOrColumnChild$con2 = rowOrColumnChild.config[direction]) !== null && _rowOrColumnChild$con2 !== void 0 ? _rowOrColumnChild$con2 : 0) - percentage) / (rowOrColumn.contentItems.length - 1);\n for (var i = 0; i < rowOrColumn.contentItems.length; i++) {\n if (rowOrColumn.contentItems[i] === rowOrColumnChild) {\n rowOrColumn.contentItems[i].config[direction] = percentage;\n } else {\n var _rowOrColumn$contentI;\n rowOrColumn.contentItems[i].config[direction] = ((_rowOrColumn$contentI = rowOrColumn.contentItems[i].config[direction]) !== null && _rowOrColumn$contentI !== void 0 ? _rowOrColumn$contentI : 0) + delta;\n }\n }\n rowOrColumn.callDownwards('setSize');\n return true;\n }\n\n /**\n * Closes the container if it is closable. Can be called by\n * both the component within at as well as the contentItem containing\n * it. Emits a close event before the container itself is closed.\n * @param options Options to pass into the beforeClose handler\n */\n close(options) {\n var _this$beforeCloseHand, _this$beforeCloseHand2;\n // Not closable, don't do anything\n if (!this._config.isClosable) return;\n\n // If beforeCloseHandler returns true or if the handler doesn't exist, close\n if ((_this$beforeCloseHand = (_this$beforeCloseHand2 = this.beforeCloseHandler) === null || _this$beforeCloseHand2 === void 0 ? void 0 : _this$beforeCloseHand2.call(this, options)) !== null && _this$beforeCloseHand !== void 0 ? _this$beforeCloseHand : true) {\n this.emit('close');\n this.parent.close();\n }\n }\n\n /**\n * Sets the beforeCloseHandler to callback\n * @param callback Callback function to call before closing\n */\n beforeClose(callback) {\n this.beforeCloseHandler = callback;\n }\n\n /**\n * Returns the current state object\n *\n * @returns state\n */\n getState() {\n return this._config.componentState;\n }\n\n /**\n * Merges the provided state into the current one\n *\n * @param state\n */\n extendState(state) {\n this.setState($.extend(true, this.getState(), state));\n }\n\n /**\n * Notifies the layout manager of a stateupdate\n *\n * @param state\n */\n setState(state) {\n this._config.componentState = state;\n this.parent.emitBubblingEvent('stateChanged');\n }\n\n /**\n * Set's the components title\n *\n * @param title\n */\n setTitle(title) {\n this.parent.setTitle(title);\n }\n\n /**\n * Set's the containers size. Called by the container's component.\n * To set the size programmatically from within the container please\n * use the public setSize method\n *\n * @param width in px\n * @param height in px\n */\n _$setSize() {\n var width = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var height = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n if (width !== this.width || height !== this.height) {\n this.width = width;\n this.height = height;\n var cl = this._contentElement[0];\n var hdelta = cl.offsetWidth - cl.clientWidth;\n var vdelta = cl.offsetHeight - cl.clientHeight;\n this._contentElement.width(this.width - hdelta).height(this.height - vdelta);\n this.emit('resize');\n }\n }\n}\n//# sourceMappingURL=ItemContainer.js.map","import $ from 'jquery';\nexport function getHashValue(key) {\n var matches = location.hash.match(new RegExp(key + '=([^&]*)'));\n return matches ? matches[1] : null;\n}\nexport function getQueryStringParam(param) {\n if (window.location.hash) {\n return getHashValue(param);\n } else if (!window.location.search) {\n return null;\n }\n var keyValuePairs = window.location.search.substr(1).split('&'),\n params = {},\n pair,\n i;\n for (i = 0; i < keyValuePairs.length; i++) {\n pair = keyValuePairs[i].split('=');\n params[pair[0]] = pair[1];\n }\n return params[param] || null;\n}\nexport function animFrame(fn) {\n return window.requestAnimationFrame(fn);\n}\nexport function removeFromArray(item, array) {\n var index = array.indexOf(item);\n if (index === -1) {\n throw new Error(\"Can't remove item from array. Item is not in the array\");\n }\n array.splice(index, 1);\n}\nexport function getUniqueId() {\n return (Math.random() * 1000000000000000).toString(36).replace('.', '');\n}\n\n/**\n * A basic XSS filter. It is ultimately up to the\n * implementing developer to make sure their particular\n * applications and usecases are save from cross site scripting attacks\n *\n * @param input\n * @param keepTags\n *\n * @returns filtered input\n */\nexport function filterXss(input, keepTags) {\n var output = input.replace(/javascript/gi, 'javascript').replace(/expression/gi, 'expression').replace(/onload/gi, 'onload').replace(/script/gi, 'script').replace(/onerror/gi, 'onerror');\n if (keepTags === true) {\n return output;\n } else {\n return output.replace(/>/g, '>').replace(/</g, '<');\n }\n}\n\n/**\n * Removes html tags from a string\n *\n * @param input\n *\n * @returns input without tags\n */\nexport function stripTags(input) {\n return $.trim(input.replace(/(<([^>]+)>)/gi, ''));\n}\n//# sourceMappingURL=utils.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 $ from 'jquery';\nimport EventEmitter from \"./EventEmitter.js\";\nclass DragListener extends EventEmitter {\n /**\n * The delay after which to start the drag in milliseconds\n */\n\n /**\n * The distance the mouse needs to be moved to qualify as a drag\n */\n //TODO - works better with delay only\n\n constructor(eElement) {\n var _this$_eElement;\n var destroyAfterMouseUp = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n super();\n _defineProperty(this, \"_eElement\", void 0);\n _defineProperty(this, \"_oDocument\", void 0);\n _defineProperty(this, \"_eBody\", void 0);\n _defineProperty(this, \"_destroyAfterMouseUp\", void 0);\n _defineProperty(this, \"_nDelay\", 400);\n _defineProperty(this, \"_timeout\", void 0);\n _defineProperty(this, \"timeout\", void 0);\n _defineProperty(this, \"_nDistance\", 10);\n _defineProperty(this, \"_nX\", 0);\n _defineProperty(this, \"_nY\", 0);\n _defineProperty(this, \"_nOriginalX\", 0);\n _defineProperty(this, \"_nOriginalY\", 0);\n _defineProperty(this, \"_bDragging\", false);\n this._eElement = eElement;\n this._oDocument = $(document);\n this._eBody = $(document.body);\n // used by drag sources, to destroy listener at the right time\n this._destroyAfterMouseUp = destroyAfterMouseUp;\n this.onMouseMove = this.onMouseMove.bind(this);\n this.onMouseUp = this.onMouseUp.bind(this);\n this.onMouseDown = this.onMouseDown.bind(this);\n this._startDrag = this._startDrag.bind(this);\n\n // https://github.com/microsoft/TypeScript/issues/48546\n (_this$_eElement = this._eElement) === null || _this$_eElement === void 0 ? void 0 : _this$_eElement.on('mousedown', this.onMouseDown);\n }\n destroy() {\n var _this$_eElement2, _this$_oDocument;\n (_this$_eElement2 = this._eElement) === null || _this$_eElement2 === void 0 ? void 0 : _this$_eElement2.unbind('mousedown', this.onMouseDown);\n (_this$_oDocument = this._oDocument) === null || _this$_oDocument === void 0 ? void 0 : _this$_oDocument.unbind('mouseup', this.onMouseUp);\n this._eElement = undefined;\n this._oDocument = undefined;\n this._eBody = undefined;\n clearTimeout(this._timeout);\n this._timeout = undefined;\n }\n onMouseDown(oEvent) {\n oEvent.preventDefault();\n if (oEvent.button === 0) {\n var _coordinates$x, _coordinates$y, _this$_oDocument2, _this$_oDocument3;\n var coordinates = this._getCoordinates(oEvent);\n this._nOriginalX = (_coordinates$x = coordinates.x) !== null && _coordinates$x !== void 0 ? _coordinates$x : 0;\n this._nOriginalY = (_coordinates$y = coordinates.y) !== null && _coordinates$y !== void 0 ? _coordinates$y : 0;\n (_this$_oDocument2 = this._oDocument) === null || _this$_oDocument2 === void 0 ? void 0 : _this$_oDocument2.on('mousemove', this.onMouseMove);\n (_this$_oDocument3 = this._oDocument) === null || _this$_oDocument3 === void 0 ? void 0 : _this$_oDocument3.on('mouseup', this.onMouseUp);\n this._timeout = window.setTimeout(this._startDrag, this._nDelay);\n }\n }\n onMouseMove(oEvent) {\n if (this._timeout != null) {\n var _coordinates$x2, _coordinates$y2;\n oEvent.preventDefault();\n var coordinates = this._getCoordinates(oEvent);\n this._nX = ((_coordinates$x2 = coordinates.x) !== null && _coordinates$x2 !== void 0 ? _coordinates$x2 : 0) - this._nOriginalX;\n this._nY = ((_coordinates$y2 = coordinates.y) !== null && _coordinates$y2 !== void 0 ? _coordinates$y2 : 0) - this._nOriginalY;\n if (this._bDragging === false) {\n if (Math.abs(this._nX) > this._nDistance || Math.abs(this._nY) > this._nDistance) {\n this._startDrag();\n }\n }\n if (this._bDragging) {\n this.emit('drag', this._nX, this._nY, oEvent);\n }\n }\n }\n onMouseUp(oEvent) {\n if (this._timeout != null) {\n var _this$_oDocument4, _this$_oDocument5, _this$_oDocument6, _this$_oDocument6$fin, _this$_eBody;\n clearTimeout(this._timeout);\n (_this$_oDocument4 = this._oDocument) === null || _this$_oDocument4 === void 0 ? void 0 : _this$_oDocument4.unbind('mousemove', this.onMouseMove);\n (_this$_oDocument5 = this._oDocument) === null || _this$_oDocument5 === void 0 ? void 0 : _this$_oDocument5.unbind('mouseup', this.onMouseUp);\n (_this$_oDocument6 = this._oDocument) === null || _this$_oDocument6 === void 0 ? void 0 : (_this$_oDocument6$fin = _this$_oDocument6.find('iframe')) === null || _this$_oDocument6$fin === void 0 ? void 0 : _this$_oDocument6$fin.css('pointer-events', '');\n if (this._bDragging === true) {\n this._bDragging = false;\n this.emit('dragStop', oEvent, this._nOriginalX + this._nX);\n }\n\n // after dragStop, so that .lm_dragging is removed after size is processed\n // and any overflow: hidden remains applied during the calculations\n (_this$_eBody = this._eBody) === null || _this$_eBody === void 0 ? void 0 : _this$_eBody.removeClass('lm_dragging');\n if (!(this._eElement instanceof Window)) {\n var _this$_eElement3;\n (_this$_eElement3 = this._eElement) === null || _this$_eElement3 === void 0 ? void 0 : _this$_eElement3.removeClass('lm_dragging');\n }\n if (this._destroyAfterMouseUp) this.destroy();\n }\n }\n _startDrag() {\n var _this$_eBody2, _this$_eElement4, _this$_oDocument7, _this$_oDocument7$fin;\n window.clearTimeout(this._timeout);\n this._bDragging = true;\n (_this$_eBody2 = this._eBody) === null || _this$_eBody2 === void 0 ? void 0 : _this$_eBody2.addClass('lm_dragging');\n (_this$_eElement4 = this._eElement) === null || _this$_eElement4 === void 0 ? void 0 : _this$_eElement4.addClass('lm_dragging');\n (_this$_oDocument7 = this._oDocument) === null || _this$_oDocument7 === void 0 ? void 0 : (_this$_oDocument7$fin = _this$_oDocument7.find('iframe')) === null || _this$_oDocument7$fin === void 0 ? void 0 : _this$_oDocument7$fin.css('pointer-events', 'none');\n this.emit('dragStart', this._nOriginalX, this._nOriginalY);\n }\n _getCoordinates(event) {\n var _event$pageX, _event$pageY;\n return {\n x: (_event$pageX = event.pageX) !== null && _event$pageX !== void 0 ? _event$pageX : 0,\n y: (_event$pageY = event.pageY) !== null && _event$pageY !== void 0 ? _event$pageY : 0\n };\n }\n}\nexport default DragListener;\n//# sourceMappingURL=DragListener.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 from 'react';\nimport ReactDOM from 'react-dom';\nimport $ from 'jquery';\n/**\n * A specialised GoldenLayout component that binds GoldenLayout container\n * lifecycle events to react components\n *\n * @param container\n * @param state state is not required for react components\n */\nexport default class ReactComponentHandler {\n constructor(container, state) {\n _defineProperty(this, \"_container\", void 0);\n _defineProperty(this, \"_reactComponent\", null);\n _defineProperty(this, \"_portalComponent\", null);\n _defineProperty(this, \"_originalComponentWillUpdate\", null);\n _defineProperty(this, \"_initialState\", void 0);\n _defineProperty(this, \"_reactClass\", void 0);\n this._reactComponent = null;\n this._portalComponent = null;\n this._originalComponentWillUpdate = null;\n this._container = container;\n this._initialState = state;\n this._reactClass = this._getReactClass();\n this._container.on('open', this._render, this);\n this._container.on('destroy', this._destroy, this);\n }\n\n /**\n * Gets the unique key to use for the react component\n * @returns Unique key for the component\n */\n _key() {\n var id = this._container._config.id;\n if (!id) {\n throw new Error('Cannot mount panel without id');\n }\n\n // If addId is called multiple times, an element can have multiple IDs in golden-layout\n // We don't use it, but changing the type requires many changes and a separate PR\n if (Array.isArray(id)) {\n return id.join(',');\n }\n return id;\n }\n\n /**\n * Creates the react class and component and hydrates it with\n * the initial state - if one is present\n *\n * By default, react's getInitialState will be used\n *\n * Creates a portal so the non-react golden-layout code still works,\n * but also allows us to mount the React components in the app's tree\n * instead of separate sibling root trees\n */\n _render() {\n var key = this._key();\n this._portalComponent = /*#__PURE__*/ReactDOM.createPortal(this._getReactComponent(), this._container.getElement()[0], key);\n this._container.layoutManager.addReactChild(key, this._portalComponent);\n }\n\n /**\n * Fired by react when the component is created.\n * <p>\n * Note: This callback is used instead of the return from `ReactDOM.render` because\n *\t of https://github.com/facebook/react/issues/10309.\n * </p>\n *\n * @param component The component instance created by the `ReactDOM.render` call in the `_render` method.\n */\n _gotReactComponent(component) {\n if (!component) {\n return;\n }\n this._reactComponent = component;\n this._originalComponentWillUpdate = this._reactComponent.componentWillUpdate || function () {};\n this._reactComponent.componentWillUpdate = this._onUpdate.bind(this);\n var state = this._container.getState();\n if (state) {\n this._reactComponent.setState(state);\n }\n }\n\n /**\n * Removes the component from the DOM and thus invokes React's unmount lifecycle\n */\n _destroy() {\n this._container.layoutManager.removeReactChild(this._key(), this._portalComponent);\n this._container.off('open', this._render, this);\n this._container.off('destroy', this._destroy, this);\n }\n\n /**\n * Hooks into React's state management and applies the componentstate\n * to GoldenLayout\n */\n _onUpdate(nextProps, nextState) {\n var _this$_originalCompon;\n this._container.setState(nextState);\n (_this$_originalCompon = this._originalComponentWillUpdate) === null || _this$_originalCompon === void 0 ? void 0 : _this$_originalCompon.call(this._reactComponent, nextProps, nextState);\n }\n\n /**\n * Retrieves the react class from GoldenLayout's registry\n * @returns react class\n */\n _getReactClass() {\n var componentName = this._container._config.component;\n if (!componentName) {\n throw new Error('No react component name. type: react-component needs a field `component`');\n }\n var reactClass = this._container.layoutManager.getComponent(componentName) || this._container.layoutManager.getFallbackComponent();\n if (!reactClass) {\n throw new Error('React component \"' + componentName + '\" not found. ' + 'Please register all components with GoldenLayout using `registerComponent(name, component)`');\n }\n return reactClass;\n }\n\n /**\n * Copies and extends the properties array and returns the React element\n */\n _getReactComponent() {\n var defaultProps = {\n glEventHub: this._container.layoutManager.eventHub,\n glContainer: this._container,\n /**\n * This ref assignment makes use of callback refs which is a legacy ref style in React.\n * It uses the callback to inject GoldenLayout _onUpdate into the React componentWillUpdate lifecycle.\n * This allows GoldenLayout to track the internal state of class components.\n * We then emit this state change and somewhere furter up, serialize it.\n * Specifically we look for state.panelState changes.\n * We should not do this going forward as it's quite unclear where/why your component's state might be saved.\n * This ref cannot be removed unless we refactor all existing panels to not rely on the magic of panelState.\n * DashboardUtils#dehydrate is where the panelState gets read/saved.\n */\n ref: this._gotReactComponent.bind(this)\n };\n var props = $.extend(defaultProps, this._container._config.props);\n return /*#__PURE__*/React.createElement(this._reactClass, props);\n }\n}\n//# sourceMappingURL=ReactComponentHandler.js.map","/**\n * Minifies and unminifies configs by replacing frequent keys\n * and values with one letter substitutes. Config options must\n * retain array position/index, add new options at the end.\n */\n\nvar _keys = ['settings', 'hasHeaders', 'constrainDragToContainer', 'selectionEnabled', 'dimensions', 'borderWidth', 'minItemHeight', 'minItemWidth', 'headerHeight', 'dragProxyWidth', 'dragProxyHeight', 'labels', 'close', 'maximise', 'minimise', 'popout', 'content', 'componentName', 'componentState', 'id', 'width', 'type', 'height', 'isClosable', 'title', 'popoutWholeStack', 'openPopouts', 'parentId', 'activeItemIndex', 'reorderEnabled', 'borderGrabWidth'\n\n//Maximum 36 entries, do not cross this line!\n];\n\nvar _values = [true, false, 'row', 'column', 'stack', 'component', 'close', 'maximise', 'minimise', 'open in new window'];\n\n/**\n * Takes a GoldenLayout configuration object and\n * replaces its keys and values recursively with\n * one letter counterparts\n *\n * @param config A GoldenLayout config object\n *\n * @returns minified config\n */\nexport function minifyConfig(config) {\n if (_keys.length > 36) {\n throw new Error('Too many keys in config minifier map');\n }\n var min = {};\n _nextLevel(config, min, '_min');\n return min;\n}\n\n/**\n * Takes a configuration Object that was previously minified\n * using minifyConfig and returns its original version\n *\n * @param minifiedConfig\n *\n * @returns the original configuration\n */\nexport function unminifyConfig(minifiedConfig) {\n if (_keys.length > 36) {\n throw new Error('Too many keys in config minifier map');\n }\n var orig = {};\n _nextLevel(minifiedConfig, orig, '_max');\n return orig;\n}\n\n/**\n * Recursive function, called for every level of the config structure\n *\n * @param orig\n * @param min\n * @param translationFnName\n */\nfunction _nextLevel(from, to, translationFnName) {\n var translationFn = translationFnName === '_min' ? _min : _max;\n for (var key in from) {\n /**\n * In case something has extended Object prototypes\n */\n if (!from.hasOwnProperty(key)) continue;\n var fromItem = Array.isArray(from) ? from[Number.parseInt(key, 10)] : from[key];\n /**\n * For Arrays and Objects, create a new Array/Object\n * on the minified object and recurse into it\n */\n if (typeof fromItem === 'object' && fromItem != null) {\n var toItem = fromItem instanceof Array ? [] : {};\n if (Array.isArray(to)) {\n to[Number.parseInt(key, 10)] = toItem;\n } else {\n var minKey = translationFn(key, _keys);\n to[minKey] = toItem;\n }\n _nextLevel(fromItem, toItem, translationFnName);\n\n /**\n * For primitive values (Strings, Numbers, Boolean etc.)\n * minify the value\n */\n } else {\n var _toItem = translationFn(fromItem, _values);\n if (Array.isArray(to)) {\n to[Number.parseInt(key, 10)] = _toItem;\n } else {\n var _minKey = translationFn(key, _keys);\n to[_minKey] = _toItem;\n }\n }\n }\n}\n\n/**\n * Minifies value based on a dictionary\n *\n * @param value\n * @param dictionary\n *\n * @returns The minified version\n */\nfunction _min(value, dictionary) {\n /**\n * If a value actually is a single character, prefix it\n * with ___ to avoid mistaking it for a minification code\n */\n if (typeof value === 'string' && value.length === 1) {\n return '___' + value;\n }\n var index = dictionary.indexOf(value);\n\n /**\n * value not found in the dictionary, return it unmodified\n */\n if (index === -1) {\n return value;\n\n /**\n * value found in dictionary, return its base36 counterpart\n */\n } else {\n return index.toString(36);\n }\n}\nfunction _max(value, dictionary) {\n /**\n * value is a single character. Assume that it's a translation\n * and return the original value from the dictionary\n */\n if (typeof value === 'string' && value.length === 1) {\n return dictionary[parseInt(value, 36)];\n }\n\n /**\n * value originally was a single character and was prefixed with ___\n * to avoid mistaking it for a translation. Remove the prefix\n * and return the original character\n */\n if (typeof value === 'string' && value.substr(0, 3) === '___') {\n return value[3];\n }\n /**\n * value was not minified\n */\n return value;\n}\n//# sourceMappingURL=ConfigMinifier.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 default class BubblingEvent {\n constructor(name, origin) {\n _defineProperty(this, \"name\", void 0);\n _defineProperty(this, \"origin\", void 0);\n _defineProperty(this, \"isPropagationStopped\", void 0);\n this.name = name;\n this.origin = origin;\n this.isPropagationStopped = false;\n }\n stopPropagation() {\n this.isPropagationStopped = true;\n }\n}\n//# sourceMappingURL=BubblingEvent.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 $ from 'jquery';\nimport EventEmitter from \"./EventEmitter.js\";\n/**\n * An EventEmitter singleton that propagates events\n * across multiple windows. This is a little bit trickier since\n * windows are allowed to open childWindows in their own right\n *\n * This means that we deal with a tree of windows. Hence the rules for event propagation are:\n *\n * - Propagate events from this layout to both parents and children\n * - Propagate events from parent to this and children\n * - Propagate events from children to the other children (but not the emitting one) and the parent\n */\nclass EventHub extends EventEmitter {\n constructor(layoutManager) {\n super();\n _defineProperty(this, \"_layoutManager\", void 0);\n _defineProperty(this, \"_dontPropagateToParent\", void 0);\n _defineProperty(this, \"_childEventSource\", void 0);\n _defineProperty(this, \"_boundOnEventFromChild\", void 0);\n this._layoutManager = layoutManager;\n this._dontPropagateToParent = null;\n this._childEventSource = null;\n this.on(EventEmitter.ALL_EVENT, this._onEventFromThis.bind(this));\n this._boundOnEventFromChild = this._onEventFromChild.bind(this);\n $(window).on('gl_child_event', this._boundOnEventFromChild);\n }\n\n /**\n * Called on every event emitted on this eventHub, regardles of origin.\n */\n _onEventFromThis() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (this._layoutManager.isSubWindow && args[0] !== this._dontPropagateToParent) {\n this._propagateToParent(args);\n }\n this._propagateToChildren(args);\n\n //Reset\n this._dontPropagateToParent = null;\n this._childEventSource = null;\n }\n\n /**\n * Called by the parent layout.\n *\n * @param args Event name + arguments\n */\n _$onEventFromParent(args) {\n this._dontPropagateToParent = args[0];\n this.emit.apply(this, args);\n }\n\n /**\n * Callback for child events raised on the window\n *\n * @param event\n */\n _onEventFromChild(event) {\n this._childEventSource = event.originalEvent.__gl;\n this.emit.apply(this, event.originalEvent.__glArgs);\n }\n\n /**\n * Propagates the event to the parent by emitting\n * it on the parent's DOM window\n *\n * @param args Event name + arguments\n */\n _propagateToParent(args) {\n var _window$opener;\n var eventName = 'gl_child_event';\n var event = (_window$opener = window.opener) === null || _window$opener === void 0 ? void 0 : _window$opener.document.createEvent('HTMLEvents');\n event.initEvent(eventName, true, true);\n event.eventName = eventName;\n event.__glArgs = args;\n event.__gl = this._layoutManager;\n window.opener.dispatchEvent(event);\n }\n\n /**\n * Propagate events to children\n *\n * @param args Event name + arguments\n */\n _propagateToChildren(args) {\n for (var i = 0; i < this._layoutManager.openPopouts.length; i++) {\n var childGl = this._layoutManager.openPopouts[i].getGlInstance();\n if (childGl && childGl !== this._childEventSource) {\n childGl.eventHub._$onEventFromParent(args);\n }\n }\n }\n\n /**\n * Destroys the EventHub\n */\n destroy() {\n $(window).off('gl_child_event', this._boundOnEventFromChild);\n }\n}\nexport default EventHub;\n//# sourceMappingURL=EventHub.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 $ from 'jquery';\nimport { getUniqueId, minifyConfig, EventEmitter } from \"../utils/index.js\";\n/**\n * Pops a content item out into a new browser window.\n * This is achieved by\n *\n * - Creating a new configuration with the content item as root element\n * - Serializing and minifying the configuration\n * - Opening the current window's URL with the configuration as a GET parameter\n * - GoldenLayout when opened in the new window will look for the GET parameter\n * and use it instead of the provided configuration\n *\n * @param config GoldenLayout item config\n * @param dimensions A map with width, height, top and left\n * @param parentId The id of the element the item will be appended to on popIn\n * @param indexInParent The position of this element within its parent\n * @param layoutManager\n */\nexport default class BrowserPopout extends EventEmitter {\n constructor(config, dimensions, parentId, indexInParent, layoutManager) {\n super();\n _defineProperty(this, \"isInitialised\", false);\n _defineProperty(this, \"_config\", void 0);\n _defineProperty(this, \"_dimensions\", void 0);\n _defineProperty(this, \"_parentId\", void 0);\n _defineProperty(this, \"_indexInParent\", void 0);\n _defineProperty(this, \"_layoutManager\", void 0);\n _defineProperty(this, \"_popoutWindow\", null);\n _defineProperty(this, \"_id\", null);\n this._config = config;\n this._dimensions = dimensions;\n this._parentId = parentId;\n this._indexInParent = indexInParent;\n this._layoutManager = layoutManager;\n this._createWindow();\n }\n toConfig() {\n var _this$getGlInstance, _this$getGlInstance2, _ref, _this$_popoutWindow$s, _this$_popoutWindow, _this$_popoutWindow2, _ref2, _this$_popoutWindow$s2, _this$_popoutWindow3, _this$_popoutWindow4, _this$getGlInstance3;\n if (this.isInitialised === false) {\n throw new Error(\"Can't create config, layout not yet initialised\");\n }\n return {\n dimensions: {\n width: (_this$getGlInstance = this.getGlInstance()) === null || _this$getGlInstance === void 0 ? void 0 : _this$getGlInstance.width,\n height: (_this$getGlInstance2 = this.getGlInstance()) === null || _this$getGlInstance2 === void 0 ? void 0 : _this$getGlInstance2.height,\n left: (_ref = (_this$_popoutWindow$s = (_this$_popoutWindow = this._popoutWindow) === null || _this$_popoutWindow === void 0 ? void 0 : _this$_popoutWindow.screenX) !== null && _this$_popoutWindow$s !== void 0 ? _this$_popoutWindow$s : (_this$_popoutWindow2 = this._popoutWindow) === null || _this$_popoutWindow2 === void 0 ? void 0 : _this$_popoutWindow2.screenLeft) !== null && _ref !== void 0 ? _ref : 0,\n top: (_ref2 = (_this$_popoutWindow$s2 = (_this$_popoutWindow3 = this._popoutWindow) === null || _this$_popoutWindow3 === void 0 ? void 0 : _this$_popoutWindow3.screenY) !== null && _this$_popoutWindow$s2 !== void 0 ? _this$_popoutWindow$s2 : (_this$_popoutWindow4 = this._popoutWindow) === null || _this$_popoutWindow4 === void 0 ? void 0 : _this$_popoutWindow4.screenTop) !== null && _ref2 !== void 0 ? _ref2 : 0\n },\n content: (_this$getGlInstance3 = this.getGlInstance()) === null || _this$getGlInstance3 === void 0 ? void 0 : _this$getGlInstance3.toConfig().content,\n parentId: this._parentId,\n indexInParent: this._indexInParent\n };\n }\n getGlInstance() {\n var _this$_popoutWindow5;\n return (_this$_popoutWindow5 = this._popoutWindow) === null || _this$_popoutWindow5 === void 0 ? void 0 : _this$_popoutWindow5.__glInstance;\n }\n getWindow() {\n return this._popoutWindow;\n }\n close() {\n if (this.getGlInstance()) {\n var _this$getGlInstance4;\n (_this$getGlInstance4 = this.getGlInstance()) === null || _this$getGlInstance4 === void 0 ? void 0 : _this$getGlInstance4._$closeWindow();\n } else {\n try {\n var _this$getWindow;\n (_this$getWindow = this.getWindow()) === null || _this$getWindow === void 0 ? void 0 : _this$getWindow.close();\n } catch (e) {}\n }\n }\n\n /**\n * Returns the popped out item to its original position. If the original\n * parent isn't available anymore it falls back to the layout's topmost element\n */\n popIn() {\n var _parentItem;\n var index = this._indexInParent;\n var childConfig = null;\n var parentItem = null;\n if (this._parentId) {\n var _this$getGlInstance5;\n /*\n * The $.extend call seems a bit pointless, but it's crucial to\n * copy the config returned by this.getGlInstance().toConfig()\n * onto a new object. Internet Explorer keeps the references\n * to objects on the child window, resulting in the following error\n * once the child window is closed:\n *\n * The callee (server [not server application]) is not available and disappeared\n */\n childConfig = $.extend(true, {}, (_this$getGlInstance5 = this.getGlInstance()) === null || _this$getGlInstance5 === void 0 ? void 0 : _this$getGlInstance5.toConfig()).content[0];\n parentItem = this._layoutManager.root.getItemsById(this._parentId)[0];\n\n /*\n * Fallback if parentItem is not available. Either add it to the topmost\n * item or make it the topmost item if the layout is empty\n */\n if (!parentItem) {\n var _this$_layoutManager$;\n if (((_this$_layoutManager$ = this._layoutManager.root.contentItems.length) !== null && _this$_layoutManager$ !== void 0 ? _this$_layoutManager$ : 0) > 0) {\n parentItem = this._layoutManager.root.contentItems[0];\n } else {\n parentItem = this._layoutManager.root;\n }\n index = 0;\n }\n }\n if (!childConfig) {\n return;\n }\n (_parentItem = parentItem) === null || _parentItem === void 0 ? void 0 : _parentItem.addChild(childConfig, this._indexInParent);\n this.close();\n }\n\n /**\n * Creates the URL and window parameter\n * and opens a new window\n */\n _createWindow() {\n var url = this._createUrl();\n /**\n * Bogus title to prevent re-usage of existing window with the\n * same title. The actual title will be set by the new window's\n * GoldenLayout instance if it detects that it is in subWindowMode\n */\n var title = Math.floor(Math.random() * 1000000).toString(36);\n /**\n * The options as used in the window.open string\n */\n var options = this._serializeWindowOptions({\n width: this._dimensions.width,\n height: this._dimensions.height,\n innerWidth: this._dimensions.width,\n innerHeight: this._dimensions.height,\n menubar: 'no',\n toolbar: 'no',\n location: 'no',\n personalbar: 'no',\n resizable: 'yes',\n scrollbars: 'no',\n status: 'no'\n });\n\n // I'm not entirely sure how __glInstance is mounted to the popout window\n this._popoutWindow = window.open(url, title, options);\n if (!this._popoutWindow) {\n if (this._layoutManager.config.settings.blockedPopoutsThrowError === true) {\n var error = new Error('Popout blocked');\n error.type = 'popoutBlocked';\n throw error;\n } else {\n return;\n }\n }\n $(this._popoutWindow).on('load', this._positionWindow.bind(this)).on('unload beforeunload', this._onClose.bind(this));\n\n /**\n * Polling the childwindow to find out if GoldenLayout has been initialised\n * doesn't seem optimal, but the alternatives - adding a callback to the parent\n * window or raising an event on the window object - both would introduce knowledge\n * about the parent to the child window which we'd rather avoid\n */\n var checkReadyInterval = window.setInterval(() => {\n var _this$_popoutWindow6;\n if ((_this$_popoutWindow6 = this._popoutWindow) !== null && _this$_popoutWindow6 !== void 0 && _this$_popoutWindow6.__glInstance && this._popoutWindow.__glInstance.isInitialised) {\n this._onInitialised();\n window.clearInterval(checkReadyInterval);\n }\n }, 10);\n }\n\n /**\n * Serialises a map of key:values to a window options string\n *\n * @param windowOptions\n *\n * @returns serialised window options\n */\n _serializeWindowOptions(windowOptions) {\n var windowOptionsString = [],\n key;\n for (key in windowOptions) {\n windowOptionsString.push(key + '=' + windowOptions[key]);\n }\n return windowOptionsString.join(',');\n }\n\n /**\n * Creates the URL for the new window, including the\n * config GET parameter\n *\n * @returns URL\n */\n _createUrl() {\n var config = {\n content: this._config\n };\n var storageKey = 'gl-window-config-' + getUniqueId();\n config = minifyConfig(config);\n try {\n localStorage.setItem(storageKey, JSON.stringify(config));\n } catch (e) {\n throw new Error('Error while writing to localStorage ' + e.toString());\n }\n var urlParts = document.location.href.split('?');\n\n // URL doesn't contain GET-parameters\n if (urlParts.length === 1) {\n return urlParts[0] + '?gl-window=' + storageKey;\n\n // URL contains GET-parameters\n } else {\n return document.location.href + '&gl-window=' + storageKey;\n }\n }\n\n /**\n * Move the newly created window roughly to\n * where the component used to be.\n */\n _positionWindow() {\n var _this$_popoutWindow7, _this$_popoutWindow8;\n (_this$_popoutWindow7 = this._popoutWindow) === null || _this$_popoutWindow7 === void 0 ? void 0 : _this$_popoutWindow7.moveTo(this._dimensions.left, this._dimensions.top);\n (_this$_popoutWindow8 = this._popoutWindow) === null || _this$_popoutWindow8 === void 0 ? void 0 : _this$_popoutWindow8.focus();\n }\n\n /**\n * Callback when the new window is opened and the GoldenLayout instance\n * within it is initialised\n */\n _onInitialised() {\n var _this$getGlInstance6;\n this.isInitialised = true;\n (_this$getGlInstance6 = this.getGlInstance()) === null || _this$getGlInstance6 === void 0 ? void 0 : _this$getGlInstance6.on('popIn', this.popIn, this);\n this.emit('initialised');\n }\n\n /**\n * Invoked 50ms after the window unload event\n */\n _onClose() {\n setTimeout(this.emit.bind(this, 'closed'), 50);\n }\n}\n//# sourceMappingURL=BrowserPopout.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 $ from 'jquery';\nimport { stripTags, EventEmitter } from \"../utils/index.js\";\n/**\n * This class creates a temporary container\n * for the component whilst it is being dragged\n * and handles drag events\n *\n * @param x The initial x position\n * @param y The initial y position\n * @param dragListener\n * @param layoutManager\n * @param contentItem\n * @param originalParent\n */\nexport default class DragProxy extends EventEmitter {\n constructor(x, y, dragListener, layoutManager, contentItem, originalParent) {\n var _this$_contentItem$co, _this$_contentItem$co2, _offset$left, _offset$top, _this$_layoutManager$, _this$_layoutManager$2, _this$element$width, _this$element$height;\n super();\n _defineProperty(this, \"_dragListener\", void 0);\n _defineProperty(this, \"_layoutManager\", void 0);\n _defineProperty(this, \"_contentItem\", void 0);\n _defineProperty(this, \"_originalParent\", void 0);\n _defineProperty(this, \"_area\", null);\n _defineProperty(this, \"_lastValidArea\", null);\n _defineProperty(this, \"_minX\", void 0);\n _defineProperty(this, \"_maxX\", void 0);\n _defineProperty(this, \"_minY\", void 0);\n _defineProperty(this, \"_maxY\", void 0);\n _defineProperty(this, \"_width\", void 0);\n _defineProperty(this, \"_height\", void 0);\n _defineProperty(this, \"_sided\", void 0);\n _defineProperty(this, \"element\", void 0);\n _defineProperty(this, \"childElementContainer\", void 0);\n _defineProperty(this, \"_proxyTab\", void 0);\n this._dragListener = dragListener;\n this._layoutManager = layoutManager;\n this._contentItem = contentItem;\n this._originalParent = originalParent;\n this._dragListener.on('drag', this._onDrag, this);\n this._dragListener.on('dragStop', this._onDrop, this);\n\n // set the inserted drag placeholder to be the size of the tab removed, before its removed\n if (this._contentItem.tab && this._contentItem.tab.element) {\n var _this$_contentItem$ta, _this$_contentItem$ta2;\n this._layoutManager.tabDropPlaceholder.width((_this$_contentItem$ta = this._contentItem.tab.element.outerWidth(true)) !== null && _this$_contentItem$ta !== void 0 ? _this$_contentItem$ta : 0);\n this._layoutManager.tabDropPlaceholder.height((_this$_contentItem$ta2 = this._contentItem.tab.element.outerHeight(true)) !== null && _this$_contentItem$ta2 !== void 0 ? _this$_contentItem$ta2 : 0);\n }\n this.element = $(DragProxy._template);\n if (originalParent && originalParent._side) {\n this._sided = originalParent._sided;\n this.element.addClass('lm_' + originalParent._side);\n if (['right', 'bottom'].indexOf(originalParent._side.toString()) >= 0) this.element.find('.lm_content').after(this.element.find('.lm_header'));\n }\n this.element.css({\n left: x,\n top: y\n });\n this._proxyTab = this.element.find('.lm_tab');\n this._proxyTab.attr('title', stripTags((_this$_contentItem$co = this._contentItem.config.title) !== null && _this$_contentItem$co !== void 0 ? _this$_contentItem$co : ''));\n this.element.find('.lm_title').html((_this$_contentItem$co2 = this._contentItem.config.title) !== null && _this$_contentItem$co2 !== void 0 ? _this$_contentItem$co2 : '');\n this.childElementContainer = this.element.find('.lm_content');\n this.childElementContainer.append(contentItem.element);\n this._updateTree();\n this._layoutManager._$calculateItemAreas();\n $(document.body).append(this.element);\n\n // Need to set dimensions after adding the element, or `Component.setSize()` will not pass the `.is('visible')` test and won't update\n this._setDimensions();\n\n // there's no content tab to use yet, use the proxy tab size for placeholder sizing, after it's created\n if (!this._contentItem.tab && this._proxyTab.length) {\n var _this$_proxyTab$outer, _this$_proxyTab$outer2;\n this._layoutManager.tabDropPlaceholder.width((_this$_proxyTab$outer = this._proxyTab.outerWidth(true)) !== null && _this$_proxyTab$outer !== void 0 ? _this$_proxyTab$outer : 0);\n this._layoutManager.tabDropPlaceholder.height((_this$_proxyTab$outer2 = this._proxyTab.outerHeight(true)) !== null && _this$_proxyTab$outer2 !== void 0 ? _this$_proxyTab$outer2 : 0);\n }\n var offset = this._layoutManager.container.offset();\n this._minX = (_offset$left = offset === null || offset === void 0 ? void 0 : offset.left) !== null && _offset$left !== void 0 ? _offset$left : 0;\n this._minY = (_offset$top = offset === null || offset === void 0 ? void 0 : offset.top) !== null && _offset$top !== void 0 ? _offset$top : 0;\n this._maxX = ((_this$_layoutManager$ = this._layoutManager.container.width()) !== null && _this$_layoutManager$ !== void 0 ? _this$_layoutManager$ : 0) + this._minX;\n this._maxY = ((_this$_layoutManager$2 = this._layoutManager.container.height()) !== null && _this$_layoutManager$2 !== void 0 ? _this$_layoutManager$2 : 0) + this._minY;\n this._width = (_this$element$width = this.element.width()) !== null && _this$element$width !== void 0 ? _this$element$width : 0;\n this._height = (_this$element$height = this.element.height()) !== null && _this$element$height !== void 0 ? _this$element$height : 0;\n this._setDropPosition(x, y);\n this._layoutManager.emit('itemPickedUp', this._contentItem);\n }\n\n /**\n * Callback on every mouseMove event during a drag. Determines if the drag is\n * still within the valid drag area and calls the layoutManager to highlight the\n * current drop area\n *\n * @param offsetX The difference from the original x position in px\n * @param offsetY The difference from the original y position in px\n * @param event\n */\n _onDrag(offsetX, offsetY, event) {\n var _event$pageX, _event$pageY;\n var x = (_event$pageX = event.pageX) !== null && _event$pageX !== void 0 ? _event$pageX : 0;\n var y = (_event$pageY = event.pageY) !== null && _event$pageY !== void 0 ? _event$pageY : 0;\n var isWithinContainer = x > this._minX && x < this._maxX && y > this._minY && y < this._maxY;\n if (!isWithinContainer && this._layoutManager.config.settings.constrainDragToContainer === true) {\n return;\n }\n this._setDropPosition(x, y);\n }\n\n /**\n * Sets the target position, highlighting the appropriate area\n *\n * @param x The x position in px\n * @param y The y position in px\n */\n _setDropPosition(x, y) {\n this.element.css({\n left: x,\n top: y\n });\n this._area = this._layoutManager._$getArea(x, y);\n if (this._area !== null) {\n this._lastValidArea = this._area;\n this._area.contentItem._$highlightDropZone(x, y, this._area);\n }\n }\n\n /**\n * Callback when the drag has finished. Determines the drop area\n * and adds the child to it\n */\n _onDrop() {\n var _this$_layoutManager$3;\n (_this$_layoutManager$3 = this._layoutManager.dropTargetIndicator) === null || _this$_layoutManager$3 === void 0 ? void 0 : _this$_layoutManager$3.hide();\n\n /*\n * Valid drop area found\n */\n if (this._area !== null) {\n this._area.contentItem._$onDrop(this._contentItem, this._area);\n\n /**\n * No valid drop area available at present, but one has been found before.\n * Use it\n */\n } else if (this._lastValidArea !== null) {\n this._lastValidArea.contentItem._$onDrop(this._contentItem, this._lastValidArea);\n\n /**\n * No valid drop area found during the duration of the drag. Return\n * content item to its original position if a original parent is provided.\n * (Which is not the case if the drag had been initiated by createDragSource)\n */\n } else if (this._originalParent) {\n this._originalParent.addChild(this._contentItem);\n\n /**\n * The drag didn't ultimately end up with adding the content item to\n * any container. In order to ensure clean up happens, destroy the\n * content item.\n */\n } else {\n this._contentItem._$destroy();\n }\n this._dragListener.off('drag', this._onDrag, this);\n this._dragListener.off('dragStop', this._onDrop, this);\n this.element.remove();\n this._layoutManager.emit('itemDropped', this._contentItem);\n }\n\n /**\n * Removes the item from its original position within the tree\n */\n _updateTree() {\n /**\n * parent is null if the drag had been initiated by a external drag source\n */\n if (this._contentItem.parent) {\n this._contentItem.parent.removeChild(this._contentItem, true);\n }\n this._contentItem._$setParent(null);\n }\n\n /**\n * Updates the DragProxy's dimensions\n */\n _setDimensions() {\n var dimensions = this._layoutManager.config.dimensions;\n var width = dimensions.dragProxyWidth;\n var height = dimensions.dragProxyHeight;\n this.element.width(width);\n this.element.height(height);\n width -= this._sided ? dimensions.headerHeight : 0;\n height -= !this._sided ? dimensions.headerHeight : 0;\n this.childElementContainer.width(width);\n this.childElementContainer.height(height);\n this._contentItem.element.width(width);\n this._contentItem.element.height(height);\n this._contentItem.callDownwards('_$show');\n this._contentItem.callDownwards('setSize');\n }\n}\n_defineProperty(DragProxy, \"_template\", '<div class=\"lm_dragProxy\">' + '<div class=\"lm_header\">' + '<ul class=\"lm_tabs\">' + '<li class=\"lm_tab lm_active\"><i class=\"lm_left\"></i>' + '<span class=\"lm_title\"></span>' + '<i class=\"lm_right\"></i></li>' + '</ul>' + '</div>' + '<div class=\"lm_content\"></div>' + '</div>');\n//# sourceMappingURL=DragProxy.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 $ from 'jquery';\nimport { DragListener } from \"../utils/index.js\";\nimport DragProxy from \"./DragProxy.js\";\n/**\n * Allows for any DOM item to create a component on drag\n * start tobe dragged into the Layout\n *\n * @param element\n * @param itemConfig the configuration for the contentItem that will be created\n * @param layoutManager\n */\nexport default class DragSource {\n constructor(element, itemConfig, layoutManager) {\n _defineProperty(this, \"_element\", void 0);\n _defineProperty(this, \"_itemConfig\", void 0);\n _defineProperty(this, \"_layoutManager\", void 0);\n _defineProperty(this, \"_dragListener\", void 0);\n this._element = element;\n this._itemConfig = itemConfig;\n this._layoutManager = layoutManager;\n this._dragListener = this._createDragListener();\n }\n\n /**\n * Called initially and after every drag\n */\n _createDragListener() {\n this._dragListener = new DragListener(this._element, true);\n this._dragListener.on('dragStart', this._onDragStart, this);\n this._dragListener.on('dragStop', this._createDragListener, this);\n return this._dragListener;\n }\n\n /**\n * Callback for the DragListener's dragStart event\n *\n * @param x the x position of the mouse on dragStart\n * @param y the x position of the mouse on dragStart\n */\n _onDragStart(x, y) {\n var itemConfig = this._itemConfig;\n if (typeof itemConfig === 'function') {\n itemConfig = itemConfig();\n }\n var contentItem = this._layoutManager._$normalizeContentItem($.extend(true, {}, itemConfig)),\n dragProxy = new DragProxy(x, y, this._dragListener, this._layoutManager, contentItem, null);\n }\n}\n//# sourceMappingURL=DragSource.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 $ from 'jquery';\nimport { DragListener } from \"../utils/index.js\";\nimport DragProxy from \"./DragProxy.js\";\n/**\n * Creates a drag item given a starting mouseevent\n * that can then be dragged into the Layout\n *\n * @param itemConfig the configuration for the contentItem that will be created\n * @param layoutManager\n * @param event used to get the starting position\n */\nexport default class DragSourceFromEvent {\n // we need something to listen for mousemoves against\n\n constructor(itemConfig, layoutManager, event) {\n _defineProperty(this, \"_element\", $(window));\n _defineProperty(this, \"_itemConfig\", void 0);\n _defineProperty(this, \"_layoutManager\", void 0);\n _defineProperty(this, \"_dragListener\", void 0);\n this._itemConfig = itemConfig;\n this._layoutManager = layoutManager;\n this._createDragListener(event);\n }\n\n /**\n * Called initially and after every drag\n */\n _createDragListener(event) {\n if (this._dragListener) {\n this._dragListener.destroy();\n }\n if (!this._element) {\n return;\n }\n this._dragListener = new DragListener(this._element, true);\n this._dragListener.on('dragStart', this._onDragStart, this);\n this._dragListener.on('dragStop', this._destroy, this);\n\n // manaully pass in an event as mousedow, that already happened to start the dragListener\n this._dragListener.onMouseDown(event);\n this._dragListener._startDrag();\n }\n _destroy() {\n this._dragListener = undefined;\n this._element = undefined;\n this._itemConfig = undefined;\n this._layoutManager = undefined;\n }\n\n /**\n * Callback for the DragListener's dragStart event\n *\n * @param x the x position of the mouse on dragStart\n * @param y the x position of the mouse on dragStart\n */\n _onDragStart(x, y) {\n if (!this._dragListener || !this._layoutManager) {\n return;\n }\n var itemConfig = this._itemConfig;\n if (typeof itemConfig === 'function') {\n itemConfig = itemConfig();\n }\n var contentItem = this._layoutManager._$normalizeContentItem($.extend(true, {}, itemConfig));\n new DragProxy(x, y, this._dragListener, this._layoutManager, contentItem, null);\n }\n}\n//# sourceMappingURL=DragSourceFromEvent.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 $ from 'jquery';\nexport default class DropTargetIndicator {\n constructor() {\n _defineProperty(this, \"element\", $(DropTargetIndicator._template));\n $(document.body).append(this.element);\n }\n destroy() {\n this.element.remove();\n }\n highlightArea(area) {\n this.element.css({\n left: area.x1,\n top: area.y1,\n // marching ants were causing rendering artifacts with fractional pixels\n width: Math.floor(area.x2 - area.x1),\n height: Math.floor(area.y2 - area.y1)\n }).show();\n }\n hide() {\n this.element.hide();\n }\n}\n_defineProperty(DropTargetIndicator, \"_template\", '<div class=\"lm_dropTargetIndicator\"><div class=\"lm_inner\"></div></div>');\n//# sourceMappingURL=DropTargetIndicator.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 $ from 'jquery';\nexport default class HeaderButton {\n constructor(header, label, cssClass, action) {\n _defineProperty(this, \"element\", void 0);\n _defineProperty(this, \"_header\", void 0);\n _defineProperty(this, \"_action\", void 0);\n this._header = header;\n this.element = $('<li class=\"' + cssClass + '\" title=\"' + label + '\"></li>');\n this._header.on('destroy', this._$destroy, this);\n this._action = action;\n this.element.on('click', this._action);\n this._header.controlsContainer.append(this.element);\n }\n _$destroy() {\n this.element.off();\n this.element.remove();\n }\n}\n//# sourceMappingURL=HeaderButton.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 ConfigurationError extends Error {\n constructor(message, node) {\n super();\n _defineProperty(this, \"node\", void 0);\n this.name = 'Configuration Error';\n this.message = message;\n this.node = node;\n }\n}\nexport default ConfigurationError;\n//# sourceMappingURL=ConfigurationError.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 { animFrame, BubblingEvent, EventEmitter } from \"../utils/index.js\";\nimport { ConfigurationError } from \"../errors/index.js\";\nimport { itemDefaultConfig } from \"../config/index.js\";\nexport function isStack(item) {\n return item.isStack;\n}\nexport function isComponent(item) {\n return item.isComponent;\n}\nexport function isRoot(item) {\n return item.isRoot;\n}\n/**\n * This is the baseclass that all content items inherit from.\n * Most methods provide a subset of what the sub-classes do.\n *\n * It also provides a number of functions for tree traversal\n *\n * @param {lm.LayoutManager} layoutManager\n * @param {item node configuration} config\n * @param {lm.item} parent\n *\n * @event stateChanged\n * @event beforeItemDestroyed\n * @event itemDestroyed\n * @event itemCreated\n * @event componentCreated\n * @event rowCreated\n * @event columnCreated\n * @event stackCreated\n *\n * @constructor\n */\nexport default class AbstractContentItem extends EventEmitter {\n constructor(layoutManager, config, parent, element) {\n super();\n _defineProperty(this, \"config\", void 0);\n _defineProperty(this, \"type\", void 0);\n _defineProperty(this, \"contentItems\", void 0);\n _defineProperty(this, \"parent\", void 0);\n _defineProperty(this, \"layoutManager\", void 0);\n _defineProperty(this, \"element\", void 0);\n _defineProperty(this, \"childElementContainer\", void 0);\n _defineProperty(this, \"componentName\", void 0);\n _defineProperty(this, \"isInitialised\", false);\n _defineProperty(this, \"isMaximised\", false);\n _defineProperty(this, \"isRoot\", false);\n _defineProperty(this, \"isRow\", false);\n _defineProperty(this, \"isColumn\", false);\n _defineProperty(this, \"isStack\", false);\n _defineProperty(this, \"isComponent\", false);\n _defineProperty(this, \"tab\", void 0);\n _defineProperty(this, \"_pendingEventPropagations\", void 0);\n _defineProperty(this, \"_throttledEvents\", void 0);\n this.element = element;\n\n // Some GL things expect this config to not change\n this.config = this._extendItemNode(config);\n this.type = config.type;\n this.contentItems = [];\n this.parent = parent;\n this.layoutManager = layoutManager;\n this._pendingEventPropagations = {};\n this._throttledEvents = ['stateChanged'];\n this.on(EventEmitter.ALL_EVENT, this._propagateEvent, this);\n if (config.content) {\n this._createContentItems(config);\n }\n }\n\n /**\n * Set the size of the component and its children, called recursively\n *\n * @abstract\n */\n\n /**\n * Calls a method recursively downwards on the tree\n *\n * @param functionName the name of the function to be called\n * @param functionArguments optional arguments that are passed to every function\n * @param bottomUp Call methods from bottom to top, defaults to false\n * @param skipSelf Don't invoke the method on the class that calls it, defaults to false\n */\n callDownwards(functionName) {\n var functionArguments = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var bottomUp = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var skipSelf = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n if (bottomUp !== true && skipSelf !== true) {\n this[functionName].apply(this, functionArguments);\n }\n for (var i = 0; i < this.contentItems.length; i++) {\n this.contentItems[i].callDownwards(functionName, functionArguments, bottomUp);\n }\n if (bottomUp === true && skipSelf !== true) {\n this[functionName].apply(this, functionArguments);\n }\n }\n\n /**\n * Removes a child node (and its children) from the tree\n *\n * @param contentItem\n */\n removeChild(contentItem) {\n var _this$config$content;\n var keepChild = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n /*\n * Get the position of the item that's to be removed within all content items this node contains\n */\n var index = this.contentItems.indexOf(contentItem);\n\n /*\n * Make sure the content item to be removed is actually a child of this item\n */\n if (index === -1) {\n throw new Error(\"Can't remove child item. Unknown content item\");\n }\n\n /**\n * Call ._$destroy on the content item. This also calls ._$destroy on all its children\n */\n if (keepChild !== true) {\n this.contentItems[index]._$destroy();\n }\n\n /**\n * Remove the content item from this nodes array of children\n */\n this.contentItems.splice(index, 1);\n\n /**\n * Remove the item from the configuration\n */\n (_this$config$content = this.config.content) === null || _this$config$content === void 0 ? void 0 : _this$config$content.splice(index, 1);\n\n /**\n * If this node still contains other content items, adjust their size\n */\n if (this.contentItems.length > 0) {\n this.callDownwards('setSize');\n\n /**\n * If this was the last content item, remove this node as well\n */\n } else if (this.type !== 'root' && this.config.isClosable) {\n var _this$parent;\n (_this$parent = this.parent) === null || _this$parent === void 0 ? void 0 : _this$parent.removeChild(this);\n }\n }\n\n /**\n * Sets up the tree structure for the newly added child\n * The responsibility for the actual DOM manipulations lies\n * with the concrete item\n *\n * @param contentItem\n * @param index If omitted item will be appended\n */\n addChild(contentItem, index) {\n contentItem = this.layoutManager._$normalizeContentItem(contentItem, this);\n if (index === undefined) {\n index = this.contentItems.length;\n }\n this.contentItems.splice(index, 0, contentItem);\n if (this.config.content === undefined) {\n this.config.content = [];\n }\n this.config.content.splice(index, 0, contentItem.config);\n contentItem.parent = this;\n if (contentItem.parent.isInitialised === true && contentItem.isInitialised === false) {\n contentItem._$init();\n }\n }\n\n /**\n * Replaces oldChild with newChild. This used to use jQuery.replaceWith... which for\n * some reason removes all event listeners, so isn't really an option.\n *\n * @param oldChild\n * @param newChild\n */\n replaceChild(oldChild, newChild) {\n var _$destroyOldChild = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n newChild = this.layoutManager._$normalizeContentItem(newChild);\n var index = this.contentItems.indexOf(oldChild);\n var parentNode = oldChild.element[0].parentNode;\n if (index === -1) {\n throw new Error(\"Can't replace child. oldChild is not child of this\");\n }\n parentNode === null || parentNode === void 0 ? void 0 : parentNode.replaceChild(newChild.element[0], oldChild.element[0]);\n\n /*\n * Optionally destroy the old content item\n */\n if (_$destroyOldChild === true) {\n oldChild.parent = null;\n oldChild._$destroy();\n }\n\n /*\n * Wire the new contentItem into the tree\n */\n this.contentItems[index] = newChild;\n newChild.parent = this;\n\n /*\n * Update tab reference\n */\n if (isStack(this)) {\n this.header.tabs[index].contentItem = newChild;\n }\n\n //TODO This doesn't update the config... refactor to leave item nodes untouched after creation\n if (newChild.parent.isInitialised === true && newChild.isInitialised === false) {\n newChild._$init();\n }\n this.callDownwards('setSize');\n }\n\n /**\n * Convenience method.\n * Shorthand for this.parent.removeChild( this )\n */\n remove() {\n var _this$parent2;\n (_this$parent2 = this.parent) === null || _this$parent2 === void 0 ? void 0 : _this$parent2.removeChild(this);\n }\n\n /**\n * Removes the component from the layout and creates a new\n * browser window with the component and its children inside\n */\n popout() {\n var browserPopout = this.layoutManager.createPopout(this);\n this.emitBubblingEvent('stateChanged');\n return browserPopout;\n }\n\n /**\n * Maximises the Item or minimises it if it is already maximised\n */\n toggleMaximise(e) {\n e && e.preventDefault();\n if (this.isMaximised === true) {\n this.layoutManager._$minimiseItem(this);\n } else {\n this.layoutManager._$maximiseItem(this);\n }\n this.isMaximised = !this.isMaximised;\n this.emitBubblingEvent('stateChanged');\n }\n\n /**\n * Selects the item if it is not already selected\n */\n select() {\n if (this.layoutManager.selectedItem !== this) {\n this.layoutManager.selectItem(this, true);\n this.element.addClass('lm_selected');\n }\n }\n\n /**\n * De-selects the item if it is selected\n */\n deselect() {\n if (this.layoutManager.selectedItem === this) {\n this.layoutManager.selectedItem = null;\n this.element.removeClass('lm_selected');\n }\n }\n\n /**\n * Set this component's title\n * @param title\n */\n setTitle(title) {\n this.config.title = title;\n this.emit('titleChanged', title);\n this.emitBubblingEvent('stateChanged');\n }\n\n /**\n * Checks whether a provided id is present\n * @param id\n * @returns isPresent\n */\n hasId(id) {\n if (!this.config.id) {\n return false;\n } else if (typeof this.config.id === 'string') {\n return this.config.id === id;\n } else if (this.config.id instanceof Array) {\n return this.config.id.indexOf(id) !== -1;\n }\n }\n\n /**\n * Adds an id. Adds it as a string if the component doesn't\n * have an id yet or creates/uses an array\n * @param id\n */\n addId(id) {\n if (this.hasId(id)) {\n return;\n }\n if (!this.config.id) {\n this.config.id = id;\n } else if (typeof this.config.id === 'string') {\n this.config.id = [this.config.id, id];\n } else if (this.config.id instanceof Array) {\n this.config.id.push(id);\n }\n }\n\n /**\n * Removes an existing id. Throws an error\n * if the id is not present\n * @param id\n */\n removeId(id) {\n if (!this.hasId(id)) {\n throw new Error('Id not found');\n }\n if (typeof this.config.id === 'string') {\n delete this.config.id;\n } else if (this.config.id instanceof Array) {\n var index = this.config.id.indexOf(id);\n this.config.id.splice(index, 1);\n }\n }\n\n /****************************************\n * SELECTOR\n ****************************************/\n getItemsByFilter(filter) {\n var result = [];\n var next = function next(contentItem) {\n for (var i = 0; i < contentItem.contentItems.length; i++) {\n if (filter(contentItem.contentItems[i]) === true) {\n result.push(contentItem.contentItems[i]);\n }\n next(contentItem.contentItems[i]);\n }\n };\n next(this);\n return result;\n }\n getItemsById(id) {\n return this.getItemsByFilter(function (item) {\n if (item.config.id instanceof Array) {\n return item.config.id.indexOf(id) !== -1;\n } else {\n return item.config.id === id;\n }\n });\n }\n getItemsByType(type) {\n return this._$getItemsByProperty('type', type);\n }\n getComponentsByName(componentName) {\n var components = this._$getItemsByProperty('componentName', componentName);\n var instances = [];\n for (var i = 0; i < components.length; i++) {\n instances.push(components[i].instance);\n }\n return instances;\n }\n\n /****************************************\n * PACKAGE PRIVATE\n ****************************************/\n _$getItemsByProperty(key, value) {\n return this.getItemsByFilter(function (item) {\n return item[key] === value;\n });\n }\n _$setParent(parent) {\n this.parent = parent;\n }\n _$highlightDropZone(x, y, area) {\n var _this$layoutManager$d;\n (_this$layoutManager$d = this.layoutManager.dropTargetIndicator) === null || _this$layoutManager$d === void 0 ? void 0 : _this$layoutManager$d.highlightArea(area);\n }\n _$onDrop(contentItem, area) {\n this.addChild(contentItem);\n }\n _$hide() {\n this._callOnActiveComponents('hide');\n this.element.hide();\n this.layoutManager.updateSize();\n }\n _$show() {\n this._callOnActiveComponents('show');\n this.element.show();\n this.layoutManager.updateSize();\n }\n _callOnActiveComponents(methodName) {\n var stacks = this.getItemsByType('stack');\n var activeContentItem = null;\n for (var i = 0; i < stacks.length; i++) {\n activeContentItem = stacks[i].getActiveContentItem();\n if (activeContentItem && isComponent(activeContentItem)) {\n activeContentItem.container[methodName]();\n }\n }\n }\n\n /**\n * Destroys this item ands its children\n */\n _$destroy() {\n this.emitBubblingEvent('beforeItemDestroyed');\n this.callDownwards('_$destroy', [], true, true);\n this.element.remove();\n this.emitBubblingEvent('itemDestroyed');\n }\n\n /**\n * Returns the area the component currently occupies in the format\n *\n * {\n *\t\tx1: int\n *\t\tx2: int\n *\t\ty1: int\n *\t\ty2: int\n *\t\tcontentItem: contentItem\n * }\n */\n _$getArea(element) {\n var _element$offset, _element$width, _element$height;\n element = element || this.element;\n var offset = (_element$offset = element.offset()) !== null && _element$offset !== void 0 ? _element$offset : {\n left: 0,\n top: 0\n };\n var width = (_element$width = element.width()) !== null && _element$width !== void 0 ? _element$width : 0;\n var height = (_element$height = element.height()) !== null && _element$height !== void 0 ? _element$height : 0;\n return {\n x1: offset.left,\n y1: offset.top,\n x2: offset.left + width,\n y2: offset.top + height,\n surface: width * height,\n contentItem: this,\n side: ''\n };\n }\n\n /**\n * The tree of content items is created in two steps: First all content items are instantiated,\n * then init is called recursively from top to bottem. This is the basic init function,\n * it can be used, extended or overwritten by the content items\n *\n * Its behaviour depends on the content item\n */\n _$init() {\n this.setSize();\n for (var i = 0; i < this.contentItems.length; i++) {\n var _this$childElementCon;\n (_this$childElementCon = this.childElementContainer) === null || _this$childElementCon === void 0 ? void 0 : _this$childElementCon.append(this.contentItems[i].element);\n }\n this.isInitialised = true;\n this.emitBubblingEvent('itemCreated');\n this.emitBubblingEvent(this.type + 'Created');\n }\n\n /**\n * Emit an event that bubbles up the item tree.\n *\n * @param name The name of the event\n */\n emitBubblingEvent(name) {\n var event = new BubblingEvent(name, this);\n this.emit(name, event);\n }\n\n /**\n * Private method, creates all content items for this node at initialisation time\n * PLEASE NOTE, please see addChild for adding contentItems add runtime\n * @param {configuration item node} config\n */\n _createContentItems(config) {\n var oContentItem;\n if (!(config.content instanceof Array)) {\n throw new ConfigurationError('content must be an Array', config);\n }\n for (var i = 0; i < config.content.length; i++) {\n oContentItem = this.layoutManager.createContentItem(config.content[i], this);\n this.contentItems.push(oContentItem);\n }\n }\n\n /**\n * Extends an item configuration node with default settings\n * @param config\n * @returns extended config\n */\n _extendItemNode(config) {\n for (var [key, value] of Object.entries(itemDefaultConfig)) {\n // This just appeases TS\n var k = key;\n if (config[k] === undefined) {\n config[k] = value;\n }\n }\n return config;\n }\n\n /**\n * Called for every event on the item tree. Decides whether the event is a bubbling\n * event and propagates it to its parent\n *\n * @param name the name of the event\n * @param event\n */\n _propagateEvent(name, event) {\n if (event instanceof BubblingEvent && event.isPropagationStopped === false && this.isInitialised === true) {\n /**\n * In some cases (e.g. if an element is created from a DragSource) it\n * doesn't have a parent and is not below root. If that's the case\n * propagate the bubbling event from the top level of the substree directly\n * to the layoutManager\n */\n if (this.isRoot === false && this.parent) {\n this.parent.emit.apply(this.parent, [name, event]);\n } else {\n this._scheduleEventPropagationToLayoutManager(name, event);\n }\n }\n }\n\n /**\n * All raw events bubble up to the root element. Some events that\n * are propagated to - and emitted by - the layoutManager however are\n * only string-based, batched and sanitized to make them more usable\n *\n * @param name the name of the event\n */\n _scheduleEventPropagationToLayoutManager(name, event) {\n if (this._throttledEvents.indexOf(name) === -1) {\n this.layoutManager.emit(name, event.origin);\n } else {\n if (this._pendingEventPropagations[name] !== true) {\n this._pendingEventPropagations[name] = true;\n animFrame(this._propagateEventToLayoutManager.bind(this, name, event));\n }\n }\n }\n\n /**\n * Callback for events scheduled by _scheduleEventPropagationToLayoutManager\n *\n * @param name the name of the event\n */\n _propagateEventToLayoutManager(name, event) {\n this._pendingEventPropagations[name] = false;\n this.layoutManager.emit(name, event);\n }\n}\n//# sourceMappingURL=AbstractContentItem.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 $ from 'jquery';\nimport AbstractContentItem from \"./AbstractContentItem.js\";\nimport { ConfigurationError } from \"../errors/index.js\";\nimport ItemContainer from \"../container/ItemContainer.js\";\n/**\n * @param layoutManager\n * @param config\n * @param parent\n */\nexport default class Component extends AbstractContentItem {\n constructor(layoutManager, config, parent) {\n super(layoutManager, config, parent, $());\n _defineProperty(this, \"config\", void 0);\n _defineProperty(this, \"componentName\", void 0);\n _defineProperty(this, \"container\", void 0);\n _defineProperty(this, \"parent\", void 0);\n _defineProperty(this, \"instance\", void 0);\n this.config = config;\n this.parent = parent;\n var ComponentConstructor = layoutManager.getComponent(this.config.componentName) || layoutManager.getFallbackComponent(),\n componentConfig = $.extend(true, {}, this.config.componentState || {});\n if (ComponentConstructor == null) {\n throw new ConfigurationError('Unknown component \"' + this.config.componentName + '\"');\n }\n componentConfig.componentName = this.config.componentName;\n this.componentName = this.config.componentName;\n if (this.config.title === '') {\n this.config.title = this.config.componentName;\n }\n this.isComponent = true;\n this.container = new ItemContainer(this.config, this, layoutManager);\n this.instance = new ComponentConstructor(this.container, componentConfig);\n this.element = this.container._element;\n }\n close() {\n this.parent.removeChild(this);\n }\n setSize() {\n if (this.element.is(':visible')) {\n // Do not update size of hidden components to prevent unwanted reflows\n this.container._$setSize(this.element.width(), this.element.height());\n }\n }\n _$init() {\n AbstractContentItem.prototype._$init.call(this);\n this.container.emit('open');\n }\n _$hide() {\n this.container.hide();\n AbstractContentItem.prototype._$hide.call(this);\n }\n _$show() {\n this.container.show();\n if (this.container._config.isFocusOnShow) {\n // focus the shown container element on show\n // preventScroll isn't supported in safari, but also doesn't matter for illumon when 100% window\n this.container._contentElement[0].focus({\n preventScroll: true\n });\n }\n AbstractContentItem.prototype._$show.call(this);\n }\n _$destroy() {\n this.container.emit('destroy', this);\n AbstractContentItem.prototype._$destroy.call(this);\n }\n\n /**\n * Dragging onto a component directly is not an option\n *\n * @returns null\n */\n _$getArea() {\n return null;\n }\n}\n//# sourceMappingURL=Component.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 $ from 'jquery';\nimport AbstractContentItem from \"./AbstractContentItem.js\";\nimport { animFrame } from \"../utils/index.js\";\nimport { Splitter } from \"../controls/index.js\";\nexport default class RowOrColumn extends AbstractContentItem {\n constructor(isColumn, layoutManager, config, parent) {\n super(layoutManager, config, parent, $('<div class=\"lm_item lm_' + (isColumn ? 'column' : 'row') + '\"></div>'));\n _defineProperty(this, \"isRow\", void 0);\n _defineProperty(this, \"isColumn\", void 0);\n _defineProperty(this, \"childElementContainer\", void 0);\n _defineProperty(this, \"parent\", void 0);\n _defineProperty(this, \"_splitter\", []);\n _defineProperty(this, \"_splitterSize\", void 0);\n _defineProperty(this, \"_splitterGrabSize\", void 0);\n _defineProperty(this, \"_isColumn\", void 0);\n _defineProperty(this, \"_dimension\", void 0);\n _defineProperty(this, \"_splitterPosition\", null);\n _defineProperty(this, \"_splitterMinPosition\", null);\n _defineProperty(this, \"_splitterMaxPosition\", null);\n this.parent = parent;\n this.isRow = !isColumn;\n this.isColumn = isColumn;\n this.childElementContainer = this.element;\n this._splitterSize = layoutManager.config.dimensions.borderWidth;\n this._splitterGrabSize = layoutManager.config.dimensions.borderGrabWidth;\n this._isColumn = isColumn;\n this._dimension = isColumn ? 'height' : 'width';\n this._splitterPosition = null;\n this._splitterMinPosition = null;\n this._splitterMaxPosition = null;\n }\n\n /**\n * Add a new contentItem to the Row or Column\n *\n * @param contentItem\n * @param index The position of the new item within the Row or Column.\n * If no index is provided the item will be added to the end\n * @param _$suspendResize If true the items won't be resized. This will leave the item in\n * an inconsistent state and is only intended to be used if multiple\n * children need to be added in one go and resize is called afterwards\n */\n addChild(contentItem, index, _$suspendResize) {\n var newItemSize, itemSize, i, splitterElement;\n contentItem = this.layoutManager._$normalizeContentItem(contentItem, this);\n if (index === undefined) {\n index = this.contentItems.length;\n }\n if (this.contentItems.length > 0) {\n splitterElement = this._createSplitter(Math.max(0, index - 1)).element;\n if (index > 0) {\n this.contentItems[index - 1].element.after(splitterElement);\n splitterElement.after(contentItem.element);\n } else {\n this.contentItems[0].element.before(splitterElement);\n splitterElement.before(contentItem.element);\n }\n } else {\n this.childElementContainer.append(contentItem.element);\n }\n AbstractContentItem.prototype.addChild.call(this, contentItem, index);\n newItemSize = 1 / this.contentItems.length * 100;\n if (_$suspendResize === true) {\n this.emitBubblingEvent('stateChanged');\n return;\n }\n for (i = 0; i < this.contentItems.length; i++) {\n if (this.contentItems[i] === contentItem) {\n contentItem.config[this._dimension] = newItemSize;\n } else {\n var _this$contentItems$i$;\n itemSize = ((_this$contentItems$i$ = this.contentItems[i].config[this._dimension]) !== null && _this$contentItems$i$ !== void 0 ? _this$contentItems$i$ : 0) * (100 - newItemSize) / 100;\n this.contentItems[i].config[this._dimension] = itemSize;\n }\n }\n this.callDownwards('setSize');\n this.emitBubblingEvent('stateChanged');\n }\n\n /**\n * Removes a child of this element\n *\n * @param contentItem\n * @param keepChild If true the child will be removed, but not destroyed\n */\n removeChild(contentItem, keepChild) {\n var _contentItem$config$t;\n var removedItemSize = (_contentItem$config$t = contentItem.config[this._dimension]) !== null && _contentItem$config$t !== void 0 ? _contentItem$config$t : 0,\n index = this.contentItems.indexOf(contentItem),\n splitterIndex = Math.max(index - 1, 0),\n i,\n childItem;\n if (index === -1) {\n throw new Error(\"Can't remove child. ContentItem is not child of this Row or Column\");\n }\n\n /**\n * Remove the splitter before the item or after if the item happens\n * to be the first in the row/column\n */\n if (this._splitter[splitterIndex]) {\n this._splitter[splitterIndex]._$destroy();\n this._splitter.splice(splitterIndex, 1);\n }\n\n /**\n * Allocate the space that the removed item occupied to the remaining items\n */\n for (i = 0; i < this.contentItems.length; i++) {\n if (this.contentItems[i] !== contentItem) {\n var _this$contentItems$i$2;\n this.contentItems[i].config[this._dimension] = ((_this$contentItems$i$2 = this.contentItems[i].config[this._dimension]) !== null && _this$contentItems$i$2 !== void 0 ? _this$contentItems$i$2 : 0) + removedItemSize / (this.contentItems.length - 1);\n }\n }\n AbstractContentItem.prototype.removeChild.call(this, contentItem, keepChild);\n if (this.contentItems.length === 1 && this.config.isClosable === true) {\n childItem = this.contentItems[0];\n this.contentItems = [];\n this.parent.replaceChild(this, childItem, true);\n } else {\n this.callDownwards('setSize');\n this.emitBubblingEvent('stateChanged');\n }\n }\n\n /**\n * Replaces a child of this Row or Column with another contentItem\n *\n * @param oldChild\n * @param newChild\n */\n replaceChild(oldChild, newChild) {\n var size = oldChild.config[this._dimension];\n super.replaceChild(oldChild, newChild);\n newChild.config[this._dimension] = size;\n this.callDownwards('setSize');\n this.emitBubblingEvent('stateChanged');\n }\n\n /**\n * Called whenever the dimensions of this item or one of its parents change\n */\n setSize() {\n if (this.contentItems.length > 0) {\n this._calculateRelativeSizes();\n this._setAbsoluteSizes();\n }\n this.emitBubblingEvent('stateChanged');\n this.emit('resize');\n }\n\n /**\n * Invoked recursively by the layout manager. AbstractContentItem.init appends\n * the contentItem's DOM elements to the container, RowOrColumn init adds splitters\n * in between them\n */\n _$init() {\n if (this.isInitialised === true) return;\n var i;\n AbstractContentItem.prototype._$init.call(this);\n for (i = 0; i < this.contentItems.length - 1; i++) {\n this.contentItems[i].element.after(this._createSplitter(i).element);\n }\n }\n\n /**\n * Turns the relative sizes calculated by _calculateRelativeSizes into\n * absolute pixel values and applies them to the children's DOM elements\n *\n * Assigns additional pixels to counteract Math.floor\n */\n _setAbsoluteSizes() {\n var i,\n sizeData = this._calculateAbsoluteSizes();\n for (i = 0; i < this.contentItems.length; i++) {\n if (sizeData.additionalPixel - i > 0) {\n sizeData.itemSizes[i]++;\n }\n if (this._isColumn) {\n this.contentItems[i].element.width(sizeData.totalWidth);\n this.contentItems[i].element.height(sizeData.itemSizes[i]);\n } else {\n this.contentItems[i].element.width(sizeData.itemSizes[i]);\n this.contentItems[i].element.height(sizeData.totalHeight);\n }\n }\n }\n\n /**\n * Calculates the absolute sizes of all of the children of this Item.\n * @returns {object} - Set with absolute sizes and additional pixels.\n */\n _calculateAbsoluteSizes() {\n var _this$element$width, _this$element$height;\n var totalSplitterSize = (this.contentItems.length - 1) * this._splitterSize;\n var totalWidth = (_this$element$width = this.element.width()) !== null && _this$element$width !== void 0 ? _this$element$width : 0;\n var totalHeight = (_this$element$height = this.element.height()) !== null && _this$element$height !== void 0 ? _this$element$height : 0;\n var totalAssigned = 0;\n var itemSizes = [];\n if (this._isColumn) {\n totalHeight -= totalSplitterSize;\n } else {\n totalWidth -= totalSplitterSize;\n }\n for (var i = 0; i < this.contentItems.length; i++) {\n var _this$contentItems$i$3, _this$contentItems$i$4;\n var itemSize = this._isColumn ? Math.floor(totalHeight * (((_this$contentItems$i$3 = this.contentItems[i].config.height) !== null && _this$contentItems$i$3 !== void 0 ? _this$contentItems$i$3 : 0) / 100)) : Math.floor(totalWidth * (((_this$contentItems$i$4 = this.contentItems[i].config.width) !== null && _this$contentItems$i$4 !== void 0 ? _this$contentItems$i$4 : 0) / 100));\n totalAssigned += itemSize;\n itemSizes.push(itemSize);\n }\n var additionalPixel = Math.floor((this._isColumn ? totalHeight : totalWidth) - totalAssigned);\n return {\n itemSizes,\n additionalPixel,\n totalWidth,\n totalHeight\n };\n }\n\n /**\n * Calculates the relative sizes of all children of this Item. The logic\n * is as follows:\n *\n * - Add up the total size of all items that have a configured size\n *\n * - If the total == 100 (check for floating point errors)\n * Excellent, job done\n *\n * - If the total is > 100,\n * set the size of items without set dimensions to 1/3 and add this to the total\n * set the size off all items so that the total is hundred relative to their original size\n *\n * - If the total is < 100\n * If there are items without set dimensions, distribute the remainder to 100 evenly between them\n * If there are no items without set dimensions, increase all items sizes relative to\n * their original size so that they add up to 100\n */\n _calculateRelativeSizes() {\n var total = 0;\n var itemsWithoutSetDimension = [];\n var dimension = this._isColumn ? 'height' : 'width';\n for (var i = 0; i < this.contentItems.length; i++) {\n var size = this.contentItems[i].config[dimension];\n if (size != null) {\n total += size;\n } else {\n itemsWithoutSetDimension.push(this.contentItems[i]);\n }\n }\n\n /**\n * Everything adds up to hundred, all good :-)\n */\n if (Math.round(total) === 100) {\n this._respectMinItemWidth();\n return;\n }\n\n /**\n * Allocate the remaining size to the items without a set dimension\n */\n if (Math.round(total) < 100 && itemsWithoutSetDimension.length > 0) {\n for (var _i = 0; _i < itemsWithoutSetDimension.length; _i++) {\n itemsWithoutSetDimension[_i].config[dimension] = (100 - total) / itemsWithoutSetDimension.length;\n }\n this._respectMinItemWidth();\n return;\n }\n\n /**\n * If the total is > 100, but there are also items without a set dimension left, assing 50\n * as their dimension and add it to the total\n *\n * This will be reset in the next step\n */\n if (Math.round(total) > 100) {\n for (var _i2 = 0; _i2 < itemsWithoutSetDimension.length; _i2++) {\n itemsWithoutSetDimension[_i2].config[dimension] = 50;\n total += 50;\n }\n }\n\n /**\n * Set every items size relative to 100 relative to its size to total\n */\n for (var _i3 = 0; _i3 < this.contentItems.length; _i3++) {\n var _this$contentItems$_i;\n this.contentItems[_i3].config[dimension] = ((_this$contentItems$_i = this.contentItems[_i3].config[dimension]) !== null && _this$contentItems$_i !== void 0 ? _this$contentItems$_i : 0) / total * 100;\n }\n this._respectMinItemWidth();\n }\n\n /**\n * Adjusts the column widths to respect the dimensions minItemWidth if set.\n */\n _respectMinItemWidth() {\n var _this$layoutManager$c;\n var minItemWidth = this.layoutManager.config.dimensions ? (_this$layoutManager$c = this.layoutManager.config.dimensions.minItemWidth) !== null && _this$layoutManager$c !== void 0 ? _this$layoutManager$c : 0 : 0;\n var entriesOverMin = [];\n var totalOverMin = 0;\n var totalUnderMin = 0;\n var remainingWidth = 0;\n var allEntries = [];\n var entry;\n if (this._isColumn || !minItemWidth || this.contentItems.length <= 1) {\n return;\n }\n var sizeData = this._calculateAbsoluteSizes();\n\n /**\n * Figure out how much we are under the min item size total and how much room we have to use.\n */\n for (var i = 0; i < this.contentItems.length; i++) {\n var contentItem = this.contentItems[i];\n var itemSize = sizeData.itemSizes[i];\n if (itemSize < minItemWidth) {\n totalUnderMin += minItemWidth - itemSize;\n entry = {\n width: minItemWidth\n };\n } else {\n totalOverMin += itemSize - minItemWidth;\n entry = {\n width: itemSize\n };\n entriesOverMin.push(entry);\n }\n allEntries.push(entry);\n }\n\n /**\n * If there is nothing under min, or there is not enough over to make up the difference, do nothing.\n */\n if (totalUnderMin === 0 || totalUnderMin > totalOverMin) {\n return;\n }\n\n /**\n * Evenly reduce all columns that are over the min item width to make up the difference.\n */\n var reducePercent = totalUnderMin / totalOverMin;\n remainingWidth = totalUnderMin;\n for (var _i4 = 0; _i4 < entriesOverMin.length; _i4++) {\n entry = entriesOverMin[_i4];\n var reducedWidth = Math.round((entry.width - minItemWidth) * reducePercent);\n remainingWidth -= reducedWidth;\n entry.width -= reducedWidth;\n }\n\n /**\n * Take anything remaining from the last item.\n */\n if (remainingWidth !== 0) {\n allEntries[allEntries.length - 1].width -= remainingWidth;\n }\n\n /**\n * Set every items size relative to 100 relative to its size to total\n */\n for (var _i5 = 0; _i5 < this.contentItems.length; _i5++) {\n this.contentItems[_i5].config.width = allEntries[_i5].width / sizeData.totalWidth * 100;\n }\n }\n\n /**\n * Instantiates a new lm.controls.Splitter, binds events to it and adds\n * it to the array of splitters at the position specified as the index argument\n *\n * What it doesn't do though is append the splitter to the DOM\n *\n * @param index The position of the splitter\n * @returns The created splitter\n */\n _createSplitter(index) {\n var splitter;\n splitter = new Splitter(this._isColumn, this._splitterSize, this._splitterGrabSize);\n splitter.on('drag', this._onSplitterDrag.bind(this, splitter), this);\n splitter.on('dragStop', this._onSplitterDragStop.bind(this, splitter), this);\n splitter.on('dragStart', this._onSplitterDragStart.bind(this, splitter), this);\n this._splitter.splice(index, 0, splitter);\n return splitter;\n }\n\n /**\n * Locates the instance of lm.controls.Splitter in the array of\n * registered splitters and returns a map containing the contentItem\n * before and after the splitters, both of which are affected if the\n * splitter is moved\n *\n * @param splitter\n *\n * @returns A map of contentItems that the splitter affects\n */\n _getItemsForSplitter(splitter) {\n var index = this._splitter.indexOf(splitter);\n if (index < 0) {\n throw new Error('Splitter not found in RowOrColumn');\n }\n return {\n before: this.contentItems[index],\n after: this.contentItems[index + 1]\n };\n }\n\n /**\n * Gets the minimum dimensions for the given item configuration array\n * @param item\n * @private\n */\n _getMinimumDimensions(arr) {\n var minWidth = 0,\n minHeight = 0;\n for (var i = 0; i < arr.length; ++i) {\n var _arr$i$minWidth, _arr$i$minHeight;\n minWidth = Math.max((_arr$i$minWidth = arr[i].minWidth) !== null && _arr$i$minWidth !== void 0 ? _arr$i$minWidth : 0, minWidth);\n minHeight = Math.max((_arr$i$minHeight = arr[i].minHeight) !== null && _arr$i$minHeight !== void 0 ? _arr$i$minHeight : 0, minHeight);\n }\n return {\n horizontal: minWidth,\n vertical: minHeight\n };\n }\n\n /**\n * Invoked when a splitter's dragListener fires dragStart. Calculates the splitters\n * movement area once (so that it doesn't need calculating on every mousemove event)\n *\n * @param splitter\n */\n _onSplitterDragStart(splitter) {\n var _items$before$config$, _items$after$config$c, _items$before$element, _items$after$element$;\n var items = this._getItemsForSplitter(splitter);\n var minSize = this.layoutManager.config.dimensions[this._isColumn ? 'minItemHeight' : 'minItemWidth'];\n var beforeMinDim = this._getMinimumDimensions((_items$before$config$ = items.before.config.content) !== null && _items$before$config$ !== void 0 ? _items$before$config$ : []);\n var beforeMinSize = this._isColumn ? beforeMinDim.vertical : beforeMinDim.horizontal;\n var afterMinDim = this._getMinimumDimensions((_items$after$config$c = items.after.config.content) !== null && _items$after$config$c !== void 0 ? _items$after$config$c : []);\n var afterMinSize = this._isColumn ? afterMinDim.vertical : afterMinDim.horizontal;\n this._splitterPosition = 0;\n this._splitterMinPosition = -1 * (((_items$before$element = items.before.element[this._dimension]()) !== null && _items$before$element !== void 0 ? _items$before$element : 0) - (beforeMinSize || minSize));\n this._splitterMaxPosition = ((_items$after$element$ = items.after.element[this._dimension]()) !== null && _items$after$element$ !== void 0 ? _items$after$element$ : 0) - (afterMinSize || minSize);\n }\n\n /**\n * Invoked when a splitter's DragListener fires drag. Updates the splitters DOM position,\n * but not the sizes of the elements the splitter controls in order to minimize resize events\n *\n * @param splitter\n * @param offsetX Relative pixel values to the splitters original position. Can be negative\n * @param offsetY Relative pixel values to the splitters original position. Can be negative\n */\n _onSplitterDrag(splitter, offsetX, offsetY) {\n var offset = this._isColumn ? offsetY : offsetX;\n if (this._splitterMaxPosition == null || this._splitterMinPosition == null) {\n return;\n }\n if (offset > this._splitterMinPosition && offset < this._splitterMaxPosition) {\n this._splitterPosition = offset;\n splitter.element.css(this._isColumn ? 'top' : 'left', offset);\n }\n }\n\n /**\n * Invoked when a splitter's DragListener fires dragStop. Resets the splitters DOM position,\n * and applies the new sizes to the elements before and after the splitter and their children\n * on the next animation frame\n *\n * @param {lm.controls.Splitter} splitter\n */\n _onSplitterDragStop(splitter) {\n var _items$before$element2, _items$after$element$2, _this$_splitterPositi, _items$before$config$2, _items$after$config$t;\n var items = this._getItemsForSplitter(splitter);\n var sizeBefore = (_items$before$element2 = items.before.element[this._dimension]()) !== null && _items$before$element2 !== void 0 ? _items$before$element2 : 0;\n var sizeAfter = (_items$after$element$2 = items.after.element[this._dimension]()) !== null && _items$after$element$2 !== void 0 ? _items$after$element$2 : 0;\n var splitterPositionInRange = (((_this$_splitterPositi = this._splitterPosition) !== null && _this$_splitterPositi !== void 0 ? _this$_splitterPositi : 0) + sizeBefore) / (sizeBefore + sizeAfter);\n var totalRelativeSize = ((_items$before$config$2 = items.before.config[this._dimension]) !== null && _items$before$config$2 !== void 0 ? _items$before$config$2 : 0) + ((_items$after$config$t = items.after.config[this._dimension]) !== null && _items$after$config$t !== void 0 ? _items$after$config$t : 0);\n items.before.config[this._dimension] = splitterPositionInRange * totalRelativeSize;\n items.after.config[this._dimension] = (1 - splitterPositionInRange) * totalRelativeSize;\n splitter.element.css({\n top: 0,\n left: 0\n });\n animFrame(this.callDownwards.bind(this, 'setSize', undefined, undefined, undefined));\n }\n}\n//# sourceMappingURL=RowOrColumn.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 $ from 'jquery';\nimport AbstractContentItem, { isComponent } from \"./AbstractContentItem.js\";\nimport RowOrColumn from \"./RowOrColumn.js\";\nexport default class Root extends AbstractContentItem {\n constructor(layoutManager, config, containerElement) {\n super(layoutManager, _objectSpread(_objectSpread({}, config), {}, {\n type: 'root'\n }), null, $('<div class=\"lm_goldenlayout lm_item lm_root\"></div>'));\n _defineProperty(this, \"childElementContainer\", void 0);\n _defineProperty(this, \"_containerElement\", void 0);\n this.isRoot = true;\n this.type = 'root';\n this.childElementContainer = this.element;\n this._containerElement = containerElement;\n this._containerElement.append(this.element);\n }\n addChild(contentItem, index) {\n if (this.contentItems.length > 0) {\n throw new Error('Root node can only have a single child');\n }\n contentItem = this.layoutManager._$normalizeContentItem(contentItem, this);\n this.childElementContainer.append(contentItem.element);\n super.addChild(contentItem, index);\n this.callDownwards('setSize');\n this.emitBubblingEvent('stateChanged');\n }\n setSize(width, height) {\n var _this$_containerEleme, _this$_containerEleme2;\n width = typeof width === 'undefined' ? (_this$_containerEleme = this._containerElement.width()) !== null && _this$_containerEleme !== void 0 ? _this$_containerEleme : 0 : width;\n height = typeof height === 'undefined' ? (_this$_containerEleme2 = this._containerElement.height()) !== null && _this$_containerEleme2 !== void 0 ? _this$_containerEleme2 : 0 : height;\n this.element.width(width);\n this.element.height(height);\n\n /*\n * Root can be empty\n */\n if (this.contentItems[0]) {\n this.contentItems[0].element.width(width);\n this.contentItems[0].element.height(height);\n }\n }\n _$getArea() {\n var area = super._$getArea();\n if (area == null) {\n throw new Error('Unable to get root area');\n }\n return area;\n }\n _$highlightDropZone(x, y, area) {\n this.layoutManager.tabDropPlaceholder.remove();\n super._$highlightDropZone(x, y, area);\n }\n _$onDrop(contentItem, area) {\n var stack;\n if (isComponent(contentItem)) {\n stack = this.layoutManager.createContentItem({\n type: 'stack',\n header: contentItem.config.header || {}\n }, this);\n stack._$init();\n stack.addChild(contentItem);\n contentItem = stack;\n }\n if (!this.contentItems.length) {\n this.addChild(contentItem);\n } else {\n var {\n side\n } = area;\n var type = side === 'left' || side === 'right' ? 'row' : 'column'; // Should new root be a row or column\n var dimension = side === 'left' || side === 'right' ? 'width' : 'height';\n var insertBefore = side === 'left' || side === 'top';\n var column = this.contentItems[0];\n if (!(column instanceof RowOrColumn) || column.type != type) {\n var rowOrColumn = this.layoutManager.createContentItem({\n type: type\n }, this);\n this.replaceChild(column, rowOrColumn);\n rowOrColumn.addChild(contentItem, insertBefore ? 0 : undefined, true);\n rowOrColumn.addChild(column, insertBefore ? undefined : 0, true);\n column.config[dimension] = 50;\n contentItem.config[dimension] = 50;\n rowOrColumn.callDownwards('setSize');\n } else {\n var _sibling$config$dimen;\n var sibling = column.contentItems[insertBefore ? 0 : column.contentItems.length - 1];\n column.addChild(contentItem, insertBefore ? 0 : undefined, true);\n sibling.config[dimension] = ((_sibling$config$dimen = sibling.config[dimension]) !== null && _sibling$config$dimen !== void 0 ? _sibling$config$dimen : 0) * 0.5;\n contentItem.config[dimension] = sibling.config[dimension];\n column.callDownwards('setSize');\n }\n }\n }\n}\n//# sourceMappingURL=Root.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 $ from 'jquery';\nimport AbstractContentItem, { isComponent } from \"./AbstractContentItem.js\";\nimport { Header } from \"../controls/index.js\";\nexport default class Stack extends AbstractContentItem {\n constructor(layoutManager, config, parent) {\n var _cfg$settings, _cfg$settings2, _cfg$labels, _cfg$settings3, _cfg$labels2, _cfg$settings4, _cfg$labels3, _cfg$labels$minimise, _cfg$labels4;\n super(layoutManager, config, parent, $('<div class=\"lm_item lm_stack\"></div>'));\n _defineProperty(this, \"_activeContentItem\", null);\n _defineProperty(this, \"_header\", void 0);\n _defineProperty(this, \"childElementContainer\", $('<div class=\"lm_items\"></div>'));\n _defineProperty(this, \"header\", void 0);\n _defineProperty(this, \"parent\", void 0);\n _defineProperty(this, \"isStack\", true);\n _defineProperty(this, \"_dropZones\", {});\n _defineProperty(this, \"_dropSegment\", null);\n _defineProperty(this, \"_contentAreaDimensions\", null);\n _defineProperty(this, \"_dropIndex\", void 0);\n _defineProperty(this, \"_side\", void 0);\n _defineProperty(this, \"_sided\", false);\n _defineProperty(this, \"config\", void 0);\n this.parent = parent;\n this.config = config;\n var cfg = layoutManager.config;\n this._side = false;\n this._header = {\n // defaults' reconstruction from old configuration style\n show: ((_cfg$settings = cfg.settings) === null || _cfg$settings === void 0 ? void 0 : _cfg$settings.hasHeaders) && config.hasHeaders !== false,\n popout: (_cfg$settings2 = cfg.settings) !== null && _cfg$settings2 !== void 0 && _cfg$settings2.showPopoutIcon ? (_cfg$labels = cfg.labels) === null || _cfg$labels === void 0 ? void 0 : _cfg$labels.popout : undefined,\n maximise: (_cfg$settings3 = cfg.settings) !== null && _cfg$settings3 !== void 0 && _cfg$settings3.showMaximiseIcon ? (_cfg$labels2 = cfg.labels) === null || _cfg$labels2 === void 0 ? void 0 : _cfg$labels2.maximise : undefined,\n close: (_cfg$settings4 = cfg.settings) !== null && _cfg$settings4 !== void 0 && _cfg$settings4.showCloseIcon ? (_cfg$labels3 = cfg.labels) === null || _cfg$labels3 === void 0 ? void 0 : _cfg$labels3.close : undefined,\n minimise: (_cfg$labels$minimise = (_cfg$labels4 = cfg.labels) === null || _cfg$labels4 === void 0 ? void 0 : _cfg$labels4.minimise) !== null && _cfg$labels$minimise !== void 0 ? _cfg$labels$minimise : undefined\n };\n\n // load simplified version of header configuration (https://github.com/deepstreamIO/golden-layout/pull/245)\n if (cfg.header) this._header = _objectSpread(_objectSpread({}, this._header), cfg.header);\n if (config.header)\n // load from stack\n this._header = _objectSpread(_objectSpread({}, this._header), config.header);\n if (config.content && config.content[0] && config.content[0].header)\n // load from component if stack omitted\n this._header = _objectSpread(_objectSpread({}, this._header), config.content[0].header);\n this.header = new Header(layoutManager, this);\n this.element.append(this.header.element);\n this.element.append(this.childElementContainer);\n this._setupHeaderPosition();\n this._$validateClosability();\n }\n setSize() {\n var _this$layoutManager$c, _this$layoutManager$c2, _this$element$width, _this$element$height;\n var i,\n headerSize = this._header.show ? (_this$layoutManager$c = (_this$layoutManager$c2 = this.layoutManager.config.dimensions) === null || _this$layoutManager$c2 === void 0 ? void 0 : _this$layoutManager$c2.headerHeight) !== null && _this$layoutManager$c !== void 0 ? _this$layoutManager$c : 0 : 0,\n contentWidth = ((_this$element$width = this.element.width()) !== null && _this$element$width !== void 0 ? _this$element$width : 0) - (this._sided ? headerSize : 0),\n contentHeight = ((_this$element$height = this.element.height()) !== null && _this$element$height !== void 0 ? _this$element$height : 0) - (!this._sided ? headerSize : 0);\n this.childElementContainer.width(contentWidth);\n this.childElementContainer.height(contentHeight);\n for (i = 0; i < this.contentItems.length; i++) {\n this.contentItems[i].element.width(contentWidth).height(contentHeight);\n }\n this.emit('resize');\n this.emitBubblingEvent('stateChanged');\n }\n _$init() {\n if (this.isInitialised === true) return;\n this.header._attachWheelListener();\n super._$init();\n for (var i = 0; i < this.contentItems.length; i++) {\n this.header.createTab(this.contentItems[i]);\n this.contentItems[i]._$hide();\n }\n if (this.contentItems.length > 0) {\n var initialItem = this.contentItems[this.config.activeItemIndex || 0];\n if (!initialItem) {\n throw new Error('Configured activeItemIndex out of bounds');\n }\n this.setActiveContentItem(initialItem);\n }\n }\n setActiveContentItem(contentItem) {\n if (this.contentItems.indexOf(contentItem) === -1) {\n throw new Error('contentItem is not a child of this stack');\n }\n if (this._activeContentItem !== null) {\n this._activeContentItem._$hide();\n }\n this._activeContentItem = contentItem;\n this.header.setActiveContentItem(contentItem);\n contentItem._$show();\n this.emit('activeContentItemChanged', contentItem);\n this.layoutManager.emit('activeContentItemChanged', contentItem);\n this.emitBubblingEvent('stateChanged');\n }\n getActiveContentItem() {\n return this.header.activeContentItem;\n }\n addChild(contentItem, index) {\n contentItem = this.layoutManager._$normalizeContentItem(contentItem, this);\n super.addChild(contentItem, index);\n this.childElementContainer.append(contentItem.element);\n this.header.createTab(contentItem, index);\n this.setActiveContentItem(contentItem);\n this.callDownwards('setSize');\n this._$validateClosability();\n this.emitBubblingEvent('stateChanged');\n }\n removeChild(contentItem) {\n var keepChild = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var index = this.contentItems.indexOf(contentItem);\n super.removeChild(contentItem, keepChild);\n this.header.removeTab(contentItem);\n if (this.header.activeContentItem === contentItem) {\n if (this.contentItems.length > 0) {\n this.setActiveContentItem(this.contentItems[Math.max(index - 1, 0)]);\n } else {\n this._activeContentItem = null;\n }\n }\n this._$validateClosability();\n this.emitBubblingEvent('stateChanged');\n }\n\n /**\n * Validates that the stack is still closable or not. If a stack is able\n * to close, but has a non closable component added to it, the stack is no\n * longer closable until all components are closable.\n */\n _$validateClosability() {\n var isClosable = this.header._isClosable();\n for (var i = 0, len = this.contentItems.length; i < len; i++) {\n var _this$contentItems$i$;\n if (!isClosable) {\n break;\n }\n isClosable = (_this$contentItems$i$ = this.contentItems[i].config.isClosable) !== null && _this$contentItems$i$ !== void 0 ? _this$contentItems$i$ : false;\n }\n this.header._$setClosable(isClosable);\n }\n _$destroy() {\n AbstractContentItem.prototype._$destroy.call(this);\n this.header._$destroy();\n }\n\n /**\n * Ok, this one is going to be the tricky one: The user has dropped {contentItem} onto this stack.\n *\n * It was dropped on either the stacks header or the top, right, bottom or left bit of the content area\n * (which one of those is stored in this._dropSegment). Now, if the user has dropped on the header the case\n * is relatively clear: We add the item to the existing stack... job done (might be good to have\n * tab reordering at some point, but lets not sweat it right now)\n *\n * If the item was dropped on the content part things are a bit more complicated. If it was dropped on either the\n * top or bottom region we need to create a new column and place the items accordingly.\n * Unless, of course if the stack is already within a column... in which case we want\n * to add the newly created item to the existing column...\n * either prepend or append it, depending on wether its top or bottom.\n *\n * Same thing for rows and left / right drop segments... so in total there are 9 things that can potentially happen\n * (left, top, right, bottom) * is child of the right parent (row, column) + header drop\n *\n * @param contentItem\n */\n _$onDrop(contentItem) {\n /*\n * The item was dropped on the header area. Just add it as a child of this stack and\n * get the hell out of this logic\n */\n if (this._dropSegment === 'header') {\n this._resetHeaderDropZone();\n this.addChild(contentItem, this._dropIndex);\n return;\n }\n\n /*\n * The stack is empty. Let's just add the element.\n */\n if (this._dropSegment === 'body') {\n this.addChild(contentItem);\n return;\n }\n\n /*\n * The item was dropped on the top-, left-, bottom- or right- part of the content. Let's\n * aggregate some conditions to make the if statements later on more readable\n */\n var isVertical = this._dropSegment === 'top' || this._dropSegment === 'bottom';\n var isHorizontal = this._dropSegment === 'left' || this._dropSegment === 'right';\n var insertBefore = this._dropSegment === 'top' || this._dropSegment === 'left';\n var hasCorrectParent = isVertical && this.parent.isColumn || isHorizontal && this.parent.isRow;\n var type = isVertical ? 'column' : 'row';\n var dimension = isVertical ? 'height' : 'width';\n\n /*\n * The content item can be either a component or a stack. If it is a component, wrap it into a stack\n */\n if (isComponent(contentItem)) {\n var stack = this.layoutManager.createContentItem({\n type: 'stack',\n header: contentItem.config.header || {}\n }, this);\n stack._$init();\n stack.addChild(contentItem);\n contentItem = stack;\n }\n\n /*\n * If the item is dropped on top or bottom of a column or left and right of a row, it's already\n * layd out in the correct way. Just add it as a child\n */\n if (hasCorrectParent) {\n var _this$config$dimensio;\n var index = this.parent.contentItems.indexOf(this);\n this.parent.addChild(contentItem, insertBefore ? index : index + 1, true);\n this.config[dimension] = ((_this$config$dimensio = this.config[dimension]) !== null && _this$config$dimensio !== void 0 ? _this$config$dimensio : 0) * 0.5;\n contentItem.config[dimension] = this.config[dimension];\n this.parent.callDownwards('setSize');\n /*\n * This handles items that are dropped on top or bottom of a row or left / right of a column. We need\n * to create the appropriate contentItem for them to live in\n */\n } else {\n var rowOrColumn = this.layoutManager.createContentItem({\n type: type\n }, this);\n this.parent.replaceChild(this, rowOrColumn);\n rowOrColumn.addChild(contentItem, insertBefore ? 0 : undefined, true);\n rowOrColumn.addChild(this, insertBefore ? undefined : 0, true);\n this.config[dimension] = 50;\n contentItem.config[dimension] = 50;\n rowOrColumn.callDownwards('setSize');\n }\n }\n\n /**\n * If the user hovers above the header part of the stack, indicate drop positions for tabs.\n * otherwise indicate which segment of the body the dragged item would be dropped on\n *\n * @param x Absolute Screen X\n * @param y Absolute Screen Y\n */\n _$highlightDropZone(x, y) {\n if (!this._contentAreaDimensions) {\n return;\n }\n for (var [segment, dimensions] of Object.entries(this._contentAreaDimensions)) {\n var area = dimensions.hoverArea;\n if (area.x1 < x && area.x2 > x && area.y1 < y && area.y2 > y) {\n if (segment === 'header') {\n this._dropSegment = 'header';\n this._highlightHeaderDropZone(x);\n } else {\n this._resetHeaderDropZone();\n this._highlightBodyDropZone(segment);\n }\n return;\n }\n }\n }\n _$getArea() {\n if (this.element.is(':visible') === false) {\n return null;\n }\n var headerArea = super._$getArea(this.header.element);\n var contentArea = super._$getArea(this.childElementContainer);\n if (headerArea == null || contentArea == null) {\n return null;\n }\n var contentWidth = contentArea.x2 - contentArea.x1;\n var contentHeight = contentArea.y2 - contentArea.y1;\n this._contentAreaDimensions = {\n header: {\n hoverArea: {\n x1: headerArea.x1,\n y1: headerArea.y1,\n x2: headerArea.x2,\n y2: headerArea.y2\n },\n highlightArea: {\n x1: headerArea.x1,\n y1: headerArea.y1,\n x2: headerArea.x2,\n y2: headerArea.y2\n }\n }\n };\n\n /**\n * If this Stack is a parent to rows, columns or other stacks only its\n * header is a valid dropzone.\n */\n if (this._activeContentItem && this._activeContentItem.isComponent === false) {\n return headerArea;\n }\n\n /**\n * Highlight the entire body if the stack is empty\n */\n if (this.contentItems.length === 0) {\n this._contentAreaDimensions.body = {\n hoverArea: {\n x1: contentArea.x1,\n y1: contentArea.y1,\n x2: contentArea.x2,\n y2: contentArea.y2\n },\n highlightArea: {\n x1: contentArea.x1,\n y1: contentArea.y1,\n x2: contentArea.x2,\n y2: contentArea.y2\n }\n };\n return super._$getArea(this.element);\n }\n this._contentAreaDimensions.left = {\n hoverArea: {\n x1: contentArea.x1,\n y1: contentArea.y1,\n x2: contentArea.x1 + contentWidth * 0.25,\n y2: contentArea.y2\n },\n highlightArea: {\n x1: contentArea.x1,\n y1: contentArea.y1,\n x2: contentArea.x1 + contentWidth * 0.5,\n y2: contentArea.y2\n }\n };\n this._contentAreaDimensions.top = {\n hoverArea: {\n x1: contentArea.x1 + contentWidth * 0.25,\n y1: contentArea.y1,\n x2: contentArea.x1 + contentWidth * 0.75,\n y2: contentArea.y1 + contentHeight * 0.5\n },\n highlightArea: {\n x1: contentArea.x1,\n y1: contentArea.y1,\n x2: contentArea.x2,\n y2: contentArea.y1 + contentHeight * 0.5\n }\n };\n this._contentAreaDimensions.right = {\n hoverArea: {\n x1: contentArea.x1 + contentWidth * 0.75,\n y1: contentArea.y1,\n x2: contentArea.x2,\n y2: contentArea.y2\n },\n highlightArea: {\n x1: contentArea.x1 + contentWidth * 0.5,\n y1: contentArea.y1,\n x2: contentArea.x2,\n y2: contentArea.y2\n }\n };\n this._contentAreaDimensions.bottom = {\n hoverArea: {\n x1: contentArea.x1 + contentWidth * 0.25,\n y1: contentArea.y1 + contentHeight * 0.5,\n x2: contentArea.x1 + contentWidth * 0.75,\n y2: contentArea.y2\n },\n highlightArea: {\n x1: contentArea.x1,\n y1: contentArea.y1 + contentHeight * 0.5,\n x2: contentArea.x2,\n y2: contentArea.y2\n }\n };\n return super._$getArea(this.element);\n }\n _highlightHeaderDropZone(x) {\n var _tabsContainer$get, _this$layoutManager$t, _this$layoutManager$t2, _this$layoutManager$t3, _this$header$tabsCont, _this$header$tabsCont2, _this$layoutManager$t4, _this$header$tabsCont3, _this$header$tabsCont4, _this$header$tabsCont5, _this$layoutManager$d2, _this$header$element$6, _this$header$element$7, _this$header$element$8, _this$header$element$9, _this$header$element$10;\n var tabsLength = this.header.tabs.length;\n\n // I've omitted code for side edge tabs here\n // illumon doesn't need it, will slowly pull that code out elsewhere too\n\n // Empty stack\n if (tabsLength === 0) {\n var _this$layoutManager$d, _headerOffset$left, _headerOffset$left2, _this$header$element$, _this$header$element$2, _this$header$element$3, _this$header$element$4, _this$header$element$5;\n var headerOffset = this.header.element.offset();\n\n // we don't have a placeholder to measure in the dom, lets just cheat and make it 100px.\n (_this$layoutManager$d = this.layoutManager.dropTargetIndicator) === null || _this$layoutManager$d === void 0 ? void 0 : _this$layoutManager$d.highlightArea({\n x1: (_headerOffset$left = headerOffset === null || headerOffset === void 0 ? void 0 : headerOffset.left) !== null && _headerOffset$left !== void 0 ? _headerOffset$left : 0,\n x2: ((_headerOffset$left2 = headerOffset === null || headerOffset === void 0 ? void 0 : headerOffset.left) !== null && _headerOffset$left2 !== void 0 ? _headerOffset$left2 : 0) + 100,\n y1: (_this$header$element$ = (_this$header$element$2 = this.header.element.offset()) === null || _this$header$element$2 === void 0 ? void 0 : _this$header$element$2.top) !== null && _this$header$element$ !== void 0 ? _this$header$element$ : 0,\n y2: ((_this$header$element$3 = (_this$header$element$4 = this.header.element.offset()) === null || _this$header$element$4 === void 0 ? void 0 : _this$header$element$4.top) !== null && _this$header$element$3 !== void 0 ? _this$header$element$3 : 0) + ((_this$header$element$5 = this.header.element.innerHeight()) !== null && _this$header$element$5 !== void 0 ? _this$header$element$5 : 0)\n });\n return;\n }\n var tabsContainer = this.header.tabsContainer;\n var tabsContainerRect = (_tabsContainer$get = tabsContainer.get(0)) === null || _tabsContainer$get === void 0 ? void 0 : _tabsContainer$get.getBoundingClientRect();\n var placeholderRect = (_this$layoutManager$t = this.layoutManager.tabDropPlaceholder.get(0)) === null || _this$layoutManager$t === void 0 ? void 0 : _this$layoutManager$t.getBoundingClientRect();\n if (!tabsContainerRect || !placeholderRect) {\n return;\n }\n if (x < tabsContainerRect.left) {\n // is over left tab controls button\n // move x to a new point to inside left edge of container\n x = tabsContainerRect.left + 1;\n } else if (x > tabsContainerRect.right) {\n // is over right tab controls button\n // move x to a new point to inside right edge of container\n x = tabsContainerRect.right - 1;\n }\n var tabElement;\n var tabRect;\n\n // if its not inide a placeholder,\n if (!(placeholderRect.left < x && x < placeholderRect.right)) {\n // which tab is it over ...\n for (var i = 0; i < tabsLength; i++) {\n var _tabElement$get;\n tabElement = this.header.tabs[i].element;\n tabRect = (_tabElement$get = tabElement.get(0)) === null || _tabElement$get === void 0 ? void 0 : _tabElement$get.getBoundingClientRect();\n if (tabRect && tabRect.left < x && x < tabRect.right) {\n this._dropIndex = i;\n break;\n }\n }\n\n // we have tabRect at this x,y from the loop above\n if (tabElement && tabRect && x < tabRect.left + tabRect.width * 0.5) {\n // mostly before an element, insert placeholder before\n tabElement.before(this.layoutManager.tabDropPlaceholder);\n } else if (tabElement) {\n var _this$_dropIndex;\n // x is likely after the lhe last item, position after and increase drop index\n this._dropIndex = Math.min(((_this$_dropIndex = this._dropIndex) !== null && _this$_dropIndex !== void 0 ? _this$_dropIndex : 0) + 1, tabsLength);\n tabElement.after(this.layoutManager.tabDropPlaceholder);\n }\n }\n var placeHolderLeft = (_this$layoutManager$t2 = (_this$layoutManager$t3 = this.layoutManager.tabDropPlaceholder.offset()) === null || _this$layoutManager$t3 === void 0 ? void 0 : _this$layoutManager$t3.left) !== null && _this$layoutManager$t2 !== void 0 ? _this$layoutManager$t2 : 0;\n placeHolderLeft = Math.max(placeHolderLeft, (_this$header$tabsCont = (_this$header$tabsCont2 = this.header.tabsContainer.offset()) === null || _this$header$tabsCont2 === void 0 ? void 0 : _this$header$tabsCont2.left) !== null && _this$header$tabsCont !== void 0 ? _this$header$tabsCont : 0);\n var placeHolderRight = placeHolderLeft + ((_this$layoutManager$t4 = this.layoutManager.tabDropPlaceholder.width()) !== null && _this$layoutManager$t4 !== void 0 ? _this$layoutManager$t4 : 0);\n placeHolderRight = Math.min(placeHolderRight, ((_this$header$tabsCont3 = (_this$header$tabsCont4 = this.header.tabsContainer.offset()) === null || _this$header$tabsCont4 === void 0 ? void 0 : _this$header$tabsCont4.left) !== null && _this$header$tabsCont3 !== void 0 ? _this$header$tabsCont3 : 0) + ((_this$header$tabsCont5 = this.header.tabsContainer.innerWidth()) !== null && _this$header$tabsCont5 !== void 0 ? _this$header$tabsCont5 : 0));\n (_this$layoutManager$d2 = this.layoutManager.dropTargetIndicator) === null || _this$layoutManager$d2 === void 0 ? void 0 : _this$layoutManager$d2.highlightArea({\n x1: placeHolderLeft,\n x2: placeHolderRight,\n y1: (_this$header$element$6 = (_this$header$element$7 = this.header.element.offset()) === null || _this$header$element$7 === void 0 ? void 0 : _this$header$element$7.top) !== null && _this$header$element$6 !== void 0 ? _this$header$element$6 : 0,\n y2: ((_this$header$element$8 = (_this$header$element$9 = this.header.element.offset()) === null || _this$header$element$9 === void 0 ? void 0 : _this$header$element$9.top) !== null && _this$header$element$8 !== void 0 ? _this$header$element$8 : 0) + ((_this$header$element$10 = this.header.element.innerHeight()) !== null && _this$header$element$10 !== void 0 ? _this$header$element$10 : 0)\n });\n }\n _resetHeaderDropZone() {\n this.layoutManager.tabDropPlaceholder.remove();\n }\n _setupHeaderPosition() {\n var side = ['right', 'left', 'bottom'].some(elem => elem === this._header.show) ? this._header.show : undefined;\n this.header.element.toggle(!!this._header.show);\n if (!side) {\n return;\n }\n this._side = side;\n this._sided = ['right', 'left'].indexOf(this._side.toString()) >= 0;\n this.element.removeClass('lm_left lm_right lm_bottom');\n if (this._side) this.element.addClass('lm_' + this._side);\n if (this.element.find('.lm_header').length && this.childElementContainer) {\n var headerPosition = ['right', 'bottom'].indexOf(this._side.toString()) >= 0 ? 'before' : 'after';\n this.header.element[headerPosition](this.childElementContainer);\n this.callDownwards('setSize');\n }\n }\n _highlightBodyDropZone(segment) {\n var _this$_contentAreaDim, _this$_contentAreaDim2;\n var highlightArea = (_this$_contentAreaDim = this._contentAreaDimensions) === null || _this$_contentAreaDim === void 0 ? void 0 : (_this$_contentAreaDim2 = _this$_contentAreaDim[segment]) === null || _this$_contentAreaDim2 === void 0 ? void 0 : _this$_contentAreaDim2.highlightArea;\n if (highlightArea) {\n var _this$layoutManager$d3;\n (_this$layoutManager$d3 = this.layoutManager.dropTargetIndicator) === null || _this$layoutManager$d3 === void 0 ? void 0 : _this$layoutManager$d3.highlightArea(highlightArea);\n }\n this._dropSegment = segment;\n }\n}\n//# sourceMappingURL=Stack.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 $ from 'jquery';\nimport { isComponent } from \"../items/index.js\";\nimport { DragListener } from \"../utils/index.js\";\nimport DragProxy from \"./DragProxy.js\";\n/**\n * Represents an individual tab within a Stack's header\n *\n * @param header\n * @param contentItem\n */\nexport default class Tab {\n /**\n * The tab's html template\n */\n\n constructor(header, contentItem) {\n var _this$_layoutManager$;\n _defineProperty(this, \"header\", void 0);\n _defineProperty(this, \"contentItem\", void 0);\n _defineProperty(this, \"element\", $(Tab._template));\n _defineProperty(this, \"titleElement\", void 0);\n _defineProperty(this, \"closeElement\", void 0);\n _defineProperty(this, \"isActive\", false);\n _defineProperty(this, \"_layoutManager\", void 0);\n _defineProperty(this, \"_dragListener\", void 0);\n this.header = header;\n this.contentItem = contentItem;\n this.titleElement = this.element.find('.lm_title');\n this.closeElement = this.element.find('.lm_close_tab');\n this.closeElement[contentItem.config.isClosable ? 'show' : 'hide']();\n this.setTitle(contentItem.config.title);\n this.contentItem.on('titleChanged', this.setTitle, this);\n this._layoutManager = this.contentItem.layoutManager;\n if ((_this$_layoutManager$ = this._layoutManager.config.settings) !== null && _this$_layoutManager$ !== void 0 && _this$_layoutManager$.reorderEnabled && contentItem.config.reorderEnabled) {\n this._dragListener = new DragListener(this.element);\n this._dragListener.on('dragStart', this._onDragStart, this);\n this.contentItem.on('destroy', this._dragListener.destroy, this._dragListener);\n }\n this._onTabClick = this._onTabClick.bind(this);\n this._onCloseClick = this._onCloseClick.bind(this);\n this._onTabContentFocusIn = this._onTabContentFocusIn.bind(this);\n this._onTabContentFocusOut = this._onTabContentFocusOut.bind(this);\n this.element.on('click', this._onTabClick);\n this.element.on('auxclick', this._onTabClick);\n if (this.contentItem.config.isClosable) {\n this.closeElement.on('click', this._onCloseClick);\n this.closeElement.on('mousedown', this._onCloseMousedown);\n } else {\n this.closeElement.remove();\n }\n this.contentItem.tab = this;\n this.contentItem.emit('tab', this);\n this.contentItem.layoutManager.emit('tabCreated', this);\n if (isComponent(this.contentItem)) {\n // add focus class to tab when content\n this.contentItem.container._contentElement.on('focusin', this._onTabContentFocusIn).on('focusout', this._onTabContentFocusOut);\n this.contentItem.container.tab = this;\n this.contentItem.container.emit('tab', this);\n }\n }\n\n /**\n * Sets the tab's title to the provided string and sets\n * its title attribute to a pure text representation (without\n * html tags) of the same string.\n * @param title can contain html\n */\n setTitle() {\n var title = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n // Disabling for illumon project, we want to manage our own tooltips\n // this.element.attr( 'title', lm.utils.stripTags( title ) );\n this.titleElement.html(title);\n }\n\n /**\n * Sets this tab's active state. To programmatically\n * switch tabs, use header.setActiveContentItem( item ) instead.\n * @param isActive\n */\n setActive(isActive) {\n if (isActive === this.isActive) {\n return;\n }\n this.isActive = isActive;\n if (isActive) {\n this.element.addClass('lm_active');\n } else {\n this.element.removeClass('lm_active');\n }\n }\n\n /**\n * Destroys the tab\n *\n * @private\n * @returns {void}\n */\n _$destroy() {\n this.element.off('click', this._onTabClick);\n this.element.off('auxclick', this._onTabClick);\n this.closeElement.off('click', this._onCloseClick);\n if (isComponent(this.contentItem)) {\n this.contentItem.container._contentElement.off();\n this.contentItem.container._contentElement[0].removeEventListener('click', this._onTabContentFocusIn, true);\n }\n if (this._dragListener) {\n this.contentItem.off('destroy', this._dragListener.destroy, this._dragListener);\n this._dragListener.off('dragStart', this._onDragStart);\n this._dragListener = undefined;\n }\n this.element.remove();\n }\n\n /**\n * Callback for the DragListener\n *\n * @param x The tabs absolute x position\n * @param y The tabs absolute y position\n */\n _onDragStart(x, y) {\n var _this$contentItem$par;\n if ((_this$contentItem$par = this.contentItem.parent) !== null && _this$contentItem$par !== void 0 && _this$contentItem$par.isMaximised) {\n this.contentItem.parent.toggleMaximise();\n }\n if (!this._dragListener) {\n return;\n }\n new DragProxy(x, y, this._dragListener, this._layoutManager, this.contentItem, this.header.parent);\n }\n\n /**\n * Callback when the contentItem is focused in\n */\n _onTabContentFocusIn() {\n // Ensure only one tab is marked as having focus at a time.\n // In Firefox, if the focused element is removed from the DOM,\n // the focusout event won't trigger. This can result in two tabs\n // being erroneously marked as focused if the user's DOM element\n // is removed and they click another tab. To prevent this, we\n // remove existing \"lm_focusin\" classes first.\n $('.lm_focusin', this._layoutManager.root.element).removeClass('lm_focusin');\n this.element.addClass('lm_focusin');\n }\n\n /**\n * Callback when the contentItem is focused out\n *\n * @param {jQuery DOM event} event\n *\n * @private\n * @returns {void}\n */\n _onTabContentFocusOut() {\n if (isComponent(this.contentItem) && !this.contentItem.container._contentElement[0].contains(document.activeElement)) {\n this.element.removeClass('lm_focusin');\n }\n }\n\n /**\n * Callback when the tab is clicked\n *\n * @param event\n */\n _onTabClick(event) {\n // left mouse button or tap\n if (!event || event.button === 0) {\n var _this$element$get;\n var activeContentItem = this.header.parent.getActiveContentItem();\n if (this.contentItem !== activeContentItem && isComponent(this.contentItem)) {\n this.header.parent.setActiveContentItem(this.contentItem);\n } else if (isComponent(this.contentItem) && !this.contentItem.container._contentElement[0].contains(document.activeElement)) {\n // if no focus inside put focus onto the container\n // so focusin always fires for tabclicks\n this.contentItem.container._contentElement.focus();\n }\n if (isComponent(this.contentItem)) {\n this.contentItem.container.emit('tabClicked', event);\n }\n\n // might have been called from the dropdown\n this.header._hideAdditionalTabsDropdown();\n\n // makes sure clicked tabs scrollintoview (either those partially offscreen or in dropdown)\n (_this$element$get = this.element.get(0)) === null || _this$element$get === void 0 ? void 0 : _this$element$get.scrollIntoView({\n inline: 'nearest'\n // behaviour smooth is not possible here, as when a tab becomes active it may attempt to take focus\n // which interupts any scroll behaviour from completeting\n });\n\n // middle mouse button\n } else if (event.button === 1 && this.contentItem.config.isClosable) {\n this._onCloseClick(event);\n }\n }\n\n /**\n * Callback when the tab's close button is\n * clicked\n *\n * @param event\n */\n _onCloseClick(event) {\n event.stopPropagation();\n if (isComponent(this.contentItem)) {\n this.contentItem.container.close();\n } else {\n this.header.parent.removeChild(this.contentItem);\n }\n }\n\n /**\n * Callback to capture tab close button mousedown\n * to prevent tab from activating.\n *\n * @param event\n */\n _onCloseMousedown(event) {\n event.stopPropagation();\n }\n}\n_defineProperty(Tab, \"_template\", ['<li class=\"lm_tab\">', '<span class=\"lm_title_before\"></span>', '<span class=\"lm_title\"></span>', '<div class=\"lm_close_tab\" aria-label=\"Close tab\"></div>', '</li>'].join(''));\n//# sourceMappingURL=Tab.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 $ from 'jquery';\nimport { EventEmitter } from \"../utils/index.js\";\nimport HeaderButton from \"./HeaderButton.js\";\nimport Tab from \"./Tab.js\";\n/**\n * This class represents a header above a Stack ContentItem.\n *\n * @param layoutManager\n * @param parent\n */\nexport default class Header extends EventEmitter {\n // use for scroll repeat\n\n // mouse hold timeout to act as hold instead of click\n\n // mouse hold acceleration\n\n constructor(layoutManager, parent) {\n var _this$layoutManager$c, _this$layoutManager$c2;\n super();\n _defineProperty(this, \"layoutManager\", void 0);\n _defineProperty(this, \"element\", $(Header._template));\n _defineProperty(this, \"tabsContainer\", void 0);\n _defineProperty(this, \"tabDropdownContainer\", void 0);\n _defineProperty(this, \"tabDropdownSearch\", void 0);\n _defineProperty(this, \"tabDropdownList\", null);\n _defineProperty(this, \"controlsContainer\", void 0);\n _defineProperty(this, \"parent\", void 0);\n _defineProperty(this, \"tabs\", []);\n _defineProperty(this, \"activeContentItem\", null);\n _defineProperty(this, \"closeButton\", null);\n _defineProperty(this, \"tabDropdownButton\", null);\n _defineProperty(this, \"tabNextButton\", $(Header._nextButtonTemplate));\n _defineProperty(this, \"tabPreviousButton\", $(Header._previousButtonTemplate));\n _defineProperty(this, \"holdTimer\", null);\n _defineProperty(this, \"rAF\", null);\n _defineProperty(this, \"CLICK_TIMEOUT\", 500);\n _defineProperty(this, \"START_SPEED\", 0.01);\n _defineProperty(this, \"ACCELERATION\", 0.0005);\n _defineProperty(this, \"PADDING\", 10);\n _defineProperty(this, \"SCROLL_LEFT\", 'left');\n _defineProperty(this, \"SCROLL_RIGHT\", 'right');\n _defineProperty(this, \"isDraggingTab\", false);\n _defineProperty(this, \"isOverflowing\", false);\n _defineProperty(this, \"isDropdownShown\", false);\n _defineProperty(this, \"dropdownKeyIndex\", 0);\n _defineProperty(this, \"_lastVisibleTabIndex\", -1);\n _defineProperty(this, \"_tabControlOffset\", void 0);\n this.layoutManager = layoutManager;\n if ((_this$layoutManager$c = this.layoutManager.config.settings) !== null && _this$layoutManager$c !== void 0 && _this$layoutManager$c.selectionEnabled) {\n this.element.addClass('lm_selectable');\n this.element.on('click', this._onHeaderClick.bind(this));\n }\n this.tabsContainer = this.element.find('.lm_tabs');\n this.tabDropdownContainer = this.element.find('.lm_tabdropdown_list');\n this.tabDropdownContainer.hide();\n this.tabDropdownSearch = this.element.find('.lm_tabdropdown_search input');\n this._handleFilterInput = this._handleFilterInput.bind(this);\n this._handleFilterKeydown = this._handleFilterKeydown.bind(this);\n this.tabDropdownSearch.on('input', this._handleFilterInput);\n this.tabDropdownSearch.on('keydown', this._handleFilterKeydown);\n this.controlsContainer = this.element.find('.lm_controls');\n this.parent = parent;\n this.parent.on('resize', this._updateTabSizes, this);\n this._handleItemPickedUp = this._handleItemPickedUp.bind(this);\n this._handleItemDropped = this._handleItemDropped.bind(this);\n this._handleNextMouseEnter = this._handleNextMouseEnter.bind(this);\n this._handleNextMouseLeave = this._handleNextMouseLeave.bind(this);\n this._handlePreviousMouseEnter = this._handlePreviousMouseEnter.bind(this);\n this._handlePreviousMouseLeave = this._handlePreviousMouseLeave.bind(this);\n this._handleScrollRepeat = this._handleScrollRepeat.bind(this);\n this._handleNextButtonMouseDown = this._handleNextButtonMouseDown.bind(this);\n this._handlePreviousButtonMouseDown = this._handlePreviousButtonMouseDown.bind(this);\n this._handleScrollButtonMouseDown = this._handleScrollButtonMouseDown.bind(this);\n this._handleScrollButtonMouseUp = this._handleScrollButtonMouseUp.bind(this);\n this._handleScrollEvent = this._handleScrollEvent.bind(this);\n this.tabNextButton.on('mousedown', this._handleNextButtonMouseDown);\n this.tabPreviousButton.on('mousedown', this._handlePreviousButtonMouseDown);\n this.tabsContainer.on('scroll', this._handleScrollEvent);\n this.layoutManager.on('itemPickedUp', this._handleItemPickedUp);\n this.layoutManager.on('itemDropped', this._handleItemDropped);\n\n // append previous button template\n this.tabsContainer.before(this.tabPreviousButton);\n // change reference to just the li, not the wrapping ul\n this.tabPreviousButton = this.tabPreviousButton.find('>:first-child');\n this.tabPreviousButton.hide();\n this._showAdditionalTabsDropdown = this._showAdditionalTabsDropdown.bind(this);\n this._hideAdditionalTabsDropdown = this._hideAdditionalTabsDropdown.bind(this);\n this._tabControlOffset = (_this$layoutManager$c2 = this.layoutManager.config.settings) === null || _this$layoutManager$c2 === void 0 ? void 0 : _this$layoutManager$c2.tabControlOffset;\n this._createControls();\n }\n\n /**\n * Creates a new tab and associates it with a contentItem\n *\n * @param contentItem\n * @param index The position of the tab\n */\n createTab(contentItem, index) {\n //If there's already a tab relating to the\n //content item, don't do anything\n for (var i = 0; i < this.tabs.length; i++) {\n if (this.tabs[i].contentItem === contentItem) {\n return;\n }\n }\n var tab = new Tab(this, contentItem);\n if (this.tabs.length === 0) {\n this.tabs.push(tab);\n this.tabsContainer.append(tab.element);\n return;\n }\n if (index === undefined) {\n index = this.tabs.length;\n }\n if (index > 0) {\n this.tabs[index - 1].element.after(tab.element);\n } else {\n this.tabs[0].element.before(tab.element);\n }\n this.tabs.splice(index, 0, tab);\n this._updateTabSizes();\n }\n\n /**\n * Finds a tab based on the contentItem its associated with and removes it.\n *\n * @param contentItem\n */\n removeTab(contentItem) {\n for (var i = 0; i < this.tabs.length; i++) {\n if (this.tabs[i].contentItem === contentItem) {\n this.tabs[i]._$destroy();\n this.tabs.splice(i, 1);\n return;\n }\n }\n throw new Error('contentItem is not controlled by this header');\n }\n\n /**\n * The programmatical equivalent of clicking a Tab.\n *\n * @param contentItem\n */\n setActiveContentItem(contentItem) {\n var _this$tabs$element$ge, _this$tabs$element$ge2, _this$parent$config$a;\n var isActive;\n for (var i = 0; i < this.tabs.length; i++) {\n isActive = this.tabs[i].contentItem === contentItem;\n this.tabs[i].setActive(isActive);\n if (isActive === true) {\n this.activeContentItem = contentItem;\n this.parent.config.activeItemIndex = i;\n }\n }\n\n // makes sure dropped tabs are scrollintoview, removed any re-ordering\n (_this$tabs$element$ge = this.tabs[(_this$parent$config$a = this.parent.config.activeItemIndex) !== null && _this$parent$config$a !== void 0 ? _this$parent$config$a : 0].element.get(0)) === null || _this$tabs$element$ge === void 0 ? void 0 : (_this$tabs$element$ge2 = _this$tabs$element$ge.scrollIntoView) === null || _this$tabs$element$ge2 === void 0 ? void 0 : _this$tabs$element$ge2.call(_this$tabs$element$ge, {\n // Optional chain scrollIntoView call so tests do not error\n inline: 'nearest'\n });\n this._hideAdditionalTabsDropdown();\n this._updateTabSizes();\n this.parent.emitBubblingEvent('stateChanged');\n }\n\n /**\n * Programmatically operate with header position.\n *\n * @param position one of ('top','left','right','bottom') to set or empty to get it.\n *\n * @returns previous header position\n */\n position(position) {\n var previous = this.parent._header.show;\n if (previous && !this.parent._side) previous = 'top';\n if (position !== undefined && this.parent._header.show !== position) {\n this.parent._header.show = position;\n this.parent._setupHeaderPosition();\n }\n return previous;\n }\n\n // Manually attaching so wheel can be passive instead of jquery .on\n // _attachWheelListener is called by parent init\n _attachWheelListener() {\n var _this$tabsContainer$g;\n (_this$tabsContainer$g = this.tabsContainer.get(0)) === null || _this$tabsContainer$g === void 0 ? void 0 : _this$tabsContainer$g.addEventListener('wheel', this._handleWheelEvent, {\n passive: true\n });\n }\n\n // detach called by this.destroy\n _detachWheelListener() {\n var _this$tabsContainer$g2;\n (_this$tabsContainer$g2 = this.tabsContainer.get(0)) === null || _this$tabsContainer$g2 === void 0 ? void 0 : _this$tabsContainer$g2.removeEventListener('wheel', this._handleWheelEvent);\n }\n _handleWheelEvent(event) {\n var target = event.currentTarget;\n if (!(target instanceof HTMLElement)) {\n return;\n }\n\n // we only care about the larger of the two deltas\n var delta = Math.abs(event.deltaY) > Math.abs(event.deltaX) ? event.deltaY : event.deltaX;\n\n // jshint\n /* globals WheelEvent */\n if (event.deltaMode === WheelEvent.DOM_DELTA_PAGE) {\n var _this$tabsContainer$i;\n // Users can set OS to be in deltaMode page\n // scrolly by page units as pixels\n delta *= (_this$tabsContainer$i = this.tabsContainer.innerWidth()) !== null && _this$tabsContainer$i !== void 0 ? _this$tabsContainer$i : 1;\n } else if (event.deltaMode === WheelEvent.DOM_DELTA_LINE) {\n // chrome goes 100px per 3 lines, and firefox would go 102 per 3 (17 lineheight * 3 lines * 2)\n delta *= 100 / 3;\n }\n target.scrollLeft += Math.round(delta);\n }\n\n // on scroll we need to check if side error might need to be disabled\n _handleScrollEvent() {\n this._checkScrollArrows();\n }\n\n // when and item is picked up, attach mouse enter listeners to next/previous buttons\n _handleItemPickedUp() {\n this.isDraggingTab = true;\n if (this.isDropdownShown) this._hideAdditionalTabsDropdown();\n this.controlsContainer.on('mouseenter', this._handleNextMouseEnter);\n this.tabPreviousButton.on('mouseenter', this._handlePreviousMouseEnter);\n }\n\n // when an item is dropped remove listeners and cancel animation\n _handleItemDropped() {\n var _this$rAF;\n this.isDraggingTab = false;\n window.cancelAnimationFrame((_this$rAF = this.rAF) !== null && _this$rAF !== void 0 ? _this$rAF : -1);\n this.rAF = null;\n this.controlsContainer.off('mouseenter', this._handleNextMouseEnter);\n this.controlsContainer.off('mouseleave', this._handleNextMouseLeave);\n this.tabPreviousButton.off('mouseenter', this._handlePreviousMouseEnter);\n this.tabPreviousButton.off('mouseleave', this._handlePreviousMouseLeave);\n }\n\n // on next/previous enter start scroll repeat animation loop\n // and attach a listener looking for mouseleave\n // cancel animation on mouse leave, and remove leave listener\n _handleNextMouseEnter() {\n var _this$tabsContainer$s;\n this.controlsContainer.on('mouseleave', this._handleNextMouseLeave);\n this._handleScrollRepeat(this.SCROLL_RIGHT, (_this$tabsContainer$s = this.tabsContainer.scrollLeft()) !== null && _this$tabsContainer$s !== void 0 ? _this$tabsContainer$s : 0);\n }\n _handlePreviousMouseEnter() {\n var _this$tabsContainer$s2;\n this.tabPreviousButton.on('mouseleave', this._handlePreviousMouseLeave);\n this._handleScrollRepeat(this.SCROLL_LEFT, (_this$tabsContainer$s2 = this.tabsContainer.scrollLeft()) !== null && _this$tabsContainer$s2 !== void 0 ? _this$tabsContainer$s2 : 0);\n }\n _handleNextMouseLeave() {\n var _this$rAF2;\n window.cancelAnimationFrame((_this$rAF2 = this.rAF) !== null && _this$rAF2 !== void 0 ? _this$rAF2 : -1);\n this.rAF = null;\n this.controlsContainer.off('mouseleave', this._handleNextMouseLeave);\n }\n _handlePreviousMouseLeave() {\n var _this$rAF3;\n window.cancelAnimationFrame((_this$rAF3 = this.rAF) !== null && _this$rAF3 !== void 0 ? _this$rAF3 : -1);\n this.rAF = null;\n this.tabPreviousButton.off('mouseleave', this._handlePreviousMouseLeave);\n }\n\n // scroll one tab to the right on mouse down\n // start scrollRepeat if mouse is held down\n _handleNextButtonMouseDown() {\n var rightOffscreenChild;\n for (var i = 0; i < this.tabs.length; i += 1) {\n var _this$tabs$i$element$, _this$tabs$i$element$2, _this$tabsContainer$g3, _this$tabsContainer$g4, _this$tabsContainer$s3;\n if (((_this$tabs$i$element$ = (_this$tabs$i$element$2 = this.tabs[i].element.get(0)) === null || _this$tabs$i$element$2 === void 0 ? void 0 : _this$tabs$i$element$2.offsetLeft) !== null && _this$tabs$i$element$ !== void 0 ? _this$tabs$i$element$ : 0) > ((_this$tabsContainer$g3 = (_this$tabsContainer$g4 = this.tabsContainer.get(0)) === null || _this$tabsContainer$g4 === void 0 ? void 0 : _this$tabsContainer$g4.offsetWidth) !== null && _this$tabsContainer$g3 !== void 0 ? _this$tabsContainer$g3 : 0) + ((_this$tabsContainer$s3 = this.tabsContainer.scrollLeft()) !== null && _this$tabsContainer$s3 !== void 0 ? _this$tabsContainer$s3 : 0)) {\n rightOffscreenChild = this.tabs[i].element.get(0);\n break;\n }\n }\n if (rightOffscreenChild) {\n rightOffscreenChild.scrollIntoView({\n behavior: 'smooth',\n inline: 'nearest'\n });\n this._handleScrollButtonMouseDown(this.SCROLL_RIGHT);\n } else {\n var tabsContainer = this.tabsContainer.get(0);\n if (tabsContainer) {\n var _this$tabsContainer$g5, _this$tabsContainer$g6;\n tabsContainer.scrollLeft = (_this$tabsContainer$g5 = (_this$tabsContainer$g6 = this.tabsContainer.get(0)) === null || _this$tabsContainer$g6 === void 0 ? void 0 : _this$tabsContainer$g6.scrollWidth) !== null && _this$tabsContainer$g5 !== void 0 ? _this$tabsContainer$g5 : 0;\n }\n }\n }\n\n // scroll left by one tab\n // start scrollRepeat if mouse is held down\n _handlePreviousButtonMouseDown() {\n var leftOffscreenChild;\n for (var i = this.tabs.length - 1; i >= 0; i -= 1) {\n var _this$tabs$i$element$3, _this$tabs$i$element$4, _this$tabsContainer$s4;\n if (((_this$tabs$i$element$3 = (_this$tabs$i$element$4 = this.tabs[i].element.get(0)) === null || _this$tabs$i$element$4 === void 0 ? void 0 : _this$tabs$i$element$4.offsetLeft) !== null && _this$tabs$i$element$3 !== void 0 ? _this$tabs$i$element$3 : 0) < ((_this$tabsContainer$s4 = this.tabsContainer.scrollLeft()) !== null && _this$tabsContainer$s4 !== void 0 ? _this$tabsContainer$s4 : 0)) {\n leftOffscreenChild = this.tabs[i].element.get(0);\n break;\n }\n }\n if (leftOffscreenChild) {\n leftOffscreenChild.scrollIntoView({\n behavior: 'smooth',\n inline: 'start'\n });\n this._handleScrollButtonMouseDown(this.SCROLL_LEFT);\n } else {\n var tabsContainer = this.tabsContainer.get(0);\n if (tabsContainer) {\n tabsContainer.scrollLeft = 0;\n }\n }\n }\n\n // when hold timer is reached start scroll repeat anim loop\n // cancel it when mouse up happens anywhere\n _handleScrollButtonMouseDown(direction) {\n // closure so that scrollLeft is value at end of timer, and not start of timer\n this.holdTimer = window.setTimeout(() => {\n var _this$tabsContainer$s5;\n this._handleScrollRepeat(direction, (_this$tabsContainer$s5 = this.tabsContainer.scrollLeft()) !== null && _this$tabsContainer$s5 !== void 0 ? _this$tabsContainer$s5 : 0, 100); // kickstart deltaX to be faster\n }, this.CLICK_TIMEOUT);\n window.addEventListener('mouseup', this._handleScrollButtonMouseUp);\n }\n\n // cancel scroll repeat\n _handleScrollButtonMouseUp() {\n var _this$holdTimer, _this$rAF4;\n clearTimeout((_this$holdTimer = this.holdTimer) !== null && _this$holdTimer !== void 0 ? _this$holdTimer : -1);\n this.holdTimer = null;\n cancelAnimationFrame((_this$rAF4 = this.rAF) !== null && _this$rAF4 !== void 0 ? _this$rAF4 : -1);\n this.rAF = null;\n window.removeEventListener('mouseup', this._handleScrollButtonMouseUp);\n }\n\n // disables scroll arrow if at edge of scroll area\n _checkScrollArrows() {\n var _this$tabsContainer$s6, _this$tabsContainer$i2, _this$tabsContainer$g7;\n if (this.tabsContainer.scrollLeft() === 0) {\n this.tabPreviousButton.first().prop('disabled', true);\n } else if (((_this$tabsContainer$s6 = this.tabsContainer.scrollLeft()) !== null && _this$tabsContainer$s6 !== void 0 ? _this$tabsContainer$s6 : 0) + ((_this$tabsContainer$i2 = this.tabsContainer.innerWidth()) !== null && _this$tabsContainer$i2 !== void 0 ? _this$tabsContainer$i2 : 0) === ((_this$tabsContainer$g7 = this.tabsContainer.get(0)) === null || _this$tabsContainer$g7 === void 0 ? void 0 : _this$tabsContainer$g7.scrollWidth)) {\n this.tabNextButton.prop('disabled', true);\n } else {\n this.tabNextButton.prop('disabled', false);\n this.tabPreviousButton.first().prop('disabled', false);\n }\n }\n\n // scrolls the tab header container on drag tab over control buttons\n // or on press and hold of scroll arrows at either end\n // called recurisevly in an animation loop until cancelled\n // or directional end is reached\n _handleScrollRepeat(direction, startX) {\n var _this$rAF5;\n var deltaX = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var prevTimestamp = arguments.length > 3 ? arguments[3] : undefined;\n var tabContainer = this.tabsContainer.get(0);\n if (!tabContainer) {\n return;\n }\n var tabContainerRect = tabContainer.getBoundingClientRect();\n if (direction === this.SCROLL_LEFT) {\n this.tabsContainer.scrollLeft(startX - deltaX);\n if (this.isDraggingTab) {\n // update drag placeholder\n this.parent._highlightHeaderDropZone(tabContainerRect.left - 1);\n }\n // stop loop at left edge\n if (this.tabsContainer.scrollLeft() === 0) {\n this._checkScrollArrows();\n return;\n }\n } else if (direction === this.SCROLL_RIGHT) {\n var _this$tabsContainer$s7, _this$tabsContainer$i3;\n this.tabsContainer.scrollLeft(startX + deltaX);\n if (this.isDraggingTab) {\n // update drag placeholder\n this.parent._highlightHeaderDropZone(tabContainerRect.right + 1);\n }\n // stop loop at right edge\n if (((_this$tabsContainer$s7 = this.tabsContainer.scrollLeft()) !== null && _this$tabsContainer$s7 !== void 0 ? _this$tabsContainer$s7 : 0) + ((_this$tabsContainer$i3 = this.tabsContainer.innerWidth()) !== null && _this$tabsContainer$i3 !== void 0 ? _this$tabsContainer$i3 : 0) === tabContainer.scrollWidth) {\n this._checkScrollArrows();\n return;\n }\n }\n\n // setup animation loop, scroll with acceleration\n window.cancelAnimationFrame((_this$rAF5 = this.rAF) !== null && _this$rAF5 !== void 0 ? _this$rAF5 : -1);\n this.rAF = window.requestAnimationFrame(timestamp => {\n var _this$tabsContainer$g8, _this$tabsContainer$g9;\n var startTime = prevTimestamp || timestamp;\n var deltaTime = timestamp - startTime;\n var newDeltaX = this.START_SPEED * deltaTime + 0.5 * this.ACCELERATION * (deltaTime * deltaTime);\n newDeltaX = Math.min(newDeltaX, (_this$tabsContainer$g8 = (_this$tabsContainer$g9 = this.tabsContainer.get(0)) === null || _this$tabsContainer$g9 === void 0 ? void 0 : _this$tabsContainer$g9.scrollWidth) !== null && _this$tabsContainer$g8 !== void 0 ? _this$tabsContainer$g8 : Infinity);\n this._handleScrollRepeat(direction, startX, newDeltaX, startTime);\n });\n }\n\n /**\n * Programmatically set closability.\n * @param isClosable Whether to enable/disable closability.\n * @returns Whether the action was successful\n */\n _$setClosable(isClosable) {\n if (this.closeButton && this._isClosable()) {\n this.closeButton.element[isClosable ? 'show' : 'hide']();\n return true;\n }\n return false;\n }\n\n /**\n * Destroys the entire header\n */\n _$destroy() {\n this.emit('destroy', this);\n for (var i = 0; i < this.tabs.length; i++) {\n this.tabs[i]._$destroy();\n }\n this._detachWheelListener();\n this._handleItemDropped();\n $(document).off('mouseup', this._hideAdditionalTabsDropdown);\n this.tabDropdownSearch.off('input', this._handleFilterInput);\n this.tabDropdownSearch.off('keydown', this._handleFilterKeydown);\n this.element.remove();\n }\n\n /**\n * get settings from header\n *\n * @returns when exists\n */\n _getHeaderSetting(name) {\n if (name in this.parent._header) return this.parent._header[name];\n }\n\n /**\n * Creates the popout, maximise and close buttons in the header's top right corner\n */\n _createControls() {\n var closeStack, popout, label, maximise, tabDropdownLabel, tabOverflowNextLabel, tabOverflowPreviousLabel;\n\n /**\n * Dropdown to show additional tabs.\n */\n\n tabDropdownLabel = this.layoutManager.config.labels.tabDropdown;\n tabOverflowNextLabel = this.layoutManager.config.labels.tabNextLabel;\n tabOverflowPreviousLabel = this.layoutManager.config.labels.tabPreviousLabel;\n this.tabDropdownButton = new HeaderButton(this, tabDropdownLabel, 'lm_tabdropdown', this._showAdditionalTabsDropdown);\n this.tabDropdownButton.element.hide();\n this.controlsContainer.prepend(this.tabNextButton);\n this.tabNextButton.hide();\n\n /**\n * Popout control to launch component in new window.\n */\n if (this._getHeaderSetting('popout')) {\n popout = this._onPopoutClick.bind(this);\n label = this._getHeaderSetting('popout');\n new HeaderButton(this, label, 'lm_popout', popout);\n }\n\n /**\n * Maximise control - set the component to the full size of the layout\n */\n if (this._getHeaderSetting('maximise')) {\n maximise = this.parent.toggleMaximise.bind(this.parent);\n var maximiseLabel = this._getHeaderSetting('maximise');\n var minimiseLabel = this._getHeaderSetting('minimise');\n var maximiseButton = new HeaderButton(this, maximiseLabel, 'lm_maximise', maximise);\n this.parent.on('maximised', function () {\n maximiseButton.element.attr('title', minimiseLabel !== null && minimiseLabel !== void 0 ? minimiseLabel : '');\n });\n this.parent.on('minimised', function () {\n maximiseButton.element.attr('title', maximiseLabel !== null && maximiseLabel !== void 0 ? maximiseLabel : '');\n });\n }\n\n /**\n * Close button\n */\n if (this._isClosable()) {\n closeStack = this.parent.remove.bind(this.parent);\n label = this._getHeaderSetting('close');\n this.closeButton = new HeaderButton(this, label, 'lm_close', closeStack);\n }\n }\n\n /**\n * Shows drop down for additional tabs when there are too many to display.\n *\n * @returns {void}\n */\n _showAdditionalTabsDropdown() {\n if (this.isDropdownShown) {\n this._hideAdditionalTabsDropdown();\n return;\n }\n\n // clone tabs in the current list, with event listeners\n // and add them to the drop down\n this.tabDropdownList = this.tabsContainer.clone(true).appendTo(this.tabDropdownContainer).children().removeClass('lm_active');\n\n // move it to be absolutely positioned in document root\n // as header has overflow hidden, and we need to escape that\n $(document.body).append(this.tabDropdownContainer);\n\n // show the dropdown\n this.tabDropdownContainer.show();\n this.isDropdownShown = true;\n\n // dropdown is a part of the header z-index context\n // add class to header when dropdown is open\n // so we can bump the z-index of the lists parent\n this.element.addClass('lm_dropdown_open');\n\n // focus the dropdown filter list input\n this.tabDropdownSearch.val('').focus();\n this.dropdownKeyIndex = 0;\n this.tabDropdownList.eq(this.dropdownKeyIndex).addClass('lm_keyboard_active');\n $(document).on('mousedown', this._hideAdditionalTabsDropdown);\n this._updateAdditionalTabsDropdown();\n }\n\n // enables synthetic keyboard navigation of the list\n _handleFilterKeydown(e) {\n if (e.key === 'Escape') {\n this._hideAdditionalTabsDropdown();\n return;\n }\n\n // a negative dropdownKeyIndex means the list is filtered to an empty state\n if (this.dropdownKeyIndex === -1) return;\n if (e.key === 'Enter' || e.key === ' ') {\n // simulate \"click\"\n this._hideAdditionalTabsDropdown();\n this.tabs[this.dropdownKeyIndex]._onTabClick();\n return;\n }\n function getNextDropdownIndex(startIndex, delta, tabDropdownList) {\n if (tabDropdownList == null || tabDropdownList.length < 2) {\n return -1;\n }\n var i = (startIndex + delta + tabDropdownList.length) % tabDropdownList.length;\n while (i !== startIndex) {\n if (tabDropdownList.eq(i).css('display') !== 'none') {\n return i;\n }\n i = (i + delta + tabDropdownList.length) % tabDropdownList.length;\n }\n return startIndex;\n }\n\n // allow tab or arrow key navigation of list, prevent tabs default behaviour\n if (e.key === 'ArrowDown' || e.key === 'Tab' && e.shiftKey === false) {\n var _this$tabDropdownList, _this$tabDropdownList2;\n e.preventDefault();\n (_this$tabDropdownList = this.tabDropdownList) === null || _this$tabDropdownList === void 0 ? void 0 : _this$tabDropdownList.eq(this.dropdownKeyIndex).removeClass('lm_keyboard_active');\n this.dropdownKeyIndex = getNextDropdownIndex(this.dropdownKeyIndex, 1, this.tabDropdownList);\n (_this$tabDropdownList2 = this.tabDropdownList) === null || _this$tabDropdownList2 === void 0 ? void 0 : _this$tabDropdownList2.eq(this.dropdownKeyIndex).addClass('lm_keyboard_active');\n } else if (e.key === 'ArrowUp' || e.key === 'Tab') {\n var _this$tabDropdownList3, _this$tabDropdownList4;\n e.preventDefault();\n (_this$tabDropdownList3 = this.tabDropdownList) === null || _this$tabDropdownList3 === void 0 ? void 0 : _this$tabDropdownList3.eq(this.dropdownKeyIndex).removeClass('lm_keyboard_active');\n this.dropdownKeyIndex = getNextDropdownIndex(this.dropdownKeyIndex, -1, this.tabDropdownList);\n (_this$tabDropdownList4 = this.tabDropdownList) === null || _this$tabDropdownList4 === void 0 ? void 0 : _this$tabDropdownList4.eq(this.dropdownKeyIndex).addClass('lm_keyboard_active');\n }\n }\n\n // filters the list\n _handleFilterInput(event) {\n if (this.tabDropdownList == null) {\n return;\n }\n // reset keyboard index\n this.tabDropdownList.eq(this.dropdownKeyIndex).removeClass('lm_keyboard_active');\n this.dropdownKeyIndex = -1;\n for (var i = 0; i < this.tabDropdownList.length; i++) {\n var _this$tabs$i$contentI, _this$tabs$i$contentI2;\n if (((_this$tabs$i$contentI = (_this$tabs$i$contentI2 = this.tabs[i].contentItem.config.title) === null || _this$tabs$i$contentI2 === void 0 ? void 0 : _this$tabs$i$contentI2.toLowerCase().indexOf(event.target.value.toLowerCase())) !== null && _this$tabs$i$contentI !== void 0 ? _this$tabs$i$contentI : -1) !== -1) {\n this.tabDropdownList.eq(i).css('display', '');\n if (this.dropdownKeyIndex === -1) this.dropdownKeyIndex = i;\n } else {\n this.tabDropdownList.eq(i).css('display', 'none');\n }\n }\n if (this.dropdownKeyIndex !== -1) {\n this.tabDropdownList.eq(this.dropdownKeyIndex).addClass('lm_keyboard_active');\n }\n }\n\n /**\n * Hides drop down for additional tabs when needed. It is called via mousedown\n * event on document when list is open, or programmatically when drag starts,\n * or active tab changes etc.\n */\n _hideAdditionalTabsDropdown(event) {\n var _this$tabDropdownCont, _this$tabDropdownButt;\n // dropdown already closed, do nothing\n if (!this.isDropdownShown) return;\n if (event && (_this$tabDropdownCont = this.tabDropdownContainer.get(0)) !== null && _this$tabDropdownCont !== void 0 && _this$tabDropdownCont.contains(event.target)) {\n // prevent events occuring inside the list from causing a close\n return;\n } else if (event && ((_this$tabDropdownButt = this.tabDropdownButton) === null || _this$tabDropdownButt === void 0 ? void 0 : _this$tabDropdownButt.element.get(0)) === event.target) {\n // do nothing on the mouse down so that the click event can close, rather then re-open\n return;\n }\n this.element.removeClass('lm_dropdown_open');\n this.tabDropdownContainer.hide();\n this.isDropdownShown = false;\n\n // put it back in the header dom to keep the root tidy\n this.element.append(this.tabDropdownContainer);\n\n // remove the current tab list\n this.tabDropdownContainer.find('.lm_tabs').remove();\n $(document).off('mousedown', this._hideAdditionalTabsDropdown);\n }\n\n /**\n * Ensures additional tab drop down which is absolutely positioned in the root\n * doesn't overflow the screen, and instead becomes scrollable. Positions the\n * floating menu in the correct location relative to the dropdown button.\n */\n _updateAdditionalTabsDropdown() {\n var _this$tabDropdownCont2, _this$tabDropdownCont3, _$$height, _$$width;\n if (!this.isDropdownShown) return;\n if (!this.tabDropdownList || this.tabDropdownList.length == 0) return;\n var scrollHeight = (_this$tabDropdownCont2 = (_this$tabDropdownCont3 = this.tabDropdownContainer.get(0)) === null || _this$tabDropdownCont3 === void 0 ? void 0 : _this$tabDropdownCont3.scrollHeight) !== null && _this$tabDropdownCont2 !== void 0 ? _this$tabDropdownCont2 : 0;\n if (scrollHeight === 0) return; // height can be zero if called on a hidden or empty list\n\n var list_rect = this.tabDropdownContainer[0].getBoundingClientRect();\n var windowHeight = (_$$height = $(window).height()) !== null && _$$height !== void 0 ? _$$height : 0;\n var windowWidth = (_$$width = $(window).width()) !== null && _$$width !== void 0 ? _$$width : 0;\n\n // position relative to the dropdown button\n if (!this.tabDropdownButton) return;\n var button_rect = this.tabDropdownButton.element[0].getBoundingClientRect();\n\n // If it fits below button, put it there. If it doesn't and there is more\n // than 60% space above, then flip to displaying menu above button\n var hasSpaceBelow = scrollHeight < windowHeight - button_rect.bottom;\n var shouldFlip = !hasSpaceBelow && button_rect.bottom > windowHeight * 0.6; // 0.6 bias to not flipping rather than strictly 0.5\n\n // keep from going of right edge\n // when flipped offset to right edge of button\n var left = Math.min(button_rect.left + (shouldFlip ? button_rect.width : 0), windowWidth - list_rect.width - this.PADDING);\n // flip, with limit of top of screen\n var top = shouldFlip ? Math.max(button_rect.top - scrollHeight, this.PADDING) : button_rect.bottom;\n\n // if needs scroll to fit, apply a max-height\n var maxHeight = windowHeight - top - this.PADDING;\n this.tabDropdownContainer.css({\n 'max-height': maxHeight,\n top,\n left\n });\n }\n\n /**\n * Checks whether the header is closable based on the parent config and\n * the global config.\n *\n * @returns Whether the header is closable.\n */\n _isClosable() {\n return Boolean(this.parent.config.isClosable && this.layoutManager.config.settings.showCloseIcon);\n }\n _onPopoutClick() {\n if (this.layoutManager.config.settings.popoutWholeStack === true) {\n this.parent.popout();\n } else {\n var _this$activeContentIt;\n (_this$activeContentIt = this.activeContentItem) === null || _this$activeContentIt === void 0 ? void 0 : _this$activeContentIt.popout();\n }\n }\n\n /**\n * Invoked when the header's background is clicked (not it's tabs or controls)\n *\n * @param event\n */\n _onHeaderClick(event) {\n if (event.target === this.element[0]) {\n this.parent.select();\n }\n }\n\n /**\n * Pushes the tabs to the tab dropdown if the available space is not sufficient\n */\n _updateTabSizes() {\n if (this.tabs.length === 0) {\n return;\n }\n var tabsContainer = this.tabsContainer.get(0);\n if (this.isDropdownShown) {\n // resize the dropdown list too as it is currently open\n this._updateAdditionalTabsDropdown();\n }\n if (!tabsContainer) {\n return;\n }\n if (!this.isOverflowing && tabsContainer.scrollWidth > tabsContainer.clientWidth) {\n var _this$tabDropdownButt2;\n (_this$tabDropdownButt2 = this.tabDropdownButton) === null || _this$tabDropdownButt2 === void 0 ? void 0 : _this$tabDropdownButt2.element.show();\n this.tabNextButton.show();\n this.tabPreviousButton.show();\n this.isOverflowing = true;\n } else if (this.isOverflowing && tabsContainer.scrollWidth <= tabsContainer.clientWidth) {\n var _this$tabDropdownButt3;\n (_this$tabDropdownButt3 = this.tabDropdownButton) === null || _this$tabDropdownButt3 === void 0 ? void 0 : _this$tabDropdownButt3.element.hide();\n this.tabNextButton.hide();\n this.tabPreviousButton.hide();\n this.isOverflowing = false;\n }\n if (this.isOverflowing) this._checkScrollArrows();\n }\n}\n_defineProperty(Header, \"_template\", ['<div class=\"lm_header\">', '<ul class=\"lm_tabs\"></ul>', '<ul class=\"lm_controls\"></ul>', '<ul class=\"lm_tabdropdown_list\">', '<li class=\"lm_tabdropdown_search\"><input type=\"text\" placeholder=\"Find tab...\"></li>', '</ul>', '</div>'].join(''));\n_defineProperty(Header, \"_previousButtonTemplate\", ['<ul class=\"lm_controls\">', '<li class=\"lm_tabpreviousbutton\"></li>', '</ul>'].join(''));\n_defineProperty(Header, \"_nextButtonTemplate\", ['<li class=\"lm_tabnextbutton\"></li>'].join(''));\n//# sourceMappingURL=Header.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 $ from 'jquery';\nimport { DragListener } from \"../utils/index.js\";\nexport default class Splitter {\n constructor(isVertical, size, grabSize) {\n _defineProperty(this, \"_isVertical\", void 0);\n _defineProperty(this, \"_size\", void 0);\n _defineProperty(this, \"_grabSize\", void 0);\n _defineProperty(this, \"_dragListener\", void 0);\n _defineProperty(this, \"element\", void 0);\n this._isVertical = isVertical;\n this._size = size;\n this._grabSize = grabSize < size ? size : grabSize;\n this.element = this._createElement();\n this._dragListener = new DragListener(this.element);\n }\n on(event, callback, context) {\n var _this$_dragListener;\n (_this$_dragListener = this._dragListener) === null || _this$_dragListener === void 0 ? void 0 : _this$_dragListener.on(event, callback, context);\n }\n _$destroy() {\n var _this$_dragListener2;\n (_this$_dragListener2 = this._dragListener) === null || _this$_dragListener2 === void 0 ? void 0 : _this$_dragListener2.destroy();\n this._dragListener = null;\n this.element.remove();\n }\n _createElement() {\n var dragHandle = $('<div class=\"lm_drag_handle\"></div>');\n var element = $('<div class=\"lm_splitter\"></div>');\n element.append(dragHandle);\n var handleExcessSize = this._grabSize - this._size;\n var handleExcessPos = handleExcessSize / 2;\n if (this._isVertical) {\n dragHandle.css('top', -handleExcessPos);\n dragHandle.css('height', this._size + handleExcessSize);\n element.addClass('lm_vertical');\n element['height'](this._size);\n } else {\n dragHandle.css('left', -handleExcessPos);\n dragHandle.css('width', this._size + handleExcessSize);\n element.addClass('lm_horizontal');\n element['width'](this._size);\n }\n return element;\n }\n}\n//# sourceMappingURL=Splitter.js.map","import * as config from \"./config/index.js\";\nimport * as container from \"./container/index.js\";\nimport * as controls from \"./controls/index.js\";\nimport * as errors from \"./errors/index.js\";\nimport * as items from \"./items/index.js\";\nimport * as utils from \"./utils/index.js\";\nvar lm = {\n config,\n container,\n controls,\n errors,\n items,\n utils\n};\nexport default lm;\n//# sourceMappingURL=base.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 $ from 'jquery';\nimport lm from \"./base.js\";\nimport { defaultConfig } from \"./config/index.js\";\nimport { BrowserPopout, DragSource, DragSourceFromEvent, DropTargetIndicator } from \"./controls/index.js\";\nimport { ConfigurationError } from \"./errors/index.js\";\nimport { AbstractContentItem, isStack, Component, Root, RowOrColumn, Stack } from \"./items/index.js\";\nimport { minifyConfig, unminifyConfig, EventEmitter, EventHub, ReactComponentHandler, getQueryStringParam, getUniqueId, stripTags } from \"./utils/index.js\";\n/**\n * The main class that will be exposed as GoldenLayout.\n *\n * @param config\n * @param container Can be a jQuery selector string or a Dom element. Defaults to body\n */\nexport class LayoutManager extends EventEmitter {\n /**\n * Hook that allows to access private classes\n */\n\n /**\n * Takes a GoldenLayout configuration object and\n * replaces its keys and values recursively with\n * one letter codes\n *\n * @param config A GoldenLayout config object\n * @returns minified config\n */\n static minifyConfig(config) {\n return minifyConfig(config);\n }\n\n /**\n * Takes a configuration Object that was previously minified\n * using minifyConfig and returns its original version\n *\n * @param minifiedConfig\n * @returns the original configuration\n */\n static unminifyConfig(config) {\n return unminifyConfig(config);\n }\n\n // This will be created after init is called.\n\n constructor(config, container) {\n super();\n _defineProperty(this, \"isInitialised\", false);\n _defineProperty(this, \"_isFullPage\", false);\n _defineProperty(this, \"_resizeTimeoutId\", void 0);\n _defineProperty(this, \"_components\", {\n 'lm-react-component': ReactComponentHandler\n });\n _defineProperty(this, \"_fallbackComponent\", void 0);\n _defineProperty(this, \"_itemAreas\", []);\n _defineProperty(this, \"_maximisedItem\", null);\n _defineProperty(this, \"_maximisePlaceholder\", $('<div class=\"lm_maximise_place\"></div>'));\n _defineProperty(this, \"_creationTimeoutPassed\", false);\n _defineProperty(this, \"_subWindowsCreated\", false);\n _defineProperty(this, \"_dragSources\", []);\n _defineProperty(this, \"_updatingColumnsResponsive\", false);\n _defineProperty(this, \"_firstLoad\", true);\n _defineProperty(this, \"_reactChildMap\", new Map());\n _defineProperty(this, \"_reactChildren\", null);\n _defineProperty(this, \"width\", null);\n _defineProperty(this, \"height\", null);\n _defineProperty(this, \"root\", void 0);\n _defineProperty(this, \"openPopouts\", []);\n _defineProperty(this, \"selectedItem\", null);\n _defineProperty(this, \"isSubWindow\", false);\n _defineProperty(this, \"eventHub\", new EventHub(this));\n _defineProperty(this, \"config\", void 0);\n _defineProperty(this, \"container\", void 0);\n _defineProperty(this, \"_originalContainer\", void 0);\n _defineProperty(this, \"dropTargetIndicator\", null);\n _defineProperty(this, \"tabDropPlaceholder\", $('<div class=\"lm_drop_tab_placeholder\"></div>'));\n _defineProperty(this, \"_typeToItem\", void 0);\n this._onResize = this._onResize.bind(this);\n this._onUnload = this._onUnload.bind(this);\n this._windowBlur = this._windowBlur.bind(this);\n this._windowFocus = this._windowFocus.bind(this);\n this.config = this._createConfig(config);\n this._originalContainer = container;\n this.container = this._getContainer();\n if (this.isSubWindow) {\n $('body').css('visibility', 'hidden');\n }\n this._typeToItem = {\n column: RowOrColumn.bind(this, true),\n row: RowOrColumn.bind(this, false),\n stack: Stack,\n component: Component\n };\n }\n\n /**\n * Register a component with the layout manager. If a configuration node\n * of type component is reached it will look up componentName and create the\n * associated component\n *\n * {\n *\t\ttype: \"component\",\n *\t\tcomponentName: \"EquityNewsFeed\",\n *\t\tcomponentState: { \"feedTopic\": \"us-bluechips\" }\n * }\n *\n * @param name\n * @param constructor\n * @returns cleanup function to deregister component\n */\n registerComponent(name, constructor) {\n if (typeof constructor !== 'function' && (constructor == null || constructor.render == null || typeof constructor.render !== 'function')) {\n throw new Error('Please register a constructor function');\n }\n if (this._components[name] !== undefined) {\n throw new Error('Component ' + name + ' is already registered');\n }\n this._components[name] = constructor;\n var cleanup = () => {\n if (this._components[name] === undefined) {\n throw new Error('Component ' + name + ' is not registered');\n }\n delete this._components[name];\n };\n return cleanup;\n }\n\n /**\n * Set a fallback component to be rendered in place of unregistered components\n * @param constructor\n */\n setFallbackComponent(constructor) {\n this._fallbackComponent = constructor;\n }\n\n /**\n * Creates a layout configuration object based on the the current state\n * @param root\n * @returns GoldenLayout configuration\n */\n toConfig(root) {\n if (this.isInitialised === false) {\n throw new Error(\"Can't create config, layout not yet initialised\");\n }\n if (root && !(root instanceof AbstractContentItem)) {\n throw new Error('Root must be a ContentItem');\n }\n\n /*\n * settings & labels\n */\n var config = {\n settings: _objectSpread({}, this.config.settings),\n dimensions: _objectSpread({}, this.config.dimensions),\n labels: _objectSpread({}, this.config.labels),\n content: []\n };\n\n /*\n * Content\n */\n var next = function next(configNode, item) {\n for (var _key in item.config) {\n if (_key !== 'content') {\n configNode[_key] = item.config[_key];\n }\n }\n if (configNode.componentName === 'lm-react-component') {\n // We change the type in `createContentItem`, so change it back here\n configNode.type = 'react-component';\n }\n if (item.contentItems.length) {\n configNode.content = [];\n for (var i = 0; i < item.contentItems.length; i++) {\n configNode.content[i] = {};\n next(configNode.content[i], item.contentItems[i]);\n }\n }\n };\n if (root) {\n next(config, {\n contentItems: [root]\n });\n } else {\n next(config, this.root);\n }\n\n /*\n * Retrieve config for subwindows\n */\n this._$reconcilePopoutWindows();\n config.openPopouts = [];\n for (var i = 0; i < this.openPopouts.length; i++) {\n config.openPopouts.push(this.openPopouts[i].toConfig());\n }\n\n /*\n * Add maximised item\n */\n config.maximisedItemId = this._maximisedItem ? '__glMaximised' : undefined;\n return config;\n }\n\n /**\n * Returns a previously registered component\n * @param name The name used\n */\n getComponent(name) {\n return this._components[name];\n }\n\n /**\n * Returns a fallback component to render in place of unregistered components\n *\n * @public\n *\n * @returns {Function}\n */\n getFallbackComponent() {\n return this._fallbackComponent;\n }\n\n /**\n * Creates the actual layout. Must be called after all initial components\n * are registered. Recurses through the configuration and sets up\n * the item tree.\n *\n * If called before the document is ready it adds itself as a listener\n * to the document.ready event\n */\n init() {\n /**\n * Create the popout windows straight away. If popouts are blocked\n * an error is thrown on the same 'thread' rather than a timeout and can\n * be caught. This also prevents any further initilisation from taking place.\n */\n if (this._subWindowsCreated === false) {\n this._createSubWindows();\n this._subWindowsCreated = true;\n }\n\n /**\n * If the document isn't ready yet, wait for it.\n */\n if (document.readyState === 'loading' || document.body === null) {\n $(document).ready(this.init.bind(this));\n return;\n }\n\n /**\n * If this is a subwindow, wait a few milliseconds for the original\n * page's js calls to be executed, then replace the bodies content\n * with GoldenLayout\n */\n if (this.isSubWindow === true && this._creationTimeoutPassed === false) {\n setTimeout(this.init.bind(this), 7);\n this._creationTimeoutPassed = true;\n return;\n }\n if (this.isSubWindow === true) {\n this._adjustToWindowMode();\n }\n this._setContainer();\n this.dropTargetIndicator = new DropTargetIndicator();\n this.updateSize();\n this._create(this.config);\n this._bindEvents();\n this.isInitialised = true;\n this._adjustColumnsResponsive();\n this.emit('initialised');\n }\n\n /**\n * Adds a react child to the layout manager\n * @param id Unique panel id\n * @param element The React element\n */\n addReactChild(id, element) {\n this._reactChildMap.set(id, element);\n this._reactChildren = [...this._reactChildMap.values()];\n this.emit('reactChildrenChanged');\n }\n\n /**\n * Removes a react child from the layout manager\n * Only removes if the elements for the panelId has not been replaced by a different element\n * @param id Unique panel id\n * @param element The React element\n */\n removeReactChild(id, element) {\n var mapElem = this._reactChildMap.get(id);\n if (mapElem === element) {\n // If an element was replaced it may be destroyed after the other is created\n // In that case, the new element would be removed\n // Make sure the element being removed is the current element associated with its id\n this._reactChildMap.delete(id);\n this._reactChildren = [...this._reactChildMap.values()];\n this.emit('reactChildrenChanged');\n }\n }\n\n /**\n * Gets the react children in the layout\n *\n * Used in @deephaven/dashboard to mount the react elements\n * inside the app's React tree\n *\n * @returns The react children to mount for this layout manager\n */\n getReactChildren() {\n return this._reactChildren;\n }\n\n /**\n * Updates the layout managers size\n * @param width width in pixels\n * @param height height in pixels\n */\n updateSize(width, height) {\n var _ref, _ref2;\n this.width = (_ref = width !== null && width !== void 0 ? width : this.container.width()) !== null && _ref !== void 0 ? _ref : 0;\n this.height = (_ref2 = height !== null && height !== void 0 ? height : this.container.height()) !== null && _ref2 !== void 0 ? _ref2 : 0;\n if (this.isInitialised === true) {\n this.root.callDownwards('setSize', [this.width, this.height]);\n if (this._maximisedItem) {\n var _this$container$width, _this$container$heigh;\n this._maximisedItem.element.width((_this$container$width = this.container.width()) !== null && _this$container$width !== void 0 ? _this$container$width : 0);\n this._maximisedItem.element.height((_this$container$heigh = this.container.height()) !== null && _this$container$heigh !== void 0 ? _this$container$heigh : 0);\n this._maximisedItem.callDownwards('setSize');\n }\n this._adjustColumnsResponsive();\n }\n }\n\n /**\n * Destroys the LayoutManager instance itself as well as every ContentItem\n * within it. After this is called nothing should be left of the LayoutManager.\n */\n destroy() {\n var _this$dropTargetIndic;\n if (this.isInitialised === false || !this.root) {\n return;\n }\n this._onUnload();\n $(window).off('resize', this._onResize);\n $(window).off('unload beforeunload', this._onUnload);\n $(window).off('blur.lm').off('focus.lm');\n this.root.callDownwards('_$destroy', [], true);\n this.root.contentItems = [];\n this.tabDropPlaceholder.remove();\n (_this$dropTargetIndic = this.dropTargetIndicator) === null || _this$dropTargetIndic === void 0 ? void 0 : _this$dropTargetIndic.destroy();\n this.eventHub.destroy();\n this._dragSources.forEach(function (dragSource) {\n dragSource._dragListener.destroy();\n });\n this._dragSources = [];\n }\n\n /**\n * Recursively creates new item tree structures based on a provided\n * ItemConfiguration object\n *\n * @public\n * @param config ItemConfig\n * @param parent The item the newly created item should be a child of\n *\n * @returns Created item\n */\n createContentItem(config, parent) {\n var typeErrorMsg, contentItem;\n if (typeof config.type !== 'string') {\n throw new ConfigurationError(\"Missing parameter 'type'\", config);\n }\n if (config.type === 'react-component') {\n config.type = 'component';\n config.componentName = 'lm-react-component';\n }\n if (!this._typeToItem[config.type]) {\n typeErrorMsg = \"Unknown type '\" + config.type + \"'. \" + 'Valid types are ' + Object.keys(this._typeToItem).join(',');\n throw new ConfigurationError(typeErrorMsg);\n }\n\n /**\n * We add an additional stack around every component that's not within a stack anyways.\n */\n if (\n // If this is a component\n config.type === 'component' &&\n // and it's not already within a stack\n !(parent instanceof Stack) &&\n // and we have a parent\n !!parent &&\n // and it's not the topmost item in a new window\n !(this.isSubWindow === true && parent instanceof Root)) {\n config = {\n type: 'stack',\n width: config.width,\n height: config.height,\n content: [config]\n };\n }\n contentItem = new this._typeToItem[config.type](this, config, parent);\n return contentItem;\n }\n\n /**\n * Creates a popout window with the specified content and dimensions\n *\n * @param configOrContentItem\n * @param dimensions A map with width, height, left and top\n * @param parentId the id of the element this item will be appended to\n * when popIn is called\n * @param indexInParent The position of this item within its parent element\n * @returns Created popout\n */\n createPopout(configOrContentItem, dimensions, parentId, indexInParent) {\n var config = configOrContentItem;\n var configArray = [];\n var isItem = configOrContentItem instanceof AbstractContentItem;\n var self = this;\n if (isItem) {\n var _parent2;\n configArray = this.toConfig(configOrContentItem).content;\n parentId = getUniqueId();\n\n /**\n * If the item is the only component within a stack or for some\n * other reason the only child of its parent the parent will be destroyed\n * when the child is removed.\n *\n * In order to support this we move up the tree until we find something\n * that will remain after the item is being popped out\n */\n var parent = configOrContentItem.parent;\n var child = configOrContentItem;\n while (((_parent = parent) === null || _parent === void 0 ? void 0 : _parent.contentItems.length) === 1 && !parent.isRoot) {\n var _parent;\n child = parent;\n parent = parent.parent;\n }\n (_parent2 = parent) === null || _parent2 === void 0 ? void 0 : _parent2.addId(parentId);\n if (indexInParent == undefined || Number.isNaN(indexInParent)) {\n var _parent3;\n indexInParent = (_parent3 = parent) === null || _parent3 === void 0 ? void 0 : _parent3.contentItems.indexOf(child);\n }\n } else {\n if (!(configOrContentItem instanceof Array)) {\n configArray = [configOrContentItem];\n } else {\n configArray = configOrContentItem;\n }\n }\n if (!dimensions && isItem) {\n var _configOrContentItem$, _configOrContentItem$2, _configOrContentItem$3;\n var windowLeft = window.screenX || window.screenLeft;\n var windowTop = window.screenY || window.screenTop;\n var offset = (_configOrContentItem$ = configOrContentItem.element.offset()) !== null && _configOrContentItem$ !== void 0 ? _configOrContentItem$ : {\n left: 0,\n top: 0\n };\n dimensions = {\n left: windowLeft + offset.left,\n top: windowTop + offset.top,\n width: (_configOrContentItem$2 = configOrContentItem.element.width()) !== null && _configOrContentItem$2 !== void 0 ? _configOrContentItem$2 : 0,\n height: (_configOrContentItem$3 = configOrContentItem.element.height()) !== null && _configOrContentItem$3 !== void 0 ? _configOrContentItem$3 : 0\n };\n }\n if (!dimensions && !isItem) {\n dimensions = {\n left: window.screenX || window.screenLeft + 20,\n top: window.screenY || window.screenTop + 20,\n width: 500,\n height: 309\n };\n }\n if (isItem) {\n configOrContentItem.remove();\n }\n if (!dimensions || !parentId || indexInParent === undefined) {\n return;\n }\n var browserPopout = new BrowserPopout(configArray, dimensions, parentId, indexInParent, this);\n browserPopout.on('initialised', function () {\n self.emit('windowOpened', browserPopout);\n });\n browserPopout.on('closed', function () {\n self._$reconcilePopoutWindows();\n });\n this.openPopouts.push(browserPopout);\n return browserPopout;\n }\n\n /**\n * Attaches DragListener to any given DOM element\n * and turns it into a way of creating new ContentItems\n * by 'dragging' the DOM element into the layout\n *\n * @param element\n * @param itemConfig for the new item to be created, or a function which will provide it\n */\n createDragSource(element, itemConfig) {\n this.config.settings.constrainDragToContainer = false;\n var dragSource = new DragSource(element, itemConfig, this);\n this._dragSources.push(dragSource);\n return dragSource;\n }\n\n /**\n * Create a new item in a dragging state, given a starting mouse event to act as the initial position\n *\n * @param itemConfig for the new item to be created, or a function which will provide it\n * @param event used as the starting position for the dragProxy\n */\n createDragSourceFromEvent(itemConfig, event) {\n this.config.settings.constrainDragToContainer = false;\n return new DragSourceFromEvent(itemConfig, this, event);\n }\n\n /**\n * Programmatically selects an item. This deselects\n * the currently selected item, selects the specified item\n * and emits a selectionChanged event\n *\n * @param item\n * @param _$silent Wheather to notify the item of its selection\n */\n selectItem(item, _$silent) {\n if (this.config.settings.selectionEnabled !== true) {\n throw new Error('Please set selectionEnabled to true to use this feature');\n }\n if (item === this.selectedItem) {\n return;\n }\n if (this.selectedItem !== null) {\n this.selectedItem.deselect();\n }\n if (item && _$silent !== true) {\n item.select();\n }\n this.selectedItem = item;\n this.emit('selectionChanged', item);\n }\n\n /*************************\n * PACKAGE PRIVATE\n *************************/\n _$maximiseItem(contentItem) {\n var _this$container$width2, _this$container$heigh2;\n if (this._maximisedItem !== null) {\n this._$minimiseItem(this._maximisedItem);\n }\n this._maximisedItem = contentItem;\n this._maximisedItem.addId('__glMaximised');\n contentItem.element.addClass('lm_maximised');\n contentItem.element.after(this._maximisePlaceholder);\n this.root.element.prepend(contentItem.element);\n contentItem.element.width((_this$container$width2 = this.container.width()) !== null && _this$container$width2 !== void 0 ? _this$container$width2 : 0);\n contentItem.element.height((_this$container$heigh2 = this.container.height()) !== null && _this$container$heigh2 !== void 0 ? _this$container$heigh2 : 0);\n contentItem.callDownwards('setSize');\n this._maximisedItem.emit('maximised');\n this.emit('stateChanged');\n }\n _$minimiseItem(contentItem) {\n var _contentItem$parent;\n contentItem.element.removeClass('lm_maximised');\n contentItem.removeId('__glMaximised');\n this._maximisePlaceholder.after(contentItem.element);\n this._maximisePlaceholder.remove();\n (_contentItem$parent = contentItem.parent) === null || _contentItem$parent === void 0 ? void 0 : _contentItem$parent.callDownwards('setSize');\n this._maximisedItem = null;\n contentItem.emit('minimised');\n this.emit('stateChanged');\n }\n\n /**\n * This method is used to get around sandboxed iframe restrictions.\n * If 'allow-top-navigation' is not specified in the iframe's 'sandbox' attribute\n * (as is the case with codepens) the parent window is forbidden from calling certain\n * methods on the child, such as window.close() or setting document.location.href.\n *\n * This prevented GoldenLayout popouts from popping in in codepens. The fix is to call\n * _$closeWindow on the child window's gl instance which (after a timeout to disconnect\n * the invoking method from the close call) closes itself.\n */\n _$closeWindow() {\n window.setTimeout(function () {\n window.close();\n }, 1);\n }\n _$getArea(x, y) {\n var smallestSurface = Infinity;\n var mathingArea = null;\n for (var i = 0; i < this._itemAreas.length; i++) {\n var area = this._itemAreas[i];\n if (x > area.x1 && x < area.x2 && y > area.y1 && y < area.y2 && smallestSurface > area.surface) {\n smallestSurface = area.surface;\n mathingArea = area;\n }\n }\n return mathingArea;\n }\n\n /**\n * Creates the drop zones at the edges of the screen\n */\n _$createRootItemAreas() {\n var areaSize = 50;\n var rootArea = _objectSpread({}, this.root._$getArea());\n var areas = [_objectSpread(_objectSpread({}, rootArea), {}, {\n side: 'left',\n x2: rootArea.x1 + areaSize\n }), _objectSpread(_objectSpread({}, rootArea), {}, {\n side: 'right',\n x1: rootArea.x2 - areaSize\n }), _objectSpread(_objectSpread({}, rootArea), {}, {\n side: 'top',\n y2: rootArea.y1 + areaSize\n }), _objectSpread(_objectSpread({}, rootArea), {}, {\n side: 'bottom',\n y1: rootArea.y2 - areaSize\n })];\n areas.forEach(area => {\n area.surface = (area.x2 - area.x1) * (area.y2 - area.y1);\n });\n this._itemAreas.push(...areas);\n }\n _$calculateItemAreas() {\n var allContentItems = this._getAllContentItems();\n this._itemAreas = [];\n\n /**\n * If the last item is dragged out, highlight the entire container size to\n * allow to re-drop it. allContentItems[ 0 ] === this.root at this point\n *\n * Don't include root into the possible drop areas though otherwise since it\n * will used for every gap in the layout, e.g. splitters\n */\n if (allContentItems.length === 1) {\n this._itemAreas.push(this.root._$getArea());\n return;\n }\n this._$createRootItemAreas();\n for (var i = 0; i < allContentItems.length; i++) {\n var item = allContentItems[i];\n if (!isStack(item)) {\n continue;\n }\n var area = item._$getArea();\n if (area === null) {\n continue;\n } else if (area instanceof Array) {\n this._itemAreas = this._itemAreas.concat(area);\n } else {\n var _area$contentItem$_co;\n this._itemAreas.push(area);\n var header = _objectSpread(_objectSpread({}, area), (_area$contentItem$_co = area.contentItem._contentAreaDimensions) === null || _area$contentItem$_co === void 0 ? void 0 : _area$contentItem$_co.header.highlightArea);\n header.surface = (header.x2 - header.x1) * (header.y2 - header.y1);\n this._itemAreas.push(header);\n }\n }\n }\n\n /**\n * Takes a contentItem or a configuration and optionally a parent\n * item and returns an initialised instance of the contentItem.\n * If the contentItem is a function, it is first called\n *\n * @param contentItemOrConfig\n * @param parent Only necessary when passing in config\n */\n _$normalizeContentItem(contentItemOrConfig, parent) {\n if (!contentItemOrConfig) {\n throw new Error('No content item defined');\n }\n if (typeof contentItemOrConfig === 'function') {\n contentItemOrConfig = contentItemOrConfig();\n }\n if (contentItemOrConfig instanceof AbstractContentItem) {\n return contentItemOrConfig;\n }\n if ($.isPlainObject(contentItemOrConfig) && contentItemOrConfig.type) {\n var newContentItem = this.createContentItem(contentItemOrConfig, parent);\n newContentItem.callDownwards('_$init');\n return newContentItem;\n } else {\n throw new Error('Invalid contentItem');\n }\n }\n\n /**\n * Iterates through the array of open popout windows and removes the ones\n * that are effectively closed. This is necessary due to the lack of reliably\n * listening for window.close / unload events in a cross browser compatible fashion.\n */\n _$reconcilePopoutWindows() {\n var openPopouts = [];\n for (var i = 0; i < this.openPopouts.length; i++) {\n var _this$openPopouts$i$g;\n if (((_this$openPopouts$i$g = this.openPopouts[i].getWindow()) === null || _this$openPopouts$i$g === void 0 ? void 0 : _this$openPopouts$i$g.closed) === false) {\n openPopouts.push(this.openPopouts[i]);\n } else {\n this.emit('windowClosed', this.openPopouts[i]);\n }\n }\n if (this.openPopouts.length !== openPopouts.length) {\n this.emit('stateChanged');\n this.openPopouts = openPopouts;\n }\n }\n\n /***************************\n * PRIVATE\n ***************************/\n /**\n * Returns a flattened array of all content items,\n * regardles of level or type\n * @return Flattened array of content items\n */\n _getAllContentItems() {\n var allContentItems = [];\n var addChildren = contentItem => {\n allContentItems.push(contentItem);\n if (contentItem.contentItems instanceof Array) {\n for (var i = 0; i < contentItem.contentItems.length; i++) {\n addChildren(contentItem.contentItems[i]);\n }\n }\n };\n addChildren(this.root);\n return allContentItems;\n }\n\n /**\n * Binds to DOM/BOM events on init\n */\n _bindEvents() {\n if (this._isFullPage) {\n $(window).resize(this._onResize);\n }\n $(window).on('unload beforeunload', this._onUnload).on('blur.lm', this._windowBlur).on('focus.lm', this._windowFocus);\n }\n\n /**\n * Handles setting a class based on window focus, useful for focus indicators\n */\n _windowBlur() {\n this.root.element.addClass('lm_window_blur');\n }\n _windowFocus() {\n this.root.element.removeClass('lm_window_blur');\n }\n\n /**\n * Debounces resize events\n */\n _onResize() {\n clearTimeout(this._resizeTimeoutId);\n this._resizeTimeoutId = window.setTimeout(this.updateSize.bind(this), 100);\n }\n\n /**\n * Extends the default config with the user specific settings and applies\n * derivations. Please note that there's a seperate method (AbstractContentItem._extendItemNode)\n * that deals with the extension of item configs\n *\n * @param config\n * @returns config\n */\n _createConfig(config) {\n var _config$settings;\n var windowConfigKey = getQueryStringParam('gl-window');\n if (windowConfigKey) {\n this.isSubWindow = true;\n config = JSON.parse(localStorage.getItem(windowConfigKey) || '{}');\n config = unminifyConfig(config);\n localStorage.removeItem(windowConfigKey);\n }\n config = $.extend(true, {}, defaultConfig, config);\n var nextNode = function nextNode(node) {\n for (var key in node) {\n var value = node[key];\n if (key !== 'props' && typeof value === 'object' && value != null) {\n nextNode(value);\n } else if (key === 'type' && value === 'react-component') {\n node.type = 'component';\n node.componentName = 'lm-react-component';\n }\n }\n };\n nextNode(config);\n if (((_config$settings = config.settings) === null || _config$settings === void 0 ? void 0 : _config$settings.hasHeaders) === false) {\n config.dimensions.headerHeight = 0;\n }\n return config;\n }\n\n /**\n * This is executed when GoldenLayout detects that it is run\n * within a previously opened popout window.\n */\n _adjustToWindowMode() {\n var _this$config$content$;\n var popInButton = $('<div class=\"lm_popin\" title=\"' + this.config.labels.popin + '\">' + '<div class=\"lm_icon\"></div>' + '<div class=\"lm_bg\"></div>' + '</div>');\n popInButton.click(() => {\n this.emit('popIn');\n });\n document.title = stripTags((_this$config$content$ = this.config.content[0].title) !== null && _this$config$content$ !== void 0 ? _this$config$content$ : '');\n $('head').append($('body link, body style, template, .gl_keep'));\n this.container = $('body').html('').css('visibility', 'visible').append(popInButton);\n\n /*\n * This seems a bit pointless, but actually causes a reflow/re-evaluation getting around\n * slickgrid's \"Cannot find stylesheet.\" bug in chrome\n */\n var x = document.body.offsetHeight; // jshint ignore:line\n\n /*\n * Expose this instance on the window object\n * to allow the opening window to interact with\n * it\n */\n window.__glInstance = this;\n }\n\n /**\n * Creates Subwindows (if there are any). Throws an error\n * if popouts are blocked.\n */\n _createSubWindows() {\n if (!this.config.openPopouts) {\n return;\n }\n for (var i = 0; i < this.config.openPopouts.length; i++) {\n var popout = this.config.openPopouts[i];\n this.createPopout(popout.content, popout.dimensions, popout.parentId, popout.indexInParent);\n }\n }\n _getContainer() {\n var container = this._originalContainer ? $(this._originalContainer) : $('body');\n if (container.length === 0) {\n throw new Error('GoldenLayout container not found');\n }\n if (container.length > 1) {\n throw new Error('GoldenLayout more than one container element specified');\n }\n return container;\n }\n\n /**\n * Determines what element the layout will be created in\n */\n _setContainer() {\n var container = this._getContainer();\n if (container[0] === document.body) {\n this._isFullPage = true;\n $('html, body').css({\n height: '100%',\n margin: 0,\n padding: 0,\n overflow: 'hidden'\n });\n }\n this.container = container;\n }\n\n /**\n * Kicks of the initial, recursive creation chain\n *\n * @param config GoldenLayout Config\n */\n _create(config) {\n var errorMsg;\n if (!(config.content instanceof Array)) {\n if (config.content === undefined) {\n errorMsg = \"Missing setting 'content' on top level of configuration\";\n } else {\n errorMsg = \"Configuration parameter 'content' must be an array\";\n }\n throw new ConfigurationError(errorMsg, config);\n }\n if (config.content.length > 1) {\n errorMsg = \"Top level content can't contain more then one element.\";\n throw new ConfigurationError(errorMsg, config);\n }\n this.root = new Root(this, {\n content: config.content\n }, this.container);\n this.root.callDownwards('_$init');\n if (config.maximisedItemId === '__glMaximised') {\n this.root.getItemsById(config.maximisedItemId)[0].toggleMaximise();\n }\n }\n\n /**\n * Called when the window is closed or the user navigates away\n * from the page\n */\n _onUnload() {\n if (this.config.settings.closePopoutsOnUnload === true) {\n for (var i = 0; i < this.openPopouts.length; i++) {\n this.openPopouts[i].close();\n }\n }\n }\n\n /**\n * Adjusts the number of columns to be lower to fit the screen and still maintain minItemWidth.\n */\n _adjustColumnsResponsive() {\n // If there is no min width set, or not content items, do nothing.\n if (!this._useResponsiveLayout() || this._updatingColumnsResponsive || !this.config.dimensions || !this.config.dimensions.minItemWidth || this.root.contentItems.length === 0 || !this.root.contentItems[0].isRow) {\n this._firstLoad = false;\n return;\n }\n this._firstLoad = false;\n\n // If there is only one column, do nothing.\n var columnCount = this.root.contentItems[0].contentItems.length;\n if (columnCount <= 1) {\n return;\n }\n\n // If they all still fit, do nothing.\n var minItemWidth = this.config.dimensions.minItemWidth;\n var totalMinWidth = columnCount * minItemWidth;\n if (this.width == null || totalMinWidth <= this.width) {\n return;\n }\n\n // Prevent updates while it is already happening.\n this._updatingColumnsResponsive = true;\n\n // Figure out how many columns to stack, and put them all in the first stack container.\n var finalColumnCount = Math.max(Math.floor(this.width / minItemWidth), 1);\n var stackColumnCount = columnCount - finalColumnCount;\n var rootContentItem = this.root.contentItems[0];\n var firstStackContainer = this._findAllStackContainers()[0];\n for (var i = 0; i < stackColumnCount; i++) {\n // Stack from right.\n var column = rootContentItem.contentItems[rootContentItem.contentItems.length - 1];\n this._addChildContentItemsToContainer(firstStackContainer, column);\n }\n this._updatingColumnsResponsive = false;\n }\n\n /**\n * Determines if responsive layout should be used.\n *\n * @returns True if responsive layout should be used; otherwise false.\n */\n _useResponsiveLayout() {\n return this.config.settings && (this.config.settings.responsiveMode == 'always' || this.config.settings.responsiveMode == 'onload' && this._firstLoad);\n }\n\n /**\n * Adds all children of a node to another container recursively.\n * @param container - Container to add child content items to.\n * @param node - Node to search for content items.\n */\n _addChildContentItemsToContainer(container, node) {\n if (node.type === 'stack') {\n node.contentItems.forEach(function (item) {\n container.addChild(item);\n node.removeChild(item, true);\n });\n } else {\n node.contentItems.forEach(item => {\n this._addChildContentItemsToContainer(container, item);\n });\n }\n }\n\n /**\n * Finds all the stack containers.\n * @returns The found stack containers.\n */\n _findAllStackContainers() {\n var stackContainers = [];\n this._findAllStackContainersRecursive(stackContainers, this.root);\n return stackContainers;\n }\n\n /**\n * Finds all the stack containers.\n *\n * @param stackContainers Set of containers to populate.\n * @param node Current node to process.\n */\n _findAllStackContainersRecursive(stackContainers, node) {\n node.contentItems.forEach(item => {\n if (isStack(item)) {\n stackContainers.push(item);\n } else if (!item.isComponent) {\n this._findAllStackContainersRecursive(stackContainers, item);\n }\n });\n }\n}\n_defineProperty(LayoutManager, \"__lm\", lm);\nexport default LayoutManager;\n//# sourceMappingURL=LayoutManager.js.map","import GoldenLayout from \"./GoldenLayout.module.css\"; // parseInt for unitless values, stripping \"px\"\nexport default Object.freeze({\n tabHeight: parseInt(GoldenLayout['tab-height'], 10),\n dragBorderWidth: parseInt(GoldenLayout['drag-border-width'], 10)\n});\n//# sourceMappingURL=GoldenLayoutThemeExport.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 deepEqual from 'deep-equal';\nimport shortid from 'shortid';\nimport isMatch from 'lodash.ismatch';\nimport Log from '@deephaven/log';\nimport { isComponent, isRoot, isStack, GoldenLayoutThemeExport } from '@deephaven/golden-layout';\nimport { assertNotNull } from '@deephaven/utils';\nvar log = Log.module('LayoutUtils');\nfunction isComponentConfig(config) {\n return config.componentName !== undefined;\n}\nexport function isReactComponentConfig(config) {\n var reactConfig = config;\n // Golden layout sets the type to 'component' and componentName to 'lm-react-component' in `createContentItem`, then changes it back in `toConfig`\n // For our purposes, we need to check both.\n return (isComponentConfig(config) && config.componentName === 'lm-react-component' || config.type === 'react-component') && reactConfig.component !== undefined;\n}\nfunction isHTMLElement(element) {\n return element.focus !== undefined;\n}\nfunction isStackItemConfig(config) {\n return config.type === 'stack';\n}\nclass LayoutUtils {\n static activateTab(root, config) {\n var stack = LayoutUtils.getStackForRoot(root, config, false);\n if (!stack) {\n log.error('Could not find stack for config', config);\n return;\n }\n // Find the tab with the specified table and activate it\n var contentItem = LayoutUtils.getContentItemInStack(stack, config);\n if (contentItem) {\n stack.setActiveContentItem(contentItem);\n }\n }\n\n /**\n * Is the tab with the given config active\n * @param root A GoldenLayout content item with the tab\n * @param config Tab config to match\n * @returns True if the tab is active\n */\n static isActiveTab(root, config) {\n var stack = LayoutUtils.getStackForRoot(root, config, false);\n if (!stack) {\n log.error('Could not find stack for config', config);\n return false;\n }\n // Find the item with the specified config and compare with active item\n var contentItem = LayoutUtils.getContentItemInStack(stack, config);\n var activeItem = stack.getActiveContentItem();\n return activeItem === contentItem;\n }\n\n /**\n * Adds a stack to the root layout specified. Adds to the first row/column with only one item\n * @param parent A GoldenLayout content item to add the stack to\n * @returns The newly created stack.\n */\n static addStack(parent) {\n var columnPreferred = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var type = columnPreferred ? 'column' : 'row';\n if (isRoot(parent)) {\n if (parent.contentItems == null || parent.contentItems.length === 0) {\n parent.addChild({\n type\n });\n }\n var child = parent.contentItems[0];\n var _isCorrectType = columnPreferred ? child.isColumn : child.isRow;\n if (!_isCorrectType) {\n parent.removeChild(child, true);\n parent.addChild({\n type\n });\n\n // The addChild may cause the element that has focus to be removed from the DOM, which changes focus to the body\n // Try and maintain the focus as best we can. The unfocused element may still send a blur/focus event so that needs to be handled correctly.\n var maintainFocusElement = document.activeElement;\n parent.contentItems[0].addChild(child);\n if (maintainFocusElement && maintainFocusElement.focus != null) {\n maintainFocusElement.focus();\n }\n }\n return this.addStack(parent.contentItems[0], columnPreferred);\n }\n if (parent.contentItems.length < 2) {\n parent.addChild({\n type: 'stack'\n });\n return parent.contentItems[parent.contentItems.length - 1];\n }\n var newParent = parent.contentItems[parent.contentItems.length - 1];\n var isCorrectType = !columnPreferred ? newParent.isColumn : newParent.isRow;\n if (!isCorrectType) {\n parent.addChild({\n type: !columnPreferred ? 'column' : 'row'\n });\n parent.removeChild(newParent, true);\n parent.contentItems[parent.contentItems.length - 1].addChild(newParent);\n newParent = parent.contentItems[parent.contentItems.length - 1];\n }\n return this.addStack(newParent, !columnPreferred);\n }\n\n /**\n * Gets the first stack which contains a contentItem with the given config values\n * @param item Golden layout content item to search for the stack\n * @param config The item properties to match\n */\n static getStackForConfig(item) {\n var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var allowEmptyStack = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n if (allowEmptyStack && isStack(item) && item.contentItems.length === 0) {\n return item;\n }\n if (item.contentItems == null) {\n return null;\n }\n for (var i = 0; i < item.contentItems.length; i += 1) {\n var contentItem = item.contentItems[i];\n if (contentItem.isComponent && contentItem.config != null) {\n if (isMatch(contentItem.config, config)) {\n return item;\n }\n }\n var stack = this.getStackForConfig(contentItem, config, allowEmptyStack);\n if (stack) {\n return stack;\n }\n }\n return null;\n }\n\n /**\n * Gets a stack matching the specified config\n * @param root The root GoldenLayout element\n * @param config The item config type to match, eg. { component: 'IrisGridPanel', title: 'Table Name' }\n * @param createIfNecessary Whether to create the stack if it does not exist.\n * @param matchComponentType If the config doesn't match exactly, just find another one of the same component type\n * @param allowEmptyStack If no configs match, search for an empty stack that can be used\n */\n static getStackForRoot(root, config) {\n var createIfNecessary = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var matchComponentType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n var allowEmptyStack = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n var stack = this.getStackForConfig(root, config);\n if (!stack && matchComponentType) {\n stack = this.getStackForConfig(root, {\n component: config.component\n }, allowEmptyStack);\n }\n if (!stack && createIfNecessary) {\n stack = this.addStack(root);\n }\n return stack;\n }\n\n /**\n * Gets a stack matching one of the specified types, creates new stack if necessary\n * @param root The GoldenLayout root to find or create the stack in\n * @param types The array of component types to match\n * @param createIfNecessary Whether to create the stack if it does not exist\n * @param matchComponentType If the config doesn't match exactly, just find another one of the same component type\n * @param allowEmptyStack If no configs match, search for an empty stack that can be used\n */\n static getStackForComponentTypes(root, types) {\n var createIfNecessary = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var matchComponentType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n var allowEmptyStack = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n for (var i = 0; i < types.length; i += 1) {\n var component = types[i];\n var isLastType = i === types.length - 1;\n var stack = LayoutUtils.getStackForRoot(root, {\n component\n }, createIfNecessary && isLastType, matchComponentType, allowEmptyStack);\n if (stack) {\n return stack;\n }\n }\n return null;\n }\n\n /**\n * Gets first content item with the specified config in stack.\n * @param stack The stack to search for the item\n * @param config The item config type to match, eg. { component: 'IrisGridPanel', title: 'Table Name' }\n * @returns Returns the found content item, null if not found.\n */\n static getContentItemInStack(stack, config) {\n if (!stack) {\n return null;\n }\n for (var i = 0; i < stack.contentItems.length; i += 1) {\n var contentItem = stack.contentItems[i];\n if (contentItem.isComponent && contentItem.config != null) {\n if (isMatch(contentItem.config, config)) {\n return contentItem;\n }\n }\n }\n return null;\n }\n\n /**\n * Removes dynamic props from components in the given config so this config could be serialized\n * @param config Config objec\n * @returns Dehydrated config\n */\n static dehydrateLayoutConfig(config, dehydrateComponent) {\n if (config == null || !config.length) {\n return [];\n }\n var dehydratedConfig = [];\n for (var i = 0; i < config.length; i += 1) {\n var itemConfig = config[i];\n var {\n component,\n content\n } = itemConfig;\n if (component) {\n var dehydratedComponent = dehydrateComponent(component, itemConfig);\n if (dehydratedComponent != null) {\n dehydratedConfig.push(dehydratedComponent);\n } else {\n log.debug2(\"dehydrateLayoutConfig: skipping unmapped component \\\"\".concat(component, \"\\\"\"));\n }\n } else if (content) {\n var layoutItemConfig = _objectSpread(_objectSpread({}, itemConfig), {}, {\n content: LayoutUtils.dehydrateLayoutConfig(content, dehydrateComponent)\n });\n dehydratedConfig.push(layoutItemConfig);\n } else {\n dehydratedConfig.push(itemConfig);\n }\n }\n return dehydratedConfig;\n }\n static getTabPoint(glContainer) {\n var {\n tab\n } = glContainer;\n if (tab == null) {\n throw new Error(\"Cannot get tab for panel container \".concat(glContainer));\n }\n var tabRect = tab.element[0].getBoundingClientRect();\n return [tabRect.left + tabRect.width * 0.5, tabRect.bottom - 8];\n }\n\n /**\n * Drop minor changes in Layout Configuration for deep comparison\n * @param config Layout Configuration\n *\n * minor changes:\n * 1. sorts in grid\n * 2. quick filters in grid\n * 3. active item\n * 4. isStuckToBottom/isStuckToRight\n *\n * item id is also removed\n */\n static dropLayoutMinorChange(config) {\n for (var i = 0; i < config.length; i += 1) {\n var itemConfig = config[i];\n var {\n content\n } = itemConfig;\n if (content !== undefined) {\n if (isStackItemConfig(itemConfig)) {\n delete itemConfig.activeItemIndex;\n }\n LayoutUtils.dropLayoutMinorChange(content);\n } else if (isReactComponentConfig(itemConfig) && itemConfig.component === 'IrisGridPanel') {\n if (itemConfig.props.panelState != null) {\n delete itemConfig.id;\n itemConfig.props.panelState.irisGridState.sorts = [];\n itemConfig.props.panelState.irisGridState.quickFilters = [];\n itemConfig.props.panelState.gridState.isStuckToBottom = false;\n itemConfig.props.panelState.gridState.isStuckToRight = false;\n }\n }\n }\n }\n\n /**\n * Compare two layouts to see if they are equivalent\n * @param layout1 A Golden Layout config object\n * @param layout2 Another Golden layout config object\n * @param major When true, will ignore \"minor\" property differences (eg. sorts)\n */\n static isEqual(layout1, layout2) {\n var major = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n if (major) {\n var layout1Clone = LayoutUtils.cloneLayout(layout1);\n var layout2Clone = LayoutUtils.cloneLayout(layout2);\n LayoutUtils.dropLayoutMinorChange(layout1Clone);\n LayoutUtils.dropLayoutMinorChange(layout2Clone);\n return deepEqual(layout1Clone, layout2Clone);\n }\n return deepEqual(layout1, layout2);\n }\n static cloneLayout(layout) {\n return JSON.parse(JSON.stringify(layout));\n }\n\n /**\n * Adds dynamic props to components in the given config so this config could be used to initialize a layout\n * @param config Dehydrated config object\n * @param hydrateComponent Function to hydrate the component\n * @returns Hydrated config\n */\n static hydrateLayoutConfig(config, hydrateComponent) {\n if (config == null || !config.length) {\n return [];\n }\n var hydratedConfig = [];\n for (var i = 0; i < config.length; i += 1) {\n var itemConfig = config[i];\n if (isReactComponentConfig(itemConfig)) {\n var _itemConfig$id;\n var {\n component,\n props = {}\n } = itemConfig;\n hydratedConfig.push(_objectSpread(_objectSpread({}, itemConfig), {}, {\n id: (_itemConfig$id = itemConfig === null || itemConfig === void 0 ? void 0 : itemConfig.id) !== null && _itemConfig$id !== void 0 ? _itemConfig$id : shortid(),\n props: hydrateComponent(component, props)\n }));\n } else if (itemConfig.content !== undefined) {\n var contentConfig = LayoutUtils.hydrateLayoutConfig(itemConfig.content, hydrateComponent);\n if (isStackItemConfig(itemConfig) && itemConfig.activeItemIndex != null && itemConfig.activeItemIndex >= contentConfig.length) {\n log.warn('Fixing bad activeItemIndex!', itemConfig.activeItemIndex, itemConfig);\n itemConfig.activeItemIndex = 0;\n }\n hydratedConfig.push(_objectSpread(_objectSpread({}, itemConfig), {}, {\n content: contentConfig\n }));\n } else {\n hydratedConfig.push(itemConfig);\n }\n }\n return hydratedConfig;\n }\n\n /**\n * Opens a component. It will try and open the component in an existing stack of the same component.\n * If `replaceExisting` is true and there is a component found with the same `config.id`, it will replace that component with this one.\n * If `allowStack` is true and there is a component of the same type found, it will open in that stack (potentially covering up a panel).\n * @param root The GoldenLayout root to open the component in\n * @param config The component config definition to open\n * @param replaceExisting Whether it should replace the existing one matching component type and id, or open a new one\n * @param replaceConfig The component config to replace\n * @param createNewStack True to force opening in a new stack, false to try and open in a stack with the same type of component.\n * @param focusElement The element to focus on\n * @param dragEvent Whether component is being created with a drag, mouse event is initial position for drag proxy\n */\n static openComponent() {\n var {\n root,\n config: configParam,\n replaceExisting = true,\n replaceConfig = undefined,\n createNewStack = false,\n focusElement = undefined,\n dragEvent = undefined\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // attempt to retain focus after dom manipulation, which can break focus\n var maintainFocusElement = document.activeElement;\n var config = _objectSpread({}, configParam);\n if (config.id == null) {\n config.id = shortid.generate();\n }\n if (dragEvent != null) {\n root === null || root === void 0 ? void 0 : root.layoutManager.createDragSourceFromEvent(config, dragEvent);\n return;\n }\n var searchConfig = replaceConfig || {\n id: config.id,\n component: config.component\n };\n assertNotNull(root);\n var stack = createNewStack ? LayoutUtils.addStack(root) : LayoutUtils.getStackForRoot(root, searchConfig);\n assertNotNull(stack);\n var oldContentItem = LayoutUtils.getContentItemInStack(stack, searchConfig);\n if (focusElement != null) {\n // We need to listen for when the stack is created\n var onComponentCreated = event => {\n log.debug('Component created, focusing element', focusElement);\n stack.off('componentCreated', onComponentCreated);\n var {\n element\n } = event.origin;\n\n // Need to wait until the component actually renders.\n requestAnimationFrame(() => {\n LayoutUtils.focusElement(element[0], focusElement);\n });\n };\n stack.on('componentCreated', onComponentCreated);\n }\n if (replaceExisting && oldContentItem) {\n var index = stack.contentItems.indexOf(oldContentItem);\n\n // Using remove/add here instead of replaceChild because I was getting errors with replaceChild... should be the same.\n // Add first so that the stack doesn't get screwed up\n stack.addChild(config, index + 1);\n stack.removeChild(oldContentItem);\n stack.setActiveContentItem(stack.contentItems[index]);\n } else {\n stack.addChild(config);\n }\n if (focusElement == null && maintainFocusElement && isHTMLElement(maintainFocusElement)) {\n maintainFocusElement.focus();\n }\n }\n\n /**\n * Opens a component in an given stack.\n * If `replaceExisting` is true and there is a component found with the same `config.id`, it will replace that component with this one\n * @param stack The GoldenLayout stack to open the component in\n * @param config The component config definition to open\n * @param replaceExisting Whether it should replace the existing one matching component type and id, or open a new one\n */\n static openComponentInStack(stack, config) {\n var replaceExisting = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var maintainFocusElement = document.activeElement; // attempt to retain focus after dom manipulation, which can break focus\n\n var searchConfig = {\n id: config.id\n };\n var oldContentItem = LayoutUtils.getContentItemInStack(stack, searchConfig);\n if (replaceExisting && oldContentItem && stack) {\n var index = stack === null || stack === void 0 ? void 0 : stack.contentItems.indexOf(oldContentItem);\n\n // Using remove/add here instead of replaceChild because I was getting errors with replaceChild... should be the same.\n // Add first so that the stack doesn't get screwed up\n stack.addChild(config, index + 1);\n stack.removeChild(oldContentItem);\n stack.setActiveContentItem(stack.contentItems[index]);\n } else {\n stack === null || stack === void 0 ? void 0 : stack.addChild(config);\n }\n if (maintainFocusElement && isHTMLElement(maintainFocusElement)) {\n maintainFocusElement.focus();\n }\n }\n\n /**\n * Close the specified component and remove it from the stack it's currently in\n * @param root The GoldenLayout root to search and close the component in\n * @param config The GoldenLayout component config definition to close, eg. { component: 'IrisGridPanel', id: 'table-t' }\n */\n static closeComponent(root, config, closeOptions) {\n var stack = LayoutUtils.getStackForRoot(root, config, false, false, false);\n if (!stack) {\n log.warn('Cannot find stack for component, ignoring close', config);\n return;\n }\n\n // Find the tab with the specified config and remove it\n // Same component was used to get the stack above, so getContentItemInStack shouldn't return null\n var oldContentItem = LayoutUtils.getContentItemInStack(stack, config);\n var maintainFocusElement = document.activeElement; // attempt to retain focus after dom manipulation, which can break focus\n if (oldContentItem) {\n if (isComponent(oldContentItem)) {\n oldContentItem.container.close(closeOptions);\n } else {\n stack.removeChild(oldContentItem);\n }\n }\n // if focused element is still in dom restore focus, note it could have been in the removed panel so check first\n if (maintainFocusElement && document.contains(maintainFocusElement) && isHTMLElement(maintainFocusElement)) {\n maintainFocusElement.focus();\n }\n }\n static renameComponent(root, config, newTitle) {\n var stack = LayoutUtils.getStackForRoot(root, config, false);\n if (!stack) {\n log.error('Could not find stack for config', config);\n return;\n }\n // Find the tab with the specified config and rename it\n var contentItem = LayoutUtils.getContentItemInStack(stack, config);\n if (contentItem) {\n contentItem.setTitle(newTitle);\n }\n }\n\n /**\n * Create a component clone based on the given config\n * @param root The GoldenLayout root to clone the component in\n * @param config The config to clone\n * @returns Clone config\n */\n static cloneComponent(root, config) {\n var stack = LayoutUtils.getStackForRoot(root, config, false);\n if (!stack) {\n log.error('Could not find stack for config', config);\n return null;\n }\n var {\n props = {}\n } = config;\n var panelState = LayoutUtils.getPanelComponentState(config);\n var cloneConfig = {\n type: 'react-component',\n component: config.component,\n props: _objectSpread(_objectSpread({}, props), {}, {\n panelState\n }),\n title: \"\".concat(config.title, \" Copy\"),\n id: shortid.generate()\n };\n LayoutUtils.openComponentInStack(stack, cloneConfig);\n return cloneConfig;\n }\n\n /**\n * Get panel component state for the given config\n * @param config Panel config\n * @returns Panel state\n */\n static getPanelComponentState(config) {\n if (isComponentConfig(config)) {\n var _config$componentStat;\n return (_config$componentStat = config.componentState) === null || _config$componentStat === void 0 ? void 0 : _config$componentStat.panelState;\n }\n if (isReactComponentConfig(config)) {\n var _config$props;\n return (_config$props = config.props) === null || _config$props === void 0 ? void 0 : _config$props.panelState;\n }\n return null;\n }\n static makeDefaultLayout() {\n return {\n dimensions: {\n headerHeight: GoldenLayoutThemeExport.tabHeight,\n borderWidth: GoldenLayoutThemeExport.dragBorderWidth,\n borderGrabWidth: 10\n },\n settings: {\n showPopoutIcon: false,\n showCloseIcon: false,\n constrainDragToContainer: false\n }\n };\n }\n\n /**\n * Gets a containers root node\n * @param container The Golden Layout container to get the root for\n */\n static getRootFromContainer(container) {\n return container.layoutManager.root;\n }\n\n /**\n * Gets the config for the panel component given a glContainer\n * @param container The Golden Layout container to get the config for\n */\n static getComponentConfigFromContainer(container) {\n if (container) {\n if (container.tab != null && container.tab.contentItem != null) {\n return container.tab.contentItem.config;\n }\n\n // If the container hasn't populated the tab yet, just get the config directly from the container\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore private api usage\n // eslint-disable-next-line no-underscore-dangle\n return container._config;\n }\n return null;\n }\n static getTitleFromContainer(container) {\n if (container != null && container.tab != null && container.tab.contentItem != null) {\n return container.tab.contentItem.config.title;\n }\n return null;\n }\n static getTitleFromTab(tab) {\n if (tab != null && tab.contentItem != null) {\n return tab.contentItem.config.title;\n }\n return null;\n }\n\n /**\n * Retrieve the panel ID for the provided golden layout container\n * @param glContainer The container to get the panel ID for\n * @returns Panel ID\n */\n static getIdFromContainer(glContainer) {\n var config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n if (config) {\n return config.id;\n }\n return null;\n }\n\n /**\n * Retrieve the ID of the panel provided\n * @param panel The panel to get the ID for\n * @returns Panel ID\n */\n static getIdFromPanel(panel) {\n var {\n glContainer\n } = panel.props;\n return LayoutUtils.getIdFromContainer(glContainer);\n }\n\n /**\n * Get component name from the panel instance\n * @param panel Panel to get component name for\n * @returns Component name or null if unable to retrieve name\n */\n static getComponentNameFromPanel(panel) {\n var {\n glContainer\n } = panel.props;\n var config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n if (config && isReactComponentConfig(config)) {\n var _config$component;\n return (_config$component = config.component) !== null && _config$component !== void 0 ? _config$component : null;\n }\n return null;\n }\n\n /**\n * Get component name for wrapped and un-wrapped components\n * @param component Component to get name for\n * @returns Component name\n * @throws If displayName for the component is not defined\n */\n static getComponentName(component) {\n var _component$WrappedCom, _component$WrappedCom2;\n var name = (_component$WrappedCom = (_component$WrappedCom2 = component.WrappedComponent) === null || _component$WrappedCom2 === void 0 ? void 0 : _component$WrappedCom2.displayName) !== null && _component$WrappedCom !== void 0 ? _component$WrappedCom : component.displayName;\n if (name == null) {\n throw new Error(\"Component displayName not defined \".concat(component));\n }\n return name;\n }\n\n /**\n * Put focus on the first \"input\" element (input, button, select, textarea) within an element\n * If element is null or input element not found, does nothing\n * @param element The element to put focus in.\n * @param selector The first element matching this selector will be focused.\n * @returns The element that was focused, null if not focused\n */\n static focusElement(element) {\n var selector = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : LayoutUtils.DEFAULT_FOCUS_SELECTOR;\n if (element == null) {\n return null;\n }\n var focusElement = element.querySelector(selector);\n if (focusElement == null) {\n return null;\n }\n if (isHTMLElement(focusElement)) {\n focusElement.focus();\n }\n return focusElement;\n }\n\n /**\n * Get a promise that initializes when layout is initialized\n * @param layout The layout to await initialization on\n * @returns Promise that resolves when layout is initialized\n */\n static onInitialized(layout) {\n return new Promise(resolve => {\n if (layout.isInitialised) {\n resolve();\n return;\n }\n var onInit = () => {\n layout.off('initialised', onInit);\n resolve();\n };\n layout.on('initialised', onInit);\n });\n }\n}\n_defineProperty(LayoutUtils, \"DEFAULT_FOCUS_SELECTOR\", 'input, select, textarea, button');\nexport default LayoutUtils;\n//# sourceMappingURL=LayoutUtils.js.map","import React from 'react';\nimport \"./PanelPlaceholder.css\";\nimport LayoutUtils from \"./layout/LayoutUtils.js\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * Displays a placeholder for unregistered panel types.\n */\nvar PanelPlaceholder = /*#__PURE__*/React.forwardRef((props, ref) => {\n var component = LayoutUtils.getComponentNameFromPanel({\n props\n });\n return /*#__PURE__*/_jsx(\"div\", {\n ref: ref,\n className: \"panel-placeholder\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n children: [\"Component \\\"\", component, \"\\\" is not registered.\"]\n })\n });\n});\nPanelPlaceholder.displayName = 'PanelPlaceholder';\nexport default PanelPlaceholder;\n//# sourceMappingURL=PanelPlaceholder.js.map","/**\n * Events emitted by panels and to control panels\n */\nexport default Object.freeze({\n // Panel has received focus\n FOCUS: 'PanelEvent.FOCUS',\n // Panel has been mounted\n MOUNT: 'PanelEvent.MOUNT',\n // Panel has been unmounted\n UNMOUNT: 'PanelEvent.UNMOUNT',\n // The title of the panel has changed\n TITLE_CHANGED: 'PanelEvent.TITLE_CHANGED',\n // Panel was re-opened from a dehydrated state\n REOPEN: 'PanelEvent.REOPEN',\n // Panel was deleted\n DELETE: 'PanelEvent.DELETE',\n // Panel was cloned/copied\n CLONED: 'PanelEvent.CLONED',\n // Panel was closed\n CLOSED: 'PanelEvent.CLOSED',\n // Event to open a new panel\n // Plugins will need to register to open based on this event.\n // Multiple plugins could open panels for the same event if desired.\n OPEN: 'PanelEvent.OPEN',\n // Event to close a panel that's currently open\n CLOSE: 'PanelEvent.CLOSE',\n // Panel is being dragged\n DRAGGING: 'PanelEvent.DRAGGING',\n // Panel is dropped\n DROPPED: 'PanelEvent.DROPPED'\n});\n//# sourceMappingURL=PanelEvent.js.map","import GoldenLayout from '@deephaven/golden-layout';\nimport PanelManager from \"./PanelManager.js\";\n/**\n * Panel components can provide static props that provide meta data about the\n * panel.\n */\n/**\n * Alias for the return type of React.forwardRef()\n */\n/**\n * @deprecated Use `PanelComponentType` instead and add generic types to forwardRef call.\n */\nexport function isWrappedComponent(type) {\n return (type === null || type === void 0 ? void 0 : type.WrappedComponent) !== undefined;\n}\n/**\n * Takes a partial DashboardPluginComponentProps and verifies all the dashboard component fields are filled in.\n * @param props The props to check\n * @returns True if the props are valid DashboardPluginComponentProps, false otherwise\n */\nexport function isDashboardPluginProps(props) {\n return typeof props.id === 'string' && props.layout instanceof GoldenLayout && props.panelManager instanceof PanelManager && typeof props.registerComponent === 'function';\n}\nexport function assertIsDashboardPluginProps(props) {\n if (!isDashboardPluginProps(props)) {\n throw new Error(\"Expected dashboard plugin props, but instead received \".concat(props));\n }\n}\n//# sourceMappingURL=DashboardPlugin.js.map","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 Log from '@deephaven/log';\nimport PanelEvent from \"./PanelEvent.js\";\nimport LayoutUtils, { isReactComponentConfig } from \"./layout/LayoutUtils.js\";\nimport { isWrappedComponent } from \"./DashboardPlugin.js\";\nvar log = Log.module('PanelManager');\n/**\n * Class to keep track of which panels are open, have been closed, and also events to close panels.\n */\nclass PanelManager {\n /**\n * @param layout The GoldenLayout object to attach to\n * @param hydrateComponent Function to hydrate a panel from a dehydrated state\n * @param dehydrateComponent Function to dehydrate a panel\n * @param openedMap Map of opened panels\n * @param closed Array of closed panels in a dehydrated state\n * @param onPanelsUpdated Triggered when the panels are updated\n */\n constructor(layout) {\n var hydrateComponent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : (name, props) => props;\n var dehydrateComponent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : (name, config) => config;\n var openedMap = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : new Map();\n var closed = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];\n var onPanelsUpdated = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : () => undefined;\n _defineProperty(this, \"layout\", void 0);\n _defineProperty(this, \"hydrateComponent\", void 0);\n _defineProperty(this, \"dehydrateComponent\", void 0);\n _defineProperty(this, \"onPanelsUpdated\", void 0);\n _defineProperty(this, \"closed\", void 0);\n _defineProperty(this, \"openedMap\", void 0);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleMount = this.handleMount.bind(this);\n // Panel can be unmounted on error but still keep the tab until it's closed\n // Use PanelEvent.MOUNT/UNMOUNT to track open (active) panels\n // and PanelEvent.CLOSED for cleanup (delete links, add panel to closed panels list, etc)\n this.handleUnmount = this.handleUnmount.bind(this);\n this.handleReopen = this.handleReopen.bind(this);\n this.handleDeleted = this.handleDeleted.bind(this);\n this.handleClosed = this.handleClosed.bind(this);\n this.handleControlClose = this.handleControlClose.bind(this);\n this.layout = layout;\n this.hydrateComponent = hydrateComponent;\n this.dehydrateComponent = dehydrateComponent;\n this.onPanelsUpdated = onPanelsUpdated;\n\n // Store the opened and closed panels\n this.openedMap = new Map(openedMap);\n\n // Closed panels are stored in their dehydrated state\n this.closed = [...closed];\n this.startListening();\n }\n startListening() {\n var {\n eventHub\n } = this.layout;\n eventHub.on(PanelEvent.FOCUS, this.handleFocus);\n eventHub.on(PanelEvent.MOUNT, this.handleMount);\n eventHub.on(PanelEvent.UNMOUNT, this.handleUnmount);\n eventHub.on(PanelEvent.REOPEN, this.handleReopen);\n eventHub.on(PanelEvent.DELETE, this.handleDeleted);\n eventHub.on(PanelEvent.CLOSED, this.handleClosed);\n eventHub.on(PanelEvent.CLOSE, this.handleControlClose);\n // PanelEvent.OPEN should be listened to by plugins to open a panel\n }\n\n stopListening() {\n var {\n eventHub\n } = this.layout;\n eventHub.off(PanelEvent.FOCUS, this.handleFocus);\n eventHub.off(PanelEvent.MOUNT, this.handleMount);\n eventHub.off(PanelEvent.UNMOUNT, this.handleUnmount);\n eventHub.off(PanelEvent.REOPEN, this.handleReopen);\n eventHub.off(PanelEvent.DELETE, this.handleDeleted);\n eventHub.off(PanelEvent.CLOSED, this.handleClosed);\n eventHub.off(PanelEvent.CLOSE, this.handleControlClose);\n }\n getClosedPanelConfigsOfType(typeString) {\n return this.closed.filter(panel => panel.component === typeString);\n }\n getOpenedPanels() {\n return Array.from(this.openedMap.values());\n }\n getOpenedPanelConfigs() {\n return this.getOpenedPanels().map(panel => {\n var {\n glContainer\n } = panel.props;\n return LayoutUtils.getComponentConfigFromContainer(glContainer);\n });\n }\n getOpenedPanelConfigsOfType(typeString) {\n return this.getOpenedPanelConfigs().filter(config => config != null && isReactComponentConfig(config) && config.component === typeString);\n }\n getOpenedPanelById(panelId) {\n return this.openedMap.get(panelId);\n }\n getContainerByPanelId(panelId) {\n var _ref;\n var stack = LayoutUtils.getStackForConfig(this.layout.root, {\n id: panelId\n });\n return (_ref = stack && LayoutUtils.getContentItemInStack(stack, {\n id: panelId\n })) !== null && _ref !== void 0 ? _ref : null;\n }\n getLastUsedPanel(matcher) {\n var opened = this.getOpenedPanels();\n for (var i = opened.length - 1; i >= 0; i -= 1) {\n var _panel = opened[i];\n if (matcher == null || matcher(_panel)) {\n return _panel;\n }\n }\n return undefined;\n }\n getLastUsedPanelOfType(type) {\n return this.getLastUsedPanelOfTypes([type]);\n }\n getLastUsedPanelOfTypes(types) {\n return this.getLastUsedPanel(panel => types.some(type => isWrappedComponent(type) && panel instanceof type.WrappedComponent || !isWrappedComponent(type) && panel instanceof type));\n }\n updatePanel(panel) {\n var panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n log.error('updatePanel Panel did not have an ID', panel);\n return;\n }\n log.debug2(\"Updating panel ID \".concat(panelId, \" in open panels map\"));\n // Delete the entry before it's set to maintain correct ordering in the open panels map.\n // The last updated (focused) panel should be the last inserted.\n // Deleting the entry from the map directly instead of calling this.removePanel to skip the checks.\n this.openedMap.delete(panelId);\n this.openedMap.set(panelId, panel);\n }\n removePanel(panel) {\n var panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n log.error('removePanel Panel did not have an ID', panel);\n return;\n }\n if (!this.openedMap.has(panelId)) {\n log.error(\"Missing panel ID \".concat(panelId, \" in open panels map\"));\n return;\n }\n if (this.openedMap.get(panelId) !== panel) {\n // We mount a new panel before un-mounting the existing one\n // when replacing existing panels in openComponent/openComponentInStack.\n // Skip map delete if the panelId entry already refers to the new panel.\n log.debug(\"Panel argument doesn't match the open panels map entry for \".concat(panelId, \", removePanel ignored\"));\n return;\n }\n log.debug2(\"Removing panel ID \".concat(panelId, \" from open panels map\"));\n this.openedMap.delete(panelId);\n }\n removeClosedPanelConfig(panelConfig) {\n var index = this.closed.findIndex(closedConfig => closedConfig === panelConfig || closedConfig.id != null && panelConfig.id != null && closedConfig.id === panelConfig.id);\n if (index >= 0) {\n this.closed.splice(index, 1);\n }\n }\n handleFocus(panel) {\n log.debug2('Focus: ', panel);\n this.updatePanel(panel);\n }\n handleMount(panel) {\n log.debug2('Mount: ', panel);\n this.updatePanel(panel);\n this.sendUpdate();\n }\n handleUnmount(panel) {\n log.debug2('Unmount: ', panel);\n this.removePanel(panel);\n this.sendUpdate();\n }\n\n /**\n *\n * @param panelConfig The config to hydrate and load\n * @param replaceConfig The config to place\n */\n handleReopen(panelConfig, replaceConfig) {\n log.debug2('Reopen:', panelConfig, replaceConfig);\n this.removeClosedPanelConfig(panelConfig);\n // Don't need to send an update yet, it will get sent when component is mounted\n\n // Rehydrate the panel before adding it back\n var {\n component\n } = panelConfig;\n var {\n props\n } = panelConfig;\n props = this.hydrateComponent(component, props);\n var config = _objectSpread(_objectSpread({}, panelConfig), {}, {\n props\n });\n var {\n root\n } = this.layout;\n LayoutUtils.openComponent({\n root,\n config,\n replaceConfig\n });\n }\n handleDeleted(panelConfig) {\n log.debug2('Deleted:', panelConfig);\n this.removeClosedPanelConfig(panelConfig);\n this.sendUpdate();\n }\n handleClosed(panelId, glContainer) {\n // Panel component should be already unmounted at this point\n // so the emitted event sends the container object instead of the panel.\n log.debug2('Closed: ', panelId);\n this.addClosedPanel(glContainer);\n this.sendUpdate();\n }\n handleControlClose(id) {\n var config = {\n id\n };\n var {\n root\n } = this.layout;\n LayoutUtils.closeComponent(root, config);\n }\n addClosedPanel(glContainer) {\n var config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n if (config && isReactComponentConfig(config)) {\n var dehydratedConfig = this.dehydrateComponent(config.component, config);\n if (dehydratedConfig != null) {\n this.closed.push(dehydratedConfig);\n }\n }\n }\n sendUpdate() {\n var {\n closed,\n openedMap\n } = this;\n this.onPanelsUpdated({\n closed: [...closed],\n openedMap: new Map(openedMap)\n });\n }\n}\n_defineProperty(PanelManager, \"MAX_CLOSED_PANEL_COUNT\", 100);\nexport default PanelManager;\n//# sourceMappingURL=PanelManager.js.map","import React, { Component } from 'react';\nimport { LoadingOverlay } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport PanelEvent from \"./PanelEvent.js\";\nimport LayoutUtils from \"./layout/LayoutUtils.js\";\nimport \"./PanelErrorBoundary.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar log = Log.module('PanelErrorBoundary');\n/**\n * Panel wrapper implementing Error Boundary and emitting Closed event.\n * Closed event has to be emitted from the wrapper instead of the panel itself\n * because the panel can get unmounted on errors\n * and we want to differentiate between unmount on error vs panel being intentionally closed.\n */\nclass PanelErrorBoundary extends Component {\n constructor(props) {\n super(props);\n this.state = {\n error: null\n };\n }\n componentDidCatch(error) {\n this.setState({\n error\n });\n }\n componentWillUnmount() {\n var {\n glContainer,\n glEventHub\n } = this.props;\n var panelId = LayoutUtils.getIdFromContainer(glContainer);\n log.debug('componentWillUnmount', panelId);\n glEventHub.emit(PanelEvent.CLOSED, panelId, glContainer);\n }\n render() {\n var {\n children\n } = this.props;\n var {\n error\n } = this.state;\n if (error != null) {\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"panel-error-boundary\",\n children: /*#__PURE__*/_jsx(LoadingOverlay, {\n errorMessage: \"\".concat(error),\n isLoading: false,\n isLoaded: false\n })\n });\n }\n return children;\n }\n}\nexport default PanelErrorBoundary;\n//# sourceMappingURL=PanelErrorBoundary.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-is';\nimport { isWrappedComponent } from \"./DashboardPlugin.js\";\n/**\n * Dehydrate an existing panel to allow it to be serialized/saved.\n * Just takes what's in the panels `metadata` in the props and `panelState` in\n * the component state, assumes it's serializable, and saves it.\n * @param config The panel config to dehydrate\n * @returns The dehydrated PanelConfig\n */\nexport function dehydrate(config) {\n var {\n props,\n componentState\n } = config;\n var {\n metadata\n } = props;\n var {\n panelState = null\n } = props;\n if (componentState) {\n ({\n panelState\n } = componentState);\n }\n var newProps = {};\n if (metadata != null) {\n newProps.metadata = metadata;\n }\n if (panelState != null) {\n newProps.panelState = panelState;\n }\n return _objectSpread(_objectSpread({}, config), {}, {\n componentState: null,\n props: newProps,\n type: 'react-component'\n });\n}\n\n/**\n * Default hydration function. Just applies the dashboard ID. When used with dehydrate above,\n * the panels state will be stored in `panelState` prop.\n * @param props Panel props to hydrate\n * @param localDashboardId The local dashboard ID to hydrate the panel with\n * @returns The hydrated panel props\n */\nexport function hydrate(props) {\n var localDashboardId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n return _objectSpread(_objectSpread({\n metadata: {}\n }, props), {}, {\n localDashboardId\n });\n}\n\n/**\n * Checks if a panel component can take a ref. Helps silence react dev errors\n * if a ref is passed to a functional component without forwardRef.\n * @param component The panel component to check if it can take a ref\n * @returns Wheter the component can take a ref or not\n */\nexport function canHaveRef(component) {\n // Might be a redux connect wrapped component\n var isClassComponent = isWrappedComponent(component) && component.WrappedComponent.prototype != null && component.WrappedComponent.prototype.isReactComponent != null || component.prototype != null && component.prototype.isReactComponent != null;\n var isForwardRef = !isWrappedComponent(component) && '$$typeof' in component && component.$$typeof === ForwardRef;\n return isClassComponent || isForwardRef;\n}\nexport default {\n dehydrate,\n hydrate\n};\n//# sourceMappingURL=DashboardUtils.js.map","import React from 'react';\nexport var LayoutManagerContext = /*#__PURE__*/React.createContext(undefined);\nexport default LayoutManagerContext;\n//# sourceMappingURL=LayoutManagerContext.js.map","import PropTypes from 'prop-types';\nvar Container = PropTypes.shape({\n on: PropTypes.func,\n off: PropTypes.func,\n isHidden: PropTypes.bool,\n tab: PropTypes.shape({\n header: PropTypes.shape({\n tabs: PropTypes.arrayOf(PropTypes.shape({\n contentItem: PropTypes.shape({})\n }))\n })\n }),\n title: PropTypes.string,\n setTitle: PropTypes.func,\n close: PropTypes.func\n});\nvar EventHub = PropTypes.shape({\n on: PropTypes.func,\n off: PropTypes.func,\n emit: PropTypes.func\n});\nvar Layout = PropTypes.shape({\n registerComponent: PropTypes.func,\n root: PropTypes.shape({\n addChild: PropTypes.func\n }),\n on: PropTypes.func,\n off: PropTypes.func,\n eventHub: EventHub\n});\nvar GLPropTypes = Object.freeze({\n Container,\n EventHub,\n Layout\n});\nexport default GLPropTypes;\n//# sourceMappingURL=GLPropTypes.js.map","import { useEffect } from 'react';\n/**\n * Listen for a specific event on an EventEmitter\n * @param eventEmitter EventEmitter to listen to\n * @param eventName Name of the event to listen to\n * @param callback Callback to call when the event is triggered\n */\nexport function useListener(eventEmitter, eventName,\n// eslint-disable-next-line @typescript-eslint/ban-types\ncallback) {\n useEffect(function initEventEmitter() {\n eventEmitter.on(eventName, callback);\n return () => {\n eventEmitter.off(eventName, callback);\n };\n }, [eventEmitter, eventName, callback]);\n}\nexport default useListener;\n//# sourceMappingURL=useListener.js.map","import React from 'react';\n/**\n * Registers a given panel component. Also runs a `useEffect` that will\n * automatically de-register then panel on unmount.\n * @param registerComponent\n * @param ComponentType\n * @param hydrate\n * @param dehydrate\n */\nexport default function usePanelRegistration(registerComponent, ComponentType, hydrate, dehydrate) {\n var _ComponentType$COMPON;\n var name = (_ComponentType$COMPON = ComponentType.COMPONENT) !== null && _ComponentType$COMPON !== void 0 ? _ComponentType$COMPON : ComponentType.displayName;\n if (name == null) {\n throw new Error('ComponentType must have a `COMPONENT` or `displayName` attribute.');\n }\n React.useEffect(() => {\n var deregister = registerComponent(name, ComponentType, hydrate, dehydrate);\n return () => {\n deregister();\n };\n }, [ComponentType, dehydrate, hydrate, name, registerComponent]);\n}\n//# sourceMappingURL=usePanelRegistration.js.map","import { useCallback } from 'react';\nimport shortid from 'shortid';\nimport PanelEvent from \"../PanelEvent.js\";\nimport LayoutUtils from \"./LayoutUtils.js\";\nimport useListener from \"./useListener.js\";\nimport usePanelRegistration from \"./usePanelRegistration.js\";\n/**\n * Register a panel that will be opened when one of the `supportedTypes` objects is triggered.\n */\nexport function useDashboardPanel(_ref) {\n var {\n dashboardProps,\n componentName,\n component,\n supportedTypes,\n hydrate,\n dehydrate\n } = _ref;\n var {\n id,\n layout,\n registerComponent\n } = dashboardProps;\n var handlePanelOpen = useCallback(_ref2 => {\n var _widget$title;\n var {\n dragEvent,\n fetch,\n panelId = shortid.generate(),\n widget\n } = _ref2;\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 isSupportedType = Array.isArray(supportedTypes) && supportedTypes.includes(type) || type === supportedTypes;\n if (!isSupportedType) {\n // Only want to listen for your custom variable types\n return;\n }\n var metadata = {\n id: widgetId,\n name,\n type\n };\n var props = {\n localDashboardId: id,\n metadata,\n fetch\n };\n if (hydrate != null) {\n props = hydrate(props, id);\n }\n var config = {\n type: 'react-component',\n component: componentName,\n props,\n title: name,\n id: panelId\n };\n var {\n root\n } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n dragEvent\n });\n }, [componentName, hydrate, id, layout, supportedTypes]);\n\n /**\n * Register our custom component type so the layout know hows to open it\n */\n usePanelRegistration(registerComponent, component, hydrate, dehydrate);\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}\nexport default useDashboardPanel;\n//# sourceMappingURL=useDashboardPanel.js.map","import { useContext } from 'react';\nimport LayoutManagerContext from \"./LayoutManagerContext.js\";\n/**\n * Retrieve the current LayoutManager from the context\n */\nfunction useLayoutManager() {\n var layoutManager = useContext(LayoutManagerContext);\n if (layoutManager == null) {\n throw new Error('LayoutManager not available, did you add a LayoutManagerContext.Provider to the tree?');\n }\n return layoutManager;\n}\nexport default useLayoutManager;\n//# sourceMappingURL=useLayoutManager.js.map","function ownKeys(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 deepEqual from 'deep-equal';\n/**\n * Setup a replace reducer for a specific action type.\n * Will take the payload passed in and replace the entity at the id with the payload\n * @param type The action type\n */\nexport default function replaceByIdReducer(type) {\n var initialState = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var checkIfChanged = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n return function () {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n switch (action.type) {\n case type:\n {\n var {\n id,\n payload\n } = action;\n if (checkIfChanged && deepEqual({\n payload\n }, {\n payload: state[id]\n })) {\n return state;\n }\n return _objectSpread(_objectSpread({}, state), {}, {\n [id]: payload\n });\n }\n default:\n return state;\n }\n };\n}\n//# sourceMappingURL=replaceByIdReducer.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/**\n * A registry for registering reducers. Whenever a new reducer is added,\n * the reducers should be replaced in the store.\n *\n * See this blog post for some notes on redux modules/code splitting\n * http://nicolasgallagher.com/redux-modules-and-code-splitting/\n */\nexport class ReducerRegistry {\n constructor() {\n _defineProperty(this, \"reducers\", {});\n _defineProperty(this, \"listener\", null);\n }\n register(name, reducer) {\n var _this$listener;\n this.reducers = _objectSpread(_objectSpread({}, this.reducers), {}, {\n [name]: reducer\n });\n (_this$listener = this.listener) === null || _this$listener === void 0 ? void 0 : _this$listener.call(this, this.reducers);\n }\n setListener(listener) {\n this.listener = listener;\n }\n}\nvar reducerRegistry = new ReducerRegistry();\nexport default reducerRegistry;\n//# sourceMappingURL=reducerRegistry.js.map","// eslint-disable-next-line import/prefer-default-export\nexport var SET_DASHBOARD_DATA = 'SET_DASHBOARD_DATA';\n//# sourceMappingURL=actionTypes.js.map","/**\n * Store information about input filters set in a dashboard\n */\nimport { replaceByIdReducer } from '@deephaven/redux';\nimport { SET_DASHBOARD_DATA } from \"../actionTypes.js\";\nexport default replaceByIdReducer(SET_DASHBOARD_DATA, {}, false);\n//# sourceMappingURL=dashboardData.js.map","import dashboardData from \"./dashboardData.js\";\nexport default {\n dashboardData\n};\n//# sourceMappingURL=index.js.map","var EMPTY_MAP = new Map();\nvar EMPTY_OBJECT = Object.freeze({});\nvar EMPTY_ARRAY = Object.freeze([]);\n/**\n * Retrieve the data for all dashboards\n * @param store The redux store\n * @returns Property mapping dashboard ID to data for that dashboard\n */\nexport var getAllDashboardsData = store => store.dashboardData;\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns The data object for the dashboard with the specified ID\n */\nexport var getDashboardData = (store, dashboardId) => {\n var _getAllDashboardsData;\n return (_getAllDashboardsData = getAllDashboardsData(store)[dashboardId]) !== null && _getAllDashboardsData !== void 0 ? _getAllDashboardsData : EMPTY_OBJECT;\n};\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns The ClosedPanel array of panels that were previously closed/dehydrated\n */\nexport var getClosedPanelsForDashboard = (store, dashboardId) => {\n var _getDashboardData$clo;\n return (_getDashboardData$clo = getDashboardData(store, dashboardId).closed) !== null && _getDashboardData$clo !== void 0 ? _getDashboardData$clo : EMPTY_ARRAY;\n};\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns The map of panel IDs to components of all currently open components\n */\nexport var getOpenedPanelMapForDashboard = (store, dashboardId) => {\n var _getDashboardData$ope;\n return (_getDashboardData$ope = getDashboardData(store, dashboardId).openedMap) !== null && _getDashboardData$ope !== void 0 ? _getDashboardData$ope : EMPTY_MAP;\n};\n//# sourceMappingURL=selectors.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 { SET_DASHBOARD_DATA } from \"./actionTypes.js\";\nimport { getDashboardData } from \"./selectors.js\";\n/**\n * Action to replace the dashboard data for a dashboard\n * @param id The ID of the dashboard to set the data on\n * @param data Data for the dashboard\n * @returns The action to get dispatched\n */\nexport var setDashboardData = (id, data) => ({\n type: SET_DASHBOARD_DATA,\n id,\n payload: data\n});\n\n/**\n * Action to update the dashboard data. Will combine the update with any existing dashboard data.\n * @param id The id of the dashboard to update the data on\n * @param updateData The data to combine with the existing dashboard data\n * @returns\n */\nexport var updateDashboardData = (id, data) => (dispatch, getState) => dispatch(setDashboardData(id, _objectSpread(_objectSpread({}, getDashboardData(getState(), id)), data)));\n//# sourceMappingURL=actions.js.map","import { reducerRegistry } from '@deephaven/redux';\nimport reducers from \"./reducers/index.js\";\nObject.entries(reducers).map(_ref => {\n var [name, reducer] = _ref;\n return reducerRegistry.register(name, reducer);\n});\nexport { reducers };\nexport * from \"./actions.js\";\nexport * from \"./actionTypes.js\";\nexport * from \"./selectors.js\";\n//# sourceMappingURL=index.js.map","import React from 'react';\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function DashboardPanelWrapper(_ref) {\n var {\n children\n } = _ref;\n // eslint-disable-next-line react/jsx-no-useless-fragment\n return /*#__PURE__*/_jsx(_Fragment, {\n children: children\n });\n}\nexport default DashboardPanelWrapper;\n//# sourceMappingURL=DashboardPanelWrapper.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, { useCallback, useEffect, useMemo, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport Log from '@deephaven/log';\nimport { usePrevious } from '@deephaven/react-hooks';\nimport { useDispatch, useSelector } from 'react-redux';\nimport PanelManager from \"./PanelManager.js\";\nimport PanelErrorBoundary from \"./PanelErrorBoundary.js\";\nimport LayoutUtils from \"./layout/LayoutUtils.js\";\nimport { canHaveRef, dehydrate as dehydrateDefault, hydrate as hydrateDefault } from \"./DashboardUtils.js\";\nimport PanelEvent from \"./PanelEvent.js\";\nimport { GLPropTypes, useListener } from \"./layout/index.js\";\nimport { getDashboardData, updateDashboardData } from \"./redux/index.js\";\nimport DashboardPanelWrapper from \"./DashboardPanelWrapper.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\";\nvar log = Log.module('DashboardLayout');\nvar EMPTY_OBJECT = Object.freeze({});\nvar DEFAULT_LAYOUT_CONFIG = [];\nvar DEFAULT_CALLBACK = () => undefined;\n\n// If a component isn't registered, just pass through the props so they are saved if a plugin is loaded later\nvar FALLBACK_CALLBACK = props => props;\n/**\n * DashboardLayout component. Handles hydrating, dehydrating components, listening for dragging panels.\n */\nexport function DashboardLayout(_ref) {\n var _useSelector, _closed;\n var {\n id,\n children,\n emptyDashboard = /*#__PURE__*/_jsx(\"div\", {\n children: \"Dashboard is empty.\"\n }),\n layout,\n layoutConfig = DEFAULT_LAYOUT_CONFIG,\n onLayoutChange = DEFAULT_CALLBACK,\n onLayoutInitialized = DEFAULT_CALLBACK,\n hydrate = hydrateDefault,\n dehydrate = dehydrateDefault,\n panelWrapper = DashboardPanelWrapper\n } = _ref;\n var dispatch = useDispatch();\n var data = (_useSelector = useSelector(state => getDashboardData(state, id))) !== null && _useSelector !== void 0 ? _useSelector : EMPTY_OBJECT;\n var [isDashboardEmpty, setIsDashboardEmpty] = useState(false);\n var [isItemDragging, setIsItemDragging] = useState(false);\n var [lastConfig, setLastConfig] = useState();\n var [initialClosedPanels] = useState((_closed = data === null || data === void 0 ? void 0 : data.closed) !== null && _closed !== void 0 ? _closed : []);\n var [isDashboardInitialized, setIsDashboardInitialized] = useState(false);\n var [layoutChildren, setLayoutChildren] = useState(layout.getReactChildren());\n var hydrateMap = useMemo(() => new Map(), []);\n var dehydrateMap = useMemo(() => new Map(), []);\n var registerComponent = useCallback(function (name, componentType) {\n var _componentType$displa;\n var componentHydrate = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : hydrate;\n var componentDehydrate = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : dehydrate;\n log.debug2('registerComponent', name, componentType, componentHydrate, componentDehydrate);\n function wrappedComponent(props, ref) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var CType = componentType;\n var PanelWrapperType = panelWrapper;\n\n /**\n * The ref is used to detect changes to class component state so we\n * can track changes to panelState. We should opt for more explicit\n * state changes in the future and in functional components.\n */\n var hasRef = canHaveRef(CType);\n\n // Props supplied by GoldenLayout\n var {\n glContainer,\n glEventHub\n } = props;\n return /*#__PURE__*/_jsx(PanelErrorBoundary, {\n glContainer: glContainer,\n glEventHub: glEventHub,\n children: /*#__PURE__*/_jsx(PanelWrapperType, _objectSpread(_objectSpread({}, props), {}, {\n children: hasRef ?\n /*#__PURE__*/\n // eslint-disable-next-line react/jsx-props-no-spreading\n _jsx(CType, _objectSpread(_objectSpread({}, props), {}, {\n ref: ref\n })) :\n /*#__PURE__*/\n // eslint-disable-next-line react/jsx-props-no-spreading\n _jsx(CType, _objectSpread({}, props))\n }))\n });\n }\n wrappedComponent.displayName = \"DashboardWrapper(\".concat((_componentType$displa = componentType.displayName) !== null && _componentType$displa !== void 0 ? _componentType$displa : name, \")\");\n var cleanup = layout.registerComponent(name, /*#__PURE__*/React.forwardRef(wrappedComponent));\n hydrateMap.set(name, componentHydrate);\n dehydrateMap.set(name, componentDehydrate);\n return cleanup;\n }, [hydrate, dehydrate, hydrateMap, dehydrateMap, layout, panelWrapper]);\n var hydrateComponent = useCallback((name, props) => {\n var _hydrateMap$get;\n return ((_hydrateMap$get = hydrateMap.get(name)) !== null && _hydrateMap$get !== void 0 ? _hydrateMap$get : FALLBACK_CALLBACK)(props, id);\n }, [hydrateMap, id]);\n var dehydrateComponent = useCallback((name, config) => {\n var _dehydrateMap$get;\n return ((_dehydrateMap$get = dehydrateMap.get(name)) !== null && _dehydrateMap$get !== void 0 ? _dehydrateMap$get : FALLBACK_CALLBACK)(config, id);\n }, [dehydrateMap, id]);\n var panelManager = useMemo(() => new PanelManager(layout, hydrateComponent, dehydrateComponent, new Map(), initialClosedPanels, _ref2 => {\n var {\n closed,\n openedMap\n } = _ref2;\n dispatch(updateDashboardData(id, {\n closed,\n openedMap\n }));\n }), [dehydrateComponent, dispatch, hydrateComponent, id, initialClosedPanels, layout]);\n var handleLayoutStateChanged = useCallback(() => {\n // we don't want to emit stateChanges that happen during item drags or else\n // we risk the last saved state being one without that panel in the layout entirely\n if (isItemDragging) return;\n if (!isDashboardInitialized) {\n onLayoutInitialized();\n setIsDashboardInitialized(true);\n }\n var glConfig = layout.toConfig();\n var contentConfig = glConfig.content;\n var dehydratedLayoutConfig = LayoutUtils.dehydrateLayoutConfig(contentConfig, dehydrateComponent);\n var hasChanged = lastConfig == null || !LayoutUtils.isEqual(lastConfig, dehydratedLayoutConfig);\n log.debug('handleLayoutStateChanged', hasChanged, contentConfig, dehydratedLayoutConfig);\n if (hasChanged) {\n setIsDashboardEmpty(layout.root.contentItems.length === 0);\n setLastConfig(dehydratedLayoutConfig);\n onLayoutChange(dehydratedLayoutConfig);\n setLayoutChildren(layout.getReactChildren());\n }\n }, [dehydrateComponent, isDashboardInitialized, isItemDragging, lastConfig, layout, onLayoutChange, onLayoutInitialized]);\n var handleLayoutItemPickedUp = useCallback(component => {\n var componentId = LayoutUtils.getIdFromContainer(component);\n layout.eventHub.emit(PanelEvent.DRAGGING, componentId);\n setIsItemDragging(true);\n }, [layout.eventHub]);\n var handleLayoutItemDropped = useCallback(component => {\n var componentId = LayoutUtils.getIdFromContainer(component);\n layout.eventHub.emit(PanelEvent.DROPPED, componentId);\n setIsItemDragging(false);\n }, [layout.eventHub]);\n var handleComponentCreated = useCallback(item => {\n log.debug2('handleComponentCreated', item);\n if (item == null || item.config == null || item.config.component == null || item.element == null) {\n return;\n }\n var cssComponent = item.config.component.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n var cssClass = \"\".concat(cssComponent, \"-component\");\n item.element.addClass(cssClass);\n }, []);\n var handleReactChildrenChange = useCallback(() => {\n setLayoutChildren(layout.getReactChildren());\n }, [layout]);\n useListener(layout, 'stateChanged', handleLayoutStateChanged);\n useListener(layout, 'itemPickedUp', handleLayoutItemPickedUp);\n useListener(layout, 'itemDropped', handleLayoutItemDropped);\n useListener(layout, 'componentCreated', handleComponentCreated);\n useListener(layout.eventHub, PanelEvent.TITLE_CHANGED, handleLayoutStateChanged);\n useListener(layout, 'reactChildrenChanged', handleReactChildrenChange);\n var previousLayoutConfig = usePrevious(layoutConfig);\n useEffect(function loadNewConfig() {\n if (previousLayoutConfig !== layoutConfig && layoutConfig !== lastConfig) {\n log.debug('Setting new layout content...');\n var content = LayoutUtils.hydrateLayoutConfig(layoutConfig, hydrateComponent);\n // Remove the old layout before add the new one\n while (layout.root.contentItems.length > 0) {\n layout.root.contentItems[0].remove();\n }\n\n // Add the new content. It is usally just one item from the root\n for (var i = 0; i < content.length; i += 1) {\n layout.root.addChild(content[i]);\n }\n setIsDashboardEmpty(layout.root.contentItems.length === 0);\n }\n }, [hydrateComponent, layout, layoutConfig, lastConfig, panelManager, previousLayoutConfig]);\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [isDashboardEmpty && emptyDashboard, layoutChildren, React.Children.map(children, child => child != null ? /*#__PURE__*/React.cloneElement(child, {\n id,\n layout,\n panelManager,\n registerComponent\n }) : null)]\n });\n}\nDashboardLayout.propTypes = {\n id: PropTypes.string.isRequired,\n children: PropTypes.node,\n data: PropTypes.shape({}),\n emptyDashboard: PropTypes.node,\n layout: GLPropTypes.Layout.isRequired,\n layoutConfig: PropTypes.arrayOf(PropTypes.shape({})),\n onLayoutChange: PropTypes.func,\n onLayoutInitialized: PropTypes.func\n};\nexport default DashboardLayout;\n//# sourceMappingURL=DashboardLayout.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, { useEffect, useMemo, useRef, useState } from 'react';\nimport throttle from 'lodash.throttle';\nimport GoldenLayout from '@deephaven/golden-layout';\nimport \"./layout/GoldenLayout.css\";\nimport LayoutUtils from \"./layout/LayoutUtils.js\";\nimport PanelPlaceholder from \"./PanelPlaceholder.js\";\nimport DashboardLayout from \"./DashboardLayout.js\";\nimport \"./Dashboard.css\";\nimport { LayoutManagerContext } from \"./layout/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar RESIZE_THROTTLE = 100;\nvar DEFAULT_CALLBACK = () => undefined;\nvar EMPTY_OBJECT = Object.freeze({});\nexport function Dashboard(_ref) {\n var {\n id = 'default',\n children,\n emptyDashboard,\n layoutConfig,\n layoutSettings = EMPTY_OBJECT,\n onLayoutConfigChange = DEFAULT_CALLBACK,\n onGoldenLayoutChange = DEFAULT_CALLBACK,\n onLayoutInitialized = DEFAULT_CALLBACK,\n fallbackComponent = PanelPlaceholder,\n hydrate,\n dehydrate,\n panelWrapper\n } = _ref;\n var layoutElement = useRef(null);\n var [isInitialized, setIsInitialized] = useState(false);\n var [layout, setLayout] = useState();\n useEffect(function initDashboard() {\n if (!layoutElement.current) {\n setLayout(undefined);\n return;\n }\n var config = _objectSpread({}, LayoutUtils.makeDefaultLayout());\n if (config.settings === undefined) {\n config.settings = {};\n }\n Object.assign(config.settings, layoutSettings);\n\n // Load our content later after plugins have registered\n config.content = [];\n var newLayout = new GoldenLayout(config, layoutElement.current);\n var onInit = () => {\n newLayout.off('initialised', onInit);\n setIsInitialized(true);\n };\n newLayout.on('initialised', onInit);\n if (fallbackComponent != null) {\n newLayout.setFallbackComponent(fallbackComponent);\n }\n newLayout.init();\n setLayout(newLayout);\n onGoldenLayoutChange(newLayout);\n return () => {\n newLayout.destroy();\n };\n }, [layoutSettings, fallbackComponent, onGoldenLayoutChange, setIsInitialized, setLayout]);\n var handleResize = useMemo(() => throttle(() => {\n if (layout != null && layout.isInitialised) {\n layout === null || layout === void 0 ? void 0 : layout.updateSize();\n }\n }, RESIZE_THROTTLE), [layout]);\n useEffect(function initResizeEventListner() {\n window.addEventListener('resize', handleResize);\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n }, [handleResize]);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"dashboard-container w-100 h-100\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"w-100 h-100\",\n ref: layoutElement\n }), isInitialized && layout && /*#__PURE__*/_jsx(LayoutManagerContext.Provider, {\n value: layout,\n children: /*#__PURE__*/_jsx(DashboardLayout, {\n emptyDashboard: emptyDashboard,\n id: id,\n layout: layout,\n layoutConfig: layoutConfig,\n onLayoutChange: onLayoutConfigChange,\n onLayoutInitialized: onLayoutInitialized,\n hydrate: hydrate,\n dehydrate: dehydrate,\n panelWrapper: panelWrapper,\n children: children\n })\n })]\n });\n}\nexport default Dashboard;\n//# sourceMappingURL=Dashboard.js.map","// eslint-disable-next-line import/prefer-default-export\nexport var DEFAULT_DASHBOARD_ID = 'default';\n//# sourceMappingURL=DashboardConstants.js.map","import { useEffect } from 'react';\nimport { useTheme } from '@deephaven/components';\nimport MonacoUtils from \"./MonacoUtils.js\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function MonacoThemeProvider(_ref) {\n var {\n children\n } = _ref;\n var {\n activeThemes\n } = useTheme();\n useEffect(function refreshMonacoTheme() {\n if (activeThemes != null) {\n MonacoUtils.initTheme();\n }\n }, [activeThemes]);\n\n // eslint-disable-next-line react/jsx-no-useless-fragment\n return /*#__PURE__*/_jsx(_Fragment, {\n children: children\n });\n}\n//# sourceMappingURL=MonacoThemeProvider.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 { Formatter } from '@deephaven/jsapi-utils';\nimport IrisGridProxyModel from \"./IrisGridProxyModel.js\";\nclass IrisGridTestUtils {\n static valueForCell(rowIndex, columnIndex, formatValue) {\n var value = \"\".concat(rowIndex, \",\").concat(columnIndex);\n if (formatValue !== undefined && formatValue) {\n value = \"(\".concat(value, \")\");\n }\n return value;\n }\n constructor(dh) {\n _defineProperty(this, \"dh\", void 0);\n this.dh = dh;\n }\n makeColumn(name) {\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : IrisGridTestUtils.DEFAULT_TYPE;\n var index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return new this.dh.Column({\n index,\n name,\n type\n });\n }\n makeRollupTableConfig() {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return new this.dh.RollupTableConfig();\n }\n makeColumns() {\n var count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 5;\n var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var columns = [];\n for (var i = 0; i < count; i += 1) {\n columns.push(this.makeColumn(\"\".concat(prefix).concat(i), IrisGridTestUtils.DEFAULT_TYPE, i));\n }\n return columns;\n }\n static makeUserColumnWidths() {\n var count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 5;\n var userColumnWidths = new Map();\n for (var i = 0; i < count; i += 1) {\n userColumnWidths.set(i.toString(), 100);\n }\n return userColumnWidths;\n }\n makeRow(i) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var row = new this.dh.Row({\n index: i,\n name: \"\".concat(i)\n });\n row.get = jest.fn(column => IrisGridTestUtils.valueForCell(i, column.index));\n return row;\n }\n makeFilter() {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return new this.dh.FilterCondition();\n }\n makeSort() {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return new this.dh.Sort();\n }\n makeTable() {\n var {\n columns = this.makeColumns(),\n size = 1000000000,\n sort = [],\n layoutHints = {}\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var table = new this.dh.Table({\n columns,\n size,\n sort\n });\n table.copy = jest.fn(() => Promise.resolve(table));\n table.freeze = jest.fn(() => Promise.resolve(table));\n table.layoutHints = layoutHints;\n return table;\n }\n makeTreeTable() {\n var columns = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.makeColumns();\n var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000000000;\n var sort = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var table = new this.dh.TreeTable({\n columns,\n size,\n sort\n });\n table.copy = jest.fn(() => Promise.resolve(table));\n return table;\n }\n makeInputTable() {\n var keyColumns = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return new this.dh.InputTable(keyColumns);\n }\n makeSubscription() {\n var table = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.makeTable();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return new this.dh.TableViewportSubscription({\n table\n });\n }\n makeModel() {\n var table = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.makeTable();\n var formatter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var inputTable = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var {\n dh\n } = this;\n return new IrisGridProxyModel(dh, table, formatter !== null && formatter !== void 0 ? formatter : new Formatter(dh), inputTable);\n }\n}\n_defineProperty(IrisGridTestUtils, \"DEFAULT_TYPE\", 'java.lang.String');\nexport default IrisGridTestUtils;\n//# sourceMappingURL=IrisGridTestUtils.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 { PureComponent } from 'react';\nimport memoize from 'memoize-one';\nimport throttle from 'lodash.throttle';\nimport { GridUtils } from '@deephaven/grid';\nimport Log from '@deephaven/log';\nvar log = Log.module('TableViewportUpdater');\nvar UPDATE_THROTTLE = 150;\n\n/**\n * Updates the viewport for an Iris table, for use in a scroll pane.\n * Automatically throttles the viewport requests and buffers above and below.\n */\n\nclass TableViewportUpdater extends PureComponent {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"subscription\", void 0);\n _defineProperty(this, \"getViewportRowRange\", memoize((table, top, bottom) => {\n var viewHeight = bottom - top;\n var viewportTop = Math.max(0, top - viewHeight * TableViewportUpdater.ROW_BUFFER_PAGES);\n var viewportBottom = bottom + viewHeight * TableViewportUpdater.ROW_BUFFER_PAGES;\n return [viewportTop, viewportBottom];\n }));\n _defineProperty(this, \"getViewportColumns\", memoize((table, left, right, movedColumns) => {\n if (left == null || right == null) {\n return null;\n }\n var viewWidth = right - left;\n var viewportLeft = Math.max(0, left - viewWidth * TableViewportUpdater.COLUMN_BUFFER_PAGES);\n var viewportRight = Math.min(right + viewWidth * TableViewportUpdater.COLUMN_BUFFER_PAGES, table.columns.length - 1);\n\n // Need to get all the columns from the table model now\n var columns = [];\n for (var i = viewportLeft; i <= viewportRight; i += 1) {\n var modelIndex = GridUtils.getModelIndex(i, movedColumns);\n columns.push(table.columns[modelIndex]);\n }\n return columns;\n }));\n _defineProperty(this, \"updateViewport\", throttle((top, bottom, left, right, viewColumns) => {\n if (bottom < top) {\n log.error('Invalid viewport', top, bottom);\n return;\n }\n if (top === 0 && bottom === 0) {\n log.debug2('Ignoring 0-0 viewport');\n return;\n }\n var {\n movedColumns,\n table\n } = this.props;\n var [viewportTop, viewportBottom] = this.getViewportRowRange(table, top, bottom);\n var columns = viewColumns !== null && viewColumns !== void 0 ? viewColumns : this.getViewportColumns(table, left, right, movedColumns);\n log.debug2('Setting Viewport Top:', viewportTop, 'Bottom:', viewportBottom, 'Columns:', columns);\n if (this.subscription == null) {\n log.debug2('updateViewport creating new subscription');\n this.subscription = table.setViewport(viewportTop, viewportBottom, columns);\n var {\n onSubscription\n } = this.props;\n onSubscription(this.subscription);\n } else {\n log.debug2('updateViewport using existing subscription');\n this.subscription.setViewport(viewportTop, viewportBottom, columns);\n }\n }, UPDATE_THROTTLE));\n } // Number of pages to buffer for rows/columns\n componentDidMount() {\n var {\n top,\n bottom,\n left,\n right,\n table,\n filters,\n sorts,\n columns,\n customColumns\n } = this.props;\n table.applyFilter(filters);\n table.applySort(sorts);\n table.applyCustomColumns(customColumns);\n this.updateViewport(top, bottom, left, right, columns);\n }\n componentDidUpdate(prevProps) {\n var {\n top,\n bottom,\n left,\n right,\n table,\n filters,\n sorts,\n customColumns,\n columns\n } = this.props;\n var isFilterChanged = filters !== prevProps.filters;\n var isSortChanged = sorts !== prevProps.sorts;\n var isCustomColumnsChanged = customColumns !== prevProps.customColumns;\n var isTableChanged = table !== prevProps.table;\n if (isFilterChanged || isSortChanged || isCustomColumnsChanged || isTableChanged) {\n this.closeSubscription();\n }\n if (isFilterChanged || isTableChanged) {\n log.debug('update table filter', filters);\n table.applyFilter(filters);\n }\n if (isSortChanged || isTableChanged) {\n log.debug('update table sort', sorts);\n table.applySort(sorts);\n }\n if (isCustomColumnsChanged || isTableChanged) {\n log.debug('update table custom columns', customColumns);\n table.applyCustomColumns(customColumns);\n }\n this.updateViewport(top, bottom, left, right, columns);\n }\n componentWillUnmount() {\n this.closeSubscription();\n }\n\n // eslint-disable-next-line class-methods-use-this\n\n // eslint-disable-next-line class-methods-use-this\n\n closeSubscription() {\n log.debug2('closeSubscription', this.subscription);\n if (this.subscription) {\n this.subscription.close();\n this.subscription = undefined;\n var {\n onSubscription\n } = this.props;\n onSubscription();\n }\n this.updateViewport.cancel();\n }\n render() {\n return null;\n }\n}\n_defineProperty(TableViewportUpdater, \"ROW_BUFFER_PAGES\", 3);\n_defineProperty(TableViewportUpdater, \"COLUMN_BUFFER_PAGES\", 1);\n_defineProperty(TableViewportUpdater, \"defaultProps\", {\n top: 0,\n bottom: 0,\n left: null,\n right: null,\n columns: null,\n onSubscription: () => undefined,\n filters: [],\n sorts: [],\n customColumns: [],\n movedColumns: []\n});\nexport default TableViewportUpdater;\n//# sourceMappingURL=TableViewportUpdater.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 { PureComponent } from 'react';\nimport throttle from 'lodash.throttle';\nimport Log from '@deephaven/log';\nvar log = Log.module('TreeTableViewportUpdater');\nvar UPDATE_THROTTLE = 150;\n/**\n * Updates the viewport of a TreeTable for use in a scroll pane.\n * Automatically throttles the viewport requests and buffers above and below.\n */\nclass TreeTableViewportUpdater extends PureComponent {\n constructor(props) {\n super(props);\n _defineProperty(this, \"listenerCleanup\", void 0);\n _defineProperty(this, \"updateViewport\", throttle((top, bottom) => {\n if (bottom < top) {\n log.error('Invalid viewport', top, bottom);\n return;\n }\n if (top === 0 && bottom === 0) {\n log.debug2('Ignoring 0-0 viewport');\n return;\n }\n var {\n table,\n updateInterval\n } = this.props;\n var viewSize = bottom - top;\n var viewportTop = Math.max(0, top - viewSize * 3);\n var viewportBottom = bottom + viewSize * 3 + 1;\n log.debug2('Setting Viewport Top:', viewportTop, 'Bottom:', viewportBottom, table);\n if (!this.listenerCleanup) {\n var {\n dh,\n onViewportUpdate\n } = this.props;\n this.listenerCleanup = table.addEventListener(dh.TreeTable.EVENT_UPDATED, onViewportUpdate);\n }\n table.setViewport(viewportTop, viewportBottom, undefined, updateInterval);\n }, UPDATE_THROTTLE));\n this.listenerCleanup = null;\n }\n componentDidMount() {\n var {\n top,\n bottom,\n table,\n filters,\n sorts\n } = this.props;\n log.debug('componentDidMount', this.props);\n table.applyFilter(filters);\n table.applySort(sorts);\n this.updateViewport(top, bottom);\n }\n componentDidUpdate(prevProps) {\n var {\n top,\n bottom,\n table,\n filters,\n sorts\n } = this.props;\n if (filters !== prevProps.filters) {\n log.debug('update table filter', filters);\n table.applyFilter(filters);\n }\n if (sorts !== prevProps.sorts) {\n log.debug('update table sort', sorts);\n table.applySort(sorts);\n }\n this.updateViewport(top, bottom);\n }\n componentWillUnmount() {\n this.updateViewport.cancel();\n if (this.listenerCleanup) {\n this.listenerCleanup();\n }\n }\n render() {\n return null;\n }\n}\n_defineProperty(TreeTableViewportUpdater, \"UPDATE_INTERVAL\", 1000);\n_defineProperty(TreeTableViewportUpdater, \"defaultProps\", {\n top: 0,\n bottom: 0,\n onViewportUpdate: () => undefined,\n filters: [],\n sorts: [],\n updateInterval: TreeTableViewportUpdater.UPDATE_INTERVAL\n});\nexport default TreeTableViewportUpdater;\n//# sourceMappingURL=TreeTableViewportUpdater.js.map","/**\n * remote-component.config.js\n *\n * Dependencies for Remote Components\n */\nimport react from 'react';\nimport * as redux from 'redux';\nimport * as reactRedux from 'react-redux';\nimport ReactDOM from 'react-dom';\nimport * as AdobeReactSpectrum from '@adobe/react-spectrum';\nimport * as DeephavenAuthPlugins from '@deephaven/auth-plugins';\nimport * as DeephavenChart from '@deephaven/chart';\nimport * as DeephavenComponents from '@deephaven/components';\nimport * as DeephavenDashboard from '@deephaven/dashboard';\nimport * as DeephavenIcons from '@deephaven/icons';\nimport * as DeephavenIrisGrid from '@deephaven/iris-grid';\nimport * as DeephavenJsapiBootstrap from '@deephaven/jsapi-bootstrap';\nimport * as DeephavenJsapiComponents from '@deephaven/jsapi-components';\nimport * as DeephavenJsapiUtils from '@deephaven/jsapi-utils';\nimport DeephavenLog from '@deephaven/log';\nimport * as DeephavenReactHooks from '@deephaven/react-hooks';\nimport * as DeephavenPlugin from '@deephaven/plugin';\n\n// eslint-disable-next-line import/prefer-default-export\nexport var resolve = {\n react,\n 'react-dom': ReactDOM,\n redux,\n 'react-redux': reactRedux,\n '@adobe/react-spectrum': AdobeReactSpectrum,\n '@deephaven/auth-plugins': DeephavenAuthPlugins,\n '@deephaven/chart': DeephavenChart,\n '@deephaven/components': DeephavenComponents,\n '@deephaven/dashboard': DeephavenDashboard,\n '@deephaven/icons': DeephavenIcons,\n '@deephaven/iris-grid': DeephavenIrisGrid,\n '@deephaven/jsapi-bootstrap': DeephavenJsapiBootstrap,\n '@deephaven/jsapi-components': DeephavenJsapiComponents,\n '@deephaven/jsapi-utils': DeephavenJsapiUtils,\n '@deephaven/log': DeephavenLog,\n '@deephaven/plugin': DeephavenPlugin,\n '@deephaven/react-hooks': DeephavenReactHooks\n};\n//# sourceMappingURL=remote-component.config.js.map","import createLoadRemoteModule, { createRequires } from '@paciolan/remote-module-loader';\nimport { resolve } from \"./remote-component.config.js\";\nvar requires = createRequires(resolve);\nexport var loadRemoteModule = createLoadRemoteModule({\n requires\n});\nexport default loadRemoteModule;\n//# sourceMappingURL=loadRemoteModule.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 Log from '@deephaven/log';\nimport { isAuthPlugin, PluginType, isLegacyAuthPlugin, isLegacyPlugin } from '@deephaven/plugin';\nimport loadRemoteModule from \"./loadRemoteModule.js\";\nvar log = Log.module('@deephaven/app-utils.PluginUtils');\n/**\n * Imports a commonjs plugin module from the provided URL\n * @param pluginUrl The URL of the plugin to load\n * @returns The loaded module\n */\nexport function loadModulePlugin(_x) {\n return _loadModulePlugin.apply(this, arguments);\n}\n\n/**\n * Loads a JSON file and returns the JSON object\n * @param jsonUrl The URL of the JSON file to load\n * @returns The JSON object of the manifest file\n */\nfunction _loadModulePlugin() {\n _loadModulePlugin = _asyncToGenerator(function* (pluginUrl) {\n var myModule = yield loadRemoteModule(pluginUrl);\n return myModule;\n });\n return _loadModulePlugin.apply(this, arguments);\n}\nexport function loadJson(_x2) {\n return _loadJson.apply(this, arguments);\n}\n\n/**\n * Load all plugin modules available based on the manifest file at the provided base URL\n * @param modulePluginsUrl The base URL of the module plugins to load\n * @returns A map from the name of the plugin to the plugin module that was loaded\n */\nfunction _loadJson() {\n _loadJson = _asyncToGenerator(function* (jsonUrl) {\n var res = yield fetch(jsonUrl);\n if (!res.ok) {\n throw new Error(res.statusText);\n }\n try {\n return yield res.json();\n } catch (_unused) {\n throw new Error('Could not be parsed as JSON');\n }\n });\n return _loadJson.apply(this, arguments);\n}\nexport function loadModulePlugins(_x3) {\n return _loadModulePlugins.apply(this, arguments);\n}\nfunction _loadModulePlugins() {\n _loadModulePlugins = _asyncToGenerator(function* (modulePluginsUrl) {\n log.debug('Loading plugins...');\n try {\n var manifest = yield loadJson(\"\".concat(modulePluginsUrl, \"/manifest.json\"));\n if (!Array.isArray(manifest.plugins)) {\n throw new Error('Plugin manifest JSON does not contain plugins array');\n }\n log.debug('Plugin manifest loaded:', manifest);\n var pluginPromises = [];\n for (var i = 0; i < manifest.plugins.length; i += 1) {\n var {\n name,\n main\n } = manifest.plugins[i];\n var pluginMainUrl = \"\".concat(modulePluginsUrl, \"/\").concat(name, \"/\").concat(main);\n pluginPromises.push(loadModulePlugin(pluginMainUrl));\n }\n var pluginModules = yield Promise.allSettled(pluginPromises);\n var pluginMap = new Map();\n for (var _i = 0; _i < pluginModules.length; _i += 1) {\n var module = pluginModules[_i];\n var {\n name: _name\n } = manifest.plugins[_i];\n if (module.status === 'fulfilled') {\n var _module$value$default;\n var moduleValue = isLegacyPlugin(module.value) ? module.value : // TypeScript builds CJS default exports differently depending on\n // whether there are also named exports. If the default is the only\n // export, it will be the value. If there are also named exports,\n // it will be assigned to the `default` property on the value.\n (_module$value$default = module.value.default) !== null && _module$value$default !== void 0 ? _module$value$default : module.value;\n if (moduleValue == null) {\n log.error(\"Plugin '\".concat(_name, \"' is missing an exported value.\"));\n } else {\n pluginMap.set(_name, moduleValue);\n }\n } else {\n log.error(\"Unable to load plugin '\".concat(_name, \"'\"), module.reason);\n }\n }\n log.info('Plugins loaded:', pluginMap);\n return pluginMap;\n } catch (e) {\n log.error('Unable to load plugins:', e);\n return new Map();\n }\n });\n return _loadModulePlugins.apply(this, arguments);\n}\nexport function getAuthHandlers(authConfigValues) {\n var _authConfigValues$get, _authConfigValues$get2;\n return (_authConfigValues$get = (_authConfigValues$get2 = authConfigValues.get('AuthHandlers')) === null || _authConfigValues$get2 === void 0 ? void 0 : _authConfigValues$get2.split(',')) !== null && _authConfigValues$get !== void 0 ? _authConfigValues$get : [];\n}\n\n/**\n * Get the auth plugin component from the plugin map and current configuration\n * Throws if no auth plugin is available\n *\n * @param pluginMap Map of plugins loaded from the server\n * @param authConfigValues Auth config values from the server\n * @param corePlugins Map of core auth plugins to include in the list. They are added after the loaded plugins\n * @returns The auth plugin component to render\n */\nexport function getAuthPluginComponent(pluginMap, authConfigValues) {\n var corePlugins = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Map();\n var authHandlers = getAuthHandlers(authConfigValues);\n // User plugins take priority over core plugins\n var authPlugins = [...pluginMap.entries(), ...corePlugins.entries()].filter(_ref => {\n var [, plugin] = _ref;\n return isAuthPlugin(plugin) || isLegacyAuthPlugin(plugin);\n }).map(_ref2 => {\n var [name, plugin] = _ref2;\n if (isLegacyAuthPlugin(plugin)) {\n return {\n type: PluginType.AUTH_PLUGIN,\n name,\n component: plugin.AuthPlugin.Component,\n isAvailable: plugin.AuthPlugin.isAvailable\n };\n }\n return plugin;\n });\n\n // Filter the available auth plugins\n var availableAuthPlugins = authPlugins.filter(_ref3 => {\n var {\n isAvailable\n } = _ref3;\n return isAvailable(authHandlers, authConfigValues);\n });\n if (availableAuthPlugins.length === 0) {\n throw new Error(\"No login plugins found, please register a login plugin for auth handlers: \".concat(authHandlers));\n } else if (availableAuthPlugins.length > 1) {\n log.warn('More than one login plugin available, will use the first one: ', availableAuthPlugins.map(_ref4 => {\n var {\n name\n } = _ref4;\n return name;\n }).join(', '));\n }\n var {\n name,\n component\n } = availableAuthPlugins[0];\n log.info('Using LoginPlugin', name);\n return component;\n}\n//# sourceMappingURL=PluginUtils.js.map","import { createRemoteComponent, createRequires } from '@paciolan/remote-component';\nimport { resolve } from \"./remote-component.config.js\";\nvar requires = createRequires(() => resolve);\nexport var RemoteComponent = createRemoteComponent({\n requires\n});\nexport default RemoteComponent;\n//# sourceMappingURL=RemoteComponent.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 React, { useEffect, useState } from 'react';\nimport { PluginsContext } from '@deephaven/plugin';\nimport { loadModulePlugins } from \"../plugins/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * PluginsBootstrap component. Handles loading the plugins.\n */\nexport function PluginsBootstrap(_ref) {\n var {\n pluginsUrl,\n getCorePlugins,\n children\n } = _ref;\n var [plugins, setPlugins] = useState(null);\n useEffect(function initPlugins() {\n var isCanceled = false;\n function loadPlugins() {\n return _loadPlugins.apply(this, arguments);\n }\n function _loadPlugins() {\n _loadPlugins = _asyncToGenerator(function* () {\n var _yield$getCorePlugins;\n var corePlugins = (_yield$getCorePlugins = yield getCorePlugins === null || getCorePlugins === void 0 ? void 0 : getCorePlugins()) !== null && _yield$getCorePlugins !== void 0 ? _yield$getCorePlugins : [];\n var pluginModules = yield loadModulePlugins(pluginsUrl);\n if (!isCanceled) {\n var corePluginPairs = corePlugins.map(plugin => [plugin.name, plugin]);\n setPlugins(new Map([...corePluginPairs, ...pluginModules]));\n }\n });\n return _loadPlugins.apply(this, arguments);\n }\n loadPlugins();\n return () => {\n isCanceled = true;\n };\n }, [pluginsUrl, getCorePlugins]);\n return /*#__PURE__*/_jsx(PluginsContext.Provider, {\n value: plugins,\n children: children\n });\n}\nexport default PluginsBootstrap;\n//# sourceMappingURL=PluginsBootstrap.js.map","import { useBroadcastChannel } from '@deephaven/jsapi-components';\nimport { BROADCAST_LOGIN_MESSAGE, makeMessage } from '@deephaven/jsapi-utils';\nimport { useEffect } from 'react';\n\n/**\n * Component that broadcasts a message when mounted. Should be mounted after the user has logged in.\n */\nexport function LoginNotifier() {\n var channel = useBroadcastChannel();\n useEffect(function notifyLogin() {\n channel.postMessage(makeMessage(BROADCAST_LOGIN_MESSAGE));\n }, [channel]);\n return null;\n}\nexport default LoginNotifier;\n//# sourceMappingURL=LoginNotifier.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 React, { useContext, useEffect, useMemo, useState } from 'react';\nimport { AuthPluginAnonymous, AuthPluginParent, AuthPluginPsk } from '@deephaven/auth-plugins';\nimport { LoadingOverlay } from '@deephaven/components';\nimport { useClient } from '@deephaven/jsapi-bootstrap';\nimport { getErrorMessage } from '@deephaven/utils';\nimport { PluginsContext } from '@deephaven/plugin';\nimport { getAuthPluginComponent } from \"../plugins/index.js\";\nimport LoginNotifier from \"./LoginNotifier.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\";\n/** Core auth plugins that are always loaded */\nvar CORE_AUTH_PLUGINS = new Map([['@deephaven/auth-plugins.AuthPluginParent', {\n AuthPlugin: AuthPluginParent\n}], ['@deephaven/auth-plugins.AuthPluginPsk', {\n AuthPlugin: AuthPluginPsk\n}], ['@deephaven/auth-plugins.AuthPluginAnonymous', {\n AuthPlugin: AuthPluginAnonymous\n}]]);\n\n/**\n * AuthBootstrap component. Handles displaying the auth plugin and authenticating.\n */\nexport function AuthBootstrap(_ref) {\n var {\n children\n } = _ref;\n var client = useClient();\n // `useContext` instead of `usePlugins` so that we don't have to wait for the plugins to load\n // We want to load the auth config values in parallel with the plugins\n var plugins = useContext(PluginsContext);\n var [authConfig, setAuthConfig] = useState();\n var [error, setError] = useState();\n useEffect(function initAuthConfigValues() {\n var isCanceled = false;\n function loadAuthConfigValues() {\n return _loadAuthConfigValues.apply(this, arguments);\n }\n function _loadAuthConfigValues() {\n _loadAuthConfigValues = _asyncToGenerator(function* () {\n try {\n var newAuthConfigValues = yield client.getAuthConfigValues();\n if (!isCanceled) {\n setAuthConfig(new Map(newAuthConfigValues));\n }\n } catch (e) {\n if (!isCanceled) {\n setError(e);\n }\n }\n });\n return _loadAuthConfigValues.apply(this, arguments);\n }\n loadAuthConfigValues();\n return () => {\n isCanceled = true;\n };\n }, [client]);\n var AuthComponent = useMemo(() => {\n if (plugins == null || authConfig == null) {\n return undefined;\n }\n try {\n return getAuthPluginComponent(plugins, authConfig, CORE_AUTH_PLUGINS);\n } catch (e) {\n setError(e);\n }\n }, [authConfig, plugins]);\n var isLoading = AuthComponent == null || authConfig == null;\n if (isLoading || error != null) {\n return /*#__PURE__*/_jsx(LoadingOverlay, {\n isLoading: isLoading && error == null,\n errorMessage: getErrorMessage(error)\n });\n }\n return /*#__PURE__*/_jsx(AuthComponent, {\n authConfigValues: authConfig,\n children: /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(LoginNotifier, {}), children]\n })\n });\n}\nexport default AuthBootstrap;\n//# sourceMappingURL=AuthBootstrap.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 React, { useEffect, useState } from 'react';\nimport { LoadingOverlay } from '@deephaven/components';\nimport { useApi, useClient } from '@deephaven/jsapi-bootstrap';\nimport { ConnectionContext } from '@deephaven/jsapi-components';\nimport Log from '@deephaven/log';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar log = Log.module('@deephaven/app-utils.ConnectionBootstrap');\n/**\n * ConnectionBootstrap component. Handles initializing the connection.\n */\nexport function ConnectionBootstrap(_ref) {\n var {\n children\n } = _ref;\n var api = useApi();\n var client = useClient();\n var [error, setError] = useState();\n var [connection, setConnection] = useState();\n useEffect(function initConnection() {\n var isCanceled = false;\n function loadConnection() {\n return _loadConnection.apply(this, arguments);\n }\n function _loadConnection() {\n _loadConnection = _asyncToGenerator(function* () {\n try {\n var newConnection = yield client.getAsIdeConnection();\n if (isCanceled) {\n return;\n }\n setConnection(newConnection);\n } catch (e) {\n if (isCanceled) {\n return;\n }\n setError(e);\n }\n });\n return _loadConnection.apply(this, arguments);\n }\n loadConnection();\n return () => {\n isCanceled = true;\n };\n }, [api, client]);\n useEffect(function listenForShutdown() {\n if (connection == null) return;\n function handleShutdown(event) {\n var {\n detail\n } = event;\n log.info('Shutdown', \"\".concat(JSON.stringify(detail)));\n setError(\"Server shutdown: \".concat(detail !== null && detail !== void 0 ? detail : 'Unknown reason'));\n }\n var removerFn = connection.addEventListener(api.IdeConnection.EVENT_SHUTDOWN, handleShutdown);\n return removerFn;\n }, [api, connection]);\n if (connection == null || error != null) {\n return /*#__PURE__*/_jsx(LoadingOverlay, {\n \"data-testid\": \"connection-bootstrap-loading\",\n isLoading: connection == null,\n errorMessage: error != null ? \"\".concat(error) : undefined\n });\n }\n return /*#__PURE__*/_jsx(ConnectionContext.Provider, {\n value: connection,\n children: children\n });\n}\nexport default ConnectionBootstrap;\n//# sourceMappingURL=ConnectionBootstrap.js.map","/**\n * Get the base URL of the API\n * @param apiUrl API URL\n * @returns URL for the base of the API\n */\nexport function getBaseUrl(apiUrl) {\n return new URL(apiUrl, \"\".concat(window.location));\n}\n\n/**\n * Get the Envoy prefix header value\n * @returns Envoy prefix header value\n */\nexport function getEnvoyPrefix() {\n var searchParams = new URLSearchParams(window.location.search);\n return searchParams.get('envoyPrefix');\n}\nexport function getConnectOptions() {\n var envoyPrefix = getEnvoyPrefix();\n return envoyPrefix != null ? {\n headers: {\n 'envoy-prefix': envoyPrefix\n }\n } : {\n headers: {}\n };\n}\n//# sourceMappingURL=ConnectUtils.js.map","import React, { useContext } from 'react';\nimport { LoadingOverlay } from '@deephaven/components';\nimport { FontsLoadedContext } from \"./FontBootstrap.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nexport function FontsLoaded(_ref) {\n var {\n children\n } = _ref;\n var isFontsLoaded = useContext(FontsLoadedContext);\n if (!isFontsLoaded) {\n return /*#__PURE__*/_jsx(LoadingOverlay, {\n \"data-testid\": \"fonts-loaded-loading\"\n });\n }\n\n // eslint-disable-next-line react/jsx-no-useless-fragment\n return /*#__PURE__*/_jsx(_Fragment, {\n children: children\n });\n}\nexport default FontsLoaded;\n//# sourceMappingURL=FontsLoaded.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 React, { createContext, useEffect, useState } from 'react';\nimport { LoadingOverlay } from '@deephaven/components';\nimport { useClient } from '@deephaven/jsapi-bootstrap';\nimport { getErrorMessage } from '@deephaven/utils';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport var ServerConfigContext = /*#__PURE__*/createContext(null);\n/**\n * ServerConfigBootstrap component. Handles loading the server config.\n */\nexport function ServerConfigBootstrap(_ref) {\n var {\n children\n } = _ref;\n var client = useClient();\n var [serverConfig, setServerConfig] = useState();\n var [error, setError] = useState();\n useEffect(function initServerConfigValues() {\n var isCanceled = false;\n function loadServerConfigValues() {\n return _loadServerConfigValues.apply(this, arguments);\n }\n function _loadServerConfigValues() {\n _loadServerConfigValues = _asyncToGenerator(function* () {\n try {\n var newServerConfigValues = yield client.getServerConfigValues();\n if (!isCanceled) {\n setServerConfig(new Map(newServerConfigValues));\n }\n } catch (e) {\n if (!isCanceled) {\n setError(e);\n }\n }\n });\n return _loadServerConfigValues.apply(this, arguments);\n }\n loadServerConfigValues();\n return () => {\n isCanceled = true;\n };\n }, [client]);\n var isLoading = serverConfig == null;\n if (isLoading || error != null) {\n return /*#__PURE__*/_jsx(LoadingOverlay, {\n isLoading: isLoading && error == null,\n errorMessage: getErrorMessage(error)\n });\n }\n return /*#__PURE__*/_jsx(ServerConfigContext.Provider, {\n value: serverConfig,\n children: children\n });\n}\nexport default ServerConfigBootstrap;\n//# sourceMappingURL=ServerConfigBootstrap.js.map","import { useContextOrThrow } from '@deephaven/react-hooks';\nimport { ServerConfigContext } from \"./ServerConfigBootstrap.js\";\nexport function useServerConfig() {\n return useContextOrThrow(ServerConfigContext, 'No server config available in useServerConfig. Was code wrapped in ServerConfigBootstrap or ServerConfigContext.Provider?');\n}\nexport default useServerConfig;\n//# sourceMappingURL=useServerConfig.js.map","import React, { useContext } from 'react';\nimport { UserContext, UserOverrideContext, UserPermissionsOverrideContext, getUserFromConfig } from '@deephaven/auth-plugins';\nimport useServerConfig from \"./useServerConfig.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * UserBootstrap component. Derives the UserContext from the ServerConfigContext, UserOverrideContext, and UserPermissionsOverrideContext.\n */\nexport function UserBootstrap(_ref) {\n var {\n children\n } = _ref;\n var serverConfig = useServerConfig();\n var overrides = useContext(UserOverrideContext);\n var permissionsOverrides = useContext(UserPermissionsOverrideContext);\n var user = getUserFromConfig(serverConfig, overrides, permissionsOverrides);\n return /*#__PURE__*/_jsx(UserContext.Provider, {\n value: user,\n children: children\n });\n}\nexport default UserBootstrap;\n//# sourceMappingURL=UserBootstrap.js.map","import { useContext, useMemo } from 'react';\nimport { ChartThemeProvider } from '@deephaven/chart';\nimport { MonacoThemeProvider } from '@deephaven/console';\nimport { ThemeProvider } from '@deephaven/components';\nimport { IrisGridThemeProvider } from '@deephaven/iris-grid';\nimport { getThemeDataFromPlugins, PluginsContext } from '@deephaven/plugin';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function ThemeBootstrap(_ref) {\n var {\n children\n } = _ref;\n // The `usePlugins` hook throws if the context value is null. Since this is\n // the state while plugins load asynchronously, we are using `useContext`\n // directly to avoid the exception.\n var pluginModules = useContext(PluginsContext);\n var themes = useMemo(() => pluginModules == null ? null : getThemeDataFromPlugins(pluginModules), [pluginModules]);\n return /*#__PURE__*/_jsx(ThemeProvider, {\n themes: themes,\n children: /*#__PURE__*/_jsx(ChartThemeProvider, {\n children: /*#__PURE__*/_jsx(MonacoThemeProvider, {\n children: /*#__PURE__*/_jsx(IrisGridThemeProvider, {\n children: children\n })\n })\n })\n });\n}\nexport default ThemeBootstrap;\n//# sourceMappingURL=ThemeBootstrap.js.map","import React, { useCallback, useMemo, useState } from 'react';\nimport '@deephaven/components/scss/BaseStyleSheet.scss';\nimport { ClientBootstrap } from '@deephaven/jsapi-bootstrap';\nimport { RefreshTokenBootstrap, useBroadcastLoginListener } from '@deephaven/jsapi-components';\nimport FontBootstrap from \"./FontBootstrap.js\";\nimport PluginsBootstrap from \"./PluginsBootstrap.js\";\nimport AuthBootstrap from \"./AuthBootstrap.js\";\nimport ConnectionBootstrap from \"./ConnectionBootstrap.js\";\nimport { getConnectOptions } from \"../utils/index.js\";\nimport FontsLoaded from \"./FontsLoaded.js\";\nimport UserBootstrap from \"./UserBootstrap.js\";\nimport ServerConfigBootstrap from \"./ServerConfigBootstrap.js\";\nimport ThemeBootstrap from \"./ThemeBootstrap.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * AppBootstrap component. Handles loading the fonts, client, and authentication.\n * Will display the children when everything is loaded and authenticated.\n */\nexport function AppBootstrap(_ref) {\n var {\n fontClassNames,\n pluginsUrl,\n getCorePlugins,\n serverUrl,\n children\n } = _ref;\n var clientOptions = useMemo(() => getConnectOptions(), []);\n\n // On logout, we reset the client and have user login again\n var [logoutCount, setLogoutCount] = useState(0);\n var onLogin = useCallback(() => undefined, []);\n var onLogout = useCallback(() => {\n setLogoutCount(value => value + 1);\n }, []);\n useBroadcastLoginListener(onLogin, onLogout);\n return /*#__PURE__*/_jsx(FontBootstrap, {\n fontClassNames: fontClassNames,\n children: /*#__PURE__*/_jsx(PluginsBootstrap, {\n getCorePlugins: getCorePlugins,\n pluginsUrl: pluginsUrl,\n children: /*#__PURE__*/_jsx(ThemeBootstrap, {\n children: /*#__PURE__*/_jsx(ClientBootstrap, {\n serverUrl: serverUrl,\n options: clientOptions,\n children: /*#__PURE__*/_jsx(RefreshTokenBootstrap, {\n children: /*#__PURE__*/_jsx(AuthBootstrap, {\n children: /*#__PURE__*/_jsx(ServerConfigBootstrap, {\n children: /*#__PURE__*/_jsx(UserBootstrap, {\n children: /*#__PURE__*/_jsx(ConnectionBootstrap, {\n children: /*#__PURE__*/_jsx(FontsLoaded, {\n children: children\n })\n })\n })\n })\n })\n })\n }, logoutCount)\n })\n })\n });\n}\nexport default AppBootstrap;\n//# sourceMappingURL=AppBootstrap.js.map"],"names":["getErrorMessage","error","errorObj","message","ACTION_ICON_HEIGHT","COMBO_BOX_ITEM_HEIGHT","TABLE_ROW_HEIGHT","SCROLL_DEBOUNCE_MS","SEARCH_DEBOUNCE_MS","VIEWPORT_SIZE","VIEWPORT_PADDING","SPELLCHECK_FALSE_ATTRIBUTE","_excluded","ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread","target","i","source","key","_defineProperty","obj","value","_toPropertyKey","arg","_toPrimitive","input","hint","prim","res","_objectWithoutProperties","excluded","_objectWithoutPropertiesLoose","sourceSymbolKeys","sourceKeys","ActionButtonDialogTrigger","_ref","ariaLabel","icon","isQuiet","labelText","children","onOpenChange","tooltip","styleProps","iconClassName","_jsxs","DialogTrigger","ActionButton","_jsx","Icon","FontAwesomeIcon","Text","Tooltip","getSelectedItemCountOrAll","size","selection","isSelectionEqual","selectionA","selectionB","isSelectionMaybeInvertedEqual","mapSelection","selectedItemKeys","getItem","mapItem","optimizeSelection","totalRecords","isInverted","optimizedSelection","generateRange","createValidationProps","isValid","errorMessage","extractSpectrumHTMLElement","ref","_ref$UNSAFE_getDOMNod","extractSpectrumLastChildHTMLElement","maybeHTMLElement","identityExtractHTMLElement","findSpectrumComboBoxScrollArea","popupId","scrollArea","useIsMountedRef","isMountedRef","useRef","useEffect","asyncGeneratorStep","gen","resolve","reject","_next","_throw","info","_asyncToGenerator","fn","self","args","err","log","Log","useAsyncInterval","callback","targetIntervalMs","setTimeoutRef","trackingCountRef","trackingStartedRef","tick","useCallback","now","elapsedSinceLastTick","overage","nextTickInterval","useCallbackWithAction","action","result","useDebouncedCallback","debounceMs","debouncedCallback","useMemo","debounce","useDependentState","inputValue","state","setState","useState","useEffectNTimesWhen","effectCallback","effectCallbackDependencies","n","condition","countRef","useIsEqualMemo","isEqual","previousValueRef","currentValue","preventDefault","event","useFormWithDetachedSubmitButton","enableDefaultFormSubmitBehavior","formId","shortid","submitButtonRef","buttonEl","formProps","submitButtonProps","useMappedRef","targetRef","map","useMappedSelection","viewportData","selectedKeys","items","useOnScrollRef","onScroll","extractHTMLElement","cleanupRef","_cleanupRef$current","_cleanupRef$current2","element","usePopoverOnScrollRef","findScrollArea","getInitialScrollPosition","scrollAreaEl","setScrollAreaEl","scrollToInitialPosition","position","isOpen","usePromiseFactory","promiseFactory","autoLoad","data","setData","setError","isLoading","setIsLoading","loadPromise","resolved","usePropChangeCallback","propName","onChange","defaultValue","hasDefault","propValue","newValue","useOnScrollOffsetChangeCallback","offsetSize","debounceTimeout","previousOffsetRef","offset","useDebouncedValue","debouncedValue","setDebouncedValue","timeoutId","useSetAttributesCallback","attributes","selectors","rootEl","targets","prop","useSpectrumDisableSpellcheckRef","disableSpellcheck","useWindowedListData","getKey","defaultGetKey","setItems","setSelectedKeys","matchKey","item","findItem","_items$find","append","values","prevItems","insert","index","remove","keySet","update","bulkUpdate","itemMap","indices","indexMap","_key","a","b","newItems","_key2","newItem","listData","hasKey","useResizeObserver","onResize","resizeObserverInstance","ConfirmationDialog","heading","confirmationButtonLabel","onCancel","onConfirm","Dialog","Heading","styles","Divider","Content","Form","ButtonGroup","Button","ConfirmActionButton","isHidden","_onConfirm","renderDialog","close","vsTrash","IconActionButton","label","props","DEBOUNCE_DELAY","MENU_NAVIGATION_DIRECTION","AutoCompleteInput","Component","memoize","options","option","popperOptions","React","title","menuIsOpen","filter","_this$popper$current","filteredOptions","perfectMatch","_this$input$current","keyboardOptionIndex","direction","newKeyboardOptionIndex","onEnter","_this$input$current2","_this$input$current3","_this$popper$current2","_this$popper$current3","focusInput","_this$input$current4","_this$menuContainer$c","inputWidth","classNames","noMatchText","inputPlaceholder","disabled","className","defaultTitle","spellCheck","dataTestId","invalid","Popper","PropTypes","AutoCompleteInput$1","AutoResizeTextarea","propsValue","placeholder","delimiter","id","setValue","isPastedChange","setIsPastedChange","explode","string","implode","reCalculateLayout","resizedHeight","handleChange","handleFocus","handleMouseDown","handleBlur","handlePaste","style","DebouncedModal","blockInteraction","debouncedIsOpen","_Fragment","InfoModal","subtitle","Modal","ModalBody","ModalFooter","BasicModal","headerText","bodyText","onDiscard","onModalDisable","cancelButtonText","confirmButtonText","discardButtonText","isConfirmDanger","confirmButton","disableModalCheckbox","onConfirmClicked","onOpened","_confirmButton$curren","modalBody","ModalHeader","onClick","Button$1","BulkActionBar","selectedItemCount","onClearSelection","ActionBar","commonStyles","CardFlip","isFlipped","getComponent","front","transitionStart","transitionEnd","refObj","Collapse","elemParam","elem","scrollBarWidth","autoFocusOnShow","_children","inTransition","CSSTransition","Collapse$1","TIME_PATTERN","EXAMPLES","fixIncompleteValue","TimeInput","allowValueWrapping","onFocus","onBlur","onSelect","TimeUtils","parsedValueRef","_setSelection","inputRef","useImperativeHandle","_inputRef$current","newSelection","_inputRef$current2","getNextSegmentValue","range","delta","segmentValue","maxValue","newSegmentValue","getPreferredReplacementString","replaceValue","replaceIndex","newChar","selectionStart","selectionEnd","DEFAULT_GET_PREFERRED_REPLACEMENT_STRING","fixedValue","handleSelect","MaskedInput","TimeInput$1","CUSTOM_OPTION","CustomTimeSelect","valueToTime","customTime","_this$button$current","_this$button$current2","inputFocused","menuOptionsLength","optionIndex","timeToValue","_this$button$current3","activeOption","valueIndex","_this$menuContainer$c2","focusButton","_this$button$current4","_this$menuContainer$c3","customText","matchFound","optionArray","DropdownMenu","vsCheck","time","CustomTimeSelect$1","DATE_PATTERN","DATE_FORMAT","DateInput","setSelection","DateInput$1","DebouncedSearchInput","PureComponent","prevProps","_this$searchInput$cur","matchCount","SearchInput","DebouncedSearchInput$1","EditableItemList","isInvalid","onAdd","onDelete","validate","inputError","setInputError","selectedRanges","setSelectedRanges","handleSelectionChange","ranges","handleDelete","RangeUtils","handleAdd","validationError","handleInputChange","handleInputFocus","handleInputKeyDown","containerHeight","clamp","ItemList","vsAdd","ErrorBoundary","errorInfo","onError","fallback","LoadingOverlay","HierarchicalCheckboxMenu","parent","valueMap","includesTrue","includesFalse","child","onUpdateValueMap","newChildren","parentSelected","newChildValue","_","currentChildren","_parentSelected","copy","Checkbox","_ref2","menuText","HierarchicalCheckboxMenu$1","NavTab","memo","tab","onClose","isActive","activeRef","isDraggable","contextActions","isClosable","Draggable","provided","snapshot","e","vsClose","ContextActions","NavTab$1","CLICK_TIMEOUT","START_SPEED","ACCELERATION","isScrolledLeft","isScrolledRight","makeBaseContextActions","tabs","_i","t","NavTabList","activeKey","onReorder","makeContextActions","containerRef","isOverflowing","setIsOverflowing","disableScrollLeft","setDisableScrollLeft","disableScrollRight","setDisableScrollRight","handleResize","onDragEnd","DragUtils","handleScroll","shouldDisableScrollLeft","shouldDisableScrollRight","continuousScrollRef","handleLeftClick","handleRightClick","handleMouseRepeat","startX","deltaX","prevTimestamp","container","timestamp","startTime","deltaTime","newDeltaX","endContinuousScroll","holdTimer","rAF","handleMouseDownLeft","handleMouseDownRight","_containerRef$current","onWheel","nav","_containerRef$current2","tabContextActionMap","tabContextActions","_makeContextActions","activeTabRef","activeTab","navTabs","vsChevronLeft","DragDropContext","Droppable","r","vsChevronRight","ThemePicker","selectedThemeKey","setSelectedThemeKey","themes","useTheme","onSelectionChange","Picker","Item","Logo","VOLATILITY","LOW","HIGH","START_Y","GRID_SIZE","PATTERN","PX_PER_SECOND","RESIZE_DEBOUNCE","INTERACTION_TIMEOUT","THEME_COLOR_VARIABLES","getRandomAreaPlotAnimationThemeColors","resolveCssVariablesInRecord","RandomAreaPlotAnimation","activeThemes","themeColors","canvas","shade","setShade","scale","ctx","pattern","width","height","lastTimestamp","setCanvasSize","_ctx","createPatternFill","foregroundFill","foregroundStroke","canvasPattern","contextPattern","randomWalk","prev","rand","change","initData","startingData","y","x","setDataSize","drawAreaLine","path","context","drawGridLines","drawCanvas","_lastTimestamp","_lastTimestamp2","_lastTimestamp3","background","gridColor","assertNotNull","subPixelMotion","_lastTimestamp4","numberOfPoints","debouncedHandleResize","pauseAnimation","resetIdleTimeout","startAnimation","handleActivity","_canvas$current","RandomAreaPlotAnimation$1","TextWithTooltip","text","placement","stylesCommon","SearchableCombobox","scrollRef","getItemDisplayText","renderItem","displayText","ComboBox","SocketedButton","isLinked","isLinkedSource","onMouseEnter","onMouseLeave","vsLink","dhExclamation","SocketedButton$1","DEFAULT_DELAY_MS","TableViewEmptyState","content","delayMs","show","setShow","IllustratedMessage","vsEmptyWindow","HANDLE_SIZE","StyleExports","POPOVER_WIDTH","SECONDS_IN_DAY","SNAP_NEAREST_MINUTES","TimeSlider","propStartTime","propEndTime","isStartModified","isEndModified","setStartTime","endTime","setEndTime","track","updateTime","newStartTime","newEndTime","start","end","handleStartTimeChange","handleEndTimeChange","PopOvers","TrackFills","Handle","onStartTimeChange","onEndTimeChange","swapTimes","firstTime","setFirstTime","secondTime","setSecondTime","firstTimeRef","secondTimeRef","firstTimeSelectionRef","secondTimeSelectionRef","_secondTimeRef$curren","_firstTimeRef$current","onFirstTimeChange","onSecondTimeChange","onFirstTimeSelect","onSecondTimeSelect","setTime","transform","ONE_HOUR","handleOffset","calculatePositionAsTime","clientX","trackRect","leftEdge","preciseTime","roundedTime","limitMax","handleMouseMove","handleMouseUp","_ref3","startDragListening","stopDragListening","ToastNotification","buttons","isShown","classNamesProp","type","onDismiss","hasButtons","ThemeExport","ValidateLabelInput","hintText","isModified","showValidationError","idProp","useCreateClient","serverUrl","api","useApi","client","ClientContext","createContext","ClientBootstrap","useClient","useContextOrThrow","makeApiContextWrapper","dh","ApiContext","LOGIN_OPTIONS_REQUEST","SESSION_DETAILS_REQUEST","BROADCAST_CHANNEL_NAME","BROADCAST_LOGIN_MESSAGE","BROADCAST_LOGOUT_MESSAGE","isMessage","isBroadcastLoginMessage","isBroadcastLogoutMessage","isResponse","response","makeMessage","payload","makeResponse","messageId","getWindowParent","requestParentResponse","_x","_requestParentResponse","request","timeout","listener","TimeoutError","NoConsolesError","isNoConsolesError","createConnection","websocketUrl","createSessionWrapper","_x2","_x3","_createSessionWrapper","connection","details","types","session","config","createCoreClient","isSessionDetails","requestParentSessionDetails","_requestParentSessionDetails","getSessionDetails","_getSessionDetails","searchParams","loadSessionWrapper","_x4","_x5","_x6","_loadSessionWrapper","sessionDetails","sessionWrapper","useTableListener","eventEmitter","eventName","useTableListener$1","ColumnNameError","ColumnNameError$1","TableDisconnectError","TableDisconnectError$1","useTable","table","firstRow","lastRow","columnNames","columns","setColumns","columnError","setColumnError","tableError","setTableError","handleUpdate","detail","column","handleDisconnect","handleReconnect","useTable$1","useTableColumn","columnName","useTableColumn$1","SIZE_LIMIT","TableInput","_table$size","_error$message","settings","tablePromise","parentRef","formatter","columnFormats","FormatterUtils","dateTimeFormatterOptions","defaultDecimalFormatOptions","defaultIntegerFormatOptions","Formatter","searchValue","setSearchValue","setTable","listRef","itemCount","formatValue","updatedSelection","removedItems","v","isSelected","initTable","promise","PromiseUtils","cancelablePromise","handleSearchChange","_listRef$current","selectedValue","handleSelectAll","handleClearSelection","handleViewportChange","handleChildBlur","_parentRef$current","relatedTarget","isEmpty","SelectValueList","useBroadcastChannel","onEvent","EMPTY_FUNCTION","name","channel","handleEvent","useBroadcastLoginListener","onLogin","onLogout","onMessage","REFRESH_TOKEN_KEY","RefreshTokenContext","readRefreshToken","cookieToken","Cookies","storeRefreshToken","token","expires","RefreshTokenBootstrap","setToken","cleanup","newToken","useTableUtils","TableUtils","useCheckIfExistsValue","isCaseSensitive","tableUtils","valueTrimmed","setValueTrimmed","valueTrimmedDebounced","trimAndUpdateValue","valueExistsData","valueExistsIsLoading","valueExists","DEBOUNCE_VIEWPORT_SEARCH_MS","useDebouncedViewportSearch","applyFiltersAndRefresh","debouncedSearch","searchText","searchTextTrimmed","DEBOUNCE_MS","useDebouncedViewportSelectionFilter","shouldSelectAllOnNoSelection","mapItemToValue","valuesSelection","debouncedValuesSelection","memoValuesSelection","createSelectedValuesFilter","useFilterConditionFactories","maybeTable","_len","filterConditionFactories","removeNullAndUndefined","f","useFilteredItemsWithDefaultValue","displayProp","defaultDisplayValue","searchTextRef","useGetItemPosition","itemHeight","topOffset","rowIndex","defaultItemOffset","useTableSize","forceRerender","getSize","useInitializeViewportData","targetSize","currentSize","generateEmptyKeyedItems","useSetPaddedViewportCallback","viewportSize","viewportPadding","first","last","padFirstAndLastRow","useViewportData","scrollDebounce","deserializeRow","defaultRowDeserializer","setPaddedViewport","setViewport","isClosed","filters","onTableUpdated","createOnTableUpdatedHandler","useViewportFilter","useSearchableViewportData","searchColumnNames","setSearchText","searchTextFilter","createSearchTextFilter","onSearchTextChange","list","additionalFilterConditionFactories","useNotNullOrEmptyFilter","conditionOperator","notNullOrEmptyFilterCondition","createNotNullOrEmptyFilterCondition","createFilterConditionFactory","useTableClose","usePickerWithSelectedValues","debouncedSearchText","setDebouncedSearchText","selectedKey","setSelectedKey","selectedValueMap","setSelectedValueMap","searchTextExists","excludeSelectedValuesFilter","listTable","hasSearchTextWithZeroResults","searchTextIsInSelectedValues","onDebouncedSearchTextChange","setSelectedKeyOnNextFrame","onSelectKey","next","onAddValues","onRemoveValues","useSelectDistinctTable","selectDistinct","_table$selectDistinct","distinctTable","isError","useShowOnlyEmptyFilter","isOn","createColumnCondition","createShowOnlyEmptyFilterCondition","useValueFilter","operator","createValueFilter","FontsLoadedContext","FontBootstrap","fontClassNames","isLoaded","setIsLoaded","PluginsContext","PluginType","isLegacyDashboardPlugin","plugin","isLegacyAuthPlugin","isLegacyTablePlugin","isLegacyPlugin","isDashboardPlugin","isWidgetPlugin","isTablePlugin","isAuthPlugin","isThemePlugin","pluginSupportsType","getIconForPlugin","defaultIcon","vsPreview","isValidElement","getThemeDataFromPlugins","pluginMap","themePluginEntries","entry","pluginName","configs","baseTheme","styleContent","getThemeKey","usePlugins","WidgetView","fetch","plugins","p","authPlugin","AUTH_HANDLER_TYPE_ANONYMOUS","AUTH_HANDLER_TYPE_PSK","AuthenticationError","AuthenticationError$1","AuthPluginBase","getLoginOptions","isLoggedIn","setIsLoggedIn","isCanceled","verifyNotCanceled","CanceledPromiseError","login","_login","loginOptions","_getErrorMessage","permissionsOverrides","UserPermissionsOverrideContext","AuthPluginAnonymous","authHandlers","AuthPluginAnonymous$1","isLoginOptions","_getLoginOptions","getWindowAuthProvider","_URLSearchParams$get","AuthPluginParent","AuthPluginParent$1","LoginForm","isLoggingIn","_onSubmit","LoadingSpinner","Login","logoPath","AUTH_TYPE","PSK_QUERY_PARAM_KEY","PSK_TOKEN_KEY","getWindowToken","clearWindowToken","url","readCookieToken","_Cookies$get","storeCookieToken","inputField","loginPromise","isInputRequired","setIsInputRequired","setIsLoggingIn","loginToken","showError","newLoginPromise","cancelLogin","initialLogin","_initialLogin","_getWindowToken","initialToken","handleSubmit","_inputField$current","AuthPluginPsk","AuthPluginPsk$1","getAppInitValue","serverConfig","getUserFromConfig","_getValue","_getValue2","_getValue$split","_getValue3","overrides","getValue","getBooleanValue","operateAs","groups","canCopy","canDownloadCsv","canUsePanels","canLogout","createPlotlyComponent","Plotly","bar","histogram","pie","ohlc","scattergl","treemap","ChartModel","isDownsamplingDisabled","rect","ChartModel$1","BUSINESS_COLUMN_TYPE","MILLIS_PER_HOUR","NANOS_PER_MILLI","isDateWrapper","isLongWrapper","isDateTimeColumnFormatter","isRangedPlotlyAxis","ChartUtils","xLow","xHigh","theme","array","arrayminus","prefix","columnType","formatPattern","subpatterns","matchArray","placeholderDigits","zeroDigits","decimalDigits","optionalDecimalDigits","numberType","percentSign","suffix","paddingLength","isCommaSeparated","comma","plotlyNumberType","decimalLength","trimOption","tickformat","tickprefix","ticksuffix","axisFormat","axis","isDateType","gapBetweenMajorTicks","updatedFormat","tickSpacing","chart","series","j","mode","showLegend","orientation","deephavenShape","figure","axes","charts","_chart","layout","axisProperty","axisIndex","axisIndexString","period","property","_result$get","group","colorway","xAxis","_this","axisFormats","nullFormat","allAxes","axisTypeMap","_chart2","sources","axisSources","_loop","k","axisType","typeAxes","axisLayoutProperty","businessCalendar","rangebreaks","businessPeriods","businessDays","holidays","calendarTimeZone","typeFormatter","formatterTimeZone","timeZoneDiff","weekendBounds","_ret","plotStyle","isBusinessTime","areLinesVisible","areShapesVisible","modes","sourceType","_sources$","_sources$$axis","seriesVisibility","isLinesVisible","isShapesVisible","lineColor","shapeColor","shape","shapeSize","_source$axis","seriesData","seriesDataParam","_axis","dataAttributeName","set","axisPosition","layoutParam","chartAxisRangeParser","plotWidth","plotHeight","figureAxes","_chart3","axisRangeParser","bounds","_axisPositionMap$get","cols","rows","colspan","row","rowspan","endColumn","endRow","columnSize","rowSize","xMarginSize","yMarginSize","axisPositionMap","rightAxes","dataFormatter","chartAxes","xAxisSize","yAxisSize","axisTypes","figureAxisTypeMap","figureTypeAxes","isYAxis","plotSize","chartAxisIndex","_axis2","figureAxisIndex","layoutAxis","_range","autorange","rangeParser","rangeStart","rangeEnd","figureAxisTypes","layoutAxisParam","_axis$label","axisSize","_this$getAxisProperty","_axisPositionMap$get2","positionAxes","sideIndex","leftAxes","left","right","bottomAxes","topAxes","bottom","top","businessDaysInt","day","nonBusinessDaysInt","reopenDays","closed","adjustedDay","boundsArray","open","closedDay","fullHolidays","partialHolidays","holiday","dateString","closedPeriods","rangeBreaks","startClose","endClose","dvalue","settingsAxis","yAxis","timeZone","format","date","tzFormat","estimatedOffset","estimatedDate","paper_bgcolor","plot_bgcolor","title_color","coastline_color","land_color","ocean_color","lake_color","river_color","ChartUtils$1","DownsamplingError","Chart","faIcon","stringPath","isDownsampleInProgress","_props$containerRef","downsamplingError","isDownsampleFinished","customButtons","hasDownsampleError","dhWarningFilled","hasError","attr","vsLoading","dhGraphLineDown","has2D","has3D","buttons2D","buttons3D","model","_this$plotWrapper$cur","_this$plotWrapper$cur2","revision","onUpdate","_onUpdate","onDisconnect","onReconnect","_detail$message","_error","_onError","isRangesChanged","deepEqual","changes","onSettingsChanged","hiddenSeries","_ref4","seriesIndexes","acc","_ref5","visible","_ref6","shownError","force","isRectChanged","decimalFormatOptions","integerFormatOptions","PlotlyProp","PlotComponent","isPlotShown","CopyButton","DateUtils","Chart$1","FigureChartModel","pendingSeries","_chart$showLegend","c","valueParser","template","_this$figure$charts$","_this2","activeSeriesNames","_loop2","_axisTypeMap$get$find","_axisTypeMap$get","_axisTypeMap$get$find2","_axisTypeMap$get2","xAxisIndex","yAxisIndex","annotation","allSeriesNames","inactiveSeriesNames","seriesName","oneClick","figureUpdateEvent","seriesArray","valueTranslator","dataArray","_match$length","_match","subtitleCount","margin","_this$layout$margin$l","_this$layout$margin","_this$layout$margin$r","_this$layout$margin2","_this$layout$margin$t","_this$layout$margin3","_this$layout$margin$b","_this$layout$margin4","_xLow","_xHigh","yLow","yHigh","ids","labels","filterMap","_this3","_loop3","FigureChartModel$1","ChartModelFactory","tableCopy","ChartModelFactory$1","defaultChartTheme","_chartTheme$colorway","chartTheme","chartThemeRaw","getExpressionRanges","ColorUtils","MockChartModel","steps","dates","smooth","linear","startDate","erroryforward","errorybackward","errory","series1","areaPattern","trendLine","series2","line","errorBand","filterFields","MockChartModel$1","Plot","ChartThemeContext","ChartThemeProvider","isFigureChartModel","useChartTheme","defaultConfig","isGLComponentConfig","isReactComponentConfig","itemDefaultConfig","EventEmitter","subs","allEventSubs","bUnbound","EventEmitter$1","ItemContainer","layoutManager","$","_this$direction","_rowOrColumnChild$con","_rowOrColumnChild$con2","rowOrColumn","rowOrColumnChild","_rowOrColumn","newSize","totalPixel","percentage","_rowOrColumn$contentI","_this$beforeCloseHand","_this$beforeCloseHand2","cl","hdelta","vdelta","getHashValue","matches","getQueryStringParam","param","keyValuePairs","params","pair","animFrame","removeFromArray","getUniqueId","filterXss","keepTags","output","stripTags","DragListener","eElement","_this$_eElement","destroyAfterMouseUp","_this$_eElement2","_this$_oDocument","oEvent","_coordinates$x","_coordinates$y","_this$_oDocument2","_this$_oDocument3","coordinates","_coordinates$x2","_coordinates$y2","_this$_oDocument4","_this$_oDocument5","_this$_oDocument6","_this$_oDocument6$fin","_this$_eBody","_this$_eElement3","_this$_eBody2","_this$_eElement4","_this$_oDocument7","_this$_oDocument7$fin","_event$pageX","_event$pageY","DragListener$1","ReactComponentHandler","ReactDOM","component","nextProps","nextState","_this$_originalCompon","componentName","reactClass","defaultProps","_keys","_values","minifyConfig","min","_nextLevel","unminifyConfig","minifiedConfig","orig","from","to","translationFnName","translationFn","_min","_max","fromItem","toItem","minKey","_toItem","_minKey","dictionary","BubblingEvent","origin","_window$opener","childGl","EventHub$2","EventHub","BrowserPopout","dimensions","parentId","indexInParent","_this$getGlInstance","_this$getGlInstance2","_this$_popoutWindow$s","_this$_popoutWindow","_this$_popoutWindow2","_this$_popoutWindow$s2","_this$_popoutWindow3","_this$_popoutWindow4","_this$getGlInstance3","_this$_popoutWindow5","_this$getGlInstance4","_this$getWindow","_parentItem","childConfig","parentItem","_this$getGlInstance5","_this$_layoutManager$","checkReadyInterval","_this$_popoutWindow6","windowOptions","windowOptionsString","storageKey","urlParts","_this$_popoutWindow7","_this$_popoutWindow8","_this$getGlInstance6","DragProxy","dragListener","contentItem","originalParent","_this$_contentItem$co","_this$_contentItem$co2","_offset$left","_offset$top","_this$_layoutManager$2","_this$element$width","_this$element$height","_this$_contentItem$ta","_this$_contentItem$ta2","_this$_proxyTab$outer","_this$_proxyTab$outer2","offsetX","offsetY","isWithinContainer","_this$_layoutManager$3","DragSource","itemConfig","DragSourceFromEvent","DropTargetIndicator","area","HeaderButton","header","cssClass","ConfigurationError","node","ConfigurationError$1","isStack","isComponent","isRoot","AbstractContentItem","functionName","functionArguments","bottomUp","skipSelf","_this$config$content","keepChild","_this$parent","oldChild","newChild","_$destroyOldChild","parentNode","_this$parent2","browserPopout","components","instances","_this$layoutManager$d","methodName","stacks","activeContentItem","_element$offset","_element$width","_element$height","_this$childElementCon","oContentItem","ComponentConstructor","componentConfig","RowOrColumn","isColumn","_$suspendResize","newItemSize","itemSize","splitterElement","_this$contentItems$i$","_contentItem$config$t","removedItemSize","splitterIndex","childItem","_this$contentItems$i$2","sizeData","totalSplitterSize","totalWidth","totalHeight","totalAssigned","itemSizes","_this$contentItems$i$3","_this$contentItems$i$4","additionalPixel","total","itemsWithoutSetDimension","dimension","_i2","_i3","_this$contentItems$_i","_this$layoutManager$c","minItemWidth","entriesOverMin","totalOverMin","totalUnderMin","remainingWidth","allEntries","reducePercent","_i4","reducedWidth","_i5","splitter","Splitter","arr","minWidth","minHeight","_arr$i$minWidth","_arr$i$minHeight","_items$before$config$","_items$after$config$c","_items$before$element","_items$after$element$","minSize","beforeMinDim","beforeMinSize","afterMinDim","afterMinSize","_items$before$element2","_items$after$element$2","_this$_splitterPositi","_items$before$config$2","_items$after$config$t","sizeBefore","sizeAfter","splitterPositionInRange","totalRelativeSize","Root","containerElement","_this$_containerEleme","_this$_containerEleme2","stack","side","insertBefore","_sibling$config$dimen","sibling","Stack","_cfg$settings","_cfg$settings2","_cfg$labels","_cfg$settings3","_cfg$labels2","_cfg$settings4","_cfg$labels3","_cfg$labels$minimise","_cfg$labels4","cfg","Header","_this$layoutManager$c2","headerSize","contentWidth","contentHeight","initialItem","len","isVertical","isHorizontal","hasCorrectParent","_this$config$dimensio","segment","headerArea","contentArea","_tabsContainer$get","_this$layoutManager$t","_this$layoutManager$t2","_this$layoutManager$t3","_this$header$tabsCont","_this$header$tabsCont2","_this$layoutManager$t4","_this$header$tabsCont3","_this$header$tabsCont4","_this$header$tabsCont5","_this$layoutManager$d2","_this$header$element$6","_this$header$element$7","_this$header$element$8","_this$header$element$9","_this$header$element$10","tabsLength","_headerOffset$left","_headerOffset$left2","_this$header$element$","_this$header$element$2","_this$header$element$3","_this$header$element$4","_this$header$element$5","headerOffset","tabsContainer","tabsContainerRect","placeholderRect","tabElement","tabRect","_tabElement$get","_this$_dropIndex","placeHolderLeft","placeHolderRight","headerPosition","_this$_contentAreaDim","_this$_contentAreaDim2","highlightArea","_this$layoutManager$d3","Tab","_this$contentItem$par","_this$element$get","_this$tabs$element$ge","_this$tabs$element$ge2","_this$parent$config$a","previous","_this$tabsContainer$g","_this$tabsContainer$g2","_this$tabsContainer$i","_this$rAF","_this$tabsContainer$s","_this$tabsContainer$s2","_this$rAF2","_this$rAF3","rightOffscreenChild","_this$tabs$i$element$","_this$tabs$i$element$2","_this$tabsContainer$g3","_this$tabsContainer$g4","_this$tabsContainer$s3","_this$tabsContainer$g5","_this$tabsContainer$g6","leftOffscreenChild","_this$tabs$i$element$3","_this$tabs$i$element$4","_this$tabsContainer$s4","_this$tabsContainer$s5","_this$holdTimer","_this$rAF4","_this$tabsContainer$s6","_this$tabsContainer$i2","_this$tabsContainer$g7","_this$rAF5","tabContainer","tabContainerRect","_this$tabsContainer$s7","_this$tabsContainer$i3","_this$tabsContainer$g8","_this$tabsContainer$g9","closeStack","popout","maximise","tabDropdownLabel","maximiseLabel","minimiseLabel","maximiseButton","getNextDropdownIndex","startIndex","tabDropdownList","_this$tabDropdownList","_this$tabDropdownList2","_this$tabDropdownList3","_this$tabDropdownList4","_this$tabs$i$contentI","_this$tabs$i$contentI2","_this$tabDropdownCont","_this$tabDropdownButt","_this$tabDropdownCont2","_this$tabDropdownCont3","_$$height","_$$width","scrollHeight","list_rect","windowHeight","windowWidth","button_rect","hasSpaceBelow","shouldFlip","maxHeight","_this$activeContentIt","_this$tabDropdownButt2","_this$tabDropdownButt3","grabSize","_this$_dragListener","_this$_dragListener2","dragHandle","handleExcessSize","handleExcessPos","lm","controls","errors","utils","lm$1","LayoutManager","constructor","root","configNode","mapElem","_this$container$width","_this$container$heigh","_this$dropTargetIndic","dragSource","typeErrorMsg","configOrContentItem","configArray","isItem","_parent2","_parent","_parent3","_configOrContentItem$","_configOrContentItem$2","_configOrContentItem$3","windowLeft","windowTop","_$silent","_this$container$width2","_this$container$heigh2","_contentItem$parent","smallestSurface","mathingArea","areaSize","rootArea","areas","allContentItems","_area$contentItem$_co","contentItemOrConfig","newContentItem","openPopouts","_this$openPopouts$i$g","addChildren","_config$settings","windowConfigKey","nextNode","_this$config$content$","popInButton","errorMsg","columnCount","totalMinWidth","finalColumnCount","stackColumnCount","rootContentItem","firstStackContainer","stackContainers","LayoutManager$1","GoldenLayoutThemeExport","GoldenLayout","isComponentConfig","reactConfig","isHTMLElement","isStackItemConfig","LayoutUtils","activeItem","columnPreferred","_isCorrectType","maintainFocusElement","newParent","isCorrectType","allowEmptyStack","isMatch","createIfNecessary","matchComponentType","isLastType","dehydrateComponent","dehydratedConfig","dehydratedComponent","layoutItemConfig","glContainer","layout1","layout2","major","layout1Clone","layout2Clone","hydrateComponent","hydratedConfig","_itemConfig$id","contentConfig","configParam","replaceExisting","replaceConfig","createNewStack","focusElement","dragEvent","searchConfig","oldContentItem","onComponentCreated","closeOptions","newTitle","panelState","cloneConfig","_config$componentStat","_config$props","panel","_config$component","_component$WrappedCom","_component$WrappedCom2","selector","onInit","PanelPlaceholder","PanelEvent","isWrappedComponent","isDashboardPluginProps","PanelManager","assertIsDashboardPluginProps","openedMap","onPanelsUpdated","eventHub","typeString","panelId","matcher","opened","_panel","panelConfig","closedConfig","PanelErrorBoundary","glEventHub","dehydrate","componentState","metadata","newProps","hydrate","localDashboardId","canHaveRef","isClassComponent","isForwardRef","ForwardRef","DashboardUtils","LayoutManagerContext","Container","Layout","GLPropTypes","useListener","usePanelRegistration","registerComponent","ComponentType","_ComponentType$COMPON","deregister","useDashboardPanel","dashboardProps","supportedTypes","handlePanelOpen","_widget$title","widget","widgetId","isSupportedType","useLayoutManager","useContext","replaceByIdReducer","initialState","checkIfChanged","ReducerRegistry","reducer","_this$listener","reducerRegistry","reducerRegistry$1","SET_DASHBOARD_DATA","dashboardData","reducers","EMPTY_MAP","EMPTY_OBJECT","EMPTY_ARRAY","getAllDashboardsData","store","getDashboardData","dashboardId","_getAllDashboardsData","getClosedPanelsForDashboard","_getDashboardData$clo","getOpenedPanelMapForDashboard","_getDashboardData$ope","setDashboardData","updateDashboardData","dispatch","getState","DashboardPanelWrapper","DEFAULT_LAYOUT_CONFIG","DEFAULT_CALLBACK","FALLBACK_CALLBACK","DashboardLayout","_useSelector","_closed","emptyDashboard","layoutConfig","onLayoutChange","onLayoutInitialized","hydrateDefault","dehydrateDefault","panelWrapper","useDispatch","useSelector","isDashboardEmpty","setIsDashboardEmpty","isItemDragging","setIsItemDragging","lastConfig","setLastConfig","initialClosedPanels","isDashboardInitialized","setIsDashboardInitialized","layoutChildren","setLayoutChildren","hydrateMap","dehydrateMap","componentType","_componentType$displa","componentHydrate","componentDehydrate","wrappedComponent","CType","PanelWrapperType","hasRef","_hydrateMap$get","_dehydrateMap$get","panelManager","handleLayoutStateChanged","glConfig","dehydratedLayoutConfig","hasChanged","handleLayoutItemPickedUp","componentId","handleLayoutItemDropped","handleComponentCreated","cssComponent","handleReactChildrenChange","previousLayoutConfig","usePrevious","RESIZE_THROTTLE","Dashboard","layoutSettings","onLayoutConfigChange","onGoldenLayoutChange","fallbackComponent","layoutElement","isInitialized","setIsInitialized","setLayout","newLayout","throttle","DEFAULT_DASHBOARD_ID","MonacoThemeProvider","MonacoUtils","IrisGridTestUtils","columnIndex","count","userColumnWidths","sort","layoutHints","keyColumns","inputTable","IrisGridProxyModel","IrisGridTestUtils$1","UPDATE_THROTTLE","TableViewportUpdater","viewHeight","viewportTop","viewportBottom","movedColumns","viewWidth","viewportLeft","viewportRight","modelIndex","GridUtils","viewColumns","onSubscription","sorts","customColumns","isFilterChanged","isSortChanged","isCustomColumnsChanged","isTableChanged","TableViewportUpdater$1","TreeTableViewportUpdater","updateInterval","viewSize","onViewportUpdate","TreeTableViewportUpdater$1","react","redux","reactRedux","AdobeReactSpectrum","DeephavenAuthPlugins","DeephavenChart","DeephavenComponents","DeephavenDashboard","DeephavenIcons","DeephavenIrisGrid","DeephavenJsapiBootstrap","DeephavenJsapiComponents","DeephavenJsapiUtils","DeephavenLog","DeephavenPlugin","DeephavenReactHooks","requires","createRequires","loadRemoteModule","createLoadRemoteModule","loadRemoteModule$1","loadModulePlugin","_loadModulePlugin","pluginUrl","myModule","loadJson","_loadJson","jsonUrl","loadModulePlugins","_loadModulePlugins","modulePluginsUrl","manifest","pluginPromises","main","pluginMainUrl","pluginModules","module","_name","_module$value$default","moduleValue","getAuthHandlers","authConfigValues","_authConfigValues$get","_authConfigValues$get2","getAuthPluginComponent","corePlugins","authPlugins","availableAuthPlugins","isAvailable","RemoteComponent","createRemoteComponent","RemoteComponent$1","PluginsBootstrap","pluginsUrl","getCorePlugins","setPlugins","loadPlugins","_loadPlugins","_yield$getCorePlugins","corePluginPairs","LoginNotifier","CORE_AUTH_PLUGINS","AuthBootstrap","authConfig","setAuthConfig","loadAuthConfigValues","_loadAuthConfigValues","newAuthConfigValues","AuthComponent","ConnectionBootstrap","setConnection","loadConnection","_loadConnection","newConnection","handleShutdown","removerFn","ConnectionContext","getBaseUrl","apiUrl","getEnvoyPrefix","getConnectOptions","envoyPrefix","FontsLoaded","isFontsLoaded","ServerConfigContext","ServerConfigBootstrap","setServerConfig","loadServerConfigValues","_loadServerConfigValues","newServerConfigValues","useServerConfig","UserBootstrap","UserOverrideContext","user","UserContext","ThemeBootstrap","ThemeProvider","IrisGridThemeProvider","AppBootstrap","clientOptions","logoutCount","setLogoutCount"],"mappings":"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"}
|