mito-ai 0.1.57__py3-none-any.whl → 0.1.59__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. mito_ai/__init__.py +19 -22
  2. mito_ai/_version.py +1 -1
  3. mito_ai/anthropic_client.py +24 -14
  4. mito_ai/chart_wizard/handlers.py +78 -17
  5. mito_ai/chart_wizard/urls.py +8 -5
  6. mito_ai/completions/completion_handlers/agent_auto_error_fixup_handler.py +6 -8
  7. mito_ai/completions/completion_handlers/agent_execution_handler.py +6 -8
  8. mito_ai/completions/completion_handlers/chat_completion_handler.py +13 -17
  9. mito_ai/completions/completion_handlers/code_explain_handler.py +13 -17
  10. mito_ai/completions/completion_handlers/completion_handler.py +3 -5
  11. mito_ai/completions/completion_handlers/inline_completer_handler.py +5 -6
  12. mito_ai/completions/completion_handlers/scratchpad_result_handler.py +6 -8
  13. mito_ai/completions/completion_handlers/smart_debug_handler.py +13 -17
  14. mito_ai/completions/completion_handlers/utils.py +3 -7
  15. mito_ai/completions/handlers.py +32 -22
  16. mito_ai/completions/message_history.py +8 -10
  17. mito_ai/completions/prompt_builders/chart_add_field_prompt.py +35 -0
  18. mito_ai/completions/prompt_builders/prompt_constants.py +2 -0
  19. mito_ai/constants.py +31 -2
  20. mito_ai/enterprise/__init__.py +1 -1
  21. mito_ai/enterprise/litellm_client.py +144 -0
  22. mito_ai/enterprise/utils.py +16 -2
  23. mito_ai/log/handlers.py +1 -1
  24. mito_ai/openai_client.py +36 -96
  25. mito_ai/provider_manager.py +420 -0
  26. mito_ai/settings/enterprise_handler.py +26 -0
  27. mito_ai/settings/urls.py +2 -0
  28. mito_ai/streamlit_conversion/agent_utils.py +2 -30
  29. mito_ai/streamlit_conversion/streamlit_agent_handler.py +48 -46
  30. mito_ai/streamlit_preview/handlers.py +6 -3
  31. mito_ai/streamlit_preview/urls.py +5 -3
  32. mito_ai/tests/message_history/test_generate_short_chat_name.py +103 -28
  33. mito_ai/tests/open_ai_utils_test.py +34 -36
  34. mito_ai/tests/providers/test_anthropic_client.py +174 -16
  35. mito_ai/tests/providers/test_azure.py +15 -15
  36. mito_ai/tests/providers/test_capabilities.py +14 -17
  37. mito_ai/tests/providers/test_gemini_client.py +14 -13
  38. mito_ai/tests/providers/test_model_resolution.py +145 -89
  39. mito_ai/tests/providers/test_openai_client.py +209 -13
  40. mito_ai/tests/providers/test_provider_limits.py +5 -5
  41. mito_ai/tests/providers/test_providers.py +229 -51
  42. mito_ai/tests/providers/test_retry_logic.py +13 -22
  43. mito_ai/tests/providers/utils.py +4 -4
  44. mito_ai/tests/streamlit_conversion/test_streamlit_agent_handler.py +57 -85
  45. mito_ai/tests/streamlit_preview/test_streamlit_preview_handler.py +4 -1
  46. mito_ai/tests/test_constants.py +90 -0
  47. mito_ai/tests/test_enterprise_mode.py +217 -0
  48. mito_ai/tests/test_model_utils.py +362 -0
  49. mito_ai/utils/anthropic_utils.py +8 -6
  50. mito_ai/utils/gemini_utils.py +0 -3
  51. mito_ai/utils/litellm_utils.py +84 -0
  52. mito_ai/utils/model_utils.py +257 -0
  53. mito_ai/utils/open_ai_utils.py +29 -41
  54. mito_ai/utils/provider_utils.py +13 -29
  55. mito_ai/utils/telemetry_utils.py +14 -2
  56. {mito_ai-0.1.57.data → mito_ai-0.1.59.data}/data/share/jupyter/labextensions/mito_ai/build_log.json +102 -102
  57. {mito_ai-0.1.57.data → mito_ai-0.1.59.data}/data/share/jupyter/labextensions/mito_ai/package.json +2 -2
  58. {mito_ai-0.1.57.data → mito_ai-0.1.59.data}/data/share/jupyter/labextensions/mito_ai/schemas/mito_ai/package.json.orig +1 -1
  59. mito_ai-0.1.57.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.9d26322f3e78beb2b666.js → mito_ai-0.1.59.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.44c109c7be36fb884d25.js +1059 -144
  60. mito_ai-0.1.59.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.44c109c7be36fb884d25.js.map +1 -0
  61. mito_ai-0.1.57.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.79c1ea8a3cda73a4cb6f.js → mito_ai-0.1.59.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.f7decebaf69618541e0f.js +17 -17
  62. mito_ai-0.1.57.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.79c1ea8a3cda73a4cb6f.js.map → mito_ai-0.1.59.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.f7decebaf69618541e0f.js.map +1 -1
  63. {mito_ai-0.1.57.data → mito_ai-0.1.59.data}/data/share/jupyter/labextensions/mito_ai/themes/mito_ai/index.css +78 -78
  64. {mito_ai-0.1.57.dist-info → mito_ai-0.1.59.dist-info}/METADATA +2 -1
  65. {mito_ai-0.1.57.dist-info → mito_ai-0.1.59.dist-info}/RECORD +90 -83
  66. mito_ai/completions/providers.py +0 -284
  67. mito_ai-0.1.57.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.9d26322f3e78beb2b666.js.map +0 -1
  68. {mito_ai-0.1.57.data → mito_ai-0.1.59.data}/data/etc/jupyter/jupyter_server_config.d/mito_ai.json +0 -0
  69. {mito_ai-0.1.57.data → mito_ai-0.1.59.data}/data/share/jupyter/labextensions/mito_ai/schemas/mito_ai/toolbar-buttons.json +0 -0
  70. {mito_ai-0.1.57.data → mito_ai-0.1.59.data}/data/share/jupyter/labextensions/mito_ai/static/node_modules_process_browser_js.4b128e94d31a81ebd209.js +0 -0
  71. {mito_ai-0.1.57.data → mito_ai-0.1.59.data}/data/share/jupyter/labextensions/mito_ai/static/node_modules_process_browser_js.4b128e94d31a81ebd209.js.map +0 -0
  72. {mito_ai-0.1.57.data → mito_ai-0.1.59.data}/data/share/jupyter/labextensions/mito_ai/static/style.js +0 -0
  73. {mito_ai-0.1.57.data → mito_ai-0.1.59.data}/data/share/jupyter/labextensions/mito_ai/static/style_index_js.f5d476ac514294615881.js +0 -0
  74. {mito_ai-0.1.57.data → mito_ai-0.1.59.data}/data/share/jupyter/labextensions/mito_ai/static/style_index_js.f5d476ac514294615881.js.map +0 -0
  75. {mito_ai-0.1.57.data → mito_ai-0.1.59.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_auth_dist_esm_providers_cognito_apis_signOut_mjs-node_module-75790d.688c25857e7b81b1740f.js +0 -0
  76. {mito_ai-0.1.57.data → mito_ai-0.1.59.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_auth_dist_esm_providers_cognito_apis_signOut_mjs-node_module-75790d.688c25857e7b81b1740f.js.map +0 -0
  77. {mito_ai-0.1.57.data → mito_ai-0.1.59.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_auth_dist_esm_providers_cognito_tokenProvider_tokenProvider_-72f1c8.a917210f057fcfe224ad.js +0 -0
  78. {mito_ai-0.1.57.data → mito_ai-0.1.59.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_auth_dist_esm_providers_cognito_tokenProvider_tokenProvider_-72f1c8.a917210f057fcfe224ad.js.map +0 -0
  79. {mito_ai-0.1.57.data → mito_ai-0.1.59.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_dist_esm_index_mjs.6bac1a8c4cc93f15f6b7.js +0 -0
  80. {mito_ai-0.1.57.data → mito_ai-0.1.59.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_dist_esm_index_mjs.6bac1a8c4cc93f15f6b7.js.map +0 -0
  81. {mito_ai-0.1.57.data → mito_ai-0.1.59.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_ui-react_dist_esm_index_mjs.4fcecd65bef9e9847609.js +0 -0
  82. {mito_ai-0.1.57.data → mito_ai-0.1.59.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_ui-react_dist_esm_index_mjs.4fcecd65bef9e9847609.js.map +0 -0
  83. {mito_ai-0.1.57.data → mito_ai-0.1.59.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_react-dom_client_js-node_modules_aws-amplify_ui-react_dist_styles_css.b43d4249e4d3dac9ad7b.js +0 -0
  84. {mito_ai-0.1.57.data → mito_ai-0.1.59.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_react-dom_client_js-node_modules_aws-amplify_ui-react_dist_styles_css.b43d4249e4d3dac9ad7b.js.map +0 -0
  85. {mito_ai-0.1.57.data → mito_ai-0.1.59.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_semver_index_js.3f6754ac5116d47de76b.js +0 -0
  86. {mito_ai-0.1.57.data → mito_ai-0.1.59.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_semver_index_js.3f6754ac5116d47de76b.js.map +0 -0
  87. {mito_ai-0.1.57.data → mito_ai-0.1.59.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_vscode-diff_dist_index_js.ea55f1f9346638aafbcf.js +0 -0
  88. {mito_ai-0.1.57.data → mito_ai-0.1.59.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_vscode-diff_dist_index_js.ea55f1f9346638aafbcf.js.map +0 -0
  89. {mito_ai-0.1.57.data → mito_ai-0.1.59.data}/data/share/jupyter/labextensions/mito_ai/themes/mito_ai/index.js +0 -0
  90. {mito_ai-0.1.57.dist-info → mito_ai-0.1.59.dist-info}/WHEEL +0 -0
  91. {mito_ai-0.1.57.dist-info → mito_ai-0.1.59.dist-info}/entry_points.txt +0 -0
  92. {mito_ai-0.1.57.dist-info → mito_ai-0.1.59.dist-info}/licenses/LICENSE +0 -0
@@ -2162,6 +2162,7 @@ const MarkdownBlock = ({ markdown, renderMimeRegistry, notebookTracker }) => {
2162
2162
  // This ensures re-renders when cells are reordered (even if count stays the same)
2163
2163
  const cellOrderKey = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {
2164
2164
  return Array.from(cellOrder.entries())
2165
+ .filter(([cellId]) => cellId != null) // Filter out entries with undefined/null keys
2165
2166
  .sort((a, b) => a[0].localeCompare(b[0])) // Sort by cellId for stable string
2166
2167
  .map(([cellId, cellNumber]) => `${cellId}:${cellNumber}`)
2167
2168
  .join(',');
@@ -7417,6 +7418,164 @@ const getAppNameFromNotebookID = (notebookID) => {
7417
7418
  };
7418
7419
 
7419
7420
 
7421
+ /***/ }),
7422
+
7423
+ /***/ "./lib/Extensions/ChartWizard/AddFieldButton.js":
7424
+ /*!******************************************************!*\
7425
+ !*** ./lib/Extensions/ChartWizard/AddFieldButton.js ***!
7426
+ \******************************************************/
7427
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
7428
+
7429
+ __webpack_require__.r(__webpack_exports__);
7430
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
7431
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
7432
+ /* harmony export */ });
7433
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
7434
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
7435
+ /* harmony import */ var _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @jupyterlab/apputils */ "webpack/sharing/consume/default/@jupyterlab/apputils");
7436
+ /* harmony import */ var _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__);
7437
+ /* harmony import */ var _utils_parser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/parser */ "./lib/Extensions/ChartWizard/utils/parser.js");
7438
+ /* harmony import */ var _restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../restAPI/RestAPI */ "./lib/restAPI/RestAPI.js");
7439
+ /* harmony import */ var _utils_strings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../utils/strings */ "./lib/utils/strings.js");
7440
+ /* harmony import */ var _style_AddFieldButton_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../style/AddFieldButton.css */ "./style/AddFieldButton.css");
7441
+ /*
7442
+ * Copyright (c) Saga Inc.
7443
+ * Distributed under the terms of the GNU Affero General Public License v3.0 License.
7444
+ */
7445
+
7446
+
7447
+
7448
+
7449
+
7450
+
7451
+ /**
7452
+ * Component that renders a button to add a new field to the chart configuration.
7453
+ * When clicked, prompts the user for a description and uses LLM to add the field.
7454
+ */
7455
+ const AddFieldButton = ({ code, onFieldAdded, clearPendingUpdate, onLoadingStateChange }) => {
7456
+ /**
7457
+ * Handles adding a new field to the chart configuration.
7458
+ */
7459
+ const handleAddField = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {
7460
+ if (!code) {
7461
+ _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.Notification.emit('No source code available', 'error', {
7462
+ autoClose: 3000
7463
+ });
7464
+ return;
7465
+ }
7466
+ // Create a component that manages its own input state
7467
+ // Use a ref to store the value so we can access it after dialog closes
7468
+ const inputValueRef = { current: '' };
7469
+ const InputDialogBody = () => {
7470
+ const [value, setValue] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('');
7471
+ const textareaRef = react__WEBPACK_IMPORTED_MODULE_0___default().useRef(null);
7472
+ (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
7473
+ // Focus the textarea when component mounts
7474
+ // Use a small timeout to ensure the dialog is fully rendered and focusable
7475
+ const timeoutId = setTimeout(() => {
7476
+ if (textareaRef.current) {
7477
+ textareaRef.current.focus();
7478
+ // Also select any existing text for better UX
7479
+ textareaRef.current.select();
7480
+ }
7481
+ }, 100);
7482
+ return () => clearTimeout(timeoutId);
7483
+ }, []);
7484
+ const handleChange = (e) => {
7485
+ const newValue = e.target.value;
7486
+ setValue(newValue);
7487
+ inputValueRef.current = newValue;
7488
+ };
7489
+ return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null,
7490
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null, "Describe what field you would like to add to the chart configuration:"),
7491
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("textarea", { ref: textareaRef, value: value, onChange: handleChange, placeholder: "e.g., font size for the title, background color, grid visibility...", className: "add-field-dialog-textarea" })));
7492
+ };
7493
+ // Show dialog to get user description
7494
+ const result = await (0,_jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.showDialog)({
7495
+ title: 'Add New Field',
7496
+ body: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InputDialogBody, null),
7497
+ buttons: [
7498
+ _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.Dialog.cancelButton({ label: 'Cancel' }),
7499
+ _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.Dialog.okButton({ label: 'Add Field' })
7500
+ ],
7501
+ defaultButton: 1
7502
+ });
7503
+ if (!result.button.accept) {
7504
+ return;
7505
+ }
7506
+ // Get the input value from the ref
7507
+ const description = inputValueRef.current.trim();
7508
+ if (!description) {
7509
+ _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.Notification.emit('Please provide a description of the field you want to add', 'warning', {
7510
+ autoClose: 3000
7511
+ });
7512
+ return;
7513
+ }
7514
+ // Log the field addition event with user input
7515
+ void (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_3__.logEvent)('chart_wizard_add_chart_field', {
7516
+ user_input: description
7517
+ });
7518
+ // Clear any pending debounced updates
7519
+ clearPendingUpdate();
7520
+ onLoadingStateChange(true);
7521
+ try {
7522
+ // Get existing variable names
7523
+ const parsed = (0,_utils_parser__WEBPACK_IMPORTED_MODULE_4__.parseChartConfig)(code);
7524
+ const existingVariables = parsed ? parsed.variables.map(v => v.name) : [];
7525
+ const response = await (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_3__.addChartField)(code, description, existingVariables);
7526
+ if (response.updated_code) {
7527
+ // Check if the response contains a code block
7528
+ // If no code block is found, the AI couldn't add the field
7529
+ const hasCodeBlock = response.updated_code.includes(_utils_strings__WEBPACK_IMPORTED_MODULE_5__.PYTHON_CODE_BLOCK_START_WITH_NEW_LINE);
7530
+ if (!hasCodeBlock) {
7531
+ // AI couldn't add the field and didn't return a code block
7532
+ console.log('AI response does not contain a code block - field addition was not possible.');
7533
+ _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.Notification.emit('Unable to add the requested field. Please try a different description or ensure your request is clear and applicable to chart configuration.', 'warning', {
7534
+ autoClose: 5000
7535
+ });
7536
+ return;
7537
+ }
7538
+ // Extract code from markdown code blocks if present
7539
+ const extractedCode = (0,_utils_strings__WEBPACK_IMPORTED_MODULE_5__.removeMarkdownCodeFormatting)(response.updated_code);
7540
+ // Validate that extracted code is not empty
7541
+ if (!extractedCode || extractedCode.trim().length === 0) {
7542
+ console.error('Error: Extracted code is empty. Cannot update notebook cell.');
7543
+ _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.Notification.emit('Failed to add field: The updated code is empty. Please try again.', 'error', {
7544
+ autoClose: 5000
7545
+ });
7546
+ return;
7547
+ }
7548
+ // Notify parent component of the updated code
7549
+ onFieldAdded(extractedCode);
7550
+ _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.Notification.emit('Field added successfully!', 'success', {
7551
+ autoClose: 3000
7552
+ });
7553
+ }
7554
+ else {
7555
+ // Handle case where updated_code is missing, null, or empty
7556
+ console.error('Error: No updated code returned from server.');
7557
+ _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.Notification.emit('Failed to add field: The server did not return updated code. Please try again.', 'error', {
7558
+ autoClose: 5000
7559
+ });
7560
+ }
7561
+ }
7562
+ catch (error) {
7563
+ console.error('Error adding field:', error);
7564
+ const errorMessage = error instanceof Error ? error.message : 'An unknown error occurred';
7565
+ _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.Notification.emit(`Failed to add field: ${errorMessage}. Please try again.`, 'error', {
7566
+ autoClose: 5000
7567
+ });
7568
+ }
7569
+ finally {
7570
+ onLoadingStateChange(false);
7571
+ }
7572
+ }, [code, onFieldAdded, clearPendingUpdate, onLoadingStateChange]);
7573
+ return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "add-field-container" },
7574
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { className: "button-base button-purple add-field-button", onClick: handleAddField, type: "button" }, "+ Add New Field")));
7575
+ };
7576
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AddFieldButton);
7577
+
7578
+
7420
7579
  /***/ }),
7421
7580
 
7422
7581
  /***/ "./lib/Extensions/ChartWizard/ChartWizardPlugin.js":
@@ -7449,6 +7608,7 @@ __webpack_require__.r(__webpack_exports__);
7449
7608
  /* harmony import */ var _components_TextAndIconButton__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../components/TextAndIconButton */ "./lib/components/TextAndIconButton.js");
7450
7609
  /* harmony import */ var _icons_MagicWand__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../icons/MagicWand */ "./lib/icons/MagicWand.js");
7451
7610
  /* harmony import */ var _restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../restAPI/RestAPI */ "./lib/restAPI/RestAPI.js");
7611
+ /* harmony import */ var _utils_notebook__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../utils/notebook */ "./lib/utils/notebook.js");
7452
7612
  /* harmony import */ var _style_ChartWizardPlugin_css__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../../style/ChartWizardPlugin.css */ "./style/ChartWizardPlugin.css");
7453
7613
  /*
7454
7614
  * Copyright (c) Saga Inc.
@@ -7468,6 +7628,7 @@ __webpack_require__.r(__webpack_exports__);
7468
7628
 
7469
7629
 
7470
7630
 
7631
+
7471
7632
  const ChartWizardButton = ({ onButtonClick }) => {
7472
7633
  return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null,
7473
7634
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_TextAndIconButton__WEBPACK_IMPORTED_MODULE_9__["default"], { icon: _icons_MagicWand__WEBPACK_IMPORTED_MODULE_10__["default"], text: "Chart Wizard", title: "Chart Wizard", onClick: onButtonClick, variant: 'purple', width: 'fit-contents', iconPosition: 'left' })));
@@ -7519,7 +7680,7 @@ const ChartWizardPlugin = {
7519
7680
  app.commands.addCommand(_commands__WEBPACK_IMPORTED_MODULE_12__.COMMAND_MITO_AI_OPEN_CHART_WIZARD, {
7520
7681
  label: 'Open Chart Wizard',
7521
7682
  execute: () => {
7522
- void (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_13__.logEvent)('clicked_chart_wizard_button', { source: 'command_palette' });
7683
+ void (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_13__.logEvent)('chart_wizard_opened', { source: 'command_palette' });
7523
7684
  openChartWizard();
7524
7685
  }
7525
7686
  });
@@ -7551,11 +7712,12 @@ const ChartWizardPlugin = {
7551
7712
  * A widget that extends the default ImageRenderer for matplotlib charts.
7552
7713
  */
7553
7714
  class AugmentedImageRenderer extends _lumino_widgets__WEBPACK_IMPORTED_MODULE_7__.Widget {
7554
- constructor(_app, originalRenderer, notebookTracker, openChartWizard) {
7715
+ constructor(app, originalRenderer, notebookTracker, openChartWizard) {
7555
7716
  super();
7556
7717
  this.reactRoot = null;
7557
7718
  this.originalRenderer = originalRenderer;
7558
7719
  this.notebookTracker = notebookTracker;
7720
+ this.app = app;
7559
7721
  this.openChartWizard = openChartWizard;
7560
7722
  }
7561
7723
  /**
@@ -7594,7 +7756,7 @@ class AugmentedImageRenderer extends _lumino_widgets__WEBPACK_IMPORTED_MODULE_7_
7594
7756
  Extracts chart data and source code, then opens the Chart Wizard panel.
7595
7757
  */
7596
7758
  handleButtonClick(_model) {
7597
- void (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_13__.logEvent)('clicked_chart_wizard_button', { source: 'chart_output_button' });
7759
+ void (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_13__.logEvent)('chart_wizard_opened', { source: 'chart_output_button' });
7598
7760
  // Get the notebook panel
7599
7761
  const notebookPanel = this.notebookTracker.currentWidget;
7600
7762
  if (!notebookPanel) {
@@ -7620,8 +7782,20 @@ class AugmentedImageRenderer extends _lumino_widgets__WEBPACK_IMPORTED_MODULE_7_
7620
7782
  }
7621
7783
  const sourceCode = cellWidget.model.sharedModel.source;
7622
7784
  const cellId = cellWidget.model.id;
7785
+ // Set the cell as active before collapsing and scrolling
7786
+ (0,_utils_notebook__WEBPACK_IMPORTED_MODULE_14__.setActiveCellByIDInNotebookPanel)(notebookPanel, cellId);
7787
+ // Collapse the code cell when opening the chart wizard
7788
+ cellWidget.inputHidden = true;
7789
+ // Scroll to the top of the cell
7790
+ void notebookPanel.content.scrollToCell(cellWidget, 'start');
7623
7791
  // Open the Chart Wizard with the extracted data
7624
- this.openChartWizard({ sourceCode, cellId, notebookTracker: this.notebookTracker });
7792
+ this.openChartWizard({
7793
+ sourceCode,
7794
+ cellId,
7795
+ notebookTracker: this.notebookTracker,
7796
+ notebookPanelId: notebookPanel.id,
7797
+ app: this.app
7798
+ });
7625
7799
  }
7626
7800
  }
7627
7801
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ChartWizardPlugin);
@@ -7643,18 +7817,20 @@ __webpack_require__.r(__webpack_exports__);
7643
7817
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
7644
7818
  /* harmony import */ var _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @jupyterlab/apputils */ "webpack/sharing/consume/default/@jupyterlab/apputils");
