@hawtio/ai-plugin 0.2.0 → 0.2.1

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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ai-plugin/common/ai-model.ts","../src/ai-plugin/jmx-ai/globals.ts","../src/ai-plugin/common/ai-service.ts","../src/ai-plugin/common/ai-preferences-service.ts","../node_modules/react-is/cjs/react-is.production.min.js","../node_modules/react-is/cjs/react-is.development.js","../node_modules/react-is/index.js","../node_modules/object-assign/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/prop-types/lib/has.js","../node_modules/prop-types/checkPropTypes.js","../node_modules/prop-types/factoryWithTypeCheckers.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/split.js/dist/split.es.js","../node_modules/react-split/dist/react-split.es.js","../src/ai-plugin/jmx-ai/context.ts","../src/ai-plugin/jmx-ai/Jmx.css","../src/ai-plugin/jmx-ai/DiagnosisChatbot.tsx","../src/ai-plugin/jmx-ai/JmxContent.css","../src/ai-plugin/jmx-ai/util.ts","../src/ai-plugin/jmx-ai/attributes/attribute-service.ts","../src/ai-plugin/jmx-ai/attributes/AttributeModal.tsx","../node_modules/jolokia.js/dist/jolokia.mjs","../src/ai-plugin/jmx-ai/jmx-ai-service.ts","../src/ai-plugin/jmx-ai/attributes/Attributes.tsx","../src/ai-plugin/jmx-ai/attributes/index.ts","../src/ai-plugin/jmx-ai/JmxContent.tsx","../src/ai-plugin/jmx-ai/JmxTreeView.css","../src/ai-plugin/jmx-ai/JmxTreeView.tsx","../src/ai-plugin/jmx-ai/Jmx.tsx","../src/ai-plugin/jmx-ai/ui.ts","../src/ai-plugin/index.ts","../src/ai-plugin/common/index.ts","../src/ai-plugin/common/AiPreferences.tsx","../src/ai-plugin/common/globals.ts","../src/ai-plugin/jmx-ai/index.ts","../src/ai-plugin/jmx-ai/help.md"],"sourcesContent":["export const PROVIDERS = ['openai', 'anthropic', 'google-genai', 'ollama'] as const\nexport type AiProvider = (typeof PROVIDERS)[number]\n\nexport type AiModel = {\n id: string\n name: string\n tool: boolean\n provider: AiProvider\n}\n\nexport const MODELS: AiModel[] = [\n // OpenAI models\n { id: 'gpt-5.5', name: 'GPT-5.5', tool: true, provider: 'openai' },\n { id: 'gpt-5.4', name: 'GPT-5.4', tool: true, provider: 'openai' },\n { id: 'gpt-5.4-mini', name: 'GPT-5.4 mini', tool: true, provider: 'openai' },\n\n // Anthropic Claude models\n { id: 'claude-opus-4-7', name: 'Claude Opus 4.7', tool: true, provider: 'anthropic' },\n { id: 'claude-sonnet-4-6', name: 'Claude Sonnet 4.6', tool: true, provider: 'anthropic' },\n { id: 'claude-haiku-4-5', name: 'Claude Haiku 4.5', tool: true, provider: 'anthropic' },\n\n // Google Gemini models\n { id: 'gemini-2.5-flash', name: 'Gemini 2.5 Flash', tool: true, provider: 'google-genai' },\n { id: 'gemini-2.5-flash-lite', name: 'Gemini 2.5 Flash-Lite', tool: true, provider: 'google-genai' },\n { id: 'gemini-2.5-pro', name: 'Gemini 2.5 Pro', tool: true, provider: 'google-genai' },\n\n // Ollama models\n { id: 'granite3.1-moe:latest', name: 'Granite 3.1 Moe', tool: true, provider: 'ollama' },\n { id: 'granite3.1-dense:latest', name: 'Granite 3.1 Dense', tool: true, provider: 'ollama' },\n { id: 'llama3:latest', name: 'Llama 3', tool: false, provider: 'ollama' },\n { id: 'llama3.2:latest', name: 'Llama 3.2', tool: true, provider: 'ollama' },\n { id: 'phi4:latest', name: 'Phi 4', tool: false, provider: 'ollama' },\n { id: 'phi3.5:latest', name: 'Phi 3.5', tool: false, provider: 'ollama' },\n { id: 'qwen3.5:4b', name: 'Qwen 3.5 4B', tool: true, provider: 'ollama' },\n { id: 'qwen3.5:latest', name: 'Qwen 3.5', tool: true, provider: 'ollama' },\n] as const\n","import { Logger } from '@hawtio/react'\n\nexport const pluginName = 'hawtio-ai-jmx-ai'\nexport const pluginTitle = 'JMX AI'\nexport const pluginPath = '/jmx-ai'\n\nexport const log = Logger.get(pluginName)\n\nexport const PARAM_KEY_NODE_ID = 'nid'\n","import { ChatAnthropic } from '@langchain/anthropic'\nimport { BaseLanguageModelInput } from '@langchain/core/language_models/base'\nimport { AIMessage, AIMessageChunk, BaseMessage, HumanMessage, SystemMessage } from '@langchain/core/messages'\nimport { ToolCall } from '@langchain/core/messages/tool'\nimport { Runnable } from '@langchain/core/runnables'\nimport { DynamicStructuredTool } from '@langchain/core/tools'\nimport { ChatGoogleGenerativeAI } from '@langchain/google-genai'\nimport { ChatOllama } from '@langchain/ollama'\nimport { ChatOpenAI } from '@langchain/openai'\nimport { MessageExtraContent, MessageProps } from '@patternfly/chatbot/dist/esm/Message'\nimport patternflyAvatar from '@patternfly/chatbot/patternfly-docs/content/extensions/chatbot/examples/Messages/patternfly_avatar.jpg'\nimport userAvatar from '@patternfly/react-core/dist/styles/assets/images/img_avatar-light.svg'\nimport { ReactNode } from 'react'\nimport { log } from '../jmx-ai/globals'\nimport { AiModel } from './ai-model'\nimport { aiPreferencesService } from './ai-preferences-service'\n\nconst BOT_NAME = 'Hawtio AI'\n\nconst TOOLS: DynamicStructuredTool[] = [] as const\nconst TOOLS_BY_NAME: Record<string, DynamicStructuredTool> = TOOLS.reduce(\n (acc, tool) => {\n acc[tool.name] = tool\n return acc\n },\n {} as Record<string, DynamicStructuredTool>,\n)\n\nexport type MessageWithThink = {\n content: string\n think?: string\n}\n\nexport type LLM = ChatOpenAI | ChatAnthropic | ChatGoogleGenerativeAI | ChatOllama\n\nexport interface IAiService {\n reset(model: AiModel): void\n getModel(): AiModel | undefined\n newChat(message: string, system?: string): Promise<AIMessage | string>\n chat(message: string): Promise<AIMessage | string>\n invokeTools(toolCalls: ToolCall[]): Promise<AIMessage | string>\n createUserMessage(name: string, content: string): MessageProps\n createLoadingBotMessage(): MessageProps\n createBotMessage(content: string, extraContent?: MessageExtraContent): MessageProps\n extractThink(message: string): MessageWithThink\n toBotMessage(\n answer: AIMessage | string,\n thinkInfo: (think: string) => ReactNode,\n toolCallsInfo: (call: ToolCall, index: number) => ReactNode,\n toolCallsApprove: (toolCalls: ToolCall[]) => ReactNode,\n ): MessageProps\n}\n\nclass AiService implements IAiService {\n private model?: AiModel\n private llm?: LLM\n private llmWithTools?: Runnable<BaseLanguageModelInput, AIMessageChunk>\n private messages: BaseMessage[] = []\n\n reset(model: AiModel): void {\n if (this.model && this.model.id === model.id && this.llm && (!model.tool || this.llmWithTools)) {\n return\n }\n log.info('AI model to use:', model.id)\n // Reset the current message record\n this.messages = []\n const { token } = aiPreferencesService.loadOptions()\n this.model = model\n try {\n switch (this.model.provider) {\n case 'openai':\n this.llm = new ChatOpenAI({\n model: this.model.id,\n apiKey: token,\n temperature: 0,\n streaming: false,\n })\n break\n case 'anthropic':\n this.llm = new ChatAnthropic({\n model: this.model.id,\n apiKey: token,\n temperature: 0,\n streaming: false,\n })\n break\n case 'google-genai':\n this.llm = new ChatGoogleGenerativeAI({\n model: this.model.id,\n apiKey: token,\n temperature: 0,\n disableStreaming: true,\n })\n break\n case 'ollama':\n default:\n this.llm = new ChatOllama({\n model: this.model.id,\n streaming: false,\n })\n }\n } catch (error) {\n // Mostly token is missing/invalid\n log.warn('Error initialising AI model:', error)\n this.llm = undefined\n }\n this.llmWithTools = undefined\n if (TOOLS.length !== 0 && this.model.tool) {\n this.llmWithTools = this.llm?.bindTools(TOOLS)\n }\n }\n\n private getLlm(): LLM | Runnable<BaseLanguageModelInput, AIMessageChunk> | undefined {\n if (!this.model || !this.llm) {\n const { model } = aiPreferencesService.loadOptions()\n this.reset(model)\n }\n return this.llmWithTools ?? this.llm\n }\n\n getModel(): AiModel | undefined {\n this.getLlm()\n return this.model\n }\n\n private async invoke(messages: BaseMessage[]): Promise<AIMessage | string> {\n // Lazy init model and llm\n const llm = this.getLlm()\n log.debug('Chatting with', this.model?.id, ':', messages)\n try {\n let answer: AIMessageChunk\n if (!llm) {\n throw new Error('AI model not configured')\n }\n answer = await llm.invoke(messages)\n\n if (answer.tool_calls && answer.tool_calls.length > 0) {\n log.debug('🛠️ calls:', answer.tool_calls)\n }\n log.debug('Answer:', answer)\n return answer\n } catch (error) {\n log.error('Error while chatting:', error)\n return String(error)\n }\n }\n\n newChat(message: string, system?: string): Promise<AIMessage | string> {\n if (system) {\n this.messages = [new SystemMessage(system)]\n } else {\n this.messages = []\n }\n return this.chat(message)\n }\n\n async chat(message: string): Promise<AIMessage | string> {\n this.messages.push(new HumanMessage(message))\n const answer = await this.invoke(this.messages)\n if (typeof answer !== 'string') {\n // Non-error answer\n this.messages.push(answer)\n }\n return answer\n }\n\n async invokeTools(toolCalls: ToolCall[]): Promise<AIMessage | string> {\n if (!this.llmWithTools) {\n return 'Tool invocation not supported'\n }\n\n for (const call of toolCalls) {\n log.debug('🛠️ Call:', call.name, JSON.stringify(call.args))\n const selectedTool = TOOLS_BY_NAME[call.name]\n const toolAnswer = await selectedTool?.invoke(call)\n if (toolAnswer) {\n log.debug('🛠️ ' + call.name + ':', toolAnswer)\n this.messages.push(toolAnswer)\n }\n }\n const finalAnswer = await this.llmWithTools.invoke(this.messages)\n if (finalAnswer) {\n this.messages.push(finalAnswer)\n }\n console.debug('Messages>>', this.messages)\n return finalAnswer\n }\n\n private generateId(): string {\n return crypto.randomUUID()\n }\n\n createUserMessage(name: string, content: string): MessageProps {\n const id = this.generateId()\n return { id, role: 'user', content, name, avatar: userAvatar }\n }\n\n createLoadingBotMessage(): MessageProps {\n const id = this.generateId()\n return {\n id,\n role: 'bot',\n name: BOT_NAME,\n avatar: patternflyAvatar,\n content: 'API response goes here',\n isLoading: true,\n }\n }\n\n createBotMessage(content: string, extraContent?: MessageExtraContent): MessageProps {\n const id = this.generateId()\n return {\n id,\n role: 'bot',\n name: BOT_NAME,\n avatar: patternflyAvatar,\n content,\n extraContent,\n isLoading: false,\n }\n }\n\n extractThink(message: string): MessageWithThink {\n // extract inside <think>...</think> from message\n const think = message.match(/<think>(.*?)<\\/think>/s)?.[1]?.trim()\n // remove <think>...</think> from message\n const content = message.replace(/<think>.*?<\\/think>/s, '')\n log.debug('extractThink - content:', content, 'think:', think)\n return { content, think }\n }\n\n toBotMessage(\n answer: AIMessage | string,\n thinkInfo: (think: string) => ReactNode,\n toolCallsInfo: (call: ToolCall, index: number) => ReactNode,\n toolCallsApprove: (toolCalls: ToolCall[]) => ReactNode,\n ): MessageProps {\n if (typeof answer === 'string') {\n // Error\n return aiService.createBotMessage(`Error: ${answer}`)\n }\n\n if (!answer.tool_calls || answer.tool_calls.length === 0) {\n // No tool calls\n const { content, think } = aiService.extractThink(answer.content as string)\n const extraContent = think ? { beforeMainContent: thinkInfo(think) } : undefined\n return aiService.createBotMessage(content, extraContent)\n }\n\n // Tool calls\n const toolCalls = answer.tool_calls\n const content = `${BOT_NAME} wants to use ` + (toolCalls.length > 1 ? 'tools' : 'a tool')\n const extraContent = {\n beforeMainContent: toolCalls.map(toolCallsInfo),\n afterMainContent: toolCallsApprove(toolCalls),\n }\n return aiService.createBotMessage(content, extraContent)\n }\n}\n\nexport const aiService = new AiService()\n","import { AiModel, MODELS } from './ai-model'\nimport { aiService } from './ai-service'\n\nexport const STORAGE_KEY_PREFERENCES = 'ai.preferences'\n\nexport type AiOptions = {\n model: AiModel\n token?: string\n}\n\nexport const DEFAULT_OPTIONS: AiOptions = {\n model: MODELS[0]!,\n} as const\n\nexport interface IAiPreferencesService {\n loadOptions(): AiOptions\n saveOptions(options: Partial<AiOptions>): void\n}\n\nclass AiPreferencesService implements IAiPreferencesService {\n loadOptions(): AiOptions {\n const item = localStorage.getItem(STORAGE_KEY_PREFERENCES)\n const savedOptions = item ? JSON.parse(item) : {}\n return { ...DEFAULT_OPTIONS, ...savedOptions }\n }\n\n saveOptions(options: Partial<AiOptions>) {\n const updated = { ...this.loadOptions(), ...options }\n localStorage.setItem(STORAGE_KEY_PREFERENCES, JSON.stringify(updated))\n if (options.model) {\n aiService.reset(options.model)\n }\n }\n}\n\nexport const aiPreferencesService = new AiPreferencesService()\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","/** @license React v16.13.1\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\n// (unstable) APIs that have been removed. Can we remove the symbols?\n\nvar REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;\nvar REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;\nvar REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;\n\nfunction isValidElementType(type) {\n return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);\n}\n\nfunction typeOf(object) {\n if (typeof object === 'object' && object !== null) {\n var $$typeof = object.$$typeof;\n\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n var type = object.type;\n\n switch (type) {\n case REACT_ASYNC_MODE_TYPE:\n case REACT_CONCURRENT_MODE_TYPE:\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n return type;\n\n default:\n var $$typeofType = type && type.$$typeof;\n\n switch ($$typeofType) {\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n case REACT_PROVIDER_TYPE:\n return $$typeofType;\n\n default:\n return $$typeof;\n }\n\n }\n\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n\n return undefined;\n} // AsyncMode is deprecated along with isAsyncMode\n\nvar AsyncMode = REACT_ASYNC_MODE_TYPE;\nvar ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');\n }\n }\n\n return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;\n}\nfunction isConcurrentMode(object) {\n return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;\n}\nfunction isContextConsumer(object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\n\nexports.AsyncMode = AsyncMode;\nexports.ConcurrentMode = ConcurrentMode;\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","module.exports = Function.call.bind(Object.prototype.hasOwnProperty);\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n var loggedTypeFailures = {};\n var has = require('./lib/has');\n\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) { /**/ }\n };\n}\n\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\nfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n if (process.env.NODE_ENV !== 'production') {\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error;\n // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n var err = Error(\n (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +\n 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' +\n 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'\n );\n err.name = 'Invariant Violation';\n throw err;\n }\n error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n } catch (ex) {\n error = ex;\n }\n if (error && !(error instanceof Error)) {\n printWarning(\n (componentName || 'React class') + ': type specification of ' +\n location + ' `' + typeSpecName + '` is invalid; the type checker ' +\n 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +\n 'You may have forgotten to pass an argument to the type checker ' +\n 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +\n 'shape all require an argument).'\n );\n }\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error.message] = true;\n\n var stack = getStack ? getStack() : '';\n\n printWarning(\n 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')\n );\n }\n }\n }\n }\n}\n\n/**\n * Resets warning cache when testing.\n *\n * @private\n */\ncheckPropTypes.resetWarningCache = function() {\n if (process.env.NODE_ENV !== 'production') {\n loggedTypeFailures = {};\n }\n}\n\nmodule.exports = checkPropTypes;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactIs = require('react-is');\nvar assign = require('object-assign');\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\nvar has = require('./lib/has');\nvar checkPropTypes = require('./checkPropTypes');\n\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n}\n\nfunction emptyFunctionThatReturnsNull() {\n return null;\n}\n\nmodule.exports = function(isValidElement, throwOnDirectAccess) {\n /* global Symbol */\n var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n /**\n * Returns the iterator method function contained on the iterable object.\n *\n * Be sure to invoke the function with the iterable as context:\n *\n * var iteratorFn = getIteratorFn(myIterable);\n * if (iteratorFn) {\n * var iterator = iteratorFn.call(myIterable);\n * ...\n * }\n *\n * @param {?object} maybeIterable\n * @return {?function}\n */\n function getIteratorFn(maybeIterable) {\n var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n if (typeof iteratorFn === 'function') {\n return iteratorFn;\n }\n }\n\n /**\n * Collection of methods that allow declaration and validation of props that are\n * supplied to React components. Example usage:\n *\n * var Props = require('ReactPropTypes');\n * var MyArticle = React.createClass({\n * propTypes: {\n * // An optional string prop named \"description\".\n * description: Props.string,\n *\n * // A required enum prop named \"category\".\n * category: Props.oneOf(['News','Photos']).isRequired,\n *\n * // A prop named \"dialog\" that requires an instance of Dialog.\n * dialog: Props.instanceOf(Dialog).isRequired\n * },\n * render: function() { ... }\n * });\n *\n * A more formal specification of how these methods are used:\n *\n * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n * decl := ReactPropTypes.{type}(.isRequired)?\n *\n * Each and every declaration produces a function with the same signature. This\n * allows the creation of custom validation functions. For example:\n *\n * var MyLink = React.createClass({\n * propTypes: {\n * // An optional string or URI prop named \"href\".\n * href: function(props, propName, componentName) {\n * var propValue = props[propName];\n * if (propValue != null && typeof propValue !== 'string' &&\n * !(propValue instanceof URI)) {\n * return new Error(\n * 'Expected a string or an URI for ' + propName + ' in ' +\n * componentName\n * );\n * }\n * }\n * },\n * render: function() {...}\n * });\n *\n * @internal\n */\n\n var ANONYMOUS = '<<anonymous>>';\n\n // Important!\n // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\n var ReactPropTypes = {\n array: createPrimitiveTypeChecker('array'),\n bigint: createPrimitiveTypeChecker('bigint'),\n bool: createPrimitiveTypeChecker('boolean'),\n func: createPrimitiveTypeChecker('function'),\n number: createPrimitiveTypeChecker('number'),\n object: createPrimitiveTypeChecker('object'),\n string: createPrimitiveTypeChecker('string'),\n symbol: createPrimitiveTypeChecker('symbol'),\n\n any: createAnyTypeChecker(),\n arrayOf: createArrayOfTypeChecker,\n element: createElementTypeChecker(),\n elementType: createElementTypeTypeChecker(),\n instanceOf: createInstanceTypeChecker,\n node: createNodeChecker(),\n objectOf: createObjectOfTypeChecker,\n oneOf: createEnumTypeChecker,\n oneOfType: createUnionTypeChecker,\n shape: createShapeTypeChecker,\n exact: createStrictShapeTypeChecker,\n };\n\n /**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\n /*eslint-disable no-self-compare*/\n function is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return x !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n }\n /*eslint-enable no-self-compare*/\n\n /**\n * We use an Error-like object for backward compatibility as people may call\n * PropTypes directly and inspect their output. However, we don't use real\n * Errors anymore. We don't inspect their stack anyway, and creating them\n * is prohibitively expensive if they are created too often, such as what\n * happens in oneOfType() for any type before the one that matched.\n */\n function PropTypeError(message, data) {\n this.message = message;\n this.data = data && typeof data === 'object' ? data: {};\n this.stack = '';\n }\n // Make `instanceof Error` still work for returned errors.\n PropTypeError.prototype = Error.prototype;\n\n function createChainableTypeChecker(validate) {\n if (process.env.NODE_ENV !== 'production') {\n var manualPropTypeCallCache = {};\n var manualPropTypeWarningCount = 0;\n }\n function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n componentName = componentName || ANONYMOUS;\n propFullName = propFullName || propName;\n\n if (secret !== ReactPropTypesSecret) {\n if (throwOnDirectAccess) {\n // New behavior only for users of `prop-types` package\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use `PropTypes.checkPropTypes()` to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n } else if (process.env.NODE_ENV !== 'production' && typeof console !== 'undefined') {\n // Old behavior for people using React.PropTypes\n var cacheKey = componentName + ':' + propName;\n if (\n !manualPropTypeCallCache[cacheKey] &&\n // Avoid spamming the console because they are often not actionable except for lib authors\n manualPropTypeWarningCount < 3\n ) {\n printWarning(\n 'You are manually calling a React.PropTypes validation ' +\n 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' +\n 'and will throw in the standalone `prop-types` package. ' +\n 'You may be seeing this warning due to a third-party PropTypes ' +\n 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'\n );\n manualPropTypeCallCache[cacheKey] = true;\n manualPropTypeWarningCount++;\n }\n }\n }\n if (props[propName] == null) {\n if (isRequired) {\n if (props[propName] === null) {\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\n }\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\n }\n return null;\n } else {\n return validate(props, propName, componentName, location, propFullName);\n }\n }\n\n var chainedCheckType = checkType.bind(null, false);\n chainedCheckType.isRequired = checkType.bind(null, true);\n\n return chainedCheckType;\n }\n\n function createPrimitiveTypeChecker(expectedType) {\n function validate(props, propName, componentName, location, propFullName, secret) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== expectedType) {\n // `propValue` being instance of, say, date/regexp, pass the 'object'\n // check, but we can offer a more precise error message here rather than\n // 'of type `object`'.\n var preciseType = getPreciseType(propValue);\n\n return new PropTypeError(\n 'Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'),\n {expectedType: expectedType}\n );\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createAnyTypeChecker() {\n return createChainableTypeChecker(emptyFunctionThatReturnsNull);\n }\n\n function createArrayOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n }\n var propValue = props[propName];\n if (!Array.isArray(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n }\n for (var i = 0; i < propValue.length; i++) {\n var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!isValidElement(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!ReactIs.isValidElementType(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createInstanceTypeChecker(expectedClass) {\n function validate(props, propName, componentName, location, propFullName) {\n if (!(props[propName] instanceof expectedClass)) {\n var expectedClassName = expectedClass.name || ANONYMOUS;\n var actualClassName = getClassName(props[propName]);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createEnumTypeChecker(expectedValues) {\n if (!Array.isArray(expectedValues)) {\n if (process.env.NODE_ENV !== 'production') {\n if (arguments.length > 1) {\n printWarning(\n 'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +\n 'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'\n );\n } else {\n printWarning('Invalid argument supplied to oneOf, expected an array.');\n }\n }\n return emptyFunctionThatReturnsNull;\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n for (var i = 0; i < expectedValues.length; i++) {\n if (is(propValue, expectedValues[i])) {\n return null;\n }\n }\n\n var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {\n var type = getPreciseType(value);\n if (type === 'symbol') {\n return String(value);\n }\n return value;\n });\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n }\n return createChainableTypeChecker(validate);\n }\n\n function createObjectOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n }\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n }\n for (var key in propValue) {\n if (has(propValue, key)) {\n var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createUnionTypeChecker(arrayOfTypeCheckers) {\n if (!Array.isArray(arrayOfTypeCheckers)) {\n process.env.NODE_ENV !== 'production' ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;\n return emptyFunctionThatReturnsNull;\n }\n\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n if (typeof checker !== 'function') {\n printWarning(\n 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +\n 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'\n );\n return emptyFunctionThatReturnsNull;\n }\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var expectedTypes = [];\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n var checkerResult = checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret);\n if (checkerResult == null) {\n return null;\n }\n if (checkerResult.data && has(checkerResult.data, 'expectedType')) {\n expectedTypes.push(checkerResult.data.expectedType);\n }\n }\n var expectedTypesMessage = (expectedTypes.length > 0) ? ', expected one of type [' + expectedTypes.join(', ') + ']': '';\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`' + expectedTypesMessage + '.'));\n }\n return createChainableTypeChecker(validate);\n }\n\n function createNodeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n if (!isNode(props[propName])) {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function invalidValidatorError(componentName, location, propFullName, key, type) {\n return new PropTypeError(\n (componentName || 'React class') + ': ' + location + ' type `' + propFullName + '.' + key + '` is invalid; ' +\n 'it must be a function, usually from the `prop-types` package, but received `' + type + '`.'\n );\n }\n\n function createShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n for (var key in shapeTypes) {\n var checker = shapeTypes[key];\n if (typeof checker !== 'function') {\n return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createStrictShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n // We need to check all keys in case some are required but missing from props.\n var allKeys = assign({}, props[propName], shapeTypes);\n for (var key in allKeys) {\n var checker = shapeTypes[key];\n if (has(shapeTypes, key) && typeof checker !== 'function') {\n return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));\n }\n if (!checker) {\n return new PropTypeError(\n 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +\n '\\nBad object: ' + JSON.stringify(props[propName], null, ' ') +\n '\\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ')\n );\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error) {\n return error;\n }\n }\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function isNode(propValue) {\n switch (typeof propValue) {\n case 'number':\n case 'string':\n case 'undefined':\n return true;\n case 'boolean':\n return !propValue;\n case 'object':\n if (Array.isArray(propValue)) {\n return propValue.every(isNode);\n }\n if (propValue === null || isValidElement(propValue)) {\n return true;\n }\n\n var iteratorFn = getIteratorFn(propValue);\n if (iteratorFn) {\n var iterator = iteratorFn.call(propValue);\n var step;\n if (iteratorFn !== propValue.entries) {\n while (!(step = iterator.next()).done) {\n if (!isNode(step.value)) {\n return false;\n }\n }\n } else {\n // Iterator will provide entry [k,v] tuples rather than values.\n while (!(step = iterator.next()).done) {\n var entry = step.value;\n if (entry) {\n if (!isNode(entry[1])) {\n return false;\n }\n }\n }\n }\n } else {\n return false;\n }\n\n return true;\n default:\n return false;\n }\n }\n\n function isSymbol(propType, propValue) {\n // Native Symbol.\n if (propType === 'symbol') {\n return true;\n }\n\n // falsy value can't be a Symbol\n if (!propValue) {\n return false;\n }\n\n // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n if (propValue['@@toStringTag'] === 'Symbol') {\n return true;\n }\n\n // Fallback for non-spec compliant Symbols which are polyfilled.\n if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n return true;\n }\n\n return false;\n }\n\n // Equivalent of `typeof` but with special handling for array and regexp.\n function getPropType(propValue) {\n var propType = typeof propValue;\n if (Array.isArray(propValue)) {\n return 'array';\n }\n if (propValue instanceof RegExp) {\n // Old webkits (at least until Android 4.0) return 'function' rather than\n // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n // passes PropTypes.object.\n return 'object';\n }\n if (isSymbol(propType, propValue)) {\n return 'symbol';\n }\n return propType;\n }\n\n // This handles more types than `getPropType`. Only used for error messages.\n // See `createPrimitiveTypeChecker`.\n function getPreciseType(propValue) {\n if (typeof propValue === 'undefined' || propValue === null) {\n return '' + propValue;\n }\n var propType = getPropType(propValue);\n if (propType === 'object') {\n if (propValue instanceof Date) {\n return 'date';\n } else if (propValue instanceof RegExp) {\n return 'regexp';\n }\n }\n return propType;\n }\n\n // Returns a string that is postfixed to a warning about an invalid type.\n // For example, \"undefined\" or \"of type array\"\n function getPostfixForTypeWarning(value) {\n var type = getPreciseType(value);\n switch (type) {\n case 'array':\n case 'object':\n return 'an ' + type;\n case 'boolean':\n case 'date':\n case 'regexp':\n return 'a ' + type;\n default:\n return type;\n }\n }\n\n // Returns class name of the object, if any.\n function getClassName(propValue) {\n if (!propValue.constructor || !propValue.constructor.name) {\n return ANONYMOUS;\n }\n return propValue.constructor.name;\n }\n\n ReactPropTypes.checkPropTypes = checkPropTypes;\n ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache;\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","// The programming goals of Split.js are to deliver readable, understandable and\n// maintainable code, while at the same time manually optimizing for tiny minified file size,\n// browser compatibility without additional requirements\n// and very few assumptions about the user's page layout.\nvar global = typeof window !== 'undefined' ? window : null;\nvar ssr = global === null;\nvar document = !ssr ? global.document : undefined;\n\n// Save a couple long function names that are used frequently.\n// This optimization saves around 400 bytes.\nvar addEventListener = 'addEventListener';\nvar removeEventListener = 'removeEventListener';\nvar getBoundingClientRect = 'getBoundingClientRect';\nvar gutterStartDragging = '_a';\nvar aGutterSize = '_b';\nvar bGutterSize = '_c';\nvar HORIZONTAL = 'horizontal';\nvar NOOP = function () { return false; };\n\n// Helper function determines which prefixes of CSS calc we need.\n// We only need to do this once on startup, when this anonymous function is called.\n//\n// Tests -webkit, -moz and -o prefixes. Modified from StackOverflow:\n// http://stackoverflow.com/questions/16625140/js-feature-detection-to-detect-the-usage-of-webkit-calc-over-calc/16625167#16625167\nvar calc = ssr\n ? 'calc'\n : ((['', '-webkit-', '-moz-', '-o-']\n .filter(function (prefix) {\n var el = document.createElement('div');\n el.style.cssText = \"width:\" + prefix + \"calc(9px)\";\n\n return !!el.style.length\n })\n .shift()) + \"calc\");\n\n// Helper function checks if its argument is a string-like type\nvar isString = function (v) { return typeof v === 'string' || v instanceof String; };\n\n// Helper function allows elements and string selectors to be used\n// interchangeably. In either case an element is returned. This allows us to\n// do `Split([elem1, elem2])` as well as `Split(['#id1', '#id2'])`.\nvar elementOrSelector = function (el) {\n if (isString(el)) {\n var ele = document.querySelector(el);\n if (!ele) {\n throw new Error((\"Selector \" + el + \" did not match a DOM element\"))\n }\n return ele\n }\n\n return el\n};\n\n// Helper function gets a property from the properties object, with a default fallback\nvar getOption = function (options, propName, def) {\n var value = options[propName];\n if (value !== undefined) {\n return value\n }\n return def\n};\n\nvar getGutterSize = function (gutterSize, isFirst, isLast, gutterAlign) {\n if (isFirst) {\n if (gutterAlign === 'end') {\n return 0\n }\n if (gutterAlign === 'center') {\n return gutterSize / 2\n }\n } else if (isLast) {\n if (gutterAlign === 'start') {\n return 0\n }\n if (gutterAlign === 'center') {\n return gutterSize / 2\n }\n }\n\n return gutterSize\n};\n\n// Default options\nvar defaultGutterFn = function (i, gutterDirection) {\n var gut = document.createElement('div');\n gut.className = \"gutter gutter-\" + gutterDirection;\n return gut\n};\n\nvar defaultElementStyleFn = function (dim, size, gutSize) {\n var style = {};\n\n if (!isString(size)) {\n style[dim] = calc + \"(\" + size + \"% - \" + gutSize + \"px)\";\n } else {\n style[dim] = size;\n }\n\n return style\n};\n\nvar defaultGutterStyleFn = function (dim, gutSize) {\n var obj;\n\n return (( obj = {}, obj[dim] = (gutSize + \"px\"), obj ));\n};\n\n// The main function to initialize a split. Split.js thinks about each pair\n// of elements as an independant pair. Dragging the gutter between two elements\n// only changes the dimensions of elements in that pair. This is key to understanding\n// how the following functions operate, since each function is bound to a pair.\n//\n// A pair object is shaped like this:\n//\n// {\n// a: DOM element,\n// b: DOM element,\n// aMin: Number,\n// bMin: Number,\n// dragging: Boolean,\n// parent: DOM element,\n// direction: 'horizontal' | 'vertical'\n// }\n//\n// The basic sequence:\n//\n// 1. Set defaults to something sane. `options` doesn't have to be passed at all.\n// 2. Initialize a bunch of strings based on the direction we're splitting.\n// A lot of the behavior in the rest of the library is paramatized down to\n// rely on CSS strings and classes.\n// 3. Define the dragging helper functions, and a few helpers to go with them.\n// 4. Loop through the elements while pairing them off. Every pair gets an\n// `pair` object and a gutter.\n// 5. Actually size the pair elements, insert gutters and attach event listeners.\nvar Split = function (idsOption, options) {\n if ( options === void 0 ) options = {};\n\n if (ssr) { return {} }\n\n var ids = idsOption;\n var dimension;\n var clientAxis;\n var position;\n var positionEnd;\n var clientSize;\n var elements;\n\n // Allow HTMLCollection to be used as an argument when supported\n if (Array.from) {\n ids = Array.from(ids);\n }\n\n // All DOM elements in the split should have a common parent. We can grab\n // the first elements parent and hope users read the docs because the\n // behavior will be whacky otherwise.\n var firstElement = elementOrSelector(ids[0]);\n var parent = firstElement.parentNode;\n var parentStyle = getComputedStyle ? getComputedStyle(parent) : null;\n var parentFlexDirection = parentStyle ? parentStyle.flexDirection : null;\n\n // Set default options.sizes to equal percentages of the parent element.\n var sizes = getOption(options, 'sizes') || ids.map(function () { return 100 / ids.length; });\n\n // Standardize minSize and maxSize to an array if it isn't already.\n // This allows minSize and maxSize to be passed as a number.\n var minSize = getOption(options, 'minSize', 100);\n var minSizes = Array.isArray(minSize) ? minSize : ids.map(function () { return minSize; });\n var maxSize = getOption(options, 'maxSize', Infinity);\n var maxSizes = Array.isArray(maxSize) ? maxSize : ids.map(function () { return maxSize; });\n\n // Get other options\n var expandToMin = getOption(options, 'expandToMin', false);\n var gutterSize = getOption(options, 'gutterSize', 10);\n var gutterAlign = getOption(options, 'gutterAlign', 'center');\n var snapOffset = getOption(options, 'snapOffset', 30);\n var snapOffsets = Array.isArray(snapOffset) ? snapOffset : ids.map(function () { return snapOffset; });\n var dragInterval = getOption(options, 'dragInterval', 1);\n var direction = getOption(options, 'direction', HORIZONTAL);\n var cursor = getOption(\n options,\n 'cursor',\n direction === HORIZONTAL ? 'col-resize' : 'row-resize'\n );\n var gutter = getOption(options, 'gutter', defaultGutterFn);\n var elementStyle = getOption(\n options,\n 'elementStyle',\n defaultElementStyleFn\n );\n var gutterStyle = getOption(options, 'gutterStyle', defaultGutterStyleFn);\n\n // 2. Initialize a bunch of strings based on the direction we're splitting.\n // A lot of the behavior in the rest of the library is paramatized down to\n // rely on CSS strings and classes.\n if (direction === HORIZONTAL) {\n dimension = 'width';\n clientAxis = 'clientX';\n position = 'left';\n positionEnd = 'right';\n clientSize = 'clientWidth';\n } else if (direction === 'vertical') {\n dimension = 'height';\n clientAxis = 'clientY';\n position = 'top';\n positionEnd = 'bottom';\n clientSize = 'clientHeight';\n }\n\n // 3. Define the dragging helper functions, and a few helpers to go with them.\n // Each helper is bound to a pair object that contains its metadata. This\n // also makes it easy to store references to listeners that that will be\n // added and removed.\n //\n // Even though there are no other functions contained in them, aliasing\n // this to self saves 50 bytes or so since it's used so frequently.\n //\n // The pair object saves metadata like dragging state, position and\n // event listener references.\n\n function setElementSize(el, size, gutSize, i) {\n // Split.js allows setting sizes via numbers (ideally), or if you must,\n // by string, like '300px'. This is less than ideal, because it breaks\n // the fluid layout that `calc(% - px)` provides. You're on your own if you do that,\n // make sure you calculate the gutter size by hand.\n var style = elementStyle(dimension, size, gutSize, i);\n\n Object.keys(style).forEach(function (prop) {\n // eslint-disable-next-line no-param-reassign\n el.style[prop] = style[prop];\n });\n }\n\n function setGutterSize(gutterElement, gutSize, i) {\n var style = gutterStyle(dimension, gutSize, i);\n\n Object.keys(style).forEach(function (prop) {\n // eslint-disable-next-line no-param-reassign\n gutterElement.style[prop] = style[prop];\n });\n }\n\n function getSizes() {\n return elements.map(function (element) { return element.size; })\n }\n\n // Supports touch events, but not multitouch, so only the first\n // finger `touches[0]` is counted.\n function getMousePosition(e) {\n if ('touches' in e) { return e.touches[0][clientAxis] }\n return e[clientAxis]\n }\n\n // Actually adjust the size of elements `a` and `b` to `offset` while dragging.\n // calc is used to allow calc(percentage + gutterpx) on the whole split instance,\n // which allows the viewport to be resized without additional logic.\n // Element a's size is the same as offset. b's size is total size - a size.\n // Both sizes are calculated from the initial parent percentage,\n // then the gutter size is subtracted.\n function adjust(offset) {\n var a = elements[this.a];\n var b = elements[this.b];\n var percentage = a.size + b.size;\n\n a.size = (offset / this.size) * percentage;\n b.size = percentage - (offset / this.size) * percentage;\n\n setElementSize(a.element, a.size, this[aGutterSize], a.i);\n setElementSize(b.element, b.size, this[bGutterSize], b.i);\n }\n\n // drag, where all the magic happens. The logic is really quite simple:\n //\n // 1. Ignore if the pair is not dragging.\n // 2. Get the offset of the event.\n // 3. Snap offset to min if within snappable range (within min + snapOffset).\n // 4. Actually adjust each element in the pair to offset.\n //\n // ---------------------------------------------------------------------\n // | | <- a.minSize || b.minSize -> | |\n // | | | <- this.snapOffset || this.snapOffset -> | | |\n // | | | || | | |\n // | | | || | | |\n // ---------------------------------------------------------------------\n // | <- this.start this.size -> |\n function drag(e) {\n var offset;\n var a = elements[this.a];\n var b = elements[this.b];\n\n if (!this.dragging) { return }\n\n // Get the offset of the event from the first side of the\n // pair `this.start`. Then offset by the initial position of the\n // mouse compared to the gutter size.\n offset =\n getMousePosition(e) -\n this.start +\n (this[aGutterSize] - this.dragOffset);\n\n if (dragInterval > 1) {\n offset = Math.round(offset / dragInterval) * dragInterval;\n }\n\n // If within snapOffset of min or max, set offset to min or max.\n // snapOffset buffers a.minSize and b.minSize, so logic is opposite for both.\n // Include the appropriate gutter sizes to prevent overflows.\n if (offset <= a.minSize + a.snapOffset + this[aGutterSize]) {\n offset = a.minSize + this[aGutterSize];\n } else if (\n offset >=\n this.size - (b.minSize + b.snapOffset + this[bGutterSize])\n ) {\n offset = this.size - (b.minSize + this[bGutterSize]);\n }\n\n if (offset >= a.maxSize - a.snapOffset + this[aGutterSize]) {\n offset = a.maxSize + this[aGutterSize];\n } else if (\n offset <=\n this.size - (b.maxSize - b.snapOffset + this[bGutterSize])\n ) {\n offset = this.size - (b.maxSize + this[bGutterSize]);\n }\n\n // Actually adjust the size.\n adjust.call(this, offset);\n\n // Call the drag callback continously. Don't do anything too intensive\n // in this callback.\n getOption(options, 'onDrag', NOOP)(getSizes());\n }\n\n // Cache some important sizes when drag starts, so we don't have to do that\n // continously:\n //\n // `size`: The total size of the pair. First + second + first gutter + second gutter.\n // `start`: The leading side of the first element.\n //\n // ------------------------------------------------\n // | aGutterSize -> ||| |\n // | ||| |\n // | ||| |\n // | ||| <- bGutterSize |\n // ------------------------------------------------\n // | <- start size -> |\n function calculateSizes() {\n // Figure out the parent size minus padding.\n var a = elements[this.a].element;\n var b = elements[this.b].element;\n\n var aBounds = a[getBoundingClientRect]();\n var bBounds = b[getBoundingClientRect]();\n\n this.size =\n aBounds[dimension] +\n bBounds[dimension] +\n this[aGutterSize] +\n this[bGutterSize];\n this.start = aBounds[position];\n this.end = aBounds[positionEnd];\n }\n\n function innerSize(element) {\n // Return nothing if getComputedStyle is not supported (< IE9)\n // Or if parent element has no layout yet\n if (!getComputedStyle) { return null }\n\n var computedStyle = getComputedStyle(element);\n\n if (!computedStyle) { return null }\n\n var size = element[clientSize];\n\n if (size === 0) { return null }\n\n if (direction === HORIZONTAL) {\n size -=\n parseFloat(computedStyle.paddingLeft) +\n parseFloat(computedStyle.paddingRight);\n } else {\n size -=\n parseFloat(computedStyle.paddingTop) +\n parseFloat(computedStyle.paddingBottom);\n }\n\n return size\n }\n\n // When specifying percentage sizes that are less than the computed\n // size of the element minus the gutter, the lesser percentages must be increased\n // (and decreased from the other elements) to make space for the pixels\n // subtracted by the gutters.\n function trimToMin(sizesToTrim) {\n // Try to get inner size of parent element.\n // If it's no supported, return original sizes.\n var parentSize = innerSize(parent);\n if (parentSize === null) {\n return sizesToTrim\n }\n\n if (minSizes.reduce(function (a, b) { return a + b; }, 0) > parentSize) {\n return sizesToTrim\n }\n\n // Keep track of the excess pixels, the amount of pixels over the desired percentage\n // Also keep track of the elements with pixels to spare, to decrease after if needed\n var excessPixels = 0;\n var toSpare = [];\n\n var pixelSizes = sizesToTrim.map(function (size, i) {\n // Convert requested percentages to pixel sizes\n var pixelSize = (parentSize * size) / 100;\n var elementGutterSize = getGutterSize(\n gutterSize,\n i === 0,\n i === sizesToTrim.length - 1,\n gutterAlign\n );\n var elementMinSize = minSizes[i] + elementGutterSize;\n\n // If element is too smal, increase excess pixels by the difference\n // and mark that it has no pixels to spare\n if (pixelSize < elementMinSize) {\n excessPixels += elementMinSize - pixelSize;\n toSpare.push(0);\n return elementMinSize\n }\n\n // Otherwise, mark the pixels it has to spare and return it's original size\n toSpare.push(pixelSize - elementMinSize);\n return pixelSize\n });\n\n // If nothing was adjusted, return the original sizes\n if (excessPixels === 0) {\n return sizesToTrim\n }\n\n return pixelSizes.map(function (pixelSize, i) {\n var newPixelSize = pixelSize;\n\n // While there's still pixels to take, and there's enough pixels to spare,\n // take as many as possible up to the total excess pixels\n if (excessPixels > 0 && toSpare[i] - excessPixels > 0) {\n var takenPixels = Math.min(\n excessPixels,\n toSpare[i] - excessPixels\n );\n\n // Subtract the amount taken for the next iteration\n excessPixels -= takenPixels;\n newPixelSize = pixelSize - takenPixels;\n }\n\n // Return the pixel size adjusted as a percentage\n return (newPixelSize / parentSize) * 100\n })\n }\n\n // stopDragging is very similar to startDragging in reverse.\n function stopDragging() {\n var self = this;\n var a = elements[self.a].element;\n var b = elements[self.b].element;\n\n if (self.dragging) {\n getOption(options, 'onDragEnd', NOOP)(getSizes());\n }\n\n self.dragging = false;\n\n // Remove the stored event listeners. This is why we store them.\n global[removeEventListener]('mouseup', self.stop);\n global[removeEventListener]('touchend', self.stop);\n global[removeEventListener]('touchcancel', self.stop);\n global[removeEventListener]('mousemove', self.move);\n global[removeEventListener]('touchmove', self.move);\n\n // Clear bound function references\n self.stop = null;\n self.move = null;\n\n a[removeEventListener]('selectstart', NOOP);\n a[removeEventListener]('dragstart', NOOP);\n b[removeEventListener]('selectstart', NOOP);\n b[removeEventListener]('dragstart', NOOP);\n\n a.style.userSelect = '';\n a.style.webkitUserSelect = '';\n a.style.MozUserSelect = '';\n a.style.pointerEvents = '';\n\n b.style.userSelect = '';\n b.style.webkitUserSelect = '';\n b.style.MozUserSelect = '';\n b.style.pointerEvents = '';\n\n self.gutter.style.cursor = '';\n self.parent.style.cursor = '';\n document.body.style.cursor = '';\n }\n\n // startDragging calls `calculateSizes` to store the inital size in the pair object.\n // It also adds event listeners for mouse/touch events,\n // and prevents selection while dragging so avoid the selecting text.\n function startDragging(e) {\n // Right-clicking can't start dragging.\n if ('button' in e && e.button !== 0) {\n return\n }\n\n // Alias frequently used variables to save space. 200 bytes.\n var self = this;\n var a = elements[self.a].element;\n var b = elements[self.b].element;\n\n // Call the onDragStart callback.\n if (!self.dragging) {\n getOption(options, 'onDragStart', NOOP)(getSizes());\n }\n\n // Don't actually drag the element. We emulate that in the drag function.\n e.preventDefault();\n\n // Set the dragging property of the pair object.\n self.dragging = true;\n\n // Create two event listeners bound to the same pair object and store\n // them in the pair object.\n self.move = drag.bind(self);\n self.stop = stopDragging.bind(self);\n\n // All the binding. `window` gets the stop events in case we drag out of the elements.\n global[addEventListener]('mouseup', self.stop);\n global[addEventListener]('touchend', self.stop);\n global[addEventListener]('touchcancel', self.stop);\n global[addEventListener]('mousemove', self.move);\n global[addEventListener]('touchmove', self.move);\n\n // Disable selection. Disable!\n a[addEventListener]('selectstart', NOOP);\n a[addEventListener]('dragstart', NOOP);\n b[addEventListener]('selectstart', NOOP);\n b[addEventListener]('dragstart', NOOP);\n\n a.style.userSelect = 'none';\n a.style.webkitUserSelect = 'none';\n a.style.MozUserSelect = 'none';\n a.style.pointerEvents = 'none';\n\n b.style.userSelect = 'none';\n b.style.webkitUserSelect = 'none';\n b.style.MozUserSelect = 'none';\n b.style.pointerEvents = 'none';\n\n // Set the cursor at multiple levels\n self.gutter.style.cursor = cursor;\n self.parent.style.cursor = cursor;\n document.body.style.cursor = cursor;\n\n // Cache the initial sizes of the pair.\n calculateSizes.call(self);\n\n // Determine the position of the mouse compared to the gutter\n self.dragOffset = getMousePosition(e) - self.end;\n }\n\n // adjust sizes to ensure percentage is within min size and gutter.\n sizes = trimToMin(sizes);\n\n // 5. Create pair and element objects. Each pair has an index reference to\n // elements `a` and `b` of the pair (first and second elements).\n // Loop through the elements while pairing them off. Every pair gets a\n // `pair` object and a gutter.\n //\n // Basic logic:\n //\n // - Starting with the second element `i > 0`, create `pair` objects with\n // `a = i - 1` and `b = i`\n // - Set gutter sizes based on the _pair_ being first/last. The first and last\n // pair have gutterSize / 2, since they only have one half gutter, and not two.\n // - Create gutter elements and add event listeners.\n // - Set the size of the elements, minus the gutter sizes.\n //\n // -----------------------------------------------------------------------\n // | i=0 | i=1 | i=2 | i=3 |\n // | | | | |\n // | pair 0 pair 1 pair 2 |\n // | | | | |\n // -----------------------------------------------------------------------\n var pairs = [];\n elements = ids.map(function (id, i) {\n // Create the element object.\n var element = {\n element: elementOrSelector(id),\n size: sizes[i],\n minSize: minSizes[i],\n maxSize: maxSizes[i],\n snapOffset: snapOffsets[i],\n i: i,\n };\n\n var pair;\n\n if (i > 0) {\n // Create the pair object with its metadata.\n pair = {\n a: i - 1,\n b: i,\n dragging: false,\n direction: direction,\n parent: parent,\n };\n\n pair[aGutterSize] = getGutterSize(\n gutterSize,\n i - 1 === 0,\n false,\n gutterAlign\n );\n pair[bGutterSize] = getGutterSize(\n gutterSize,\n false,\n i === ids.length - 1,\n gutterAlign\n );\n\n // if the parent has a reverse flex-direction, switch the pair elements.\n if (\n parentFlexDirection === 'row-reverse' ||\n parentFlexDirection === 'column-reverse'\n ) {\n var temp = pair.a;\n pair.a = pair.b;\n pair.b = temp;\n }\n }\n\n // Determine the size of the current element. IE8 is supported by\n // staticly assigning sizes without draggable gutters. Assigns a string\n // to `size`.\n //\n // Create gutter elements for each pair.\n if (i > 0) {\n var gutterElement = gutter(i, direction, element.element);\n setGutterSize(gutterElement, gutterSize, i);\n\n // Save bound event listener for removal later\n pair[gutterStartDragging] = startDragging.bind(pair);\n\n // Attach bound event listener\n gutterElement[addEventListener](\n 'mousedown',\n pair[gutterStartDragging]\n );\n gutterElement[addEventListener](\n 'touchstart',\n pair[gutterStartDragging]\n );\n\n parent.insertBefore(gutterElement, element.element);\n\n pair.gutter = gutterElement;\n }\n\n setElementSize(\n element.element,\n element.size,\n getGutterSize(\n gutterSize,\n i === 0,\n i === ids.length - 1,\n gutterAlign\n ),\n i\n );\n\n // After the first iteration, and we have a pair object, append it to the\n // list of pairs.\n if (i > 0) {\n pairs.push(pair);\n }\n\n return element\n });\n\n function adjustToMin(element) {\n var isLast = element.i === pairs.length;\n var pair = isLast ? pairs[element.i - 1] : pairs[element.i];\n\n calculateSizes.call(pair);\n\n var size = isLast\n ? pair.size - element.minSize - pair[bGutterSize]\n : element.minSize + pair[aGutterSize];\n\n adjust.call(pair, size);\n }\n\n elements.forEach(function (element) {\n var computedSize = element.element[getBoundingClientRect]()[dimension];\n\n if (computedSize < element.minSize) {\n if (expandToMin) {\n adjustToMin(element);\n } else {\n // eslint-disable-next-line no-param-reassign\n element.minSize = computedSize;\n }\n }\n });\n\n function setSizes(newSizes) {\n var trimmed = trimToMin(newSizes);\n trimmed.forEach(function (newSize, i) {\n if (i > 0) {\n var pair = pairs[i - 1];\n\n var a = elements[pair.a];\n var b = elements[pair.b];\n\n a.size = trimmed[i - 1];\n b.size = newSize;\n\n setElementSize(a.element, a.size, pair[aGutterSize], a.i);\n setElementSize(b.element, b.size, pair[bGutterSize], b.i);\n }\n });\n }\n\n function destroy(preserveStyles, preserveGutter) {\n pairs.forEach(function (pair) {\n if (preserveGutter !== true) {\n pair.parent.removeChild(pair.gutter);\n } else {\n pair.gutter[removeEventListener](\n 'mousedown',\n pair[gutterStartDragging]\n );\n pair.gutter[removeEventListener](\n 'touchstart',\n pair[gutterStartDragging]\n );\n }\n\n if (preserveStyles !== true) {\n var style = elementStyle(\n dimension,\n pair.a.size,\n pair[aGutterSize]\n );\n\n Object.keys(style).forEach(function (prop) {\n elements[pair.a].element.style[prop] = '';\n elements[pair.b].element.style[prop] = '';\n });\n }\n });\n }\n\n return {\n setSizes: setSizes,\n getSizes: getSizes,\n collapse: function collapse(i) {\n adjustToMin(elements[i]);\n },\n destroy: destroy,\n parent: parent,\n pairs: pairs,\n }\n};\n\nexport default Split;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Split from 'split.js';\n\nfunction objectWithoutProperties (obj, exclude) { var target = {}; for (var k in obj) if (Object.prototype.hasOwnProperty.call(obj, k) && exclude.indexOf(k) === -1) target[k] = obj[k]; return target; }\n\nvar SplitWrapper = /*@__PURE__*/(function (superclass) {\n function SplitWrapper () {\n superclass.apply(this, arguments);\n }\n\n if ( superclass ) SplitWrapper.__proto__ = superclass;\n SplitWrapper.prototype = Object.create( superclass && superclass.prototype );\n SplitWrapper.prototype.constructor = SplitWrapper;\n\n SplitWrapper.prototype.componentDidMount = function componentDidMount () {\n var ref = this.props;\n ref.children;\n var gutter = ref.gutter;\n var rest = objectWithoutProperties( ref, [\"children\", \"gutter\"] );\n var options = rest;\n\n options.gutter = function (index, direction) {\n var gutterElement;\n\n if (gutter) {\n gutterElement = gutter(index, direction);\n } else {\n gutterElement = document.createElement('div');\n gutterElement.className = \"gutter gutter-\" + direction;\n }\n\n // eslint-disable-next-line no-underscore-dangle\n gutterElement.__isSplitGutter = true;\n return gutterElement\n };\n\n this.split = Split(this.parent.children, options);\n };\n\n SplitWrapper.prototype.componentDidUpdate = function componentDidUpdate (prevProps) {\n var this$1 = this;\n\n var ref = this.props;\n ref.children;\n var minSize = ref.minSize;\n var sizes = ref.sizes;\n var collapsed = ref.collapsed;\n var rest = objectWithoutProperties( ref, [\"children\", \"minSize\", \"sizes\", \"collapsed\"] );\n var options = rest;\n var prevMinSize = prevProps.minSize;\n var prevSizes = prevProps.sizes;\n var prevCollapsed = prevProps.collapsed;\n\n var otherProps = [\n 'maxSize',\n 'expandToMin',\n 'gutterSize',\n 'gutterAlign',\n 'snapOffset',\n 'dragInterval',\n 'direction',\n 'cursor' ];\n\n var needsRecreate = otherProps\n // eslint-disable-next-line react/destructuring-assignment\n .map(function (prop) { return this$1.props[prop] !== prevProps[prop]; })\n .reduce(function (accum, same) { return accum || same; }, false);\n\n // Compare minSize when both are arrays, when one is an array and when neither is an array\n if (Array.isArray(minSize) && Array.isArray(prevMinSize)) {\n var minSizeChanged = false;\n\n minSize.forEach(function (minSizeI, i) {\n minSizeChanged = minSizeChanged || minSizeI !== prevMinSize[i];\n });\n\n needsRecreate = needsRecreate || minSizeChanged;\n } else if (Array.isArray(minSize) || Array.isArray(prevMinSize)) {\n needsRecreate = true;\n } else {\n needsRecreate = needsRecreate || minSize !== prevMinSize;\n }\n\n // Destroy and re-create split if options changed\n if (needsRecreate) {\n options.minSize = minSize;\n options.sizes = sizes || this.split.getSizes();\n this.split.destroy(true, true);\n options.gutter = function (index, direction, pairB) { return pairB.previousSibling; };\n this.split = Split(\n Array.from(this.parent.children).filter(\n // eslint-disable-next-line no-underscore-dangle\n function (element) { return !element.__isSplitGutter; }\n ),\n options\n );\n } else if (sizes) {\n // If only the size has changed, set the size. No need to do this if re-created.\n var sizeChanged = false;\n\n sizes.forEach(function (sizeI, i) {\n sizeChanged = sizeChanged || sizeI !== prevSizes[i];\n });\n\n if (sizeChanged) {\n // eslint-disable-next-line react/destructuring-assignment\n this.split.setSizes(this.props.sizes);\n }\n }\n\n // Collapse after re-created or when collapsed changed.\n if (\n Number.isInteger(collapsed) &&\n (collapsed !== prevCollapsed || needsRecreate)\n ) {\n this.split.collapse(collapsed);\n }\n };\n\n SplitWrapper.prototype.componentWillUnmount = function componentWillUnmount () {\n this.split.destroy();\n delete this.split;\n };\n\n SplitWrapper.prototype.render = function render () {\n var this$1 = this;\n\n var ref = this.props;\n ref.sizes;\n ref.minSize;\n ref.maxSize;\n ref.expandToMin;\n ref.gutterSize;\n ref.gutterAlign;\n ref.snapOffset;\n ref.dragInterval;\n ref.direction;\n ref.cursor;\n ref.gutter;\n ref.elementStyle;\n ref.gutterStyle;\n ref.onDrag;\n ref.onDragStart;\n ref.onDragEnd;\n ref.collapsed;\n var children = ref.children;\n var rest$1 = objectWithoutProperties( ref, [\"sizes\", \"minSize\", \"maxSize\", \"expandToMin\", \"gutterSize\", \"gutterAlign\", \"snapOffset\", \"dragInterval\", \"direction\", \"cursor\", \"gutter\", \"elementStyle\", \"gutterStyle\", \"onDrag\", \"onDragStart\", \"onDragEnd\", \"collapsed\", \"children\"] );\n var rest = rest$1;\n\n return (\n React.createElement( 'div', Object.assign({},\n { ref: function (parent) {\n this$1.parent = parent;\n } }, rest),\n children\n )\n )\n };\n\n return SplitWrapper;\n}(React.Component));\n\nSplitWrapper.propTypes = {\n sizes: PropTypes.arrayOf(PropTypes.number),\n minSize: PropTypes.oneOfType([\n PropTypes.number,\n PropTypes.arrayOf(PropTypes.number) ]),\n maxSize: PropTypes.oneOfType([\n PropTypes.number,\n PropTypes.arrayOf(PropTypes.number) ]),\n expandToMin: PropTypes.bool,\n gutterSize: PropTypes.number,\n gutterAlign: PropTypes.string,\n snapOffset: PropTypes.oneOfType([\n PropTypes.number,\n PropTypes.arrayOf(PropTypes.number) ]),\n dragInterval: PropTypes.number,\n direction: PropTypes.string,\n cursor: PropTypes.string,\n gutter: PropTypes.func,\n elementStyle: PropTypes.func,\n gutterStyle: PropTypes.func,\n onDrag: PropTypes.func,\n onDragStart: PropTypes.func,\n onDragEnd: PropTypes.func,\n collapsed: PropTypes.number,\n children: PropTypes.arrayOf(PropTypes.element),\n};\n\nSplitWrapper.defaultProps = {\n sizes: undefined,\n minSize: undefined,\n maxSize: undefined,\n expandToMin: undefined,\n gutterSize: undefined,\n gutterAlign: undefined,\n snapOffset: undefined,\n dragInterval: undefined,\n direction: undefined,\n cursor: undefined,\n gutter: undefined,\n elementStyle: undefined,\n gutterStyle: undefined,\n onDrag: undefined,\n onDragStart: undefined,\n onDragEnd: undefined,\n collapsed: undefined,\n children: undefined,\n};\n\nexport default SplitWrapper;\n","import { EVENT_REFRESH, eventService, MBeanNode, MBeanTree, PluginNodeSelectionContext, workspace } from '@hawtio/react'\nimport { Conversation } from '@patternfly/chatbot/dist/esm/ChatbotConversationHistoryNav'\nimport { MessageProps } from '@patternfly/chatbot/dist/esm/Message'\nimport { createContext, Dispatch, useContext, useEffect, useRef, useState } from 'react'\nimport { To, useNavigate, useSearchParams } from 'react-router-dom'\nimport { log, PARAM_KEY_NODE_ID, pluginName, pluginPath } from './globals'\n\n/**\n * Custom React hook for using JMX MBean tree.\n */\nexport function useMBeanTree(): MBeanTreeContext {\n const [tree, setTree] = useState(MBeanTree.createEmpty(pluginName))\n const [loaded, setLoaded] = useState(false)\n const { selectedNode, setSelectedNode } = useContext(PluginNodeSelectionContext)\n const navigate = useNavigate()\n const [searchParams, setSearchParams] = useSearchParams()\n\n /*\n * Need to preserve the selected node between re-renders since the\n * populateTree function called via the refresh listener does not\n * cache the value and stores it as null\n */\n const refSelectedNode = useRef<MBeanNode | null>()\n refSelectedNode.current = selectedNode\n\n const populateTree = async () => {\n const wkspTree = await workspace.getTree()\n setTree(wkspTree)\n\n const nodeId = searchParams.get(PARAM_KEY_NODE_ID)\n if (nodeId && nodeId !== refSelectedNode.current?.id) {\n log.debug('Restore selected node with nid:', nodeId)\n // Try to restore node from URL\n const urlNode = wkspTree.find(node => node.id === nodeId)\n if (urlNode) {\n setSelectedNode(urlNode)\n refSelectedNode.current = urlNode\n } else {\n // Clear nid as it is invalid\n log.debug('Clear invalid nid:', nodeId)\n searchParams.delete(PARAM_KEY_NODE_ID)\n setSearchParams(searchParams)\n }\n }\n\n if (!refSelectedNode.current) return\n\n const path = [...refSelectedNode.current.path()]\n\n // Expand the nodes to redisplay the path\n wkspTree.forEach(path, node => {\n node.defaultExpanded = true\n })\n\n // Ensure the new version of the selected node is selected\n const newSelected = wkspTree.navigate(...path)\n if (newSelected) {\n setSelectedNode(newSelected)\n // Reset to base path with nid to sync URL with restored selection\n navigate(pluginPathWithNodeId(newSelected, searchParams))\n } else {\n // Node no longer exists - clear selection and go to base path\n navigate(pluginPath)\n }\n }\n\n useEffect(() => {\n const loadTree = async () => {\n await populateTree()\n setLoaded(true)\n }\n\n const listener = () => {\n setLoaded(false)\n loadTree()\n }\n eventService.onRefresh(listener)\n\n loadTree()\n\n return () => eventService.removeListener(EVENT_REFRESH, listener)\n }, [])\n\n return { tree, loaded, selectedNode, setSelectedNode }\n}\n\n/**\n * Build URL query string with nid parameter, preserving other existing params\n * @param node - The node to encode\n * @param searchParams - The current URL search params to preserve, defaults to the ones from the window location\n */\nexport function pluginPathWithNodeId(\n node: MBeanNode,\n searchParams: URLSearchParams = new URLSearchParams(window.location.search),\n): Partial<To> {\n searchParams.set(PARAM_KEY_NODE_ID, node.id)\n const query = `?${searchParams.toString()}`\n return { pathname: pluginPath, search: query }\n}\n\ntype MBeanTreeContext = {\n tree: MBeanTree\n selectedNode: MBeanNode | null\n setSelectedNode: (selected: MBeanNode | null) => void\n}\n\nexport const MBeanTreeContext = createContext<MBeanTreeContext>({\n tree: MBeanTree.createEmpty(pluginName),\n selectedNode: null,\n setSelectedNode: () => {\n /* no-op */\n },\n})\n\nexport type Conversations = Conversation[] | Record<string, Conversation[]>\n\nexport const initialConversations: Conversations = {}\n\n/**\n * Custom React hook for using AI Chatbot.\n */\nexport function useChatbot(): ChatbotContext {\n const [messages, setMessages] = useState<MessageProps[]>([])\n const [conversations, setConversations] = useState<Conversations>(initialConversations)\n const [announcement, setAnnouncement] = useState('')\n const [isChatbotOpen, setIsChatbotOpen] = useState(false)\n const [isSendButtonDisabled, setIsSendButtonDisabled] = useState(false)\n return {\n messages,\n setMessages,\n conversations,\n setConversations,\n announcement,\n setAnnouncement,\n isChatbotOpen,\n setIsChatbotOpen,\n isSendButtonDisabled,\n setIsSendButtonDisabled,\n }\n}\n\ntype ChatbotContext = {\n messages: MessageProps[]\n setMessages: Dispatch<React.SetStateAction<MessageProps[]>>\n conversations: Conversations\n setConversations: Dispatch<React.SetStateAction<Conversations>>\n announcement: string\n setAnnouncement: Dispatch<React.SetStateAction<string>>\n isChatbotOpen: boolean\n setIsChatbotOpen: (value: boolean) => void\n isSendButtonDisabled: boolean\n setIsSendButtonDisabled: (value: boolean) => void\n}\n\nexport const ChatbotContext = createContext<ChatbotContext>({\n messages: [],\n setMessages: () => {\n /* no-op */\n },\n conversations: initialConversations,\n setConversations: () => {\n /* no-op */\n },\n announcement: '',\n setAnnouncement: () => {\n /* no-op */\n },\n isChatbotOpen: false,\n setIsChatbotOpen: () => {\n /* no-op */\n },\n isSendButtonDisabled: false,\n setIsSendButtonDisabled: () => {\n /* no-op */\n },\n})\n",".jmx-split {\n display: flex;\n flex-direction: row;\n height: calc(100vh - 85px);\n}\n\n.gutter {\n background-color: #eee;\n background-repeat: no-repeat;\n background-position: 50%;\n}\n\n.gutter.gutter-horizontal {\n background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAeCAYAAADkftS9AAAAIklEQVQoU2M4c+bMfxAGAgYYmwGrIIiDjrELjpo5aiZeMwF+yNnOs5KSvgAAAABJRU5ErkJggg==');\n cursor: col-resize;\n}\n","import { ToolCall } from '@langchain/core/messages/tool'\nimport Chatbot, { ChatbotDisplayMode } from '@patternfly/chatbot/dist/dynamic/Chatbot'\nimport ChatbotContent from '@patternfly/chatbot/dist/dynamic/ChatbotContent'\nimport ChatbotConversationHistoryNav, {\n Conversation,\n} from '@patternfly/chatbot/dist/dynamic/ChatbotConversationHistoryNav'\nimport ChatbotFooter, { ChatbotFootnote } from '@patternfly/chatbot/dist/dynamic/ChatbotFooter'\nimport ChatbotHeader, {\n ChatbotHeaderActions,\n ChatbotHeaderCloseButton,\n ChatbotHeaderMain,\n ChatbotHeaderMenu,\n ChatbotHeaderTitle,\n} from '@patternfly/chatbot/dist/dynamic/ChatbotHeader'\nimport Message, { MessageProps } from '@patternfly/chatbot/dist/dynamic/Message'\nimport MessageBar from '@patternfly/chatbot/dist/dynamic/MessageBar'\nimport MessageBox from '@patternfly/chatbot/dist/dynamic/MessageBox'\nimport { Alert, Button, Content, Flex, Label } from '@patternfly/react-core'\nimport WrenchIcon from '@patternfly/react-icons/dist/esm/icons/wrench-icon'\nimport React, { Dispatch, useContext, useEffect, useRef, useState } from 'react'\nimport { aiService } from '../common/ai-service'\nimport { ChatbotContext, Conversations, initialConversations } from './context'\nimport { log } from './globals'\n\nexport const DiagnosisChatbot: React.FC = () => {\n const { setMessages, conversations, setConversations } = useContext(ChatbotContext)\n const [isDrawerOpen, setIsDrawerOpen] = useState(false)\n\n const findMatchingItems = (targetValue: string) => {\n let filteredConversations: Conversations = Object.entries(initialConversations).reduce(\n (acc, [key, items]) => {\n const filteredItems = items.filter((item: { text: string }) =>\n item.text.toLowerCase().includes(targetValue.toLowerCase()),\n )\n if (filteredItems.length > 0) {\n acc[key] = filteredItems\n }\n return acc\n },\n {} as Record<string, Conversation[]>,\n )\n\n // append message if no items are found\n if (Object.keys(filteredConversations).length === 0) {\n filteredConversations = [{ id: '13', noIcon: true, text: 'No results found' }]\n }\n return filteredConversations\n }\n\n const displayMode = ChatbotDisplayMode.drawer\n\n return (\n <Chatbot isCompact displayMode={displayMode}>\n <ChatbotConversationHistoryNav\n isCompact\n drawerPanelContentProps={{ isResizable: true, minSize: '200px' }}\n displayMode={displayMode}\n onDrawerToggle={() => {\n setIsDrawerOpen(!isDrawerOpen)\n setConversations(initialConversations)\n }}\n isDrawerOpen={isDrawerOpen}\n setIsDrawerOpen={setIsDrawerOpen}\n activeItemId='1'\n onSelectActiveItem={(_e, selectedItem) => log.debug(`Selected history item with id ${selectedItem}`)}\n conversations={conversations}\n onNewChat={() => {\n setIsDrawerOpen(!isDrawerOpen)\n setMessages([])\n setConversations(initialConversations)\n }}\n handleTextInputChange={value => {\n if (value === '') {\n setConversations(initialConversations)\n }\n // this is where you would perform search on the items in the drawer\n // and update the state\n const newConversations = findMatchingItems(value)\n setConversations(newConversations)\n }}\n drawerContent={\n <>\n <DiagnosisChatbotHeader isDrawerOpen={isDrawerOpen} setIsDrawerOpen={setIsDrawerOpen} />\n <DiagnosisChatbotContent />\n <DiagnosisChatbotFooter />\n </>\n }\n />\n </Chatbot>\n )\n}\n\nconst DiagnosisChatbotHeader: React.FC<{\n isDrawerOpen: boolean\n setIsDrawerOpen: Dispatch<React.SetStateAction<boolean>>\n}> = ({ isDrawerOpen, setIsDrawerOpen }) => {\n const { setIsChatbotOpen } = useContext(ChatbotContext)\n const modelName = aiService.getModel()?.name\n\n return (\n <ChatbotHeader>\n <ChatbotHeaderMain>\n <ChatbotHeaderMenu aria-expanded={isDrawerOpen} onMenuToggle={() => setIsDrawerOpen(!isDrawerOpen)} />\n <ChatbotHeaderTitle>\n <Content component='h2'>AI - Diagnosis</Content>\n </ChatbotHeaderTitle>\n </ChatbotHeaderMain>\n <ChatbotHeaderActions>\n {modelName && <Label variant='outline'>{modelName}</Label>}\n <ChatbotHeaderCloseButton onClick={() => setIsChatbotOpen(false)} />\n </ChatbotHeaderActions>\n </ChatbotHeader>\n )\n}\n\nconst DiagnosisChatbotContent: React.FC = () => {\n const { messages, announcement } = useContext(ChatbotContext)\n const scrollToBottomRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (messages.length > 2) {\n scrollToBottomRef.current?.scrollIntoView({ behavior: 'smooth' })\n }\n }, [messages])\n\n return (\n <ChatbotContent>\n <MessageBox announcement={announcement}>\n {messages.map((message, index) => (\n <React.Fragment key={message.id}>\n {index === messages.length - 1 && <div ref={scrollToBottomRef} />}\n <Message key={message.id} {...message} />\n </React.Fragment>\n ))}\n </MessageBox>\n </ChatbotContent>\n )\n}\n\nconst DiagnosisChatbotFooter: React.FC = () => {\n //const { username } = useContext(PageContext) // TODO: Unavailable until @hawtio/react 2.3.0\n const username = 'user'\n const { messages, setMessages, setAnnouncement, isSendButtonDisabled, setIsSendButtonDisabled } =\n useContext(ChatbotContext)\n const messagesRef = useRef(messages)\n\n useEffect(() => {\n messagesRef.current = messages\n }, [messages])\n\n const handleSend = async (message: string) => {\n if (!message.trim()) {\n return\n }\n log.debug('Send', messagesRef.current)\n\n setIsSendButtonDisabled(true)\n const newMessages: MessageProps[] = []\n newMessages.push(...messagesRef.current)\n newMessages.push(aiService.createUserMessage(username, message))\n newMessages.push(aiService.createLoadingBotMessage())\n setMessages(newMessages)\n // make announcement to assistive devices that new messages have been added\n setAnnouncement(`Message from User: ${message}. Message from Bot is loading.`)\n log.debug('handleSend - new messages:', newMessages)\n\n const answer = await (newMessages.length === 2 ? aiService.newChat(message) : aiService.chat(message))\n const loadedMessages: MessageProps[] = []\n loadedMessages.push(...newMessages)\n log.debug('handleSend - loaded messages:', loadedMessages)\n // Remove the loading message\n loadedMessages.pop()\n const botMessage = aiService.toBotMessage(answer, ThinkInfo, ToolCallsInfo, ToolCallsApprove)\n loadedMessages.push(botMessage)\n setMessages(loadedMessages)\n setAnnouncement(`Message from Bot: ${answer}`)\n setIsSendButtonDisabled(false)\n }\n\n return (\n <ChatbotFooter>\n <MessageBar\n onSendMessage={m => handleSend(String(m))}\n hasAttachButton={false}\n isSendButtonDisabled={isSendButtonDisabled}\n />\n <ChatbotFootnote label='AI may be inaccurate. Please verify important information.' />\n </ChatbotFooter>\n )\n}\n\nexport const ThinkInfo = (think: string) => {\n return (\n <Alert variant='info' title='Think' isExpandable>\n {think}\n </Alert>\n )\n}\n\nexport const ToolCallsInfo = (call: ToolCall, index: number) => {\n return (\n <Alert key={index} variant='info' customIcon={<WrenchIcon />} title={call.name} isExpandable>\n <p>Args: {JSON.stringify(call.args)} </p>\n </Alert>\n )\n}\n\nexport const ToolCallsApprove = (toolCalls: ToolCall[]) => {\n //const { username } = useContext(PageContext) // TODO: Unavailable until @hawtio/react 2.3.0\n const username = 'user'\n const { messages, setMessages, setAnnouncement, setIsSendButtonDisabled } = useContext(ChatbotContext)\n const messagesRef = useRef(messages)\n\n const approve = async (toolCalls: ToolCall[]) => {\n log.debug('Approved', messagesRef.current)\n\n setIsSendButtonDisabled(true)\n const newMessages: MessageProps[] = []\n newMessages.push(...messagesRef.current)\n newMessages.push(aiService.createUserMessage(username, 'Approved'))\n newMessages.push(aiService.createLoadingBotMessage())\n setMessages(newMessages)\n // make announcement to assistive devices that new messages have been added\n setAnnouncement(`User approved tool usage. Message from Bot is loading.`)\n log.debug('approve - newMessages:', newMessages)\n\n const answer = await aiService.invokeTools(toolCalls)\n log.debug('Answer:', answer)\n const loadedMessages: MessageProps[] = []\n loadedMessages.push(...newMessages)\n log.debug('approve - loadedMessages:', loadedMessages)\n // Remove the loading message\n loadedMessages.pop()\n const botMessage = aiService.toBotMessage(answer, ThinkInfo, ToolCallsInfo, ToolCallsApprove)\n loadedMessages.push(botMessage)\n setMessages(loadedMessages)\n setAnnouncement(`Message from Bot: ${answer}`)\n setIsSendButtonDisabled(false)\n }\n\n const reject = () => {\n log.debug('Rejected')\n\n setIsSendButtonDisabled(true)\n const newMessages: MessageProps[] = []\n newMessages.push(...messages)\n newMessages.push(aiService.createUserMessage(username, 'Rejected'))\n setMessages(newMessages)\n setIsSendButtonDisabled(false)\n }\n\n return (\n <Flex columnGap={{ default: 'columnGapSm' }}>\n <Button variant='primary' onClick={() => approve(toolCalls)}>\n Approve\n </Button>\n <Button variant='secondary' onClick={reject}>\n Reject\n </Button>\n </Flex>\n )\n}\n","#jmx-content {\n height: 100%;\n}\n\nsection#jmx-content-header.pf-v6-c-page__main-section {\n display: block;\n}\n\n#jmx-content-main > article {\n overflow: auto;\n}\n","export function isObject(value: unknown): value is object {\n const type = typeof value\n return value != null && (type === 'object' || type === 'function')\n}\n\nexport function isNumber(value: unknown): value is number {\n return typeof value === 'number' && !Number.isNaN(value)\n}\n\nexport function stringSorter(a: string, b: string, sortDesc?: boolean): number {\n let res = a.localeCompare(b)\n if (sortDesc) {\n res *= -1\n }\n return res\n}\n\nexport function objectSorter(aValue: unknown, bValue: unknown, sortDesc?: boolean) {\n if (isNumber(aValue)) {\n // Numeric sort\n if (!sortDesc) {\n return (aValue as number) - (bValue as number)\n }\n return (bValue as number) - (aValue as number)\n } else {\n // String sort\n return stringSorter(aValue as string, bValue as string, sortDesc)\n }\n}\n\n/**\n * Return true if the string is either null or empty.\n */\nexport function isBlank(str?: string): boolean {\n if (str === undefined || str === null) {\n return true\n }\n if (typeof str !== 'string') {\n // not null but also not a string...\n return false\n }\n\n return str.trim().length === 0\n}\n\n/**\n * Will format a property to a standard human readable string with its spaces.\n * It will respect MBean and leave it together\n * @param str The property to transform\n * @returns The property with its proper spaces\n */\nexport function humanizeLabels(str: string): string {\n return str\n .split('-')\n .filter(str => !isBlank(str))\n .map(str => str.replace(/^./, str => str.toUpperCase()))\n .join(' ')\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .replace(/\\b([A-Z]+)([A-Z])([a-z])/, '$1 $2$3')\n .replace('M Bean', 'MBean')\n .replace('Mbean', 'MBean')\n .replace(/^./, str => str.toUpperCase())\n .replace(/ +/, ' ')\n .trim()\n}\n\n/**\n * Escapes the mbean for Jolokia GET requests.\n *\n * @param mbean the MBean\n */\nexport function escapeMBean(mbean: string): string {\n return encodeURI(applyJolokiaEscapeRules(mbean))\n}\n\n/**\n * Applies the Jolokia escaping rules to the MBean name.\n * See: https://jolokia.org/reference/html/manual/jolokia_protocol.html#_escaping_rules_in_get_requests\n *\n * @param mbean the MBean\n */\nfunction applyJolokiaEscapeRules(mbean: string): string {\n return mbean.replace(/!/g, '!!').replace(/\\//g, '!/').replace(/\"/g, '!\"')\n}\n","import { AttributeValues, eventService, jolokiaService } from '@hawtio/react'\nimport {\n JolokiaErrorResponse,\n JolokiaFetchErrorResponse,\n JolokiaRequest,\n JolokiaSuccessResponse,\n RequestOptions,\n} from 'jolokia.js'\nimport { log } from '../globals'\nimport { escapeMBean } from '../util'\n\nclass AttributeService {\n private handles: number[] = []\n\n private requestOptions(): RequestOptions {\n // serializeLong = false\n return {}\n }\n\n private setupConfig(request: JolokiaRequest): JolokiaRequest {\n // serializeLong = false\n return request\n }\n\n async read(mbean: string): Promise<AttributeValues> {\n return await jolokiaService.readAttributes(mbean, this.requestOptions())\n }\n\n async readWithCallback(mbean: string, callback: (attrs: AttributeValues) => void): Promise<void> {\n const attrs = await jolokiaService.readAttributes(mbean, this.requestOptions())\n callback(attrs)\n }\n\n async register(\n request: JolokiaRequest,\n callback: (response: JolokiaSuccessResponse | JolokiaErrorResponse | JolokiaFetchErrorResponse) => void,\n ) {\n const handle = await jolokiaService.register(this.setupConfig(request), callback)\n log.debug('Register handle:', handle)\n this.handles.push(handle)\n }\n\n unregisterAll() {\n log.debug('Unregister all handles:', this.handles)\n this.handles.forEach(handle => jolokiaService.unregister(handle))\n this.handles = []\n }\n\n async buildUrl(mbean: string, attribute: string): Promise<string> {\n const jolokiaUrl = await jolokiaService.getFullJolokiaUrl()\n return `${jolokiaUrl}/read/${escapeMBean(mbean)}/${attribute}`\n }\n\n async canInvoke(mbean: string, attribute: string, type: string): Promise<boolean> {\n return true\n /*\n const aclMBean = await rbacService.getACLMBean()\n if (!aclMBean) {\n // Always allow invocation when client-side RBAC is not available\n return true\n }\n\n const operation = 'canInvoke(java.lang.String,java.lang.String,[Ljava.lang.String;)'\n const args = [mbean, `set${attribute}`, [type]]\n return jolokiaService.execute(aclMBean, operation, args) as Promise<boolean>\n */\n }\n\n async update(mbeanName: string, attribute: string, value: unknown) {\n await jolokiaService.writeAttribute(mbeanName, attribute, value, this.requestOptions())\n eventService.notify({ type: 'success', message: `Updated attribute: ${attribute}` })\n }\n\n async bulkRequest(requests: JolokiaRequest[]) {\n return jolokiaService.bulkRequest(requests.map(this.setupConfig))\n }\n}\n\nexport const attributeService = new AttributeService()\n","import { eventService, PluginNodeSelectionContext } from '@hawtio/react'\nimport {\n Alert,\n Button,\n ClipboardCopy,\n DrawerActions,\n DrawerCloseButton,\n DrawerHead,\n DrawerPanelBody,\n DrawerPanelContent,\n Form,\n FormGroup,\n Hint,\n HintBody,\n HintFooter,\n HintTitle,\n TextArea,\n TextInput,\n Title,\n} from '@patternfly/react-core'\nimport { InfoCircleIcon } from '@patternfly/react-icons'\nimport React, { useContext, useEffect, useState } from 'react'\nimport Markdown from 'react-markdown'\nimport { aiService, MessageWithThink } from '../../common/ai-service'\nimport { log } from '../globals'\nimport { attributeService } from './attribute-service'\n\nexport const AttributeModal: React.FC<{\n isAttributeSelected: boolean\n onClose: () => void\n onUpdate: () => void\n input: { name: string; value: string }\n aiMessage?: string\n}> = ({ isAttributeSelected, onClose, onUpdate, input, aiMessage }) => {\n const { selectedNode } = useContext(PluginNodeSelectionContext)\n const attributeName = input.name\n const [attributeValue, setAttributeValue] = useState('')\n const [jolokiaUrl, setJolokiaUrl] = useState('Loading...')\n const [isWritable, setIsWritable] = useState(false)\n\n useEffect(() => {\n if (!selectedNode || !selectedNode.objectName || !selectedNode.mbean) {\n return\n }\n\n const { mbean, objectName } = selectedNode\n\n const attribute = mbean.attr?.[attributeName]\n if (!attribute) {\n return\n }\n\n setAttributeValue(input.value)\n\n // Update Jolokia URL\n const buildUrl = async () => {\n const url = await attributeService.buildUrl(objectName, attributeName)\n setJolokiaUrl(url)\n }\n buildUrl()\n\n // Check RBAC on the selected attribute\n if (attribute.rw) {\n // For writable attribute, we need to check RBAC\n const canInvoke = async () => {\n const canInvoke = await attributeService.canInvoke(objectName, attributeName, attribute.type)\n log.debug('Attribute', attributeName, 'canInvoke:', canInvoke)\n setIsWritable(canInvoke)\n }\n canInvoke()\n } else {\n setIsWritable(false)\n }\n }, [selectedNode, attributeName, input])\n\n if (!selectedNode || !selectedNode.objectName || !selectedNode.mbean) {\n return null\n }\n\n const { mbean, objectName } = selectedNode\n\n const attribute = mbean.attr?.[attributeName]\n if (!attribute) {\n return null\n }\n\n const updateAttribute = async () => {\n if (attributeValue === input.value) {\n eventService.notify({ type: 'info', message: 'The attribute value has not changed' })\n } else {\n await attributeService.update(objectName, attributeName, attributeValue)\n onUpdate()\n }\n onClose()\n }\n\n const modalTitle = isAttributeSelected ? `Attribute: ${attributeName}` : 'Attributes'\n\n const modalActions = []\n\n if (isWritable) {\n modalActions.push(\n <Button key='update' variant='danger' onClick={updateAttribute}>\n Save\n </Button>,\n )\n }\n\n const diagnosis: MessageWithThink = aiMessage ? aiService.extractThink(aiMessage) : { content: '' }\n\n return (\n <DrawerPanelContent isResizable>\n <DrawerHead>\n <Title headingLevel='h2' size='xl'>\n {modalTitle}\n </Title>\n <DrawerActions>\n <DrawerCloseButton onClick={onClose} />\n </DrawerActions>\n </DrawerHead>\n\n {isAttributeSelected && (\n <DrawerPanelBody>\n <Form id='attribute-form' isHorizontal>\n <FormGroup label='Name' fieldId='attribute-form-name'>\n <TextInput\n id='attribute-form-name'\n name='attribute-form-name'\n value={attributeName}\n readOnlyVariant='default'\n />\n </FormGroup>\n <FormGroup label='Description' fieldId='attribute-form-description'>\n <TextArea\n id='attribute-form-description'\n name='attribute-form-description'\n value={attribute.desc}\n readOnlyVariant='default'\n />\n </FormGroup>\n <FormGroup label='Type' fieldId='attribute-form-type'>\n <TextInput\n id='attribute-form-type'\n name='attribute-form-type'\n value={attribute.type}\n readOnlyVariant='default'\n />\n </FormGroup>\n <FormGroup label='Jolokia URL' fieldId='attribute-form-jolokia-url'>\n <ClipboardCopy isReadOnly>{jolokiaUrl}</ClipboardCopy>\n </FormGroup>\n <FormGroup label='Value' fieldId='attribute-form-value'>\n <TextInput\n id='attribute-form-value'\n name='attribute-form-value'\n value={attributeValue}\n onChange={(_event, value) => setAttributeValue(value)}\n readOnlyVariant={isWritable ? undefined : 'default'}\n />\n </FormGroup>\n <FormGroup>{modalActions}</FormGroup>\n </Form>\n </DrawerPanelBody>\n )}\n\n {aiMessage && (\n <DrawerPanelBody>\n <Hint>\n <HintTitle>\n <InfoCircleIcon /> Diagnosis\n </HintTitle>\n <HintBody>\n <Markdown>{diagnosis.content}</Markdown>\n </HintBody>\n {diagnosis.think && (\n <HintFooter>\n <Alert variant='info' title='Think' isExpandable>\n <Markdown>{diagnosis.think}</Markdown>\n </Alert>\n </HintFooter>\n )}\n </Hint>\n </DrawerPanelBody>\n )}\n </DrawerPanelContent>\n )\n}\n","/*\n * Copyright 2009-2025 Roland Huss\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst CLIENT_VERSION = \"2.6.0\";\n/**\n * Default parameters for GET and POST requests\n * @see https://developer.mozilla.org/en-US/docs/Web/API/fetch#options\n */\nconst DEFAULT_FETCH_PARAMS = {\n cache: \"no-store\",\n credentials: \"same-origin\",\n redirect: \"error\"\n};\n// Processing parameters which are added to the URL as query parameters if given as options\nconst PROCESSING_PARAMS = [\n \"maxDepth\",\n \"maxCollectionSize\",\n \"maxObjects\",\n \"serializeLong\",\n \"ignoreErrors\",\n \"includeStackTrace\",\n \"serializeException\",\n \"canonicalNaming\",\n \"mimeType\",\n \"includeRequest\",\n \"ifModifiedSince\",\n \"listCache\"\n];\n/**\n * Main Jolokia creation function/class.\n * For backward compatibility, it can be used both as function and as constructor.\n * @param config a string with URL of remote Jolokia agent or a configuration object\n * @returns Jolokia instance for remote Jolokia agent connection\n */\nconst Jolokia = function (config) {\n if (!new.target) {\n // when invoked as function, return properly created object with bound \"this\" reference\n return new Jolokia(config);\n }\n // ++++++++++++++++++++++++++++++++++++++++++++++++++\n // Function-scoped state not exposed as properties of Jolokia class or instance\n // Registered requests for fetching periodically\n const jobs = new Map();\n // Global Job ID - not accessible to web workers, so safe to use as Job ID\n let jobId = 1;\n // Our client id and notification backend config Is null as long as notifications are not used\n let client;\n // Options used for every request (we can override them when calling Jolokia.request())\n const agentOptions = {};\n // State of the scheduler\n let pollerIsRunning = false;\n // timer id for a single poller's setInterval call\n let timerId = null;\n if (typeof config === \"string\") {\n config = { url: config };\n }\n Object.assign(agentOptions, DEFAULT_FETCH_PARAMS, config);\n // ++++++++++++++++++++++++++++++++++++++++++++++++++\n // Public API (instance methods that may use function-scoped state)\n this.request = async function (request, params) {\n // calculation of arguments. jobs will have this function called once to skip it for consecutive calls\n const args = prepareRequest(request, agentOptions, params);\n // potentially time-consuming operation\n if (args.fetchOptions.method === \"POST\") {\n args.fetchOptions.body = JSON.stringify(request);\n }\n // In original jolokia.js at this stage there was different processing depending on the existence of\n // \"success\" option in passed params.\n // without such callback the request was treated as synchronous (ajaxSettings.async = false), but we can't do\n // this with Fetch API (which is good). So we simply resolve fetch' Promise to get\n // https://developer.mozilla.org/en-US/docs/Web/API/Response\n // end return new a promise resolving to string or an array of Jolokia responses (whether successful or failed ones)\n // user should handle transport errors with .catch() attached to returned promise\n //\n // if callbacks are specified (which is required for job registration, but we allow this for direct calls to),\n // we simply return a Promise resolving to Jolokia response(s)\n return performRequest(args);\n };\n this.register = function (jobInfo, ...requests) {\n if (!requests || requests.length == 0) {\n throw \"At a least one request must be provided\";\n }\n const job = { requests };\n if (typeof jobInfo === \"function\") {\n // treat it as a callback accepting an array of responses - intermixed successful and error responses for\n // each request\n job.callback = jobInfo;\n }\n else {\n // a configuration object for job registration\n if (\"callback\" in jobInfo) {\n job.callback = jobInfo.callback;\n }\n else if (\"success\" in jobInfo && \"error\" in jobInfo) {\n job.success = jobInfo.success;\n job.error = jobInfo.error;\n // could be undefined\n job.fetchError = jobInfo.fetchError;\n }\n else {\n throw \"Either 'callback' or ('success' and 'error') callback must be provided \" +\n \"when registering a Jolokia job\";\n }\n job.config = jobInfo.config;\n job.onlyIfModified = jobInfo.onlyIfModified;\n }\n return addJob(job);\n };\n this.unregister = function (handle) {\n jobs.delete(handle);\n };\n this.jobs = function () {\n return [...jobs.keys()];\n };\n this.start = function (interval) {\n interval = interval || agentOptions.fetchInterval || 30000;\n if (pollerIsRunning) {\n if (interval === agentOptions.fetchInterval) {\n // Nothing to do\n return;\n }\n // Re-start with new interval\n this.stop();\n }\n agentOptions.fetchInterval = interval;\n timerId = setInterval(createJolokiaInvocation(jobs, agentOptions), interval);\n pollerIsRunning = true;\n };\n this.stop = function () {\n if (!pollerIsRunning || !timerId) {\n return;\n }\n clearInterval(timerId);\n timerId = null;\n pollerIsRunning = false;\n };\n this.isRunning = function () {\n return pollerIsRunning;\n };\n // ++++++++++++++++++++++++++++++++++++++++++++++++++\n // Public API - Notification handling\n this.addNotificationListener = async function (opts) {\n // Check that client is registered\n await ensureNotificationRegistration(this);\n // Notification mode. Typically \"pull\" or \"sse\"\n const mode = extractNotificationMode(client, opts);\n notificationHandlerFunc(\"lazy-init\", mode)();\n // Send a notification-add request which returns String handle\n // See org.jolokia.service.jmx.handler.notification.NotificationListenerDelegate.addListener()\n return await this.request({\n type: \"notification\",\n command: \"add\",\n mode: mode,\n client: client.id,\n mbean: opts.mbean,\n filter: opts.filter,\n config: opts.config,\n handback: opts.handback\n }, { method: \"post\" }).then((responses) => {\n const resp = responses;\n if (Jolokia.isError(resp)) {\n throw new Error(\"Cannot not add notification subscription for \" + opts.mbean +\n \" (client: \" + client.id + \"): \" + resp.error);\n }\n const handle = {\n id: resp.value,\n mode: mode\n };\n notificationHandlerFunc(\"add\", mode)(this, handle, opts);\n return handle;\n });\n };\n this.removeNotificationListener = async function (handle) {\n notificationHandlerFunc(\"remove\", handle.mode)(this, handle);\n // Unregister notification at server-side\n return await this.request({\n type: \"notification\",\n command: \"remove\",\n client: client.id,\n handle: handle.id\n }, { method: \"post\" }).then((responses) => {\n const resp = responses;\n return !Jolokia.isError(resp);\n });\n };\n this.unregisterNotificationClient = async function () {\n const backends = client.backend || {};\n for (const mode in NOTIFICATION_HANDLERS) {\n if (NOTIFICATION_HANDLERS[mode] && backends[mode]) {\n notificationHandlerFunc(\"unregister\", mode)();\n }\n }\n return await this.request({\n type: \"notification\",\n command: \"unregister\",\n client: client.id\n }, { method: \"post\" }).then((responses) => {\n const resp = responses;\n return !Jolokia.isError(resp);\n });\n };\n // ++++++++++++++++++++++++++++++++++++++++++++++++++\n // Private methods that need access to jolokia-scoped state (jobs, client, ...)\n /**\n * Add a job to the job queue\n * @param job a job to register\n */\n function addJob(job) {\n const id = jobId++;\n // We should immediately call the job, so user doesn't wait for the next refresh tick.\n // But we will also add the job to global job list synchronously\n // So _next_ call may be performed too early, but the first call will not be too delayed\n jobs.set(id, job);\n setTimeout(() => {\n const newJobMap = new Map();\n newJobMap.set(id, job);\n const jobFunction = createJolokiaInvocation(newJobMap, agentOptions);\n jobFunction();\n }, 0);\n return id;\n }\n /**\n * Check that client is registered\n * @param jolokia\n */\n async function ensureNotificationRegistration(jolokia) {\n if (!client) {\n return jolokia.request({\n type: \"notification\",\n command: \"register\"\n }, { method: \"post\" }).then(responses => {\n const resp = responses;\n if (Jolokia.isError(resp)) {\n throw new Error(\"Can not register client for notifications: \"\n + resp.error\n + \"\\nTrace:\\n\" + resp.stacktrace);\n }\n else {\n client = resp.value;\n }\n return true;\n });\n }\n else {\n return Promise.resolve(true);\n }\n }\n /**\n * Call a function from the handlers defined below, depending on the mode \"this\" is set to the handler object.\n * @param what notification operation\n * @param mode notification mode\n */\n function notificationHandlerFunc(what, mode) {\n const notifHandler = NOTIFICATION_HANDLERS[mode];\n if (!notifHandler) {\n throw new Error(\"Unsupported notification mode '\" + mode + \"'\");\n }\n return function (jolokia, handle, opts) {\n // Set 'this' context to the notifHandler object which holds some state objects\n return notifHandler[what]?.apply(notifHandler, [jolokia, handle, opts]);\n };\n }\n /**\n * A map of internal notification functions + state for each notification mode. The values of this map\n * are objects, so the functions need to be called with function.apply, so `this` is set to this object for\n * proper state management\n */\n const NOTIFICATION_HANDLERS = {\n \"pull\": {\n // \"pull\" handler is based on server-side MBean instance collecting notifications for all registered\n // clients. In order to get the notifications, we have to call this MBean's \"pull\" operation, passing\n // client ID and handle ID\n // --- operations of pull notification mechanism\n add: function (_jolokia, handle, opts) {\n // Add a job for periodically fetching the value and calling the callback with the response\n const job = {\n callback: function (resp) {\n // no spread, so not an array\n if (!Jolokia.isResponseFetchError(resp) && !Jolokia.isError(resp)) {\n const notifs = resp.value;\n if (notifs && notifs.notifications && notifs.notifications.length > 0) {\n opts?.callback?.(notifs);\n }\n }\n },\n requests: [{\n type: \"exec\",\n mbean: client.backend[\"pull\"].store,\n operation: \"pull\",\n arguments: [client.id, handle.id]\n }]\n };\n this.jobIds[handle.id] = addJob(job);\n },\n remove: function (jolokia, handle) {\n // Remove notification subscription from server\n const job = this.jobIds[handle.id];\n if (job != undefined) {\n // Remove from scheduler\n jolokia.unregister(job);\n delete this.jobIds[handle.id];\n }\n },\n unregister: function (jolokia) {\n // Remove all notification jobs from scheduler\n for (const handleId in this.jobIds) {\n if (this.jobIds[handleId] != undefined) {\n jolokia.unregister(this.jobIds[handleId]);\n }\n }\n this.jobIds = {};\n },\n // --- state of pull notification mechanism\n jobIds: {}\n },\n \"sse\": {\n // \"sse\" handler is based on https://developer.mozilla.org/en-US/docs/Web/API/EventSource\n // and continuous stream of events sent over single HTTP connection with text/event-stream MIME type\n // the messages sent are JSON representations of org.jolokia.server.core.service.notification.NotificationResult instances\n // --- operations of sse notification mechanism\n \"lazy-init\": function () {\n if (!this.eventSource) {\n this.eventSource = new EventSource(agentOptions.url + \"/notification/open/\" + client.id + \"/sse\");\n const dispatchers = this.dispatchMap;\n this.eventSource.addEventListener(\"message\", function (event) {\n const data = JSON.parse(event.data);\n if (data.handle) {\n const callback = dispatchers[data.handle];\n callback?.(data);\n }\n });\n }\n },\n add: function (_jolokia, handle, opts) {\n this.dispatchMap[handle.id] = opts.callback;\n },\n remove: function (_jolokia, handle) {\n delete this.dispatchMap[handle.id];\n },\n unregister: function () {\n this.dispatchMap = {};\n this.eventSource?.close();\n this.eventSource = null;\n },\n // --- state of sse notification mechanism\n // Map for dispatching SSE return notifications\n dispatchMap: {},\n // SSE event-source\n eventSource: null\n }\n };\n};\n// ++++++++++++++++++++++++++++++++++++++++++++++++++\n// Public API defined in Jolokia.prototype (or Jolokia itself (static)) - no need to access \"this\"\n/**\n * Version of Jolokia JavaScript client library\n * @constant\n * @type {string}\n * @default\n */\nObject.defineProperty(Jolokia.prototype, \"CLIENT_VERSION\", {\n value: CLIENT_VERSION,\n enumerable: true,\n writable: false\n});\nJolokia.escape = Jolokia.prototype.escape = function (part) {\n return encodeURIComponent(part.replace(/!/g, \"!!\").replace(/\\//g, \"!/\"));\n};\nJolokia.escapePost = Jolokia.prototype.escape = function (part) {\n return part.replace(/!/g, \"!!\").replace(/\\//g, \"!/\");\n};\nJolokia.isError = Jolokia.prototype.isError = function (resp) {\n return resp == null || resp.status != 200;\n};\nJolokia.isResponseSuccess = function (resp) {\n if (!resp || typeof resp !== 'object')\n return false;\n return 'status' in resp && 'timestamp' in resp && 'value' in resp;\n};\nJolokia.isResponseError = function (resp) {\n if (!resp || typeof resp !== 'object')\n return false;\n return 'error_type' in resp && 'error' in resp;\n};\nJolokia.isResponseFetchError = function (resp) {\n if (resp instanceof Response) {\n return resp.status >= 400;\n }\n if (resp instanceof DOMException || resp instanceof TypeError) {\n // see https://developer.mozilla.org/en-US/docs/Web/API/Window/fetch#exceptions\n return true;\n }\n // in practice we should treat string values as errors, but it'd be counter intuitive...\n // return typeof resp === 'string'\n return false;\n};\n// ++++++++++++++++++++++++++++++++++++++++++++++++++\n// Private/internal functions that don't have access to Jolokia() scope variables\n// (unless these are passed explicitly)\n// --- Request helper functions\n/**\n * Helper function that prepares arguments used later with `fetch()` call. When using with jobs, we can prepare the\n * arguments once and call actual `fetch()` quicker. No `body` is set for POST request.\n * @param request request(s) to be sent to remote Jolokia agent\n * @param agentOptions global agent options\n * @param params parameters used for sending the request\n * @returns arguments for `fetch()` call and additional data to control the returned Promise\n */\nfunction prepareRequest(request, agentOptions, params) {\n const opts = Object.assign({}, agentOptions, { dataType: 'json' }, params);\n assertNotNull(opts.url, \"No URL given\");\n // options object passed to fetch() (2nd argument)\n // https://developer.mozilla.org/en-US/docs/Web/API/fetch#options\n // - body\n // - cache\n // - credentials (omit|same-origin|include)\n // - headers (object with string values or Headers object)\n // - integrity (can be passed, but not handled here)\n // - keepalive (can be passed, but not handled here)\n // - method\n // - mode (can be passed, but not handled here)\n // - priority (can be passed, but not handled here)\n // - redirect (follow|error|manual) (can be passed, but not handled here)\n // - referrer (can be passed, but not handled here)\n // - referrerPolicy (can be passed, but not handled here)\n // - signal (created based on the timeout option)\n // some of the options are taken from agentOptions\n const fetchOptions = Object.assign({}, DEFAULT_FETCH_PARAMS);\n fetchOptions.headers = {};\n const method = extractMethod(request, opts);\n let url = ensureTrailingSlash(opts.url);\n if (opts.headers) {\n // If user has specified `headers` option, these are copied here. Some headers\n // (Content-Type and Authorization) may be overridden below\n Object.assign(fetchOptions.headers, opts.headers);\n }\n if (method === \"post\") {\n fetchOptions.method = \"POST\";\n Object.assign(fetchOptions.headers, { \"Content-Type\": \"text/json\" });\n }\n else {\n fetchOptions.method = \"GET\";\n // request can't be an array\n url += constructGetUrlPath(request);\n }\n // Add processing parameters as query parameters for GET or POST URL\n url = addProcessingParameters(url, opts);\n // preemptive basic authentication if window.btoa is available\n // otherwise, if \"WWW-Authenticate: Basic realm='realm-name'\" is returned, native browser popup may be displayed\n if (opts.username && opts.password) {\n if (typeof window.btoa === \"function\") {\n fetchOptions.headers[\"Authorization\"] = \"Basic \" + window.btoa(opts.username + \":\" + opts.password);\n }\n else {\n console.warn(\"Can't set \\\"Authorization\\\" header - no btoa() function available\");\n }\n }\n if (opts.timeout != null) {\n fetchOptions.signal = AbortSignal.timeout(opts.timeout);\n }\n let successCb = undefined;\n let errorCb = undefined;\n let fetchErrorCb = undefined;\n if (\"success\" in opts) {\n // we won't be returning anything useful (return Promise<undefined>) and the response will be\n // delivered via the callback\n successCb = constructCallbackDispatcher(opts.success);\n errorCb = constructCallbackDispatcher(opts.error);\n }\n if (\"error\" in opts && !opts.success) {\n // response is ignored, only error callback is used. This also turns off meaningful Promise return value\n successCb = constructCallbackDispatcher(\"ignore\");\n errorCb = constructCallbackDispatcher(opts.error);\n }\n // in both callback and promise mode we can have a global \"fetch error handler\"\n if (!(\"fetchError\" in opts)) {\n // in promise mode however we don't provide a default handler\n if (successCb && errorCb) {\n fetchErrorCb = (_response, reason) => {\n console.warn(reason);\n };\n }\n }\n else if (opts.fetchError === \"ignore\") {\n fetchErrorCb = (_response, _reason) => { };\n }\n else {\n fetchErrorCb = opts.fetchError;\n }\n return { url, fetchOptions, dataType: opts.dataType, resolve: opts.resolve, successCb, errorCb, fetchErrorCb };\n}\n/**\n * Actual `fetch()` call based on pre-calculated arguments\n * @param args arguments used to control `fetch()` call\n */\nasync function performRequest(args) {\n const { url, fetchOptions, dataType, resolve, successCb, errorCb, fetchErrorCb } = args;\n if (successCb && errorCb) {\n // callback mode\n // we'll handle the promise and caller will get a promise resolving to `undefined` after\n // the callbacks are notified.\n // (even if user didn't pass `error` callback, it was configured by `prepareRequest()`)\n // user doesn't have to attach any .then() or .catch() like in promise mode and the returned promise\n // can be ignored\n return fetch(url, fetchOptions)\n .then(async (response) => {\n if (response.status != 200) {\n // Jolokia sends its errors with HTTP 200, so any other HTTP code (even redirect - 30x) is actually an error.\n // with xhr and JQuery we were using ajaxError param, here we use fetchError callback\n fetchErrorCb?.(response, response.statusText);\n return undefined;\n }\n const ct = response.headers.get(\"content-type\");\n if (dataType === \"text\" || !ct || !(ct.startsWith(\"text/json\") || ct.startsWith(\"application/json\"))) {\n // text response - no parsing, single call\n const textResponse = await response.text();\n void successCb(textResponse);\n }\n else {\n // JSON response\n const jsonResponse = await response.json();\n const responses = Array.isArray(jsonResponse) ? jsonResponse : [jsonResponse];\n for (let n = 0; n < responses.length; n++) {\n const resp = responses[n];\n if (Jolokia.isError(resp)) {\n errorCb(resp, n);\n }\n else {\n successCb(resp, n);\n }\n }\n }\n })\n .catch(reason => {\n // this is a fetch() error (more serious than HTTP != 200) - we have no `Response` object to pass, just\n // an exception/reason\n fetchErrorCb?.(null, reason);\n return undefined;\n });\n }\n else {\n // promise mode\n // return a promise to be handled by the caller - whatever the caller wants\n if (resolve === \"response\") {\n // low level Response handling - entirely at caller's side\n return fetch(url, fetchOptions);\n }\n else {\n // Jolokia response handling at caller's side (no access to response headers, status, etc. for HTTP 200)\n const promise = fetch(url, fetchOptions)\n .then(async (response) => {\n if (response.status != 200) {\n // all non-200 responses are thrown as exception to be handled in .catch()\n throw response;\n }\n const ct = response.headers.get(\"content-type\");\n if (dataType === \"text\" || !ct || !(ct.startsWith(\"text/json\") || ct.startsWith(\"application/json\"))) {\n return response.text();\n }\n return response.json();\n });\n if (fetchErrorCb) {\n // we handle serious fetch() exception for user's convenience\n return promise.catch(error => {\n if (error instanceof Response) {\n fetchErrorCb(error, null);\n }\n else {\n fetchErrorCb(null, error);\n }\n return undefined;\n });\n }\n else {\n return promise;\n }\n }\n }\n}\n/**\n * Prepare a ready to use callback to handle any kind (text, json, error) of response from Jolokia\n * @param cb a callback definition\n */\nfunction constructCallbackDispatcher(cb) {\n if (!cb || (Array.isArray(cb) && cb.length == 0)) {\n return (response, index) => {\n let r;\n if (typeof response === \"string\") {\n r = response;\n }\n else {\n r = JSON.stringify(response);\n }\n if (r && r.length > 256) {\n r = r.substring(0, 253) + \"...\";\n }\n console.warn(\"Ignore response\", \"\\\"\" + r + \"\\\"\", \"index=\", index);\n };\n }\n if (cb === \"ignore\") {\n // Ignore the return value entirely\n return () => {\n };\n }\n // turn a callback into round-robin array of callbacks called by response index\n const cbArray = Array.isArray(cb) ? cb : [cb];\n return (response, index) => {\n if (typeof response === \"string\") {\n cbArray[0](response);\n }\n else {\n cbArray[index % cbArray.length](response, index);\n }\n };\n}\n// --- Job helper functions\n/**\n * Prepares a function that will be invoked in poll-fetching for configured jobs and their requests. All jobs and\n * all requests for each job are handled by a single, periodical {@link IJolokia#request} call.\n * Passed parameters come from the scope of {@link IJolokia} constructor function.\n * @param jobs Requests configured for poll-fetching\n * @param agentOptions global Jolokia configuration\n * @returns A function which can be passed to {@link window#setInterval}\n */\nfunction createJolokiaInvocation(jobs, agentOptions) {\n // the function called in window.setInterval needs a fresh state on each call (to operate only on current\n // set of responses for all the requests of each job, but we may prepare some configuration at this stage\n // we don't need actual request data to prepare the request as long as the method is given\n const requestArguments = prepareRequest([], agentOptions, { method: \"post\" });\n return function () {\n // This function will invoke a single Jolokia bulk request. The requests are taken from all the registered\n // jobs and matching responses (or Jolokia error responses) will be passed to related callbacks\n const successCbs = [];\n const errorCbs = [];\n // array of all the requests for all the jobs - fresh copy for a single invocation of window.setInterval's function\n const requests = [];\n // when receiving a bulk response, Jolokia passes an index for the response array as parameter to\n // ResponseCallback/ErrorCallback. But our bulk request here is \"bigger\" - it combines\n // requests of all the jobs. So we need a mapping\n const indexMapping = [];\n // this array has only one callback for each job - if specified (the above arrays are for each request of each job)\n const fetchErrorCbs = [];\n // check all the jobs\n for (const [jobId, job] of jobs) {\n // and we'll prepare callbacks for all the requests within the job\n const reqsLen = job.requests.length;\n if (job.success) {\n // we have separate job.success and job.error and (optionally) job.fetchError callbacks accepting the\n // response(s) (ok or error) array or a single FetchError\n const successCb = constructSuccessJobCallback(job, jobId, indexMapping);\n const errorCb = constructErrorJobCallback(job, jobId, indexMapping);\n for (let idx = 0; idx < reqsLen; idx++) {\n requests.push(prepareJobRequest(job, idx));\n successCbs.push(successCb);\n errorCbs.push(errorCb);\n indexMapping.push(idx);\n }\n // however there's only one fetch error callback (optional) for one job (no \"index\" parameter)\n if (job.fetchError) {\n fetchErrorCbs.push(job.fetchError);\n }\n }\n else if (job.callback) {\n // single job.callback accepting an array of mixed successful and error Jolokia responses\n // or a single FetchError object\n // that's why, when a job has such a callback for N requests, N-1 requests should be handled simply\n // by collecting responses (or errors) and N-th request should be handled by passing the collected\n // array to this callback\n const callbackConfiguration = constructJobCallbackConfiguration(job, jobId);\n // N-1 requests:\n for (let idx = 0; idx < reqsLen - 1; idx++) {\n requests.push(prepareJobRequest(job, idx));\n successCbs.push(callbackConfiguration.cb);\n errorCbs.push(callbackConfiguration.cb);\n // we won't be using index mapping for a job which uses a single `job.callback`\n indexMapping.push(-1);\n }\n // last request\n requests.push(prepareJobRequest(job, reqsLen - 1));\n successCbs.push(callbackConfiguration.lcb);\n errorCbs.push(callbackConfiguration.lcb);\n indexMapping.push(-1);\n // same callback passed as fetch error handler (should expect the error object instead of an array\n // of success/error Jolokia responses)\n const cb = (response, error) => {\n // pass first non empty argument\n job.callback(response ?? error);\n };\n fetchErrorCbs.push(cb);\n }\n }\n if (requests.length > 0) {\n // POST body is created on each request\n requestArguments.fetchOptions.body = JSON.stringify(requests);\n // callbacks are configured on each request\n requestArguments.successCb = function (response, index) {\n successCbs[index](response, index);\n };\n requestArguments.errorCb = function (response, index) {\n errorCbs[index](response, index);\n };\n requestArguments.fetchErrorCb = function (response, error) {\n if (fetchErrorCbs.length > 0) {\n fetchErrorCbs.forEach(cb => {\n cb(response, error);\n });\n }\n else {\n // no job contains FetchError callback - we need some error handling though\n if (response) {\n console.error(\"Problem executing registered jobs: \", response.status, response.statusText);\n }\n else {\n console.error(\"Problem executing registered jobs: \", error);\n }\n }\n };\n // we can now call remote Jolokia agent using a single request for all the jobs and all the requests\n // within a job\n performRequest(requestArguments).catch((e) => {\n console.warn(\"Problem invoking a poller\", e);\n });\n }\n };\n}\n/**\n * Prepare a callback for handling successful responses for registered jobs\n * @param job a Job with `success` and `error` callbacks configured\n * @param jobId job identifier to be passed to {@link JobResponseCallback}\n * @param indexMapping\n * @returns a normal {@link ResponseCallback} to be passed to {@link IJolokia#request}, but which is job-aware\n */\nfunction constructSuccessJobCallback(job, jobId, indexMapping) {\n if (!job.success) {\n throw \"Expected 'success' callback configured for the job with ID=\" + jobId;\n }\n return function (response, index) {\n // Remember last success callback\n if (job.onlyIfModified) {\n job.lastModified = response.timestamp;\n }\n job.success(response, jobId, indexMapping[index]);\n };\n}\n/**\n * Prepare a callback for handling error responses for registered jobs\n * @param job a Job with `success` and `error` callbacks configured\n * @param jobId job identifier to be passed to {@link JobErrorCallback}\n * @param indexMapping\n * @returns a normal {@link ErrorCallback} to be passed to {@link IJolokia#request}, but which is job-aware\n */\nfunction constructErrorJobCallback(job, jobId, indexMapping) {\n if (!job.error) {\n throw \"Expected 'error' callback configured for the job with ID=\" + jobId;\n }\n return function (response, index) {\n if (response.status === 304) {\n // If we get a \"304 - Not Modified\" 'error', we do nothing\n return;\n }\n else {\n job.error(response, jobId, indexMapping[index]);\n }\n };\n}\n/**\n * Prepare a pair of callbacks for job callback that should receive all the responses. Callback for N-1\n * responses simply collect the responses, and callback for N-th responses collects the responses and passes\n * all them collectively to {@link JobCallback}.\n * @param job a Job with `callback` configured\n * @param jobId job identifier\n * @returns a pair of callbacks to be used for: `cb`. N-1 responses, `lcb`. N-th (last) response\n */\nfunction constructJobCallbackConfiguration(job, jobId) {\n if (!job.callback) {\n throw \"Expected 'callback' configured for the job with ID=\" + jobId;\n }\n const allResponses = [];\n let lastModified = 0;\n return {\n cb: addResponse,\n lcb: function (response, index) {\n addResponse(response);\n // Callback is called only if at least one non-cached response\n // is obtained. Update job's timestamp internally\n if (allResponses.length > 0) {\n job.lastModified = lastModified;\n // response array is spread into callback parameters. But if the callback accepts a single\n // parameter without spread syntax (...), only first array element will be available!\n job.callback(...allResponses);\n }\n }\n };\n function addResponse(response, _index) {\n // Only remember responses with values and remember lowest timestamp, too.\n if (response.status !== 304) {\n if (lastModified === 0 || (response.timestamp && response.timestamp < lastModified)) {\n if (response.timestamp) {\n lastModified = response.timestamp;\n }\n }\n allResponses.push(response);\n }\n }\n}\n/**\n * Add special configuration for single request of a single job based on current job's state (like lastModified)\n * @param job\n * @param requestIndex\n */\nfunction prepareJobRequest(job, requestIndex) {\n const request = job.requests[requestIndex];\n const config = job.config || {};\n const extraConfig = job.onlyIfModified && job.lastModified ? { ifModifiedSince: job.lastModified } : {};\n request.config = Object.assign({}, config, request.config, extraConfig);\n return request;\n}\n// --- Util functions\n/**\n * Asserts that the value is not null or undefined\n * @param value A value to assert\n * @param message An error message for thrown Error\n * @throws Error in case the value is null or undefined\n */\nfunction assertNotNull(value, message) {\n if (value == null) {\n throw new Error(message);\n }\n}\n/**\n * Extract the HTTP-Method to use and make some sanity checks if the method was provided as part of the options,\n * but is not valid for the given request\n * @param request JSON request object (or array of objects) compliant with\n * {@link https://jolokia.org/reference/html/manual/jolokia_protocol.html|Jolokia protocol} representing the requests\n * to send to remote Jolokia agent.\n * @param params parameters used for sending the request which may override default configuration.\n * @returns an HTTP method for given `request` and `params`\n */\nfunction extractMethod(request, params) {\n const methodGiven = params?.method?.toLowerCase();\n let method;\n if (!request) {\n // let's assume that it's a version GET request\n return \"get\";\n }\n if (methodGiven) {\n if (methodGiven === \"get\") {\n // can't be used for bulk or multi-read requests\n if (Array.isArray(request)) {\n throw new Error(\"Cannot use GET with bulk requests\");\n }\n // if (request.type === \"read\" && Array.isArray(request.attribute)) {\n if (request.type?.toLowerCase() === \"read\" && \"attribute\" in request && Array.isArray(request.attribute)) {\n throw new Error(\"Cannot use GET for read with multiple attributes\");\n }\n if (\"target\" in request) {\n throw new Error(\"Cannot use GET request with proxy mode\");\n }\n if (\"config\" in request) {\n throw new Error(\"Cannot use GET with request specific config\");\n }\n method = \"get\";\n }\n else if (methodGiven !== \"post\") {\n throw new Error(\"Illegal method \\\"\" + methodGiven + \"\\\"\");\n }\n else {\n method = \"post\";\n }\n }\n else {\n // Determine method dynamically\n if (Array.isArray(request)\n || \"config\" in request\n || (request.type?.toLowerCase() === \"read\" && \"attribute\" in request && Array.isArray(request.attribute))\n || \"target\" in request) {\n method = \"post\";\n }\n else {\n method = \"get\";\n }\n }\n return method;\n}\n/**\n * For POST requests it is recommended to have a trailing slash at the URL in order to avoid a redirect which then\n * results in a GET request.\n * @see https://bugs.eclipse.org/bugs/show_bug.cgi?id=331194#c1\n * @param url Jolokia agent URL\n * @returns URL location with \"/\" appended\n */\nfunction ensureTrailingSlash(url) {\n // Squeeze any URL to a single one, optionally adding one\n const v = typeof url === \"string\" ? url : url.href;\n let trimEnd = v.length;\n while (v[trimEnd - 1] === '/') {\n trimEnd--;\n }\n return v.substring(0, trimEnd) + '/';\n}\n/**\n * Add processing parameters given as request options\n * to an URL as GET query parameters\n * @param url URL for GET or POST request\n * @param opts Request configuration object\n * @returns url with query parameters applied\n */\nfunction addProcessingParameters(url, opts) {\n let sep = url.indexOf(\"?\") > 0 ? \"&\" : \"?\";\n PROCESSING_PARAMS.forEach(function (key) {\n const v = opts[key];\n if (v != null) {\n url += sep + key + \"=\" + v;\n sep = \"&\";\n }\n });\n return url;\n}\n/**\n * Converts a value to a string for passing it to the Jolokia agent via\n * a `GET` request (`write`, `exec`). Value can be either a single object or an array\n * @param value A value to write or pass to `exec` operation\n * @returns Normalized value for Jolokia `write`/`exec` operation\n */\nfunction valueToString(value) {\n if (value == null) {\n return \"[null]\";\n }\n if (Array.isArray(value)) {\n let ret = \"\";\n for (let i = 0; i < value.length; i++) {\n const v = value[i];\n ret += v == null ? \"[null]\" : singleValueToString(value[i]);\n if (i < value.length - 1) {\n ret += \",\";\n }\n }\n return ret;\n }\n else {\n return singleValueToString(value);\n }\n}\n/**\n * Single value conversion for write/exec GET requests\n * @param value A value to normalize\n * @returns normalized value\n */\nfunction singleValueToString(value) {\n if (typeof value === \"string\" && value.length === 0) {\n return \"\\\"\\\"\";\n }\n else {\n return value.toString();\n }\n}\n// --- Functions and helpers for GET path construction\n/**\n * Create the URL used for a GET request\n * @param request request object sent using `GET`, where type, mbean and additional information is encoded\n * in URL GET request\n * @returns GET URL to be used with remote Jolokia agent\n */\nfunction constructGetUrlPath(request) {\n let type = request.type;\n assertNotNull(type, \"No request type given for building a GET request\");\n type = type.toLowerCase();\n const extractor = GET_URL_EXTRACTORS[type];\n assertNotNull(extractor, \"Unknown request type \" + type);\n const result = extractor(request);\n const parts = result.parts || [];\n let url = type;\n parts.forEach(function (v) {\n url += \"/\" + Jolokia.escape(v);\n });\n if (result.path) {\n url += (result.path[0] === '/' ? \"\" : \"/\") + result.path;\n }\n return url;\n}\n/**\n * Extractors used for preparing a GET request, i.e. for creating a stack\n * of arguments which gets appended to create the proper access URL.\n * key: lowercase request type.\n * The return value is an object with two properties: The 'parts' to glue together, where\n * each part gets escaped and a 'path' which is appended literally\n * Note: I could not create a good TS base type for ReadRequest, WriteRequest, ... and at the same time use it as\n * parameter of a function used as value type of GET_URL_EXTRACTORS - I had problems defining particular\n * functions (under keys `read`, `write`, ...) with types derived from BaseRequest...\n */\nconst GET_URL_EXTRACTORS = {\n /**\n * Function to prepare GET URL for `read` Jolokia request\n * @param request Jolokia request object\n * @returns URL configuration object for Jolokia `read` GET request\n */\n \"read\": function (request) {\n const path = Array.isArray(request.path) ? request.path.map(Jolokia.escape).join(\"/\") : request.path;\n if (request.attribute == null) {\n // Path gets ignored for multiple attribute fetch\n return { parts: [request.mbean, \"*\"], path };\n }\n else {\n // can't use attribute array with GET\n return { parts: [request.mbean, request.attribute], path };\n }\n },\n /**\n * Function to prepare GET URL for `write` Jolokia request\n * @param request Jolokia request object\n * @returns URL configuration object for Jolokia `write` GET request\n */\n \"write\": function (request) {\n const path = Array.isArray(request.path) ? request.path.map(Jolokia.escape).join(\"/\") : request.path;\n return { parts: [request.mbean, request.attribute, valueToString(request.value)], path };\n },\n /**\n * Function to prepare GET URL for `exec` Jolokia request\n * @param request Jolokia request object\n * @returns URL configuration object for Jolokia `exec` GET request\n */\n \"exec\": function (request) {\n const ret = [request.mbean, request.operation];\n if (request.arguments && request.arguments.length > 0) {\n request.arguments.forEach(function (value) {\n ret.push(valueToString(value));\n });\n }\n return { parts: ret };\n },\n /**\n * Function to prepare GET URL for `version` Jolokia request\n * @param _request Jolokia request object\n * @returns URL configuration object for Jolokia `version` GET request\n */\n \"version\": function (_request) {\n return {};\n },\n /**\n * Function to prepare GET URL for `search` Jolokia request\n * @param request Jolokia request object\n * @returns URL configuration object for Jolokia `search` GET request\n */\n \"search\": function (request) {\n return { parts: [request.mbean] };\n },\n /**\n * Function to prepare GET URL for `list` Jolokia request\n * @param request Jolokia request object\n * @returns URL configuration object for Jolokia `list` GET request\n */\n \"list\": function (request) {\n return { path: request.path };\n },\n /**\n * Function to prepare GET URL for `notification` Jolokia request\n * @param request Jolokia request object\n * @returns URL configuration object for Jolokia `notification` GET request\n */\n \"notification\": function (request) {\n switch (request.command) {\n case \"register\":\n return { parts: [\"register\"] };\n case \"add\": {\n const ret = [\"add\", valueToString(request.client), valueToString(request.mode), valueToString(request.mbean)];\n const extra = [];\n if (request.handback) {\n extra.push(valueToString(request.handback));\n }\n if (request.config) {\n extra.push(valueToString(request.config));\n }\n else if (extra.length) {\n extra.push(\"{}\");\n }\n if (request.filter) {\n extra.push(valueToString(request.filter));\n }\n else if (extra.length) {\n extra.push(\" \");\n }\n return { parts: ret.concat(extra.reverse()) };\n }\n case \"remove\":\n return { parts: [\"remove\", valueToString(request.client), valueToString(request.handle)] };\n case \"unregister\":\n return { parts: [\"unregister\", valueToString(request.client)] };\n case \"list\":\n return { parts: [\"list\", valueToString(request.client)] };\n case \"ping\":\n return { parts: [\"ping\", valueToString(request.client)] };\n case \"open\":\n return { parts: [\"open\", valueToString(request.client), valueToString(request.mode)] };\n default:\n throw new Error(\"Unknown command '\" + request.command + \"'\");\n }\n }\n};\n/**\n * Get notification mode with a sane default based on which is provided by the backend\n */\nfunction extractNotificationMode(client, opts) {\n const backends = client.backend || {};\n // A mode given takes precedence\n let mode = opts.mode;\n if (!mode) {\n // Try 'sse' first as default then 'pull'.\n mode = backends[\"sse\"] ? \"sse\" : (backends[\"pull\"] ? \"pull\" : undefined);\n // If only one backend is configured, that's the default\n if (!mode && backends.length === 1) {\n return Object.keys(backends)[0];\n }\n }\n if (!mode || !backends[mode]) {\n throw new Error(\"Notification mode must be one of [\" + Object.keys(backends) + \"]\"\n + (mode ? \", and not \\\"\" + mode + \"\\\"\" : \"\"));\n }\n return mode;\n}\n\nexport { Jolokia as default };\n","import { AIMessage } from '@langchain/core/messages'\nimport { aiService } from '../common/ai-service'\n\nconst SYSTEM_MESSAGES = {\n diagnosis: `You are a helpful assistant diagnosing a JMX MBean based on its attribute values.\nGiven the following ObjectName and attribute values, identify any potential issues or anomalies.\nProvide suggestions for further investigation or resolution if applicable.\nRespond in a concise manner.`,\n} as const\n\nexport interface IJmxAiService {\n diagnoseMessage(objectName: string, attributes: string): string\n}\n\nclass JmxAiService implements IJmxAiService {\n systemMessage(): string {\n return SYSTEM_MESSAGES.diagnosis\n }\n\n diagnoseMessage(objectName: string, attributes: string): string {\n return `ObjectName:\n~~~\n${objectName}\n~~~\nAttribute values:\n~~~\n${attributes}\n~~~\nWhat potential issues or anomalies do you see?`\n }\n}\n\nexport const jmxAiService = new JmxAiService()\n","import { AttributeModal, AttributeValues, HawtioEmptyCard, HawtioLoadingCard } from '@hawtio/react'\nimport { MessageProps } from '@patternfly/chatbot/dist/esm/Message'\nimport {\n Button,\n Drawer,\n DrawerContent,\n DrawerContentBody,\n Panel,\n Toolbar,\n ToolbarContent,\n ToolbarItem,\n} from '@patternfly/react-core'\nimport { MonitoringIcon } from '@patternfly/react-icons'\nimport { Table, Tbody, Td, Th, Thead, ThProps, Tr } from '@patternfly/react-table'\nimport Jolokia, { JolokiaErrorResponse, JolokiaFetchErrorResponse, JolokiaSuccessResponse } from 'jolokia.js'\nimport React, { useContext, useEffect, useState } from 'react'\nimport { aiService } from '../../common/ai-service'\nimport { ChatbotContext, MBeanTreeContext } from '../context'\nimport { log } from '../globals'\nimport { jmxAiService } from '../jmx-ai-service'\nimport { isObject, objectSorter } from '../util'\nimport { attributeService } from './attribute-service'\nimport { ThinkInfo, ToolCallsApprove, ToolCallsInfo } from '../DiagnosisChatbot'\n\nexport const Attributes: React.FC = () => {\n const { selectedNode } = useContext(MBeanTreeContext)\n const [attributes, setAttributes] = useState<AttributeValues>({})\n const [isReading, setIsReading] = useState(true)\n const [isModalOpen, setIsModalOpen] = useState(false)\n const [sortDirection, setSortDirection] = useState<'asc' | 'desc'>('asc')\n const [selected, setSelected] = useState({ name: '', value: '' })\n const [reload, setReload] = useState(false)\n\n useEffect(() => {\n if (!selectedNode || !selectedNode.mbean || !selectedNode.objectName) {\n return\n }\n\n setIsReading(true)\n const { objectName } = selectedNode\n attributeService.readWithCallback(objectName, attrs => {\n setAttributes(attrs)\n setIsReading(false)\n })\n\n attributeService.register(\n { type: 'read', mbean: objectName },\n (response: JolokiaSuccessResponse | JolokiaErrorResponse | JolokiaFetchErrorResponse) => {\n if (response && !Jolokia.isError(response as JolokiaSuccessResponse | JolokiaErrorResponse)) {\n setAttributes((response as JolokiaSuccessResponse).value as AttributeValues)\n }\n },\n )\n\n return () => attributeService.unregisterAll()\n }, [selectedNode])\n\n useEffect(() => {\n if (!selectedNode || !selectedNode.mbean || !selectedNode.objectName || !reload) {\n return\n }\n\n setIsReading(true)\n const { objectName } = selectedNode\n attributeService.readWithCallback(objectName, attrs => {\n setAttributes(attrs)\n setIsReading(false)\n })\n\n setReload(false)\n }, [selectedNode, reload])\n\n if (!selectedNode || !selectedNode.mbean || !selectedNode.objectName) {\n return null\n }\n\n if (isReading) {\n return <HawtioLoadingCard />\n }\n\n const rows: { name: string; value: string }[] = Object.entries(attributes).map(([name, value]) => ({\n name: name,\n value: isObject(value) ? JSON.stringify(value) : String(value),\n }))\n\n if (rows.length === 0) {\n return <HawtioEmptyCard message='This MBean has no attributes.' />\n }\n\n const selectAttribute = (attribute: { name: string; value: string }) => {\n setSelected(attribute)\n if (!isModalOpen) {\n setIsModalOpen(true)\n }\n }\n\n const getSortParams = (): ThProps['sort'] => ({\n sortBy: {\n index: 0,\n direction: sortDirection,\n defaultDirection: 'asc', // starting sort direction when first sorting a column. Defaults to 'asc'\n },\n onSort: (_event, _index, direction) => {\n setSortDirection(direction)\n },\n columnIndex: 0,\n })\n\n const panelContent = (\n <AttributeModal\n isOpen={isModalOpen}\n onClose={() => setIsModalOpen(false)}\n onUpdate={() => setReload(true)}\n input={selected}\n />\n )\n\n const attributesTable = (\n <div id='attribute-table-with-panel'>\n <AiJmxToolbar attributes={attributes} />\n <Table aria-label='Attributes' variant='compact'>\n <Thead>\n <Tr>\n <Th sort={getSortParams()}>Attribute</Th>\n <Th>Value</Th>\n </Tr>\n </Thead>\n <Tbody>\n {rows\n .sort((a, b) => objectSorter(a.name, b.name, sortDirection === 'desc'))\n .map((att, index) => (\n <Tr\n key={att.name + '-' + index}\n isClickable\n isRowSelected={selected.name === att.name}\n onRowClick={() => selectAttribute(att)}\n >\n <Td>{att.name}</Td>\n <Td>{att.value}</Td>\n </Tr>\n ))}\n </Tbody>\n </Table>\n </div>\n )\n\n return (\n <Panel>\n <Drawer isExpanded={isModalOpen} className='pf-m-inline-on-2xl'>\n <DrawerContent panelContent={panelContent}>\n <DrawerContentBody hasPadding>{attributesTable}</DrawerContentBody>\n </DrawerContent>\n </Drawer>\n </Panel>\n )\n}\n\nconst AiJmxToolbar: React.FC<{\n attributes: AttributeValues\n}> = ({ attributes }) => {\n const { selectedNode } = useContext(MBeanTreeContext)\n //const { username } = useContext(PageContext) // TODO: Unavailable until @hawtio/react 2.3.0\n const username = 'user'\n const { setMessages, setAnnouncement, setIsChatbotOpen } = useContext(ChatbotContext)\n\n if (!selectedNode || !selectedNode.mbean || !selectedNode.objectName) {\n return null\n }\n const { objectName } = selectedNode\n\n const diagnose = async () => {\n setIsChatbotOpen(true)\n const attrsValue = JSON.stringify(attributes)\n log.debug('Attributes:', attrsValue)\n\n const systemMessage = jmxAiService.systemMessage()\n const diagnoseMessage = jmxAiService.diagnoseMessage(objectName, attrsValue)\n const newMessages: MessageProps[] = []\n newMessages.push(aiService.createUserMessage(username, diagnoseMessage))\n newMessages.push(aiService.createLoadingBotMessage())\n setMessages(newMessages)\n setAnnouncement('Diagnosis in progress...')\n log.debug('diagnose - new messages:', newMessages)\n\n const answer = await aiService.newChat(diagnoseMessage, systemMessage)\n const loadedMessages: MessageProps[] = []\n loadedMessages.push(...newMessages)\n log.debug('diagnose - loaded messages:', loadedMessages)\n // Remove the loading message\n loadedMessages.pop()\n const botMessage = aiService.toBotMessage(answer, ThinkInfo, ToolCallsInfo, ToolCallsApprove)\n loadedMessages.push(botMessage)\n setMessages(loadedMessages)\n setAnnouncement('Diagnosis complete.')\n }\n\n return (\n <Toolbar id='ai-jmx-toolbar'>\n <ToolbarContent>\n <ToolbarItem>\n <Button variant='primary' size='sm' icon={<MonitoringIcon />} onClick={diagnose}>\n Diagnose\n </Button>\n </ToolbarItem>\n </ToolbarContent>\n </Toolbar>\n )\n}\n","export { AttributeModal } from './AttributeModal'\nexport { Attributes } from './Attributes'\n","import { AttributeTable, Chart, JmxContentMBeans, MBeanNode, Operations } from '@hawtio/react'\nimport {\n Button,\n Content,\n Drawer,\n DrawerContent,\n DrawerContentBody,\n DrawerPanelBody,\n DrawerPanelContent,\n EmptyState,\n Nav,\n NavItem,\n NavList,\n PageGroup,\n PageSection,\n Title,\n Toolbar,\n ToolbarItem,\n} from '@patternfly/react-core'\nimport { right } from '@patternfly/react-core/dist/esm/helpers/Popper/thirdparty/popper-core'\nimport { CubesIcon } from '@patternfly/react-icons/dist/esm/icons/cubes-icon'\nimport React, { useContext, useRef } from 'react'\nimport { Navigate, NavLink, Route, Routes, useLocation } from 'react-router-dom'\nimport { DiagnosisChatbot } from './DiagnosisChatbot'\nimport './JmxContent.css'\nimport { Attributes } from './attributes'\nimport { ChatbotContext, MBeanTreeContext, pluginPathWithNodeId, useChatbot } from './context'\nimport { pluginPath } from './globals'\n\nexport const JmxContent: React.FunctionComponent = () => {\n const { selectedNode } = useContext(MBeanTreeContext)\n const { pathname, search } = useLocation()\n const chatbotContext = useChatbot()\n const { isChatbotOpen, setIsChatbotOpen } = chatbotContext\n const drawerRef = useRef<HTMLDivElement>(undefined)\n\n if (!selectedNode) {\n return (\n <PageSection hasBodyWrapper={false} isFilled>\n <EmptyState headingLevel='h1' icon={CubesIcon} titleText='Select MBean' variant='full' />\n </PageSection>\n )\n }\n\n const mBeanApplicable = (node: MBeanNode) => Boolean(node.objectName)\n const mBeanCollectionApplicable = (node: MBeanNode) => Boolean(node.children?.every(child => child.objectName))\n const hasAnyApplicableMBean = (node: MBeanNode) =>\n Boolean(node.objectName) || Boolean(node.children?.some(child => child.objectName))\n\n const tableSelector = (node: MBeanNode) => {\n const tablePriorityList = [\n { condition: mBeanApplicable, element: Attributes },\n { condition: mBeanCollectionApplicable, element: AttributeTable },\n ]\n\n return tablePriorityList.find(entry => entry.condition(node))?.element ?? JmxContentMBeans\n }\n\n const allNavItems = [\n { id: 'attributes', title: 'Attributes', component: tableSelector(selectedNode), isApplicable: () => true },\n { id: 'operations', title: 'Operations', component: Operations, isApplicable: mBeanApplicable },\n { id: 'chart', title: 'Chart', component: Chart, isApplicable: hasAnyApplicableMBean },\n ]\n\n /* Filter the nav items to those applicable to the selected node */\n const navItems = allNavItems.filter(nav => nav.isApplicable(selectedNode))\n\n const searchWithNid = (pluginPathWithNodeId(selectedNode, new URLSearchParams(search)) as { search: string }).search\n\n const mbeanNav = (\n <Nav aria-label='MBean Nav' variant='horizontal-subnav'>\n <NavList>\n {navItems.map(nav => (\n <NavItem key={nav.id} isActive={pathname === `${pluginPath}/${nav.id}`}>\n <NavLink to={{ pathname: nav.id, search }}>{nav.title}</NavLink>\n </NavItem>\n ))}\n </NavList>\n </Nav>\n )\n\n const mbeanRoutes = navItems.map(nav => (\n <Route key={nav.id} path={nav.id} element={React.createElement(nav.component)} />\n ))\n\n const jmxAiToolbar = (\n <Toolbar id='jmx-ai-toolbar' style={{ float: right }}>\n <ToolbarItem>\n <Button variant='secondary' size='sm' onClick={() => setIsChatbotOpen(!isChatbotOpen)}>\n Chat\n </Button>\n </ToolbarItem>\n </Toolbar>\n )\n\n const jmxContent = (\n <PageGroup id='jmx-content'>\n <PageSection id='jmx-content-header' hasBodyWrapper={false}>\n {jmxAiToolbar}\n <Title headingLevel='h1'>{selectedNode.name}</Title>\n <Content component='small'>{selectedNode.objectName}</Content>\n </PageSection>\n <PageSection type='tabs' hasBodyWrapper={false}>\n {mbeanNav}\n </PageSection>\n <PageSection\n id='jmx-content-main'\n padding={{ default: 'noPadding' }}\n hasOverflowScroll\n aria-label='jmx-content-main'\n hasBodyWrapper={false}\n >\n <Routes>\n {mbeanRoutes}\n <Route\n key='root'\n path='/'\n element={<Navigate to={{ pathname: navItems[0]?.id ?? '', search: searchWithNid }} />}\n />\n </Routes>\n </PageSection>\n </PageGroup>\n )\n\n const onDrawerExpand = () => {\n drawerRef.current && drawerRef.current.focus()\n }\n\n const panelContent = (\n <DrawerPanelContent isResizable defaultSize='500px' minSize='200px'>\n <DrawerPanelBody>\n <DiagnosisChatbot />\n </DrawerPanelBody>\n </DrawerPanelContent>\n )\n\n return (\n <ChatbotContext.Provider value={chatbotContext}>\n <Drawer isExpanded={isChatbotOpen} isInline onExpand={onDrawerExpand}>\n <DrawerContent panelContent={panelContent}>\n <DrawerContentBody>{jmxContent}</DrawerContentBody>\n </DrawerContent>\n </Drawer>\n </ChatbotContext.Provider>\n )\n}\n","#jmx-tree-view.pf-v6-c-tree-view {\n --pf-v6-c-tree-view__node--indent--base: 1rem;\n --pf-v6-c-tree-view__node--nested-indent--base: 1rem;\n --pf-v6-c-tree-view--m-guides__node--before--Width: 1.25rem;\n --pf-v6-c-tree-view--m-guides__node--before--Height: 1px;\n --pf-v6-c-tree-view--m-guides__node--before--InsetBlockStart: 0.625rem;\n --pf-v6-c-tree-view--m-guides__node--before--BackgroundColor: var(--pf-t--global--border--color--default);\n --pf-v6-c-tree-view--m-guides__list-item--before--Width: 1px;\n --pf-v6-c-tree-view--m-guides__list-item--before--Height: 100%;\n --pf-v6-c-tree-view--m-guides__list-item--before--BackgroundColor: var(--pf-t--global--border--color--default);\n --pf-v6-c-tree-view--m-guides__list-item--last-child--before--Height: 0.68rem;\n --pf-v6-c-tree-view--m-guides__list-node--guide-width--base: 0.5rem;\n --pf-v6-c-tree-view--m-guides--guide-left--base--offset: 1.4rem;\n}\n#jmx-tree-view.pf-v6-c-tree-view .pf-m-selectable {\n --pf-v6-c-tree-view--m-guides__node--before--Width: 0.5rem;\n}\n#jmx-tree-view .pf-v6-c-tree-view__list {\n height: 100%;\n}\n\n#jmx-tree-view > .pf-v6-c-tree-view__list {\n max-height: 83vh;\n overflow: auto;\n}\n\n#jmx-tree-view .pf-v6-c-tree-view__node {\n padding-top: 0;\n padding-bottom: 0;\n align-items: center;\n}\n\n#jmx-tree-view .pf-v6-c-tree-view__node:has(button.pf-v6-c-tree-view__node-toggle) {\n --pf-v6-c-tree-view--m-guides__node--before--Width: 0.5rem;\n}\n\n#jmx-tree-view .pf-v6-c-tree-view__node-toggle {\n padding: 0;\n}\n\n#jmx-tree-view .pf-v6-c-tree-view__node-text {\n padding: 0 4px;\n font-size: small;\n}\n\n#jmx-tree-view .pf-v6-c-tree-view__node-icon {\n padding: 0 4px;\n flex-shrink: 0;\n}\n\n#jmx-tree-view .pf-v6-c-tree-view__node-text {\n overflow-x: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n","import { MBeanNode, MBeanTree, PluginTreeViewToolbar } from '@hawtio/react'\nimport { TreeView, TreeViewDataItem } from '@patternfly/react-core'\nimport React, { ChangeEvent, useContext, useEffect, useState } from 'react'\nimport { useNavigate } from 'react-router-dom'\nimport './JmxTreeView.css'\nimport { MBeanTreeContext, pluginPathWithNodeId } from './context'\n\n/**\n * Expansion requires more than 2 states since the expandAll\n * must be removed completely to defer to the expanded state\n * of each data node\n */\nenum ExpansionValue {\n /**\n * should revert to the expanded state of the data\n */\n Default,\n /**\n * all data should be expanded\n */\n ExpandAll,\n /**\n * all data should be collapsed\n */\n CollapseAll,\n}\n\nexport const JmxTreeView: React.FunctionComponent = () => {\n const { tree, selectedNode, setSelectedNode } = useContext(MBeanTreeContext)\n const [expanded, setExpanded] = useState(ExpansionValue.Default)\n const [filteredTree, setFilteredTree] = useState(tree.getTree())\n const navigate = useNavigate()\n\n /**\n * Listen for changes to the tree that may occur as a result\n * of events being monitored by the Tree:Watcher in workspace\n * eg. new endpoint being created\n */\n useEffect(() => {\n setFilteredTree(tree.getTree())\n }, [tree])\n\n const onSearch = (event: ChangeEvent<HTMLInputElement>) => {\n // Ensure no node from the 'old' filtered is lingering\n setSelectedNode(null)\n setExpanded(ExpansionValue.Default)\n const input = event.target.value\n\n if (!input) setFilteredTree(tree.getTree())\n\n const treeElements = MBeanTree.filter(tree.getTree(), node => node.name.toLowerCase().includes(input.toLowerCase()))\n\n if (treeElements.length === 0) setFilteredTree(tree.getTree())\n else {\n setFilteredTree(treeElements)\n setExpanded(ExpansionValue.ExpandAll)\n }\n }\n\n const onSelect = (event: React.MouseEvent<Element, MouseEvent>, item: TreeViewDataItem) => {\n const node = item as MBeanNode\n setSelectedNode(node)\n navigate(pluginPathWithNodeId(node))\n }\n\n const setAllExpanded = (value: boolean) => {\n setExpanded(value ? ExpansionValue.ExpandAll : ExpansionValue.CollapseAll)\n }\n\n const expandedProp = (): object => {\n switch (expanded) {\n case ExpansionValue.ExpandAll:\n return { allExpanded: true }\n case ExpansionValue.CollapseAll:\n return { allExpanded: false }\n default:\n return {}\n }\n }\n\n return (\n <TreeView\n id='jmx-tree-view'\n data={filteredTree}\n hasGuides={true}\n hasSelectableNodes={true}\n activeItems={selectedNode ? [selectedNode] : []}\n {...expandedProp()}\n onSelect={onSelect}\n toolbar={<PluginTreeViewToolbar onSearch={onSearch} onSetExpanded={setAllExpanded} />}\n />\n )\n}\n","import { EmptyState, PageSection, Spinner } from '@patternfly/react-core'\nimport { CubesIcon } from '@patternfly/react-icons/dist/esm/icons/cubes-icon'\nimport React from 'react'\nimport Split from 'react-split'\nimport { MBeanTreeContext, useMBeanTree } from './context'\nimport './Jmx.css'\nimport { JmxContent } from './JmxContent'\nimport { JmxTreeView } from './JmxTreeView'\n\nexport const Jmx: React.FunctionComponent = () => {\n const { tree, loaded, selectedNode, setSelectedNode } = useMBeanTree()\n\n if (!loaded) {\n return (\n <PageSection hasBodyWrapper={false}>\n <Spinner aria-label='Loading MBean tree' />\n </PageSection>\n )\n }\n\n if (tree.isEmpty()) {\n return (\n <PageSection hasBodyWrapper={false}>\n <EmptyState headingLevel='h1' icon={CubesIcon} titleText='No MBeans found' variant='full' />\n </PageSection>\n )\n }\n\n return (\n <MBeanTreeContext.Provider value={{ tree, selectedNode, setSelectedNode }}>\n <Split className='jmx-split' sizes={[30, 70]} minSize={200} gutterSize={5}>\n <div>\n <JmxTreeView />\n </div>\n <div>\n <JmxContent />\n </div>\n </Split>\n </MBeanTreeContext.Provider>\n )\n}\n","export * from './Jmx'\nexport * from './JmxContent'\nexport * from './JmxTreeView'\n","import { HawtioPlugin, configManager } from '@hawtio/react'\nimport '@patternfly/chatbot/dist/css/main.css'\nimport { aiCommon } from './common'\nimport { jmxAi } from './jmx-ai'\n\n/**\n * The entry function for the plugin exposed to Hawtio.\n *\n * The default name for the function is \"plugin\". If you want to use the name other\n * than the default one, you need to specify the name using {HawtioPlugin#setPluginEntry()}\n * method when registering the plugin to JMX MBean server.\n *\n * <code>\n * HawtioPlugin plugin = new HawtioPlugin();\n * plugin.setPluginEntry(\"registerMyPlugin\");\n * </code>\n *\n * @see src/main/java/io/hawt/example/spring/boot/SampleSpringBootService.java\n */\nexport const plugin: HawtioPlugin = () => {\n aiCommon()\n jmxAi()\n}\n\n// Register the custom plugin version to Hawtio\n// See package.json \"replace-version\" script for how to replace the version placeholder with a real version\nconfigManager.addProductInfo('Hawtio AI Plugin', '__PACKAGE_VERSION_PLACEHOLDER__')\n","import { HawtioPlugin, preferencesRegistry } from '@hawtio/react'\nimport { AiPreferences } from '../common/AiPreferences'\nimport { pluginName, pluginTitle } from './globals'\n\nconst order = 40\n\nexport const aiCommon: HawtioPlugin = () => {\n preferencesRegistry.add(pluginName, pluginTitle, AiPreferences, order)\n}\n","import {\n Button,\n CardBody,\n Form,\n FormGroup,\n FormSection,\n FormSelect,\n FormSelectOption,\n InputGroup,\n InputGroupItem,\n TextInput,\n} from '@patternfly/react-core'\nimport EyeIcon from '@patternfly/react-icons/dist/esm/icons/eye-icon'\nimport EyeSlashIcon from '@patternfly/react-icons/dist/esm/icons/eye-slash-icon'\nimport React, { useState } from 'react'\nimport { MODELS, PROVIDERS } from './ai-model'\nimport { aiPreferencesService } from './ai-preferences-service'\n\nexport const AiPreferences: React.FunctionComponent = () => {\n const [options, setOptions] = useState(aiPreferencesService.loadOptions())\n const [provider, setProvider] = useState<string>(options.model.provider)\n const [models, setModels] = useState(MODELS.filter(m => m.provider === provider))\n const [passwordHidden, setPasswordHidden] = useState(true)\n\n const updateProvider = (provider: string) => {\n setProvider(provider)\n setModels(MODELS.filter(m => m.provider === provider))\n }\n\n const updateModel = (updated: string) => {\n const model = MODELS.find(m => m.id === updated)\n if (model) {\n aiPreferencesService.saveOptions({ model })\n setOptions({ ...options, model })\n }\n }\n\n const updateToken = (updated?: string) => {\n aiPreferencesService.saveOptions({ token: updated })\n setOptions({ ...options, token: updated })\n }\n\n return (\n <CardBody>\n <Form isHorizontal>\n <FormSection title='AI' titleElement='h2'>\n <FormGroup fieldId='ai-prefs-form-provider' label='Provider'>\n <FormSelect\n id='ai-prefs-form-provider-input'\n aria-label='Form Select Provider'\n value={provider}\n onChange={(_, provider) => updateProvider(provider)}\n >\n {PROVIDERS.map((p, i) => (\n <FormSelectOption key={i} value={p} label={p} />\n ))}\n </FormSelect>\n </FormGroup>\n <FormGroup fieldId='ai-prefs-form-model' label='Model'>\n <FormSelect\n id='ai-prefs-form-model-input'\n aria-label='Form Select Model'\n value={options.model.id}\n onChange={(_, id) => updateModel(id)}\n >\n {models.map(m => (\n <FormSelectOption key={m.id} value={m.id} label={m.name} />\n ))}\n </FormSelect>\n </FormGroup>\n <FormGroup fieldId='ai-prefs-form-token' label='API Key / Token (optional)'>\n <InputGroup>\n <InputGroupItem isFill>\n <TextInput\n id='ai-prefs-form-token-input'\n aria-label='Form Select Token'\n type={passwordHidden ? 'password' : 'text'}\n value={options.token}\n onChange={(_, token) => updateToken(token)}\n />\n </InputGroupItem>\n <InputGroupItem>\n <Button\n variant='control'\n onClick={() => setPasswordHidden(!passwordHidden)}\n aria-label={passwordHidden ? 'Show password' : 'Hide password'}\n >\n {passwordHidden ? <EyeIcon /> : <EyeSlashIcon />}\n </Button>\n </InputGroupItem>\n </InputGroup>\n </FormGroup>\n </FormSection>\n </Form>\n </CardBody>\n )\n}\n","import { Logger } from '@hawtio/react'\n\nexport const pluginName = 'hawtio-ai'\nexport const pluginTitle = 'AI'\n\nexport const log = Logger.get(pluginName)\n","import { hawtio, helpRegistry, workspace, type HawtioPlugin } from '@hawtio/react'\nimport { log, pluginName, pluginPath, pluginTitle } from './globals'\nimport help from './help.md'\n\nconst order = 41\n\nexport const jmxAi: HawtioPlugin = () => {\n log.info('Loading', pluginName)\n\n hawtio.addDeferredPlugin(pluginName, async () => {\n return import('./ui').then(({ Jmx }) => {\n return {\n id: pluginName,\n title: pluginTitle,\n path: pluginPath,\n component: Jmx,\n knownQueryParams: ['nid'],\n isActive: async () => workspace.hasMBeans(),\n }\n })\n })\n helpRegistry.add(pluginName, pluginTitle, help, order)\n}\n","# JMX AI - Hawtio AI Plugin\n\nThis view is provided by the Hawtio AI plugin.\n\nIt extends the standard [JMX](./jmx) and adds AI features such as MBean diagnostics to it.\n"],"mappings":"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","names":["userAvatar","patternflyAvatar","content","extraContent","exports","exports","Fragment","exports","module","exports","module","order2","exports","module","exports","module","exports","module","exports","module","i","checker","exports","module","exports","module","document","import_react","SplitWrapper","React","PropTypes","import_react","import_react_core","import_react","import_jsx_runtime","Chatbot","ChatbotConversationHistoryNav","ChatbotHeader","ChatbotContent","MessageBox","React","Message","ChatbotFooter","MessageBar","WrenchIcon","toolCalls","import_react","import_react","import_react_core","import_jsx_runtime","import_react","import_react_core","import_react_icons","import_jsx_runtime","import_react","import_react_core","import_react_router_dom","import_jsx_runtime","init_JmxContent","React","import_react","import_react_core","import_react_router_dom","import_jsx_runtime","init_JmxTreeView","import_react_core","import_cubes_icon","import_jsx_runtime","init_Jmx","init_JmxContent","init_JmxTreeView","init_Jmx","init_JmxContent","init_JmxTreeView","import_react","import_react","import_react","provider","EyeIcon","EyeSlashIcon","import_react","pluginName","pluginTitle","log","pluginName","pluginTitle","import_react","order","Jmx"]}
1
+ {"version":3,"sources":["../src/ai-plugin/common/ai-model.ts","../src/ai-plugin/jmx-ai/globals.ts","../src/ai-plugin/common/ai-service.ts","../src/ai-plugin/common/ai-preferences-service.ts","../node_modules/react-is/cjs/react-is.production.min.js","../node_modules/react-is/cjs/react-is.development.js","../node_modules/react-is/index.js","../node_modules/object-assign/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/prop-types/lib/has.js","../node_modules/prop-types/checkPropTypes.js","../node_modules/prop-types/factoryWithTypeCheckers.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/split.js/dist/split.es.js","../node_modules/react-split/dist/react-split.es.js","../src/ai-plugin/jmx-ai/model.ts","../src/ai-plugin/jmx-ai/context.ts","../src/ai-plugin/jmx-ai/Jmx.css","../src/ai-plugin/jmx-ai/DiagnosisChatbot.tsx","../src/ai-plugin/jmx-ai/JmxContent.css","../src/ai-plugin/jmx-ai/util.ts","../src/ai-plugin/jmx-ai/attributes/attribute-service.ts","../src/ai-plugin/jmx-ai/attributes/AttributeModal.tsx","../node_modules/jolokia.js/dist/jolokia.mjs","../src/ai-plugin/jmx-ai/jmx-ai-service.ts","../src/ai-plugin/jmx-ai/attributes/Attributes.tsx","../src/ai-plugin/jmx-ai/attributes/index.ts","../src/ai-plugin/jmx-ai/JmxContent.tsx","../src/ai-plugin/jmx-ai/JmxTreeView.css","../src/ai-plugin/jmx-ai/JmxTreeView.tsx","../src/ai-plugin/jmx-ai/Jmx.tsx","../src/ai-plugin/jmx-ai/ui.ts","../src/ai-plugin/index.ts","../src/ai-plugin/common/index.ts","../src/ai-plugin/common/AiPreferences.tsx","../src/ai-plugin/common/globals.ts","../src/ai-plugin/jmx-ai/index.ts","../src/ai-plugin/jmx-ai/help.md"],"sourcesContent":["export const PROVIDERS = ['openai', 'anthropic', 'google-genai', 'ollama'] as const\nexport type AiProvider = (typeof PROVIDERS)[number]\n\nexport type AiModel = {\n id: string\n name: string\n tool: boolean\n provider: AiProvider\n}\n\nexport const MODELS: AiModel[] = [\n // OpenAI models\n { id: 'gpt-5.5', name: 'GPT-5.5', tool: true, provider: 'openai' },\n { id: 'gpt-5.4', name: 'GPT-5.4', tool: true, provider: 'openai' },\n { id: 'gpt-5.4-mini', name: 'GPT-5.4 mini', tool: true, provider: 'openai' },\n\n // Anthropic Claude models\n { id: 'claude-opus-4-7', name: 'Claude Opus 4.7', tool: true, provider: 'anthropic' },\n { id: 'claude-sonnet-4-6', name: 'Claude Sonnet 4.6', tool: true, provider: 'anthropic' },\n { id: 'claude-haiku-4-5', name: 'Claude Haiku 4.5', tool: true, provider: 'anthropic' },\n\n // Google Gemini models\n { id: 'gemini-3.5-flash', name: 'Gemini 3.5 Flash', tool: true, provider: 'google-genai' },\n { id: 'gemini-3.1-flash-lite', name: 'Gemini 3.1 Flash-Lite', tool: true, provider: 'google-genai' },\n { id: 'gemini-3.1-pro', name: 'Gemini 3.1 Pro', tool: true, provider: 'google-genai' },\n\n // Ollama models\n { id: 'granite4.1:3b', name: 'Granite 4.1 3B', tool: true, provider: 'ollama' },\n { id: 'llama3:latest', name: 'Llama 3', tool: false, provider: 'ollama' },\n { id: 'llama3.2:latest', name: 'Llama 3.2', tool: true, provider: 'ollama' },\n { id: 'gemma4:e4b', name: 'Gemma 4 4B', tool: true, provider: 'ollama' },\n { id: 'gemma4:e4b-mlx', name: 'Gemma 4 4B MLX', tool: true, provider: 'ollama' },\n { id: 'phi4:latest', name: 'Phi 4', tool: false, provider: 'ollama' },\n { id: 'phi3.5:latest', name: 'Phi 3.5', tool: false, provider: 'ollama' },\n { id: 'qwen3.5:4b', name: 'Qwen 3.5 4B', tool: true, provider: 'ollama' },\n { id: 'qwen3.5:4b-mlx', name: 'Qwen 3.5 4B MLX', tool: true, provider: 'ollama' },\n { id: 'qwen3.5:latest', name: 'Qwen 3.5', tool: true, provider: 'ollama' },\n] as const\n","import { Logger } from '@hawtio/react'\n\nexport const pluginName = 'hawtio-ai-jmx-ai'\nexport const pluginTitle = 'JMX AI'\nexport const pluginPath = '/jmx-ai'\n\nexport const log = Logger.get(pluginName)\n\nexport const PARAM_KEY_NODE_ID = 'nid'\n","import { ChatAnthropic } from '@langchain/anthropic'\nimport { BaseLanguageModelInput } from '@langchain/core/language_models/base'\nimport { AIMessage, AIMessageChunk, BaseMessage, HumanMessage, SystemMessage } from '@langchain/core/messages'\nimport { ToolCall } from '@langchain/core/messages/tool'\nimport { Runnable } from '@langchain/core/runnables'\nimport { DynamicStructuredTool } from '@langchain/core/tools'\nimport { ChatGoogleGenerativeAI } from '@langchain/google-genai'\nimport { ChatOllama } from '@langchain/ollama'\nimport { ChatOpenAI } from '@langchain/openai'\nimport { MessageExtraContent, MessageProps } from '@patternfly/chatbot/dist/esm/Message'\nimport patternflyAvatar from '@patternfly/chatbot/patternfly-docs/content/extensions/chatbot/examples/Messages/patternfly_avatar.jpg'\nimport userAvatar from '@patternfly/react-core/dist/styles/assets/images/img_avatar-light.svg'\nimport { ReactNode } from 'react'\nimport { log } from '../jmx-ai/globals'\nimport { AiModel } from './ai-model'\nimport { aiPreferencesService } from './ai-preferences-service'\n\nconst BOT_NAME = 'Hawtio AI'\n\nconst TOOLS: DynamicStructuredTool[] = [] as const\nconst TOOLS_BY_NAME: Record<string, DynamicStructuredTool> = TOOLS.reduce(\n (acc, tool) => {\n acc[tool.name] = tool\n return acc\n },\n {} as Record<string, DynamicStructuredTool>,\n)\n\nexport type MessageWithThink = {\n content: string\n think?: string\n}\n\nexport type LLM = ChatOpenAI | ChatAnthropic | ChatGoogleGenerativeAI | ChatOllama\n\nexport interface IAiService {\n reset(model: AiModel): void\n getModel(): AiModel | undefined\n newChat(dialogId: string, message: string, system?: string): Promise<AIMessage | string>\n chat(dialogId: string, message: string): Promise<AIMessage | string>\n invokeTools(dialogId: string, toolCalls: ToolCall[]): Promise<AIMessage | string>\n createUserMessage(name: string, content: string): MessageProps\n createLoadingBotMessage(): MessageProps\n createBotMessage(content: string, extraContent?: MessageExtraContent): MessageProps\n extractThink(message: string): MessageWithThink\n toBotMessage(\n answer: AIMessage | string,\n thinkInfo: (think: string) => ReactNode,\n toolCallsInfo: (call: ToolCall, index: number) => ReactNode,\n toolCallsApprove: (toolCalls: ToolCall[]) => ReactNode,\n ): MessageProps\n}\n\nclass AiService implements IAiService {\n private model?: AiModel\n private llm?: LLM\n private llmWithTools?: Runnable<BaseLanguageModelInput, AIMessageChunk>\n private memory: Record<string, BaseMessage[]> = {}\n\n reset(model: AiModel): void {\n if (this.model && this.model.id === model.id && this.llm && (!model.tool || this.llmWithTools)) {\n return\n }\n log.info('AI model to use:', model.id)\n // Reset the current memory\n this.memory = {}\n const { token } = aiPreferencesService.loadOptions()\n this.model = model\n try {\n switch (this.model.provider) {\n case 'openai':\n this.llm = new ChatOpenAI({\n model: this.model.id,\n apiKey: token,\n temperature: 0,\n streaming: false,\n })\n break\n case 'anthropic':\n this.llm = new ChatAnthropic({\n model: this.model.id,\n apiKey: token,\n temperature: 0,\n streaming: false,\n })\n break\n case 'google-genai':\n this.llm = new ChatGoogleGenerativeAI({\n model: this.model.id,\n apiKey: token,\n temperature: 0,\n disableStreaming: true,\n })\n break\n case 'ollama':\n default:\n this.llm = new ChatOllama({\n model: this.model.id,\n streaming: false,\n })\n }\n } catch (error) {\n // Mostly token is missing/invalid\n log.warn('Error initialising AI model:', error)\n this.llm = undefined\n }\n this.llmWithTools = undefined\n if (TOOLS.length !== 0 && this.model.tool) {\n this.llmWithTools = this.llm?.bindTools(TOOLS)\n }\n }\n\n private getLlm(): LLM | Runnable<BaseLanguageModelInput, AIMessageChunk> | undefined {\n if (!this.model || !this.llm) {\n const { model } = aiPreferencesService.loadOptions()\n this.reset(model)\n }\n return this.llmWithTools ?? this.llm\n }\n\n getModel(): AiModel | undefined {\n this.getLlm()\n return this.model\n }\n\n private async invoke(messages: BaseMessage[]): Promise<AIMessage | string> {\n // Lazy init model and llm\n const llm = this.getLlm()\n log.debug('Chatting with', this.model?.id, ':', messages)\n try {\n let answer: AIMessageChunk\n if (!llm) {\n throw new Error('AI model not configured')\n }\n answer = await llm.invoke(messages)\n\n if (answer.tool_calls && answer.tool_calls.length > 0) {\n log.debug('🛠️ calls:', answer.tool_calls)\n }\n log.debug('Answer:', answer)\n return answer\n } catch (error) {\n log.error('Error while chatting:', error)\n return String(error)\n }\n }\n\n newChat(dialogId: string, message: string, system?: string): Promise<AIMessage | string> {\n if (system) {\n this.memory[dialogId] = [new SystemMessage(system)]\n } else {\n this.memory[dialogId] = []\n }\n return this.chat(dialogId, message)\n }\n\n async chat(dialogId: string, message: string): Promise<AIMessage | string> {\n let messages = this.memory[dialogId]\n if (!messages) {\n messages = []\n this.memory[dialogId] = messages\n }\n messages.push(new HumanMessage(message))\n const answer = await this.invoke(messages)\n if (typeof answer !== 'string') {\n // Non-error answer\n messages.push(answer)\n }\n return answer\n }\n\n async invokeTools(dialogId: string, toolCalls: ToolCall[]): Promise<AIMessage | string> {\n if (!this.llmWithTools) {\n return 'Tool invocation not supported'\n }\n\n let messages = this.memory[dialogId]\n if (!messages) {\n messages = []\n this.memory[dialogId] = messages\n }\n\n for (const call of toolCalls) {\n log.debug('🛠️ Call:', call.name, JSON.stringify(call.args))\n const selectedTool = TOOLS_BY_NAME[call.name]\n const toolAnswer = await selectedTool?.invoke(call)\n if (toolAnswer) {\n log.debug('🛠️ ' + call.name + ':', toolAnswer)\n messages.push(toolAnswer)\n }\n }\n const finalAnswer = await this.llmWithTools.invoke(messages)\n if (finalAnswer) {\n messages.push(finalAnswer)\n }\n console.debug('Messages>>', messages)\n return finalAnswer\n }\n\n private generateId(): string {\n return crypto.randomUUID()\n }\n\n createUserMessage(name: string, content: string): MessageProps {\n const id = this.generateId()\n return { id, role: 'user', content, name, avatar: userAvatar }\n }\n\n createLoadingBotMessage(): MessageProps {\n const id = this.generateId()\n return {\n id,\n role: 'bot',\n name: BOT_NAME,\n avatar: patternflyAvatar,\n content: 'API response goes here',\n isLoading: true,\n }\n }\n\n createBotMessage(content: string, extraContent?: MessageExtraContent): MessageProps {\n const id = this.generateId()\n return {\n id,\n role: 'bot',\n name: BOT_NAME,\n avatar: patternflyAvatar,\n content,\n extraContent,\n isLoading: false,\n }\n }\n\n extractThink(message: string): MessageWithThink {\n // extract inside <think>...</think> from message\n const think = message.match(/<think>(.*?)<\\/think>/s)?.[1]?.trim()\n // remove <think>...</think> from message\n const content = message.replace(/<think>.*?<\\/think>/s, '')\n log.debug('extractThink - content:', content, 'think:', think)\n return { content, think }\n }\n\n toBotMessage(\n answer: AIMessage | string,\n thinkInfo: (think: string) => ReactNode,\n toolCallsInfo: (call: ToolCall, index: number) => ReactNode,\n toolCallsApprove: (toolCalls: ToolCall[]) => ReactNode,\n ): MessageProps {\n if (typeof answer === 'string') {\n // Error\n return aiService.createBotMessage(`Error: ${answer}`)\n }\n\n if (!answer.tool_calls || answer.tool_calls.length === 0) {\n // No tool calls\n const { content, think } = aiService.extractThink(answer.content as string)\n const extraContent = think ? { beforeMainContent: thinkInfo(think) } : undefined\n return aiService.createBotMessage(content, extraContent)\n }\n\n // Tool calls\n const toolCalls = answer.tool_calls\n const content = `${BOT_NAME} wants to use ` + (toolCalls.length > 1 ? 'tools' : 'a tool')\n const extraContent = {\n beforeMainContent: toolCalls.map(toolCallsInfo),\n afterMainContent: toolCallsApprove(toolCalls),\n }\n return aiService.createBotMessage(content, extraContent)\n }\n}\n\nexport const aiService = new AiService()\n","import { AiModel, MODELS } from './ai-model'\nimport { aiService } from './ai-service'\n\nexport const STORAGE_KEY_PREFERENCES = 'ai.preferences'\n\nexport type AiOptions = {\n model: AiModel\n token?: string\n}\n\nexport const DEFAULT_OPTIONS: AiOptions = {\n model: MODELS[0]!,\n} as const\n\nexport interface IAiPreferencesService {\n loadOptions(): AiOptions\n saveOptions(options: Partial<AiOptions>): void\n}\n\nclass AiPreferencesService implements IAiPreferencesService {\n loadOptions(): AiOptions {\n const item = localStorage.getItem(STORAGE_KEY_PREFERENCES)\n const savedOptions = item ? JSON.parse(item) : {}\n return { ...DEFAULT_OPTIONS, ...savedOptions }\n }\n\n saveOptions(options: Partial<AiOptions>) {\n const updated = { ...this.loadOptions(), ...options }\n localStorage.setItem(STORAGE_KEY_PREFERENCES, JSON.stringify(updated))\n if (options.model) {\n aiService.reset(options.model)\n }\n }\n}\n\nexport const aiPreferencesService = new AiPreferencesService()\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","/** @license React v16.13.1\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\n// (unstable) APIs that have been removed. Can we remove the symbols?\n\nvar REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;\nvar REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;\nvar REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;\n\nfunction isValidElementType(type) {\n return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);\n}\n\nfunction typeOf(object) {\n if (typeof object === 'object' && object !== null) {\n var $$typeof = object.$$typeof;\n\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n var type = object.type;\n\n switch (type) {\n case REACT_ASYNC_MODE_TYPE:\n case REACT_CONCURRENT_MODE_TYPE:\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n return type;\n\n default:\n var $$typeofType = type && type.$$typeof;\n\n switch ($$typeofType) {\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n case REACT_PROVIDER_TYPE:\n return $$typeofType;\n\n default:\n return $$typeof;\n }\n\n }\n\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n\n return undefined;\n} // AsyncMode is deprecated along with isAsyncMode\n\nvar AsyncMode = REACT_ASYNC_MODE_TYPE;\nvar ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');\n }\n }\n\n return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;\n}\nfunction isConcurrentMode(object) {\n return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;\n}\nfunction isContextConsumer(object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\n\nexports.AsyncMode = AsyncMode;\nexports.ConcurrentMode = ConcurrentMode;\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","module.exports = Function.call.bind(Object.prototype.hasOwnProperty);\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n var loggedTypeFailures = {};\n var has = require('./lib/has');\n\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) { /**/ }\n };\n}\n\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\nfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n if (process.env.NODE_ENV !== 'production') {\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error;\n // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n var err = Error(\n (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +\n 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' +\n 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'\n );\n err.name = 'Invariant Violation';\n throw err;\n }\n error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n } catch (ex) {\n error = ex;\n }\n if (error && !(error instanceof Error)) {\n printWarning(\n (componentName || 'React class') + ': type specification of ' +\n location + ' `' + typeSpecName + '` is invalid; the type checker ' +\n 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +\n 'You may have forgotten to pass an argument to the type checker ' +\n 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +\n 'shape all require an argument).'\n );\n }\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error.message] = true;\n\n var stack = getStack ? getStack() : '';\n\n printWarning(\n 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')\n );\n }\n }\n }\n }\n}\n\n/**\n * Resets warning cache when testing.\n *\n * @private\n */\ncheckPropTypes.resetWarningCache = function() {\n if (process.env.NODE_ENV !== 'production') {\n loggedTypeFailures = {};\n }\n}\n\nmodule.exports = checkPropTypes;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactIs = require('react-is');\nvar assign = require('object-assign');\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\nvar has = require('./lib/has');\nvar checkPropTypes = require('./checkPropTypes');\n\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n}\n\nfunction emptyFunctionThatReturnsNull() {\n return null;\n}\n\nmodule.exports = function(isValidElement, throwOnDirectAccess) {\n /* global Symbol */\n var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n /**\n * Returns the iterator method function contained on the iterable object.\n *\n * Be sure to invoke the function with the iterable as context:\n *\n * var iteratorFn = getIteratorFn(myIterable);\n * if (iteratorFn) {\n * var iterator = iteratorFn.call(myIterable);\n * ...\n * }\n *\n * @param {?object} maybeIterable\n * @return {?function}\n */\n function getIteratorFn(maybeIterable) {\n var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n if (typeof iteratorFn === 'function') {\n return iteratorFn;\n }\n }\n\n /**\n * Collection of methods that allow declaration and validation of props that are\n * supplied to React components. Example usage:\n *\n * var Props = require('ReactPropTypes');\n * var MyArticle = React.createClass({\n * propTypes: {\n * // An optional string prop named \"description\".\n * description: Props.string,\n *\n * // A required enum prop named \"category\".\n * category: Props.oneOf(['News','Photos']).isRequired,\n *\n * // A prop named \"dialog\" that requires an instance of Dialog.\n * dialog: Props.instanceOf(Dialog).isRequired\n * },\n * render: function() { ... }\n * });\n *\n * A more formal specification of how these methods are used:\n *\n * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n * decl := ReactPropTypes.{type}(.isRequired)?\n *\n * Each and every declaration produces a function with the same signature. This\n * allows the creation of custom validation functions. For example:\n *\n * var MyLink = React.createClass({\n * propTypes: {\n * // An optional string or URI prop named \"href\".\n * href: function(props, propName, componentName) {\n * var propValue = props[propName];\n * if (propValue != null && typeof propValue !== 'string' &&\n * !(propValue instanceof URI)) {\n * return new Error(\n * 'Expected a string or an URI for ' + propName + ' in ' +\n * componentName\n * );\n * }\n * }\n * },\n * render: function() {...}\n * });\n *\n * @internal\n */\n\n var ANONYMOUS = '<<anonymous>>';\n\n // Important!\n // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\n var ReactPropTypes = {\n array: createPrimitiveTypeChecker('array'),\n bigint: createPrimitiveTypeChecker('bigint'),\n bool: createPrimitiveTypeChecker('boolean'),\n func: createPrimitiveTypeChecker('function'),\n number: createPrimitiveTypeChecker('number'),\n object: createPrimitiveTypeChecker('object'),\n string: createPrimitiveTypeChecker('string'),\n symbol: createPrimitiveTypeChecker('symbol'),\n\n any: createAnyTypeChecker(),\n arrayOf: createArrayOfTypeChecker,\n element: createElementTypeChecker(),\n elementType: createElementTypeTypeChecker(),\n instanceOf: createInstanceTypeChecker,\n node: createNodeChecker(),\n objectOf: createObjectOfTypeChecker,\n oneOf: createEnumTypeChecker,\n oneOfType: createUnionTypeChecker,\n shape: createShapeTypeChecker,\n exact: createStrictShapeTypeChecker,\n };\n\n /**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\n /*eslint-disable no-self-compare*/\n function is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return x !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n }\n /*eslint-enable no-self-compare*/\n\n /**\n * We use an Error-like object for backward compatibility as people may call\n * PropTypes directly and inspect their output. However, we don't use real\n * Errors anymore. We don't inspect their stack anyway, and creating them\n * is prohibitively expensive if they are created too often, such as what\n * happens in oneOfType() for any type before the one that matched.\n */\n function PropTypeError(message, data) {\n this.message = message;\n this.data = data && typeof data === 'object' ? data: {};\n this.stack = '';\n }\n // Make `instanceof Error` still work for returned errors.\n PropTypeError.prototype = Error.prototype;\n\n function createChainableTypeChecker(validate) {\n if (process.env.NODE_ENV !== 'production') {\n var manualPropTypeCallCache = {};\n var manualPropTypeWarningCount = 0;\n }\n function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n componentName = componentName || ANONYMOUS;\n propFullName = propFullName || propName;\n\n if (secret !== ReactPropTypesSecret) {\n if (throwOnDirectAccess) {\n // New behavior only for users of `prop-types` package\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use `PropTypes.checkPropTypes()` to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n } else if (process.env.NODE_ENV !== 'production' && typeof console !== 'undefined') {\n // Old behavior for people using React.PropTypes\n var cacheKey = componentName + ':' + propName;\n if (\n !manualPropTypeCallCache[cacheKey] &&\n // Avoid spamming the console because they are often not actionable except for lib authors\n manualPropTypeWarningCount < 3\n ) {\n printWarning(\n 'You are manually calling a React.PropTypes validation ' +\n 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' +\n 'and will throw in the standalone `prop-types` package. ' +\n 'You may be seeing this warning due to a third-party PropTypes ' +\n 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'\n );\n manualPropTypeCallCache[cacheKey] = true;\n manualPropTypeWarningCount++;\n }\n }\n }\n if (props[propName] == null) {\n if (isRequired) {\n if (props[propName] === null) {\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\n }\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\n }\n return null;\n } else {\n return validate(props, propName, componentName, location, propFullName);\n }\n }\n\n var chainedCheckType = checkType.bind(null, false);\n chainedCheckType.isRequired = checkType.bind(null, true);\n\n return chainedCheckType;\n }\n\n function createPrimitiveTypeChecker(expectedType) {\n function validate(props, propName, componentName, location, propFullName, secret) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== expectedType) {\n // `propValue` being instance of, say, date/regexp, pass the 'object'\n // check, but we can offer a more precise error message here rather than\n // 'of type `object`'.\n var preciseType = getPreciseType(propValue);\n\n return new PropTypeError(\n 'Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'),\n {expectedType: expectedType}\n );\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createAnyTypeChecker() {\n return createChainableTypeChecker(emptyFunctionThatReturnsNull);\n }\n\n function createArrayOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n }\n var propValue = props[propName];\n if (!Array.isArray(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n }\n for (var i = 0; i < propValue.length; i++) {\n var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!isValidElement(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!ReactIs.isValidElementType(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createInstanceTypeChecker(expectedClass) {\n function validate(props, propName, componentName, location, propFullName) {\n if (!(props[propName] instanceof expectedClass)) {\n var expectedClassName = expectedClass.name || ANONYMOUS;\n var actualClassName = getClassName(props[propName]);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createEnumTypeChecker(expectedValues) {\n if (!Array.isArray(expectedValues)) {\n if (process.env.NODE_ENV !== 'production') {\n if (arguments.length > 1) {\n printWarning(\n 'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +\n 'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'\n );\n } else {\n printWarning('Invalid argument supplied to oneOf, expected an array.');\n }\n }\n return emptyFunctionThatReturnsNull;\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n for (var i = 0; i < expectedValues.length; i++) {\n if (is(propValue, expectedValues[i])) {\n return null;\n }\n }\n\n var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {\n var type = getPreciseType(value);\n if (type === 'symbol') {\n return String(value);\n }\n return value;\n });\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n }\n return createChainableTypeChecker(validate);\n }\n\n function createObjectOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n }\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n }\n for (var key in propValue) {\n if (has(propValue, key)) {\n var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createUnionTypeChecker(arrayOfTypeCheckers) {\n if (!Array.isArray(arrayOfTypeCheckers)) {\n process.env.NODE_ENV !== 'production' ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;\n return emptyFunctionThatReturnsNull;\n }\n\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n if (typeof checker !== 'function') {\n printWarning(\n 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +\n 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'\n );\n return emptyFunctionThatReturnsNull;\n }\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var expectedTypes = [];\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n var checkerResult = checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret);\n if (checkerResult == null) {\n return null;\n }\n if (checkerResult.data && has(checkerResult.data, 'expectedType')) {\n expectedTypes.push(checkerResult.data.expectedType);\n }\n }\n var expectedTypesMessage = (expectedTypes.length > 0) ? ', expected one of type [' + expectedTypes.join(', ') + ']': '';\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`' + expectedTypesMessage + '.'));\n }\n return createChainableTypeChecker(validate);\n }\n\n function createNodeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n if (!isNode(props[propName])) {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function invalidValidatorError(componentName, location, propFullName, key, type) {\n return new PropTypeError(\n (componentName || 'React class') + ': ' + location + ' type `' + propFullName + '.' + key + '` is invalid; ' +\n 'it must be a function, usually from the `prop-types` package, but received `' + type + '`.'\n );\n }\n\n function createShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n for (var key in shapeTypes) {\n var checker = shapeTypes[key];\n if (typeof checker !== 'function') {\n return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createStrictShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n // We need to check all keys in case some are required but missing from props.\n var allKeys = assign({}, props[propName], shapeTypes);\n for (var key in allKeys) {\n var checker = shapeTypes[key];\n if (has(shapeTypes, key) && typeof checker !== 'function') {\n return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));\n }\n if (!checker) {\n return new PropTypeError(\n 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +\n '\\nBad object: ' + JSON.stringify(props[propName], null, ' ') +\n '\\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ')\n );\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error) {\n return error;\n }\n }\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function isNode(propValue) {\n switch (typeof propValue) {\n case 'number':\n case 'string':\n case 'undefined':\n return true;\n case 'boolean':\n return !propValue;\n case 'object':\n if (Array.isArray(propValue)) {\n return propValue.every(isNode);\n }\n if (propValue === null || isValidElement(propValue)) {\n return true;\n }\n\n var iteratorFn = getIteratorFn(propValue);\n if (iteratorFn) {\n var iterator = iteratorFn.call(propValue);\n var step;\n if (iteratorFn !== propValue.entries) {\n while (!(step = iterator.next()).done) {\n if (!isNode(step.value)) {\n return false;\n }\n }\n } else {\n // Iterator will provide entry [k,v] tuples rather than values.\n while (!(step = iterator.next()).done) {\n var entry = step.value;\n if (entry) {\n if (!isNode(entry[1])) {\n return false;\n }\n }\n }\n }\n } else {\n return false;\n }\n\n return true;\n default:\n return false;\n }\n }\n\n function isSymbol(propType, propValue) {\n // Native Symbol.\n if (propType === 'symbol') {\n return true;\n }\n\n // falsy value can't be a Symbol\n if (!propValue) {\n return false;\n }\n\n // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n if (propValue['@@toStringTag'] === 'Symbol') {\n return true;\n }\n\n // Fallback for non-spec compliant Symbols which are polyfilled.\n if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n return true;\n }\n\n return false;\n }\n\n // Equivalent of `typeof` but with special handling for array and regexp.\n function getPropType(propValue) {\n var propType = typeof propValue;\n if (Array.isArray(propValue)) {\n return 'array';\n }\n if (propValue instanceof RegExp) {\n // Old webkits (at least until Android 4.0) return 'function' rather than\n // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n // passes PropTypes.object.\n return 'object';\n }\n if (isSymbol(propType, propValue)) {\n return 'symbol';\n }\n return propType;\n }\n\n // This handles more types than `getPropType`. Only used for error messages.\n // See `createPrimitiveTypeChecker`.\n function getPreciseType(propValue) {\n if (typeof propValue === 'undefined' || propValue === null) {\n return '' + propValue;\n }\n var propType = getPropType(propValue);\n if (propType === 'object') {\n if (propValue instanceof Date) {\n return 'date';\n } else if (propValue instanceof RegExp) {\n return 'regexp';\n }\n }\n return propType;\n }\n\n // Returns a string that is postfixed to a warning about an invalid type.\n // For example, \"undefined\" or \"of type array\"\n function getPostfixForTypeWarning(value) {\n var type = getPreciseType(value);\n switch (type) {\n case 'array':\n case 'object':\n return 'an ' + type;\n case 'boolean':\n case 'date':\n case 'regexp':\n return 'a ' + type;\n default:\n return type;\n }\n }\n\n // Returns class name of the object, if any.\n function getClassName(propValue) {\n if (!propValue.constructor || !propValue.constructor.name) {\n return ANONYMOUS;\n }\n return propValue.constructor.name;\n }\n\n ReactPropTypes.checkPropTypes = checkPropTypes;\n ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache;\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","// The programming goals of Split.js are to deliver readable, understandable and\n// maintainable code, while at the same time manually optimizing for tiny minified file size,\n// browser compatibility without additional requirements\n// and very few assumptions about the user's page layout.\nvar global = typeof window !== 'undefined' ? window : null;\nvar ssr = global === null;\nvar document = !ssr ? global.document : undefined;\n\n// Save a couple long function names that are used frequently.\n// This optimization saves around 400 bytes.\nvar addEventListener = 'addEventListener';\nvar removeEventListener = 'removeEventListener';\nvar getBoundingClientRect = 'getBoundingClientRect';\nvar gutterStartDragging = '_a';\nvar aGutterSize = '_b';\nvar bGutterSize = '_c';\nvar HORIZONTAL = 'horizontal';\nvar NOOP = function () { return false; };\n\n// Helper function determines which prefixes of CSS calc we need.\n// We only need to do this once on startup, when this anonymous function is called.\n//\n// Tests -webkit, -moz and -o prefixes. Modified from StackOverflow:\n// http://stackoverflow.com/questions/16625140/js-feature-detection-to-detect-the-usage-of-webkit-calc-over-calc/16625167#16625167\nvar calc = ssr\n ? 'calc'\n : ((['', '-webkit-', '-moz-', '-o-']\n .filter(function (prefix) {\n var el = document.createElement('div');\n el.style.cssText = \"width:\" + prefix + \"calc(9px)\";\n\n return !!el.style.length\n })\n .shift()) + \"calc\");\n\n// Helper function checks if its argument is a string-like type\nvar isString = function (v) { return typeof v === 'string' || v instanceof String; };\n\n// Helper function allows elements and string selectors to be used\n// interchangeably. In either case an element is returned. This allows us to\n// do `Split([elem1, elem2])` as well as `Split(['#id1', '#id2'])`.\nvar elementOrSelector = function (el) {\n if (isString(el)) {\n var ele = document.querySelector(el);\n if (!ele) {\n throw new Error((\"Selector \" + el + \" did not match a DOM element\"))\n }\n return ele\n }\n\n return el\n};\n\n// Helper function gets a property from the properties object, with a default fallback\nvar getOption = function (options, propName, def) {\n var value = options[propName];\n if (value !== undefined) {\n return value\n }\n return def\n};\n\nvar getGutterSize = function (gutterSize, isFirst, isLast, gutterAlign) {\n if (isFirst) {\n if (gutterAlign === 'end') {\n return 0\n }\n if (gutterAlign === 'center') {\n return gutterSize / 2\n }\n } else if (isLast) {\n if (gutterAlign === 'start') {\n return 0\n }\n if (gutterAlign === 'center') {\n return gutterSize / 2\n }\n }\n\n return gutterSize\n};\n\n// Default options\nvar defaultGutterFn = function (i, gutterDirection) {\n var gut = document.createElement('div');\n gut.className = \"gutter gutter-\" + gutterDirection;\n return gut\n};\n\nvar defaultElementStyleFn = function (dim, size, gutSize) {\n var style = {};\n\n if (!isString(size)) {\n style[dim] = calc + \"(\" + size + \"% - \" + gutSize + \"px)\";\n } else {\n style[dim] = size;\n }\n\n return style\n};\n\nvar defaultGutterStyleFn = function (dim, gutSize) {\n var obj;\n\n return (( obj = {}, obj[dim] = (gutSize + \"px\"), obj ));\n};\n\n// The main function to initialize a split. Split.js thinks about each pair\n// of elements as an independant pair. Dragging the gutter between two elements\n// only changes the dimensions of elements in that pair. This is key to understanding\n// how the following functions operate, since each function is bound to a pair.\n//\n// A pair object is shaped like this:\n//\n// {\n// a: DOM element,\n// b: DOM element,\n// aMin: Number,\n// bMin: Number,\n// dragging: Boolean,\n// parent: DOM element,\n// direction: 'horizontal' | 'vertical'\n// }\n//\n// The basic sequence:\n//\n// 1. Set defaults to something sane. `options` doesn't have to be passed at all.\n// 2. Initialize a bunch of strings based on the direction we're splitting.\n// A lot of the behavior in the rest of the library is paramatized down to\n// rely on CSS strings and classes.\n// 3. Define the dragging helper functions, and a few helpers to go with them.\n// 4. Loop through the elements while pairing them off. Every pair gets an\n// `pair` object and a gutter.\n// 5. Actually size the pair elements, insert gutters and attach event listeners.\nvar Split = function (idsOption, options) {\n if ( options === void 0 ) options = {};\n\n if (ssr) { return {} }\n\n var ids = idsOption;\n var dimension;\n var clientAxis;\n var position;\n var positionEnd;\n var clientSize;\n var elements;\n\n // Allow HTMLCollection to be used as an argument when supported\n if (Array.from) {\n ids = Array.from(ids);\n }\n\n // All DOM elements in the split should have a common parent. We can grab\n // the first elements parent and hope users read the docs because the\n // behavior will be whacky otherwise.\n var firstElement = elementOrSelector(ids[0]);\n var parent = firstElement.parentNode;\n var parentStyle = getComputedStyle ? getComputedStyle(parent) : null;\n var parentFlexDirection = parentStyle ? parentStyle.flexDirection : null;\n\n // Set default options.sizes to equal percentages of the parent element.\n var sizes = getOption(options, 'sizes') || ids.map(function () { return 100 / ids.length; });\n\n // Standardize minSize and maxSize to an array if it isn't already.\n // This allows minSize and maxSize to be passed as a number.\n var minSize = getOption(options, 'minSize', 100);\n var minSizes = Array.isArray(minSize) ? minSize : ids.map(function () { return minSize; });\n var maxSize = getOption(options, 'maxSize', Infinity);\n var maxSizes = Array.isArray(maxSize) ? maxSize : ids.map(function () { return maxSize; });\n\n // Get other options\n var expandToMin = getOption(options, 'expandToMin', false);\n var gutterSize = getOption(options, 'gutterSize', 10);\n var gutterAlign = getOption(options, 'gutterAlign', 'center');\n var snapOffset = getOption(options, 'snapOffset', 30);\n var snapOffsets = Array.isArray(snapOffset) ? snapOffset : ids.map(function () { return snapOffset; });\n var dragInterval = getOption(options, 'dragInterval', 1);\n var direction = getOption(options, 'direction', HORIZONTAL);\n var cursor = getOption(\n options,\n 'cursor',\n direction === HORIZONTAL ? 'col-resize' : 'row-resize'\n );\n var gutter = getOption(options, 'gutter', defaultGutterFn);\n var elementStyle = getOption(\n options,\n 'elementStyle',\n defaultElementStyleFn\n );\n var gutterStyle = getOption(options, 'gutterStyle', defaultGutterStyleFn);\n\n // 2. Initialize a bunch of strings based on the direction we're splitting.\n // A lot of the behavior in the rest of the library is paramatized down to\n // rely on CSS strings and classes.\n if (direction === HORIZONTAL) {\n dimension = 'width';\n clientAxis = 'clientX';\n position = 'left';\n positionEnd = 'right';\n clientSize = 'clientWidth';\n } else if (direction === 'vertical') {\n dimension = 'height';\n clientAxis = 'clientY';\n position = 'top';\n positionEnd = 'bottom';\n clientSize = 'clientHeight';\n }\n\n // 3. Define the dragging helper functions, and a few helpers to go with them.\n // Each helper is bound to a pair object that contains its metadata. This\n // also makes it easy to store references to listeners that that will be\n // added and removed.\n //\n // Even though there are no other functions contained in them, aliasing\n // this to self saves 50 bytes or so since it's used so frequently.\n //\n // The pair object saves metadata like dragging state, position and\n // event listener references.\n\n function setElementSize(el, size, gutSize, i) {\n // Split.js allows setting sizes via numbers (ideally), or if you must,\n // by string, like '300px'. This is less than ideal, because it breaks\n // the fluid layout that `calc(% - px)` provides. You're on your own if you do that,\n // make sure you calculate the gutter size by hand.\n var style = elementStyle(dimension, size, gutSize, i);\n\n Object.keys(style).forEach(function (prop) {\n // eslint-disable-next-line no-param-reassign\n el.style[prop] = style[prop];\n });\n }\n\n function setGutterSize(gutterElement, gutSize, i) {\n var style = gutterStyle(dimension, gutSize, i);\n\n Object.keys(style).forEach(function (prop) {\n // eslint-disable-next-line no-param-reassign\n gutterElement.style[prop] = style[prop];\n });\n }\n\n function getSizes() {\n return elements.map(function (element) { return element.size; })\n }\n\n // Supports touch events, but not multitouch, so only the first\n // finger `touches[0]` is counted.\n function getMousePosition(e) {\n if ('touches' in e) { return e.touches[0][clientAxis] }\n return e[clientAxis]\n }\n\n // Actually adjust the size of elements `a` and `b` to `offset` while dragging.\n // calc is used to allow calc(percentage + gutterpx) on the whole split instance,\n // which allows the viewport to be resized without additional logic.\n // Element a's size is the same as offset. b's size is total size - a size.\n // Both sizes are calculated from the initial parent percentage,\n // then the gutter size is subtracted.\n function adjust(offset) {\n var a = elements[this.a];\n var b = elements[this.b];\n var percentage = a.size + b.size;\n\n a.size = (offset / this.size) * percentage;\n b.size = percentage - (offset / this.size) * percentage;\n\n setElementSize(a.element, a.size, this[aGutterSize], a.i);\n setElementSize(b.element, b.size, this[bGutterSize], b.i);\n }\n\n // drag, where all the magic happens. The logic is really quite simple:\n //\n // 1. Ignore if the pair is not dragging.\n // 2. Get the offset of the event.\n // 3. Snap offset to min if within snappable range (within min + snapOffset).\n // 4. Actually adjust each element in the pair to offset.\n //\n // ---------------------------------------------------------------------\n // | | <- a.minSize || b.minSize -> | |\n // | | | <- this.snapOffset || this.snapOffset -> | | |\n // | | | || | | |\n // | | | || | | |\n // ---------------------------------------------------------------------\n // | <- this.start this.size -> |\n function drag(e) {\n var offset;\n var a = elements[this.a];\n var b = elements[this.b];\n\n if (!this.dragging) { return }\n\n // Get the offset of the event from the first side of the\n // pair `this.start`. Then offset by the initial position of the\n // mouse compared to the gutter size.\n offset =\n getMousePosition(e) -\n this.start +\n (this[aGutterSize] - this.dragOffset);\n\n if (dragInterval > 1) {\n offset = Math.round(offset / dragInterval) * dragInterval;\n }\n\n // If within snapOffset of min or max, set offset to min or max.\n // snapOffset buffers a.minSize and b.minSize, so logic is opposite for both.\n // Include the appropriate gutter sizes to prevent overflows.\n if (offset <= a.minSize + a.snapOffset + this[aGutterSize]) {\n offset = a.minSize + this[aGutterSize];\n } else if (\n offset >=\n this.size - (b.minSize + b.snapOffset + this[bGutterSize])\n ) {\n offset = this.size - (b.minSize + this[bGutterSize]);\n }\n\n if (offset >= a.maxSize - a.snapOffset + this[aGutterSize]) {\n offset = a.maxSize + this[aGutterSize];\n } else if (\n offset <=\n this.size - (b.maxSize - b.snapOffset + this[bGutterSize])\n ) {\n offset = this.size - (b.maxSize + this[bGutterSize]);\n }\n\n // Actually adjust the size.\n adjust.call(this, offset);\n\n // Call the drag callback continously. Don't do anything too intensive\n // in this callback.\n getOption(options, 'onDrag', NOOP)(getSizes());\n }\n\n // Cache some important sizes when drag starts, so we don't have to do that\n // continously:\n //\n // `size`: The total size of the pair. First + second + first gutter + second gutter.\n // `start`: The leading side of the first element.\n //\n // ------------------------------------------------\n // | aGutterSize -> ||| |\n // | ||| |\n // | ||| |\n // | ||| <- bGutterSize |\n // ------------------------------------------------\n // | <- start size -> |\n function calculateSizes() {\n // Figure out the parent size minus padding.\n var a = elements[this.a].element;\n var b = elements[this.b].element;\n\n var aBounds = a[getBoundingClientRect]();\n var bBounds = b[getBoundingClientRect]();\n\n this.size =\n aBounds[dimension] +\n bBounds[dimension] +\n this[aGutterSize] +\n this[bGutterSize];\n this.start = aBounds[position];\n this.end = aBounds[positionEnd];\n }\n\n function innerSize(element) {\n // Return nothing if getComputedStyle is not supported (< IE9)\n // Or if parent element has no layout yet\n if (!getComputedStyle) { return null }\n\n var computedStyle = getComputedStyle(element);\n\n if (!computedStyle) { return null }\n\n var size = element[clientSize];\n\n if (size === 0) { return null }\n\n if (direction === HORIZONTAL) {\n size -=\n parseFloat(computedStyle.paddingLeft) +\n parseFloat(computedStyle.paddingRight);\n } else {\n size -=\n parseFloat(computedStyle.paddingTop) +\n parseFloat(computedStyle.paddingBottom);\n }\n\n return size\n }\n\n // When specifying percentage sizes that are less than the computed\n // size of the element minus the gutter, the lesser percentages must be increased\n // (and decreased from the other elements) to make space for the pixels\n // subtracted by the gutters.\n function trimToMin(sizesToTrim) {\n // Try to get inner size of parent element.\n // If it's no supported, return original sizes.\n var parentSize = innerSize(parent);\n if (parentSize === null) {\n return sizesToTrim\n }\n\n if (minSizes.reduce(function (a, b) { return a + b; }, 0) > parentSize) {\n return sizesToTrim\n }\n\n // Keep track of the excess pixels, the amount of pixels over the desired percentage\n // Also keep track of the elements with pixels to spare, to decrease after if needed\n var excessPixels = 0;\n var toSpare = [];\n\n var pixelSizes = sizesToTrim.map(function (size, i) {\n // Convert requested percentages to pixel sizes\n var pixelSize = (parentSize * size) / 100;\n var elementGutterSize = getGutterSize(\n gutterSize,\n i === 0,\n i === sizesToTrim.length - 1,\n gutterAlign\n );\n var elementMinSize = minSizes[i] + elementGutterSize;\n\n // If element is too smal, increase excess pixels by the difference\n // and mark that it has no pixels to spare\n if (pixelSize < elementMinSize) {\n excessPixels += elementMinSize - pixelSize;\n toSpare.push(0);\n return elementMinSize\n }\n\n // Otherwise, mark the pixels it has to spare and return it's original size\n toSpare.push(pixelSize - elementMinSize);\n return pixelSize\n });\n\n // If nothing was adjusted, return the original sizes\n if (excessPixels === 0) {\n return sizesToTrim\n }\n\n return pixelSizes.map(function (pixelSize, i) {\n var newPixelSize = pixelSize;\n\n // While there's still pixels to take, and there's enough pixels to spare,\n // take as many as possible up to the total excess pixels\n if (excessPixels > 0 && toSpare[i] - excessPixels > 0) {\n var takenPixels = Math.min(\n excessPixels,\n toSpare[i] - excessPixels\n );\n\n // Subtract the amount taken for the next iteration\n excessPixels -= takenPixels;\n newPixelSize = pixelSize - takenPixels;\n }\n\n // Return the pixel size adjusted as a percentage\n return (newPixelSize / parentSize) * 100\n })\n }\n\n // stopDragging is very similar to startDragging in reverse.\n function stopDragging() {\n var self = this;\n var a = elements[self.a].element;\n var b = elements[self.b].element;\n\n if (self.dragging) {\n getOption(options, 'onDragEnd', NOOP)(getSizes());\n }\n\n self.dragging = false;\n\n // Remove the stored event listeners. This is why we store them.\n global[removeEventListener]('mouseup', self.stop);\n global[removeEventListener]('touchend', self.stop);\n global[removeEventListener]('touchcancel', self.stop);\n global[removeEventListener]('mousemove', self.move);\n global[removeEventListener]('touchmove', self.move);\n\n // Clear bound function references\n self.stop = null;\n self.move = null;\n\n a[removeEventListener]('selectstart', NOOP);\n a[removeEventListener]('dragstart', NOOP);\n b[removeEventListener]('selectstart', NOOP);\n b[removeEventListener]('dragstart', NOOP);\n\n a.style.userSelect = '';\n a.style.webkitUserSelect = '';\n a.style.MozUserSelect = '';\n a.style.pointerEvents = '';\n\n b.style.userSelect = '';\n b.style.webkitUserSelect = '';\n b.style.MozUserSelect = '';\n b.style.pointerEvents = '';\n\n self.gutter.style.cursor = '';\n self.parent.style.cursor = '';\n document.body.style.cursor = '';\n }\n\n // startDragging calls `calculateSizes` to store the inital size in the pair object.\n // It also adds event listeners for mouse/touch events,\n // and prevents selection while dragging so avoid the selecting text.\n function startDragging(e) {\n // Right-clicking can't start dragging.\n if ('button' in e && e.button !== 0) {\n return\n }\n\n // Alias frequently used variables to save space. 200 bytes.\n var self = this;\n var a = elements[self.a].element;\n var b = elements[self.b].element;\n\n // Call the onDragStart callback.\n if (!self.dragging) {\n getOption(options, 'onDragStart', NOOP)(getSizes());\n }\n\n // Don't actually drag the element. We emulate that in the drag function.\n e.preventDefault();\n\n // Set the dragging property of the pair object.\n self.dragging = true;\n\n // Create two event listeners bound to the same pair object and store\n // them in the pair object.\n self.move = drag.bind(self);\n self.stop = stopDragging.bind(self);\n\n // All the binding. `window` gets the stop events in case we drag out of the elements.\n global[addEventListener]('mouseup', self.stop);\n global[addEventListener]('touchend', self.stop);\n global[addEventListener]('touchcancel', self.stop);\n global[addEventListener]('mousemove', self.move);\n global[addEventListener]('touchmove', self.move);\n\n // Disable selection. Disable!\n a[addEventListener]('selectstart', NOOP);\n a[addEventListener]('dragstart', NOOP);\n b[addEventListener]('selectstart', NOOP);\n b[addEventListener]('dragstart', NOOP);\n\n a.style.userSelect = 'none';\n a.style.webkitUserSelect = 'none';\n a.style.MozUserSelect = 'none';\n a.style.pointerEvents = 'none';\n\n b.style.userSelect = 'none';\n b.style.webkitUserSelect = 'none';\n b.style.MozUserSelect = 'none';\n b.style.pointerEvents = 'none';\n\n // Set the cursor at multiple levels\n self.gutter.style.cursor = cursor;\n self.parent.style.cursor = cursor;\n document.body.style.cursor = cursor;\n\n // Cache the initial sizes of the pair.\n calculateSizes.call(self);\n\n // Determine the position of the mouse compared to the gutter\n self.dragOffset = getMousePosition(e) - self.end;\n }\n\n // adjust sizes to ensure percentage is within min size and gutter.\n sizes = trimToMin(sizes);\n\n // 5. Create pair and element objects. Each pair has an index reference to\n // elements `a` and `b` of the pair (first and second elements).\n // Loop through the elements while pairing them off. Every pair gets a\n // `pair` object and a gutter.\n //\n // Basic logic:\n //\n // - Starting with the second element `i > 0`, create `pair` objects with\n // `a = i - 1` and `b = i`\n // - Set gutter sizes based on the _pair_ being first/last. The first and last\n // pair have gutterSize / 2, since they only have one half gutter, and not two.\n // - Create gutter elements and add event listeners.\n // - Set the size of the elements, minus the gutter sizes.\n //\n // -----------------------------------------------------------------------\n // | i=0 | i=1 | i=2 | i=3 |\n // | | | | |\n // | pair 0 pair 1 pair 2 |\n // | | | | |\n // -----------------------------------------------------------------------\n var pairs = [];\n elements = ids.map(function (id, i) {\n // Create the element object.\n var element = {\n element: elementOrSelector(id),\n size: sizes[i],\n minSize: minSizes[i],\n maxSize: maxSizes[i],\n snapOffset: snapOffsets[i],\n i: i,\n };\n\n var pair;\n\n if (i > 0) {\n // Create the pair object with its metadata.\n pair = {\n a: i - 1,\n b: i,\n dragging: false,\n direction: direction,\n parent: parent,\n };\n\n pair[aGutterSize] = getGutterSize(\n gutterSize,\n i - 1 === 0,\n false,\n gutterAlign\n );\n pair[bGutterSize] = getGutterSize(\n gutterSize,\n false,\n i === ids.length - 1,\n gutterAlign\n );\n\n // if the parent has a reverse flex-direction, switch the pair elements.\n if (\n parentFlexDirection === 'row-reverse' ||\n parentFlexDirection === 'column-reverse'\n ) {\n var temp = pair.a;\n pair.a = pair.b;\n pair.b = temp;\n }\n }\n\n // Determine the size of the current element. IE8 is supported by\n // staticly assigning sizes without draggable gutters. Assigns a string\n // to `size`.\n //\n // Create gutter elements for each pair.\n if (i > 0) {\n var gutterElement = gutter(i, direction, element.element);\n setGutterSize(gutterElement, gutterSize, i);\n\n // Save bound event listener for removal later\n pair[gutterStartDragging] = startDragging.bind(pair);\n\n // Attach bound event listener\n gutterElement[addEventListener](\n 'mousedown',\n pair[gutterStartDragging]\n );\n gutterElement[addEventListener](\n 'touchstart',\n pair[gutterStartDragging]\n );\n\n parent.insertBefore(gutterElement, element.element);\n\n pair.gutter = gutterElement;\n }\n\n setElementSize(\n element.element,\n element.size,\n getGutterSize(\n gutterSize,\n i === 0,\n i === ids.length - 1,\n gutterAlign\n ),\n i\n );\n\n // After the first iteration, and we have a pair object, append it to the\n // list of pairs.\n if (i > 0) {\n pairs.push(pair);\n }\n\n return element\n });\n\n function adjustToMin(element) {\n var isLast = element.i === pairs.length;\n var pair = isLast ? pairs[element.i - 1] : pairs[element.i];\n\n calculateSizes.call(pair);\n\n var size = isLast\n ? pair.size - element.minSize - pair[bGutterSize]\n : element.minSize + pair[aGutterSize];\n\n adjust.call(pair, size);\n }\n\n elements.forEach(function (element) {\n var computedSize = element.element[getBoundingClientRect]()[dimension];\n\n if (computedSize < element.minSize) {\n if (expandToMin) {\n adjustToMin(element);\n } else {\n // eslint-disable-next-line no-param-reassign\n element.minSize = computedSize;\n }\n }\n });\n\n function setSizes(newSizes) {\n var trimmed = trimToMin(newSizes);\n trimmed.forEach(function (newSize, i) {\n if (i > 0) {\n var pair = pairs[i - 1];\n\n var a = elements[pair.a];\n var b = elements[pair.b];\n\n a.size = trimmed[i - 1];\n b.size = newSize;\n\n setElementSize(a.element, a.size, pair[aGutterSize], a.i);\n setElementSize(b.element, b.size, pair[bGutterSize], b.i);\n }\n });\n }\n\n function destroy(preserveStyles, preserveGutter) {\n pairs.forEach(function (pair) {\n if (preserveGutter !== true) {\n pair.parent.removeChild(pair.gutter);\n } else {\n pair.gutter[removeEventListener](\n 'mousedown',\n pair[gutterStartDragging]\n );\n pair.gutter[removeEventListener](\n 'touchstart',\n pair[gutterStartDragging]\n );\n }\n\n if (preserveStyles !== true) {\n var style = elementStyle(\n dimension,\n pair.a.size,\n pair[aGutterSize]\n );\n\n Object.keys(style).forEach(function (prop) {\n elements[pair.a].element.style[prop] = '';\n elements[pair.b].element.style[prop] = '';\n });\n }\n });\n }\n\n return {\n setSizes: setSizes,\n getSizes: getSizes,\n collapse: function collapse(i) {\n adjustToMin(elements[i]);\n },\n destroy: destroy,\n parent: parent,\n pairs: pairs,\n }\n};\n\nexport default Split;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Split from 'split.js';\n\nfunction objectWithoutProperties (obj, exclude) { var target = {}; for (var k in obj) if (Object.prototype.hasOwnProperty.call(obj, k) && exclude.indexOf(k) === -1) target[k] = obj[k]; return target; }\n\nvar SplitWrapper = /*@__PURE__*/(function (superclass) {\n function SplitWrapper () {\n superclass.apply(this, arguments);\n }\n\n if ( superclass ) SplitWrapper.__proto__ = superclass;\n SplitWrapper.prototype = Object.create( superclass && superclass.prototype );\n SplitWrapper.prototype.constructor = SplitWrapper;\n\n SplitWrapper.prototype.componentDidMount = function componentDidMount () {\n var ref = this.props;\n ref.children;\n var gutter = ref.gutter;\n var rest = objectWithoutProperties( ref, [\"children\", \"gutter\"] );\n var options = rest;\n\n options.gutter = function (index, direction) {\n var gutterElement;\n\n if (gutter) {\n gutterElement = gutter(index, direction);\n } else {\n gutterElement = document.createElement('div');\n gutterElement.className = \"gutter gutter-\" + direction;\n }\n\n // eslint-disable-next-line no-underscore-dangle\n gutterElement.__isSplitGutter = true;\n return gutterElement\n };\n\n this.split = Split(this.parent.children, options);\n };\n\n SplitWrapper.prototype.componentDidUpdate = function componentDidUpdate (prevProps) {\n var this$1 = this;\n\n var ref = this.props;\n ref.children;\n var minSize = ref.minSize;\n var sizes = ref.sizes;\n var collapsed = ref.collapsed;\n var rest = objectWithoutProperties( ref, [\"children\", \"minSize\", \"sizes\", \"collapsed\"] );\n var options = rest;\n var prevMinSize = prevProps.minSize;\n var prevSizes = prevProps.sizes;\n var prevCollapsed = prevProps.collapsed;\n\n var otherProps = [\n 'maxSize',\n 'expandToMin',\n 'gutterSize',\n 'gutterAlign',\n 'snapOffset',\n 'dragInterval',\n 'direction',\n 'cursor' ];\n\n var needsRecreate = otherProps\n // eslint-disable-next-line react/destructuring-assignment\n .map(function (prop) { return this$1.props[prop] !== prevProps[prop]; })\n .reduce(function (accum, same) { return accum || same; }, false);\n\n // Compare minSize when both are arrays, when one is an array and when neither is an array\n if (Array.isArray(minSize) && Array.isArray(prevMinSize)) {\n var minSizeChanged = false;\n\n minSize.forEach(function (minSizeI, i) {\n minSizeChanged = minSizeChanged || minSizeI !== prevMinSize[i];\n });\n\n needsRecreate = needsRecreate || minSizeChanged;\n } else if (Array.isArray(minSize) || Array.isArray(prevMinSize)) {\n needsRecreate = true;\n } else {\n needsRecreate = needsRecreate || minSize !== prevMinSize;\n }\n\n // Destroy and re-create split if options changed\n if (needsRecreate) {\n options.minSize = minSize;\n options.sizes = sizes || this.split.getSizes();\n this.split.destroy(true, true);\n options.gutter = function (index, direction, pairB) { return pairB.previousSibling; };\n this.split = Split(\n Array.from(this.parent.children).filter(\n // eslint-disable-next-line no-underscore-dangle\n function (element) { return !element.__isSplitGutter; }\n ),\n options\n );\n } else if (sizes) {\n // If only the size has changed, set the size. No need to do this if re-created.\n var sizeChanged = false;\n\n sizes.forEach(function (sizeI, i) {\n sizeChanged = sizeChanged || sizeI !== prevSizes[i];\n });\n\n if (sizeChanged) {\n // eslint-disable-next-line react/destructuring-assignment\n this.split.setSizes(this.props.sizes);\n }\n }\n\n // Collapse after re-created or when collapsed changed.\n if (\n Number.isInteger(collapsed) &&\n (collapsed !== prevCollapsed || needsRecreate)\n ) {\n this.split.collapse(collapsed);\n }\n };\n\n SplitWrapper.prototype.componentWillUnmount = function componentWillUnmount () {\n this.split.destroy();\n delete this.split;\n };\n\n SplitWrapper.prototype.render = function render () {\n var this$1 = this;\n\n var ref = this.props;\n ref.sizes;\n ref.minSize;\n ref.maxSize;\n ref.expandToMin;\n ref.gutterSize;\n ref.gutterAlign;\n ref.snapOffset;\n ref.dragInterval;\n ref.direction;\n ref.cursor;\n ref.gutter;\n ref.elementStyle;\n ref.gutterStyle;\n ref.onDrag;\n ref.onDragStart;\n ref.onDragEnd;\n ref.collapsed;\n var children = ref.children;\n var rest$1 = objectWithoutProperties( ref, [\"sizes\", \"minSize\", \"maxSize\", \"expandToMin\", \"gutterSize\", \"gutterAlign\", \"snapOffset\", \"dragInterval\", \"direction\", \"cursor\", \"gutter\", \"elementStyle\", \"gutterStyle\", \"onDrag\", \"onDragStart\", \"onDragEnd\", \"collapsed\", \"children\"] );\n var rest = rest$1;\n\n return (\n React.createElement( 'div', Object.assign({},\n { ref: function (parent) {\n this$1.parent = parent;\n } }, rest),\n children\n )\n )\n };\n\n return SplitWrapper;\n}(React.Component));\n\nSplitWrapper.propTypes = {\n sizes: PropTypes.arrayOf(PropTypes.number),\n minSize: PropTypes.oneOfType([\n PropTypes.number,\n PropTypes.arrayOf(PropTypes.number) ]),\n maxSize: PropTypes.oneOfType([\n PropTypes.number,\n PropTypes.arrayOf(PropTypes.number) ]),\n expandToMin: PropTypes.bool,\n gutterSize: PropTypes.number,\n gutterAlign: PropTypes.string,\n snapOffset: PropTypes.oneOfType([\n PropTypes.number,\n PropTypes.arrayOf(PropTypes.number) ]),\n dragInterval: PropTypes.number,\n direction: PropTypes.string,\n cursor: PropTypes.string,\n gutter: PropTypes.func,\n elementStyle: PropTypes.func,\n gutterStyle: PropTypes.func,\n onDrag: PropTypes.func,\n onDragStart: PropTypes.func,\n onDragEnd: PropTypes.func,\n collapsed: PropTypes.number,\n children: PropTypes.arrayOf(PropTypes.element),\n};\n\nSplitWrapper.defaultProps = {\n sizes: undefined,\n minSize: undefined,\n maxSize: undefined,\n expandToMin: undefined,\n gutterSize: undefined,\n gutterAlign: undefined,\n snapOffset: undefined,\n dragInterval: undefined,\n direction: undefined,\n cursor: undefined,\n gutter: undefined,\n elementStyle: undefined,\n gutterStyle: undefined,\n onDrag: undefined,\n onDragStart: undefined,\n onDragEnd: undefined,\n collapsed: undefined,\n children: undefined,\n};\n\nexport default SplitWrapper;\n","import { Conversation, MessageProps } from '@patternfly/chatbot'\n\nexport class ChatbotDialog {\n public readonly id: string\n\n constructor(\n public messages: MessageProps[],\n private summary?: string,\n ) {\n this.id = messages[0]?.id ?? ''\n }\n\n setMessages(messages: MessageProps[]) {\n if (messages[0]?.id !== this.id) {\n throw new Error('Not the same dialog')\n }\n this.messages = [...messages]\n }\n\n createConversation(): Conversation {\n const text = this.summary ?? (this.messages[0]?.content ?? '').substring(0, 20)\n return { id: this.id, text }\n }\n}\n","import { EVENT_REFRESH, eventService, MBeanNode, MBeanTree, PluginNodeSelectionContext, workspace } from '@hawtio/react'\nimport { Conversation } from '@patternfly/chatbot/dist/esm/ChatbotConversationHistoryNav'\nimport { MessageProps } from '@patternfly/chatbot/dist/esm/Message'\nimport { createContext, Dispatch, useContext, useEffect, useRef, useState } from 'react'\nimport { To, useNavigate, useSearchParams } from 'react-router-dom'\nimport { log, PARAM_KEY_NODE_ID, pluginName, pluginPath } from './globals'\nimport { ChatbotDialog } from './model'\n\n/**\n * Custom React hook for using JMX MBean tree.\n */\nexport function useMBeanTree(): MBeanTreeContext {\n const [tree, setTree] = useState(MBeanTree.createEmpty(pluginName))\n const [loaded, setLoaded] = useState(false)\n const { selectedNode, setSelectedNode } = useContext(PluginNodeSelectionContext)\n const navigate = useNavigate()\n const [searchParams, setSearchParams] = useSearchParams()\n\n /*\n * Need to preserve the selected node between re-renders since the\n * populateTree function called via the refresh listener does not\n * cache the value and stores it as null\n */\n const refSelectedNode = useRef<MBeanNode | null>()\n refSelectedNode.current = selectedNode\n\n const populateTree = async () => {\n const wkspTree = await workspace.getTree()\n setTree(wkspTree)\n\n const nodeId = searchParams.get(PARAM_KEY_NODE_ID)\n if (nodeId && nodeId !== refSelectedNode.current?.id) {\n log.debug('Restore selected node with nid:', nodeId)\n // Try to restore node from URL\n const urlNode = wkspTree.find(node => node.id === nodeId)\n if (urlNode) {\n setSelectedNode(urlNode)\n refSelectedNode.current = urlNode\n } else {\n // Clear nid as it is invalid\n log.debug('Clear invalid nid:', nodeId)\n searchParams.delete(PARAM_KEY_NODE_ID)\n setSearchParams(searchParams)\n }\n }\n\n if (!refSelectedNode.current) return\n\n const path = [...refSelectedNode.current.path()]\n\n // Expand the nodes to redisplay the path\n wkspTree.forEach(path, node => {\n node.defaultExpanded = true\n })\n\n // Ensure the new version of the selected node is selected\n const newSelected = wkspTree.navigate(...path)\n if (newSelected) {\n setSelectedNode(newSelected)\n // Reset to base path with nid to sync URL with restored selection\n navigate(pluginPathWithNodeId(newSelected, searchParams))\n } else {\n // Node no longer exists - clear selection and go to base path\n navigate(pluginPath)\n }\n }\n\n useEffect(() => {\n const loadTree = async () => {\n await populateTree()\n setLoaded(true)\n }\n\n const listener = () => {\n setLoaded(false)\n loadTree()\n }\n eventService.onRefresh(listener)\n\n loadTree()\n\n return () => eventService.removeListener(EVENT_REFRESH, listener)\n }, [])\n\n return { tree, loaded, selectedNode, setSelectedNode }\n}\n\n/**\n * Build URL query string with nid parameter, preserving other existing params\n * @param node - The node to encode\n * @param searchParams - The current URL search params to preserve, defaults to the ones from the window location\n */\nexport function pluginPathWithNodeId(\n node: MBeanNode,\n searchParams: URLSearchParams = new URLSearchParams(window.location.search),\n): Partial<To> {\n searchParams.set(PARAM_KEY_NODE_ID, node.id)\n const query = `?${searchParams.toString()}`\n return { pathname: pluginPath, search: query }\n}\n\ntype MBeanTreeContext = {\n tree: MBeanTree\n loaded: boolean\n selectedNode: MBeanNode | null\n setSelectedNode: (selected: MBeanNode | null) => void\n}\n\nexport const MBeanTreeContext = createContext<MBeanTreeContext>({\n tree: MBeanTree.createEmpty(pluginName),\n loaded: false,\n selectedNode: null,\n setSelectedNode: () => {\n /* no-op */\n },\n})\n\n/**\n * Custom React hook for using AI Chatbot.\n */\nexport function useChatbot(): ChatbotContext {\n const [messages, setMessages] = useState<MessageProps[]>([])\n const [dialogs, setDialogs] = useState<ChatbotDialog[]>([])\n const [conversations, setConversations] = useState<Conversation[]>([])\n const [announcement, setAnnouncement] = useState('')\n const [isChatbotOpen, setIsChatbotOpen] = useState(false)\n const [isSendButtonDisabled, setIsSendButtonDisabled] = useState(false)\n\n const updateConversations = (messages: MessageProps[], summary?: string) => {\n const dialogId = messages[0]?.id\n if (!dialogId) {\n return\n }\n setMessages(messages)\n let dialog = dialogs.find(d => d.id === dialogId)\n if (dialog) {\n dialog.setMessages(messages)\n } else {\n dialog = new ChatbotDialog(messages, summary)\n dialogs.push(dialog)\n }\n setDialogs([...dialogs])\n log.debug('Updated dialogs:', dialogs)\n\n if (!conversations.some(c => c.id === dialogId)) {\n const conversation = dialog.createConversation()\n conversations.push(conversation)\n setConversations([...conversations])\n log.debug('Updated conversations:', conversations)\n }\n }\n\n return {\n messages,\n setMessages,\n dialogs,\n setDialogs,\n conversations,\n setConversations,\n announcement,\n setAnnouncement,\n isChatbotOpen,\n setIsChatbotOpen,\n isSendButtonDisabled,\n setIsSendButtonDisabled,\n updateConversations,\n }\n}\n\ntype ChatbotContext = {\n messages: MessageProps[]\n setMessages: Dispatch<React.SetStateAction<MessageProps[]>>\n dialogs: ChatbotDialog[]\n setDialogs: Dispatch<React.SetStateAction<ChatbotDialog[]>>\n conversations: Conversation[]\n setConversations: Dispatch<React.SetStateAction<Conversation[]>>\n announcement: string\n setAnnouncement: Dispatch<React.SetStateAction<string>>\n isChatbotOpen: boolean\n setIsChatbotOpen: (value: boolean) => void\n isSendButtonDisabled: boolean\n setIsSendButtonDisabled: (value: boolean) => void\n updateConversations: (messages: MessageProps[], summary?: string) => void\n}\n\nexport const ChatbotContext = createContext<ChatbotContext>({\n messages: [],\n setMessages: () => {\n /* no-op */\n },\n dialogs: [],\n setDialogs: () => {\n /* no-op */\n },\n conversations: [],\n setConversations: () => {\n /* no-op */\n },\n announcement: '',\n setAnnouncement: () => {\n /* no-op */\n },\n isChatbotOpen: false,\n setIsChatbotOpen: () => {\n /* no-op */\n },\n isSendButtonDisabled: false,\n setIsSendButtonDisabled: () => {\n /* no-op */\n },\n updateConversations: () => {\n /* no-op */\n },\n})\n",".jmx-split {\n display: flex;\n flex-direction: row;\n height: calc(100vh - 85px);\n}\n\n.gutter {\n background-color: #eee;\n background-repeat: no-repeat;\n background-position: 50%;\n}\n\n.gutter.gutter-horizontal {\n background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAeCAYAAADkftS9AAAAIklEQVQoU2M4c+bMfxAGAgYYmwGrIIiDjrELjpo5aiZeMwF+yNnOs5KSvgAAAABJRU5ErkJggg==');\n cursor: col-resize;\n}\n","import { PageContext } from '@hawtio/react/ui'\nimport { ToolCall } from '@langchain/core/messages/tool'\nimport { Conversation } from '@patternfly/chatbot'\nimport Chatbot, { ChatbotDisplayMode } from '@patternfly/chatbot/dist/dynamic/Chatbot'\nimport ChatbotContent from '@patternfly/chatbot/dist/dynamic/ChatbotContent'\nimport ChatbotConversationHistoryNav from '@patternfly/chatbot/dist/dynamic/ChatbotConversationHistoryNav'\nimport ChatbotFooter, { ChatbotFootnote } from '@patternfly/chatbot/dist/dynamic/ChatbotFooter'\nimport ChatbotHeader, {\n ChatbotHeaderActions,\n ChatbotHeaderCloseButton,\n ChatbotHeaderMain,\n ChatbotHeaderMenu,\n ChatbotHeaderTitle,\n} from '@patternfly/chatbot/dist/dynamic/ChatbotHeader'\nimport Message, { MessageProps } from '@patternfly/chatbot/dist/dynamic/Message'\nimport MessageBar from '@patternfly/chatbot/dist/dynamic/MessageBar'\nimport MessageBox from '@patternfly/chatbot/dist/dynamic/MessageBox'\nimport { Alert, Button, Content, Flex, Label } from '@patternfly/react-core'\nimport WrenchIcon from '@patternfly/react-icons/dist/esm/icons/wrench-icon'\nimport React, { Dispatch, useContext, useEffect, useRef, useState } from 'react'\nimport { aiService } from '../common/ai-service'\nimport { ChatbotContext } from './context'\nimport { log } from './globals'\n\nexport const DiagnosisChatbot: React.FC = () => {\n const { setMessages, dialogs, conversations } = useContext(ChatbotContext)\n const [isDrawerOpen, setIsDrawerOpen] = useState(false)\n const [filteredConversations, setFilteredConversations] = useState<Conversation[]>(conversations)\n\n const onSelectItemInHistory = (selected: string) => {\n log.debug('Selected conversation with ID:', selected)\n const dialog = dialogs.find(c => c.id === selected)\n if (dialog) {\n setMessages(dialog.messages)\n setIsDrawerOpen(!isDrawerOpen)\n }\n }\n\n const handleSearchTextChange = (value: string) => {\n if (value.trim() === '') {\n setFilteredConversations(conversations)\n return\n }\n\n const filtered = conversations.filter(c => c.text.toLowerCase().includes(value.toLowerCase()))\n log.debug('Filtered conversations:', filtered)\n setFilteredConversations(filtered)\n }\n\n const displayMode = ChatbotDisplayMode.drawer\n\n return (\n <Chatbot isCompact displayMode={displayMode}>\n <ChatbotConversationHistoryNav\n isCompact\n drawerPanelContentProps={{ isResizable: true, minSize: '200px' }}\n displayMode={displayMode}\n onDrawerToggle={() => {\n setIsDrawerOpen(!isDrawerOpen)\n setFilteredConversations(conversations)\n }}\n isDrawerOpen={isDrawerOpen}\n setIsDrawerOpen={setIsDrawerOpen}\n onSelectActiveItem={(_e, selectedItem) => onSelectItemInHistory(String(selectedItem))}\n conversations={[...filteredConversations].reverse()}\n onNewChat={() => {\n setIsDrawerOpen(!isDrawerOpen)\n setFilteredConversations(conversations)\n setMessages([])\n }}\n handleTextInputChange={handleSearchTextChange}\n drawerContent={\n <>\n <DiagnosisChatbotHeader isDrawerOpen={isDrawerOpen} setIsDrawerOpen={setIsDrawerOpen} />\n <DiagnosisChatbotContent />\n <DiagnosisChatbotFooter />\n </>\n }\n />\n </Chatbot>\n )\n}\n\nconst DiagnosisChatbotHeader: React.FC<{\n isDrawerOpen: boolean\n setIsDrawerOpen: Dispatch<React.SetStateAction<boolean>>\n}> = ({ isDrawerOpen, setIsDrawerOpen }) => {\n const { setIsChatbotOpen } = useContext(ChatbotContext)\n const modelName = aiService.getModel()?.name\n\n return (\n <ChatbotHeader>\n <ChatbotHeaderMain>\n <ChatbotHeaderMenu aria-expanded={isDrawerOpen} onMenuToggle={() => setIsDrawerOpen(!isDrawerOpen)} />\n <ChatbotHeaderTitle>\n <Content component='h2'>AI - Diagnosis</Content>\n </ChatbotHeaderTitle>\n </ChatbotHeaderMain>\n <ChatbotHeaderActions>\n {modelName && <Label variant='outline'>{modelName}</Label>}\n <ChatbotHeaderCloseButton onClick={() => setIsChatbotOpen(false)} />\n </ChatbotHeaderActions>\n </ChatbotHeader>\n )\n}\n\nconst DiagnosisChatbotContent: React.FC = () => {\n const { messages, announcement } = useContext(ChatbotContext)\n const scrollToBottomRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (messages.length > 2) {\n scrollToBottomRef.current?.scrollIntoView({ behavior: 'smooth' })\n }\n }, [messages])\n\n return (\n <ChatbotContent>\n <MessageBox announcement={announcement}>\n {messages.map((message, index) => (\n <React.Fragment key={message.id}>\n {index === messages.length - 1 && <div ref={scrollToBottomRef} />}\n <Message key={message.id} {...message} />\n </React.Fragment>\n ))}\n </MessageBox>\n </ChatbotContent>\n )\n}\n\nconst DiagnosisChatbotFooter: React.FC = () => {\n const { username } = useContext(PageContext)\n const { messages, setAnnouncement, isSendButtonDisabled, setIsSendButtonDisabled, updateConversations } =\n useContext(ChatbotContext)\n const messagesRef = useRef(messages)\n\n useEffect(() => {\n messagesRef.current = messages\n }, [messages])\n\n const handleSend = async (message: string) => {\n if (!message.trim()) {\n return\n }\n log.debug('Send', messagesRef.current)\n\n setIsSendButtonDisabled(true)\n const newMessages: MessageProps[] = []\n newMessages.push(...messagesRef.current)\n newMessages.push(aiService.createUserMessage(username, message))\n newMessages.push(aiService.createLoadingBotMessage())\n updateConversations(newMessages)\n // make announcement to assistive devices that new messages have been added\n setAnnouncement(`Message from User: ${message}. Message from Bot is loading.`)\n log.debug('handleSend - new messages:', newMessages)\n\n const dialogId = newMessages[0]!.id!\n const answer = await (newMessages.length === 2\n ? aiService.newChat(dialogId, message)\n : aiService.chat(dialogId, message))\n const loadedMessages: MessageProps[] = []\n loadedMessages.push(...newMessages)\n log.debug('handleSend - loaded messages:', loadedMessages)\n // Remove the loading message\n loadedMessages.pop()\n const botMessage = aiService.toBotMessage(answer, ThinkInfo, ToolCallsInfo, ToolCallsApprove)\n loadedMessages.push(botMessage)\n updateConversations(loadedMessages)\n setAnnouncement(`Message from Bot: ${answer}`)\n setIsSendButtonDisabled(false)\n }\n\n return (\n <ChatbotFooter>\n <MessageBar\n onSendMessage={m => handleSend(String(m))}\n hasAttachButton={false}\n isSendButtonDisabled={isSendButtonDisabled}\n />\n <ChatbotFootnote label='AI may be inaccurate. Please verify important information.' />\n </ChatbotFooter>\n )\n}\n\nexport const ThinkInfo = (think: string) => {\n return (\n <Alert variant='info' title='Think' isExpandable>\n {think}\n </Alert>\n )\n}\n\nexport const ToolCallsInfo = (call: ToolCall, index: number) => {\n return (\n <Alert key={index} variant='info' customIcon={<WrenchIcon />} title={call.name} isExpandable>\n <p>Args: {JSON.stringify(call.args)} </p>\n </Alert>\n )\n}\n\nexport const ToolCallsApprove = (toolCalls: ToolCall[]) => {\n const { username } = useContext(PageContext)\n const { messages, setAnnouncement, setIsSendButtonDisabled, updateConversations } = useContext(ChatbotContext)\n const messagesRef = useRef(messages)\n\n const approve = async (toolCalls: ToolCall[]) => {\n log.debug('Approved', messagesRef.current)\n\n setIsSendButtonDisabled(true)\n const newMessages: MessageProps[] = []\n newMessages.push(...messagesRef.current)\n newMessages.push(aiService.createUserMessage(username, 'Approved'))\n newMessages.push(aiService.createLoadingBotMessage())\n updateConversations(newMessages)\n // make announcement to assistive devices that new messages have been added\n setAnnouncement(`User approved tool usage. Message from Bot is loading.`)\n log.debug('approve - newMessages:', newMessages)\n\n const answer = await aiService.invokeTools(toolCalls)\n log.debug('Answer:', answer)\n const loadedMessages: MessageProps[] = []\n loadedMessages.push(...newMessages)\n log.debug('approve - loadedMessages:', loadedMessages)\n // Remove the loading message\n loadedMessages.pop()\n const botMessage = aiService.toBotMessage(answer, ThinkInfo, ToolCallsInfo, ToolCallsApprove)\n loadedMessages.push(botMessage)\n updateConversations(loadedMessages)\n setAnnouncement(`Message from Bot: ${answer}`)\n setIsSendButtonDisabled(false)\n }\n\n const reject = () => {\n log.debug('Rejected')\n\n setIsSendButtonDisabled(true)\n const newMessages: MessageProps[] = []\n newMessages.push(...messages)\n newMessages.push(aiService.createUserMessage(username, 'Rejected'))\n setMessages(newMessages)\n setIsSendButtonDisabled(false)\n }\n\n return (\n <Flex columnGap={{ default: 'columnGapSm' }}>\n <Button variant='primary' onClick={() => approve(toolCalls)}>\n Approve\n </Button>\n <Button variant='secondary' onClick={reject}>\n Reject\n </Button>\n </Flex>\n )\n}\n","#jmx-content {\n height: 100%;\n}\n\nsection#jmx-content-header.pf-v6-c-page__main-section {\n display: block;\n}\n\n#jmx-content-main > article {\n overflow: auto;\n}\n","export function isObject(value: unknown): value is object {\n const type = typeof value\n return value != null && (type === 'object' || type === 'function')\n}\n\nexport function isNumber(value: unknown): value is number {\n return typeof value === 'number' && !Number.isNaN(value)\n}\n\nexport function stringSorter(a: string, b: string, sortDesc?: boolean): number {\n let res = a.localeCompare(b)\n if (sortDesc) {\n res *= -1\n }\n return res\n}\n\nexport function objectSorter(aValue: unknown, bValue: unknown, sortDesc?: boolean) {\n if (isNumber(aValue)) {\n // Numeric sort\n if (!sortDesc) {\n return (aValue as number) - (bValue as number)\n }\n return (bValue as number) - (aValue as number)\n } else {\n // String sort\n return stringSorter(aValue as string, bValue as string, sortDesc)\n }\n}\n\n/**\n * Return true if the string is either null or empty.\n */\nexport function isBlank(str?: string): boolean {\n if (str === undefined || str === null) {\n return true\n }\n if (typeof str !== 'string') {\n // not null but also not a string...\n return false\n }\n\n return str.trim().length === 0\n}\n\n/**\n * Will format a property to a standard human readable string with its spaces.\n * It will respect MBean and leave it together\n * @param str The property to transform\n * @returns The property with its proper spaces\n */\nexport function humanizeLabels(str: string): string {\n return str\n .split('-')\n .filter(str => !isBlank(str))\n .map(str => str.replace(/^./, str => str.toUpperCase()))\n .join(' ')\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .replace(/\\b([A-Z]+)([A-Z])([a-z])/, '$1 $2$3')\n .replace('M Bean', 'MBean')\n .replace('Mbean', 'MBean')\n .replace(/^./, str => str.toUpperCase())\n .replace(/ +/, ' ')\n .trim()\n}\n\n/**\n * Escapes the mbean for Jolokia GET requests.\n *\n * @param mbean the MBean\n */\nexport function escapeMBean(mbean: string): string {\n return encodeURI(applyJolokiaEscapeRules(mbean))\n}\n\n/**\n * Applies the Jolokia escaping rules to the MBean name.\n * See: https://jolokia.org/reference/html/manual/jolokia_protocol.html#_escaping_rules_in_get_requests\n *\n * @param mbean the MBean\n */\nfunction applyJolokiaEscapeRules(mbean: string): string {\n return mbean.replace(/!/g, '!!').replace(/\\//g, '!/').replace(/\"/g, '!\"')\n}\n","import { AttributeValues, eventService, jolokiaService } from '@hawtio/react'\nimport {\n JolokiaErrorResponse,\n JolokiaFetchErrorResponse,\n JolokiaRequest,\n JolokiaSuccessResponse,\n RequestOptions,\n} from 'jolokia.js'\nimport { log } from '../globals'\nimport { escapeMBean } from '../util'\n\nclass AttributeService {\n private handles: number[] = []\n\n private requestOptions(): RequestOptions {\n // serializeLong = false\n return {}\n }\n\n private setupConfig(request: JolokiaRequest): JolokiaRequest {\n // serializeLong = false\n return request\n }\n\n async read(mbean: string): Promise<AttributeValues> {\n return await jolokiaService.readAttributes(mbean, this.requestOptions())\n }\n\n async readWithCallback(mbean: string, callback: (attrs: AttributeValues) => void): Promise<void> {\n const attrs = await jolokiaService.readAttributes(mbean, this.requestOptions())\n callback(attrs)\n }\n\n async register(\n request: JolokiaRequest,\n callback: (response: JolokiaSuccessResponse | JolokiaErrorResponse | JolokiaFetchErrorResponse) => void,\n ) {\n const handle = await jolokiaService.register(this.setupConfig(request), callback)\n log.debug('Register handle:', handle)\n this.handles.push(handle)\n }\n\n unregisterAll() {\n log.debug('Unregister all handles:', this.handles)\n this.handles.forEach(handle => jolokiaService.unregister(handle))\n this.handles = []\n }\n\n async buildUrl(mbean: string, attribute: string): Promise<string> {\n const jolokiaUrl = await jolokiaService.getFullJolokiaUrl()\n return `${jolokiaUrl}/read/${escapeMBean(mbean)}/${attribute}`\n }\n\n async canInvoke(mbean: string, attribute: string, type: string): Promise<boolean> {\n return true\n /*\n const aclMBean = await rbacService.getACLMBean()\n if (!aclMBean) {\n // Always allow invocation when client-side RBAC is not available\n return true\n }\n\n const operation = 'canInvoke(java.lang.String,java.lang.String,[Ljava.lang.String;)'\n const args = [mbean, `set${attribute}`, [type]]\n return jolokiaService.execute(aclMBean, operation, args) as Promise<boolean>\n */\n }\n\n async update(mbeanName: string, attribute: string, value: unknown) {\n await jolokiaService.writeAttribute(mbeanName, attribute, value, this.requestOptions())\n eventService.notify({ type: 'success', message: `Updated attribute: ${attribute}` })\n }\n\n async bulkRequest(requests: JolokiaRequest[]) {\n return jolokiaService.bulkRequest(requests.map(this.setupConfig))\n }\n}\n\nexport const attributeService = new AttributeService()\n","import { eventService, PluginNodeSelectionContext } from '@hawtio/react'\nimport {\n Alert,\n Button,\n ClipboardCopy,\n DrawerActions,\n DrawerCloseButton,\n DrawerHead,\n DrawerPanelBody,\n DrawerPanelContent,\n Form,\n FormGroup,\n Hint,\n HintBody,\n HintFooter,\n HintTitle,\n TextArea,\n TextInput,\n Title,\n} from '@patternfly/react-core'\nimport { InfoCircleIcon } from '@patternfly/react-icons'\nimport React, { useContext, useEffect, useState } from 'react'\nimport Markdown from 'react-markdown'\nimport { aiService, MessageWithThink } from '../../common/ai-service'\nimport { log } from '../globals'\nimport { attributeService } from './attribute-service'\n\nexport const AttributeModal: React.FC<{\n isAttributeSelected: boolean\n onClose: () => void\n onUpdate: () => void\n input: { name: string; value: string }\n aiMessage?: string\n}> = ({ isAttributeSelected, onClose, onUpdate, input, aiMessage }) => {\n const { selectedNode } = useContext(PluginNodeSelectionContext)\n const attributeName = input.name\n const [attributeValue, setAttributeValue] = useState('')\n const [jolokiaUrl, setJolokiaUrl] = useState('Loading...')\n const [isWritable, setIsWritable] = useState(false)\n\n useEffect(() => {\n if (!selectedNode || !selectedNode.objectName || !selectedNode.mbean) {\n return\n }\n\n const { mbean, objectName } = selectedNode\n\n const attribute = mbean.attr?.[attributeName]\n if (!attribute) {\n return\n }\n\n setAttributeValue(input.value)\n\n // Update Jolokia URL\n const buildUrl = async () => {\n const url = await attributeService.buildUrl(objectName, attributeName)\n setJolokiaUrl(url)\n }\n buildUrl()\n\n // Check RBAC on the selected attribute\n if (attribute.rw) {\n // For writable attribute, we need to check RBAC\n const canInvoke = async () => {\n const canInvoke = await attributeService.canInvoke(objectName, attributeName, attribute.type)\n log.debug('Attribute', attributeName, 'canInvoke:', canInvoke)\n setIsWritable(canInvoke)\n }\n canInvoke()\n } else {\n setIsWritable(false)\n }\n }, [selectedNode, attributeName, input])\n\n if (!selectedNode || !selectedNode.objectName || !selectedNode.mbean) {\n return null\n }\n\n const { mbean, objectName } = selectedNode\n\n const attribute = mbean.attr?.[attributeName]\n if (!attribute) {\n return null\n }\n\n const updateAttribute = async () => {\n if (attributeValue === input.value) {\n eventService.notify({ type: 'info', message: 'The attribute value has not changed' })\n } else {\n await attributeService.update(objectName, attributeName, attributeValue)\n onUpdate()\n }\n onClose()\n }\n\n const modalTitle = isAttributeSelected ? `Attribute: ${attributeName}` : 'Attributes'\n\n const modalActions = []\n\n if (isWritable) {\n modalActions.push(\n <Button key='update' variant='danger' onClick={updateAttribute}>\n Save\n </Button>,\n )\n }\n\n const diagnosis: MessageWithThink = aiMessage ? aiService.extractThink(aiMessage) : { content: '' }\n\n return (\n <DrawerPanelContent isResizable>\n <DrawerHead>\n <Title headingLevel='h2' size='xl'>\n {modalTitle}\n </Title>\n <DrawerActions>\n <DrawerCloseButton onClick={onClose} />\n </DrawerActions>\n </DrawerHead>\n\n {isAttributeSelected && (\n <DrawerPanelBody>\n <Form id='attribute-form' isHorizontal>\n <FormGroup label='Name' fieldId='attribute-form-name'>\n <TextInput\n id='attribute-form-name'\n name='attribute-form-name'\n value={attributeName}\n readOnlyVariant='default'\n />\n </FormGroup>\n <FormGroup label='Description' fieldId='attribute-form-description'>\n <TextArea\n id='attribute-form-description'\n name='attribute-form-description'\n value={attribute.desc}\n readOnlyVariant='default'\n />\n </FormGroup>\n <FormGroup label='Type' fieldId='attribute-form-type'>\n <TextInput\n id='attribute-form-type'\n name='attribute-form-type'\n value={attribute.type}\n readOnlyVariant='default'\n />\n </FormGroup>\n <FormGroup label='Jolokia URL' fieldId='attribute-form-jolokia-url'>\n <ClipboardCopy isReadOnly>{jolokiaUrl}</ClipboardCopy>\n </FormGroup>\n <FormGroup label='Value' fieldId='attribute-form-value'>\n <TextInput\n id='attribute-form-value'\n name='attribute-form-value'\n value={attributeValue}\n onChange={(_event, value) => setAttributeValue(value)}\n readOnlyVariant={isWritable ? undefined : 'default'}\n />\n </FormGroup>\n <FormGroup>{modalActions}</FormGroup>\n </Form>\n </DrawerPanelBody>\n )}\n\n {aiMessage && (\n <DrawerPanelBody>\n <Hint>\n <HintTitle>\n <InfoCircleIcon /> Diagnosis\n </HintTitle>\n <HintBody>\n <Markdown>{diagnosis.content}</Markdown>\n </HintBody>\n {diagnosis.think && (\n <HintFooter>\n <Alert variant='info' title='Think' isExpandable>\n <Markdown>{diagnosis.think}</Markdown>\n </Alert>\n </HintFooter>\n )}\n </Hint>\n </DrawerPanelBody>\n )}\n </DrawerPanelContent>\n )\n}\n","/*\n * Copyright 2009-2025 Roland Huss\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst CLIENT_VERSION = \"2.6.0\";\n/**\n * Default parameters for GET and POST requests\n * @see https://developer.mozilla.org/en-US/docs/Web/API/fetch#options\n */\nconst DEFAULT_FETCH_PARAMS = {\n cache: \"no-store\",\n credentials: \"same-origin\",\n redirect: \"error\"\n};\n// Processing parameters which are added to the URL as query parameters if given as options\nconst PROCESSING_PARAMS = [\n \"maxDepth\",\n \"maxCollectionSize\",\n \"maxObjects\",\n \"serializeLong\",\n \"ignoreErrors\",\n \"includeStackTrace\",\n \"serializeException\",\n \"canonicalNaming\",\n \"mimeType\",\n \"includeRequest\",\n \"ifModifiedSince\",\n \"listCache\"\n];\n/**\n * Main Jolokia creation function/class.\n * For backward compatibility, it can be used both as function and as constructor.\n * @param config a string with URL of remote Jolokia agent or a configuration object\n * @returns Jolokia instance for remote Jolokia agent connection\n */\nconst Jolokia = function (config) {\n if (!new.target) {\n // when invoked as function, return properly created object with bound \"this\" reference\n return new Jolokia(config);\n }\n // ++++++++++++++++++++++++++++++++++++++++++++++++++\n // Function-scoped state not exposed as properties of Jolokia class or instance\n // Registered requests for fetching periodically\n const jobs = new Map();\n // Global Job ID - not accessible to web workers, so safe to use as Job ID\n let jobId = 1;\n // Our client id and notification backend config Is null as long as notifications are not used\n let client;\n // Options used for every request (we can override them when calling Jolokia.request())\n const agentOptions = {};\n // State of the scheduler\n let pollerIsRunning = false;\n // timer id for a single poller's setInterval call\n let timerId = null;\n if (typeof config === \"string\") {\n config = { url: config };\n }\n Object.assign(agentOptions, DEFAULT_FETCH_PARAMS, config);\n // ++++++++++++++++++++++++++++++++++++++++++++++++++\n // Public API (instance methods that may use function-scoped state)\n this.request = async function (request, params) {\n // calculation of arguments. jobs will have this function called once to skip it for consecutive calls\n const args = prepareRequest(request, agentOptions, params);\n // potentially time-consuming operation\n if (args.fetchOptions.method === \"POST\") {\n args.fetchOptions.body = JSON.stringify(request);\n }\n // In original jolokia.js at this stage there was different processing depending on the existence of\n // \"success\" option in passed params.\n // without such callback the request was treated as synchronous (ajaxSettings.async = false), but we can't do\n // this with Fetch API (which is good). So we simply resolve fetch' Promise to get\n // https://developer.mozilla.org/en-US/docs/Web/API/Response\n // end return new a promise resolving to string or an array of Jolokia responses (whether successful or failed ones)\n // user should handle transport errors with .catch() attached to returned promise\n //\n // if callbacks are specified (which is required for job registration, but we allow this for direct calls to),\n // we simply return a Promise resolving to Jolokia response(s)\n return performRequest(args);\n };\n this.register = function (jobInfo, ...requests) {\n if (!requests || requests.length == 0) {\n throw \"At a least one request must be provided\";\n }\n const job = { requests };\n if (typeof jobInfo === \"function\") {\n // treat it as a callback accepting an array of responses - intermixed successful and error responses for\n // each request\n job.callback = jobInfo;\n }\n else {\n // a configuration object for job registration\n if (\"callback\" in jobInfo) {\n job.callback = jobInfo.callback;\n }\n else if (\"success\" in jobInfo && \"error\" in jobInfo) {\n job.success = jobInfo.success;\n job.error = jobInfo.error;\n // could be undefined\n job.fetchError = jobInfo.fetchError;\n }\n else {\n throw \"Either 'callback' or ('success' and 'error') callback must be provided \" +\n \"when registering a Jolokia job\";\n }\n job.config = jobInfo.config;\n job.onlyIfModified = jobInfo.onlyIfModified;\n }\n return addJob(job);\n };\n this.unregister = function (handle) {\n jobs.delete(handle);\n };\n this.jobs = function () {\n return [...jobs.keys()];\n };\n this.start = function (interval) {\n interval = interval || agentOptions.fetchInterval || 30000;\n if (pollerIsRunning) {\n if (interval === agentOptions.fetchInterval) {\n // Nothing to do\n return;\n }\n // Re-start with new interval\n this.stop();\n }\n agentOptions.fetchInterval = interval;\n timerId = setInterval(createJolokiaInvocation(jobs, agentOptions), interval);\n pollerIsRunning = true;\n };\n this.stop = function () {\n if (!pollerIsRunning || !timerId) {\n return;\n }\n clearInterval(timerId);\n timerId = null;\n pollerIsRunning = false;\n };\n this.isRunning = function () {\n return pollerIsRunning;\n };\n // ++++++++++++++++++++++++++++++++++++++++++++++++++\n // Public API - Notification handling\n this.addNotificationListener = async function (opts) {\n // Check that client is registered\n await ensureNotificationRegistration(this);\n // Notification mode. Typically \"pull\" or \"sse\"\n const mode = extractNotificationMode(client, opts);\n notificationHandlerFunc(\"lazy-init\", mode)();\n // Send a notification-add request which returns String handle\n // See org.jolokia.service.jmx.handler.notification.NotificationListenerDelegate.addListener()\n return await this.request({\n type: \"notification\",\n command: \"add\",\n mode: mode,\n client: client.id,\n mbean: opts.mbean,\n filter: opts.filter,\n config: opts.config,\n handback: opts.handback\n }, { method: \"post\" }).then((responses) => {\n const resp = responses;\n if (Jolokia.isError(resp)) {\n throw new Error(\"Cannot not add notification subscription for \" + opts.mbean +\n \" (client: \" + client.id + \"): \" + resp.error);\n }\n const handle = {\n id: resp.value,\n mode: mode\n };\n notificationHandlerFunc(\"add\", mode)(this, handle, opts);\n return handle;\n });\n };\n this.removeNotificationListener = async function (handle) {\n notificationHandlerFunc(\"remove\", handle.mode)(this, handle);\n // Unregister notification at server-side\n return await this.request({\n type: \"notification\",\n command: \"remove\",\n client: client.id,\n handle: handle.id\n }, { method: \"post\" }).then((responses) => {\n const resp = responses;\n return !Jolokia.isError(resp);\n });\n };\n this.unregisterNotificationClient = async function () {\n const backends = client.backend || {};\n for (const mode in NOTIFICATION_HANDLERS) {\n if (NOTIFICATION_HANDLERS[mode] && backends[mode]) {\n notificationHandlerFunc(\"unregister\", mode)();\n }\n }\n return await this.request({\n type: \"notification\",\n command: \"unregister\",\n client: client.id\n }, { method: \"post\" }).then((responses) => {\n const resp = responses;\n return !Jolokia.isError(resp);\n });\n };\n // ++++++++++++++++++++++++++++++++++++++++++++++++++\n // Private methods that need access to jolokia-scoped state (jobs, client, ...)\n /**\n * Add a job to the job queue\n * @param job a job to register\n */\n function addJob(job) {\n const id = jobId++;\n // We should immediately call the job, so user doesn't wait for the next refresh tick.\n // But we will also add the job to global job list synchronously\n // So _next_ call may be performed too early, but the first call will not be too delayed\n jobs.set(id, job);\n setTimeout(() => {\n const newJobMap = new Map();\n newJobMap.set(id, job);\n const jobFunction = createJolokiaInvocation(newJobMap, agentOptions);\n jobFunction();\n }, 0);\n return id;\n }\n /**\n * Check that client is registered\n * @param jolokia\n */\n async function ensureNotificationRegistration(jolokia) {\n if (!client) {\n return jolokia.request({\n type: \"notification\",\n command: \"register\"\n }, { method: \"post\" }).then(responses => {\n const resp = responses;\n if (Jolokia.isError(resp)) {\n throw new Error(\"Can not register client for notifications: \"\n + resp.error\n + \"\\nTrace:\\n\" + resp.stacktrace);\n }\n else {\n client = resp.value;\n }\n return true;\n });\n }\n else {\n return Promise.resolve(true);\n }\n }\n /**\n * Call a function from the handlers defined below, depending on the mode \"this\" is set to the handler object.\n * @param what notification operation\n * @param mode notification mode\n */\n function notificationHandlerFunc(what, mode) {\n const notifHandler = NOTIFICATION_HANDLERS[mode];\n if (!notifHandler) {\n throw new Error(\"Unsupported notification mode '\" + mode + \"'\");\n }\n return function (jolokia, handle, opts) {\n // Set 'this' context to the notifHandler object which holds some state objects\n return notifHandler[what]?.apply(notifHandler, [jolokia, handle, opts]);\n };\n }\n /**\n * A map of internal notification functions + state for each notification mode. The values of this map\n * are objects, so the functions need to be called with function.apply, so `this` is set to this object for\n * proper state management\n */\n const NOTIFICATION_HANDLERS = {\n \"pull\": {\n // \"pull\" handler is based on server-side MBean instance collecting notifications for all registered\n // clients. In order to get the notifications, we have to call this MBean's \"pull\" operation, passing\n // client ID and handle ID\n // --- operations of pull notification mechanism\n add: function (_jolokia, handle, opts) {\n // Add a job for periodically fetching the value and calling the callback with the response\n const job = {\n callback: function (resp) {\n // no spread, so not an array\n if (!Jolokia.isResponseFetchError(resp) && !Jolokia.isError(resp)) {\n const notifs = resp.value;\n if (notifs && notifs.notifications && notifs.notifications.length > 0) {\n opts?.callback?.(notifs);\n }\n }\n },\n requests: [{\n type: \"exec\",\n mbean: client.backend[\"pull\"].store,\n operation: \"pull\",\n arguments: [client.id, handle.id]\n }]\n };\n this.jobIds[handle.id] = addJob(job);\n },\n remove: function (jolokia, handle) {\n // Remove notification subscription from server\n const job = this.jobIds[handle.id];\n if (job != undefined) {\n // Remove from scheduler\n jolokia.unregister(job);\n delete this.jobIds[handle.id];\n }\n },\n unregister: function (jolokia) {\n // Remove all notification jobs from scheduler\n for (const handleId in this.jobIds) {\n if (this.jobIds[handleId] != undefined) {\n jolokia.unregister(this.jobIds[handleId]);\n }\n }\n this.jobIds = {};\n },\n // --- state of pull notification mechanism\n jobIds: {}\n },\n \"sse\": {\n // \"sse\" handler is based on https://developer.mozilla.org/en-US/docs/Web/API/EventSource\n // and continuous stream of events sent over single HTTP connection with text/event-stream MIME type\n // the messages sent are JSON representations of org.jolokia.server.core.service.notification.NotificationResult instances\n // --- operations of sse notification mechanism\n \"lazy-init\": function () {\n if (!this.eventSource) {\n this.eventSource = new EventSource(agentOptions.url + \"/notification/open/\" + client.id + \"/sse\");\n const dispatchers = this.dispatchMap;\n this.eventSource.addEventListener(\"message\", function (event) {\n const data = JSON.parse(event.data);\n if (data.handle) {\n const callback = dispatchers[data.handle];\n callback?.(data);\n }\n });\n }\n },\n add: function (_jolokia, handle, opts) {\n this.dispatchMap[handle.id] = opts.callback;\n },\n remove: function (_jolokia, handle) {\n delete this.dispatchMap[handle.id];\n },\n unregister: function () {\n this.dispatchMap = {};\n this.eventSource?.close();\n this.eventSource = null;\n },\n // --- state of sse notification mechanism\n // Map for dispatching SSE return notifications\n dispatchMap: {},\n // SSE event-source\n eventSource: null\n }\n };\n};\n// ++++++++++++++++++++++++++++++++++++++++++++++++++\n// Public API defined in Jolokia.prototype (or Jolokia itself (static)) - no need to access \"this\"\n/**\n * Version of Jolokia JavaScript client library\n * @constant\n * @type {string}\n * @default\n */\nObject.defineProperty(Jolokia.prototype, \"CLIENT_VERSION\", {\n value: CLIENT_VERSION,\n enumerable: true,\n writable: false\n});\nJolokia.escape = Jolokia.prototype.escape = function (part) {\n return encodeURIComponent(part.replace(/!/g, \"!!\").replace(/\\//g, \"!/\"));\n};\nJolokia.escapePost = Jolokia.prototype.escape = function (part) {\n return part.replace(/!/g, \"!!\").replace(/\\//g, \"!/\");\n};\nJolokia.isError = Jolokia.prototype.isError = function (resp) {\n return resp == null || resp.status != 200;\n};\nJolokia.isResponseSuccess = function (resp) {\n if (!resp || typeof resp !== 'object')\n return false;\n return 'status' in resp && 'timestamp' in resp && 'value' in resp;\n};\nJolokia.isResponseError = function (resp) {\n if (!resp || typeof resp !== 'object')\n return false;\n return 'error_type' in resp && 'error' in resp;\n};\nJolokia.isResponseFetchError = function (resp) {\n if (resp instanceof Response) {\n return resp.status >= 400;\n }\n if (resp instanceof DOMException || resp instanceof TypeError) {\n // see https://developer.mozilla.org/en-US/docs/Web/API/Window/fetch#exceptions\n return true;\n }\n // in practice we should treat string values as errors, but it'd be counter intuitive...\n // return typeof resp === 'string'\n return false;\n};\n// ++++++++++++++++++++++++++++++++++++++++++++++++++\n// Private/internal functions that don't have access to Jolokia() scope variables\n// (unless these are passed explicitly)\n// --- Request helper functions\n/**\n * Helper function that prepares arguments used later with `fetch()` call. When using with jobs, we can prepare the\n * arguments once and call actual `fetch()` quicker. No `body` is set for POST request.\n * @param request request(s) to be sent to remote Jolokia agent\n * @param agentOptions global agent options\n * @param params parameters used for sending the request\n * @returns arguments for `fetch()` call and additional data to control the returned Promise\n */\nfunction prepareRequest(request, agentOptions, params) {\n const opts = Object.assign({}, agentOptions, { dataType: 'json' }, params);\n assertNotNull(opts.url, \"No URL given\");\n // options object passed to fetch() (2nd argument)\n // https://developer.mozilla.org/en-US/docs/Web/API/fetch#options\n // - body\n // - cache\n // - credentials (omit|same-origin|include)\n // - headers (object with string values or Headers object)\n // - integrity (can be passed, but not handled here)\n // - keepalive (can be passed, but not handled here)\n // - method\n // - mode (can be passed, but not handled here)\n // - priority (can be passed, but not handled here)\n // - redirect (follow|error|manual) (can be passed, but not handled here)\n // - referrer (can be passed, but not handled here)\n // - referrerPolicy (can be passed, but not handled here)\n // - signal (created based on the timeout option)\n // some of the options are taken from agentOptions\n const fetchOptions = Object.assign({}, DEFAULT_FETCH_PARAMS);\n fetchOptions.headers = {};\n const method = extractMethod(request, opts);\n let url = ensureTrailingSlash(opts.url);\n if (opts.headers) {\n // If user has specified `headers` option, these are copied here. Some headers\n // (Content-Type and Authorization) may be overridden below\n Object.assign(fetchOptions.headers, opts.headers);\n }\n if (method === \"post\") {\n fetchOptions.method = \"POST\";\n Object.assign(fetchOptions.headers, { \"Content-Type\": \"text/json\" });\n }\n else {\n fetchOptions.method = \"GET\";\n // request can't be an array\n url += constructGetUrlPath(request);\n }\n // Add processing parameters as query parameters for GET or POST URL\n url = addProcessingParameters(url, opts);\n // preemptive basic authentication if window.btoa is available\n // otherwise, if \"WWW-Authenticate: Basic realm='realm-name'\" is returned, native browser popup may be displayed\n if (opts.username && opts.password) {\n if (typeof window.btoa === \"function\") {\n fetchOptions.headers[\"Authorization\"] = \"Basic \" + window.btoa(opts.username + \":\" + opts.password);\n }\n else {\n console.warn(\"Can't set \\\"Authorization\\\" header - no btoa() function available\");\n }\n }\n if (opts.timeout != null) {\n fetchOptions.signal = AbortSignal.timeout(opts.timeout);\n }\n let successCb = undefined;\n let errorCb = undefined;\n let fetchErrorCb = undefined;\n if (\"success\" in opts) {\n // we won't be returning anything useful (return Promise<undefined>) and the response will be\n // delivered via the callback\n successCb = constructCallbackDispatcher(opts.success);\n errorCb = constructCallbackDispatcher(opts.error);\n }\n if (\"error\" in opts && !opts.success) {\n // response is ignored, only error callback is used. This also turns off meaningful Promise return value\n successCb = constructCallbackDispatcher(\"ignore\");\n errorCb = constructCallbackDispatcher(opts.error);\n }\n // in both callback and promise mode we can have a global \"fetch error handler\"\n if (!(\"fetchError\" in opts)) {\n // in promise mode however we don't provide a default handler\n if (successCb && errorCb) {\n fetchErrorCb = (_response, reason) => {\n console.warn(reason);\n };\n }\n }\n else if (opts.fetchError === \"ignore\") {\n fetchErrorCb = (_response, _reason) => { };\n }\n else {\n fetchErrorCb = opts.fetchError;\n }\n return { url, fetchOptions, dataType: opts.dataType, resolve: opts.resolve, successCb, errorCb, fetchErrorCb };\n}\n/**\n * Actual `fetch()` call based on pre-calculated arguments\n * @param args arguments used to control `fetch()` call\n */\nasync function performRequest(args) {\n const { url, fetchOptions, dataType, resolve, successCb, errorCb, fetchErrorCb } = args;\n if (successCb && errorCb) {\n // callback mode\n // we'll handle the promise and caller will get a promise resolving to `undefined` after\n // the callbacks are notified.\n // (even if user didn't pass `error` callback, it was configured by `prepareRequest()`)\n // user doesn't have to attach any .then() or .catch() like in promise mode and the returned promise\n // can be ignored\n return fetch(url, fetchOptions)\n .then(async (response) => {\n if (response.status != 200) {\n // Jolokia sends its errors with HTTP 200, so any other HTTP code (even redirect - 30x) is actually an error.\n // with xhr and JQuery we were using ajaxError param, here we use fetchError callback\n fetchErrorCb?.(response, response.statusText);\n return undefined;\n }\n const ct = response.headers.get(\"content-type\");\n if (dataType === \"text\" || !ct || !(ct.startsWith(\"text/json\") || ct.startsWith(\"application/json\"))) {\n // text response - no parsing, single call\n const textResponse = await response.text();\n void successCb(textResponse);\n }\n else {\n // JSON response\n const jsonResponse = await response.json();\n const responses = Array.isArray(jsonResponse) ? jsonResponse : [jsonResponse];\n for (let n = 0; n < responses.length; n++) {\n const resp = responses[n];\n if (Jolokia.isError(resp)) {\n errorCb(resp, n);\n }\n else {\n successCb(resp, n);\n }\n }\n }\n })\n .catch(reason => {\n // this is a fetch() error (more serious than HTTP != 200) - we have no `Response` object to pass, just\n // an exception/reason\n fetchErrorCb?.(null, reason);\n return undefined;\n });\n }\n else {\n // promise mode\n // return a promise to be handled by the caller - whatever the caller wants\n if (resolve === \"response\") {\n // low level Response handling - entirely at caller's side\n return fetch(url, fetchOptions);\n }\n else {\n // Jolokia response handling at caller's side (no access to response headers, status, etc. for HTTP 200)\n const promise = fetch(url, fetchOptions)\n .then(async (response) => {\n if (response.status != 200) {\n // all non-200 responses are thrown as exception to be handled in .catch()\n throw response;\n }\n const ct = response.headers.get(\"content-type\");\n if (dataType === \"text\" || !ct || !(ct.startsWith(\"text/json\") || ct.startsWith(\"application/json\"))) {\n return response.text();\n }\n return response.json();\n });\n if (fetchErrorCb) {\n // we handle serious fetch() exception for user's convenience\n return promise.catch(error => {\n if (error instanceof Response) {\n fetchErrorCb(error, null);\n }\n else {\n fetchErrorCb(null, error);\n }\n return undefined;\n });\n }\n else {\n return promise;\n }\n }\n }\n}\n/**\n * Prepare a ready to use callback to handle any kind (text, json, error) of response from Jolokia\n * @param cb a callback definition\n */\nfunction constructCallbackDispatcher(cb) {\n if (!cb || (Array.isArray(cb) && cb.length == 0)) {\n return (response, index) => {\n let r;\n if (typeof response === \"string\") {\n r = response;\n }\n else {\n r = JSON.stringify(response);\n }\n if (r && r.length > 256) {\n r = r.substring(0, 253) + \"...\";\n }\n console.warn(\"Ignore response\", \"\\\"\" + r + \"\\\"\", \"index=\", index);\n };\n }\n if (cb === \"ignore\") {\n // Ignore the return value entirely\n return () => {\n };\n }\n // turn a callback into round-robin array of callbacks called by response index\n const cbArray = Array.isArray(cb) ? cb : [cb];\n return (response, index) => {\n if (typeof response === \"string\") {\n cbArray[0](response);\n }\n else {\n cbArray[index % cbArray.length](response, index);\n }\n };\n}\n// --- Job helper functions\n/**\n * Prepares a function that will be invoked in poll-fetching for configured jobs and their requests. All jobs and\n * all requests for each job are handled by a single, periodical {@link IJolokia#request} call.\n * Passed parameters come from the scope of {@link IJolokia} constructor function.\n * @param jobs Requests configured for poll-fetching\n * @param agentOptions global Jolokia configuration\n * @returns A function which can be passed to {@link window#setInterval}\n */\nfunction createJolokiaInvocation(jobs, agentOptions) {\n // the function called in window.setInterval needs a fresh state on each call (to operate only on current\n // set of responses for all the requests of each job, but we may prepare some configuration at this stage\n // we don't need actual request data to prepare the request as long as the method is given\n const requestArguments = prepareRequest([], agentOptions, { method: \"post\" });\n return function () {\n // This function will invoke a single Jolokia bulk request. The requests are taken from all the registered\n // jobs and matching responses (or Jolokia error responses) will be passed to related callbacks\n const successCbs = [];\n const errorCbs = [];\n // array of all the requests for all the jobs - fresh copy for a single invocation of window.setInterval's function\n const requests = [];\n // when receiving a bulk response, Jolokia passes an index for the response array as parameter to\n // ResponseCallback/ErrorCallback. But our bulk request here is \"bigger\" - it combines\n // requests of all the jobs. So we need a mapping\n const indexMapping = [];\n // this array has only one callback for each job - if specified (the above arrays are for each request of each job)\n const fetchErrorCbs = [];\n // check all the jobs\n for (const [jobId, job] of jobs) {\n // and we'll prepare callbacks for all the requests within the job\n const reqsLen = job.requests.length;\n if (job.success) {\n // we have separate job.success and job.error and (optionally) job.fetchError callbacks accepting the\n // response(s) (ok or error) array or a single FetchError\n const successCb = constructSuccessJobCallback(job, jobId, indexMapping);\n const errorCb = constructErrorJobCallback(job, jobId, indexMapping);\n for (let idx = 0; idx < reqsLen; idx++) {\n requests.push(prepareJobRequest(job, idx));\n successCbs.push(successCb);\n errorCbs.push(errorCb);\n indexMapping.push(idx);\n }\n // however there's only one fetch error callback (optional) for one job (no \"index\" parameter)\n if (job.fetchError) {\n fetchErrorCbs.push(job.fetchError);\n }\n }\n else if (job.callback) {\n // single job.callback accepting an array of mixed successful and error Jolokia responses\n // or a single FetchError object\n // that's why, when a job has such a callback for N requests, N-1 requests should be handled simply\n // by collecting responses (or errors) and N-th request should be handled by passing the collected\n // array to this callback\n const callbackConfiguration = constructJobCallbackConfiguration(job, jobId);\n // N-1 requests:\n for (let idx = 0; idx < reqsLen - 1; idx++) {\n requests.push(prepareJobRequest(job, idx));\n successCbs.push(callbackConfiguration.cb);\n errorCbs.push(callbackConfiguration.cb);\n // we won't be using index mapping for a job which uses a single `job.callback`\n indexMapping.push(-1);\n }\n // last request\n requests.push(prepareJobRequest(job, reqsLen - 1));\n successCbs.push(callbackConfiguration.lcb);\n errorCbs.push(callbackConfiguration.lcb);\n indexMapping.push(-1);\n // same callback passed as fetch error handler (should expect the error object instead of an array\n // of success/error Jolokia responses)\n const cb = (response, error) => {\n // pass first non empty argument\n job.callback(response ?? error);\n };\n fetchErrorCbs.push(cb);\n }\n }\n if (requests.length > 0) {\n // POST body is created on each request\n requestArguments.fetchOptions.body = JSON.stringify(requests);\n // callbacks are configured on each request\n requestArguments.successCb = function (response, index) {\n successCbs[index](response, index);\n };\n requestArguments.errorCb = function (response, index) {\n errorCbs[index](response, index);\n };\n requestArguments.fetchErrorCb = function (response, error) {\n if (fetchErrorCbs.length > 0) {\n fetchErrorCbs.forEach(cb => {\n cb(response, error);\n });\n }\n else {\n // no job contains FetchError callback - we need some error handling though\n if (response) {\n console.error(\"Problem executing registered jobs: \", response.status, response.statusText);\n }\n else {\n console.error(\"Problem executing registered jobs: \", error);\n }\n }\n };\n // we can now call remote Jolokia agent using a single request for all the jobs and all the requests\n // within a job\n performRequest(requestArguments).catch((e) => {\n console.warn(\"Problem invoking a poller\", e);\n });\n }\n };\n}\n/**\n * Prepare a callback for handling successful responses for registered jobs\n * @param job a Job with `success` and `error` callbacks configured\n * @param jobId job identifier to be passed to {@link JobResponseCallback}\n * @param indexMapping\n * @returns a normal {@link ResponseCallback} to be passed to {@link IJolokia#request}, but which is job-aware\n */\nfunction constructSuccessJobCallback(job, jobId, indexMapping) {\n if (!job.success) {\n throw \"Expected 'success' callback configured for the job with ID=\" + jobId;\n }\n return function (response, index) {\n // Remember last success callback\n if (job.onlyIfModified) {\n job.lastModified = response.timestamp;\n }\n job.success(response, jobId, indexMapping[index]);\n };\n}\n/**\n * Prepare a callback for handling error responses for registered jobs\n * @param job a Job with `success` and `error` callbacks configured\n * @param jobId job identifier to be passed to {@link JobErrorCallback}\n * @param indexMapping\n * @returns a normal {@link ErrorCallback} to be passed to {@link IJolokia#request}, but which is job-aware\n */\nfunction constructErrorJobCallback(job, jobId, indexMapping) {\n if (!job.error) {\n throw \"Expected 'error' callback configured for the job with ID=\" + jobId;\n }\n return function (response, index) {\n if (response.status === 304) {\n // If we get a \"304 - Not Modified\" 'error', we do nothing\n return;\n }\n else {\n job.error(response, jobId, indexMapping[index]);\n }\n };\n}\n/**\n * Prepare a pair of callbacks for job callback that should receive all the responses. Callback for N-1\n * responses simply collect the responses, and callback for N-th responses collects the responses and passes\n * all them collectively to {@link JobCallback}.\n * @param job a Job with `callback` configured\n * @param jobId job identifier\n * @returns a pair of callbacks to be used for: `cb`. N-1 responses, `lcb`. N-th (last) response\n */\nfunction constructJobCallbackConfiguration(job, jobId) {\n if (!job.callback) {\n throw \"Expected 'callback' configured for the job with ID=\" + jobId;\n }\n const allResponses = [];\n let lastModified = 0;\n return {\n cb: addResponse,\n lcb: function (response, index) {\n addResponse(response);\n // Callback is called only if at least one non-cached response\n // is obtained. Update job's timestamp internally\n if (allResponses.length > 0) {\n job.lastModified = lastModified;\n // response array is spread into callback parameters. But if the callback accepts a single\n // parameter without spread syntax (...), only first array element will be available!\n job.callback(...allResponses);\n }\n }\n };\n function addResponse(response, _index) {\n // Only remember responses with values and remember lowest timestamp, too.\n if (response.status !== 304) {\n if (lastModified === 0 || (response.timestamp && response.timestamp < lastModified)) {\n if (response.timestamp) {\n lastModified = response.timestamp;\n }\n }\n allResponses.push(response);\n }\n }\n}\n/**\n * Add special configuration for single request of a single job based on current job's state (like lastModified)\n * @param job\n * @param requestIndex\n */\nfunction prepareJobRequest(job, requestIndex) {\n const request = job.requests[requestIndex];\n const config = job.config || {};\n const extraConfig = job.onlyIfModified && job.lastModified ? { ifModifiedSince: job.lastModified } : {};\n request.config = Object.assign({}, config, request.config, extraConfig);\n return request;\n}\n// --- Util functions\n/**\n * Asserts that the value is not null or undefined\n * @param value A value to assert\n * @param message An error message for thrown Error\n * @throws Error in case the value is null or undefined\n */\nfunction assertNotNull(value, message) {\n if (value == null) {\n throw new Error(message);\n }\n}\n/**\n * Extract the HTTP-Method to use and make some sanity checks if the method was provided as part of the options,\n * but is not valid for the given request\n * @param request JSON request object (or array of objects) compliant with\n * {@link https://jolokia.org/reference/html/manual/jolokia_protocol.html|Jolokia protocol} representing the requests\n * to send to remote Jolokia agent.\n * @param params parameters used for sending the request which may override default configuration.\n * @returns an HTTP method for given `request` and `params`\n */\nfunction extractMethod(request, params) {\n const methodGiven = params?.method?.toLowerCase();\n let method;\n if (!request) {\n // let's assume that it's a version GET request\n return \"get\";\n }\n if (methodGiven) {\n if (methodGiven === \"get\") {\n // can't be used for bulk or multi-read requests\n if (Array.isArray(request)) {\n throw new Error(\"Cannot use GET with bulk requests\");\n }\n // if (request.type === \"read\" && Array.isArray(request.attribute)) {\n if (request.type?.toLowerCase() === \"read\" && \"attribute\" in request && Array.isArray(request.attribute)) {\n throw new Error(\"Cannot use GET for read with multiple attributes\");\n }\n if (\"target\" in request) {\n throw new Error(\"Cannot use GET request with proxy mode\");\n }\n if (\"config\" in request) {\n throw new Error(\"Cannot use GET with request specific config\");\n }\n method = \"get\";\n }\n else if (methodGiven !== \"post\") {\n throw new Error(\"Illegal method \\\"\" + methodGiven + \"\\\"\");\n }\n else {\n method = \"post\";\n }\n }\n else {\n // Determine method dynamically\n if (Array.isArray(request)\n || \"config\" in request\n || (request.type?.toLowerCase() === \"read\" && \"attribute\" in request && Array.isArray(request.attribute))\n || \"target\" in request) {\n method = \"post\";\n }\n else {\n method = \"get\";\n }\n }\n return method;\n}\n/**\n * For POST requests it is recommended to have a trailing slash at the URL in order to avoid a redirect which then\n * results in a GET request.\n * @see https://bugs.eclipse.org/bugs/show_bug.cgi?id=331194#c1\n * @param url Jolokia agent URL\n * @returns URL location with \"/\" appended\n */\nfunction ensureTrailingSlash(url) {\n // Squeeze any URL to a single one, optionally adding one\n const v = typeof url === \"string\" ? url : url.href;\n let trimEnd = v.length;\n while (v[trimEnd - 1] === '/') {\n trimEnd--;\n }\n return v.substring(0, trimEnd) + '/';\n}\n/**\n * Add processing parameters given as request options\n * to an URL as GET query parameters\n * @param url URL for GET or POST request\n * @param opts Request configuration object\n * @returns url with query parameters applied\n */\nfunction addProcessingParameters(url, opts) {\n let sep = url.indexOf(\"?\") > 0 ? \"&\" : \"?\";\n PROCESSING_PARAMS.forEach(function (key) {\n const v = opts[key];\n if (v != null) {\n url += sep + key + \"=\" + v;\n sep = \"&\";\n }\n });\n return url;\n}\n/**\n * Converts a value to a string for passing it to the Jolokia agent via\n * a `GET` request (`write`, `exec`). Value can be either a single object or an array\n * @param value A value to write or pass to `exec` operation\n * @returns Normalized value for Jolokia `write`/`exec` operation\n */\nfunction valueToString(value) {\n if (value == null) {\n return \"[null]\";\n }\n if (Array.isArray(value)) {\n let ret = \"\";\n for (let i = 0; i < value.length; i++) {\n const v = value[i];\n ret += v == null ? \"[null]\" : singleValueToString(value[i]);\n if (i < value.length - 1) {\n ret += \",\";\n }\n }\n return ret;\n }\n else {\n return singleValueToString(value);\n }\n}\n/**\n * Single value conversion for write/exec GET requests\n * @param value A value to normalize\n * @returns normalized value\n */\nfunction singleValueToString(value) {\n if (typeof value === \"string\" && value.length === 0) {\n return \"\\\"\\\"\";\n }\n else {\n return value.toString();\n }\n}\n// --- Functions and helpers for GET path construction\n/**\n * Create the URL used for a GET request\n * @param request request object sent using `GET`, where type, mbean and additional information is encoded\n * in URL GET request\n * @returns GET URL to be used with remote Jolokia agent\n */\nfunction constructGetUrlPath(request) {\n let type = request.type;\n assertNotNull(type, \"No request type given for building a GET request\");\n type = type.toLowerCase();\n const extractor = GET_URL_EXTRACTORS[type];\n assertNotNull(extractor, \"Unknown request type \" + type);\n const result = extractor(request);\n const parts = result.parts || [];\n let url = type;\n parts.forEach(function (v) {\n url += \"/\" + Jolokia.escape(v);\n });\n if (result.path) {\n url += (result.path[0] === '/' ? \"\" : \"/\") + result.path;\n }\n return url;\n}\n/**\n * Extractors used for preparing a GET request, i.e. for creating a stack\n * of arguments which gets appended to create the proper access URL.\n * key: lowercase request type.\n * The return value is an object with two properties: The 'parts' to glue together, where\n * each part gets escaped and a 'path' which is appended literally\n * Note: I could not create a good TS base type for ReadRequest, WriteRequest, ... and at the same time use it as\n * parameter of a function used as value type of GET_URL_EXTRACTORS - I had problems defining particular\n * functions (under keys `read`, `write`, ...) with types derived from BaseRequest...\n */\nconst GET_URL_EXTRACTORS = {\n /**\n * Function to prepare GET URL for `read` Jolokia request\n * @param request Jolokia request object\n * @returns URL configuration object for Jolokia `read` GET request\n */\n \"read\": function (request) {\n const path = Array.isArray(request.path) ? request.path.map(Jolokia.escape).join(\"/\") : request.path;\n if (request.attribute == null) {\n // Path gets ignored for multiple attribute fetch\n return { parts: [request.mbean, \"*\"], path };\n }\n else {\n // can't use attribute array with GET\n return { parts: [request.mbean, request.attribute], path };\n }\n },\n /**\n * Function to prepare GET URL for `write` Jolokia request\n * @param request Jolokia request object\n * @returns URL configuration object for Jolokia `write` GET request\n */\n \"write\": function (request) {\n const path = Array.isArray(request.path) ? request.path.map(Jolokia.escape).join(\"/\") : request.path;\n return { parts: [request.mbean, request.attribute, valueToString(request.value)], path };\n },\n /**\n * Function to prepare GET URL for `exec` Jolokia request\n * @param request Jolokia request object\n * @returns URL configuration object for Jolokia `exec` GET request\n */\n \"exec\": function (request) {\n const ret = [request.mbean, request.operation];\n if (request.arguments && request.arguments.length > 0) {\n request.arguments.forEach(function (value) {\n ret.push(valueToString(value));\n });\n }\n return { parts: ret };\n },\n /**\n * Function to prepare GET URL for `version` Jolokia request\n * @param _request Jolokia request object\n * @returns URL configuration object for Jolokia `version` GET request\n */\n \"version\": function (_request) {\n return {};\n },\n /**\n * Function to prepare GET URL for `search` Jolokia request\n * @param request Jolokia request object\n * @returns URL configuration object for Jolokia `search` GET request\n */\n \"search\": function (request) {\n return { parts: [request.mbean] };\n },\n /**\n * Function to prepare GET URL for `list` Jolokia request\n * @param request Jolokia request object\n * @returns URL configuration object for Jolokia `list` GET request\n */\n \"list\": function (request) {\n return { path: request.path };\n },\n /**\n * Function to prepare GET URL for `notification` Jolokia request\n * @param request Jolokia request object\n * @returns URL configuration object for Jolokia `notification` GET request\n */\n \"notification\": function (request) {\n switch (request.command) {\n case \"register\":\n return { parts: [\"register\"] };\n case \"add\": {\n const ret = [\"add\", valueToString(request.client), valueToString(request.mode), valueToString(request.mbean)];\n const extra = [];\n if (request.handback) {\n extra.push(valueToString(request.handback));\n }\n if (request.config) {\n extra.push(valueToString(request.config));\n }\n else if (extra.length) {\n extra.push(\"{}\");\n }\n if (request.filter) {\n extra.push(valueToString(request.filter));\n }\n else if (extra.length) {\n extra.push(\" \");\n }\n return { parts: ret.concat(extra.reverse()) };\n }\n case \"remove\":\n return { parts: [\"remove\", valueToString(request.client), valueToString(request.handle)] };\n case \"unregister\":\n return { parts: [\"unregister\", valueToString(request.client)] };\n case \"list\":\n return { parts: [\"list\", valueToString(request.client)] };\n case \"ping\":\n return { parts: [\"ping\", valueToString(request.client)] };\n case \"open\":\n return { parts: [\"open\", valueToString(request.client), valueToString(request.mode)] };\n default:\n throw new Error(\"Unknown command '\" + request.command + \"'\");\n }\n }\n};\n/**\n * Get notification mode with a sane default based on which is provided by the backend\n */\nfunction extractNotificationMode(client, opts) {\n const backends = client.backend || {};\n // A mode given takes precedence\n let mode = opts.mode;\n if (!mode) {\n // Try 'sse' first as default then 'pull'.\n mode = backends[\"sse\"] ? \"sse\" : (backends[\"pull\"] ? \"pull\" : undefined);\n // If only one backend is configured, that's the default\n if (!mode && backends.length === 1) {\n return Object.keys(backends)[0];\n }\n }\n if (!mode || !backends[mode]) {\n throw new Error(\"Notification mode must be one of [\" + Object.keys(backends) + \"]\"\n + (mode ? \", and not \\\"\" + mode + \"\\\"\" : \"\"));\n }\n return mode;\n}\n\nexport { Jolokia as default };\n","import { AIMessage } from '@langchain/core/messages'\nimport { aiService } from '../common/ai-service'\n\nconst SYSTEM_MESSAGES = {\n diagnosis: `You are a helpful assistant diagnosing a JMX MBean based on its attribute values.\nGiven the following ObjectName and attribute values, identify any potential issues or anomalies.\nProvide suggestions for further investigation or resolution if applicable.\nRespond in a concise manner.`,\n} as const\n\nexport interface IJmxAiService {\n diagnoseMessage(objectName: string, attributes: string): string\n}\n\nclass JmxAiService implements IJmxAiService {\n systemMessage(): string {\n return SYSTEM_MESSAGES.diagnosis\n }\n\n diagnoseMessage(objectName: string, attributes: string): string {\n return `ObjectName:\n~~~\n${objectName}\n~~~\nAttribute values:\n~~~\n${attributes}\n~~~\nWhat potential issues or anomalies do you see?`\n }\n}\n\nexport const jmxAiService = new JmxAiService()\n","import { AttributeModal, AttributeValues, HawtioEmptyCard, HawtioLoadingCard } from '@hawtio/react'\nimport { PageContext } from '@hawtio/react/ui'\nimport { MessageProps } from '@patternfly/chatbot/dist/esm/Message'\nimport {\n Button,\n Drawer,\n DrawerContent,\n DrawerContentBody,\n Panel,\n Toolbar,\n ToolbarContent,\n ToolbarItem,\n} from '@patternfly/react-core'\nimport { MonitoringIcon } from '@patternfly/react-icons'\nimport { Table, Tbody, Td, Th, Thead, ThProps, Tr } from '@patternfly/react-table'\nimport Jolokia, { JolokiaErrorResponse, JolokiaFetchErrorResponse, JolokiaSuccessResponse } from 'jolokia.js'\nimport React, { useContext, useEffect, useState } from 'react'\nimport { aiService } from '../../common/ai-service'\nimport { ChatbotContext, MBeanTreeContext } from '../context'\nimport { ThinkInfo, ToolCallsApprove, ToolCallsInfo } from '../DiagnosisChatbot'\nimport { log } from '../globals'\nimport { jmxAiService } from '../jmx-ai-service'\nimport { isObject, objectSorter } from '../util'\nimport { attributeService } from './attribute-service'\n\nexport const Attributes: React.FC = () => {\n const { selectedNode } = useContext(MBeanTreeContext)\n const [attributes, setAttributes] = useState<AttributeValues>({})\n const [isReading, setIsReading] = useState(true)\n const [isModalOpen, setIsModalOpen] = useState(false)\n const [sortDirection, setSortDirection] = useState<'asc' | 'desc'>('asc')\n const [selected, setSelected] = useState({ name: '', value: '' })\n const [reload, setReload] = useState(false)\n\n useEffect(() => {\n if (!selectedNode || !selectedNode.mbean || !selectedNode.objectName) {\n return\n }\n\n setIsReading(true)\n const { objectName } = selectedNode\n attributeService.readWithCallback(objectName, attrs => {\n setAttributes(attrs)\n setIsReading(false)\n })\n\n attributeService.register(\n { type: 'read', mbean: objectName },\n (response: JolokiaSuccessResponse | JolokiaErrorResponse | JolokiaFetchErrorResponse) => {\n if (response && !Jolokia.isError(response as JolokiaSuccessResponse | JolokiaErrorResponse)) {\n setAttributes((response as JolokiaSuccessResponse).value as AttributeValues)\n }\n },\n )\n\n return () => attributeService.unregisterAll()\n }, [selectedNode])\n\n useEffect(() => {\n if (!selectedNode || !selectedNode.mbean || !selectedNode.objectName || !reload) {\n return\n }\n\n setIsReading(true)\n const { objectName } = selectedNode\n attributeService.readWithCallback(objectName, attrs => {\n setAttributes(attrs)\n setIsReading(false)\n })\n\n setReload(false)\n }, [selectedNode, reload])\n\n if (!selectedNode || !selectedNode.mbean || !selectedNode.objectName) {\n return null\n }\n\n if (isReading) {\n return <HawtioLoadingCard />\n }\n\n const rows: { name: string; value: string }[] = Object.entries(attributes).map(([name, value]) => ({\n name: name,\n value: isObject(value) ? JSON.stringify(value) : String(value),\n }))\n\n if (rows.length === 0) {\n return <HawtioEmptyCard message='This MBean has no attributes.' />\n }\n\n const selectAttribute = (attribute: { name: string; value: string }) => {\n setSelected(attribute)\n if (!isModalOpen) {\n setIsModalOpen(true)\n }\n }\n\n const getSortParams = (): ThProps['sort'] => ({\n sortBy: {\n index: 0,\n direction: sortDirection,\n defaultDirection: 'asc', // starting sort direction when first sorting a column. Defaults to 'asc'\n },\n onSort: (_event, _index, direction) => {\n setSortDirection(direction)\n },\n columnIndex: 0,\n })\n\n const panelContent = (\n <AttributeModal\n isOpen={isModalOpen}\n onClose={() => setIsModalOpen(false)}\n onUpdate={() => setReload(true)}\n input={selected}\n />\n )\n\n const attributesTable = (\n <div id='attribute-table-with-panel'>\n <AiJmxToolbar attributes={attributes} />\n <Table aria-label='Attributes' variant='compact'>\n <Thead>\n <Tr>\n <Th sort={getSortParams()}>Attribute</Th>\n <Th>Value</Th>\n </Tr>\n </Thead>\n <Tbody>\n {rows\n .sort((a, b) => objectSorter(a.name, b.name, sortDirection === 'desc'))\n .map((att, index) => (\n <Tr\n key={att.name + '-' + index}\n isClickable\n isRowSelected={selected.name === att.name}\n onRowClick={() => selectAttribute(att)}\n >\n <Td>{att.name}</Td>\n <Td>{att.value}</Td>\n </Tr>\n ))}\n </Tbody>\n </Table>\n </div>\n )\n\n return (\n <Panel>\n <Drawer isExpanded={isModalOpen} className='pf-m-inline-on-2xl'>\n <DrawerContent panelContent={panelContent}>\n <DrawerContentBody hasPadding>{attributesTable}</DrawerContentBody>\n </DrawerContent>\n </Drawer>\n </Panel>\n )\n}\n\nconst AiJmxToolbar: React.FC<{\n attributes: AttributeValues\n}> = ({ attributes }) => {\n const { selectedNode } = useContext(MBeanTreeContext)\n const { username } = useContext(PageContext)\n const { setAnnouncement, setIsChatbotOpen, updateConversations } = useContext(ChatbotContext)\n\n if (!selectedNode || !selectedNode.mbean || !selectedNode.objectName) {\n return null\n }\n const { objectName } = selectedNode\n\n const diagnose = async () => {\n setIsChatbotOpen(true)\n const attrsValue = JSON.stringify(attributes)\n log.debug('Attributes:', attrsValue)\n\n const systemMessage = jmxAiService.systemMessage()\n const diagnoseMessage = jmxAiService.diagnoseMessage(objectName, attrsValue)\n const newMessages: MessageProps[] = []\n newMessages.push(aiService.createUserMessage(username, diagnoseMessage))\n newMessages.push(aiService.createLoadingBotMessage())\n updateConversations(newMessages, `Diagnose ${objectName}`)\n setAnnouncement('Diagnosis in progress...')\n log.debug('diagnose - new messages:', newMessages)\n\n const dialogId = newMessages[0]!.id!\n const answer = await aiService.newChat(dialogId, diagnoseMessage, systemMessage)\n const loadedMessages: MessageProps[] = []\n loadedMessages.push(...newMessages)\n log.debug('diagnose - loaded messages:', loadedMessages)\n // Remove the loading message\n loadedMessages.pop()\n const botMessage = aiService.toBotMessage(answer, ThinkInfo, ToolCallsInfo, ToolCallsApprove)\n loadedMessages.push(botMessage)\n updateConversations(loadedMessages)\n setAnnouncement('Diagnosis complete.')\n }\n\n return (\n <Toolbar id='ai-jmx-toolbar'>\n <ToolbarContent>\n <ToolbarItem>\n <Button variant='primary' size='sm' icon={<MonitoringIcon />} onClick={diagnose}>\n Diagnose\n </Button>\n </ToolbarItem>\n </ToolbarContent>\n </Toolbar>\n )\n}\n","export { AttributeModal } from './AttributeModal'\nexport { Attributes } from './Attributes'\n","import { AttributeTable, Chart, JmxContentMBeans, MBeanNode, Operations } from '@hawtio/react'\nimport {\n Button,\n Content,\n Drawer,\n DrawerContent,\n DrawerContentBody,\n DrawerPanelBody,\n DrawerPanelContent,\n EmptyState,\n Nav,\n NavItem,\n NavList,\n PageGroup,\n PageSection,\n Title,\n Toolbar,\n ToolbarItem,\n} from '@patternfly/react-core'\nimport { right } from '@patternfly/react-core/dist/esm/helpers/Popper/thirdparty/popper-core'\nimport { CubesIcon } from '@patternfly/react-icons/dist/esm/icons/cubes-icon'\nimport React, { useContext, useRef } from 'react'\nimport { Navigate, NavLink, Route, Routes, useLocation } from 'react-router-dom'\nimport { DiagnosisChatbot } from './DiagnosisChatbot'\nimport './JmxContent.css'\nimport { Attributes } from './attributes'\nimport { ChatbotContext, MBeanTreeContext, pluginPathWithNodeId, useChatbot } from './context'\nimport { pluginPath } from './globals'\n\nexport const JmxContent: React.FunctionComponent = () => {\n const { selectedNode } = useContext(MBeanTreeContext)\n const { pathname, search } = useLocation()\n const chatbotContext = useChatbot()\n const { isChatbotOpen, setIsChatbotOpen } = chatbotContext\n const drawerRef = useRef<HTMLDivElement>(undefined)\n\n if (!selectedNode) {\n return (\n <PageSection hasBodyWrapper={false} isFilled>\n <EmptyState headingLevel='h1' icon={CubesIcon} titleText='Select MBean' variant='full' />\n </PageSection>\n )\n }\n\n const mBeanApplicable = (node: MBeanNode) => Boolean(node.objectName)\n const mBeanCollectionApplicable = (node: MBeanNode) => Boolean(node.children?.every(child => child.objectName))\n const hasAnyApplicableMBean = (node: MBeanNode) =>\n Boolean(node.objectName) || Boolean(node.children?.some(child => child.objectName))\n\n const tableSelector = (node: MBeanNode) => {\n const tablePriorityList = [\n { condition: mBeanApplicable, element: Attributes },\n { condition: mBeanCollectionApplicable, element: AttributeTable },\n ]\n\n return tablePriorityList.find(entry => entry.condition(node))?.element ?? JmxContentMBeans\n }\n\n const allNavItems = [\n { id: 'attributes', title: 'Attributes', component: tableSelector(selectedNode), isApplicable: () => true },\n { id: 'operations', title: 'Operations', component: Operations, isApplicable: mBeanApplicable },\n { id: 'chart', title: 'Chart', component: Chart, isApplicable: hasAnyApplicableMBean },\n ]\n\n /* Filter the nav items to those applicable to the selected node */\n const navItems = allNavItems.filter(nav => nav.isApplicable(selectedNode))\n\n const searchWithNid = (pluginPathWithNodeId(selectedNode, new URLSearchParams(search)) as { search: string }).search\n\n const mbeanNav = (\n <Nav aria-label='MBean Nav' variant='horizontal-subnav'>\n <NavList>\n {navItems.map(nav => (\n <NavItem key={nav.id} isActive={pathname === `${pluginPath}/${nav.id}`}>\n <NavLink to={{ pathname: nav.id, search }}>{nav.title}</NavLink>\n </NavItem>\n ))}\n </NavList>\n </Nav>\n )\n\n const mbeanRoutes = navItems.map(nav => (\n <Route key={nav.id} path={nav.id} element={React.createElement(nav.component)} />\n ))\n\n const jmxAiToolbar = (\n <Toolbar id='jmx-ai-toolbar' style={{ float: right }}>\n <ToolbarItem>\n <Button variant='secondary' size='sm' onClick={() => setIsChatbotOpen(!isChatbotOpen)}>\n Chat\n </Button>\n </ToolbarItem>\n </Toolbar>\n )\n\n const jmxContent = (\n <PageGroup id='jmx-content'>\n <PageSection id='jmx-content-header' hasBodyWrapper={false}>\n {jmxAiToolbar}\n <Title headingLevel='h1'>{selectedNode.name}</Title>\n <Content component='small'>{selectedNode.objectName}</Content>\n </PageSection>\n <PageSection type='tabs' hasBodyWrapper={false}>\n {mbeanNav}\n </PageSection>\n <PageSection\n id='jmx-content-main'\n padding={{ default: 'noPadding' }}\n hasOverflowScroll\n aria-label='jmx-content-main'\n hasBodyWrapper={false}\n >\n <Routes>\n {mbeanRoutes}\n <Route\n key='root'\n path='/'\n element={<Navigate to={{ pathname: navItems[0]?.id ?? '', search: searchWithNid }} />}\n />\n </Routes>\n </PageSection>\n </PageGroup>\n )\n\n const onDrawerExpand = () => {\n drawerRef.current && drawerRef.current.focus()\n }\n\n const panelContent = (\n <DrawerPanelContent isResizable defaultSize='500px' minSize='200px'>\n <DrawerPanelBody>\n <DiagnosisChatbot />\n </DrawerPanelBody>\n </DrawerPanelContent>\n )\n\n return (\n <ChatbotContext.Provider value={chatbotContext}>\n <Drawer isExpanded={isChatbotOpen} isInline onExpand={onDrawerExpand}>\n <DrawerContent panelContent={panelContent}>\n <DrawerContentBody>{jmxContent}</DrawerContentBody>\n </DrawerContent>\n </Drawer>\n </ChatbotContext.Provider>\n )\n}\n","#jmx-tree-view.pf-v6-c-tree-view {\n --pf-v6-c-tree-view__node--indent--base: 1rem;\n --pf-v6-c-tree-view__node--nested-indent--base: 1rem;\n --pf-v6-c-tree-view--m-guides__node--before--Width: 1.25rem;\n --pf-v6-c-tree-view--m-guides__node--before--Height: 1px;\n --pf-v6-c-tree-view--m-guides__node--before--InsetBlockStart: 0.625rem;\n --pf-v6-c-tree-view--m-guides__node--before--BackgroundColor: var(--pf-t--global--border--color--default);\n --pf-v6-c-tree-view--m-guides__list-item--before--Width: 1px;\n --pf-v6-c-tree-view--m-guides__list-item--before--Height: 100%;\n --pf-v6-c-tree-view--m-guides__list-item--before--BackgroundColor: var(--pf-t--global--border--color--default);\n --pf-v6-c-tree-view--m-guides__list-item--last-child--before--Height: 0.68rem;\n --pf-v6-c-tree-view--m-guides__list-node--guide-width--base: 0.5rem;\n --pf-v6-c-tree-view--m-guides--guide-left--base--offset: 1.4rem;\n}\n#jmx-tree-view.pf-v6-c-tree-view .pf-m-selectable {\n --pf-v6-c-tree-view--m-guides__node--before--Width: 0.5rem;\n}\n#jmx-tree-view .pf-v6-c-tree-view__list {\n height: 100%;\n}\n\n#jmx-tree-view > .pf-v6-c-tree-view__list {\n max-height: 83vh;\n overflow: auto;\n}\n\n#jmx-tree-view .pf-v6-c-tree-view__node {\n padding-top: 0;\n padding-bottom: 0;\n align-items: center;\n}\n\n#jmx-tree-view .pf-v6-c-tree-view__node:has(button.pf-v6-c-tree-view__node-toggle) {\n --pf-v6-c-tree-view--m-guides__node--before--Width: 0.5rem;\n}\n\n#jmx-tree-view .pf-v6-c-tree-view__node-toggle {\n padding: 0;\n}\n\n#jmx-tree-view .pf-v6-c-tree-view__node-text {\n padding: 0 4px;\n font-size: small;\n}\n\n#jmx-tree-view .pf-v6-c-tree-view__node-icon {\n padding: 0 4px;\n flex-shrink: 0;\n}\n\n#jmx-tree-view .pf-v6-c-tree-view__node-text {\n overflow-x: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n","import { MBeanNode, MBeanTree, PluginTreeViewToolbar } from '@hawtio/react'\nimport { TreeView, TreeViewDataItem } from '@patternfly/react-core'\nimport React, { ChangeEvent, useContext, useEffect, useState } from 'react'\nimport { useNavigate } from 'react-router-dom'\nimport './JmxTreeView.css'\nimport { MBeanTreeContext, pluginPathWithNodeId } from './context'\n\n/**\n * Expansion requires more than 2 states since the expandAll\n * must be removed completely to defer to the expanded state\n * of each data node\n */\nenum ExpansionValue {\n /**\n * should revert to the expanded state of the data\n */\n Default,\n /**\n * all data should be expanded\n */\n ExpandAll,\n /**\n * all data should be collapsed\n */\n CollapseAll,\n}\n\nexport const JmxTreeView: React.FunctionComponent = () => {\n const { tree, selectedNode, setSelectedNode } = useContext(MBeanTreeContext)\n const [expanded, setExpanded] = useState(ExpansionValue.Default)\n const [filteredTree, setFilteredTree] = useState(tree.getTree())\n const navigate = useNavigate()\n\n /**\n * Listen for changes to the tree that may occur as a result\n * of events being monitored by the Tree:Watcher in workspace\n * eg. new endpoint being created\n */\n useEffect(() => {\n setFilteredTree(tree.getTree())\n }, [tree])\n\n const onSearch = (event: ChangeEvent<HTMLInputElement>) => {\n // Ensure no node from the 'old' filtered is lingering\n setSelectedNode(null)\n setExpanded(ExpansionValue.Default)\n const input = event.target.value\n\n if (!input) setFilteredTree(tree.getTree())\n\n const treeElements = MBeanTree.filter(tree.getTree(), node => node.name.toLowerCase().includes(input.toLowerCase()))\n\n if (treeElements.length === 0) setFilteredTree(tree.getTree())\n else {\n setFilteredTree(treeElements)\n setExpanded(ExpansionValue.ExpandAll)\n }\n }\n\n const onSelect = (event: React.MouseEvent<Element, MouseEvent>, item: TreeViewDataItem) => {\n const node = item as MBeanNode\n setSelectedNode(node)\n navigate(pluginPathWithNodeId(node))\n }\n\n const setAllExpanded = (value: boolean) => {\n setExpanded(value ? ExpansionValue.ExpandAll : ExpansionValue.CollapseAll)\n }\n\n const expandedProp = (): object => {\n switch (expanded) {\n case ExpansionValue.ExpandAll:\n return { allExpanded: true }\n case ExpansionValue.CollapseAll:\n return { allExpanded: false }\n default:\n return {}\n }\n }\n\n return (\n <TreeView\n id='jmx-tree-view'\n data={filteredTree}\n hasGuides={true}\n hasSelectableNodes={true}\n activeItems={selectedNode ? [selectedNode] : []}\n {...expandedProp()}\n onSelect={onSelect}\n toolbar={<PluginTreeViewToolbar onSearch={onSearch} onSetExpanded={setAllExpanded} />}\n />\n )\n}\n","import { EmptyState, PageSection, Spinner } from '@patternfly/react-core'\nimport { CubesIcon } from '@patternfly/react-icons/dist/esm/icons/cubes-icon'\nimport React from 'react'\nimport Split from 'react-split'\nimport { MBeanTreeContext, useMBeanTree } from './context'\nimport './Jmx.css'\nimport { JmxContent } from './JmxContent'\nimport { JmxTreeView } from './JmxTreeView'\n\nexport const Jmx: React.FunctionComponent = () => {\n const { tree, loaded, selectedNode, setSelectedNode } = useMBeanTree()\n\n if (!loaded) {\n return (\n <PageSection hasBodyWrapper={false}>\n <Spinner aria-label='Loading MBean tree' />\n </PageSection>\n )\n }\n\n if (tree.isEmpty()) {\n return (\n <PageSection hasBodyWrapper={false}>\n <EmptyState headingLevel='h1' icon={CubesIcon} titleText='No MBeans found' variant='full' />\n </PageSection>\n )\n }\n\n return (\n <MBeanTreeContext.Provider value={{ tree, selectedNode, setSelectedNode }}>\n <Split className='jmx-split' sizes={[30, 70]} minSize={200} gutterSize={5}>\n <div>\n <JmxTreeView />\n </div>\n <div>\n <JmxContent />\n </div>\n </Split>\n </MBeanTreeContext.Provider>\n )\n}\n","export * from './Jmx'\nexport * from './JmxContent'\nexport * from './JmxTreeView'\n","import { HawtioPlugin, configManager } from '@hawtio/react'\nimport '@patternfly/chatbot/dist/css/main.css'\nimport { aiCommon } from './common'\nimport { jmxAi } from './jmx-ai'\n\n/**\n * The entry function for the plugin exposed to Hawtio.\n *\n * The default name for the function is \"plugin\". If you want to use the name other\n * than the default one, you need to specify the name using {HawtioPlugin#setPluginEntry()}\n * method when registering the plugin to JMX MBean server.\n *\n * <code>\n * HawtioPlugin plugin = new HawtioPlugin();\n * plugin.setPluginEntry(\"registerMyPlugin\");\n * </code>\n *\n * @see src/main/java/io/hawt/example/spring/boot/SampleSpringBootService.java\n */\nexport const plugin: HawtioPlugin = () => {\n aiCommon()\n jmxAi()\n}\n\n// Register the custom plugin version to Hawtio\n// See package.json \"replace-version\" script for how to replace the version placeholder with a real version\nconfigManager.addProductInfo('Hawtio AI Plugin', '__PACKAGE_VERSION_PLACEHOLDER__')\n","import { HawtioPlugin, preferencesRegistry } from '@hawtio/react'\nimport { AiPreferences } from '../common/AiPreferences'\nimport { pluginName, pluginTitle } from './globals'\n\nconst order = 40\n\nexport const aiCommon: HawtioPlugin = () => {\n preferencesRegistry.add(pluginName, pluginTitle, AiPreferences, order)\n}\n","import {\n Button,\n CardBody,\n Form,\n FormGroup,\n FormSection,\n FormSelect,\n FormSelectOption,\n InputGroup,\n InputGroupItem,\n TextInput,\n} from '@patternfly/react-core'\nimport EyeIcon from '@patternfly/react-icons/dist/esm/icons/eye-icon'\nimport EyeSlashIcon from '@patternfly/react-icons/dist/esm/icons/eye-slash-icon'\nimport React, { useState } from 'react'\nimport { MODELS, PROVIDERS } from './ai-model'\nimport { aiPreferencesService } from './ai-preferences-service'\n\nexport const AiPreferences: React.FunctionComponent = () => {\n const [options, setOptions] = useState(aiPreferencesService.loadOptions())\n const [provider, setProvider] = useState<string>(options.model.provider)\n const [models, setModels] = useState(MODELS.filter(m => m.provider === provider))\n const [passwordHidden, setPasswordHidden] = useState(true)\n\n const updateProvider = (provider: string) => {\n setProvider(provider)\n setModels(MODELS.filter(m => m.provider === provider))\n }\n\n const updateModel = (updated: string) => {\n const model = MODELS.find(m => m.id === updated)\n if (model) {\n aiPreferencesService.saveOptions({ model })\n setOptions({ ...options, model })\n }\n }\n\n const updateToken = (updated?: string) => {\n aiPreferencesService.saveOptions({ token: updated })\n setOptions({ ...options, token: updated })\n }\n\n return (\n <CardBody>\n <Form isHorizontal>\n <FormSection title='AI' titleElement='h2'>\n <FormGroup fieldId='ai-prefs-form-provider' label='Provider'>\n <FormSelect\n id='ai-prefs-form-provider-input'\n aria-label='Form Select Provider'\n value={provider}\n onChange={(_, provider) => updateProvider(provider)}\n >\n {PROVIDERS.map((p, i) => (\n <FormSelectOption key={i} value={p} label={p} />\n ))}\n </FormSelect>\n </FormGroup>\n <FormGroup fieldId='ai-prefs-form-model' label='Model'>\n <FormSelect\n id='ai-prefs-form-model-input'\n aria-label='Form Select Model'\n value={options.model.id}\n onChange={(_, id) => updateModel(id)}\n >\n {models.map(m => (\n <FormSelectOption key={m.id} value={m.id} label={m.name} />\n ))}\n </FormSelect>\n </FormGroup>\n <FormGroup fieldId='ai-prefs-form-token' label='API Key / Token (optional)'>\n <InputGroup>\n <InputGroupItem isFill>\n <TextInput\n id='ai-prefs-form-token-input'\n aria-label='Form Select Token'\n type={passwordHidden ? 'password' : 'text'}\n value={options.token}\n onChange={(_, token) => updateToken(token)}\n />\n </InputGroupItem>\n <InputGroupItem>\n <Button\n variant='control'\n onClick={() => setPasswordHidden(!passwordHidden)}\n aria-label={passwordHidden ? 'Show password' : 'Hide password'}\n >\n {passwordHidden ? <EyeIcon /> : <EyeSlashIcon />}\n </Button>\n </InputGroupItem>\n </InputGroup>\n </FormGroup>\n </FormSection>\n </Form>\n </CardBody>\n )\n}\n","import { Logger } from '@hawtio/react'\n\nexport const pluginName = 'hawtio-ai'\nexport const pluginTitle = 'AI'\n\nexport const log = Logger.get(pluginName)\n","import { hawtio, helpRegistry, workspace, type HawtioPlugin } from '@hawtio/react'\nimport { log, pluginName, pluginPath, pluginTitle } from './globals'\nimport help from './help.md'\n\nconst order = 41\n\nexport const jmxAi: HawtioPlugin = () => {\n log.info('Loading', pluginName)\n\n hawtio.addDeferredPlugin(pluginName, async () => {\n return import('./ui').then(({ Jmx }) => {\n return {\n id: pluginName,\n title: pluginTitle,\n path: pluginPath,\n component: Jmx,\n knownQueryParams: ['nid'],\n isActive: async () => workspace.hasMBeans(),\n }\n })\n })\n helpRegistry.add(pluginName, pluginTitle, help, order)\n}\n","# JMX AI - Hawtio AI Plugin\n\nThis view is provided by the Hawtio AI plugin.\n\nIt extends the standard [JMX](./jmx) and adds AI features such as MBean diagnostics to it.\n"],"mappings":"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","names":["userAvatar","patternflyAvatar","content","extraContent","exports","exports","Fragment","exports","module","exports","module","order2","exports","module","exports","module","exports","module","exports","module","i","checker","exports","module","exports","module","document","import_react","SplitWrapper","React","PropTypes","setMessages","messages","import_react","import_react_core","import_react","import_jsx_runtime","setMessages","Chatbot","ChatbotConversationHistoryNav","ChatbotHeader","ChatbotContent","MessageBox","React","Message","ChatbotFooter","MessageBar","WrenchIcon","toolCalls","import_react","import_react","import_react_core","import_jsx_runtime","import_react","import_ui","import_react_core","import_react_icons","import_jsx_runtime","import_react","import_react_core","import_react_router_dom","import_jsx_runtime","init_JmxContent","React","import_react","import_react_core","import_react_router_dom","import_jsx_runtime","init_JmxTreeView","import_react_core","import_cubes_icon","import_jsx_runtime","init_Jmx","init_JmxContent","init_JmxTreeView","init_Jmx","init_JmxContent","init_JmxTreeView","import_react","import_react","import_react","provider","EyeIcon","EyeSlashIcon","import_react","pluginName","pluginTitle","log","pluginName","pluginTitle","import_react","order","Jmx"]}