7645
7819
  /* harmony import */ var _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__);
7646
- /* harmony import */ var _utils_parser__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/parser */ "./lib/Extensions/ChartWizard/utils/parser.js");
7647
- /* harmony import */ var _restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../restAPI/RestAPI */ "./lib/restAPI/RestAPI.js");
7648
- /* harmony import */ var _utils_strings__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../utils/strings */ "./lib/utils/strings.js");
7649
- /* harmony import */ var _components_LoadingDots__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../components/LoadingDots */ "./lib/components/LoadingDots.js");
7650
- /* harmony import */ var _inputs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./inputs */ "./lib/Extensions/ChartWizard/inputs/BooleanInputRow.js");
7651
- /* harmony import */ var _inputs__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./inputs */ "./lib/Extensions/ChartWizard/inputs/TupleInputRow.js");
7652
- /* harmony import */ var _inputs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./inputs */ "./lib/Extensions/ChartWizard/inputs/NumberInputRow.js");
7653
- /* harmony import */ var _inputs__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./inputs */ "./lib/Extensions/ChartWizard/inputs/utils.js");
7654
- /* harmony import */ var _inputs__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./inputs */ "./lib/Extensions/ChartWizard/inputs/ColorInputRow.js");
7655
- /* harmony import */ var _inputs__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./inputs */ "./lib/Extensions/ChartWizard/inputs/StringInputRow.js");
7656
- /* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./hooks */ "./lib/Extensions/ChartWizard/hooks/useChartConfig.js");
7657
- /* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./hooks */ "./lib/Extensions/ChartWizard/hooks/useDebouncedNotebookUpdate.js");
7820
+ /* harmony import */ var _utils_parser__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/parser */ "./lib/Extensions/ChartWizard/utils/parser.js");
7821
+ /* harmony import */ var _restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../restAPI/RestAPI */ "./lib/restAPI/RestAPI.js");
7822
+ /* harmony import */ var _utils_strings__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../utils/strings */ "./lib/utils/strings.js");
7823
+ /* harmony import */ var _components_LoadingDots__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../components/LoadingDots */ "./lib/components/LoadingDots.js");
7824
+ /* harmony import */ var _AddFieldButton__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./AddFieldButton */ "./lib/Extensions/ChartWizard/AddFieldButton.js");
7825
+ /* harmony import */ var _inputs__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./inputs */ "./lib/Extensions/ChartWizard/inputs/BooleanInputRow.js");
7826
+ /* harmony import */ var _inputs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./inputs */ "./lib/Extensions/ChartWizard/inputs/TupleInputRow.js");
7827
+ /* harmony import */ var _inputs__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./inputs */ "./lib/Extensions/ChartWizard/inputs/NumberInputRow.js");
7828
+ /* harmony import */ var _inputs__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./inputs */ "./lib/Extensions/ChartWizard/inputs/utils.js");
7829
+ /* harmony import */ var _inputs__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./inputs */ "./lib/Extensions/ChartWizard/inputs/ColorInputRow.js");
7830
+ /* harmony import */ var _inputs__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./inputs */ "./lib/Extensions/ChartWizard/inputs/StringInputRow.js");
7831
+ /* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./hooks */ "./lib/Extensions/ChartWizard/hooks/useChartConfig.js");
7832
+ /* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./hooks */ "./lib/Extensions/ChartWizard/hooks/useDebouncedNotebookUpdate.js");
7833
+ /* harmony import */ var _utils_notebook__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/notebook */ "./lib/utils/notebook.js");
7658
7834
  /* harmony import */ var _style_ChartWizardWidget_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../style/ChartWizardWidget.css */ "./style/ChartWizardWidget.css");
7659
7835
  /*
7660
7836
  * Copyright (c) Saga Inc.
@@ -7669,6 +7845,8 @@ __webpack_require__.r(__webpack_exports__);
7669
7845
 
7670
7846
 
7671
7847
 
7848
+
7849
+
7672
7850
  /**
7673
7851
  * Formats a variable name into a human-readable label.
7674
7852
  * Converts snake_case to Title Case (e.g., "figure_size" -> "Figure Size").
@@ -7681,18 +7859,73 @@ const formatVariableLabel = (variableName) => {
7681
7859
  };
7682
7860
  const ChartWizardContent = ({ chartData }) => {
7683
7861
  const [isConverting, setIsConverting] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
7862
+ const [isAddingField, setIsAddingField] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
7684
7863
  const [currentSourceCode, setCurrentSourceCode] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);
7864
+ const widgetRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
7865
+ const [overlayHeight, setOverlayHeight] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0);
7866
+ const [isActiveCellMismatch, setIsActiveCellMismatch] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
7685
7867
  // Reset currentSourceCode when switching to a different chart
7686
7868
  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
7687
7869
  setCurrentSourceCode(null);
7688
7870
  }, [chartData === null || chartData === void 0 ? void 0 : chartData.sourceCode]);
7871
+ // Track active cell changes and compare with chart cell
7872
+ (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
7873
+ if (!chartData) {
7874
+ setIsActiveCellMismatch(false);
7875
+ return;
7876
+ }
7877
+ const checkActiveCell = () => {
7878
+ const activeCellId = (0,_utils_notebook__WEBPACK_IMPORTED_MODULE_3__.getActiveCellID)(chartData.notebookTracker);
7879
+ const chartCellId = chartData.cellId;
7880
+ // Show warning if active cell exists and doesn't match the chart cell
7881
+ setIsActiveCellMismatch(activeCellId !== undefined && activeCellId !== chartCellId);
7882
+ };
7883
+ // Initial check
7884
+ checkActiveCell();
7885
+ // Listen to active cell changes
7886
+ chartData.notebookTracker.activeCellChanged.connect(checkActiveCell);
7887
+ return () => {
7888
+ chartData.notebookTracker.activeCellChanged.disconnect(checkActiveCell);
7889
+ };
7890
+ }, [chartData]);
7891
+ // Update overlay height to cover full scrollable content
7892
+ (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
7893
+ if (!isAddingField) {
7894
+ setOverlayHeight(0);
7895
+ return;
7896
+ }
7897
+ const updateOverlayHeight = () => {
7898
+ if (widgetRef.current) {
7899
+ // Use scrollHeight to get the full scrollable content height
7900
+ setOverlayHeight(widgetRef.current.scrollHeight);
7901
+ }
7902
+ };
7903
+ // Initial update
7904
+ updateOverlayHeight();
7905
+ // Use ResizeObserver to watch for content size changes
7906
+ let resizeObserver = null;
7907
+ if (widgetRef.current && typeof ResizeObserver !== 'undefined') {
7908
+ resizeObserver = new ResizeObserver(() => {
7909
+ updateOverlayHeight();
7910
+ });
7911
+ resizeObserver.observe(widgetRef.current);
7912
+ }
7913
+ // Fallback: Update on window resize
7914
+ window.addEventListener('resize', updateOverlayHeight);
7915
+ return () => {
7916
+ if (resizeObserver) {
7917
+ resizeObserver.disconnect();
7918
+ }
7919
+ window.removeEventListener('resize', updateOverlayHeight);
7920
+ };
7921
+ }, [isAddingField]);
7689
7922
  // Use custom hook for chart config management
7690
- const { configVariables, setConfigVariables, hasConfig } = (0,_hooks__WEBPACK_IMPORTED_MODULE_3__.useChartConfig)({
7923
+ const { configVariables, setConfigVariables, hasConfig } = (0,_hooks__WEBPACK_IMPORTED_MODULE_4__.useChartConfig)({
7691
7924
  sourceCode: chartData === null || chartData === void 0 ? void 0 : chartData.sourceCode,
7692
7925
  currentSourceCode,
7693
7926
  });
7694
7927
  // Use custom hook for debounced notebook updates
7695
- const { updateNotebookCell, scheduleUpdate, clearPendingUpdate } = (0,_hooks__WEBPACK_IMPORTED_MODULE_4__.useDebouncedNotebookUpdate)({
7928
+ const { updateNotebookCell, scheduleUpdate, clearPendingUpdate } = (0,_hooks__WEBPACK_IMPORTED_MODULE_5__.useDebouncedNotebookUpdate)({
7696
7929
  chartData,
7697
7930
  debounceDelay: 500,
7698
7931
  });
@@ -7707,7 +7940,7 @@ const ChartWizardContent = ({ chartData }) => {
7707
7940
  const updated = configVariables.map((v) => v.name === variableName ? { ...v, value: newValue } : v);
7708
7941
  setConfigVariables(updated);
7709
7942
  // Update the source code
7710
- const updatedCode = (0,_utils_parser__WEBPACK_IMPORTED_MODULE_5__.updateChartConfig)(codeToUse, updated);
7943
+ const updatedCode = (0,_utils_parser__WEBPACK_IMPORTED_MODULE_6__.updateChartConfig)(codeToUse, updated);
7711
7944
  setCurrentSourceCode(updatedCode);
7712
7945
  // Schedule debounced notebook update
7713
7946
  scheduleUpdate(updatedCode);
@@ -7716,7 +7949,7 @@ const ChartWizardContent = ({ chartData }) => {
7716
7949
  * Handles chart conversion from matplotlib to Chart Wizard format.
7717
7950
  */
7718
7951
  const handleConvertChart = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {
7719
- void (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_6__.logEvent)('clicked_convert_chart_button');
7952
+ void (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_7__.logEvent)('chart_wizard_convert_chart');
7720
7953
  if (!(chartData === null || chartData === void 0 ? void 0 : chartData.sourceCode)) {
7721
7954
  console.error('No source code available');
7722
7955
  return;
@@ -7725,10 +7958,10 @@ const ChartWizardContent = ({ chartData }) => {
7725
7958
  clearPendingUpdate();
7726
7959
  setIsConverting(true);
7727
7960
  try {
7728
- const response = await (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_6__.convertChartCode)(chartData.sourceCode);
7961
+ const response = await (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_7__.convertChartCode)(chartData.sourceCode);
7729
7962
  if (response.converted_code) {
7730
7963
  // Extract code from markdown code blocks if present
7731
- const extractedCode = (0,_utils_strings__WEBPACK_IMPORTED_MODULE_7__.removeMarkdownCodeFormatting)(response.converted_code);
7964
+ const extractedCode = (0,_utils_strings__WEBPACK_IMPORTED_MODULE_8__.removeMarkdownCodeFormatting)(response.converted_code);
7732
7965
  // Validate that extracted code is not empty to prevent deleting user's code
7733
7966
  if (!extractedCode || extractedCode.trim().length === 0) {
7734
7967
  console.error('Error: Extracted code is empty. Cannot update notebook cell.');
@@ -7754,6 +7987,15 @@ const ChartWizardContent = ({ chartData }) => {
7754
7987
  setIsConverting(false);
7755
7988
  }
7756
7989
  }, [chartData === null || chartData === void 0 ? void 0 : chartData.sourceCode, clearPendingUpdate, updateNotebookCell]);
7990
+ /**
7991
+ * Handles when a new field is added via the AddFieldButton component.
7992
+ */
7993
+ const handleFieldAdded = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((updatedCode) => {
7994
+ // Update current source code so the useEffect will parse it
7995
+ setCurrentSourceCode(updatedCode);
7996
+ // Update the cell with the updated code
7997
+ updateNotebookCell(updatedCode);
7998
+ }, [updateNotebookCell]);
7757
7999
  /**
7758
8000
  * Renders the appropriate input field component based on variable type.
7759
8001
  */
@@ -7766,22 +8008,22 @@ const ChartWizardContent = ({ chartData }) => {
7766
8008
  };
7767
8009
  switch (variable.type) {
7768
8010
  case 'boolean':
7769
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inputs__WEBPACK_IMPORTED_MODULE_8__.BooleanInputRow, { key: variable.name, ...commonProps });
8011
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inputs__WEBPACK_IMPORTED_MODULE_9__.BooleanInputRow, { key: variable.name, ...commonProps });
7770
8012
  case 'tuple':
7771
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inputs__WEBPACK_IMPORTED_MODULE_9__.TupleInputRow, { key: variable.name, ...commonProps });
8013
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inputs__WEBPACK_IMPORTED_MODULE_10__.TupleInputRow, { key: variable.name, ...commonProps });
7772
8014
  case 'number':
7773
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inputs__WEBPACK_IMPORTED_MODULE_10__.NumberInputRow, { key: variable.name, ...commonProps });
8015
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inputs__WEBPACK_IMPORTED_MODULE_11__.NumberInputRow, { key: variable.name, ...commonProps });
7774
8016
  case 'string': {
7775
8017
  // String input - check if it's a hex color
7776
8018
  const stringValue = variable.value;
7777
- const isColor = (0,_inputs__WEBPACK_IMPORTED_MODULE_11__.isHexColor)(stringValue);
8019
+ const isColor = (0,_inputs__WEBPACK_IMPORTED_MODULE_12__.isHexColor)(stringValue);
7778
8020
  if (isColor) {
7779
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inputs__WEBPACK_IMPORTED_MODULE_12__.ColorInputRow, { key: variable.name, ...commonProps });
8021
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inputs__WEBPACK_IMPORTED_MODULE_13__.ColorInputRow, { key: variable.name, ...commonProps });
7780
8022
  }
7781
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inputs__WEBPACK_IMPORTED_MODULE_13__.StringInputRow, { key: variable.name, ...commonProps });
8023
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inputs__WEBPACK_IMPORTED_MODULE_14__.StringInputRow, { key: variable.name, ...commonProps });
7782
8024
  }
7783
8025
  default:
7784
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inputs__WEBPACK_IMPORTED_MODULE_13__.StringInputRow, { key: variable.name, ...commonProps });
8026
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inputs__WEBPACK_IMPORTED_MODULE_14__.StringInputRow, { key: variable.name, ...commonProps });
7785
8027
  }
7786
8028
  }, [handleVariableChange]);
7787
8029
  // Memoize input fields to prevent unnecessary re-renders
@@ -7792,11 +8034,35 @@ const ChartWizardContent = ({ chartData }) => {
7792
8034
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h2", null, "Chart Wizard"),
7793
8035
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null, "Click the Chart Wizard button on a matplotlib chart to get started.")));
7794
8036
  }
7795
- return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chart-wizard-widget" },
8037
+ return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chart-wizard-widget", ref: widgetRef, style: { position: 'relative' } },
7796
8038
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h2", null, "Chart Wizard"),
8039
+ isActiveCellMismatch && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chart-wizard-warning" },
8040
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chart-wizard-warning-content" }, "The active cell is no longer the chart cell. Changes may not be applied correctly."),
8041
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { className: "chart-wizard-warning-button", onClick: () => {
8042
+ var _a;
8043
+ if (chartData) {
8044
+ // Find the notebook panel by ID
8045
+ const notebookPanel = chartData.notebookTracker.find(panel => panel.id === chartData.notebookPanelId);
8046
+ if (notebookPanel) {
8047
+ // Activate the notebook panel if it's not the current one
8048
+ if (((_a = chartData.notebookTracker.currentWidget) === null || _a === void 0 ? void 0 : _a.id) !== notebookPanel.id) {
8049
+ chartData.app.shell.activateById(notebookPanel.id);
8050
+ // Wait a bit for the notebook to activate before scrolling
8051
+ setTimeout(() => {
8052
+ (0,_utils_notebook__WEBPACK_IMPORTED_MODULE_3__.scrollToCell)(notebookPanel, chartData.cellId, undefined, 'start');
8053
+ }, 100);
8054
+ }
8055
+ else {
8056
+ // Navigate to and scroll to the chart cell
8057
+ (0,_utils_notebook__WEBPACK_IMPORTED_MODULE_3__.scrollToCell)(notebookPanel, chartData.cellId, undefined, 'start');
8058
+ }
8059
+ }
8060
+ }
8061
+ }, type: "button" }, "Go to Chart Cell"))),
7797
8062
  hasConfig ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chart-wizard-config-container" },
7798
8063
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", { className: "chart-wizard-config-description" }, "Edit values below to customize your chart. Changes will be reflected in the notebook."),
7799
- inputFields)) : (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chart-wizard-no-config" },
8064
+ inputFields,
8065
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_AddFieldButton__WEBPACK_IMPORTED_MODULE_15__["default"], { code: currentSourceCode || (chartData === null || chartData === void 0 ? void 0 : chartData.sourceCode) || null, onFieldAdded: handleFieldAdded, clearPendingUpdate: clearPendingUpdate, onLoadingStateChange: setIsAddingField }))) : (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chart-wizard-no-config" },
7800
8066
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null,
7801
8067
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("strong", null, "This chart isn't ready for Chart Wizard yet."),
7802
8068
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("br", null),
@@ -7805,7 +8071,13 @@ const ChartWizardContent = ({ chartData }) => {
7805
8071
  "Converting",
7806
8072
  ' ',
7807
8073
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "chart-wizard-loading-dots" },
7808
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_LoadingDots__WEBPACK_IMPORTED_MODULE_14__["default"], null)))) : ('Convert'))))));
8074
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_LoadingDots__WEBPACK_IMPORTED_MODULE_16__["default"], null)))) : ('Convert')))),
8075
+ isAddingField && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chart-wizard-overlay", style: { height: overlayHeight > 0 ? `${overlayHeight}px` : '100%' } },
8076
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chart-wizard-overlay-text" },
8077
+ "Adding new field",
8078
+ ' ',
8079
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "chart-wizard-loading-dots" },
8080
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_LoadingDots__WEBPACK_IMPORTED_MODULE_16__["default"], null)))))));
7809
8081
  };
7810
8082
  class ChartWizardWidget extends _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.ReactWidget {
7811
8083
  constructor() {
@@ -7910,14 +8182,14 @@ __webpack_require__.r(__webpack_exports__);
7910
8182
  */
7911
8183
  const useDebouncedNotebookUpdate = ({ chartData, debounceDelay = 500, }) => {
7912
8184
  const executeTimeoutRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
7913
- // Cleanup timeout on unmount
8185
+ // Cleanup timeout on unmount or when chartData changes
7914
8186
  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
7915
8187
  return () => {
7916
8188
  if (executeTimeoutRef.current) {
7917
8189
  clearTimeout(executeTimeoutRef.current);
7918
8190
  }
7919
8191
  };
7920
- }, []);
8192
+ }, [chartData]);
7921
8193
  const updateNotebookCell = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((updatedCode) => {
7922
8194
  var _a;
7923
8195
  if (!chartData)
@@ -9035,10 +9307,10 @@ const getFullErrorMessageFromTraceback = (tracebackArray) => {
9035
9307
 
9036
9308
  /***/ }),
9037
9309
 
9038
- /***/ "./lib/Extensions/MitoThemeLight/index.js":
9039
- /*!************************************************!*\
9040
- !*** ./lib/Extensions/MitoThemeLight/index.js ***!
9041
- \************************************************/
9310
+ /***/ "./lib/Extensions/MitoThemes/index.js":
9311
+ /*!********************************************!*\
9312
+ !*** ./lib/Extensions/MitoThemes/index.js ***!
9313
+ \********************************************/
9042
9314
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
9043
9315
 
9044
9316
  __webpack_require__.r(__webpack_exports__);
@@ -9055,8 +9327,9 @@ __webpack_require__.r(__webpack_exports__);
9055
9327
  /* harmony import */ var _jupyterlab_ui_components__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_jupyterlab_ui_components__WEBPACK_IMPORTED_MODULE_3__);
9056
9328
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
9057
9329
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);
9058
- /* harmony import */ var _components_RunCellButton__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/RunCellButton */ "./lib/components/RunCellButton.js");
9059
- /* harmony import */ var _utils_lineNumbers__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../utils/lineNumbers */ "./lib/utils/lineNumbers.js");
9330
+ /* harmony import */ var _components_RunCellButton__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../components/RunCellButton */ "./lib/components/RunCellButton.js");
9331
+ /* harmony import */ var _utils_lineNumbers__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../utils/lineNumbers */ "./lib/utils/lineNumbers.js");
9332
+ /* harmony import */ var _palettes__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./palettes */ "./lib/Extensions/MitoThemes/palettes.js");
9060
9333
  /* harmony import */ var _style_RunCellButton_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../style/RunCellButton.css */ "./style/RunCellButton.css");
9061
9334
  /*
9062
9335
  * Copyright (c) Saga Inc.
@@ -9070,6 +9343,7 @@ __webpack_require__.r(__webpack_exports__);
9070
9343
 
9071
9344
 
9072
9345
 
9346
+
9073
9347
  /**
9074
9348
  * Updates cell numbers for all cells in a notebook.
9075
9349
  * Uses notebook.widgets which is always in the correct order.
@@ -9107,6 +9381,8 @@ function setupCellNumbering(notebookPanel) {
9107
9381
  updateAllCellNumbers(notebookPanel);
9108
9382
  });
9109
9383
  observer.observe(notebook.node, { childList: true, subtree: true });
9384
+ // Initial update
9385
+ updateAllCellNumbers(notebookPanel);
9110
9386
  // Return cleanup function
9111
9387
  return () => {
9112
9388
  var _a;
@@ -9123,20 +9399,24 @@ function setupCellNumbering(notebookPanel) {
9123
9399
  };
9124
9400
  }
9125
9401
  /**
9126
- * A plugin for the Mito Light Theme.
9402
+ * A plugin for the Mito Themes (Light and Dark).
9127
9403
  *
9128
- * The Run Cell Button, cell numbering, and hidden default toolbar buttons only apply
9129
- * when the Mito Light theme is active.
9404
+ * Registers both Mito Light and Mito Dark themes.
9405
+ * The Run Cell Button, cell numbering, and hidden default toolbar buttons apply
9406
+ * when either Mito theme is active.
9130
9407
  */
9131
9408
  const plugin = {
9132
- id: 'mito_ai:theme',
9133
- description: 'Adds the Mito Light theme.',
9409
+ id: 'mito_ai:themes',
9410
+ description: 'Adds the Mito Light and Dark themes.',
9134
9411
  requires: [_jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_0__.IThemeManager, _jupyterlab_translation__WEBPACK_IMPORTED_MODULE_1__.ITranslator, _jupyterlab_notebook__WEBPACK_IMPORTED_MODULE_2__.INotebookTracker],
9135
9412
  activate: (app, manager, translator, notebookTracker) => {
9136
9413
  const trans = translator.load('jupyterlab');
9414
+ // CSS path - single CSS file for both themes (uses CSS variables set by palettes)
9137
9415
  const style = 'mito_ai/index.css';
9138
- // Store connection for cleanup
9139
- let widgetAddedConnection = null;
9416
+ const palettes = new _palettes__WEBPACK_IMPORTED_MODULE_6__.MitoPalettes();
9417
+ // Store connections for cleanup
9418
+ let lightWidgetAddedConnection = null;
9419
+ let darkWidgetAddedConnection = null;
9140
9420
  // Store cell numbering cleanup functions for each notebook
9141
9421
  const cellNumberingCleanups = new Map();
9142
9422
  // Add Run Cell button to notebook toolbar
@@ -9157,7 +9437,7 @@ const plugin = {
9157
9437
  this.addClass('mito-run-cell-button-widget');
9158
9438
  }
9159
9439
  render() {
9160
- return react__WEBPACK_IMPORTED_MODULE_4___default().createElement(_components_RunCellButton__WEBPACK_IMPORTED_MODULE_6__["default"], { notebookPanel: this.panel });
9440
+ return react__WEBPACK_IMPORTED_MODULE_4___default().createElement(_components_RunCellButton__WEBPACK_IMPORTED_MODULE_7__["default"], { notebookPanel: this.panel });
9161
9441
  }
9162
9442
  }
9163
9443
  const runCellWidget = new RunCellButtonWidget(notebookPanel);
@@ -9196,54 +9476,65 @@ const plugin = {
9196
9476
  cellNumberingCleanups.delete(notebookPanel);
9197
9477
  }
9198
9478
  };
9199
- // Add buttons and cell numbering to all notebooks
9200
- const addButtonsToAllNotebooks = () => {
9479
+ // Add cell numbering to a notebook panel (guard against duplicates)
9480
+ const addCellNumbering = (notebookPanel) => {
9481
+ if (cellNumberingCleanups.has(notebookPanel)) {
9482
+ return;
9483
+ }
9484
+ const cleanup = setupCellNumbering(notebookPanel);
9485
+ if (cleanup) {
9486
+ cellNumberingCleanups.set(notebookPanel, cleanup);
9487
+ // Also cleanup when notebook is disposed
9488
+ notebookPanel.disposed.connect(() => {
9489
+ cellNumberingCleanups.delete(notebookPanel);
9490
+ });
9491
+ }
9492
+ };
9493
+ // Add buttons and cell numbering to all notebooks (for a specific theme)
9494
+ const addButtonsToAllNotebooks = (themeName) => {
9201
9495
  notebookTracker.forEach(widget => {
9202
9496
  addRunCellButton(widget);
9203
9497
  // Enable line numbers if needed
9204
- void (0,_utils_lineNumbers__WEBPACK_IMPORTED_MODULE_7__.enableLineNumbersIfNeeded)(app, widget);
9498
+ void (0,_utils_lineNumbers__WEBPACK_IMPORTED_MODULE_8__.enableLineNumbersIfNeeded)(app, widget);
9205
9499
  // Setup cell numbering
9206
- const cleanup = setupCellNumbering(widget);
9207
- if (cleanup) {
9208
- cellNumberingCleanups.set(widget, cleanup);
9209
- // Also cleanup when notebook is disposed
9210
- widget.disposed.connect(() => {
9211
- cellNumberingCleanups.delete(widget);
9212
- });
9213
- }
9500
+ addCellNumbering(widget);
9214
9501
  });
9215
9502
  // Connect to new notebooks
9216
- widgetAddedConnection = (sender, widget) => {
9503
+ const widgetAddedHandler = (sender, widget) => {
9217
9504
  setTimeout(() => {
9218
9505
  // Check if widget is still valid before proceeding
9219
9506
  if (widget.isDisposed) {
9220
9507
  return;
9221
9508
  }
9222
- // Only add if Mito Light theme is still active
9223
- if (manager.theme === 'Mito Light') {
9509
+ // Only add if the specified theme is still active
9510
+ if (manager.theme === themeName) {
9224
9511
  addRunCellButton(widget);
9225
9512
  // Enable line numbers if needed
9226
- void (0,_utils_lineNumbers__WEBPACK_IMPORTED_MODULE_7__.enableLineNumbersIfNeeded)(app, widget);
9513
+ void (0,_utils_lineNumbers__WEBPACK_IMPORTED_MODULE_8__.enableLineNumbersIfNeeded)(app, widget);
9227
9514
  // Setup cell numbering
9228
- const cleanup = setupCellNumbering(widget);
9229
- if (cleanup) {
9230
- cellNumberingCleanups.set(widget, cleanup);
9231
- // Also cleanup when notebook is disposed
9232
- widget.disposed.connect(() => {
9233
- cellNumberingCleanups.delete(widget);
9234
- });
9235
- }
9515
+ addCellNumbering(widget);
9236
9516
  }
9237
9517
  }, 100);
9238
9518
  };
9239
- notebookTracker.widgetAdded.connect(widgetAddedConnection);
9519
+ if (themeName === 'Mito Light') {
9520
+ lightWidgetAddedConnection = widgetAddedHandler;
9521
+ notebookTracker.widgetAdded.connect(lightWidgetAddedConnection);
9522
+ }
9523
+ else if (themeName === 'Mito Dark') {
9524
+ darkWidgetAddedConnection = widgetAddedHandler;
9525
+ notebookTracker.widgetAdded.connect(darkWidgetAddedConnection);
9526
+ }
9240
9527
  };
9241
9528
  // Remove buttons and cell numbering from all notebooks
9242
9529
  const removeButtonsFromAllNotebooks = () => {
9243
9530
  // Disconnect from new notebooks
9244
- if (widgetAddedConnection) {
9245
- notebookTracker.widgetAdded.disconnect(widgetAddedConnection);
9246
- widgetAddedConnection = null;
9531
+ if (lightWidgetAddedConnection) {
9532
+ notebookTracker.widgetAdded.disconnect(lightWidgetAddedConnection);
9533
+ lightWidgetAddedConnection = null;
9534
+ }
9535
+ if (darkWidgetAddedConnection) {
9536
+ notebookTracker.widgetAdded.disconnect(darkWidgetAddedConnection);
9537
+ darkWidgetAddedConnection = null;
9247
9538
  }
9248
9539
  // Remove from all existing notebooks
9249
9540
  notebookTracker.forEach(widget => {
@@ -9253,33 +9544,323 @@ const plugin = {
9253
9544
  // Clear all cleanup functions
9254
9545
  cellNumberingCleanups.clear();
9255
9546
  };
9547
+ // Register Mito Light theme
9256
9548
  manager.register({
9257
9549
  name: 'Mito Light',
9258
9550
  displayName: trans.__('Mito Light'),
9259
9551
  isLight: true,
9260
9552
  themeScrollbars: false,
9261
9553
  load: async () => {
9262
- // Load theme CSS (hides default buttons)
9554
+ // Set CSS variables for light theme before loading CSS
9555
+ palettes.setColorsLight();
9556
+ // Load theme CSS (hides default buttons, applies light theme variables)
9263
9557
  await manager.loadCSS(style);
9264
9558
  // Add Run Cell buttons to all notebooks and enable line numbers
9265
- addButtonsToAllNotebooks();
9559
+ addButtonsToAllNotebooks('Mito Light');
9266
9560
  },
9267
9561
  unload: async () => {
9268
9562
  // Remove Run Cell buttons from all notebooks
9269
9563
  removeButtonsFromAllNotebooks();
9270
9564
  }
9271
9565
  });
9272
- // Set Mito Light as default theme if user hasn't explicitly chosen a different theme
9273
- // This runs after registration so the theme is available
9274
- if (manager.theme === 'JupyterLab Light' || !manager.theme) {
9275
- void manager.setTheme('Mito Light');
9276
- }
9566
+ // Register Mito Dark theme
9567
+ manager.register({
9568
+ name: 'Mito Dark',
9569
+ displayName: trans.__('Mito Dark'),
9570
+ isLight: false,
9571
+ themeScrollbars: false,
9572
+ load: async () => {
9573
+ // Set CSS variables for dark theme before loading CSS
9574
+ palettes.setColorsDark();
9575
+ // Load theme CSS (hides default buttons, applies dark theme variables)
9576
+ await manager.loadCSS(style);
9577
+ // Add Run Cell buttons to all notebooks and enable line numbers
9578
+ addButtonsToAllNotebooks('Mito Dark');
9579
+ },
9580
+ unload: async () => {
9581
+ // Remove Run Cell buttons from all notebooks
9582
+ removeButtonsFromAllNotebooks();
9583
+ }
9584
+ });
9585
+ // Flag to prevent infinite recursion when we convert themes
9586
+ let isConvertingTheme = false;
9587
+ // Helper function to convert non-Mito themes to corresponding Mito theme
9588
+ const convertToMitoTheme = (themeName) => {
9589
+ // Prevent infinite recursion - if we're already converting, don't do it again
9590
+ if (isConvertingTheme) {
9591
+ return;
9592
+ }
9593
+ if (!themeName) {
9594
+ // No theme set, default to Mito Light
9595
+ isConvertingTheme = true;
9596
+ void manager.setTheme('Mito Light').finally(() => {
9597
+ isConvertingTheme = false;
9598
+ });
9599
+ return;
9600
+ }
9601
+ const isMitoTheme = themeName === 'Mito Light' || themeName === 'Mito Dark';
9602
+ if (isMitoTheme) {
9603
+ // Already a Mito theme, don't change - this ensures user's Mito theme preference is preserved
9604
+ return;
9605
+ }
9606
+ // Convert non-Mito themes to corresponding Mito theme
9607
+ isConvertingTheme = true;
9608
+ if (themeName === 'JupyterLab Dark' || themeName.includes('Dark')) {
9609
+ void manager.setTheme('Mito Dark').finally(() => {
9610
+ isConvertingTheme = false;
9611
+ });
9612
+ }
9613
+ else {
9614
+ // Default to light theme for any other non-Mito theme (including JupyterLab Light)
9615
+ void manager.setTheme('Mito Light').finally(() => {
9616
+ isConvertingTheme = false;
9617
+ });
9618
+ }
9619
+ };
9620
+ // Wait for app restoration to complete before checking/setting theme
9621
+ // This ensures saved theme preferences are loaded first
9622
+ void app.restored.then(() => {
9623
+ // Convert theme on initial load if needed
9624
+ convertToMitoTheme(manager.theme);
9625
+ });
9626
+ // Listen for theme changes and automatically convert to Mito theme
9627
+ // This ensures that when users switch themes, they get converted to Mito themes
9628
+ // and the preference is saved properly
9629
+ manager.themeChanged.connect(() => {
9630
+ // Use manager.theme to get the current theme after the change
9631
+ convertToMitoTheme(manager.theme);
9632
+ });
9277
9633
  },
9278
9634
  autoStart: true
9279
9635
  };
9280
9636
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (plugin);
9281
9637
 
9282
9638
 
9639
+ /***/ }),
9640
+
9641
+ /***/ "./lib/Extensions/MitoThemes/palettes.js":
9642
+ /*!***********************************************!*\
9643
+ !*** ./lib/Extensions/MitoThemes/palettes.js ***!
9644
+ \***********************************************/
9645
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
9646
+
9647
+ __webpack_require__.r(__webpack_exports__);
9648
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
9649
+ /* harmony export */ MitoPalettes: () => (/* binding */ MitoPalettes)
9650
+ /* harmony export */ });
9651
+ /*
9652
+ * Copyright (c) Saga Inc.
9653
+ * Distributed under the terms of the GNU Affero General Public License v3.0 License.
9654
+ */
9655
+ /**
9656
+ * MitoPalettes class sets CSS variables for light and dark themes.
9657
+ * Similar to catppuccin's approach, this allows a single CSS file to work
9658
+ * for both themes by setting different variable values before loading CSS.
9659
+ */
9660
+ class MitoPalettes {
9661
+ /**
9662
+ * Set CSS variables for the light theme
9663
+ */
9664
+ setColorsLight() {
9665
+ // Border colors
9666
+ document.documentElement.style.setProperty('--mito-theme-border-color0', '#bdbdbd');
9667
+ document.documentElement.style.setProperty('--mito-theme-border-color1', '#bdbdbd');
9668
+ document.documentElement.style.setProperty('--mito-theme-border-color2', '#e0e0e0');
9669
+ document.documentElement.style.setProperty('--mito-theme-border-color3', '#eee');
9670
+ document.documentElement.style.setProperty('--mito-theme-inverse-border-color', '#757575');
9671
+ // UI Font colors
9672
+ document.documentElement.style.setProperty('--mito-theme-ui-font-color0', 'rgba(0, 0, 0, 1)');
9673
+ document.documentElement.style.setProperty('--mito-theme-ui-font-color1', 'rgba(0, 0, 0, 0.87)');
9674
+ document.documentElement.style.setProperty('--mito-theme-ui-font-color2', 'rgba(0, 0, 0, 0.54)');
9675
+ document.documentElement.style.setProperty('--mito-theme-ui-font-color3', 'rgba(0, 0, 0, 0.38)');
9676
+ document.documentElement.style.setProperty('--mito-theme-ui-inverse-font-color0', 'rgba(255, 255, 255, 1)');
9677
+ document.documentElement.style.setProperty('--mito-theme-ui-inverse-font-color1', 'rgba(255, 255, 255, 1)');
9678
+ document.documentElement.style.setProperty('--mito-theme-ui-inverse-font-color2', 'rgba(255, 255, 255, 0.7)');
9679
+ document.documentElement.style.setProperty('--mito-theme-ui-inverse-font-color3', 'rgba(255, 255, 255, 0.5)');
9680
+ // Content Font colors
9681
+ document.documentElement.style.setProperty('--mito-theme-content-font-color0', 'rgba(0, 0, 0, 1)');
9682
+ document.documentElement.style.setProperty('--mito-theme-content-font-color1', 'rgba(0, 0, 0, 0.87)');
9683
+ document.documentElement.style.setProperty('--mito-theme-content-font-color2', 'rgba(0, 0, 0, 0.54)');
9684
+ document.documentElement.style.setProperty('--mito-theme-content-font-color3', 'rgba(0, 0, 0, 0.38)');
9685
+ document.documentElement.style.setProperty('--mito-theme-content-link-color', '#0d47a1');
9686
+ document.documentElement.style.setProperty('--mito-theme-content-link-visited-color', '#7b1fa2');
9687
+ // Layout colors
9688
+ document.documentElement.style.setProperty('--mito-theme-layout-color0', 'white');
9689
+ document.documentElement.style.setProperty('--mito-theme-layout-color1', 'white');
9690
+ document.documentElement.style.setProperty('--mito-theme-layout-color2', '#eee');
9691
+ document.documentElement.style.setProperty('--mito-theme-layout-color3', '#bdbdbd');
9692
+ document.documentElement.style.setProperty('--mito-theme-layout-color4', '#757575');
9693
+ document.documentElement.style.setProperty('--mito-theme-inverse-layout-color0', '#111');
9694
+ document.documentElement.style.setProperty('--mito-theme-inverse-layout-color1', '#212121');
9695
+ document.documentElement.style.setProperty('--mito-theme-inverse-layout-color2', '#424242');
9696
+ document.documentElement.style.setProperty('--mito-theme-inverse-layout-color3', '#616161');
9697
+ document.documentElement.style.setProperty('--mito-theme-inverse-layout-color4', '#757575');
9698
+ // Brand colors (using purple variables from light theme)
9699
+ document.documentElement.style.setProperty('--mito-theme-brand-color0', 'var(--purple-900)');
9700
+ document.documentElement.style.setProperty('--mito-theme-brand-color1', 'var(--purple-700)');
9701
+ document.documentElement.style.setProperty('--mito-theme-brand-color2', 'var(--purple-500)');
9702
+ document.documentElement.style.setProperty('--mito-theme-brand-color3', 'var(--purple-300)');
9703
+ document.documentElement.style.setProperty('--mito-theme-brand-color4', 'var(--purple-300)');
9704
+ // Primary button colors (light mode: blue theme to avoid pinkish-purple)
9705
+ document.documentElement.style.setProperty('--mito-theme-button-background', 'var(--blue-300)');
9706
+ document.documentElement.style.setProperty('--mito-theme-button-border', 'var(--blue-900)');
9707
+ document.documentElement.style.setProperty('--mito-theme-button-text', 'var(--blue-900)');
9708
+ document.documentElement.style.setProperty('--mito-theme-button-hover-background', 'var(--blue-400)');
9709
+ // Cell editor colors
9710
+ document.documentElement.style.setProperty('--mito-theme-cell-editor-background', '#f5f5f5');
9711
+ document.documentElement.style.setProperty('--mito-theme-cell-editor-border-color', '#e0e0e0');
9712
+ document.documentElement.style.setProperty('--mito-theme-cell-editor-active-background', 'var(--mito-theme-layout-color0)');
9713
+ document.documentElement.style.setProperty('--mito-theme-cell-prompt-not-active-font-color', '#616161');
9714
+ document.documentElement.style.setProperty('--mito-theme-cell-outprompt-font-color', '#bf5b3d');
9715
+ // Notebook colors
9716
+ document.documentElement.style.setProperty('--mito-theme-notebook-select-background', 'var(--mito-theme-layout-color1)');
9717
+ document.documentElement.style.setProperty('--mito-theme-notebook-multiselected-color', '#e3f2fd');
9718
+ // Rendermime colors
9719
+ document.documentElement.style.setProperty('--mito-theme-rendermime-error-background', '#fdd');
9720
+ document.documentElement.style.setProperty('--mito-theme-rendermime-table-row-background', '#ebebeb');
9721
+ document.documentElement.style.setProperty('--mito-theme-rendermime-table-row-hover-background', '#e1f5fe');
9722
+ // Dialog colors
9723
+ document.documentElement.style.setProperty('--mito-theme-dialog-background', 'rgba(0, 0, 0, 0.25)');
9724
+ // Input field colors
9725
+ document.documentElement.style.setProperty('--mito-theme-input-background', '#f5f5f5');
9726
+ document.documentElement.style.setProperty('--mito-theme-input-border-color', 'var(--mito-theme-inverse-border-color)');
9727
+ // Editor colors
9728
+ document.documentElement.style.setProperty('--mito-theme-editor-selected-background', '#d9d9d9');
9729
+ document.documentElement.style.setProperty('--mito-theme-editor-selected-focused-background', '#d7d4f0');
9730
+ document.documentElement.style.setProperty('--mito-theme-editor-cursor-color', 'var(--mito-theme-ui-font-color0)');
9731
+ // Line number colors (grey/white/blue instead of pink)
9732
+ document.documentElement.style.setProperty('--mito-theme-line-number-color', '#92999F');
9733
+ // Code mirror colors
9734
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-keyword-color', '#008000');
9735
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-atom-color', '#88f');
9736
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-number-color', '#080');
9737
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-def-color', '#00f');
9738
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-variable-color', '#212121');
9739
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-variable-2-color', 'rgb(0, 54, 109)');
9740
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-variable-3-color', '#085');
9741
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-punctuation-color', '#05a');
9742
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-property-color', '#05a');
9743
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-operator-color', '#7800c2');
9744
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-comment-color', '#408080');
9745
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-string-color', '#ba2121');
9746
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-string-2-color', '#708');
9747
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-meta-color', '#a2f');
9748
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-qualifier-color', '#555');
9749
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-builtin-color', '#008000');
9750
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-bracket-color', '#997');
9751
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-tag-color', '#170');
9752
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-attribute-color', '#00c');
9753
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-header-color', 'blue');
9754
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-quote-color', '#090');
9755
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-link-color', '#00c');
9756
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-error-color', '#f00');
9757
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-hr-color', '#999');
9758
+ // Vega colors
9759
+ document.documentElement.style.setProperty('--mito-theme-vega-background', 'white');
9760
+ }
9761
+ /**
9762
+ * Set CSS variables for the dark theme
9763
+ */
9764
+ setColorsDark() {
9765
+ // Border colors
9766
+ document.documentElement.style.setProperty('--mito-theme-border-color0', '#3c3c3c');
9767
+ document.documentElement.style.setProperty('--mito-theme-border-color1', '#3c3c3c');
9768
+ document.documentElement.style.setProperty('--mito-theme-border-color2', '#2d2d2d');
9769
+ document.documentElement.style.setProperty('--mito-theme-border-color3', '#252526');
9770
+ document.documentElement.style.setProperty('--mito-theme-inverse-border-color', '#5a5a5a');
9771
+ // UI Font colors
9772
+ document.documentElement.style.setProperty('--mito-theme-ui-font-color0', 'rgba(255, 255, 255, 1)');
9773
+ document.documentElement.style.setProperty('--mito-theme-ui-font-color1', 'rgba(255, 255, 255, 0.87)');
9774
+ document.documentElement.style.setProperty('--mito-theme-ui-font-color2', 'rgba(255, 255, 255, 0.6)');
9775
+ document.documentElement.style.setProperty('--mito-theme-ui-font-color3', 'rgba(255, 255, 255, 0.4)');
9776
+ document.documentElement.style.setProperty('--mito-theme-ui-inverse-font-color0', 'rgba(0, 0, 0, 1)');
9777
+ document.documentElement.style.setProperty('--mito-theme-ui-inverse-font-color1', 'rgba(0, 0, 0, 0.87)');
9778
+ document.documentElement.style.setProperty('--mito-theme-ui-inverse-font-color2', 'rgba(0, 0, 0, 0.6)');
9779
+ document.documentElement.style.setProperty('--mito-theme-ui-inverse-font-color3', 'rgba(0, 0, 0, 0.4)');
9780
+ // Content Font colors
9781
+ document.documentElement.style.setProperty('--mito-theme-content-font-color0', 'rgba(255, 255, 255, 1)');
9782
+ document.documentElement.style.setProperty('--mito-theme-content-font-color1', 'rgba(255, 255, 255, 0.87)');
9783
+ document.documentElement.style.setProperty('--mito-theme-content-font-color2', 'rgba(255, 255, 255, 0.6)');
9784
+ document.documentElement.style.setProperty('--mito-theme-content-font-color3', 'rgba(255, 255, 255, 0.4)');
9785
+ document.documentElement.style.setProperty('--mito-theme-content-link-color', '#7c93ee');
9786
+ document.documentElement.style.setProperty('--mito-theme-content-link-visited-color', '#b39ddb');
9787
+ // Layout colors
9788
+ document.documentElement.style.setProperty('--mito-theme-layout-color0', '#1a1a1a');
9789
+ document.documentElement.style.setProperty('--mito-theme-layout-color1', '#1e1e1e');
9790
+ document.documentElement.style.setProperty('--mito-theme-layout-color2', '#252526');
9791
+ document.documentElement.style.setProperty('--mito-theme-layout-color3', '#2d2d2d');
9792
+ document.documentElement.style.setProperty('--mito-theme-layout-color4', '#3c3c3c');
9793
+ document.documentElement.style.setProperty('--mito-theme-inverse-layout-color0', '#ffffff');
9794
+ document.documentElement.style.setProperty('--mito-theme-inverse-layout-color1', '#f0f0f0');
9795
+ document.documentElement.style.setProperty('--mito-theme-inverse-layout-color2', '#d4d4d4');
9796
+ document.documentElement.style.setProperty('--mito-theme-inverse-layout-color3', '#a0a0a0');
9797
+ document.documentElement.style.setProperty('--mito-theme-inverse-layout-color4', '#6e6e6e');
9798
+ // Brand colors (pink-purple theme for dark, starting with #C65FAA)
9799
+ document.documentElement.style.setProperty('--mito-theme-brand-color0', '#C65FAA');
9800
+ document.documentElement.style.setProperty('--mito-theme-brand-color1', '#D97BC0');
9801
+ document.documentElement.style.setProperty('--mito-theme-brand-color2', '#E8A3D5');
9802
+ document.documentElement.style.setProperty('--mito-theme-brand-color3', '#F4D1EA');
9803
+ document.documentElement.style.setProperty('--mito-theme-brand-color4', '#FAE8F5');
9804
+ // Primary button colors (dark mode: lighter brand background, dark brand border)
9805
+ document.documentElement.style.setProperty('--mito-theme-button-background', '#F4D1EA');
9806
+ document.documentElement.style.setProperty('--mito-theme-button-border', '#C65FAA');
9807
+ document.documentElement.style.setProperty('--mito-theme-button-text', 'rgba(0, 0, 0, 0.87)');
9808
+ document.documentElement.style.setProperty('--mito-theme-button-hover-background', '#FAE8F5');
9809
+ // Cell editor colors
9810
+ document.documentElement.style.setProperty('--mito-theme-cell-editor-background', '#1e1e1e');
9811
+ document.documentElement.style.setProperty('--mito-theme-cell-editor-border-color', '#3c3c3c');
9812
+ document.documentElement.style.setProperty('--mito-theme-cell-editor-active-background', '#252526');
9813
+ document.documentElement.style.setProperty('--mito-theme-cell-prompt-not-active-font-color', '#6e6e6e');
9814
+ document.documentElement.style.setProperty('--mito-theme-cell-outprompt-font-color', '#f59e0b');
9815
+ // Notebook colors
9816
+ document.documentElement.style.setProperty('--mito-theme-notebook-select-background', '#2d2d2d');
9817
+ document.documentElement.style.setProperty('--mito-theme-notebook-multiselected-color', 'rgba(198, 95, 170, 0.2)');
9818
+ // Rendermime colors
9819
+ document.documentElement.style.setProperty('--mito-theme-rendermime-error-background', 'rgba(244, 67, 54, 0.2)');
9820
+ document.documentElement.style.setProperty('--mito-theme-rendermime-table-row-background', '#252526');
9821
+ document.documentElement.style.setProperty('--mito-theme-rendermime-table-row-hover-background', '#2d2d2d');
9822
+ // Dialog colors
9823
+ document.documentElement.style.setProperty('--mito-theme-dialog-background', 'rgba(0, 0, 0, 0.5)');
9824
+ // Input field colors
9825
+ document.documentElement.style.setProperty('--mito-theme-input-background', '#2d2d2d');
9826
+ document.documentElement.style.setProperty('--mito-theme-input-border-color', '#3c3c3c');
9827
+ // Editor colors
9828
+ document.documentElement.style.setProperty('--mito-theme-editor-selected-background', '#3c3c3c');
9829
+ document.documentElement.style.setProperty('--mito-theme-editor-selected-focused-background', '#3d4a5c');
9830
+ document.documentElement.style.setProperty('--mito-theme-editor-cursor-color', '#ffffff');
9831
+ // Line number colors (grey/white/blue instead of pink)
9832
+ document.documentElement.style.setProperty('--mito-theme-line-number-color', '#92999F');
9833
+ // Code mirror colors
9834
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-keyword-color', '#c586c0');
9835
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-atom-color', '#b5cea8');
9836
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-number-color', '#b5cea8');
9837
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-def-color', '#dcdcaa');
9838
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-variable-color', '#9cdcfe');
9839
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-variable-2-color', '#4fc1ff');
9840
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-variable-3-color', '#4ec9b0');
9841
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-punctuation-color', '#d4d4d4');
9842
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-property-color', '#9cdcfe');
9843
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-operator-color', '#d4d4d4');
9844
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-comment-color', '#6a9955');
9845
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-string-color', '#ce9178');
9846
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-string-2-color', '#ce9178');
9847
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-meta-color', '#d4d4d4');
9848
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-qualifier-color', '#d4d4d4');
9849
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-builtin-color', '#4ec9b0');
9850
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-bracket-color', '#ffd700');
9851
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-tag-color', '#569cd6');
9852
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-attribute-color', '#9cdcfe');
9853
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-header-color', '#569cd6');
9854
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-quote-color', '#6a9955');
9855
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-link-color', '#569cd6');
9856
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-error-color', '#f44747');
9857
+ document.documentElement.style.setProperty('--mito-theme-mirror-editor-hr-color', '#6e6e6e');
9858
+ // Vega colors
9859
+ document.documentElement.style.setProperty('--mito-theme-vega-background', '#1e1e1e');
9860
+ }
9861
+ }
9862
+
9863
+
9283
9864
  /***/ }),
9284
9865
 
9285
9866
  /***/ "./lib/Extensions/NotebookFooter/NotebookFooter.js":
@@ -12386,47 +12967,124 @@ const MODEL_MAPPINGS = [
12386
12967
  complexityHandling: 'High'
12387
12968
  }
12388
12969
  ];
12389
- const ALL_MODEL_DISPLAY_NAMES = MODEL_MAPPINGS.map(mapping => mapping.displayName);
12970
+ // Removed ALL_MODEL_DISPLAY_NAMES - now using availableModels from backend
12390
12971
  // Maximum length for displayed model name before truncating
12391
12972
  const DEFAULT_MODEL = _utils_models__WEBPACK_IMPORTED_MODULE_3__.CLAUDE_HAIKU_DISPLAY_NAME;
12392
12973
  const ModelSelector = ({ onConfigChange }) => {
12393
12974
  const [selectedModel, setSelectedModel] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(DEFAULT_MODEL);
12394
12975
  const [isOpen, setIsOpen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
12395
12976
  const [hoveredModel, setHoveredModel] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);
12977
+ const [availableModels, setAvailableModels] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);
12978
+ const [isLoadingModels, setIsLoadingModels] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);
12396
12979
  const dropdownRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
12397
- // Load config from localStorage on component mount and notify parent
12980
+ // Fetch available models from backend on mount
12398
12981
  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
12399
- var _a;
12400
- const storedConfig = localStorage.getItem('llmModelConfig');
12401
- let fullModelName;
12402
- let displayName;
12403
- if (storedConfig) {
12982
+ const fetchModels = async () => {
12983
+ var _a, _b;
12404
12984
  try {
12405
- const parsedConfig = JSON.parse(storedConfig);
12406
- fullModelName = parsedConfig.model;
12407
- displayName = (_a = MODEL_MAPPINGS.find(m => m.fullName === fullModelName)) === null || _a === void 0 ? void 0 : _a.displayName;
12985
+ setIsLoadingModels(true);
12986
+ const models = await (0,_utils_models__WEBPACK_IMPORTED_MODULE_3__.getAvailableModels)();
12987
+ setAvailableModels(models);
12988
+ // Load config from localStorage and validate against available models
12989
+ const storedConfig = localStorage.getItem('llmModelConfig');
12990
+ let fullModelName;
12991
+ let displayName;
12992
+ if (storedConfig) {
12993
+ try {
12994
+ const parsedConfig = JSON.parse(storedConfig);
12995
+ const storedModel = parsedConfig.model;
12996
+ if (storedModel && typeof storedModel === 'string') {
12997
+ fullModelName = storedModel;
12998
+ // Check if model is in available models list
12999
+ if (models.includes(fullModelName)) {
13000
+ // Check if it's a LiteLLM model (has provider prefix)
13001
+ if (fullModelName.includes('/')) {
13002
+ // LiteLLM model - use model name directly as display name
13003
+ displayName = fullModelName;
13004
+ }
13005
+ else {
13006
+ // Standard model - find display name from MODEL_MAPPINGS
13007
+ displayName = (_a = MODEL_MAPPINGS.find(m => m.fullName === fullModelName)) === null || _a === void 0 ? void 0 : _a.displayName;
13008
+ }
13009
+ }
13010
+ }
13011
+ }
13012
+ catch (e) {
13013
+ console.error('Failed to parse stored LLM config', e);
13014
+ }
13015
+ }
13016
+ // Fallback to default model or first available model if not found or invalid
13017
+ if (!fullModelName || !displayName || (fullModelName && !models.includes(fullModelName))) {
13018
+ if (models.length > 0) {
13019
+ // First, try to use the default model if it's available
13020
+ const defaultMapping = MODEL_MAPPINGS.find(m => m.displayName === DEFAULT_MODEL);
13021
+ if (defaultMapping && models.includes(defaultMapping.fullName)) {
13022
+ fullModelName = defaultMapping.fullName;
13023
+ displayName = defaultMapping.displayName;
13024
+ }
13025
+ else {
13026
+ // Fallback to first available model
13027
+ const firstModel = models[0];
13028
+ fullModelName = firstModel;
13029
+ // Check if it's a LiteLLM model
13030
+ if (firstModel && firstModel.includes('/')) {
13031
+ displayName = firstModel;
13032
+ }
13033
+ else {
13034
+ displayName = ((_b = MODEL_MAPPINGS.find(m => m.fullName === firstModel)) === null || _b === void 0 ? void 0 : _b.displayName) || firstModel;
13035
+ }
13036
+ }
13037
+ }
13038
+ else {
13039
+ // Fallback to default if no models available
13040
+ const defaultMapping = MODEL_MAPPINGS.find(m => m.displayName === DEFAULT_MODEL) || MODEL_MAPPINGS[0];
13041
+ if (defaultMapping) {
13042
+ fullModelName = defaultMapping.fullName;
13043
+ displayName = defaultMapping.displayName;
13044
+ }
13045
+ else {
13046
+ // Ultimate fallback
13047
+ fullModelName = _utils_models__WEBPACK_IMPORTED_MODULE_3__.GPT_4_1_MODEL_NAME;
13048
+ displayName = _utils_models__WEBPACK_IMPORTED_MODULE_3__.GPT_4_1_DISPLAY_NAME;
13049
+ }
13050
+ }
13051
+ }
13052
+ if (displayName && fullModelName) {
13053
+ setSelectedModel(displayName);
13054
+ onConfigChange({ model: fullModelName });
13055
+ }
12408
13056
  }
12409
- catch (e) {
12410
- console.error('Failed to parse stored LLM config', e);
13057
+ catch (error) {
13058
+ console.error('Failed to fetch available models:', error);
13059
+ // Fallback to default models
13060
+ const defaultMapping = MODEL_MAPPINGS.find(m => m.displayName === DEFAULT_MODEL) || MODEL_MAPPINGS[0];
13061
+ setSelectedModel(defaultMapping.displayName);
13062
+ onConfigChange({ model: defaultMapping.fullName });
12411
13063
  }
12412
- }
12413
- // Fallback to default if not found
12414
- let defaultMapping = MODEL_MAPPINGS.find(m => m.displayName === DEFAULT_MODEL);
12415
- if (!defaultMapping) {
12416
- defaultMapping = MODEL_MAPPINGS[0];
12417
- }
12418
- if (!fullModelName || !displayName) {
12419
- fullModelName = defaultMapping.fullName;
12420
- displayName = defaultMapping.displayName;
12421
- }
12422
- setSelectedModel(displayName);
12423
- onConfigChange({ model: fullModelName });
13064
+ finally {
13065
+ setIsLoadingModels(false);
13066
+ }
13067
+ };
13068
+ void fetchModels();
12424
13069
  }, [onConfigChange]);
12425
- const handleModelChange = (displayName) => {
13070
+ const handleModelChange = (modelName) => {
12426
13071
  var _a;
12427
- setSelectedModel(displayName);
13072
+ if (!modelName) {
13073
+ return;
13074
+ }
13075
+ setSelectedModel(modelName);
12428
13076
  setIsOpen(false);
12429
- const fullModelName = ((_a = MODEL_MAPPINGS.find(m => m.displayName === displayName)) === null || _a === void 0 ? void 0 : _a.fullName) || displayName;
13077
+ // For LiteLLM models (with provider prefix), modelName is already the full model name
13078
+ // For standard models, we need to find the full name from MODEL_MAPPINGS
13079
+ let fullModelName;
13080
+ if (modelName.includes('/')) {
13081
+ // LiteLLM model - use model name directly
13082
+ fullModelName = modelName;
13083
+ }
13084
+ else {
13085
+ // Standard model - find full name from MODEL_MAPPINGS
13086
+ fullModelName = ((_a = MODEL_MAPPINGS.find(m => m.displayName === modelName)) === null || _a === void 0 ? void 0 : _a.fullName) || modelName;
13087
+ }
12430
13088
  const newConfig = {
12431
13089
  model: fullModelName
12432
13090
  };
@@ -12466,18 +13124,30 @@ const ModelSelector = ({ onConfigChange }) => {
12466
13124
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_NucleausIcon__WEBPACK_IMPORTED_MODULE_4__["default"], { height: 10, width: 10 })),
12467
13125
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "model-name" }, selectedModel),
12468
13126
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "dropdown-arrow" }, "\u25BC")),
12469
- isOpen && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: `model-options dropup`, style: { minWidth: '150px' }, onMouseLeave: () => setHoveredModel(null) }, ALL_MODEL_DISPLAY_NAMES.map(model => {
12470
- const modelMapping = MODEL_MAPPINGS.find(m => m.displayName === model);
12471
- return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { key: model, className: `model-option ${model === selectedModel ? 'selected' : ''}`, onClick: (e) => {
13127
+ isOpen && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: `model-options dropup`, style: { minWidth: '150px' }, onMouseLeave: () => setHoveredModel(null) }, isLoadingModels ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "model-option" }, "Loading models...")) : (availableModels.map(modelName => {
13128
+ // Check if it's a LiteLLM model (has provider prefix)
13129
+ const isLiteLLMModel = modelName.includes('/');
13130
+ let displayName;
13131
+ let modelMapping;
13132
+ if (isLiteLLMModel) {
13133
+ // LiteLLM model - use model name directly as display name
13134
+ displayName = modelName;
13135
+ }
13136
+ else {
13137
+ // Standard model - find display name from MODEL_MAPPINGS
13138
+ modelMapping = MODEL_MAPPINGS.find(m => m.fullName === modelName);
13139
+ displayName = (modelMapping === null || modelMapping === void 0 ? void 0 : modelMapping.displayName) || modelName;
13140
+ }
13141
+ return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { key: modelName, className: `model-option ${displayName === selectedModel ? 'selected' : ''}`, onClick: (e) => {
12472
13142
  e.stopPropagation();
12473
- handleModelChange(model);
13143
+ handleModelChange(displayName);
12474
13144
  }, onMouseEnter: () => setHoveredModel(modelMapping || null), "data-testid": "model-option" },
12475
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "model-option-name" }, model),
13145
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "model-option-name" }, displayName),
12476
13146
  (modelMapping === null || modelMapping === void 0 ? void 0 : modelMapping.type) === 'smart' && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "model-type-icon" },
12477
13147
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_BrainIcon__WEBPACK_IMPORTED_MODULE_5__["default"], { height: 12, width: 12 }))),
12478
13148
  (modelMapping === null || modelMapping === void 0 ? void 0 : modelMapping.type) === 'fast' && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "model-type-icon" },
12479
13149
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_LightningIcon__WEBPACK_IMPORTED_MODULE_6__["default"], { height: 12, width: 12 })))));
12480
- })))),
13150
+ }))))),
12481
13151
  isOpen && hoveredModel && react_dom__WEBPACK_IMPORTED_MODULE_1___default().createPortal(react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "model-tooltip" },
12482
13152
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "model-tooltip-content" },
12483
13153
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "model-tooltip-header" },
@@ -12499,7 +13169,14 @@ const ModelSelector = ({ onConfigChange }) => {
12499
13169
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "model-tooltip-metadata-value" }, hoveredModel.complexityHandling)))),
12500
13170
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "model-tooltip-section" },
12501
13171
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "model-tooltip-section-label" }, "Good For:"),
12502
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement("ul", { className: "model-tooltip-bullet-list" }, hoveredModel.goodFor.map((item, index) => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", { key: index, className: "model-tooltip-bullet-item" }, item))))))), document.body)));
13172
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("ul", { className: "model-tooltip-bullet-list" }, hoveredModel.goodFor.map((item, index) => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", { key: index, className: "model-tooltip-bullet-item" }, item))))))), document.body),
13173
+ isOpen && !hoveredModel && selectedModel.includes('/') && react_dom__WEBPACK_IMPORTED_MODULE_1___default().createPortal(react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "model-tooltip" },
13174
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "model-tooltip-content" },
13175
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "model-tooltip-header" },
13176
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "model-tooltip-title-row" },
13177
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "model-tooltip-title" }, selectedModel))),
13178
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "model-tooltip-section" },
13179
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "model-tooltip-section-label" }, "No additional information available")))), document.body)));
12503
13180
  };
12504
13181
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ModelSelector);
12505
13182
 
@@ -14319,7 +14996,7 @@ __webpack_require__.r(__webpack_exports__);
14319
14996
  /* harmony import */ var _Extensions_SettingsManager_SettingsManagerPlugin__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./Extensions/SettingsManager/SettingsManagerPlugin */ "./lib/Extensions/SettingsManager/SettingsManagerPlugin.js");
14320
14997
  /* harmony import */ var _Extensions_VersionCheck__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./Extensions/VersionCheck */ "./lib/Extensions/VersionCheck/index.js");
14321
14998
  /* harmony import */ var _Extensions_NotebookFooter__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./Extensions/NotebookFooter */ "./lib/Extensions/NotebookFooter/index.js");
14322
- /* harmony import */ var _Extensions_MitoThemeLight__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./Extensions/MitoThemeLight */ "./lib/Extensions/MitoThemeLight/index.js");
14999
+ /* harmony import */ var _Extensions_MitoThemes__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./Extensions/MitoThemes */ "./lib/Extensions/MitoThemes/index.js");
14323
15000
  /* harmony import */ var _Extensions_AppManager_ManageAppsPlugin__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./Extensions/AppManager/ManageAppsPlugin */ "./lib/Extensions/AppManager/ManageAppsPlugin.js");
14324
15001
  /* harmony import */ var _Extensions_ChartWizard_ChartWizardPlugin__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./Extensions/ChartWizard/ChartWizardPlugin */ "./lib/Extensions/ChartWizard/ChartWizardPlugin.js");
14325
15002
  /*
@@ -14355,7 +15032,7 @@ __webpack_require__.r(__webpack_exports__);
14355
15032
  _Extensions_VersionCheck__WEBPACK_IMPORTED_MODULE_9__.versionCheckPlugin,
14356
15033
  _Extensions_NotebookFooter__WEBPACK_IMPORTED_MODULE_10__["default"],
14357
15034
  _Extensions_AppManager_ManageAppsPlugin__WEBPACK_IMPORTED_MODULE_11__["default"],
14358
- _Extensions_MitoThemeLight__WEBPACK_IMPORTED_MODULE_12__["default"],
15035
+ _Extensions_MitoThemes__WEBPACK_IMPORTED_MODULE_12__["default"],
14359
15036
  _Extensions_ChartWizard_ChartWizardPlugin__WEBPACK_IMPORTED_MODULE_13__["default"]
14360
15037
  ]);
14361
15038
 
@@ -14370,6 +15047,7 @@ __webpack_require__.r(__webpack_exports__);
14370
15047
 
14371
15048
  __webpack_require__.r(__webpack_exports__);
14372
15049
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
15050
+ /* harmony export */ addChartField: () => (/* binding */ addChartField),
14373
15051
  /* harmony export */ convertChartCode: () => (/* binding */ convertChartCode),
14374
15052
  /* harmony export */ getChatHistoryThread: () => (/* binding */ getChatHistoryThread),
14375
15053
  /* harmony export */ getChatHistoryThreads: () => (/* binding */ getChatHistoryThreads),
@@ -14534,7 +15212,7 @@ CHART WIZARD ENDPOINTS
14534
15212
 
14535
15213
  ************************************/
14536
15214
  const convertChartCode = async (code) => {
14537
- const resp = await (0,_utils__WEBPACK_IMPORTED_MODULE_0__.requestAPI)('chart-wizard', {
15215
+ const resp = await (0,_utils__WEBPACK_IMPORTED_MODULE_0__.requestAPI)('chart-wizard/convert', {
14538
15216
  method: 'POST',
14539
15217
  body: JSON.stringify({ code }),
14540
15218
  });
@@ -14543,6 +15221,20 @@ const convertChartCode = async (code) => {
14543
15221
  }
14544
15222
  return resp.data;
14545
15223
  };
15224
+ const addChartField = async (code, userDescription, existingVariables) => {
15225
+ const resp = await (0,_utils__WEBPACK_IMPORTED_MODULE_0__.requestAPI)('chart-wizard/add-field', {
15226
+ method: 'POST',
15227
+ body: JSON.stringify({
15228
+ code,
15229
+ user_description: userDescription,
15230
+ existing_variables: existingVariables
15231
+ }),
15232
+ });
15233
+ if (resp.error) {
15234
+ throw new Error(resp.error.message);
15235
+ }
15236
+ return resp.data;
15237
+ };
14546
15238
  const getChatHistoryThreads = async () => {
14547
15239
  var _a;
14548
15240
  const resp = await (0,_utils__WEBPACK_IMPORTED_MODULE_0__.requestAPI)('chat-history/threads');
@@ -16026,7 +16718,8 @@ __webpack_require__.r(__webpack_exports__);
16026
16718
  /* harmony export */ GPT_4_1_DISPLAY_NAME: () => (/* binding */ GPT_4_1_DISPLAY_NAME),
16027
16719
  /* harmony export */ GPT_4_1_MODEL_NAME: () => (/* binding */ GPT_4_1_MODEL_NAME),
16028
16720
  /* harmony export */ GPT_5_2_DISPLAY_NAME: () => (/* binding */ GPT_5_2_DISPLAY_NAME),
16029
- /* harmony export */ GPT_5_2_MODEL_NAME: () => (/* binding */ GPT_5_2_MODEL_NAME)
16721
+ /* harmony export */ GPT_5_2_MODEL_NAME: () => (/* binding */ GPT_5_2_MODEL_NAME),
16722
+ /* harmony export */ getAvailableModels: () => (/* binding */ getAvailableModels)
16030
16723
  /* harmony export */ });
16031
16724
  /*
16032
16725
  * Copyright (c) Saga Inc.
@@ -16044,6 +16737,33 @@ const GEMINI_3_FLASH_DISPLAY_NAME = 'Gemini 3 Flash';
16044
16737
  const GEMINI_3_FLASH_MODEL_NAME = 'gemini-3-flash-preview';
16045
16738
  const GEMINI_3_PRO_DISPLAY_NAME = 'Gemini 3 Pro';
16046
16739
  const GEMINI_3_PRO_MODEL_NAME = 'gemini-3-pro-preview';
16740
+ /**
16741
+ * Fetch available models from the backend API.
16742
+ * Returns the list of model names that are available based on enterprise mode and LiteLLM configuration.
16743
+ *
16744
+ * @returns Promise resolving to an array of model names
16745
+ */
16746
+ async function getAvailableModels() {
16747
+ var _a;
16748
+ // Lazy import to avoid loading JupyterLab dependencies when only constants are needed
16749
+ const { requestAPI } = await Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../restAPI/utils */ "./lib/restAPI/utils.js"));
16750
+ const response = await requestAPI('available-models', {
16751
+ method: 'GET'
16752
+ });
16753
+ if (response.error) {
16754
+ console.error('Failed to fetch available models:', response.error.message);
16755
+ // Return default models as fallback
16756
+ return [
16757
+ GPT_4_1_MODEL_NAME,
16758
+ GPT_5_2_MODEL_NAME,
16759
+ CLAUDE_SONNET_MODEL_NAME,
16760
+ CLAUDE_HAIKU_MODEL_NAME,
16761
+ GEMINI_3_FLASH_MODEL_NAME,
16762
+ GEMINI_3_PRO_MODEL_NAME,
16763
+ ];
16764
+ }
16765
+ return ((_a = response.data) === null || _a === void 0 ? void 0 : _a.models) || [];
16766
+ }
16047
16767
 
16048
16768
 
16049
16769
  /***/ }),
@@ -17973,6 +18693,59 @@ class CompletionWebsocketClient extends _BaseWebsocketClient__WEBPACK_IMPORTED_M
17973
18693
  }
17974
18694
 
17975
18695
 
18696
+ /***/ }),
18697
+
18698
+ /***/ "./node_modules/css-loader/dist/cjs.js!./style/AddFieldButton.css":
18699
+ /*!************************************************************************!*\
18700
+ !*** ./node_modules/css-loader/dist/cjs.js!./style/AddFieldButton.css ***!
18701
+ \************************************************************************/
18702
+ /***/ ((module, __webpack_exports__, __webpack_require__) => {
18703
+
18704
+ __webpack_require__.r(__webpack_exports__);
18705
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
18706
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
18707
+ /* harmony export */ });
18708
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js");
18709
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
18710
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
18711
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
18712
+ // Imports
18713
+
18714
+
18715
+ var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
18716
+ // Module
18717
+ ___CSS_LOADER_EXPORT___.push([module.id, `/*
18718
+ * Copyright (c) Saga Inc.
18719
+ * Distributed under the terms of the GNU Affero General Public License v3.0 License.
18720
+ */
18721
+
18722
+ .add-field-container {
18723
+ margin-top: 16px;
18724
+ padding-top: 16px;
18725
+ border-top: 1px solid #e0e0e0;
18726
+ }
18727
+
18728
+ .add-field-button {
18729
+ width: 100%;
18730
+ }
18731
+
18732
+ .add-field-dialog-textarea {
18733
+ width: 100%;
18734
+ padding: 8px;
18735
+ margin-top: 10px;
18736
+ font-size: 14px;
18737
+ border: 1px solid #ccc;
18738
+ border-radius: 4px;
18739
+ min-height: 100px;
18740
+ resize: vertical;
18741
+ font-family: inherit;
18742
+ box-sizing: border-box;
18743
+ }
18744
+ `, "",{"version":3,"sources":["webpack://./style/AddFieldButton.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;IACI,gBAAgB;IAChB,iBAAiB;IACjB,6BAA6B;AACjC;;AAEA;IACI,WAAW;AACf;;AAEA;IACI,WAAW;IACX,YAAY;IACZ,gBAAgB;IAChB,eAAe;IACf,sBAAsB;IACtB,kBAAkB;IAClB,iBAAiB;IACjB,gBAAgB;IAChB,oBAAoB;IACpB,sBAAsB;AAC1B","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.add-field-container {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid #e0e0e0;\n}\n\n.add-field-button {\n width: 100%;\n}\n\n.add-field-dialog-textarea {\n width: 100%;\n padding: 8px;\n margin-top: 10px;\n font-size: 14px;\n border: 1px solid #ccc;\n border-radius: 4px;\n min-height: 100px;\n resize: vertical;\n font-family: inherit;\n box-sizing: border-box;\n}\n"],"sourceRoot":""}]);
18745
+ // Exports
18746
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
18747
+
18748
+
17976
18749
  /***/ }),
17977
18750
 
17978
18751
  /***/ "./node_modules/css-loader/dist/cjs.js!./style/AgentChangeControls.css":
@@ -19800,7 +20573,71 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
19800
20573
  display: inline-block;
19801
20574
  min-width: 1.5em;
19802
20575
  text-align: left;
19803
- }`, "",{"version":3,"sources":["webpack://./style/ChartWizardWidget.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;IACI,aAAa;IACb,YAAY;IACZ,gBAAgB;IAChB,aAAa;IACb,sBAAsB;IACtB,sBAAsB;AAC1B;;AAEA;IACI,aAAa;IACb,sBAAsB;IACtB,mBAAmB;IACnB,QAAQ;AACZ;;AAEA;IACI,mBAAmB;IACnB,mBAAmB;IACnB,8BAA8B;IAC9B,mBAAmB;IACnB,SAAS;AACb;;AAEA;IACI,oCAAoC;IACpC,eAAe;IACf,gBAAgB;IAChB,oBAAoB;AACxB;;AAEA;IACI,OAAO;IACP,SAAS;IACT,eAAe;AACnB;;AAEA;IACI,kBAAkB;IAClB,oBAAoB;IACpB,mBAAmB;IACnB,eAAe;IACf,cAAc;AAClB;;AAEA;IACI,kBAAkB;IAClB,UAAU;IACV,eAAe;IACf,QAAQ;IACR,SAAS;IACT,SAAS;AACb;;AAEA;IACI,kBAAkB;IAClB,qBAAqB;IACrB,WAAW;IACX,YAAY;IACZ,yCAAyC;IACzC,mBAAmB;IACnB,sCAAsC;IACtC,sBAAsB;AAC1B;;AAEA;IACI,WAAW;IACX,kBAAkB;IAClB,WAAW;IACX,YAAY;IACZ,SAAS;IACT,QAAQ;IACR,uBAAuB;IACvB,kBAAkB;IAClB,+BAA+B;IAC/B,wCAAwC;AAC5C;;AAEA;IACI,wCAAwC;AAC5C;;AAEA;IACI,2BAA2B;AAC/B;;AAEA;IACI,6CAA6C;AACjD;;AAEA;IACI,yCAAyC;AAC7C;;AAEA;IACI,wCAAwC;AAC5C;;AAEA;;;;IAII,WAAW;IACX,sBAAsB;AAC1B;;AAEA;IACI,aAAa;IACb,QAAQ;IACR,WAAW;AACf;;AAEA;IACI,cAAc;AAClB;;AAEA;IACI,OAAO;AACX;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,QAAQ;IACR,WAAW;AACf;;AAEA;IACI,OAAO;AACX;;AAEA;IACI,OAAO;IACP,aAAa;AACjB;;AAEA;;IAEI,OAAO;IACP,aAAa;IACb,sBAAsB;IACtB,uBAAuB;AAC3B;;AAEA;IACI,kBAAkB;AACtB;;AAEA;IACI,qBAAqB;IACrB,gBAAgB;IAChB,gBAAgB;AACpB","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.chart-wizard-widget {\n padding: 10px;\n height: 100%;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n}\n\n.chart-wizard-input-row {\n display: flex;\n flex-direction: column;\n margin-bottom: 15px;\n gap: 5px;\n}\n\n.chart-wizard-boolean-row {\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n gap: 12px;\n}\n\n.chart-wizard-input-label {\n color: var(--jp-content-font-color2);\n font-size: 12px;\n font-weight: 500;\n text-transform: none;\n}\n\n.chart-wizard-boolean-label {\n flex: 1;\n margin: 0;\n cursor: pointer;\n}\n\n.chart-wizard-toggle-container {\n position: relative;\n display: inline-flex;\n align-items: center;\n cursor: pointer;\n flex-shrink: 0;\n}\n\n.chart-wizard-toggle-input {\n position: absolute;\n opacity: 0;\n cursor: pointer;\n width: 0;\n height: 0;\n margin: 0;\n}\n\n.chart-wizard-toggle-slider {\n position: relative;\n display: inline-block;\n width: 44px;\n height: 24px;\n background-color: var(--jp-border-color2);\n border-radius: 12px;\n transition: background-color 0.3s ease;\n box-sizing: border-box;\n}\n\n.chart-wizard-toggle-slider::before {\n content: '';\n position: absolute;\n width: 20px;\n height: 20px;\n left: 2px;\n top: 2px;\n background-color: white;\n border-radius: 50%;\n transition: transform 0.3s ease;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n}\n\n.chart-wizard-toggle-input:checked + .chart-wizard-toggle-slider {\n background-color: var(--jp-brand-color1);\n}\n\n.chart-wizard-toggle-input:checked + .chart-wizard-toggle-slider::before {\n transform: translateX(20px);\n}\n\n.chart-wizard-toggle-input:focus + .chart-wizard-toggle-slider {\n box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.2);\n}\n\n.chart-wizard-toggle-input:hover + .chart-wizard-toggle-slider {\n background-color: var(--jp-border-color1);\n}\n\n.chart-wizard-toggle-input:checked:hover + .chart-wizard-toggle-slider {\n background-color: var(--jp-brand-color0);\n}\n\n.chart-wizard-number-input,\n.chart-wizard-text-input,\n.chart-wizard-color-input,\n.chart-wizard-tuple-input {\n width: 100%;\n box-sizing: border-box;\n}\n\n.chart-wizard-color-container {\n display: flex;\n gap: 8px;\n width: 100%;\n}\n\n.chart-wizard-color-picker {\n flex-shrink: 0;\n}\n\n.chart-wizard-color-input {\n flex: 1;\n}\n\n.chart-wizard-tuple-container {\n display: flex;\n align-items: center;\n gap: 5px;\n width: 100%;\n}\n\n.chart-wizard-tuple-input {\n flex: 1;\n}\n\n.chart-wizard-config-container {\n flex: 1;\n min-height: 0;\n}\n\n.chart-wizard-empty-state,\n.chart-wizard-no-config {\n flex: 1;\n display: flex;\n flex-direction: column;\n justify-content: center;\n}\n\n.chart-wizard-no-config p {\n text-align: center;\n}\n\n.chart-wizard-loading-dots {\n display: inline-block;\n min-width: 1.5em;\n text-align: left;\n}"],"sourceRoot":""}]);
20576
+ }
20577
+
20578
+ .chart-wizard-overlay {
20579
+ position: absolute;
20580
+ top: 0;
20581
+ left: 0;
20582
+ right: 0;
20583
+ /* Height is set dynamically via inline style to cover full scrollable content */
20584
+ min-height: 100%;
20585
+ background-color: rgba(255, 255, 255, 0.8);
20586
+ display: flex;
20587
+ align-items: center;
20588
+ justify-content: center;
20589
+ z-index: 1000;
20590
+ pointer-events: all;
20591
+ }
20592
+
20593
+ .chart-wizard-overlay-text {
20594
+ font-size: 16px;
20595
+ font-weight: 500;
20596
+ color: #333;
20597
+ }
20598
+
20599
+ .chart-wizard-warning {
20600
+ background-color: var(--yellow-100);
20601
+ color: var(--yellow-900);
20602
+ padding: 10px 12px;
20603
+ border-radius: 4px;
20604
+ margin-bottom: 15px;
20605
+ font-size: 13px;
20606
+ line-height: 1.4;
20607
+ border: 1px solid var(--yellow-300);
20608
+ display: flex;
20609
+ flex-direction: column;
20610
+ gap: 10px;
20611
+ }
20612
+
20613
+ .chart-wizard-warning-content {
20614
+ flex: 1;
20615
+ }
20616
+
20617
+ .chart-wizard-warning strong {
20618
+ font-weight: 600;
20619
+ }
20620
+
20621
+ .chart-wizard-warning-button {
20622
+ background-color: var(--yellow-600);
20623
+ color: var(--yellow-900);
20624
+ border: none;
20625
+ padding: 6px 12px;
20626
+ border-radius: 4px;
20627
+ font-size: 12px;
20628
+ font-weight: 500;
20629
+ cursor: pointer;
20630
+ align-self: flex-start;
20631
+ transition: background-color 0.2s ease;
20632
+ }
20633
+
20634
+ .chart-wizard-warning-button:hover {
20635
+ background-color: var(--yellow-500);
20636
+ }
20637
+
20638
+ .chart-wizard-warning-button:active {
20639
+ background-color: var(--yellow-300);
20640
+ }`, "",{"version":3,"sources":["webpack://./style/ChartWizardWidget.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;IACI,aAAa;IACb,YAAY;IACZ,gBAAgB;IAChB,aAAa;IACb,sBAAsB;IACtB,sBAAsB;AAC1B;;AAEA;IACI,aAAa;IACb,sBAAsB;IACtB,mBAAmB;IACnB,QAAQ;AACZ;;AAEA;IACI,mBAAmB;IACnB,mBAAmB;IACnB,8BAA8B;IAC9B,mBAAmB;IACnB,SAAS;AACb;;AAEA;IACI,oCAAoC;IACpC,eAAe;IACf,gBAAgB;IAChB,oBAAoB;AACxB;;AAEA;IACI,OAAO;IACP,SAAS;IACT,eAAe;AACnB;;AAEA;IACI,kBAAkB;IAClB,oBAAoB;IACpB,mBAAmB;IACnB,eAAe;IACf,cAAc;AAClB;;AAEA;IACI,kBAAkB;IAClB,UAAU;IACV,eAAe;IACf,QAAQ;IACR,SAAS;IACT,SAAS;AACb;;AAEA;IACI,kBAAkB;IAClB,qBAAqB;IACrB,WAAW;IACX,YAAY;IACZ,yCAAyC;IACzC,mBAAmB;IACnB,sCAAsC;IACtC,sBAAsB;AAC1B;;AAEA;IACI,WAAW;IACX,kBAAkB;IAClB,WAAW;IACX,YAAY;IACZ,SAAS;IACT,QAAQ;IACR,uBAAuB;IACvB,kBAAkB;IAClB,+BAA+B;IAC/B,wCAAwC;AAC5C;;AAEA;IACI,wCAAwC;AAC5C;;AAEA;IACI,2BAA2B;AAC/B;;AAEA;IACI,6CAA6C;AACjD;;AAEA;IACI,yCAAyC;AAC7C;;AAEA;IACI,wCAAwC;AAC5C;;AAEA;;;;IAII,WAAW;IACX,sBAAsB;AAC1B;;AAEA;IACI,aAAa;IACb,QAAQ;IACR,WAAW;AACf;;AAEA;IACI,cAAc;AAClB;;AAEA;IACI,OAAO;AACX;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,QAAQ;IACR,WAAW;AACf;;AAEA;IACI,OAAO;AACX;;AAEA;IACI,OAAO;IACP,aAAa;AACjB;;AAEA;;IAEI,OAAO;IACP,aAAa;IACb,sBAAsB;IACtB,uBAAuB;AAC3B;;AAEA;IACI,kBAAkB;AACtB;;AAEA;IACI,qBAAqB;IACrB,gBAAgB;IAChB,gBAAgB;AACpB;;AAEA;IACI,kBAAkB;IAClB,MAAM;IACN,OAAO;IACP,QAAQ;IACR,gFAAgF;IAChF,gBAAgB;IAChB,0CAA0C;IAC1C,aAAa;IACb,mBAAmB;IACnB,uBAAuB;IACvB,aAAa;IACb,mBAAmB;AACvB;;AAEA;IACI,eAAe;IACf,gBAAgB;IAChB,WAAW;AACf;;AAEA;IACI,mCAAmC;IACnC,wBAAwB;IACxB,kBAAkB;IAClB,kBAAkB;IAClB,mBAAmB;IACnB,eAAe;IACf,gBAAgB;IAChB,mCAAmC;IACnC,aAAa;IACb,sBAAsB;IACtB,SAAS;AACb;;AAEA;IACI,OAAO;AACX;;AAEA;IACI,gBAAgB;AACpB;;AAEA;IACI,mCAAmC;IACnC,wBAAwB;IACxB,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;IAClB,eAAe;IACf,gBAAgB;IAChB,eAAe;IACf,sBAAsB;IACtB,sCAAsC;AAC1C;;AAEA;IACI,mCAAmC;AACvC;;AAEA;IACI,mCAAmC;AACvC","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.chart-wizard-widget {\n padding: 10px;\n height: 100%;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n}\n\n.chart-wizard-input-row {\n display: flex;\n flex-direction: column;\n margin-bottom: 15px;\n gap: 5px;\n}\n\n.chart-wizard-boolean-row {\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n gap: 12px;\n}\n\n.chart-wizard-input-label {\n color: var(--jp-content-font-color2);\n font-size: 12px;\n font-weight: 500;\n text-transform: none;\n}\n\n.chart-wizard-boolean-label {\n flex: 1;\n margin: 0;\n cursor: pointer;\n}\n\n.chart-wizard-toggle-container {\n position: relative;\n display: inline-flex;\n align-items: center;\n cursor: pointer;\n flex-shrink: 0;\n}\n\n.chart-wizard-toggle-input {\n position: absolute;\n opacity: 0;\n cursor: pointer;\n width: 0;\n height: 0;\n margin: 0;\n}\n\n.chart-wizard-toggle-slider {\n position: relative;\n display: inline-block;\n width: 44px;\n height: 24px;\n background-color: var(--jp-border-color2);\n border-radius: 12px;\n transition: background-color 0.3s ease;\n box-sizing: border-box;\n}\n\n.chart-wizard-toggle-slider::before {\n content: '';\n position: absolute;\n width: 20px;\n height: 20px;\n left: 2px;\n top: 2px;\n background-color: white;\n border-radius: 50%;\n transition: transform 0.3s ease;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n}\n\n.chart-wizard-toggle-input:checked + .chart-wizard-toggle-slider {\n background-color: var(--jp-brand-color1);\n}\n\n.chart-wizard-toggle-input:checked + .chart-wizard-toggle-slider::before {\n transform: translateX(20px);\n}\n\n.chart-wizard-toggle-input:focus + .chart-wizard-toggle-slider {\n box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.2);\n}\n\n.chart-wizard-toggle-input:hover + .chart-wizard-toggle-slider {\n background-color: var(--jp-border-color1);\n}\n\n.chart-wizard-toggle-input:checked:hover + .chart-wizard-toggle-slider {\n background-color: var(--jp-brand-color0);\n}\n\n.chart-wizard-number-input,\n.chart-wizard-text-input,\n.chart-wizard-color-input,\n.chart-wizard-tuple-input {\n width: 100%;\n box-sizing: border-box;\n}\n\n.chart-wizard-color-container {\n display: flex;\n gap: 8px;\n width: 100%;\n}\n\n.chart-wizard-color-picker {\n flex-shrink: 0;\n}\n\n.chart-wizard-color-input {\n flex: 1;\n}\n\n.chart-wizard-tuple-container {\n display: flex;\n align-items: center;\n gap: 5px;\n width: 100%;\n}\n\n.chart-wizard-tuple-input {\n flex: 1;\n}\n\n.chart-wizard-config-container {\n flex: 1;\n min-height: 0;\n}\n\n.chart-wizard-empty-state,\n.chart-wizard-no-config {\n flex: 1;\n display: flex;\n flex-direction: column;\n justify-content: center;\n}\n\n.chart-wizard-no-config p {\n text-align: center;\n}\n\n.chart-wizard-loading-dots {\n display: inline-block;\n min-width: 1.5em;\n text-align: left;\n}\n\n.chart-wizard-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n /* Height is set dynamically via inline style to cover full scrollable content */\n min-height: 100%;\n background-color: rgba(255, 255, 255, 0.8);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n pointer-events: all;\n}\n\n.chart-wizard-overlay-text {\n font-size: 16px;\n font-weight: 500;\n color: #333;\n}\n\n.chart-wizard-warning {\n background-color: var(--yellow-100);\n color: var(--yellow-900);\n padding: 10px 12px;\n border-radius: 4px;\n margin-bottom: 15px;\n font-size: 13px;\n line-height: 1.4;\n border: 1px solid var(--yellow-300);\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.chart-wizard-warning-content {\n flex: 1;\n}\n\n.chart-wizard-warning strong {\n font-weight: 600;\n}\n\n.chart-wizard-warning-button {\n background-color: var(--yellow-600);\n color: var(--yellow-900);\n border: none;\n padding: 6px 12px;\n border-radius: 4px;\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n align-self: flex-start;\n transition: background-color 0.2s ease;\n}\n\n.chart-wizard-warning-button:hover {\n background-color: var(--yellow-500);\n}\n\n.chart-wizard-warning-button:active {\n background-color: var(--yellow-300);\n}"],"sourceRoot":""}]);
19804
20641
  // Exports
19805
20642
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
19806
20643
 
@@ -21146,10 +21983,9 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
21146
21983
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
21147
21984
  display: flex;
21148
21985
  flex-direction: column;
21149
- min-width: 200px;
21986
+ min-width: 225px;
21150
21987
  white-space: nowrap;
21151
21988
  height: 400px;
21152
- min-width: 225px;
21153
21989
  max-width: 350px;
21154
21990
  overflow-y: auto;
21155
21991
  }
@@ -21166,6 +22002,22 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
21166
22002
  left: auto;
21167
22003
  }
21168
22004
 
22005
+ /* Responsive width based on chat taskpane container width */
22006
+ /* Make dropdown width relative to container width, accounting for padding */
22007
+ /* At minimum taskpane width (350px), dropdown should fit within available space (330px accounting for 20px padding) */
22008
+ @container (max-width: 350px) {
22009
+ .dropdown-menu {
22010
+ max-width: calc(100cqw - 20px);
22011
+ }
22012
+ }
22013
+
22014
+ /* For wider taskpanes, allow dropdown to use up to 350px but still respect container width */
22015
+ @container (min-width: 351px) {
22016
+ .dropdown-menu {
22017
+ max-width: min(350px, calc(100cqw - 20px));
22018
+ }
22019
+ }
22020
+
21169
22021
  .dropdown-item-row {
21170
22022
  display: flex;
21171
22023
  flex-direction: row;
@@ -21221,7 +22073,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
21221
22073
  display: flex;
21222
22074
  align-items: center;
21223
22075
  }
21224
- `, "",{"version":3,"sources":["webpack://./style/DropdownMenu.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;EACE,kBAAkB;EAClB,qBAAqB;AACvB;;AAEA;EACE,kBAAkB;EAClB,qBAAqB;EACrB,aAAa;EACb,yCAAyC;EACzC,yCAAyC;EACzC,kBAAkB;EAClB,wCAAwC;EACxC,aAAa;EACb,sBAAsB;EACtB,gBAAgB;EAChB,mBAAmB;EACnB,aAAa;EACb,gBAAgB;EAChB,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA,0BAA0B;AAC1B;EACE,OAAO;EACP,WAAW;AACb;;AAEA,2BAA2B;AAC3B;EACE,QAAQ;EACR,UAAU;AACZ;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,8BAA8B;EAC9B,mBAAmB;EACnB,QAAQ;EACR,gBAAgB;EAChB,mBAAmB,EAAE,iDAAiD;AACxE;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,mBAAmB;EACnB,gBAAgB;EAChB,YAAY;EACZ,gBAAgB;EAChB,+BAA+B;EAC/B,OAAO;EACP,gBAAgB;EAChB,uBAAuB;EACvB,eAAe;AACjB;;AAEA;EACE,WAAW;EACX,eAAe;EACf,YAAY;EACZ,aAAa;EACb,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,iBAAiB,EAAE,2BAA2B;AAChD;;AAEA;EACE,YAAY;EACZ,eAAe;AACjB;;AAEA;;;CAGC;AACD;;EAEE,aAAa;EACb,mBAAmB;AACrB","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.dropdown-container {\n position: relative;\n display: inline-block;\n}\n\n.dropdown-menu {\n position: absolute;\n top: calc(100% + 4px);\n z-index: 1000;\n background-color: var(--jp-layout-color1);\n border: 1px solid var(--jp-layout-color2);\n border-radius: 3px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n display: flex;\n flex-direction: column;\n min-width: 200px;\n white-space: nowrap;\n height: 400px;\n min-width: 225px;\n max-width: 350px;\n overflow-y: auto;\n}\n\n/* Left-aligned dropdown */\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n\n/* Right-aligned dropdown */\n.dropdown-menu-right {\n right: 0;\n left: auto;\n}\n\n.dropdown-item-row {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n gap: 8px;\n padding: 4px 2px;\n padding-right: 20px; /* Add padding to leave space for the scrollbar */\n}\n\n.dropdown-item-row:hover {\n background-color: var(--jp-layout-color2);\n}\n\n.dropdown-item-main {\n display: flex;\n flex-direction: row;\n align-items: center;\n text-align: left;\n border: none;\n background: none;\n color: var(--jp-ui-font-color1);\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n cursor: pointer;\n}\n\n.dropdown-item-icon {\n width: 20px;\n min-width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.dropdown-item-label {\n padding-left: 3px; /* Add consistent padding */\n}\n\n.dropdown-item-disabled {\n opacity: 0.5;\n cursor: default;\n}\n\n/* \n When using Lab Icons, we seem to get an extra div around the svg icon\n This makes sure the svg is aligned properly in that div\n*/\n.dropdown-item-icon > div, \n.dropdown-item-secondary > div{\n display: flex;\n align-items: center;\n}\n"],"sourceRoot":""}]);
22076
+ `, "",{"version":3,"sources":["webpack://./style/DropdownMenu.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;EACE,kBAAkB;EAClB,qBAAqB;AACvB;;AAEA;EACE,kBAAkB;EAClB,qBAAqB;EACrB,aAAa;EACb,yCAAyC;EACzC,yCAAyC;EACzC,kBAAkB;EAClB,wCAAwC;EACxC,aAAa;EACb,sBAAsB;EACtB,gBAAgB;EAChB,mBAAmB;EACnB,aAAa;EACb,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA,0BAA0B;AAC1B;EACE,OAAO;EACP,WAAW;AACb;;AAEA,2BAA2B;AAC3B;EACE,QAAQ;EACR,UAAU;AACZ;;AAEA,4DAA4D;AAC5D,4EAA4E;AAC5E,sHAAsH;AACtH;EACE;IACE,8BAA8B;EAChC;AACF;;AAEA,6FAA6F;AAC7F;EACE;IACE,0CAA0C;EAC5C;AACF;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,8BAA8B;EAC9B,mBAAmB;EACnB,QAAQ;EACR,gBAAgB;EAChB,mBAAmB,EAAE,iDAAiD;AACxE;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,mBAAmB;EACnB,gBAAgB;EAChB,YAAY;EACZ,gBAAgB;EAChB,+BAA+B;EAC/B,OAAO;EACP,gBAAgB;EAChB,uBAAuB;EACvB,eAAe;AACjB;;AAEA;EACE,WAAW;EACX,eAAe;EACf,YAAY;EACZ,aAAa;EACb,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,iBAAiB,EAAE,2BAA2B;AAChD;;AAEA;EACE,YAAY;EACZ,eAAe;AACjB;;AAEA;;;CAGC;AACD;;EAEE,aAAa;EACb,mBAAmB;AACrB","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.dropdown-container {\n position: relative;\n display: inline-block;\n}\n\n.dropdown-menu {\n position: absolute;\n top: calc(100% + 4px);\n z-index: 1000;\n background-color: var(--jp-layout-color1);\n border: 1px solid var(--jp-layout-color2);\n border-radius: 3px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n display: flex;\n flex-direction: column;\n min-width: 225px;\n white-space: nowrap;\n height: 400px;\n max-width: 350px;\n overflow-y: auto;\n}\n\n/* Left-aligned dropdown */\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n\n/* Right-aligned dropdown */\n.dropdown-menu-right {\n right: 0;\n left: auto;\n}\n\n/* Responsive width based on chat taskpane container width */\n/* Make dropdown width relative to container width, accounting for padding */\n/* At minimum taskpane width (350px), dropdown should fit within available space (330px accounting for 20px padding) */\n@container (max-width: 350px) {\n .dropdown-menu {\n max-width: calc(100cqw - 20px);\n }\n}\n\n/* For wider taskpanes, allow dropdown to use up to 350px but still respect container width */\n@container (min-width: 351px) {\n .dropdown-menu {\n max-width: min(350px, calc(100cqw - 20px));\n }\n}\n\n.dropdown-item-row {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n gap: 8px;\n padding: 4px 2px;\n padding-right: 20px; /* Add padding to leave space for the scrollbar */\n}\n\n.dropdown-item-row:hover {\n background-color: var(--jp-layout-color2);\n}\n\n.dropdown-item-main {\n display: flex;\n flex-direction: row;\n align-items: center;\n text-align: left;\n border: none;\n background: none;\n color: var(--jp-ui-font-color1);\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n cursor: pointer;\n}\n\n.dropdown-item-icon {\n width: 20px;\n min-width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.dropdown-item-label {\n padding-left: 3px; /* Add consistent padding */\n}\n\n.dropdown-item-disabled {\n opacity: 0.5;\n cursor: default;\n}\n\n/* \n When using Lab Icons, we seem to get an extra div around the svg icon\n This makes sure the svg is aligned properly in that div\n*/\n.dropdown-item-icon > div, \n.dropdown-item-secondary > div{\n display: flex;\n align-items: center;\n}\n"],"sourceRoot":""}]);
21225
22077
  // Exports
21226
22078
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
21227
22079
 
@@ -21870,12 +22722,11 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
21870
22722
 
21871
22723
  .model-option:hover {
21872
22724
  background-color: var(--jp-layout-color2);
21873
- color: var(--purple-700);
21874
22725
  }
21875
22726
 
21876
22727
  .model-option.selected {
21877
22728
  background-color: var(--jp-layout-color2);
21878
- color: var(--purple-700);
22729
+ color: var(--jp-brand-color2);
21879
22730
  }
21880
22731
 
21881
22732
  /* When inside chat-controls - ensure proper alignment with other controls */
@@ -22031,7 +22882,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
22031
22882
 
22032
22883
  .model-tooltip-bullet-item:last-child {
22033
22884
  margin-bottom: 0;
22034
- }`, "",{"version":3,"sources":["webpack://./style/ModelSelector.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF,4DAA4D;;AAE5D;EACE,kBAAkB;EAClB,cAAc;EACd,aAAa;EACb,YAAY,EAAE,mCAAmC;EACjD,aAAa;EACb,mBAAmB,EAAE,sBAAsB;EAC3C,+BAA+B;AACjC;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,kBAAkB;EAClB,YAAY,EAAE,yCAAyC;EACvD,kBAAkB;EAClB,eAAe;EACf,aAAa;EACb,mBAAmB,EAAE,0CAA0C;EAC/D,kBAAkB;EAClB,eAAe;AACjB;;;AAGA;EACE,aAAa;EACb,mBAAmB;EACnB,8BAA8B;EAC9B,WAAW;EACX,YAAY;EACZ,cAAc;EACd,eAAe;EACf,gBAAgB;EAChB,cAAc;EACd,mBAAmB;EACnB,gBAAgB;EAChB,uBAAuB;AACzB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,WAAW;EACX,YAAY;EACZ,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,0BAA0B;EAC1B,gBAAgB;EAChB,cAAc,EAAE,iCAAiC;AACnD;;AAEA,2BAA2B;AAC3B;EACE,kBAAkB;EAClB,YAAY;EACZ,iBAAiB;EACjB,gBAAgB;EAChB,yCAAyC;EACzC,yCAAyC;EACzC,kBAAkB;EAClB,kBAAkB;EAClB,yCAAyC;EACzC,aAAa;EACb,WAAW;AACb;;AAEA;EACE,gBAAgB;EAChB,eAAe;EACf,mCAAmC;EACnC,oCAAoC;EACpC,eAAe;EACf,iCAAiC;EACjC,mBAAmB;EACnB,0BAA0B;EAC1B,aAAa;EACb,mBAAmB;EACnB,8BAA8B;EAC9B,QAAQ;AACV;;AAEA;EACE,OAAO;EACP,YAAY;EACZ,gBAAgB;EAChB,uBAAuB;AACzB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,cAAc;EACd,YAAY;AACd;;AAEA;EACE,yCAAyC;EACzC,wBAAwB;AAC1B;;AAEA;EACE,yCAAyC;EACzC,wBAAwB;AAC1B;;AAEA,4EAA4E;AAC5E;EACE,YAAY;EACZ,aAAa;EACb,mBAAmB;AACrB;;AAEA;EACE,YAAY;EACZ,kBAAkB;AACpB;;AAEA,iDAAiD;AACjD;EACE,aAAa;EACb,wCAAwC;AAC1C;;AAEA;EACE,qBAAqB;EACrB,gBAAgB;EAChB,gBAAgB;EAChB,uBAAuB;EACvB,mBAAmB;EACnB,sBAAsB;AACxB;;AAEA,qDAAqD;AACrD;EACE,aAAa;AACf;;AAEA;EACE,eAAe;AACjB;;AAEA,2CAA2C;AAC3C;;EAEE,uEAAuE;EACvE;IACE,WAAW;EACb;;EAEA;IACE,eAAe;EACjB;;EAEA;IACE,aAAa;EACf;AACF;;AAEA,8EAA8E;AAC9E;EACE,eAAe;EACf,8BAA8B;EAC9B,gCAAgC;EAChC,yCAAyC;EACzC,yCAAyC;EACzC,kBAAkB;EAClB,aAAa;EACb,yCAAyC;EACzC,cAAc,EAAE,kDAAkD;EAClE,YAAY;EACZ,oBAAoB,EAAE,+CAA+C;AACvE;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,SAAS;AACX;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,QAAQ;AACV;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,QAAQ;AACV;;AAEA;EACE,cAAc;EACd,YAAY;EACZ,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,cAAc;AAChB;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,oCAAoC;EACpC,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,8BAA8B;EAC9B,aAAa;EACb,eAAe;AACjB;;AAEA;EACE,aAAa;EACb,QAAQ;AACV;;AAEA;EACE,oCAAoC;EACpC,gBAAgB;AAClB;;AAEA;EACE,oCAAoC;EACpC,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,QAAQ;AACV;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,oCAAoC;EACpC,yBAAyB;EACzB,qBAAqB;AACvB;;AAEA;EACE,SAAS;EACT,kBAAkB;EAClB,qBAAqB;AACvB;;AAEA;EACE,eAAe;EACf,oCAAoC;EACpC,gBAAgB;EAChB,kBAAkB;AACpB;;AAEA;EACE,gBAAgB;AAClB","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n/* ModelSelector.css - responsive design with compact mode */\n\n.model-selector {\n position: relative;\n flex: 0 0 auto;\n margin: 0 8px;\n height: 20px; /* Match height of other elements */\n display: flex;\n align-items: center; /* Center vertically */\n color: var(--jp-ui-font-color2);\n}\n\n.model-selector:hover {\n color: var(--jp-ui-font-color1);\n}\n\n.model-selector-dropdown {\n position: relative;\n height: 20px; /* Fixed height to match other elements */\n border-radius: 4px;\n cursor: pointer;\n display: flex;\n align-items: center; /* Ensure content is vertically centered */\n width: min-content;\n max-width: 18ch;\n}\n\n\n.selected-model {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n height: 100%;\n padding: 0 8px;\n font-size: 12px;\n font-weight: 500;\n line-height: 1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.model-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 14px;\n height: 14px;\n line-height: 1;\n}\n\n.dropdown-arrow {\n font-size: 8px;\n transition: transform 0.2s;\n margin-left: 4px;\n flex-shrink: 0; /* Prevent arrow from shrinking */\n}\n\n/* Model options dropdown */\n.model-options {\n position: absolute;\n bottom: 100%;\n max-height: 180px;\n overflow-y: auto;\n background-color: var(--jp-layout-color1);\n border: 1px solid var(--jp-layout-color2);\n border-radius: 4px;\n margin-bottom: 4px;\n box-shadow: 0 -2px 6px rgba(0, 0, 0, 0.1);\n z-index: 1000;\n width: auto;\n}\n\n.model-option {\n padding: 4px 8px;\n font-size: 12px;\n /* Keep this size for readability */\n color: var(--jp-content-font-color1);\n cursor: pointer;\n transition: background-color 0.2s;\n white-space: nowrap;\n /* Prevent text wrapping */\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.model-option-name {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.model-type-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n opacity: 0.7;\n}\n\n.model-option:hover {\n background-color: var(--jp-layout-color2);\n color: var(--purple-700);\n}\n\n.model-option.selected {\n background-color: var(--jp-layout-color2);\n color: var(--purple-700);\n}\n\n/* When inside chat-controls - ensure proper alignment with other controls */\n.chat-controls .model-selector {\n height: 20px;\n display: flex;\n align-items: center;\n}\n\n.chat-controls .model-selector-dropdown {\n height: 20px;\n align-self: center;\n}\n\n/* Ensure dropdown appears above other elements */\n.model-options {\n z-index: 1010;\n /* Higher z-index to ensure visibility */\n}\n\n.model-name {\n display: inline-block;\n max-width: 120px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n vertical-align: bottom;\n}\n\n/* On wider screens, show only the name of the model*/\n.model-icon {\n display: none;\n}\n\n.model-name {\n display: inline;\n}\n\n/* On compact screens, show only the icon */\n@container (max-width: 260px) {\n\n /* Shift the dropdown to the left to help prevent right-edge overflow */\n .model-options {\n left: -40px;\n }\n\n .model-icon {\n display: inline;\n }\n\n .model-name {\n display: none;\n }\n}\n\n/* Model tooltip - appears to the right of the dropdown, rendered via portal */\n.model-tooltip {\n position: fixed;\n top: var(--tooltip-top, 200px);\n left: var(--tooltip-left, 200px);\n background-color: var(--jp-layout-color1);\n border: 1px solid var(--jp-layout-color2);\n border-radius: 4px;\n padding: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\n z-index: 10000; /* High z-index to appear above Jupyter notebook */\n width: 280px;\n pointer-events: none; /* Prevent tooltip from blocking mouse events */\n}\n\n.model-tooltip-content {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.model-tooltip-header {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.model-tooltip-title-row {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.model-tooltip-title-icon {\n flex-shrink: 0;\n opacity: 0.8;\n display: flex;\n align-items: center;\n justify-content: center;\n line-height: 1;\n}\n\n.model-tooltip-title {\n font-size: 14px;\n font-weight: 600;\n color: var(--jp-content-font-color1);\n line-height: 1.2;\n}\n\n.model-tooltip-metadata {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 6px 12px;\n font-size: 11px;\n}\n\n.model-tooltip-metadata-item {\n display: flex;\n gap: 4px;\n}\n\n.model-tooltip-metadata-label {\n color: var(--jp-content-font-color2);\n font-weight: 500;\n}\n\n.model-tooltip-metadata-value {\n color: var(--jp-content-font-color1);\n font-weight: 600;\n}\n\n.model-tooltip-section {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.model-tooltip-section-label {\n font-size: 11px;\n font-weight: 600;\n color: var(--jp-content-font-color1);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.model-tooltip-bullet-list {\n margin: 0;\n padding-left: 16px;\n list-style-type: disc;\n}\n\n.model-tooltip-bullet-item {\n font-size: 12px;\n color: var(--jp-content-font-color2);\n line-height: 1.5;\n margin-bottom: 4px;\n}\n\n.model-tooltip-bullet-item:last-child {\n margin-bottom: 0;\n}"],"sourceRoot":""}]);
22885
+ }`, "",{"version":3,"sources":["webpack://./style/ModelSelector.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF,4DAA4D;;AAE5D;EACE,kBAAkB;EAClB,cAAc;EACd,aAAa;EACb,YAAY,EAAE,mCAAmC;EACjD,aAAa;EACb,mBAAmB,EAAE,sBAAsB;EAC3C,+BAA+B;AACjC;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,kBAAkB;EAClB,YAAY,EAAE,yCAAyC;EACvD,kBAAkB;EAClB,eAAe;EACf,aAAa;EACb,mBAAmB,EAAE,0CAA0C;EAC/D,kBAAkB;EAClB,eAAe;AACjB;;;AAGA;EACE,aAAa;EACb,mBAAmB;EACnB,8BAA8B;EAC9B,WAAW;EACX,YAAY;EACZ,cAAc;EACd,eAAe;EACf,gBAAgB;EAChB,cAAc;EACd,mBAAmB;EACnB,gBAAgB;EAChB,uBAAuB;AACzB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,WAAW;EACX,YAAY;EACZ,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,0BAA0B;EAC1B,gBAAgB;EAChB,cAAc,EAAE,iCAAiC;AACnD;;AAEA,2BAA2B;AAC3B;EACE,kBAAkB;EAClB,YAAY;EACZ,iBAAiB;EACjB,gBAAgB;EAChB,yCAAyC;EACzC,yCAAyC;EACzC,kBAAkB;EAClB,kBAAkB;EAClB,yCAAyC;EACzC,aAAa;EACb,WAAW;AACb;;AAEA;EACE,gBAAgB;EAChB,eAAe;EACf,mCAAmC;EACnC,oCAAoC;EACpC,eAAe;EACf,iCAAiC;EACjC,mBAAmB;EACnB,0BAA0B;EAC1B,aAAa;EACb,mBAAmB;EACnB,8BAA8B;EAC9B,QAAQ;AACV;;AAEA;EACE,OAAO;EACP,YAAY;EACZ,gBAAgB;EAChB,uBAAuB;AACzB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,cAAc;EACd,YAAY;AACd;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,yCAAyC;EACzC,6BAA6B;AAC/B;;AAEA,4EAA4E;AAC5E;EACE,YAAY;EACZ,aAAa;EACb,mBAAmB;AACrB;;AAEA;EACE,YAAY;EACZ,kBAAkB;AACpB;;AAEA,iDAAiD;AACjD;EACE,aAAa;EACb,wCAAwC;AAC1C;;AAEA;EACE,qBAAqB;EACrB,gBAAgB;EAChB,gBAAgB;EAChB,uBAAuB;EACvB,mBAAmB;EACnB,sBAAsB;AACxB;;AAEA,qDAAqD;AACrD;EACE,aAAa;AACf;;AAEA;EACE,eAAe;AACjB;;AAEA,2CAA2C;AAC3C;;EAEE,uEAAuE;EACvE;IACE,WAAW;EACb;;EAEA;IACE,eAAe;EACjB;;EAEA;IACE,aAAa;EACf;AACF;;AAEA,8EAA8E;AAC9E;EACE,eAAe;EACf,8BAA8B;EAC9B,gCAAgC;EAChC,yCAAyC;EACzC,yCAAyC;EACzC,kBAAkB;EAClB,aAAa;EACb,yCAAyC;EACzC,cAAc,EAAE,kDAAkD;EAClE,YAAY;EACZ,oBAAoB,EAAE,+CAA+C;AACvE;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,SAAS;AACX;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,QAAQ;AACV;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,QAAQ;AACV;;AAEA;EACE,cAAc;EACd,YAAY;EACZ,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,cAAc;AAChB;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,oCAAoC;EACpC,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,8BAA8B;EAC9B,aAAa;EACb,eAAe;AACjB;;AAEA;EACE,aAAa;EACb,QAAQ;AACV;;AAEA;EACE,oCAAoC;EACpC,gBAAgB;AAClB;;AAEA;EACE,oCAAoC;EACpC,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,QAAQ;AACV;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,oCAAoC;EACpC,yBAAyB;EACzB,qBAAqB;AACvB;;AAEA;EACE,SAAS;EACT,kBAAkB;EAClB,qBAAqB;AACvB;;AAEA;EACE,eAAe;EACf,oCAAoC;EACpC,gBAAgB;EAChB,kBAAkB;AACpB;;AAEA;EACE,gBAAgB;AAClB","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n/* ModelSelector.css - responsive design with compact mode */\n\n.model-selector {\n position: relative;\n flex: 0 0 auto;\n margin: 0 8px;\n height: 20px; /* Match height of other elements */\n display: flex;\n align-items: center; /* Center vertically */\n color: var(--jp-ui-font-color2);\n}\n\n.model-selector:hover {\n color: var(--jp-ui-font-color1);\n}\n\n.model-selector-dropdown {\n position: relative;\n height: 20px; /* Fixed height to match other elements */\n border-radius: 4px;\n cursor: pointer;\n display: flex;\n align-items: center; /* Ensure content is vertically centered */\n width: min-content;\n max-width: 18ch;\n}\n\n\n.selected-model {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n height: 100%;\n padding: 0 8px;\n font-size: 12px;\n font-weight: 500;\n line-height: 1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.model-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 14px;\n height: 14px;\n line-height: 1;\n}\n\n.dropdown-arrow {\n font-size: 8px;\n transition: transform 0.2s;\n margin-left: 4px;\n flex-shrink: 0; /* Prevent arrow from shrinking */\n}\n\n/* Model options dropdown */\n.model-options {\n position: absolute;\n bottom: 100%;\n max-height: 180px;\n overflow-y: auto;\n background-color: var(--jp-layout-color1);\n border: 1px solid var(--jp-layout-color2);\n border-radius: 4px;\n margin-bottom: 4px;\n box-shadow: 0 -2px 6px rgba(0, 0, 0, 0.1);\n z-index: 1000;\n width: auto;\n}\n\n.model-option {\n padding: 4px 8px;\n font-size: 12px;\n /* Keep this size for readability */\n color: var(--jp-content-font-color1);\n cursor: pointer;\n transition: background-color 0.2s;\n white-space: nowrap;\n /* Prevent text wrapping */\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.model-option-name {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.model-type-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n opacity: 0.7;\n}\n\n.model-option:hover {\n background-color: var(--jp-layout-color2);\n}\n\n.model-option.selected {\n background-color: var(--jp-layout-color2);\n color: var(--jp-brand-color2);\n}\n\n/* When inside chat-controls - ensure proper alignment with other controls */\n.chat-controls .model-selector {\n height: 20px;\n display: flex;\n align-items: center;\n}\n\n.chat-controls .model-selector-dropdown {\n height: 20px;\n align-self: center;\n}\n\n/* Ensure dropdown appears above other elements */\n.model-options {\n z-index: 1010;\n /* Higher z-index to ensure visibility */\n}\n\n.model-name {\n display: inline-block;\n max-width: 120px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n vertical-align: bottom;\n}\n\n/* On wider screens, show only the name of the model*/\n.model-icon {\n display: none;\n}\n\n.model-name {\n display: inline;\n}\n\n/* On compact screens, show only the icon */\n@container (max-width: 260px) {\n\n /* Shift the dropdown to the left to help prevent right-edge overflow */\n .model-options {\n left: -40px;\n }\n\n .model-icon {\n display: inline;\n }\n\n .model-name {\n display: none;\n }\n}\n\n/* Model tooltip - appears to the right of the dropdown, rendered via portal */\n.model-tooltip {\n position: fixed;\n top: var(--tooltip-top, 200px);\n left: var(--tooltip-left, 200px);\n background-color: var(--jp-layout-color1);\n border: 1px solid var(--jp-layout-color2);\n border-radius: 4px;\n padding: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\n z-index: 10000; /* High z-index to appear above Jupyter notebook */\n width: 280px;\n pointer-events: none; /* Prevent tooltip from blocking mouse events */\n}\n\n.model-tooltip-content {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.model-tooltip-header {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.model-tooltip-title-row {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.model-tooltip-title-icon {\n flex-shrink: 0;\n opacity: 0.8;\n display: flex;\n align-items: center;\n justify-content: center;\n line-height: 1;\n}\n\n.model-tooltip-title {\n font-size: 14px;\n font-weight: 600;\n color: var(--jp-content-font-color1);\n line-height: 1.2;\n}\n\n.model-tooltip-metadata {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 6px 12px;\n font-size: 11px;\n}\n\n.model-tooltip-metadata-item {\n display: flex;\n gap: 4px;\n}\n\n.model-tooltip-metadata-label {\n color: var(--jp-content-font-color2);\n font-weight: 500;\n}\n\n.model-tooltip-metadata-value {\n color: var(--jp-content-font-color1);\n font-weight: 600;\n}\n\n.model-tooltip-section {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.model-tooltip-section-label {\n font-size: 11px;\n font-weight: 600;\n color: var(--jp-content-font-color1);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.model-tooltip-bullet-list {\n margin: 0;\n padding-left: 16px;\n list-style-type: disc;\n}\n\n.model-tooltip-bullet-item {\n font-size: 12px;\n color: var(--jp-content-font-color2);\n line-height: 1.5;\n margin-bottom: 4px;\n}\n\n.model-tooltip-bullet-item:last-child {\n margin-bottom: 0;\n}"],"sourceRoot":""}]);
22035
22886
  // Exports
22036
22887
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
22037
22888
 
@@ -22980,8 +23831,14 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
22980
23831
  width: 100%;
22981
23832
  border-radius: 4px;
22982
23833
  overflow: hidden;
22983
- background-color: var(--blue-300);
22984
- border: 0.5px solid var(--blue-900);
23834
+ /* Theme-aware button colors set by Mito palettes */
23835
+ background-color: var(--mito-theme-button-background, var(--blue-300));
23836
+ border: 0.5px solid var(--mito-theme-button-border, var(--blue-900));
23837
+ transition: all 0.15s ease;
23838
+ }
23839
+
23840
+ .mito-run-cell-button-group:hover {
23841
+ background-color: var(--mito-theme-button-hover-background, var(--blue-400));
22985
23842
  }
22986
23843
 
22987
23844
  /* Shared button styles */
@@ -22992,7 +23849,8 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
22992
23849
  padding: 0;
22993
23850
  border-radius: 0;
22994
23851
  cursor: pointer;
22995
- color: var(--blue-900);
23852
+ /* Theme-aware text color */
23853
+ color: var(--mito-theme-button-text, var(--blue-900));
22996
23854
  font-size: 13px;
22997
23855
  font-weight: 400;
22998
23856
  transition: background-color 0.15s ease;
@@ -23001,7 +23859,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
23001
23859
  }
23002
23860
 
23003
23861
  .mito-run-cell-button:hover {
23004
- background-color: var(--blue-400);
23862
+ background-color: transparent;
23005
23863
  }
23006
23864
 
23007
23865
  /* Main button (left side - play icon + text) */
@@ -23018,8 +23876,8 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
23018
23876
  background: linear-gradient(
23019
23877
  to bottom,
23020
23878
  transparent,
23021
- var(--blue-900) 20%,
23022
- var(--blue-900) 80%,
23879
+ var(--mito-theme-button-border, var(--blue-900)) 20%,
23880
+ var(--mito-theme-button-border, var(--blue-900)) 80%,
23023
23881
  transparent
23024
23882
  );
23025
23883
  opacity: 0.4;
@@ -23037,8 +23895,8 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
23037
23895
 
23038
23896
  /* Play icon styling */
23039
23897
  .mito-run-cell-button-main > svg {
23040
- color: var(--blue-900);
23041
- fill: var(--blue-900);
23898
+ color: var(--mito-theme-button-text, var(--blue-900));
23899
+ fill: var(--mito-theme-button-text, var(--blue-900));
23042
23900
  width: 12px;
23043
23901
  height: 12px;
23044
23902
  flex-shrink: 0;
@@ -23048,7 +23906,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
23048
23906
  .mito-run-cell-button-dropdown svg {
23049
23907
  width: 14px;
23050
23908
  height: 14px;
23051
- color: var(--blue-900);
23909
+ color: var(--mito-theme-button-text, var(--blue-900));
23052
23910
  }
23053
23911
 
23054
23912
  /* Ensure chevron path only uses stroke, not fill */
@@ -23059,6 +23917,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
23059
23917
 
23060
23918
  .mito-run-cell-button-text {
23061
23919
  white-space: nowrap;
23920
+ color: var(--mito-theme-button-text, var(--blue-900));
23062
23921
  }
23063
23922
 
23064
23923
  /* Running state - applied to the group */
@@ -23196,7 +24055,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
23196
24055
  .jp-Notebook-toolbar {
23197
24056
  display: flex;
23198
24057
  align-items: center;
23199
- }`, "",{"version":3,"sources":["webpack://./style/RunCellButton.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;EACE,kBAAkB;EAClB,cAAc;EACd,YAAY;AACd;;AAEA,yCAAyC;AACzC;EACE,aAAa;EACb,mBAAmB;EACnB,oCAAoC;EACpC,WAAW;EACX,kBAAkB;EAClB,gBAAgB;EAChB,iCAAiC;EACjC,mCAAmC;AACrC;;AAEA,yBAAyB;AACzB;EACE,aAAa;EACb,mBAAmB;EACnB,YAAY;EACZ,UAAU;EACV,gBAAgB;EAChB,eAAe;EACf,sBAAsB;EACtB,eAAe;EACf,gBAAgB;EAChB,uCAAuC;EACvC,YAAY;EACZ,6BAA6B;AAC/B;;AAEA;EACE,iCAAiC;AACnC;;AAEA,+CAA+C;AAC/C;EACE,OAAO;EACP,QAAQ;EACR,eAAe;AACjB;;AAEA,4BAA4B;AAC5B;EACE,UAAU;EACV,YAAY;EACZ;;;;;;GAMC;EACD,YAAY;EACZ,cAAc;AAChB;;AAEA,2CAA2C;AAC3C;EACE,cAAc;EACd,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,gBAAgB;AAClB;;AAEA,sBAAsB;AACtB;EACE,sBAAsB;EACtB,qBAAqB;EACrB,WAAW;EACX,YAAY;EACZ,cAAc;AAChB;;AAEA,oBAAoB;AACpB;EACE,WAAW;EACX,YAAY;EACZ,sBAAsB;AACxB;;AAEA,mDAAmD;AACnD;EACE,UAAU;EACV,oBAAoB;AACtB;;AAEA;EACE,mBAAmB;AACrB;;AAEA,yCAAyC;AACzC;EACE,8BAA8B;AAChC;;AAEA;;EAEE,kCAAkC;EAClC,uBAAuB;AACzB;;AAEA;EACE,kCAAkC;AACpC;;AAEA;EACE;;;;;;GAMC;EACD,YAAY;AACd;;AAEA,uCAAuC;AACvC;EACE,uBAAuB;EACvB,sBAAsB;EACtB,WAAW;EACX,YAAY;AACd;;AAEA;EACE,uBAAuB;AACzB;;AAEA;EACE,uBAAuB;AACzB;;AAEA;EACE,kBAAkB;EAClB,qBAAqB;EACrB,QAAQ;EACR,aAAa;EACb,yCAAyC;EACzC,yCAAyC;EACzC,kBAAkB;EAClB,wCAAwC;EACxC,gBAAgB;EAChB,mBAAmB;EACnB,cAAc;AAChB;;AAEA;EACE,aAAa;EACb,sBAAsB;AACxB;;AAEA;EACE,0BAA0B;EAC1B,eAAe;EACf,gBAAgB;EAChB,+BAA+B;EAC/B,yBAAyB;EACzB,qBAAqB;AACvB;;AAEA;EACE,WAAW;EACX,yCAAyC;EACzC,aAAa;AACf;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,WAAW;EACX,iBAAiB;EACjB,gBAAgB;EAChB,YAAY;EACZ,gBAAgB;EAChB,+BAA+B;EAC/B,eAAe;EACf,eAAe;EACf,gBAAgB;EAChB,QAAQ;AACV;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,WAAW,EAAE,mCAAmC;EAChD,YAAY;EACZ,cAAc;EACd,+BAA+B;EAC/B,cAAc,EAAE,kDAAkD;AACpE;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,cAAc,EAAE,0BAA0B;EAC1C,cAAc,EAAE,qDAAqD;EACrE,+BAA+B;AACjC;;AAEA;EACE,OAAO;AACT;;AAEA;EACE,+BAA+B;EAC/B,eAAe;EACf,iBAAiB;EACjB,YAAY;AACd;;AAEA,gEAAgE;AAChE;EACE,iBAAiB;EACjB,WAAW,EAAE,2BAA2B;AAC1C;;AAEA,qDAAqD;AACrD;EACE,aAAa;EACb,mBAAmB;AACrB","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.mito-run-cell-button-container {\n position: relative;\n display: block;\n width: 160px;\n}\n\n/* Button group - contains both buttons */\n.mito-run-cell-button-group {\n display: flex;\n align-items: center;\n height: var(--toolbar-button-height);\n width: 100%;\n border-radius: 4px;\n overflow: hidden;\n background-color: var(--blue-300);\n border: 0.5px solid var(--blue-900);\n}\n\n/* Shared button styles */\n.mito-run-cell-button {\n display: flex;\n align-items: center;\n border: none;\n padding: 0;\n border-radius: 0;\n cursor: pointer;\n color: var(--blue-900);\n font-size: 13px;\n font-weight: 400;\n transition: background-color 0.15s ease;\n height: 100%;\n background-color: transparent;\n}\n\n.mito-run-cell-button:hover {\n background-color: var(--blue-400);\n}\n\n/* Main button (left side - play icon + text) */\n.mito-run-cell-button-main {\n flex: 1;\n gap: 6px;\n padding: 0 10px;\n}\n\n/* Divider between buttons */\n.mito-run-cell-button-divider {\n width: 1px;\n height: 14px;\n background: linear-gradient(\n to bottom,\n transparent,\n var(--blue-900) 20%,\n var(--blue-900) 80%,\n transparent\n );\n opacity: 0.4;\n flex-shrink: 0;\n}\n\n/* Dropdown button (right side - chevron) */\n.mito-run-cell-button-dropdown {\n padding: 0 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 0;\n}\n\n/* Play icon styling */\n.mito-run-cell-button-main > svg {\n color: var(--blue-900);\n fill: var(--blue-900);\n width: 12px;\n height: 12px;\n flex-shrink: 0;\n}\n\n/* Chevron styling */\n.mito-run-cell-button-dropdown svg {\n width: 14px;\n height: 14px;\n color: var(--blue-900);\n}\n\n/* Ensure chevron path only uses stroke, not fill */\n.mito-run-cell-button-dropdown svg path {\n fill: none;\n stroke: currentColor;\n}\n\n.mito-run-cell-button-text {\n white-space: nowrap;\n}\n\n/* Running state - applied to the group */\n.mito-run-cell-button-running {\n border-color: var(--green-900);\n}\n\n.mito-run-cell-button-running .mito-run-cell-button,\n.mito-run-cell-button-running .mito-run-cell-button-dropdown {\n background-color: var(--green-300);\n color: var(--green-900);\n}\n\n.mito-run-cell-button-running .mito-run-cell-button-dropdown:hover {\n background-color: var(--green-500);\n}\n\n.mito-run-cell-button-running .mito-run-cell-button-divider {\n background: linear-gradient(\n to bottom,\n transparent,\n var(--green-900) 20%,\n var(--green-900) 80%,\n transparent\n );\n opacity: 0.5;\n}\n\n/* LoadingCircle styling when running */\n.mito-run-cell-button-running .mito-run-cell-button-main > svg {\n color: var(--green-900);\n fill: var(--green-900);\n width: 16px;\n height: 16px;\n}\n\n.mito-run-cell-button-running .mito-run-cell-button-text {\n color: var(--green-900);\n}\n\n.mito-run-cell-button-running .mito-run-cell-button-dropdown svg {\n color: var(--green-900);\n}\n\n.mito-run-cell-dropdown-menu {\n position: absolute;\n top: calc(100% + 4px);\n right: 0;\n z-index: 1000;\n background-color: var(--jp-layout-color1);\n border: 1px solid var(--jp-layout-color2);\n border-radius: 3px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n min-width: 200px;\n white-space: nowrap;\n padding: 4px 0;\n}\n\n.mito-run-cell-dropdown-section {\n display: flex;\n flex-direction: column;\n}\n\n.mito-run-cell-dropdown-section-header {\n padding: 6px 12px 4px 12px;\n font-size: 11px;\n font-weight: 600;\n color: var(--jp-ui-font-color2);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.mito-run-cell-dropdown-separator {\n height: 1px;\n background-color: var(--jp-layout-color2);\n margin: 4px 0;\n}\n\n.mito-run-cell-dropdown-item {\n display: flex;\n align-items: center;\n width: 100%;\n padding: 6px 12px;\n text-align: left;\n border: none;\n background: none;\n color: var(--jp-ui-font-color1);\n cursor: pointer;\n font-size: 13px;\n font-weight: 400;\n gap: 8px;\n}\n\n.mito-run-cell-dropdown-item:hover {\n background-color: var(--jp-layout-color2);\n}\n\n.mito-run-cell-dropdown-item-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px; /* Fixed width to align all icons */\n height: 16px;\n flex-shrink: 0;\n color: var(--jp-ui-font-color1);\n line-height: 0; /* Remove extra line height for better alignment */\n}\n\n.mito-run-cell-dropdown-item-icon svg {\n width: 16px;\n height: 16px;\n display: block; /* Remove inline spacing */\n margin: 0 auto; /* Center the icon within the fixed width container */\n color: var(--jp-ui-font-color1); \n}\n\n.mito-run-cell-dropdown-item-label {\n flex: 1;\n}\n\n.mito-run-cell-dropdown-item-shortcut {\n color: var(--jp-ui-font-color2);\n font-size: 11px;\n margin-left: 10px;\n opacity: 0.7;\n}\n\n/* Position the button widget on the right side of the toolbar */\n.jp-Notebook-toolbar .mito-run-cell-button-widget {\n margin-left: auto;\n order: 9999; /* Ensure it appears last */\n}\n\n/* Ensure toolbar uses flexbox for proper alignment */\n.jp-Notebook-toolbar {\n display: flex;\n align-items: center;\n}"],"sourceRoot":""}]);
24058
+ }`, "",{"version":3,"sources":["webpack://./style/RunCellButton.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;EACE,kBAAkB;EAClB,cAAc;EACd,YAAY;AACd;;AAEA,yCAAyC;AACzC;EACE,aAAa;EACb,mBAAmB;EACnB,oCAAoC;EACpC,WAAW;EACX,kBAAkB;EAClB,gBAAgB;EAChB,mDAAmD;EACnD,sEAAsE;EACtE,oEAAoE;EACpE,0BAA0B;AAC5B;;AAEA;EACE,4EAA4E;AAC9E;;AAEA,yBAAyB;AACzB;EACE,aAAa;EACb,mBAAmB;EACnB,YAAY;EACZ,UAAU;EACV,gBAAgB;EAChB,eAAe;EACf,2BAA2B;EAC3B,qDAAqD;EACrD,eAAe;EACf,gBAAgB;EAChB,uCAAuC;EACvC,YAAY;EACZ,6BAA6B;AAC/B;;AAEA;EACE,6BAA6B;AAC/B;;AAEA,+CAA+C;AAC/C;EACE,OAAO;EACP,QAAQ;EACR,eAAe;AACjB;;AAEA,4BAA4B;AAC5B;EACE,UAAU;EACV,YAAY;EACZ;;;;;;GAMC;EACD,YAAY;EACZ,cAAc;AAChB;;AAEA,2CAA2C;AAC3C;EACE,cAAc;EACd,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,gBAAgB;AAClB;;AAEA,sBAAsB;AACtB;EACE,qDAAqD;EACrD,oDAAoD;EACpD,WAAW;EACX,YAAY;EACZ,cAAc;AAChB;;AAEA,oBAAoB;AACpB;EACE,WAAW;EACX,YAAY;EACZ,qDAAqD;AACvD;;AAEA,mDAAmD;AACnD;EACE,UAAU;EACV,oBAAoB;AACtB;;AAEA;EACE,mBAAmB;EACnB,qDAAqD;AACvD;;AAEA,yCAAyC;AACzC;EACE,8BAA8B;AAChC;;AAEA;;EAEE,kCAAkC;EAClC,uBAAuB;AACzB;;AAEA;EACE,kCAAkC;AACpC;;AAEA;EACE;;;;;;GAMC;EACD,YAAY;AACd;;AAEA,uCAAuC;AACvC;EACE,uBAAuB;EACvB,sBAAsB;EACtB,WAAW;EACX,YAAY;AACd;;AAEA;EACE,uBAAuB;AACzB;;AAEA;EACE,uBAAuB;AACzB;;AAEA;EACE,kBAAkB;EAClB,qBAAqB;EACrB,QAAQ;EACR,aAAa;EACb,yCAAyC;EACzC,yCAAyC;EACzC,kBAAkB;EAClB,wCAAwC;EACxC,gBAAgB;EAChB,mBAAmB;EACnB,cAAc;AAChB;;AAEA;EACE,aAAa;EACb,sBAAsB;AACxB;;AAEA;EACE,0BAA0B;EAC1B,eAAe;EACf,gBAAgB;EAChB,+BAA+B;EAC/B,yBAAyB;EACzB,qBAAqB;AACvB;;AAEA;EACE,WAAW;EACX,yCAAyC;EACzC,aAAa;AACf;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,WAAW;EACX,iBAAiB;EACjB,gBAAgB;EAChB,YAAY;EACZ,gBAAgB;EAChB,+BAA+B;EAC/B,eAAe;EACf,eAAe;EACf,gBAAgB;EAChB,QAAQ;AACV;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,WAAW,EAAE,mCAAmC;EAChD,YAAY;EACZ,cAAc;EACd,+BAA+B;EAC/B,cAAc,EAAE,kDAAkD;AACpE;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,cAAc,EAAE,0BAA0B;EAC1C,cAAc,EAAE,qDAAqD;EACrE,+BAA+B;AACjC;;AAEA;EACE,OAAO;AACT;;AAEA;EACE,+BAA+B;EAC/B,eAAe;EACf,iBAAiB;EACjB,YAAY;AACd;;AAEA,gEAAgE;AAChE;EACE,iBAAiB;EACjB,WAAW,EAAE,2BAA2B;AAC1C;;AAEA,qDAAqD;AACrD;EACE,aAAa;EACb,mBAAmB;AACrB","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.mito-run-cell-button-container {\n position: relative;\n display: block;\n width: 160px;\n}\n\n/* Button group - contains both buttons */\n.mito-run-cell-button-group {\n display: flex;\n align-items: center;\n height: var(--toolbar-button-height);\n width: 100%;\n border-radius: 4px;\n overflow: hidden;\n /* Theme-aware button colors set by Mito palettes */\n background-color: var(--mito-theme-button-background, var(--blue-300));\n border: 0.5px solid var(--mito-theme-button-border, var(--blue-900));\n transition: all 0.15s ease;\n}\n\n.mito-run-cell-button-group:hover {\n background-color: var(--mito-theme-button-hover-background, var(--blue-400));\n}\n\n/* Shared button styles */\n.mito-run-cell-button {\n display: flex;\n align-items: center;\n border: none;\n padding: 0;\n border-radius: 0;\n cursor: pointer;\n /* Theme-aware text color */\n color: var(--mito-theme-button-text, var(--blue-900));\n font-size: 13px;\n font-weight: 400;\n transition: background-color 0.15s ease;\n height: 100%;\n background-color: transparent;\n}\n\n.mito-run-cell-button:hover {\n background-color: transparent;\n}\n\n/* Main button (left side - play icon + text) */\n.mito-run-cell-button-main {\n flex: 1;\n gap: 6px;\n padding: 0 10px;\n}\n\n/* Divider between buttons */\n.mito-run-cell-button-divider {\n width: 1px;\n height: 14px;\n background: linear-gradient(\n to bottom,\n transparent,\n var(--mito-theme-button-border, var(--blue-900)) 20%,\n var(--mito-theme-button-border, var(--blue-900)) 80%,\n transparent\n );\n opacity: 0.4;\n flex-shrink: 0;\n}\n\n/* Dropdown button (right side - chevron) */\n.mito-run-cell-button-dropdown {\n padding: 0 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 0;\n}\n\n/* Play icon styling */\n.mito-run-cell-button-main > svg {\n color: var(--mito-theme-button-text, var(--blue-900));\n fill: var(--mito-theme-button-text, var(--blue-900));\n width: 12px;\n height: 12px;\n flex-shrink: 0;\n}\n\n/* Chevron styling */\n.mito-run-cell-button-dropdown svg {\n width: 14px;\n height: 14px;\n color: var(--mito-theme-button-text, var(--blue-900));\n}\n\n/* Ensure chevron path only uses stroke, not fill */\n.mito-run-cell-button-dropdown svg path {\n fill: none;\n stroke: currentColor;\n}\n\n.mito-run-cell-button-text {\n white-space: nowrap;\n color: var(--mito-theme-button-text, var(--blue-900));\n}\n\n/* Running state - applied to the group */\n.mito-run-cell-button-running {\n border-color: var(--green-900);\n}\n\n.mito-run-cell-button-running .mito-run-cell-button,\n.mito-run-cell-button-running .mito-run-cell-button-dropdown {\n background-color: var(--green-300);\n color: var(--green-900);\n}\n\n.mito-run-cell-button-running .mito-run-cell-button-dropdown:hover {\n background-color: var(--green-500);\n}\n\n.mito-run-cell-button-running .mito-run-cell-button-divider {\n background: linear-gradient(\n to bottom,\n transparent,\n var(--green-900) 20%,\n var(--green-900) 80%,\n transparent\n );\n opacity: 0.5;\n}\n\n/* LoadingCircle styling when running */\n.mito-run-cell-button-running .mito-run-cell-button-main > svg {\n color: var(--green-900);\n fill: var(--green-900);\n width: 16px;\n height: 16px;\n}\n\n.mito-run-cell-button-running .mito-run-cell-button-text {\n color: var(--green-900);\n}\n\n.mito-run-cell-button-running .mito-run-cell-button-dropdown svg {\n color: var(--green-900);\n}\n\n.mito-run-cell-dropdown-menu {\n position: absolute;\n top: calc(100% + 4px);\n right: 0;\n z-index: 1000;\n background-color: var(--jp-layout-color1);\n border: 1px solid var(--jp-layout-color2);\n border-radius: 3px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n min-width: 200px;\n white-space: nowrap;\n padding: 4px 0;\n}\n\n.mito-run-cell-dropdown-section {\n display: flex;\n flex-direction: column;\n}\n\n.mito-run-cell-dropdown-section-header {\n padding: 6px 12px 4px 12px;\n font-size: 11px;\n font-weight: 600;\n color: var(--jp-ui-font-color2);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.mito-run-cell-dropdown-separator {\n height: 1px;\n background-color: var(--jp-layout-color2);\n margin: 4px 0;\n}\n\n.mito-run-cell-dropdown-item {\n display: flex;\n align-items: center;\n width: 100%;\n padding: 6px 12px;\n text-align: left;\n border: none;\n background: none;\n color: var(--jp-ui-font-color1);\n cursor: pointer;\n font-size: 13px;\n font-weight: 400;\n gap: 8px;\n}\n\n.mito-run-cell-dropdown-item:hover {\n background-color: var(--jp-layout-color2);\n}\n\n.mito-run-cell-dropdown-item-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px; /* Fixed width to align all icons */\n height: 16px;\n flex-shrink: 0;\n color: var(--jp-ui-font-color1);\n line-height: 0; /* Remove extra line height for better alignment */\n}\n\n.mito-run-cell-dropdown-item-icon svg {\n width: 16px;\n height: 16px;\n display: block; /* Remove inline spacing */\n margin: 0 auto; /* Center the icon within the fixed width container */\n color: var(--jp-ui-font-color1); \n}\n\n.mito-run-cell-dropdown-item-label {\n flex: 1;\n}\n\n.mito-run-cell-dropdown-item-shortcut {\n color: var(--jp-ui-font-color2);\n font-size: 11px;\n margin-left: 10px;\n opacity: 0.7;\n}\n\n/* Position the button widget on the right side of the toolbar */\n.jp-Notebook-toolbar .mito-run-cell-button-widget {\n margin-left: auto;\n order: 9999; /* Ensure it appears last */\n}\n\n/* Ensure toolbar uses flexbox for proper alignment */\n.jp-Notebook-toolbar {\n display: flex;\n align-items: center;\n}"],"sourceRoot":""}]);
23200
24059
  // Exports
23201
24060
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
23202
24061
 
@@ -24080,14 +24939,16 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
24080
24939
  }
24081
24940
 
24082
24941
  .button-blue {
24083
- background-color: var(--blue-300);
24084
- color: var(--blue-900) !important;
24085
- border: 0.5px solid var(--blue-900);
24942
+ /* Theme-aware button colors set by Mito palettes */
24943
+ background-color: var(--mito-theme-button-background, var(--blue-300));
24944
+ color: var(--mito-theme-button-text, var(--blue-900)) !important;
24945
+ border: 0.5px solid var(--mito-theme-button-border, var(--blue-900));
24086
24946
  border-radius: 4px;
24947
+ transition: all 0.15s ease;
24087
24948
  }
24088
24949
 
24089
24950
  .button-blue:hover {
24090
- background-color: var(--blue-400);
24951
+ background-color: var(--mito-theme-button-hover-background, var(--blue-400));
24091
24952
  }
24092
24953
 
24093
24954
  .button-dark-purple {
@@ -24112,7 +24973,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
24112
24973
  font-size: 12px;
24113
24974
  padding: 2px 5px;
24114
24975
  }
24115
- `, "",{"version":3,"sources":["webpack://./style/button.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;CAIC;;AAED;EACE,YAAY;EACZ,kBAAkB;EAClB,eAAe;EACf,eAAe;EACf,2EAA2E;EAC3E,mBAAmB;EACnB,iBAAiB;AACnB;;AAEA;EACE,YAAY;EACZ,mBAAmB;EACnB,oBAAoB;AACtB;;AAEA;EACE,kCAAkC;EAClC,kCAAkC;AACpC;;AAEA;EACE,kCAAkC;AACpC;;AAEA;EACE,gCAAgC;EAChC,gCAAgC;AAClC;;AAEA;EACE,gCAAgC;AAClC;;AAEA;EACE,yCAAyC;EACzC,+CAA+C;AACjD;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,mCAAmC;EACnC,mCAAmC;AACrC;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,iCAAiC;EACjC,iCAAiC;EACjC,mCAAmC;EACnC,kBAAkB;AACpB;;AAEA;EACE,iCAAiC;AACnC;;AAEA;EACE,mCAAmC;EACnC,8BAA8B;AAChC;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,oCAAoC;EACpC,eAAe;EACf,gBAAgB;AAClB","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n/* \n Classes that can be used for any button, making it easier to keep \n the theme consistent. For example, use them to make a textButton or\n textAndIconButton green.\n*/\n\n.button-base {\n border: none;\n border-radius: 3px;\n cursor: pointer;\n font-size: 14px;\n /* Make sure the button grows large enough so that the text does not wrap */\n white-space: nowrap;\n padding: 5px 10px;\n}\n\n.button-base:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n.button-green {\n background-color: var(--green-400);\n color: var(--green-900) !important;\n}\n\n.button-green:hover {\n background-color: var(--green-500);\n}\n\n.button-red {\n background-color: var(--red-400);\n color: var(--red-900) !important;\n}\n\n.button-red:hover {\n background-color: var(--red-500);\n}\n\n.button-gray {\n background-color: var(--jp-layout-color2);\n color: var(--jp-content-font-color1) !important;\n}\n\n.button-gray:hover {\n background-color: var(--jp-layout-color3);\n}\n\n.button-purple {\n background-color: var(--purple-300);\n color: var(--purple-700) !important;\n}\n\n.button-purple:hover {\n background-color: var(--purple-400);\n}\n\n.button-purple:disabled:hover {\n background-color: var(--purple-300);\n}\n\n.button-blue {\n background-color: var(--blue-300);\n color: var(--blue-900) !important;\n border: 0.5px solid var(--blue-900);\n border-radius: 4px;\n}\n\n.button-blue:hover {\n background-color: var(--blue-400);\n}\n\n.button-dark-purple {\n background-color: var(--purple-500);\n color: var(--white) !important;\n}\n\n.button-dark-purple:hover {\n background-color: var(--purple-600);\n}\n\n.button-width-block {\n width: 100%;\n}\n\n.button-width-fit-contents {\n width: fit-content;\n}\n\n.button-small {\n height: var(--toolbar-button-height);\n font-size: 12px;\n padding: 2px 5px;\n}\n"],"sourceRoot":""}]);
24976
+ `, "",{"version":3,"sources":["webpack://./style/button.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;CAIC;;AAED;EACE,YAAY;EACZ,kBAAkB;EAClB,eAAe;EACf,eAAe;EACf,2EAA2E;EAC3E,mBAAmB;EACnB,iBAAiB;AACnB;;AAEA;EACE,YAAY;EACZ,mBAAmB;EACnB,oBAAoB;AACtB;;AAEA;EACE,kCAAkC;EAClC,kCAAkC;AACpC;;AAEA;EACE,kCAAkC;AACpC;;AAEA;EACE,gCAAgC;EAChC,gCAAgC;AAClC;;AAEA;EACE,gCAAgC;AAClC;;AAEA;EACE,yCAAyC;EACzC,+CAA+C;AACjD;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,mCAAmC;EACnC,mCAAmC;AACrC;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,mDAAmD;EACnD,sEAAsE;EACtE,gEAAgE;EAChE,oEAAoE;EACpE,kBAAkB;EAClB,0BAA0B;AAC5B;;AAEA;EACE,4EAA4E;AAC9E;;AAEA;EACE,mCAAmC;EACnC,8BAA8B;AAChC;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,oCAAoC;EACpC,eAAe;EACf,gBAAgB;AAClB","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n/* \n Classes that can be used for any button, making it easier to keep \n the theme consistent. For example, use them to make a textButton or\n textAndIconButton green.\n*/\n\n.button-base {\n border: none;\n border-radius: 3px;\n cursor: pointer;\n font-size: 14px;\n /* Make sure the button grows large enough so that the text does not wrap */\n white-space: nowrap;\n padding: 5px 10px;\n}\n\n.button-base:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n.button-green {\n background-color: var(--green-400);\n color: var(--green-900) !important;\n}\n\n.button-green:hover {\n background-color: var(--green-500);\n}\n\n.button-red {\n background-color: var(--red-400);\n color: var(--red-900) !important;\n}\n\n.button-red:hover {\n background-color: var(--red-500);\n}\n\n.button-gray {\n background-color: var(--jp-layout-color2);\n color: var(--jp-content-font-color1) !important;\n}\n\n.button-gray:hover {\n background-color: var(--jp-layout-color3);\n}\n\n.button-purple {\n background-color: var(--purple-300);\n color: var(--purple-700) !important;\n}\n\n.button-purple:hover {\n background-color: var(--purple-400);\n}\n\n.button-purple:disabled:hover {\n background-color: var(--purple-300);\n}\n\n.button-blue {\n /* Theme-aware button colors set by Mito palettes */\n background-color: var(--mito-theme-button-background, var(--blue-300));\n color: var(--mito-theme-button-text, var(--blue-900)) !important;\n border: 0.5px solid var(--mito-theme-button-border, var(--blue-900));\n border-radius: 4px;\n transition: all 0.15s ease;\n}\n\n.button-blue:hover {\n background-color: var(--mito-theme-button-hover-background, var(--blue-400));\n}\n\n.button-dark-purple {\n background-color: var(--purple-500);\n color: var(--white) !important;\n}\n\n.button-dark-purple:hover {\n background-color: var(--purple-600);\n}\n\n.button-width-block {\n width: 100%;\n}\n\n.button-width-fit-contents {\n width: fit-content;\n}\n\n.button-small {\n height: var(--toolbar-button-height);\n font-size: 12px;\n padding: 2px 5px;\n}\n"],"sourceRoot":""}]);
24116
24977
  // Exports
24117
24978
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
24118
24979
 
@@ -24155,7 +25016,7 @@ module.exports = "<svg width=\"22\" height=\"17\" viewBox=\"0 0 22 17\" fill=\"n
24155
25016
  \********************************/
24156
25017
  /***/ ((module) => {
24157
25018
 
24158
- module.exports = "<svg width=\"19\" height=\"20\" viewBox=\"0 0 19 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M15.0626 4.8125C15.5466 4.8125 15.9376 5.20352 15.9376 5.6875C15.9376 6.17148 15.5466 6.5625 15.0626 6.5625C14.5787 6.5625 14.1876 6.17148 14.1876 5.6875C14.1876 5.20352 14.5787 4.8125 15.0626 4.8125ZM12.0001 4.8125C12.4841 4.8125 12.8751 5.20352 12.8751 5.6875C12.8751 6.17148 12.4841 6.5625 12.0001 6.5625C11.5162 6.5625 11.1251 6.17148 11.1251 5.6875C11.1251 5.20352 11.5162 4.8125 12.0001 4.8125ZM8.93764 4.8125C9.42162 4.8125 9.81264 5.20352 9.81264 5.6875C9.81264 6.17148 9.42162 6.5625 8.93764 6.5625C8.45365 6.5625 8.06264 6.17148 8.06264 5.6875C8.06264 5.20352 8.45365 4.8125 8.93764 4.8125ZM12.0001 0C15.8665 0 19.0001 2.5457 19.0001 5.6875C19.0001 6.98906 18.456 8.18125 17.5537 9.14102C17.9611 10.2184 18.8087 11.1316 18.8224 11.1426C19.0029 11.334 19.0521 11.6129 18.9482 11.8535C18.8443 12.0941 18.6064 12.25 18.3439 12.25C16.6622 12.25 15.3361 11.5473 14.5404 10.984C13.7501 11.2328 12.897 11.375 12.0001 11.375C8.13373 11.375 5.00014 8.8293 5.00014 5.6875C5.00014 2.5457 8.13373 0 12.0001 0ZM12.0001 10.0625C12.7302 10.0625 13.4521 9.95039 14.1439 9.73164L14.7646 9.53477L15.2978 9.91211C15.6888 10.1883 16.2247 10.4973 16.8701 10.7051C16.6705 10.3742 16.4763 10.0023 16.3259 9.60586L16.0361 8.8375L16.5994 8.24141C17.0943 7.71367 17.6876 6.84141 17.6876 5.6875C17.6876 3.27578 15.1365 1.3125 12.0001 1.3125C8.86381 1.3125 6.31264 3.27578 6.31264 5.6875C6.31264 8.09922 8.86381 10.0625 12.0001 10.0625Z\" fill=\"var(--purple-600)\" class=\"jp-icon-selectable\"/>\n <path d=\"M7 7C3.13359 7 0 9.5457 0 12.6875C0 14.0437 0.585156 15.2852 1.55859 16.2613C1.2168 17.6395 0.0738281 18.8672 0.0601563 18.8809C0 18.9438 -0.0164062 19.0367 0.0191406 19.1188C0.0546875 19.2008 0.13125 19.25 0.21875 19.25C2.03164 19.25 3.39063 18.3805 4.06328 17.8445C4.95742 18.1809 5.95 18.375 7 18.375C10.8664 18.375 14 15.8293 14 12.6875C14 9.5457 10.8664 7 7 7ZM3.5 13.5625C3.01602 13.5625 2.625 13.1715 2.625 12.6875C2.625 12.2035 3.01602 11.8125 3.5 11.8125C3.98398 11.8125 4.375 12.2035 4.375 12.6875C4.375 13.1715 3.98398 13.5625 3.5 13.5625ZM7 13.5625C6.51602 13.5625 6.125 13.1715 6.125 12.6875C6.125 12.2035 6.51602 11.8125 7 11.8125C7.48398 11.8125 7.875 12.2035 7.875 12.6875C7.875 13.1715 7.48398 13.5625 7 13.5625ZM10.5 13.5625C10.016 13.5625 9.625 13.1715 9.625 12.6875C9.625 12.2035 10.016 11.8125 10.5 11.8125C10.984 11.8125 11.375 12.2035 11.375 12.6875C11.375 13.1715 10.984 13.5625 10.5 13.5625Z\" fill=\"var(--purple-700)\" class=\"jp-icon-selectable\"/>\n</svg>\n";
25019
+ module.exports = "<svg width=\"19\" height=\"20\" viewBox=\"0 0 19 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M15.0626 4.8125C15.5466 4.8125 15.9376 5.20352 15.9376 5.6875C15.9376 6.17148 15.5466 6.5625 15.0626 6.5625C14.5787 6.5625 14.1876 6.17148 14.1876 5.6875C14.1876 5.20352 14.5787 4.8125 15.0626 4.8125ZM12.0001 4.8125C12.4841 4.8125 12.8751 5.20352 12.8751 5.6875C12.8751 6.17148 12.4841 6.5625 12.0001 6.5625C11.5162 6.5625 11.1251 6.17148 11.1251 5.6875C11.1251 5.20352 11.5162 4.8125 12.0001 4.8125ZM8.93764 4.8125C9.42162 4.8125 9.81264 5.20352 9.81264 5.6875C9.81264 6.17148 9.42162 6.5625 8.93764 6.5625C8.45365 6.5625 8.06264 6.17148 8.06264 5.6875C8.06264 5.20352 8.45365 4.8125 8.93764 4.8125ZM12.0001 0C15.8665 0 19.0001 2.5457 19.0001 5.6875C19.0001 6.98906 18.456 8.18125 17.5537 9.14102C17.9611 10.2184 18.8087 11.1316 18.8224 11.1426C19.0029 11.334 19.0521 11.6129 18.9482 11.8535C18.8443 12.0941 18.6064 12.25 18.3439 12.25C16.6622 12.25 15.3361 11.5473 14.5404 10.984C13.7501 11.2328 12.897 11.375 12.0001 11.375C8.13373 11.375 5.00014 8.8293 5.00014 5.6875C5.00014 2.5457 8.13373 0 12.0001 0ZM12.0001 10.0625C12.7302 10.0625 13.4521 9.95039 14.1439 9.73164L14.7646 9.53477L15.2978 9.91211C15.6888 10.1883 16.2247 10.4973 16.8701 10.7051C16.6705 10.3742 16.4763 10.0023 16.3259 9.60586L16.0361 8.8375L16.5994 8.24141C17.0943 7.71367 17.6876 6.84141 17.6876 5.6875C17.6876 3.27578 15.1365 1.3125 12.0001 1.3125C8.86381 1.3125 6.31264 3.27578 6.31264 5.6875C6.31264 8.09922 8.86381 10.0625 12.0001 10.0625Z\" fill=\"var(--jp-brand-color0)\" class=\"jp-icon-selectable\"/>\n <path d=\"M7 7C3.13359 7 0 9.5457 0 12.6875C0 14.0437 0.585156 15.2852 1.55859 16.2613C1.2168 17.6395 0.0738281 18.8672 0.0601563 18.8809C0 18.9438 -0.0164062 19.0367 0.0191406 19.1188C0.0546875 19.2008 0.13125 19.25 0.21875 19.25C2.03164 19.25 3.39063 18.3805 4.06328 17.8445C4.95742 18.1809 5.95 18.375 7 18.375C10.8664 18.375 14 15.8293 14 12.6875C14 9.5457 10.8664 7 7 7ZM3.5 13.5625C3.01602 13.5625 2.625 13.1715 2.625 12.6875C2.625 12.2035 3.01602 11.8125 3.5 11.8125C3.98398 11.8125 4.375 12.2035 4.375 12.6875C4.375 13.1715 3.98398 13.5625 3.5 13.5625ZM7 13.5625C6.51602 13.5625 6.125 13.1715 6.125 12.6875C6.125 12.2035 6.51602 11.8125 7 11.8125C7.48398 11.8125 7.875 12.2035 7.875 12.6875C7.875 13.1715 7.48398 13.5625 7 13.5625ZM10.5 13.5625C10.016 13.5625 9.625 13.1715 9.625 12.6875C9.625 12.2035 10.016 11.8125 10.5 11.8125C10.984 11.8125 11.375 12.2035 11.375 12.6875C11.375 13.1715 10.984 13.5625 10.5 13.5625Z\" fill=\"var(--jp-brand-color1)\" class=\"jp-icon-selectable\"/>\n</svg>\n";
24159
25020
 
24160
25021
  /***/ }),
24161
25022
 
@@ -24207,6 +25068,60 @@ module.exports = "<svg width=\"14\" height=\"14\" viewBox=\"0 0 10 10\" fill=\"n
24207
25068
 
24208
25069
  module.exports = "<svg width=\"33\" height=\"33\" viewBox=\"0 0 33 33\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g fill=\"currentColor\">\n <path d=\"M27.8204 5.193C24.7983 2.1709 20.7805 0.506836 16.5068 0.506836C7.78625 0.506836 0.506836 7.78625 0.506836 16.5068C0.506836 25.2274 7.78625 32.5068 16.5068 32.5068C25.2274 32.5068 32.5068 25.2274 32.5068 16.5068C32.5068 12.2332 30.8426 8.2151 27.8207 5.19329L27.8204 5.193ZM23.627 21.5962L21.7553 17.7403L23.4737 16.9062L24.3955 18.8053L24.4401 18.6209C24.608 17.9267 24.6932 17.2155 24.6932 16.5068C24.6932 11.6336 20.7854 7.66893 15.9819 7.66893C11.1788 7.66893 7.27066 11.6336 7.27066 16.5068C7.27066 21.3572 11.1414 25.3073 15.9137 25.3444V27.2546C10.0885 27.217 5.36066 22.41 5.36066 16.5067C5.36066 10.5804 10.1253 5.75855 15.9819 5.75855C21.8385 5.75855 26.6032 10.5801 26.6032 16.5067C26.6032 17.2903 26.5175 18.0775 26.3484 18.8468L26.315 18.999L27.9027 18.0676L28.8693 19.7151L24.9693 22.003C24.3869 22.4896 23.6689 21.9597 23.6268 21.5962L23.627 21.5962Z\"/>\n </g>\n</svg>\n";
24209
25070
 
25071
+ /***/ }),
25072
+
25073
+ /***/ "./style/AddFieldButton.css":
25074
+ /*!**********************************!*\
25075
+ !*** ./style/AddFieldButton.css ***!
25076
+ \**********************************/
25077
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
25078
+
25079
+ __webpack_require__.r(__webpack_exports__);
25080
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
25081
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
25082
+ /* harmony export */ });
25083
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
25084
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
25085
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
25086
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
25087
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
25088
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
25089
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
25090
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
25091
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
25092
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
25093
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
25094
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
25095
+ /* harmony import */ var _node_modules_css_loader_dist_cjs_js_AddFieldButton_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../node_modules/css-loader/dist/cjs.js!./AddFieldButton.css */ "./node_modules/css-loader/dist/cjs.js!./style/AddFieldButton.css");
25096
+
25097
+
25098
+
25099
+
25100
+
25101
+
25102
+
25103
+
25104
+
25105
+
25106
+
25107
+ var options = {};
25108
+
25109
+ options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
25110
+ options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
25111
+
25112
+ options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
25113
+
25114
+ options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
25115
+ options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
25116
+
25117
+ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_AddFieldButton_css__WEBPACK_IMPORTED_MODULE_6__["default"], options);
25118
+
25119
+
25120
+
25121
+
25122
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_AddFieldButton_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_AddFieldButton_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_AddFieldButton_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
25123
+
25124
+
24210
25125
  /***/ }),
24211
25126
 
24212
25127
  /***/ "./style/AgentChangeControls.css":
@@ -26694,4 +27609,4 @@ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js
26694
27609
  /***/ })
26695
27610
 
26696
27611
  }]);
26697
- //# sourceMappingURL=lib_index_js.9d26322f3e78beb2b666.js.map
27612
+ //# sourceMappingURL=lib_index_js.44c109c7be36fb884d25.js.map