mito-ai 0.1.58__py3-none-any.whl → 0.1.60__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.
- mito_ai/__init__.py +5 -2
- mito_ai/_version.py +1 -1
- mito_ai/completions/prompt_builders/agent_system_message.py +7 -1
- mito_ai/completions/prompt_builders/chat_system_message.py +4 -0
- mito_ai/completions/prompt_builders/prompt_constants.py +17 -0
- mito_ai/constants.py +25 -3
- mito_ai/enterprise/litellm_client.py +12 -5
- mito_ai/enterprise/utils.py +16 -2
- mito_ai/openai_client.py +26 -6
- mito_ai/provider_manager.py +34 -2
- mito_ai/rules/handlers.py +46 -12
- mito_ai/rules/utils.py +170 -6
- mito_ai/tests/message_history/test_generate_short_chat_name.py +35 -4
- mito_ai/tests/open_ai_utils_test.py +34 -36
- mito_ai/tests/providers/test_azure.py +2 -2
- mito_ai/tests/providers/test_providers.py +5 -5
- mito_ai/tests/rules/rules_test.py +100 -4
- mito_ai/tests/test_constants.py +90 -0
- mito_ai/tests/test_enterprise_mode.py +55 -0
- mito_ai/tests/test_model_utils.py +116 -25
- mito_ai/utils/anthropic_utils.py +1 -2
- mito_ai/utils/model_utils.py +130 -53
- mito_ai/utils/open_ai_utils.py +29 -33
- mito_ai/utils/provider_utils.py +13 -7
- {mito_ai-0.1.58.data → mito_ai-0.1.60.data}/data/share/jupyter/labextensions/mito_ai/build_log.json +1 -1
- {mito_ai-0.1.58.data → mito_ai-0.1.60.data}/data/share/jupyter/labextensions/mito_ai/package.json +2 -2
- {mito_ai-0.1.58.data → mito_ai-0.1.60.data}/data/share/jupyter/labextensions/mito_ai/schemas/mito_ai/package.json.orig +1 -1
- mito_ai-0.1.58.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.03302cc521d72eb56b00.js → mito_ai-0.1.60.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.dccfa541c464ee0e5cd4.js +1064 -175
- mito_ai-0.1.60.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.dccfa541c464ee0e5cd4.js.map +1 -0
- mito_ai-0.1.58.data/data/share/jupyter/labextensions/mito_ai/static/style_index_js.f5d476ac514294615881.js → mito_ai-0.1.60.data/data/share/jupyter/labextensions/mito_ai/static/node_modules_css-loader_dist_cjs_js_style_base_css.3594c54c9d209e1ed56e.js +2 -460
- mito_ai-0.1.60.data/data/share/jupyter/labextensions/mito_ai/static/node_modules_css-loader_dist_cjs_js_style_base_css.3594c54c9d209e1ed56e.js.map +1 -0
- mito_ai-0.1.60.data/data/share/jupyter/labextensions/mito_ai/static/node_modules_css-loader_dist_runtime_api_js-node_modules_css-loader_dist_runtime_sourceMaps_j-49e54d.3972dd8e7542bba478ad.js +463 -0
- mito_ai-0.1.60.data/data/share/jupyter/labextensions/mito_ai/static/node_modules_css-loader_dist_runtime_api_js-node_modules_css-loader_dist_runtime_sourceMaps_j-49e54d.3972dd8e7542bba478ad.js.map +1 -0
- mito_ai-0.1.58.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.570df809a692f53a7ab7.js → mito_ai-0.1.60.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.9735d9bfc8891147fee0.js +6 -6
- mito_ai-0.1.60.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.9735d9bfc8891147fee0.js.map +1 -0
- {mito_ai-0.1.58.data → mito_ai-0.1.60.data}/data/share/jupyter/labextensions/mito_ai/themes/mito_ai/index.css +78 -78
- {mito_ai-0.1.58.dist-info → mito_ai-0.1.60.dist-info}/METADATA +1 -1
- {mito_ai-0.1.58.dist-info → mito_ai-0.1.60.dist-info}/RECORD +61 -59
- mito_ai-0.1.58.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.03302cc521d72eb56b00.js.map +0 -1
- mito_ai-0.1.58.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.570df809a692f53a7ab7.js.map +0 -1
- mito_ai-0.1.58.data/data/share/jupyter/labextensions/mito_ai/static/style_index_js.f5d476ac514294615881.js.map +0 -1
- {mito_ai-0.1.58.data → mito_ai-0.1.60.data}/data/etc/jupyter/jupyter_server_config.d/mito_ai.json +0 -0
- {mito_ai-0.1.58.data → mito_ai-0.1.60.data}/data/share/jupyter/labextensions/mito_ai/schemas/mito_ai/toolbar-buttons.json +0 -0
- {mito_ai-0.1.58.data → mito_ai-0.1.60.data}/data/share/jupyter/labextensions/mito_ai/static/node_modules_process_browser_js.4b128e94d31a81ebd209.js +0 -0
- {mito_ai-0.1.58.data → mito_ai-0.1.60.data}/data/share/jupyter/labextensions/mito_ai/static/node_modules_process_browser_js.4b128e94d31a81ebd209.js.map +0 -0
- {mito_ai-0.1.58.data → mito_ai-0.1.60.data}/data/share/jupyter/labextensions/mito_ai/static/style.js +0 -0
- {mito_ai-0.1.58.data → mito_ai-0.1.60.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
- {mito_ai-0.1.58.data → mito_ai-0.1.60.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
- {mito_ai-0.1.58.data → mito_ai-0.1.60.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
- {mito_ai-0.1.58.data → mito_ai-0.1.60.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
- {mito_ai-0.1.58.data → mito_ai-0.1.60.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_dist_esm_index_mjs.6bac1a8c4cc93f15f6b7.js +0 -0
- {mito_ai-0.1.58.data → mito_ai-0.1.60.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_dist_esm_index_mjs.6bac1a8c4cc93f15f6b7.js.map +0 -0
- {mito_ai-0.1.58.data → mito_ai-0.1.60.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_ui-react_dist_esm_index_mjs.4fcecd65bef9e9847609.js +0 -0
- {mito_ai-0.1.58.data → mito_ai-0.1.60.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_ui-react_dist_esm_index_mjs.4fcecd65bef9e9847609.js.map +0 -0
- {mito_ai-0.1.58.data → mito_ai-0.1.60.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
- {mito_ai-0.1.58.data → mito_ai-0.1.60.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
- {mito_ai-0.1.58.data → mito_ai-0.1.60.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_semver_index_js.3f6754ac5116d47de76b.js +0 -0
- {mito_ai-0.1.58.data → mito_ai-0.1.60.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_semver_index_js.3f6754ac5116d47de76b.js.map +0 -0
- {mito_ai-0.1.58.data → mito_ai-0.1.60.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_vscode-diff_dist_index_js.ea55f1f9346638aafbcf.js +0 -0
- {mito_ai-0.1.58.data → mito_ai-0.1.60.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_vscode-diff_dist_index_js.ea55f1f9346638aafbcf.js.map +0 -0
- {mito_ai-0.1.58.data → mito_ai-0.1.60.data}/data/share/jupyter/labextensions/mito_ai/themes/mito_ai/index.js +0 -0
- {mito_ai-0.1.58.dist-info → mito_ai-0.1.60.dist-info}/WHEEL +0 -0
- {mito_ai-0.1.58.dist-info → mito_ai-0.1.60.dist-info}/entry_points.txt +0 -0
- {mito_ai-0.1.58.dist-info → mito_ai-0.1.60.dist-info}/licenses/LICENSE +0 -0
|
@@ -1060,7 +1060,7 @@ const ChatDropdown = ({ options, onSelect, filterText, isDropdownFromButton = fa
|
|
|
1060
1060
|
// Rules first
|
|
1061
1061
|
...rules.map((rule) => ({
|
|
1062
1062
|
type: 'rule',
|
|
1063
|
-
rule: rule
|
|
1063
|
+
rule: rule.name
|
|
1064
1064
|
})),
|
|
1065
1065
|
// Cells second (when user types @Cell or @cell)
|
|
1066
1066
|
...cellReferences.map((cell) => ({
|
|
@@ -1109,17 +1109,18 @@ const ChatDropdown = ({ options, onSelect, filterText, isDropdownFromButton = fa
|
|
|
1109
1109
|
})),
|
|
1110
1110
|
];
|
|
1111
1111
|
let searchFilteredOptions = allOptions.filter((option) => {
|
|
1112
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
1112
1113
|
if (option.type === 'variable') {
|
|
1113
|
-
return option.variable.variable_name.toLowerCase().includes(effectiveFilterText.toLowerCase()) &&
|
|
1114
|
+
return ((_b = (_a = option.variable.variable_name) === null || _a === void 0 ? void 0 : _a.toLowerCase()) !== null && _b !== void 0 ? _b : '').includes(effectiveFilterText.toLowerCase()) &&
|
|
1114
1115
|
option.variable.type !== "<class 'module'>" &&
|
|
1115
1116
|
option.variable.variable_name !== "FUNCTIONS"; // This is default exported from mitosheet when you run from mitosheet import * as FUNCTIONS
|
|
1116
1117
|
}
|
|
1117
1118
|
else if (option.type === 'file') {
|
|
1118
|
-
return option.file.variable_name.toLowerCase().includes(effectiveFilterText.toLowerCase());
|
|
1119
|
+
return ((_d = (_c = option.file.variable_name) === null || _c === void 0 ? void 0 : _c.toLowerCase()) !== null && _d !== void 0 ? _d : '').includes(effectiveFilterText.toLowerCase());
|
|
1119
1120
|
}
|
|
1120
1121
|
else if (option.type === 'db') {
|
|
1121
|
-
return option.variable.variable_name.toLowerCase().includes(effectiveFilterText.toLowerCase()) ||
|
|
1122
|
-
option.variable.value.toLowerCase().includes(effectiveFilterText.toLowerCase());
|
|
1122
|
+
return ((_f = (_e = option.variable.variable_name) === null || _e === void 0 ? void 0 : _e.toLowerCase()) !== null && _f !== void 0 ? _f : '').includes(effectiveFilterText.toLowerCase()) ||
|
|
1123
|
+
((_h = (_g = option.variable.value) === null || _g === void 0 ? void 0 : _g.toLowerCase()) !== null && _h !== void 0 ? _h : '').includes(effectiveFilterText.toLowerCase());
|
|
1123
1124
|
}
|
|
1124
1125
|
else if (option.type === 'cell') {
|
|
1125
1126
|
// Match "CellN" (no space)
|
|
@@ -1129,7 +1130,7 @@ const ChatDropdown = ({ options, onSelect, filterText, isDropdownFromButton = fa
|
|
|
1129
1130
|
numberText.includes(effectiveFilterText.toLowerCase());
|
|
1130
1131
|
}
|
|
1131
1132
|
else {
|
|
1132
|
-
return option.rule.toLowerCase().includes(effectiveFilterText.toLowerCase());
|
|
1133
|
+
return ((_k = (_j = option.rule) === null || _j === void 0 ? void 0 : _j.toLowerCase()) !== null && _k !== void 0 ? _k : '').includes(effectiveFilterText.toLowerCase());
|
|
1133
1134
|
}
|
|
1134
1135
|
});
|
|
1135
1136
|
// If user is searching (has filter text), show all matches
|
|
@@ -2162,6 +2163,7 @@ const MarkdownBlock = ({ markdown, renderMimeRegistry, notebookTracker }) => {
|
|
|
2162
2163
|
// This ensures re-renders when cells are reordered (even if count stays the same)
|
|
2163
2164
|
const cellOrderKey = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {
|
|
2164
2165
|
return Array.from(cellOrder.entries())
|
|
2166
|
+
.filter(([cellId]) => cellId != null) // Filter out entries with undefined/null keys
|
|
2165
2167
|
.sort((a, b) => a[0].localeCompare(b[0])) // Sort by cellId for stable string
|
|
2166
2168
|
.map(([cellId, cellNumber]) => `${cellId}:${cellNumber}`)
|
|
2167
2169
|
.join(',');
|
|
@@ -7629,8 +7631,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
7629
7631
|
|
|
7630
7632
|
|
|
7631
7633
|
const ChartWizardButton = ({ onButtonClick }) => {
|
|
7632
|
-
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
7633
|
-
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' })));
|
|
7634
|
+
return (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" }));
|
|
7634
7635
|
};
|
|
7635
7636
|
const ChartWizardPlugin = {
|
|
7636
7637
|
id: 'mito-ai:chart-wizard',
|
|
@@ -7817,16 +7818,18 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
7817
7818
|
/* harmony import */ var _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @jupyterlab/apputils */ "webpack/sharing/consume/default/@jupyterlab/apputils");
|
|
7818
7819
|
/* harmony import */ var _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__);
|
|
7819
7820
|
/* harmony import */ var _utils_parser__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/parser */ "./lib/Extensions/ChartWizard/utils/parser.js");
|
|
7821
|
+
/* harmony import */ var _utils_chartExport__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./utils/chartExport */ "./lib/Extensions/ChartWizard/utils/chartExport.js");
|
|
7820
7822
|
/* harmony import */ var _restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../restAPI/RestAPI */ "./lib/restAPI/RestAPI.js");
|
|
7821
7823
|
/* harmony import */ var _utils_strings__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../utils/strings */ "./lib/utils/strings.js");
|
|
7822
|
-
/* harmony import */ var
|
|
7823
|
-
/* harmony import */ var
|
|
7824
|
-
/* harmony import */ var
|
|
7825
|
-
/* harmony import */ var _inputs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./inputs */ "./lib/Extensions/ChartWizard/inputs/
|
|
7826
|
-
/* harmony import */ var _inputs__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./inputs */ "./lib/Extensions/ChartWizard/inputs/
|
|
7827
|
-
/* harmony import */ var _inputs__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./inputs */ "./lib/Extensions/ChartWizard/inputs/
|
|
7828
|
-
/* harmony import */ var _inputs__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./inputs */ "./lib/Extensions/ChartWizard/inputs/
|
|
7829
|
-
/* harmony import */ var _inputs__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./inputs */ "./lib/Extensions/ChartWizard/inputs/
|
|
7824
|
+
/* harmony import */ var _components_LoadingDots__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../components/LoadingDots */ "./lib/components/LoadingDots.js");
|
|
7825
|
+
/* harmony import */ var _components_ToggleButton__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../components/ToggleButton */ "./lib/components/ToggleButton.js");
|
|
7826
|
+
/* harmony import */ var _AddFieldButton__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./AddFieldButton */ "./lib/Extensions/ChartWizard/AddFieldButton.js");
|
|
7827
|
+
/* harmony import */ var _inputs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./inputs */ "./lib/Extensions/ChartWizard/inputs/BooleanInputRow.js");
|
|
7828
|
+
/* harmony import */ var _inputs__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./inputs */ "./lib/Extensions/ChartWizard/inputs/TupleInputRow.js");
|
|
7829
|
+
/* harmony import */ var _inputs__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./inputs */ "./lib/Extensions/ChartWizard/inputs/NumberInputRow.js");
|
|
7830
|
+
/* harmony import */ var _inputs__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./inputs */ "./lib/Extensions/ChartWizard/inputs/utils.js");
|
|
7831
|
+
/* harmony import */ var _inputs__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./inputs */ "./lib/Extensions/ChartWizard/inputs/ColorInputRow.js");
|
|
7832
|
+
/* harmony import */ var _inputs__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./inputs */ "./lib/Extensions/ChartWizard/inputs/StringInputRow.js");
|
|
7830
7833
|
/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./hooks */ "./lib/Extensions/ChartWizard/hooks/useChartConfig.js");
|
|
7831
7834
|
/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./hooks */ "./lib/Extensions/ChartWizard/hooks/useDebouncedNotebookUpdate.js");
|
|
7832
7835
|
/* harmony import */ var _utils_notebook__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/notebook */ "./lib/utils/notebook.js");
|
|
@@ -7846,6 +7849,8 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
7846
7849
|
|
|
7847
7850
|
|
|
7848
7851
|
|
|
7852
|
+
|
|
7853
|
+
|
|
7849
7854
|
/**
|
|
7850
7855
|
* Formats a variable name into a human-readable label.
|
|
7851
7856
|
* Converts snake_case to Title Case (e.g., "figure_size" -> "Figure Size").
|
|
@@ -7863,6 +7868,7 @@ const ChartWizardContent = ({ chartData }) => {
|
|
|
7863
7868
|
const widgetRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
|
|
7864
7869
|
const [overlayHeight, setOverlayHeight] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0);
|
|
7865
7870
|
const [isActiveCellMismatch, setIsActiveCellMismatch] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
|
|
7871
|
+
const [exportFormat, setExportFormat] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('png');
|
|
7866
7872
|
// Reset currentSourceCode when switching to a different chart
|
|
7867
7873
|
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
|
|
7868
7874
|
setCurrentSourceCode(null);
|
|
@@ -7995,6 +8001,18 @@ const ChartWizardContent = ({ chartData }) => {
|
|
|
7995
8001
|
// Update the cell with the updated code
|
|
7996
8002
|
updateNotebookCell(updatedCode);
|
|
7997
8003
|
}, [updateNotebookCell]);
|
|
8004
|
+
/**
|
|
8005
|
+
* Exports the chart image to disk via the chartExport utility; shows a notification on error.
|
|
8006
|
+
*/
|
|
8007
|
+
const handleExportChart = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {
|
|
8008
|
+
void (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_7__.logEvent)('chart_wizard_export_clicked');
|
|
8009
|
+
if (!chartData)
|
|
8010
|
+
return;
|
|
8011
|
+
const result = await (0,_utils_chartExport__WEBPACK_IMPORTED_MODULE_9__.exportChartImage)(chartData, exportFormat);
|
|
8012
|
+
if (!result.success) {
|
|
8013
|
+
_jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.Notification.emit(result.error, 'error', { autoClose: 5000 });
|
|
8014
|
+
}
|
|
8015
|
+
}, [chartData, exportFormat]);
|
|
7998
8016
|
/**
|
|
7999
8017
|
* Renders the appropriate input field component based on variable type.
|
|
8000
8018
|
*/
|
|
@@ -8007,22 +8025,22 @@ const ChartWizardContent = ({ chartData }) => {
|
|
|
8007
8025
|
};
|
|
8008
8026
|
switch (variable.type) {
|
|
8009
8027
|
case 'boolean':
|
|
8010
|
-
return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
8028
|
+
return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inputs__WEBPACK_IMPORTED_MODULE_10__.BooleanInputRow, { key: variable.name, ...commonProps });
|
|
8011
8029
|
case 'tuple':
|
|
8012
|
-
return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
8030
|
+
return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inputs__WEBPACK_IMPORTED_MODULE_11__.TupleInputRow, { key: variable.name, ...commonProps });
|
|
8013
8031
|
case 'number':
|
|
8014
|
-
return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
8032
|
+
return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inputs__WEBPACK_IMPORTED_MODULE_12__.NumberInputRow, { key: variable.name, ...commonProps });
|
|
8015
8033
|
case 'string': {
|
|
8016
8034
|
// String input - check if it's a hex color
|
|
8017
8035
|
const stringValue = variable.value;
|
|
8018
|
-
const isColor = (0,
|
|
8036
|
+
const isColor = (0,_inputs__WEBPACK_IMPORTED_MODULE_13__.isHexColor)(stringValue);
|
|
8019
8037
|
if (isColor) {
|
|
8020
|
-
return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
8038
|
+
return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inputs__WEBPACK_IMPORTED_MODULE_14__.ColorInputRow, { key: variable.name, ...commonProps });
|
|
8021
8039
|
}
|
|
8022
|
-
return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
8040
|
+
return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inputs__WEBPACK_IMPORTED_MODULE_15__.StringInputRow, { key: variable.name, ...commonProps });
|
|
8023
8041
|
}
|
|
8024
8042
|
default:
|
|
8025
|
-
return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
8043
|
+
return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inputs__WEBPACK_IMPORTED_MODULE_15__.StringInputRow, { key: variable.name, ...commonProps });
|
|
8026
8044
|
}
|
|
8027
8045
|
}, [handleVariableChange]);
|
|
8028
8046
|
// Memoize input fields to prevent unnecessary re-renders
|
|
@@ -8061,7 +8079,12 @@ const ChartWizardContent = ({ chartData }) => {
|
|
|
8061
8079
|
hasConfig ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chart-wizard-config-container" },
|
|
8062
8080
|
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."),
|
|
8063
8081
|
inputFields,
|
|
8064
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
8082
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_AddFieldButton__WEBPACK_IMPORTED_MODULE_16__["default"], { code: currentSourceCode || (chartData === null || chartData === void 0 ? void 0 : chartData.sourceCode) || null, onFieldAdded: handleFieldAdded, clearPendingUpdate: clearPendingUpdate, onLoadingStateChange: setIsAddingField }),
|
|
8083
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chart-wizard-export-section" },
|
|
8084
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h3", { className: "chart-wizard-section-heading" }, "Export"),
|
|
8085
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chart-wizard-export-format-row" },
|
|
8086
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_ToggleButton__WEBPACK_IMPORTED_MODULE_17__["default"], { leftText: "PNG", rightText: "JPG", isLeftSelected: exportFormat === 'png', onChange: (isPng) => setExportFormat(isPng ? 'png' : 'jpeg') })),
|
|
8087
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { className: "button-base button-purple add-field-button", type: "button", title: "Save chart image to file", onClick: handleExportChart }, "Export image")))) : (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chart-wizard-no-config" },
|
|
8065
8088
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null,
|
|
8066
8089
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("strong", null, "This chart isn't ready for Chart Wizard yet."),
|
|
8067
8090
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("br", null),
|
|
@@ -8070,13 +8093,13 @@ const ChartWizardContent = ({ chartData }) => {
|
|
|
8070
8093
|
"Converting",
|
|
8071
8094
|
' ',
|
|
8072
8095
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "chart-wizard-loading-dots" },
|
|
8073
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
8096
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_LoadingDots__WEBPACK_IMPORTED_MODULE_18__["default"], null)))) : ('Convert')))),
|
|
8074
8097
|
isAddingField && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chart-wizard-overlay", style: { height: overlayHeight > 0 ? `${overlayHeight}px` : '100%' } },
|
|
8075
8098
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chart-wizard-overlay-text" },
|
|
8076
8099
|
"Adding new field",
|
|
8077
8100
|
' ',
|
|
8078
8101
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "chart-wizard-loading-dots" },
|
|
8079
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
8102
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_LoadingDots__WEBPACK_IMPORTED_MODULE_18__["default"], null)))))));
|
|
8080
8103
|
};
|
|
8081
8104
|
class ChartWizardWidget extends _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.ReactWidget {
|
|
8082
8105
|
constructor() {
|
|
@@ -8321,10 +8344,46 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
8321
8344
|
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
8322
8345
|
*/
|
|
8323
8346
|
|
|
8347
|
+
function clamp(value, min, max) {
|
|
8348
|
+
return Math.min(Math.max(value, min), max);
|
|
8349
|
+
}
|
|
8350
|
+
/** Use slider when range is small and decimal-friendly (e.g. opacity 0–1). */
|
|
8351
|
+
const SLIDER_RANGE_THRESHOLD = 2;
|
|
8352
|
+
/** Step for decimal ranges: fine for 0–1, coarser for 1–2. */
|
|
8353
|
+
function decimalStep(min, max) {
|
|
8354
|
+
const range = max - min;
|
|
8355
|
+
return range <= 1 ? 0.01 : 0.1;
|
|
8356
|
+
}
|
|
8357
|
+
const SliderWithNumberInput = ({ value, min, max, step, label, onChange }) => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chart-wizard-number-slider-row" },
|
|
8358
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", { type: "range", min: min, max: max, step: step, value: value, onChange: (e) => onChange(clamp(parseFloat(e.target.value), min, max)), className: "chart-wizard-range-slider", "aria-label": label }),
|
|
8359
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", { type: "number", min: min, max: max, step: step, value: value, onChange: (e) => {
|
|
8360
|
+
let v = parseFloat(e.target.value);
|
|
8361
|
+
if (Number.isNaN(v))
|
|
8362
|
+
v = min;
|
|
8363
|
+
onChange(clamp(v, min, max));
|
|
8364
|
+
}, className: "chart-wizard-number-input chart-wizard-number-input-narrow", "aria-label": `${label} (number)` })));
|
|
8365
|
+
const NumberInputOnly = ({ value, min, max, step, onChange }) => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", { type: "number", value: value, min: min, max: max, step: step, onChange: (e) => {
|
|
8366
|
+
let v = parseFloat(e.target.value);
|
|
8367
|
+
if (Number.isNaN(v))
|
|
8368
|
+
v = min !== null && min !== void 0 ? min : 0;
|
|
8369
|
+
if (min !== undefined && max !== undefined)
|
|
8370
|
+
v = clamp(v, min, max);
|
|
8371
|
+
onChange(v);
|
|
8372
|
+
}, className: "chart-wizard-number-input" }));
|
|
8324
8373
|
const NumberInputRow = ({ variable, label, onVariableChange }) => {
|
|
8374
|
+
const numValue = variable.value;
|
|
8375
|
+
const min = variable.min;
|
|
8376
|
+
const max = variable.max;
|
|
8377
|
+
const hasRange = min !== undefined && max !== undefined;
|
|
8378
|
+
const rangeSpan = hasRange ? max - min : 0;
|
|
8379
|
+
const useSlider = hasRange && rangeSpan <= SLIDER_RANGE_THRESHOLD;
|
|
8380
|
+
const step = useSlider ? decimalStep(min, max) : 1;
|
|
8381
|
+
const handleChange = (value) => {
|
|
8382
|
+
onVariableChange(variable.name, value);
|
|
8383
|
+
};
|
|
8325
8384
|
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { key: variable.name, className: "chart-wizard-input-row" },
|
|
8326
8385
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", { className: "chart-wizard-input-label" }, label),
|
|
8327
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
8386
|
+
useSlider && min !== undefined && max !== undefined ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(SliderWithNumberInput, { value: numValue, min: min, max: max, step: step, label: label, onChange: handleChange })) : (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(NumberInputOnly, { value: numValue, min: min, max: max, step: step, onChange: handleChange }))));
|
|
8328
8387
|
};
|
|
8329
8388
|
|
|
8330
8389
|
|
|
@@ -8374,20 +8433,31 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
8374
8433
|
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
8375
8434
|
*/
|
|
8376
8435
|
|
|
8436
|
+
function clamp(value, min, max) {
|
|
8437
|
+
return Math.min(Math.max(value, min), max);
|
|
8438
|
+
}
|
|
8377
8439
|
const TupleInputRow = ({ variable, label, onVariableChange }) => {
|
|
8378
8440
|
const tupleValue = variable.value;
|
|
8441
|
+
const min = variable.min;
|
|
8442
|
+
const max = variable.max;
|
|
8443
|
+
const clampOrIdentity = (v, fallback) => {
|
|
8444
|
+
if (min !== undefined && max !== undefined) {
|
|
8445
|
+
return clamp(v, min, max);
|
|
8446
|
+
}
|
|
8447
|
+
return Number.isNaN(v) ? fallback : v;
|
|
8448
|
+
};
|
|
8379
8449
|
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { key: variable.name, className: "chart-wizard-input-row" },
|
|
8380
8450
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", { className: "chart-wizard-input-label" }, label),
|
|
8381
8451
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chart-wizard-tuple-container" },
|
|
8382
8452
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, "("),
|
|
8383
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", { type: "number", value: tupleValue[0], onChange: (e) => {
|
|
8384
|
-
const
|
|
8385
|
-
onVariableChange(variable.name,
|
|
8453
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", { type: "number", value: tupleValue[0], min: min, max: max, step: min !== undefined && max !== undefined && max - min <= 1 ? 'any' : 1, onChange: (e) => {
|
|
8454
|
+
const v = clampOrIdentity(parseFloat(e.target.value), 0);
|
|
8455
|
+
onVariableChange(variable.name, [v, tupleValue[1]]);
|
|
8386
8456
|
}, className: "chart-wizard-tuple-input" }),
|
|
8387
8457
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, ","),
|
|
8388
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", { type: "number", value: tupleValue[1], onChange: (e) => {
|
|
8389
|
-
const
|
|
8390
|
-
onVariableChange(variable.name,
|
|
8458
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", { type: "number", value: tupleValue[1], min: min, max: max, step: min !== undefined && max !== undefined && max - min <= 1 ? 'any' : 1, onChange: (e) => {
|
|
8459
|
+
const v = clampOrIdentity(parseFloat(e.target.value), 0);
|
|
8460
|
+
onVariableChange(variable.name, [tupleValue[0], v]);
|
|
8391
8461
|
}, className: "chart-wizard-tuple-input" }),
|
|
8392
8462
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, ")"))));
|
|
8393
8463
|
};
|
|
@@ -8442,6 +8512,263 @@ const normalizeHexColor = (value) => {
|
|
|
8442
8512
|
};
|
|
8443
8513
|
|
|
8444
8514
|
|
|
8515
|
+
/***/ }),
|
|
8516
|
+
|
|
8517
|
+
/***/ "./lib/Extensions/ChartWizard/utils/chartExport.js":
|
|
8518
|
+
/*!*********************************************************!*\
|
|
8519
|
+
!*** ./lib/Extensions/ChartWizard/utils/chartExport.js ***!
|
|
8520
|
+
\*********************************************************/
|
|
8521
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
8522
|
+
|
|
8523
|
+
__webpack_require__.r(__webpack_exports__);
|
|
8524
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
8525
|
+
/* harmony export */ exportChartImage: () => (/* binding */ exportChartImage)
|
|
8526
|
+
/* harmony export */ });
|
|
8527
|
+
/* harmony import */ var _imageFinder__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./imageFinder */ "./lib/Extensions/ChartWizard/utils/imageFinder.js");
|
|
8528
|
+
/* harmony import */ var _fileSaver__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fileSaver */ "./lib/Extensions/ChartWizard/utils/fileSaver.js");
|
|
8529
|
+
/* harmony import */ var _download__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./download */ "./lib/Extensions/ChartWizard/utils/download.js");
|
|
8530
|
+
/*
|
|
8531
|
+
* Copyright (c) Saga Inc.
|
|
8532
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
8533
|
+
*/
|
|
8534
|
+
|
|
8535
|
+
|
|
8536
|
+
|
|
8537
|
+
/**
|
|
8538
|
+
* Exports the chart image to the user's disk. Uses File System Access API when available
|
|
8539
|
+
* so the user can choose the save location; otherwise triggers a download.
|
|
8540
|
+
*
|
|
8541
|
+
* @param chartData - Chart wizard data identifying the notebook panel and cell
|
|
8542
|
+
* @param format - Export format: 'png' or 'jpeg'
|
|
8543
|
+
* @returns Result indicating success or an error message for the UI to display
|
|
8544
|
+
*/
|
|
8545
|
+
async function exportChartImage(chartData, format = 'png') {
|
|
8546
|
+
const found = (0,_imageFinder__WEBPACK_IMPORTED_MODULE_0__.findChartImageDataUrl)(chartData);
|
|
8547
|
+
if (!found.ok)
|
|
8548
|
+
return { success: false, error: found.error };
|
|
8549
|
+
if ((0,_fileSaver__WEBPACK_IMPORTED_MODULE_1__.isFileSystemAccessAvailable)()) {
|
|
8550
|
+
try {
|
|
8551
|
+
await (0,_fileSaver__WEBPACK_IMPORTED_MODULE_1__.saveWithFilePicker)(found.dataUrl, format);
|
|
8552
|
+
}
|
|
8553
|
+
catch (err) {
|
|
8554
|
+
if (err.name === 'AbortError') {
|
|
8555
|
+
return { success: true };
|
|
8556
|
+
}
|
|
8557
|
+
await (0,_download__WEBPACK_IMPORTED_MODULE_2__.downloadImage)(found.dataUrl, format);
|
|
8558
|
+
}
|
|
8559
|
+
}
|
|
8560
|
+
else {
|
|
8561
|
+
await (0,_download__WEBPACK_IMPORTED_MODULE_2__.downloadImage)(found.dataUrl, format);
|
|
8562
|
+
}
|
|
8563
|
+
return { success: true };
|
|
8564
|
+
}
|
|
8565
|
+
|
|
8566
|
+
|
|
8567
|
+
/***/ }),
|
|
8568
|
+
|
|
8569
|
+
/***/ "./lib/Extensions/ChartWizard/utils/download.js":
|
|
8570
|
+
/*!******************************************************!*\
|
|
8571
|
+
!*** ./lib/Extensions/ChartWizard/utils/download.js ***!
|
|
8572
|
+
\******************************************************/
|
|
8573
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
8574
|
+
|
|
8575
|
+
__webpack_require__.r(__webpack_exports__);
|
|
8576
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
8577
|
+
/* harmony export */ downloadImage: () => (/* binding */ downloadImage)
|
|
8578
|
+
/* harmony export */ });
|
|
8579
|
+
/* harmony import */ var _imageConverter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./imageConverter */ "./lib/Extensions/ChartWizard/utils/imageConverter.js");
|
|
8580
|
+
/*
|
|
8581
|
+
* Copyright (c) Saga Inc.
|
|
8582
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
8583
|
+
*/
|
|
8584
|
+
|
|
8585
|
+
const SUGGESTED_NAMES = {
|
|
8586
|
+
png: 'chart.png',
|
|
8587
|
+
jpeg: 'chart.jpg'
|
|
8588
|
+
};
|
|
8589
|
+
/**
|
|
8590
|
+
* Triggers a browser download of a URL.
|
|
8591
|
+
*/
|
|
8592
|
+
function triggerDownload(url, filename) {
|
|
8593
|
+
const a = document.createElement('a');
|
|
8594
|
+
a.href = url;
|
|
8595
|
+
a.download = filename;
|
|
8596
|
+
a.click();
|
|
8597
|
+
}
|
|
8598
|
+
/**
|
|
8599
|
+
* Downloads an image using the browser's fallback download mechanism.
|
|
8600
|
+
*/
|
|
8601
|
+
async function downloadImage(dataUrl, format) {
|
|
8602
|
+
if (format === 'jpeg') {
|
|
8603
|
+
const blob = await (0,_imageConverter__WEBPACK_IMPORTED_MODULE_0__.dataUrlToBlob)(dataUrl, format);
|
|
8604
|
+
const url = URL.createObjectURL(blob);
|
|
8605
|
+
triggerDownload(url, SUGGESTED_NAMES.jpeg);
|
|
8606
|
+
URL.revokeObjectURL(url);
|
|
8607
|
+
}
|
|
8608
|
+
else {
|
|
8609
|
+
triggerDownload(dataUrl, SUGGESTED_NAMES.png);
|
|
8610
|
+
}
|
|
8611
|
+
}
|
|
8612
|
+
|
|
8613
|
+
|
|
8614
|
+
/***/ }),
|
|
8615
|
+
|
|
8616
|
+
/***/ "./lib/Extensions/ChartWizard/utils/fileSaver.js":
|
|
8617
|
+
/*!*******************************************************!*\
|
|
8618
|
+
!*** ./lib/Extensions/ChartWizard/utils/fileSaver.js ***!
|
|
8619
|
+
\*******************************************************/
|
|
8620
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
8621
|
+
|
|
8622
|
+
__webpack_require__.r(__webpack_exports__);
|
|
8623
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
8624
|
+
/* harmony export */ isFileSystemAccessAvailable: () => (/* binding */ isFileSystemAccessAvailable),
|
|
8625
|
+
/* harmony export */ saveWithFilePicker: () => (/* binding */ saveWithFilePicker)
|
|
8626
|
+
/* harmony export */ });
|
|
8627
|
+
/* harmony import */ var _imageConverter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./imageConverter */ "./lib/Extensions/ChartWizard/utils/imageConverter.js");
|
|
8628
|
+
/*
|
|
8629
|
+
* Copyright (c) Saga Inc.
|
|
8630
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
8631
|
+
*/
|
|
8632
|
+
|
|
8633
|
+
const SUGGESTED_NAMES = {
|
|
8634
|
+
png: 'chart.png',
|
|
8635
|
+
jpeg: 'chart.jpg'
|
|
8636
|
+
};
|
|
8637
|
+
const FILE_PICKER_TYPES = {
|
|
8638
|
+
png: [{ description: 'PNG Image', accept: { 'image/png': ['.png'] } }],
|
|
8639
|
+
jpeg: [{ description: 'JPEG Image', accept: { 'image/jpeg': ['.jpg', '.jpeg'] } }]
|
|
8640
|
+
};
|
|
8641
|
+
/**
|
|
8642
|
+
* Checks if the File System Access API is available.
|
|
8643
|
+
*/
|
|
8644
|
+
function isFileSystemAccessAvailable() {
|
|
8645
|
+
return ('showSaveFilePicker' in window &&
|
|
8646
|
+
typeof window.showSaveFilePicker ===
|
|
8647
|
+
'function');
|
|
8648
|
+
}
|
|
8649
|
+
/**
|
|
8650
|
+
* Saves a blob to disk using the File System Access API.
|
|
8651
|
+
*/
|
|
8652
|
+
async function writeBlobToFile(blob, handle) {
|
|
8653
|
+
const writable = await handle.createWritable();
|
|
8654
|
+
try {
|
|
8655
|
+
await writable.write(blob);
|
|
8656
|
+
}
|
|
8657
|
+
finally {
|
|
8658
|
+
await writable.close();
|
|
8659
|
+
}
|
|
8660
|
+
}
|
|
8661
|
+
/**
|
|
8662
|
+
* Saves an image to disk using the File System Access API.
|
|
8663
|
+
*/
|
|
8664
|
+
async function saveWithFilePicker(dataUrl, format) {
|
|
8665
|
+
var _a, _b;
|
|
8666
|
+
const handle = await ((_b = (_a = window).showSaveFilePicker) === null || _b === void 0 ? void 0 : _b.call(_a, {
|
|
8667
|
+
suggestedName: SUGGESTED_NAMES[format],
|
|
8668
|
+
types: FILE_PICKER_TYPES[format]
|
|
8669
|
+
}));
|
|
8670
|
+
if (!handle)
|
|
8671
|
+
return;
|
|
8672
|
+
const blob = await (0,_imageConverter__WEBPACK_IMPORTED_MODULE_0__.dataUrlToBlob)(dataUrl, format);
|
|
8673
|
+
await writeBlobToFile(blob, handle);
|
|
8674
|
+
}
|
|
8675
|
+
|
|
8676
|
+
|
|
8677
|
+
/***/ }),
|
|
8678
|
+
|
|
8679
|
+
/***/ "./lib/Extensions/ChartWizard/utils/imageConverter.js":
|
|
8680
|
+
/*!************************************************************!*\
|
|
8681
|
+
!*** ./lib/Extensions/ChartWizard/utils/imageConverter.js ***!
|
|
8682
|
+
\************************************************************/
|
|
8683
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
8684
|
+
|
|
8685
|
+
__webpack_require__.r(__webpack_exports__);
|
|
8686
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
8687
|
+
/* harmony export */ dataUrlToBlob: () => (/* binding */ dataUrlToBlob),
|
|
8688
|
+
/* harmony export */ dataUrlToJpegBlob: () => (/* binding */ dataUrlToJpegBlob)
|
|
8689
|
+
/* harmony export */ });
|
|
8690
|
+
/*
|
|
8691
|
+
* Copyright (c) Saga Inc.
|
|
8692
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
8693
|
+
*/
|
|
8694
|
+
const JPEG_QUALITY = 1.0;
|
|
8695
|
+
/**
|
|
8696
|
+
* Converts a data URL image to a JPEG blob.
|
|
8697
|
+
*/
|
|
8698
|
+
function dataUrlToJpegBlob(dataUrl) {
|
|
8699
|
+
return new Promise((resolve, reject) => {
|
|
8700
|
+
const img = new Image();
|
|
8701
|
+
img.crossOrigin = 'anonymous';
|
|
8702
|
+
img.onload = () => {
|
|
8703
|
+
const canvas = document.createElement('canvas');
|
|
8704
|
+
canvas.width = img.naturalWidth;
|
|
8705
|
+
canvas.height = img.naturalHeight;
|
|
8706
|
+
const ctx = canvas.getContext('2d');
|
|
8707
|
+
if (!ctx) {
|
|
8708
|
+
reject(new Error('Could not get canvas context'));
|
|
8709
|
+
return;
|
|
8710
|
+
}
|
|
8711
|
+
ctx.drawImage(img, 0, 0);
|
|
8712
|
+
canvas.toBlob((blob) => (blob ? resolve(blob) : reject(new Error('toBlob failed'))), 'image/jpeg', JPEG_QUALITY);
|
|
8713
|
+
};
|
|
8714
|
+
img.onerror = () => reject(new Error('Failed to load image'));
|
|
8715
|
+
img.src = dataUrl;
|
|
8716
|
+
});
|
|
8717
|
+
}
|
|
8718
|
+
/**
|
|
8719
|
+
* Converts a data URL to a blob in the specified format.
|
|
8720
|
+
*/
|
|
8721
|
+
async function dataUrlToBlob(dataUrl, format) {
|
|
8722
|
+
if (format === 'jpeg') {
|
|
8723
|
+
return dataUrlToJpegBlob(dataUrl);
|
|
8724
|
+
}
|
|
8725
|
+
return fetch(dataUrl).then((r) => r.blob());
|
|
8726
|
+
}
|
|
8727
|
+
|
|
8728
|
+
|
|
8729
|
+
/***/ }),
|
|
8730
|
+
|
|
8731
|
+
/***/ "./lib/Extensions/ChartWizard/utils/imageFinder.js":
|
|
8732
|
+
/*!*********************************************************!*\
|
|
8733
|
+
!*** ./lib/Extensions/ChartWizard/utils/imageFinder.js ***!
|
|
8734
|
+
\*********************************************************/
|
|
8735
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
8736
|
+
|
|
8737
|
+
__webpack_require__.r(__webpack_exports__);
|
|
8738
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
8739
|
+
/* harmony export */ findChartImageDataUrl: () => (/* binding */ findChartImageDataUrl)
|
|
8740
|
+
/* harmony export */ });
|
|
8741
|
+
/* harmony import */ var _jupyterlab_cells__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @jupyterlab/cells */ "webpack/sharing/consume/default/@jupyterlab/cells");
|
|
8742
|
+
/* harmony import */ var _jupyterlab_cells__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_jupyterlab_cells__WEBPACK_IMPORTED_MODULE_0__);
|
|
8743
|
+
/*
|
|
8744
|
+
* Copyright (c) Saga Inc.
|
|
8745
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
8746
|
+
*/
|
|
8747
|
+
|
|
8748
|
+
/**
|
|
8749
|
+
* Finds the chart image data URL from the notebook cell output.
|
|
8750
|
+
*/
|
|
8751
|
+
function findChartImageDataUrl(chartData) {
|
|
8752
|
+
const notebookPanel = chartData.notebookTracker.find((panel) => panel.id === chartData.notebookPanelId);
|
|
8753
|
+
if (!notebookPanel) {
|
|
8754
|
+
return { ok: false, error: 'Could not find the notebook.' };
|
|
8755
|
+
}
|
|
8756
|
+
const cellWidget = notebookPanel.content.widgets.find((cell) => cell.model.id === chartData.cellId);
|
|
8757
|
+
if (!(cellWidget instanceof _jupyterlab_cells__WEBPACK_IMPORTED_MODULE_0__.CodeCell)) {
|
|
8758
|
+
return { ok: false, error: 'Could not find the chart cell.' };
|
|
8759
|
+
}
|
|
8760
|
+
const outputNode = cellWidget.outputArea.node;
|
|
8761
|
+
const img = outputNode.querySelector('.jp-RenderedImage img[src^="data:image"]');
|
|
8762
|
+
if (!img || !img.src || !img.src.startsWith('data:image')) {
|
|
8763
|
+
return {
|
|
8764
|
+
ok: false,
|
|
8765
|
+
error: 'No chart image found. Re-run the chart cell and try again.'
|
|
8766
|
+
};
|
|
8767
|
+
}
|
|
8768
|
+
return { ok: true, dataUrl: img.src };
|
|
8769
|
+
}
|
|
8770
|
+
|
|
8771
|
+
|
|
8445
8772
|
/***/ }),
|
|
8446
8773
|
|
|
8447
8774
|
/***/ "./lib/Extensions/ChartWizard/utils/parser.js":
|
|
@@ -8473,9 +8800,21 @@ function parseChartConfig(sourceCode) {
|
|
|
8473
8800
|
}
|
|
8474
8801
|
const configSection = sourceCode.substring(startIndex + configStartMarker.length, endIndex).trim();
|
|
8475
8802
|
const lines = configSection.split('\n').map(line => line.trim()).filter(line => line.length > 0);
|
|
8803
|
+
// First pass: collect # RANGE lines (format: # RANGE VARIABLE_NAME MIN MAX)
|
|
8804
|
+
const rangeByVar = new Map();
|
|
8805
|
+
const rangeRegex = /^#\s*RANGE\s+([A-Z_][A-Z0-9_]*)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s*$/;
|
|
8806
|
+
for (const line of lines) {
|
|
8807
|
+
const rangeMatch = line.match(rangeRegex);
|
|
8808
|
+
if (rangeMatch && rangeMatch[1] && rangeMatch[2] !== undefined && rangeMatch[3] !== undefined) {
|
|
8809
|
+
const varName = rangeMatch[1];
|
|
8810
|
+
const minVal = parseFloat(rangeMatch[2]);
|
|
8811
|
+
const maxVal = parseFloat(rangeMatch[3]);
|
|
8812
|
+
rangeByVar.set(varName, { min: minVal, max: maxVal });
|
|
8813
|
+
}
|
|
8814
|
+
}
|
|
8476
8815
|
const variables = [];
|
|
8477
8816
|
for (const line of lines) {
|
|
8478
|
-
// Skip comment lines
|
|
8817
|
+
// Skip comment-only lines (RANGE lines already processed above)
|
|
8479
8818
|
if (line.startsWith('#')) {
|
|
8480
8819
|
continue;
|
|
8481
8820
|
}
|
|
@@ -8486,10 +8825,12 @@ function parseChartConfig(sourceCode) {
|
|
|
8486
8825
|
const valueStr = match[2];
|
|
8487
8826
|
const parsed = parseValue(valueStr.trim());
|
|
8488
8827
|
if (parsed) {
|
|
8828
|
+
const range = rangeByVar.get(varName);
|
|
8489
8829
|
variables.push({
|
|
8490
8830
|
name: varName,
|
|
8491
8831
|
value: parsed.value,
|
|
8492
|
-
type: parsed.type
|
|
8832
|
+
type: parsed.type,
|
|
8833
|
+
...(range && { min: range.min, max: range.max })
|
|
8493
8834
|
});
|
|
8494
8835
|
}
|
|
8495
8836
|
}
|
|
@@ -8642,6 +8983,9 @@ function updateChartConfig(sourceCode, variables) {
|
|
|
8642
8983
|
// Use updated variables if available, otherwise keep original
|
|
8643
8984
|
const variablesToWrite = parsed.variables.map(v => varMap.get(v.name) || v);
|
|
8644
8985
|
for (const variable of variablesToWrite) {
|
|
8986
|
+
if (variable.min !== undefined && variable.max !== undefined) {
|
|
8987
|
+
newConfigSection += `# RANGE ${variable.name} ${variable.min} ${variable.max}\n`;
|
|
8988
|
+
}
|
|
8645
8989
|
const formattedValue = formatValue(variable.value, variable.type);
|
|
8646
8990
|
newConfigSection += `${variable.name} = ${formattedValue}\n`;
|
|
8647
8991
|
}
|
|
@@ -9306,10 +9650,10 @@ const getFullErrorMessageFromTraceback = (tracebackArray) => {
|
|
|
9306
9650
|
|
|
9307
9651
|
/***/ }),
|
|
9308
9652
|
|
|
9309
|
-
/***/ "./lib/Extensions/
|
|
9310
|
-
|
|
9311
|
-
!*** ./lib/Extensions/
|
|
9312
|
-
|
|
9653
|
+
/***/ "./lib/Extensions/MitoThemes/index.js":
|
|
9654
|
+
/*!********************************************!*\
|
|
9655
|
+
!*** ./lib/Extensions/MitoThemes/index.js ***!
|
|
9656
|
+
\********************************************/
|
|
9313
9657
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
9314
9658
|
|
|
9315
9659
|
__webpack_require__.r(__webpack_exports__);
|
|
@@ -9326,8 +9670,9 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
9326
9670
|
/* harmony import */ var _jupyterlab_ui_components__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_jupyterlab_ui_components__WEBPACK_IMPORTED_MODULE_3__);
|
|
9327
9671
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
9328
9672
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);
|
|
9329
|
-
/* harmony import */ var
|
|
9330
|
-
/* harmony import */ var
|
|
9673
|
+
/* harmony import */ var _components_RunCellButton__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../components/RunCellButton */ "./lib/components/RunCellButton.js");
|
|
9674
|
+
/* harmony import */ var _utils_lineNumbers__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../utils/lineNumbers */ "./lib/utils/lineNumbers.js");
|
|
9675
|
+
/* harmony import */ var _palettes__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./palettes */ "./lib/Extensions/MitoThemes/palettes.js");
|
|
9331
9676
|
/* harmony import */ var _style_RunCellButton_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../style/RunCellButton.css */ "./style/RunCellButton.css");
|
|
9332
9677
|
/*
|
|
9333
9678
|
* Copyright (c) Saga Inc.
|
|
@@ -9341,6 +9686,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
9341
9686
|
|
|
9342
9687
|
|
|
9343
9688
|
|
|
9689
|
+
|
|
9344
9690
|
/**
|
|
9345
9691
|
* Updates cell numbers for all cells in a notebook.
|
|
9346
9692
|
* Uses notebook.widgets which is always in the correct order.
|
|
@@ -9378,6 +9724,8 @@ function setupCellNumbering(notebookPanel) {
|
|
|
9378
9724
|
updateAllCellNumbers(notebookPanel);
|
|
9379
9725
|
});
|
|
9380
9726
|
observer.observe(notebook.node, { childList: true, subtree: true });
|
|
9727
|
+
// Initial update
|
|
9728
|
+
updateAllCellNumbers(notebookPanel);
|
|
9381
9729
|
// Return cleanup function
|
|
9382
9730
|
return () => {
|
|
9383
9731
|
var _a;
|
|
@@ -9394,20 +9742,24 @@ function setupCellNumbering(notebookPanel) {
|
|
|
9394
9742
|
};
|
|
9395
9743
|
}
|
|
9396
9744
|
/**
|
|
9397
|
-
* A plugin for the Mito Light
|
|
9745
|
+
* A plugin for the Mito Themes (Light and Dark).
|
|
9398
9746
|
*
|
|
9399
|
-
*
|
|
9400
|
-
*
|
|
9747
|
+
* Registers both Mito Light and Mito Dark themes.
|
|
9748
|
+
* The Run Cell Button, cell numbering, and hidden default toolbar buttons apply
|
|
9749
|
+
* when either Mito theme is active.
|
|
9401
9750
|
*/
|
|
9402
9751
|
const plugin = {
|
|
9403
|
-
id: 'mito_ai:
|
|
9404
|
-
description: 'Adds the Mito Light
|
|
9752
|
+
id: 'mito_ai:themes',
|
|
9753
|
+
description: 'Adds the Mito Light and Dark themes.',
|
|
9405
9754
|
requires: [_jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_0__.IThemeManager, _jupyterlab_translation__WEBPACK_IMPORTED_MODULE_1__.ITranslator, _jupyterlab_notebook__WEBPACK_IMPORTED_MODULE_2__.INotebookTracker],
|
|
9406
9755
|
activate: (app, manager, translator, notebookTracker) => {
|
|
9407
9756
|
const trans = translator.load('jupyterlab');
|
|
9757
|
+
// CSS path - single CSS file for both themes (uses CSS variables set by palettes)
|
|
9408
9758
|
const style = 'mito_ai/index.css';
|
|
9409
|
-
|
|
9410
|
-
|
|
9759
|
+
const palettes = new _palettes__WEBPACK_IMPORTED_MODULE_6__.MitoPalettes();
|
|
9760
|
+
// Store connections for cleanup
|
|
9761
|
+
let lightWidgetAddedConnection = null;
|
|
9762
|
+
let darkWidgetAddedConnection = null;
|
|
9411
9763
|
// Store cell numbering cleanup functions for each notebook
|
|
9412
9764
|
const cellNumberingCleanups = new Map();
|
|
9413
9765
|
// Add Run Cell button to notebook toolbar
|
|
@@ -9428,7 +9780,7 @@ const plugin = {
|
|
|
9428
9780
|
this.addClass('mito-run-cell-button-widget');
|
|
9429
9781
|
}
|
|
9430
9782
|
render() {
|
|
9431
|
-
return react__WEBPACK_IMPORTED_MODULE_4___default().createElement(
|
|
9783
|
+
return react__WEBPACK_IMPORTED_MODULE_4___default().createElement(_components_RunCellButton__WEBPACK_IMPORTED_MODULE_7__["default"], { notebookPanel: this.panel });
|
|
9432
9784
|
}
|
|
9433
9785
|
}
|
|
9434
9786
|
const runCellWidget = new RunCellButtonWidget(notebookPanel);
|
|
@@ -9467,54 +9819,65 @@ const plugin = {
|
|
|
9467
9819
|
cellNumberingCleanups.delete(notebookPanel);
|
|
9468
9820
|
}
|
|
9469
9821
|
};
|
|
9470
|
-
// Add
|
|
9471
|
-
const
|
|
9822
|
+
// Add cell numbering to a notebook panel (guard against duplicates)
|
|
9823
|
+
const addCellNumbering = (notebookPanel) => {
|
|
9824
|
+
if (cellNumberingCleanups.has(notebookPanel)) {
|
|
9825
|
+
return;
|
|
9826
|
+
}
|
|
9827
|
+
const cleanup = setupCellNumbering(notebookPanel);
|
|
9828
|
+
if (cleanup) {
|
|
9829
|
+
cellNumberingCleanups.set(notebookPanel, cleanup);
|
|
9830
|
+
// Also cleanup when notebook is disposed
|
|
9831
|
+
notebookPanel.disposed.connect(() => {
|
|
9832
|
+
cellNumberingCleanups.delete(notebookPanel);
|
|
9833
|
+
});
|
|
9834
|
+
}
|
|
9835
|
+
};
|
|
9836
|
+
// Add buttons and cell numbering to all notebooks (for a specific theme)
|
|
9837
|
+
const addButtonsToAllNotebooks = (themeName) => {
|
|
9472
9838
|
notebookTracker.forEach(widget => {
|
|
9473
9839
|
addRunCellButton(widget);
|
|
9474
9840
|
// Enable line numbers if needed
|
|
9475
|
-
void (0,
|
|
9841
|
+
void (0,_utils_lineNumbers__WEBPACK_IMPORTED_MODULE_8__.enableLineNumbersIfNeeded)(app, widget);
|
|
9476
9842
|
// Setup cell numbering
|
|
9477
|
-
|
|
9478
|
-
if (cleanup) {
|
|
9479
|
-
cellNumberingCleanups.set(widget, cleanup);
|
|
9480
|
-
// Also cleanup when notebook is disposed
|
|
9481
|
-
widget.disposed.connect(() => {
|
|
9482
|
-
cellNumberingCleanups.delete(widget);
|
|
9483
|
-
});
|
|
9484
|
-
}
|
|
9843
|
+
addCellNumbering(widget);
|
|
9485
9844
|
});
|
|
9486
9845
|
// Connect to new notebooks
|
|
9487
|
-
|
|
9846
|
+
const widgetAddedHandler = (sender, widget) => {
|
|
9488
9847
|
setTimeout(() => {
|
|
9489
9848
|
// Check if widget is still valid before proceeding
|
|
9490
9849
|
if (widget.isDisposed) {
|
|
9491
9850
|
return;
|
|
9492
9851
|
}
|
|
9493
|
-
// Only add if
|
|
9494
|
-
if (manager.theme ===
|
|
9852
|
+
// Only add if the specified theme is still active
|
|
9853
|
+
if (manager.theme === themeName) {
|
|
9495
9854
|
addRunCellButton(widget);
|
|
9496
9855
|
// Enable line numbers if needed
|
|
9497
|
-
void (0,
|
|
9856
|
+
void (0,_utils_lineNumbers__WEBPACK_IMPORTED_MODULE_8__.enableLineNumbersIfNeeded)(app, widget);
|
|
9498
9857
|
// Setup cell numbering
|
|
9499
|
-
|
|
9500
|
-
if (cleanup) {
|
|
9501
|
-
cellNumberingCleanups.set(widget, cleanup);
|
|
9502
|
-
// Also cleanup when notebook is disposed
|
|
9503
|
-
widget.disposed.connect(() => {
|
|
9504
|
-
cellNumberingCleanups.delete(widget);
|
|
9505
|
-
});
|
|
9506
|
-
}
|
|
9858
|
+
addCellNumbering(widget);
|
|
9507
9859
|
}
|
|
9508
9860
|
}, 100);
|
|
9509
9861
|
};
|
|
9510
|
-
|
|
9862
|
+
if (themeName === 'Mito Light') {
|
|
9863
|
+
lightWidgetAddedConnection = widgetAddedHandler;
|
|
9864
|
+
notebookTracker.widgetAdded.connect(lightWidgetAddedConnection);
|
|
9865
|
+
}
|
|
9866
|
+
else if (themeName === 'Mito Dark') {
|
|
9867
|
+
darkWidgetAddedConnection = widgetAddedHandler;
|
|
9868
|
+
notebookTracker.widgetAdded.connect(darkWidgetAddedConnection);
|
|
9869
|
+
}
|
|
9511
9870
|
};
|
|
9512
9871
|
// Remove buttons and cell numbering from all notebooks
|
|
9513
9872
|
const removeButtonsFromAllNotebooks = () => {
|
|
9514
9873
|
// Disconnect from new notebooks
|
|
9515
|
-
if (
|
|
9516
|
-
notebookTracker.widgetAdded.disconnect(
|
|
9517
|
-
|
|
9874
|
+
if (lightWidgetAddedConnection) {
|
|
9875
|
+
notebookTracker.widgetAdded.disconnect(lightWidgetAddedConnection);
|
|
9876
|
+
lightWidgetAddedConnection = null;
|
|
9877
|
+
}
|
|
9878
|
+
if (darkWidgetAddedConnection) {
|
|
9879
|
+
notebookTracker.widgetAdded.disconnect(darkWidgetAddedConnection);
|
|
9880
|
+
darkWidgetAddedConnection = null;
|
|
9518
9881
|
}
|
|
9519
9882
|
// Remove from all existing notebooks
|
|
9520
9883
|
notebookTracker.forEach(widget => {
|
|
@@ -9524,33 +9887,323 @@ const plugin = {
|
|
|
9524
9887
|
// Clear all cleanup functions
|
|
9525
9888
|
cellNumberingCleanups.clear();
|
|
9526
9889
|
};
|
|
9890
|
+
// Register Mito Light theme
|
|
9527
9891
|
manager.register({
|
|
9528
9892
|
name: 'Mito Light',
|
|
9529
9893
|
displayName: trans.__('Mito Light'),
|
|
9530
9894
|
isLight: true,
|
|
9531
9895
|
themeScrollbars: false,
|
|
9532
9896
|
load: async () => {
|
|
9533
|
-
//
|
|
9897
|
+
// Set CSS variables for light theme before loading CSS
|
|
9898
|
+
palettes.setColorsLight();
|
|
9899
|
+
// Load theme CSS (hides default buttons, applies light theme variables)
|
|
9534
9900
|
await manager.loadCSS(style);
|
|
9535
9901
|
// Add Run Cell buttons to all notebooks and enable line numbers
|
|
9536
|
-
addButtonsToAllNotebooks();
|
|
9902
|
+
addButtonsToAllNotebooks('Mito Light');
|
|
9537
9903
|
},
|
|
9538
9904
|
unload: async () => {
|
|
9539
9905
|
// Remove Run Cell buttons from all notebooks
|
|
9540
9906
|
removeButtonsFromAllNotebooks();
|
|
9541
9907
|
}
|
|
9542
9908
|
});
|
|
9543
|
-
//
|
|
9544
|
-
|
|
9545
|
-
|
|
9546
|
-
|
|
9547
|
-
|
|
9909
|
+
// Register Mito Dark theme
|
|
9910
|
+
manager.register({
|
|
9911
|
+
name: 'Mito Dark',
|
|
9912
|
+
displayName: trans.__('Mito Dark'),
|
|
9913
|
+
isLight: false,
|
|
9914
|
+
themeScrollbars: false,
|
|
9915
|
+
load: async () => {
|
|
9916
|
+
// Set CSS variables for dark theme before loading CSS
|
|
9917
|
+
palettes.setColorsDark();
|
|
9918
|
+
// Load theme CSS (hides default buttons, applies dark theme variables)
|
|
9919
|
+
await manager.loadCSS(style);
|
|
9920
|
+
// Add Run Cell buttons to all notebooks and enable line numbers
|
|
9921
|
+
addButtonsToAllNotebooks('Mito Dark');
|
|
9922
|
+
},
|
|
9923
|
+
unload: async () => {
|
|
9924
|
+
// Remove Run Cell buttons from all notebooks
|
|
9925
|
+
removeButtonsFromAllNotebooks();
|
|
9926
|
+
}
|
|
9927
|
+
});
|
|
9928
|
+
// Flag to prevent infinite recursion when we convert themes
|
|
9929
|
+
let isConvertingTheme = false;
|
|
9930
|
+
// Helper function to convert non-Mito themes to corresponding Mito theme
|
|
9931
|
+
const convertToMitoTheme = (themeName) => {
|
|
9932
|
+
// Prevent infinite recursion - if we're already converting, don't do it again
|
|
9933
|
+
if (isConvertingTheme) {
|
|
9934
|
+
return;
|
|
9935
|
+
}
|
|
9936
|
+
if (!themeName) {
|
|
9937
|
+
// No theme set, default to Mito Light
|
|
9938
|
+
isConvertingTheme = true;
|
|
9939
|
+
void manager.setTheme('Mito Light').finally(() => {
|
|
9940
|
+
isConvertingTheme = false;
|
|
9941
|
+
});
|
|
9942
|
+
return;
|
|
9943
|
+
}
|
|
9944
|
+
const isMitoTheme = themeName === 'Mito Light' || themeName === 'Mito Dark';
|
|
9945
|
+
if (isMitoTheme) {
|
|
9946
|
+
// Already a Mito theme, don't change - this ensures user's Mito theme preference is preserved
|
|
9947
|
+
return;
|
|
9948
|
+
}
|
|
9949
|
+
// Convert non-Mito themes to corresponding Mito theme
|
|
9950
|
+
isConvertingTheme = true;
|
|
9951
|
+
if (themeName === 'JupyterLab Dark' || themeName.includes('Dark')) {
|
|
9952
|
+
void manager.setTheme('Mito Dark').finally(() => {
|
|
9953
|
+
isConvertingTheme = false;
|
|
9954
|
+
});
|
|
9955
|
+
}
|
|
9956
|
+
else {
|
|
9957
|
+
// Default to light theme for any other non-Mito theme (including JupyterLab Light)
|
|
9958
|
+
void manager.setTheme('Mito Light').finally(() => {
|
|
9959
|
+
isConvertingTheme = false;
|
|
9960
|
+
});
|
|
9961
|
+
}
|
|
9962
|
+
};
|
|
9963
|
+
// Wait for app restoration to complete before checking/setting theme
|
|
9964
|
+
// This ensures saved theme preferences are loaded first
|
|
9965
|
+
void app.restored.then(() => {
|
|
9966
|
+
// Convert theme on initial load if needed
|
|
9967
|
+
convertToMitoTheme(manager.theme);
|
|
9968
|
+
});
|
|
9969
|
+
// Listen for theme changes and automatically convert to Mito theme
|
|
9970
|
+
// This ensures that when users switch themes, they get converted to Mito themes
|
|
9971
|
+
// and the preference is saved properly
|
|
9972
|
+
manager.themeChanged.connect(() => {
|
|
9973
|
+
// Use manager.theme to get the current theme after the change
|
|
9974
|
+
convertToMitoTheme(manager.theme);
|
|
9975
|
+
});
|
|
9548
9976
|
},
|
|
9549
9977
|
autoStart: true
|
|
9550
9978
|
};
|
|
9551
9979
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (plugin);
|
|
9552
9980
|
|
|
9553
9981
|
|
|
9982
|
+
/***/ }),
|
|
9983
|
+
|
|
9984
|
+
/***/ "./lib/Extensions/MitoThemes/palettes.js":
|
|
9985
|
+
/*!***********************************************!*\
|
|
9986
|
+
!*** ./lib/Extensions/MitoThemes/palettes.js ***!
|
|
9987
|
+
\***********************************************/
|
|
9988
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
9989
|
+
|
|
9990
|
+
__webpack_require__.r(__webpack_exports__);
|
|
9991
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
9992
|
+
/* harmony export */ MitoPalettes: () => (/* binding */ MitoPalettes)
|
|
9993
|
+
/* harmony export */ });
|
|
9994
|
+
/*
|
|
9995
|
+
* Copyright (c) Saga Inc.
|
|
9996
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
9997
|
+
*/
|
|
9998
|
+
/**
|
|
9999
|
+
* MitoPalettes class sets CSS variables for light and dark themes.
|
|
10000
|
+
* Similar to catppuccin's approach, this allows a single CSS file to work
|
|
10001
|
+
* for both themes by setting different variable values before loading CSS.
|
|
10002
|
+
*/
|
|
10003
|
+
class MitoPalettes {
|
|
10004
|
+
/**
|
|
10005
|
+
* Set CSS variables for the light theme
|
|
10006
|
+
*/
|
|
10007
|
+
setColorsLight() {
|
|
10008
|
+
// Border colors
|
|
10009
|
+
document.documentElement.style.setProperty('--mito-theme-border-color0', '#bdbdbd');
|
|
10010
|
+
document.documentElement.style.setProperty('--mito-theme-border-color1', '#bdbdbd');
|
|
10011
|
+
document.documentElement.style.setProperty('--mito-theme-border-color2', '#e0e0e0');
|
|
10012
|
+
document.documentElement.style.setProperty('--mito-theme-border-color3', '#eee');
|
|
10013
|
+
document.documentElement.style.setProperty('--mito-theme-inverse-border-color', '#757575');
|
|
10014
|
+
// UI Font colors
|
|
10015
|
+
document.documentElement.style.setProperty('--mito-theme-ui-font-color0', 'rgba(0, 0, 0, 1)');
|
|
10016
|
+
document.documentElement.style.setProperty('--mito-theme-ui-font-color1', 'rgba(0, 0, 0, 0.87)');
|
|
10017
|
+
document.documentElement.style.setProperty('--mito-theme-ui-font-color2', 'rgba(0, 0, 0, 0.54)');
|
|
10018
|
+
document.documentElement.style.setProperty('--mito-theme-ui-font-color3', 'rgba(0, 0, 0, 0.38)');
|
|
10019
|
+
document.documentElement.style.setProperty('--mito-theme-ui-inverse-font-color0', 'rgba(255, 255, 255, 1)');
|
|
10020
|
+
document.documentElement.style.setProperty('--mito-theme-ui-inverse-font-color1', 'rgba(255, 255, 255, 1)');
|
|
10021
|
+
document.documentElement.style.setProperty('--mito-theme-ui-inverse-font-color2', 'rgba(255, 255, 255, 0.7)');
|
|
10022
|
+
document.documentElement.style.setProperty('--mito-theme-ui-inverse-font-color3', 'rgba(255, 255, 255, 0.5)');
|
|
10023
|
+
// Content Font colors
|
|
10024
|
+
document.documentElement.style.setProperty('--mito-theme-content-font-color0', 'rgba(0, 0, 0, 1)');
|
|
10025
|
+
document.documentElement.style.setProperty('--mito-theme-content-font-color1', 'rgba(0, 0, 0, 0.87)');
|
|
10026
|
+
document.documentElement.style.setProperty('--mito-theme-content-font-color2', 'rgba(0, 0, 0, 0.54)');
|
|
10027
|
+
document.documentElement.style.setProperty('--mito-theme-content-font-color3', 'rgba(0, 0, 0, 0.38)');
|
|
10028
|
+
document.documentElement.style.setProperty('--mito-theme-content-link-color', '#0d47a1');
|
|
10029
|
+
document.documentElement.style.setProperty('--mito-theme-content-link-visited-color', '#7b1fa2');
|
|
10030
|
+
// Layout colors
|
|
10031
|
+
document.documentElement.style.setProperty('--mito-theme-layout-color0', 'white');
|
|
10032
|
+
document.documentElement.style.setProperty('--mito-theme-layout-color1', 'white');
|
|
10033
|
+
document.documentElement.style.setProperty('--mito-theme-layout-color2', '#eee');
|
|
10034
|
+
document.documentElement.style.setProperty('--mito-theme-layout-color3', '#bdbdbd');
|
|
10035
|
+
document.documentElement.style.setProperty('--mito-theme-layout-color4', '#757575');
|
|
10036
|
+
document.documentElement.style.setProperty('--mito-theme-inverse-layout-color0', '#111');
|
|
10037
|
+
document.documentElement.style.setProperty('--mito-theme-inverse-layout-color1', '#212121');
|
|
10038
|
+
document.documentElement.style.setProperty('--mito-theme-inverse-layout-color2', '#424242');
|
|
10039
|
+
document.documentElement.style.setProperty('--mito-theme-inverse-layout-color3', '#616161');
|
|
10040
|
+
document.documentElement.style.setProperty('--mito-theme-inverse-layout-color4', '#757575');
|
|
10041
|
+
// Brand colors (using purple variables from light theme)
|
|
10042
|
+
document.documentElement.style.setProperty('--mito-theme-brand-color0', 'var(--purple-900)');
|
|
10043
|
+
document.documentElement.style.setProperty('--mito-theme-brand-color1', 'var(--purple-700)');
|
|
10044
|
+
document.documentElement.style.setProperty('--mito-theme-brand-color2', 'var(--purple-500)');
|
|
10045
|
+
document.documentElement.style.setProperty('--mito-theme-brand-color3', 'var(--purple-300)');
|
|
10046
|
+
document.documentElement.style.setProperty('--mito-theme-brand-color4', 'var(--purple-300)');
|
|
10047
|
+
// Primary button colors (light mode: blue theme to avoid pinkish-purple)
|
|
10048
|
+
document.documentElement.style.setProperty('--mito-theme-button-background', 'var(--blue-300)');
|
|
10049
|
+
document.documentElement.style.setProperty('--mito-theme-button-border', 'var(--blue-900)');
|
|
10050
|
+
document.documentElement.style.setProperty('--mito-theme-button-text', 'var(--blue-900)');
|
|
10051
|
+
document.documentElement.style.setProperty('--mito-theme-button-hover-background', 'var(--blue-400)');
|
|
10052
|
+
// Cell editor colors
|
|
10053
|
+
document.documentElement.style.setProperty('--mito-theme-cell-editor-background', '#f5f5f5');
|
|
10054
|
+
document.documentElement.style.setProperty('--mito-theme-cell-editor-border-color', '#e0e0e0');
|
|
10055
|
+
document.documentElement.style.setProperty('--mito-theme-cell-editor-active-background', 'var(--mito-theme-layout-color0)');
|
|
10056
|
+
document.documentElement.style.setProperty('--mito-theme-cell-prompt-not-active-font-color', '#616161');
|
|
10057
|
+
document.documentElement.style.setProperty('--mito-theme-cell-outprompt-font-color', '#bf5b3d');
|
|
10058
|
+
// Notebook colors
|
|
10059
|
+
document.documentElement.style.setProperty('--mito-theme-notebook-select-background', 'var(--mito-theme-layout-color1)');
|
|
10060
|
+
document.documentElement.style.setProperty('--mito-theme-notebook-multiselected-color', '#e3f2fd');
|
|
10061
|
+
// Rendermime colors
|
|
10062
|
+
document.documentElement.style.setProperty('--mito-theme-rendermime-error-background', '#fdd');
|
|
10063
|
+
document.documentElement.style.setProperty('--mito-theme-rendermime-table-row-background', '#ebebeb');
|
|
10064
|
+
document.documentElement.style.setProperty('--mito-theme-rendermime-table-row-hover-background', '#e1f5fe');
|
|
10065
|
+
// Dialog colors
|
|
10066
|
+
document.documentElement.style.setProperty('--mito-theme-dialog-background', 'rgba(0, 0, 0, 0.25)');
|
|
10067
|
+
// Input field colors
|
|
10068
|
+
document.documentElement.style.setProperty('--mito-theme-input-background', '#f5f5f5');
|
|
10069
|
+
document.documentElement.style.setProperty('--mito-theme-input-border-color', 'var(--mito-theme-inverse-border-color)');
|
|
10070
|
+
// Editor colors
|
|
10071
|
+
document.documentElement.style.setProperty('--mito-theme-editor-selected-background', '#d9d9d9');
|
|
10072
|
+
document.documentElement.style.setProperty('--mito-theme-editor-selected-focused-background', '#d7d4f0');
|
|
10073
|
+
document.documentElement.style.setProperty('--mito-theme-editor-cursor-color', 'var(--mito-theme-ui-font-color0)');
|
|
10074
|
+
// Line number colors (grey/white/blue instead of pink)
|
|
10075
|
+
document.documentElement.style.setProperty('--mito-theme-line-number-color', '#92999F');
|
|
10076
|
+
// Code mirror colors
|
|
10077
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-keyword-color', '#008000');
|
|
10078
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-atom-color', '#88f');
|
|
10079
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-number-color', '#080');
|
|
10080
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-def-color', '#00f');
|
|
10081
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-variable-color', '#212121');
|
|
10082
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-variable-2-color', 'rgb(0, 54, 109)');
|
|
10083
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-variable-3-color', '#085');
|
|
10084
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-punctuation-color', '#05a');
|
|
10085
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-property-color', '#05a');
|
|
10086
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-operator-color', '#7800c2');
|
|
10087
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-comment-color', '#408080');
|
|
10088
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-string-color', '#ba2121');
|
|
10089
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-string-2-color', '#708');
|
|
10090
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-meta-color', '#a2f');
|
|
10091
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-qualifier-color', '#555');
|
|
10092
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-builtin-color', '#008000');
|
|
10093
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-bracket-color', '#997');
|
|
10094
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-tag-color', '#170');
|
|
10095
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-attribute-color', '#00c');
|
|
10096
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-header-color', 'blue');
|
|
10097
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-quote-color', '#090');
|
|
10098
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-link-color', '#00c');
|
|
10099
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-error-color', '#f00');
|
|
10100
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-hr-color', '#999');
|
|
10101
|
+
// Vega colors
|
|
10102
|
+
document.documentElement.style.setProperty('--mito-theme-vega-background', 'white');
|
|
10103
|
+
}
|
|
10104
|
+
/**
|
|
10105
|
+
* Set CSS variables for the dark theme
|
|
10106
|
+
*/
|
|
10107
|
+
setColorsDark() {
|
|
10108
|
+
// Border colors
|
|
10109
|
+
document.documentElement.style.setProperty('--mito-theme-border-color0', '#3c3c3c');
|
|
10110
|
+
document.documentElement.style.setProperty('--mito-theme-border-color1', '#3c3c3c');
|
|
10111
|
+
document.documentElement.style.setProperty('--mito-theme-border-color2', '#2d2d2d');
|
|
10112
|
+
document.documentElement.style.setProperty('--mito-theme-border-color3', '#252526');
|
|
10113
|
+
document.documentElement.style.setProperty('--mito-theme-inverse-border-color', '#5a5a5a');
|
|
10114
|
+
// UI Font colors
|
|
10115
|
+
document.documentElement.style.setProperty('--mito-theme-ui-font-color0', 'rgba(255, 255, 255, 1)');
|
|
10116
|
+
document.documentElement.style.setProperty('--mito-theme-ui-font-color1', 'rgba(255, 255, 255, 0.87)');
|
|
10117
|
+
document.documentElement.style.setProperty('--mito-theme-ui-font-color2', 'rgba(255, 255, 255, 0.6)');
|
|
10118
|
+
document.documentElement.style.setProperty('--mito-theme-ui-font-color3', 'rgba(255, 255, 255, 0.4)');
|
|
10119
|
+
document.documentElement.style.setProperty('--mito-theme-ui-inverse-font-color0', 'rgba(0, 0, 0, 1)');
|
|
10120
|
+
document.documentElement.style.setProperty('--mito-theme-ui-inverse-font-color1', 'rgba(0, 0, 0, 0.87)');
|
|
10121
|
+
document.documentElement.style.setProperty('--mito-theme-ui-inverse-font-color2', 'rgba(0, 0, 0, 0.6)');
|
|
10122
|
+
document.documentElement.style.setProperty('--mito-theme-ui-inverse-font-color3', 'rgba(0, 0, 0, 0.4)');
|
|
10123
|
+
// Content Font colors
|
|
10124
|
+
document.documentElement.style.setProperty('--mito-theme-content-font-color0', 'rgba(255, 255, 255, 1)');
|
|
10125
|
+
document.documentElement.style.setProperty('--mito-theme-content-font-color1', 'rgba(255, 255, 255, 0.87)');
|
|
10126
|
+
document.documentElement.style.setProperty('--mito-theme-content-font-color2', 'rgba(255, 255, 255, 0.6)');
|
|
10127
|
+
document.documentElement.style.setProperty('--mito-theme-content-font-color3', 'rgba(255, 255, 255, 0.4)');
|
|
10128
|
+
document.documentElement.style.setProperty('--mito-theme-content-link-color', '#7c93ee');
|
|
10129
|
+
document.documentElement.style.setProperty('--mito-theme-content-link-visited-color', '#b39ddb');
|
|
10130
|
+
// Layout colors
|
|
10131
|
+
document.documentElement.style.setProperty('--mito-theme-layout-color0', '#1a1a1a');
|
|
10132
|
+
document.documentElement.style.setProperty('--mito-theme-layout-color1', '#1e1e1e');
|
|
10133
|
+
document.documentElement.style.setProperty('--mito-theme-layout-color2', '#252526');
|
|
10134
|
+
document.documentElement.style.setProperty('--mito-theme-layout-color3', '#2d2d2d');
|
|
10135
|
+
document.documentElement.style.setProperty('--mito-theme-layout-color4', '#3c3c3c');
|
|
10136
|
+
document.documentElement.style.setProperty('--mito-theme-inverse-layout-color0', '#ffffff');
|
|
10137
|
+
document.documentElement.style.setProperty('--mito-theme-inverse-layout-color1', '#f0f0f0');
|
|
10138
|
+
document.documentElement.style.setProperty('--mito-theme-inverse-layout-color2', '#d4d4d4');
|
|
10139
|
+
document.documentElement.style.setProperty('--mito-theme-inverse-layout-color3', '#a0a0a0');
|
|
10140
|
+
document.documentElement.style.setProperty('--mito-theme-inverse-layout-color4', '#6e6e6e');
|
|
10141
|
+
// Brand colors (pink-purple theme for dark, starting with #C65FAA)
|
|
10142
|
+
document.documentElement.style.setProperty('--mito-theme-brand-color0', '#C65FAA');
|
|
10143
|
+
document.documentElement.style.setProperty('--mito-theme-brand-color1', '#D97BC0');
|
|
10144
|
+
document.documentElement.style.setProperty('--mito-theme-brand-color2', '#E8A3D5');
|
|
10145
|
+
document.documentElement.style.setProperty('--mito-theme-brand-color3', '#F4D1EA');
|
|
10146
|
+
document.documentElement.style.setProperty('--mito-theme-brand-color4', '#FAE8F5');
|
|
10147
|
+
// Primary button colors (dark mode: lighter brand background, dark brand border)
|
|
10148
|
+
document.documentElement.style.setProperty('--mito-theme-button-background', '#F4D1EA');
|
|
10149
|
+
document.documentElement.style.setProperty('--mito-theme-button-border', '#C65FAA');
|
|
10150
|
+
document.documentElement.style.setProperty('--mito-theme-button-text', 'rgba(0, 0, 0, 0.87)');
|
|
10151
|
+
document.documentElement.style.setProperty('--mito-theme-button-hover-background', '#FAE8F5');
|
|
10152
|
+
// Cell editor colors
|
|
10153
|
+
document.documentElement.style.setProperty('--mito-theme-cell-editor-background', '#1e1e1e');
|
|
10154
|
+
document.documentElement.style.setProperty('--mito-theme-cell-editor-border-color', '#3c3c3c');
|
|
10155
|
+
document.documentElement.style.setProperty('--mito-theme-cell-editor-active-background', '#252526');
|
|
10156
|
+
document.documentElement.style.setProperty('--mito-theme-cell-prompt-not-active-font-color', '#6e6e6e');
|
|
10157
|
+
document.documentElement.style.setProperty('--mito-theme-cell-outprompt-font-color', '#f59e0b');
|
|
10158
|
+
// Notebook colors
|
|
10159
|
+
document.documentElement.style.setProperty('--mito-theme-notebook-select-background', '#2d2d2d');
|
|
10160
|
+
document.documentElement.style.setProperty('--mito-theme-notebook-multiselected-color', 'rgba(198, 95, 170, 0.2)');
|
|
10161
|
+
// Rendermime colors
|
|
10162
|
+
document.documentElement.style.setProperty('--mito-theme-rendermime-error-background', 'rgba(244, 67, 54, 0.2)');
|
|
10163
|
+
document.documentElement.style.setProperty('--mito-theme-rendermime-table-row-background', '#252526');
|
|
10164
|
+
document.documentElement.style.setProperty('--mito-theme-rendermime-table-row-hover-background', '#2d2d2d');
|
|
10165
|
+
// Dialog colors
|
|
10166
|
+
document.documentElement.style.setProperty('--mito-theme-dialog-background', 'rgba(0, 0, 0, 0.5)');
|
|
10167
|
+
// Input field colors
|
|
10168
|
+
document.documentElement.style.setProperty('--mito-theme-input-background', '#2d2d2d');
|
|
10169
|
+
document.documentElement.style.setProperty('--mito-theme-input-border-color', '#3c3c3c');
|
|
10170
|
+
// Editor colors
|
|
10171
|
+
document.documentElement.style.setProperty('--mito-theme-editor-selected-background', '#3c3c3c');
|
|
10172
|
+
document.documentElement.style.setProperty('--mito-theme-editor-selected-focused-background', '#3d4a5c');
|
|
10173
|
+
document.documentElement.style.setProperty('--mito-theme-editor-cursor-color', '#ffffff');
|
|
10174
|
+
// Line number colors (grey/white/blue instead of pink)
|
|
10175
|
+
document.documentElement.style.setProperty('--mito-theme-line-number-color', '#92999F');
|
|
10176
|
+
// Code mirror colors
|
|
10177
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-keyword-color', '#c586c0');
|
|
10178
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-atom-color', '#b5cea8');
|
|
10179
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-number-color', '#b5cea8');
|
|
10180
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-def-color', '#dcdcaa');
|
|
10181
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-variable-color', '#9cdcfe');
|
|
10182
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-variable-2-color', '#4fc1ff');
|
|
10183
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-variable-3-color', '#4ec9b0');
|
|
10184
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-punctuation-color', '#d4d4d4');
|
|
10185
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-property-color', '#9cdcfe');
|
|
10186
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-operator-color', '#d4d4d4');
|
|
10187
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-comment-color', '#6a9955');
|
|
10188
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-string-color', '#ce9178');
|
|
10189
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-string-2-color', '#ce9178');
|
|
10190
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-meta-color', '#d4d4d4');
|
|
10191
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-qualifier-color', '#d4d4d4');
|
|
10192
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-builtin-color', '#4ec9b0');
|
|
10193
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-bracket-color', '#ffd700');
|
|
10194
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-tag-color', '#569cd6');
|
|
10195
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-attribute-color', '#9cdcfe');
|
|
10196
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-header-color', '#569cd6');
|
|
10197
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-quote-color', '#6a9955');
|
|
10198
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-link-color', '#569cd6');
|
|
10199
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-error-color', '#f44747');
|
|
10200
|
+
document.documentElement.style.setProperty('--mito-theme-mirror-editor-hr-color', '#6e6e6e');
|
|
10201
|
+
// Vega colors
|
|
10202
|
+
document.documentElement.style.setProperty('--mito-theme-vega-background', '#1e1e1e');
|
|
10203
|
+
}
|
|
10204
|
+
}
|
|
10205
|
+
|
|
10206
|
+
|
|
9554
10207
|
/***/ }),
|
|
9555
10208
|
|
|
9556
10209
|
/***/ "./lib/Extensions/NotebookFooter/NotebookFooter.js":
|
|
@@ -10845,6 +11498,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
10845
11498
|
|
|
10846
11499
|
|
|
10847
11500
|
const RulesForm = ({ formData, formError, onInputChange, onSubmit, onClose, isEditing }) => {
|
|
11501
|
+
var _a;
|
|
10848
11502
|
const [isLoading, setIsLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
|
|
10849
11503
|
const handleSubmit = async (e) => {
|
|
10850
11504
|
e.preventDefault();
|
|
@@ -10865,13 +11519,20 @@ const RulesForm = ({ formData, formError, onInputChange, onSubmit, onClose, isEd
|
|
|
10865
11519
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", { type: "text", id: "name", name: "name", value: formData.name, onChange: onInputChange, placeholder: "Enter rule name", required: true })),
|
|
10866
11520
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "form-group" },
|
|
10867
11521
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", { htmlFor: "description" }, "Rule Content"),
|
|
10868
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("textarea", { id: "description", name: "description", value: formData.description, onChange: onInputChange, placeholder: "Enter or paste rule content here", rows:
|
|
10869
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "form-
|
|
10870
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("
|
|
10871
|
-
|
|
10872
|
-
|
|
10873
|
-
|
|
10874
|
-
|
|
11522
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("textarea", { id: "description", name: "description", value: formData.description, onChange: onInputChange, placeholder: "Enter or paste rule content here", rows: 10, required: true, className: "form-textarea" })),
|
|
11523
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "rules-form-footer" },
|
|
11524
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "rules-form-footer-left" },
|
|
11525
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "form-group-checkbox" },
|
|
11526
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", { type: "checkbox", id: "isDefault", name: "isDefault", checked: (_a = formData.isDefault) !== null && _a !== void 0 ? _a : false, onChange: onInputChange }),
|
|
11527
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", { htmlFor: "isDefault" }, "Default rule")),
|
|
11528
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("sub", { className: "rules-form-footer-sub" },
|
|
11529
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, "Default rules are auto-applied to every prompt."))),
|
|
11530
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "form-actions" },
|
|
11531
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { type: "button", className: "button-base button-gray", onClick: onClose, disabled: isLoading }, "Cancel"),
|
|
11532
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { type: "submit", className: "button-base button-purple", disabled: isLoading }, isLoading ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null,
|
|
11533
|
+
"Saving Rule",
|
|
11534
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { style: { color: 'var(--purple-700)' } },
|
|
11535
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_LoadingCircle__WEBPACK_IMPORTED_MODULE_3__["default"], null)))) : (isEditing ? 'Update Rule' : 'Add Rule'))))));
|
|
10875
11536
|
};
|
|
10876
11537
|
|
|
10877
11538
|
|
|
@@ -10889,9 +11550,10 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
10889
11550
|
/* harmony export */ });
|
|
10890
11551
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
10891
11552
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
10892
|
-
/* harmony import */ var
|
|
10893
|
-
/* harmony import */ var
|
|
10894
|
-
/* harmony import */ var
|
|
11553
|
+
/* harmony import */ var _RulesForm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./RulesForm */ "./lib/Extensions/SettingsManager/rules/RulesForm.js");
|
|
11554
|
+
/* harmony import */ var _restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../restAPI/RestAPI */ "./lib/restAPI/RestAPI.js");
|
|
11555
|
+
/* harmony import */ var _utils_fileName__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../utils/fileName */ "./lib/utils/fileName.js");
|
|
11556
|
+
/* harmony import */ var _style_button_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../style/button.css */ "./style/button.css");
|
|
10895
11557
|
/*
|
|
10896
11558
|
* Copyright (c) Saga Inc.
|
|
10897
11559
|
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
@@ -10900,19 +11562,23 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
10900
11562
|
|
|
10901
11563
|
|
|
10902
11564
|
|
|
11565
|
+
|
|
10903
11566
|
const RulesPage = () => {
|
|
10904
11567
|
const [modalStatus, setModalStatus] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(undefined);
|
|
10905
11568
|
const [rules, setRules] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);
|
|
10906
11569
|
const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);
|
|
11570
|
+
const [editingRuleName, setEditingRuleName] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);
|
|
10907
11571
|
const [formData, setFormData] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({
|
|
10908
11572
|
name: '',
|
|
10909
|
-
description: ''
|
|
11573
|
+
description: '',
|
|
11574
|
+
isDefault: false
|
|
10910
11575
|
});
|
|
10911
11576
|
const [formError, setFormError] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);
|
|
11577
|
+
const [filterDefaultOnly, setFilterDefaultOnly] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
|
|
10912
11578
|
const fetchRules = async () => {
|
|
10913
11579
|
try {
|
|
10914
|
-
const
|
|
10915
|
-
setRules(
|
|
11580
|
+
const rulesList = await (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_2__.getRules)();
|
|
11581
|
+
setRules(rulesList.sort((a, b) => a.name.localeCompare(b.name)));
|
|
10916
11582
|
}
|
|
10917
11583
|
catch (err) {
|
|
10918
11584
|
setError(err instanceof Error ? err.message : 'An error occurred');
|
|
@@ -10922,35 +11588,66 @@ const RulesPage = () => {
|
|
|
10922
11588
|
void fetchRules();
|
|
10923
11589
|
}, []);
|
|
10924
11590
|
const handleInputChange = (e) => {
|
|
10925
|
-
const
|
|
11591
|
+
const target = e.target;
|
|
11592
|
+
const name = target.name;
|
|
11593
|
+
const value = target.type === 'checkbox'
|
|
11594
|
+
? target.checked
|
|
11595
|
+
: target.value;
|
|
10926
11596
|
setFormData(prev => ({ ...prev, [name]: value }));
|
|
10927
11597
|
};
|
|
10928
11598
|
const handleSubmit = async (e) => {
|
|
10929
11599
|
e.preventDefault();
|
|
10930
|
-
|
|
10931
|
-
if (!
|
|
10932
|
-
setFormError('
|
|
11600
|
+
const slugifiedName = (0,_utils_fileName__WEBPACK_IMPORTED_MODULE_3__.slugifyRuleName)(formData.name);
|
|
11601
|
+
if (!slugifiedName) {
|
|
11602
|
+
setFormError('Rule name is required. Use letters, numbers, spaces, hyphens, or underscores.');
|
|
10933
11603
|
return;
|
|
10934
11604
|
}
|
|
10935
|
-
|
|
10936
|
-
|
|
11605
|
+
setFormError(null);
|
|
11606
|
+
await (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_2__.setRule)(slugifiedName, formData.description, formData.isDefault);
|
|
11607
|
+
if (editingRuleName && editingRuleName !== slugifiedName) {
|
|
11608
|
+
await (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_2__.deleteRule)(editingRuleName);
|
|
10937
11609
|
}
|
|
10938
|
-
await (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_1__.setRule)(formData.name, formData.description);
|
|
10939
11610
|
setModalStatus(undefined);
|
|
11611
|
+
setEditingRuleName(null);
|
|
10940
11612
|
setFormData({
|
|
10941
11613
|
name: '',
|
|
10942
|
-
description: ''
|
|
11614
|
+
description: '',
|
|
11615
|
+
isDefault: false
|
|
10943
11616
|
});
|
|
10944
11617
|
void fetchRules();
|
|
10945
11618
|
};
|
|
10946
|
-
const handleRuleClick = async (
|
|
10947
|
-
const
|
|
11619
|
+
const handleRuleClick = async (ruleName) => {
|
|
11620
|
+
const ruleFile = ruleName.includes('.md') ? ruleName : `${ruleName}.md`;
|
|
11621
|
+
const { content: ruleContent, isDefault } = await (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_2__.getRule)(ruleFile);
|
|
11622
|
+
const nameWithoutExt = (0,_utils_fileName__WEBPACK_IMPORTED_MODULE_3__.stripFileEnding)(ruleFile);
|
|
11623
|
+
setEditingRuleName(nameWithoutExt);
|
|
10948
11624
|
setFormData({
|
|
10949
|
-
name:
|
|
10950
|
-
description: ruleContent || ''
|
|
11625
|
+
name: nameWithoutExt,
|
|
11626
|
+
description: ruleContent || '',
|
|
11627
|
+
isDefault
|
|
10951
11628
|
});
|
|
10952
11629
|
setModalStatus('edit rule');
|
|
10953
11630
|
};
|
|
11631
|
+
const handleDeleteRule = async (e, ruleItem) => {
|
|
11632
|
+
e.stopPropagation();
|
|
11633
|
+
const ruleName = (0,_utils_fileName__WEBPACK_IMPORTED_MODULE_3__.stripFileEnding)(ruleItem.name);
|
|
11634
|
+
if (!window.confirm(`Are you sure you want to delete the rule "${ruleName}"?`)) {
|
|
11635
|
+
return;
|
|
11636
|
+
}
|
|
11637
|
+
try {
|
|
11638
|
+
await (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_2__.deleteRule)(ruleName);
|
|
11639
|
+
if (editingRuleName === ruleName) {
|
|
11640
|
+
setModalStatus(undefined);
|
|
11641
|
+
setEditingRuleName(null);
|
|
11642
|
+
setFormData({ name: '', description: '', isDefault: false });
|
|
11643
|
+
}
|
|
11644
|
+
void fetchRules();
|
|
11645
|
+
}
|
|
11646
|
+
catch (err) {
|
|
11647
|
+
setError(err instanceof Error ? err.message : 'Failed to delete rule');
|
|
11648
|
+
}
|
|
11649
|
+
};
|
|
11650
|
+
const displayedRules = filterDefaultOnly ? rules.filter(r => r.isDefault) : rules;
|
|
10954
11651
|
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null,
|
|
10955
11652
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "settings-header" },
|
|
10956
11653
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h2", null, "Rules"),
|
|
@@ -10958,20 +11655,29 @@ const RulesPage = () => {
|
|
|
10958
11655
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("b", null, "\uFF0B Add Rule"))),
|
|
10959
11656
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null, "Rules provide more context to Ai models to help them follow your preferences, adhere to your organization's style guides, learn niche topics, and be a better colleague."),
|
|
10960
11657
|
error && react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", { className: "error" }, error),
|
|
10961
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "rules-list
|
|
11658
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "rules-list-filter" },
|
|
11659
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { type: "button", className: !filterDefaultOnly ? 'button-base button-gray rules-list-filter-active' : 'button-base button-gray', onClick: () => setFilterDefaultOnly(false) }, "All"),
|
|
11660
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { type: "button", className: filterDefaultOnly ? 'button-base button-gray rules-list-filter-active' : 'button-base button-gray', onClick: () => setFilterDefaultOnly(true) }, "Default only")),
|
|
11661
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "rules-list" }, displayedRules.length > 0 ? displayedRules.map((ruleItem) => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { key: ruleItem.name, className: "rule-item", onClick: () => handleRuleClick(ruleItem.name) },
|
|
10962
11662
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "rule-content" },
|
|
10963
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h4", { className: "rule-name" },
|
|
10964
|
-
|
|
11663
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h4", { className: "rule-name" },
|
|
11664
|
+
(0,_utils_fileName__WEBPACK_IMPORTED_MODULE_3__.stripFileEnding)(ruleItem.name),
|
|
11665
|
+
ruleItem.isDefault && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "rule-badge" }, "Default")))),
|
|
10965
11666
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "rule-actions" },
|
|
10966
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { className: "button-base button-gray" }, "Update")
|
|
10967
|
-
|
|
11667
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { type: "button", className: "button-base button-gray" }, "Update"),
|
|
11668
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { type: "button", className: "button-base button-red", onClick: e => handleDeleteRule(e, ruleItem) }, "Delete"))))) : (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "empty-state" },
|
|
11669
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null, filterDefaultOnly
|
|
11670
|
+
? 'No default rules. Mark a rule as default in the form to see it here.'
|
|
11671
|
+
: 'No rules created yet. Add your first rule to get started!')))),
|
|
10968
11672
|
modalStatus && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "modal-overlay" },
|
|
10969
11673
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "modal-content modal-content-large", onClick: e => e.stopPropagation() },
|
|
10970
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
11674
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_RulesForm__WEBPACK_IMPORTED_MODULE_4__.RulesForm, { formData: formData, formError: formError, onInputChange: handleInputChange, onSubmit: handleSubmit, onClose: () => {
|
|
10971
11675
|
setModalStatus(undefined);
|
|
11676
|
+
setEditingRuleName(null);
|
|
10972
11677
|
setFormData({
|
|
10973
11678
|
name: '',
|
|
10974
|
-
description: ''
|
|
11679
|
+
description: '',
|
|
11680
|
+
isDefault: false
|
|
10975
11681
|
});
|
|
10976
11682
|
}, isEditing: modalStatus === 'edit rule' }))))));
|
|
10977
11683
|
};
|
|
@@ -12626,16 +13332,6 @@ const MODEL_MAPPINGS = [
|
|
|
12626
13332
|
speed: 'Fast',
|
|
12627
13333
|
complexityHandling: 'Medium'
|
|
12628
13334
|
},
|
|
12629
|
-
{
|
|
12630
|
-
displayName: _utils_models__WEBPACK_IMPORTED_MODULE_3__.CLAUDE_SONNET_DISPLAY_NAME,
|
|
12631
|
-
fullName: _utils_models__WEBPACK_IMPORTED_MODULE_3__.CLAUDE_SONNET_MODEL_NAME,
|
|
12632
|
-
type: 'smart',
|
|
12633
|
-
goodFor: [...GOOD_FOR_SMART],
|
|
12634
|
-
provider: 'Anthropic',
|
|
12635
|
-
tokenLimit: '1M',
|
|
12636
|
-
speed: 'Medium',
|
|
12637
|
-
complexityHandling: 'High'
|
|
12638
|
-
},
|
|
12639
13335
|
{
|
|
12640
13336
|
displayName: _utils_models__WEBPACK_IMPORTED_MODULE_3__.GEMINI_3_FLASH_DISPLAY_NAME,
|
|
12641
13337
|
fullName: _utils_models__WEBPACK_IMPORTED_MODULE_3__.GEMINI_3_FLASH_MODEL_NAME,
|
|
@@ -14686,7 +15382,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
14686
15382
|
/* harmony import */ var _Extensions_SettingsManager_SettingsManagerPlugin__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./Extensions/SettingsManager/SettingsManagerPlugin */ "./lib/Extensions/SettingsManager/SettingsManagerPlugin.js");
|
|
14687
15383
|
/* harmony import */ var _Extensions_VersionCheck__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./Extensions/VersionCheck */ "./lib/Extensions/VersionCheck/index.js");
|
|
14688
15384
|
/* harmony import */ var _Extensions_NotebookFooter__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./Extensions/NotebookFooter */ "./lib/Extensions/NotebookFooter/index.js");
|
|
14689
|
-
/* harmony import */ var
|
|
15385
|
+
/* harmony import */ var _Extensions_MitoThemes__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./Extensions/MitoThemes */ "./lib/Extensions/MitoThemes/index.js");
|
|
14690
15386
|
/* harmony import */ var _Extensions_AppManager_ManageAppsPlugin__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./Extensions/AppManager/ManageAppsPlugin */ "./lib/Extensions/AppManager/ManageAppsPlugin.js");
|
|
14691
15387
|
/* harmony import */ var _Extensions_ChartWizard_ChartWizardPlugin__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./Extensions/ChartWizard/ChartWizardPlugin */ "./lib/Extensions/ChartWizard/ChartWizardPlugin.js");
|
|
14692
15388
|
/*
|
|
@@ -14722,7 +15418,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
14722
15418
|
_Extensions_VersionCheck__WEBPACK_IMPORTED_MODULE_9__.versionCheckPlugin,
|
|
14723
15419
|
_Extensions_NotebookFooter__WEBPACK_IMPORTED_MODULE_10__["default"],
|
|
14724
15420
|
_Extensions_AppManager_ManageAppsPlugin__WEBPACK_IMPORTED_MODULE_11__["default"],
|
|
14725
|
-
|
|
15421
|
+
_Extensions_MitoThemes__WEBPACK_IMPORTED_MODULE_12__["default"],
|
|
14726
15422
|
_Extensions_ChartWizard_ChartWizardPlugin__WEBPACK_IMPORTED_MODULE_13__["default"]
|
|
14727
15423
|
]);
|
|
14728
15424
|
|
|
@@ -14739,6 +15435,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
14739
15435
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
14740
15436
|
/* harmony export */ addChartField: () => (/* binding */ addChartField),
|
|
14741
15437
|
/* harmony export */ convertChartCode: () => (/* binding */ convertChartCode),
|
|
15438
|
+
/* harmony export */ deleteRule: () => (/* binding */ deleteRule),
|
|
14742
15439
|
/* harmony export */ getChatHistoryThread: () => (/* binding */ getChatHistoryThread),
|
|
14743
15440
|
/* harmony export */ getChatHistoryThreads: () => (/* binding */ getChatHistoryThreads),
|
|
14744
15441
|
/* harmony export */ getDatabaseConnections: () => (/* binding */ getDatabaseConnections),
|
|
@@ -14804,10 +15501,14 @@ const updateSettings = async (settingsKey, settingsValue) => {
|
|
|
14804
15501
|
RULES ENDPOINTS
|
|
14805
15502
|
|
|
14806
15503
|
************************************/
|
|
14807
|
-
const setRule = async (ruleName, ruleContent) => {
|
|
15504
|
+
const setRule = async (ruleName, ruleContent, isDefault) => {
|
|
15505
|
+
const body = { content: ruleContent };
|
|
15506
|
+
if (isDefault !== undefined) {
|
|
15507
|
+
body.is_default = isDefault;
|
|
15508
|
+
}
|
|
14808
15509
|
const resp = await (0,_utils__WEBPACK_IMPORTED_MODULE_0__.requestAPI)(`rules/${ruleName}`, {
|
|
14809
15510
|
method: 'PUT',
|
|
14810
|
-
body: JSON.stringify(
|
|
15511
|
+
body: JSON.stringify(body),
|
|
14811
15512
|
});
|
|
14812
15513
|
if (resp.error) {
|
|
14813
15514
|
throw new Error(resp.error.message);
|
|
@@ -14815,19 +15516,31 @@ const setRule = async (ruleName, ruleContent) => {
|
|
|
14815
15516
|
return resp.data || '';
|
|
14816
15517
|
};
|
|
14817
15518
|
const getRule = async (ruleName) => {
|
|
14818
|
-
var _a;
|
|
15519
|
+
var _a, _b;
|
|
14819
15520
|
const resp = await (0,_utils__WEBPACK_IMPORTED_MODULE_0__.requestAPI)(`rules/${ruleName}`);
|
|
14820
15521
|
if (resp.error) {
|
|
14821
15522
|
throw new Error(resp.error.message);
|
|
14822
15523
|
}
|
|
14823
|
-
return
|
|
15524
|
+
return {
|
|
15525
|
+
content: (_a = resp.data) === null || _a === void 0 ? void 0 : _a.content,
|
|
15526
|
+
isDefault: Boolean((_b = resp.data) === null || _b === void 0 ? void 0 : _b.is_default)
|
|
15527
|
+
};
|
|
14824
15528
|
};
|
|
14825
15529
|
const getRules = async () => {
|
|
14826
15530
|
const resp = await (0,_utils__WEBPACK_IMPORTED_MODULE_0__.requestAPI)(`rules`);
|
|
14827
15531
|
if (resp.error) {
|
|
14828
15532
|
throw new Error(resp.error.message);
|
|
14829
15533
|
}
|
|
14830
|
-
|
|
15534
|
+
const data = resp.data || [];
|
|
15535
|
+
return data.map(r => ({ name: r.name, isDefault: Boolean(r.is_default) }));
|
|
15536
|
+
};
|
|
15537
|
+
const deleteRule = async (ruleName) => {
|
|
15538
|
+
const resp = await (0,_utils__WEBPACK_IMPORTED_MODULE_0__.requestAPI)(`rules/${ruleName}`, {
|
|
15539
|
+
method: 'DELETE',
|
|
15540
|
+
});
|
|
15541
|
+
if (resp.error) {
|
|
15542
|
+
throw new Error(resp.error.message);
|
|
15543
|
+
}
|
|
14831
15544
|
};
|
|
14832
15545
|
/************************************
|
|
14833
15546
|
|
|
@@ -16154,6 +16867,7 @@ const isErrorFixupMessage = (promptType, message, messageContent) => {
|
|
|
16154
16867
|
__webpack_require__.r(__webpack_exports__);
|
|
16155
16868
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
16156
16869
|
/* harmony export */ isValidFileName: () => (/* binding */ isValidFileName),
|
|
16870
|
+
/* harmony export */ slugifyRuleName: () => (/* binding */ slugifyRuleName),
|
|
16157
16871
|
/* harmony export */ stripFileEnding: () => (/* binding */ stripFileEnding)
|
|
16158
16872
|
/* harmony export */ });
|
|
16159
16873
|
/*
|
|
@@ -16165,6 +16879,19 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
16165
16879
|
const isValidFileName = (fileName) => {
|
|
16166
16880
|
return /^[a-zA-Z0-9_-]+$/.test(fileName);
|
|
16167
16881
|
};
|
|
16882
|
+
/**
|
|
16883
|
+
* Converts a rule name to a valid file-name slug: spaces and other separators
|
|
16884
|
+
* become hyphens, invalid characters removed, multiple hyphens collapsed.
|
|
16885
|
+
*/
|
|
16886
|
+
const slugifyRuleName = (name) => {
|
|
16887
|
+
return name
|
|
16888
|
+
.trim()
|
|
16889
|
+
.replace(/\s+/g, '-')
|
|
16890
|
+
.replace(/[^a-zA-Z0-9_-]+/g, '-')
|
|
16891
|
+
.replace(/-+/g, '-')
|
|
16892
|
+
.replace(/^-|-$/g, '')
|
|
16893
|
+
.toLowerCase();
|
|
16894
|
+
};
|
|
16168
16895
|
const stripFileEnding = (rule) => {
|
|
16169
16896
|
return rule.replace('.md', '');
|
|
16170
16897
|
};
|
|
@@ -16446,7 +17173,6 @@ async function getAvailableModels() {
|
|
|
16446
17173
|
return [
|
|
16447
17174
|
GPT_4_1_MODEL_NAME,
|
|
16448
17175
|
GPT_5_2_MODEL_NAME,
|
|
16449
|
-
CLAUDE_SONNET_MODEL_NAME,
|
|
16450
17176
|
CLAUDE_HAIKU_MODEL_NAME,
|
|
16451
17177
|
GEMINI_3_FLASH_MODEL_NAME,
|
|
16452
17178
|
GEMINI_3_PRO_MODEL_NAME,
|
|
@@ -18411,8 +19137,6 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
18411
19137
|
|
|
18412
19138
|
.add-field-container {
|
|
18413
19139
|
margin-top: 16px;
|
|
18414
|
-
padding-top: 16px;
|
|
18415
|
-
border-top: 1px solid #e0e0e0;
|
|
18416
19140
|
}
|
|
18417
19141
|
|
|
18418
19142
|
.add-field-button {
|
|
@@ -18431,7 +19155,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
18431
19155
|
font-family: inherit;
|
|
18432
19156
|
box-sizing: border-box;
|
|
18433
19157
|
}
|
|
18434
|
-
`, "",{"version":3,"sources":["webpack://./style/AddFieldButton.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;IACI,gBAAgB;
|
|
19158
|
+
`, "",{"version":3,"sources":["webpack://./style/AddFieldButton.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;IACI,gBAAgB;AACpB;;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}\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":""}]);
|
|
18435
19159
|
// Exports
|
|
18436
19160
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
18437
19161
|
|
|
@@ -20217,6 +20941,63 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
20217
20941
|
box-sizing: border-box;
|
|
20218
20942
|
}
|
|
20219
20943
|
|
|
20944
|
+
.chart-wizard-number-slider-row {
|
|
20945
|
+
display: flex;
|
|
20946
|
+
align-items: center;
|
|
20947
|
+
gap: 12px;
|
|
20948
|
+
width: 100%;
|
|
20949
|
+
}
|
|
20950
|
+
|
|
20951
|
+
.chart-wizard-range-slider {
|
|
20952
|
+
flex: 1;
|
|
20953
|
+
min-width: 0;
|
|
20954
|
+
height: 6px;
|
|
20955
|
+
-webkit-appearance: none;
|
|
20956
|
+
appearance: none;
|
|
20957
|
+
background: var(--jp-border-color2);
|
|
20958
|
+
border-radius: 3px;
|
|
20959
|
+
outline: none;
|
|
20960
|
+
}
|
|
20961
|
+
|
|
20962
|
+
.chart-wizard-range-slider::-webkit-slider-thumb {
|
|
20963
|
+
-webkit-appearance: none;
|
|
20964
|
+
appearance: none;
|
|
20965
|
+
width: 16px;
|
|
20966
|
+
height: 16px;
|
|
20967
|
+
border-radius: 50%;
|
|
20968
|
+
background: var(--jp-brand-color1);
|
|
20969
|
+
cursor: pointer;
|
|
20970
|
+
border: none;
|
|
20971
|
+
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
|
|
20972
|
+
}
|
|
20973
|
+
|
|
20974
|
+
.chart-wizard-range-slider::-moz-range-thumb {
|
|
20975
|
+
width: 16px;
|
|
20976
|
+
height: 16px;
|
|
20977
|
+
border-radius: 50%;
|
|
20978
|
+
background: var(--jp-brand-color1);
|
|
20979
|
+
cursor: pointer;
|
|
20980
|
+
border: none;
|
|
20981
|
+
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
|
|
20982
|
+
}
|
|
20983
|
+
|
|
20984
|
+
.chart-wizard-range-slider:focus {
|
|
20985
|
+
outline: none;
|
|
20986
|
+
}
|
|
20987
|
+
|
|
20988
|
+
.chart-wizard-range-slider:focus::-webkit-slider-thumb {
|
|
20989
|
+
box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.25);
|
|
20990
|
+
}
|
|
20991
|
+
|
|
20992
|
+
.chart-wizard-range-slider:focus::-moz-range-thumb {
|
|
20993
|
+
box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.25);
|
|
20994
|
+
}
|
|
20995
|
+
|
|
20996
|
+
.chart-wizard-number-input-narrow {
|
|
20997
|
+
width: 72px;
|
|
20998
|
+
flex-shrink: 0;
|
|
20999
|
+
}
|
|
21000
|
+
|
|
20220
21001
|
.chart-wizard-color-container {
|
|
20221
21002
|
display: flex;
|
|
20222
21003
|
gap: 8px;
|
|
@@ -20247,6 +21028,27 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
20247
21028
|
min-height: 0;
|
|
20248
21029
|
}
|
|
20249
21030
|
|
|
21031
|
+
.chart-wizard-export-section {
|
|
21032
|
+
margin-top: 24px;
|
|
21033
|
+
padding-top: 20px;
|
|
21034
|
+
border-top: 1px solid var(--jp-border-color2);
|
|
21035
|
+
}
|
|
21036
|
+
|
|
21037
|
+
.chart-wizard-export-format-row {
|
|
21038
|
+
margin-bottom: 12px;
|
|
21039
|
+
}
|
|
21040
|
+
|
|
21041
|
+
.chart-wizard-export-format-row .toggle-button-container {
|
|
21042
|
+
width: 100%;
|
|
21043
|
+
}
|
|
21044
|
+
|
|
21045
|
+
.chart-wizard-section-heading {
|
|
21046
|
+
font-size: 14px;
|
|
21047
|
+
font-weight: 600;
|
|
21048
|
+
margin: 0 0 12px 0;
|
|
21049
|
+
color: var(--jp-content-font-color1);
|
|
21050
|
+
}
|
|
21051
|
+
|
|
20250
21052
|
.chart-wizard-empty-state,
|
|
20251
21053
|
.chart-wizard-no-config {
|
|
20252
21054
|
flex: 1;
|
|
@@ -20327,7 +21129,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
20327
21129
|
|
|
20328
21130
|
.chart-wizard-warning-button:active {
|
|
20329
21131
|
background-color: var(--yellow-300);
|
|
20330
|
-
}`, "",{"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":""}]);
|
|
21132
|
+
}`, "",{"version":3,"sources":["webpack://./style/ChartWizardWidget.css"],"names":[],"mappings":"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","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-number-slider-row {\n display: flex;\n align-items: center;\n gap: 12px;\n width: 100%;\n}\n\n.chart-wizard-range-slider {\n flex: 1;\n min-width: 0;\n height: 6px;\n -webkit-appearance: none;\n appearance: none;\n background: var(--jp-border-color2);\n border-radius: 3px;\n outline: none;\n}\n\n.chart-wizard-range-slider::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background: var(--jp-brand-color1);\n cursor: pointer;\n border: none;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);\n}\n\n.chart-wizard-range-slider::-moz-range-thumb {\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background: var(--jp-brand-color1);\n cursor: pointer;\n border: none;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);\n}\n\n.chart-wizard-range-slider:focus {\n outline: none;\n}\n\n.chart-wizard-range-slider:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.25);\n}\n\n.chart-wizard-range-slider:focus::-moz-range-thumb {\n box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.25);\n}\n\n.chart-wizard-number-input-narrow {\n width: 72px;\n flex-shrink: 0;\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-export-section {\n margin-top: 24px;\n padding-top: 20px;\n border-top: 1px solid var(--jp-border-color2);\n}\n\n.chart-wizard-export-format-row {\n margin-bottom: 12px;\n}\n\n.chart-wizard-export-format-row .toggle-button-container {\n width: 100%;\n}\n\n.chart-wizard-section-heading {\n font-size: 14px;\n font-weight: 600;\n margin: 0 0 12px 0;\n color: var(--jp-content-font-color1);\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":""}]);
|
|
20331
21133
|
// Exports
|
|
20332
21134
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
20333
21135
|
|
|
@@ -22412,12 +23214,11 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
22412
23214
|
|
|
22413
23215
|
.model-option:hover {
|
|
22414
23216
|
background-color: var(--jp-layout-color2);
|
|
22415
|
-
color: var(--purple-700);
|
|
22416
23217
|
}
|
|
22417
23218
|
|
|
22418
23219
|
.model-option.selected {
|
|
22419
23220
|
background-color: var(--jp-layout-color2);
|
|
22420
|
-
color: var(--
|
|
23221
|
+
color: var(--jp-brand-color2);
|
|
22421
23222
|
}
|
|
22422
23223
|
|
|
22423
23224
|
/* When inside chat-controls - ensure proper alignment with other controls */
|
|
@@ -22573,7 +23374,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
22573
23374
|
|
|
22574
23375
|
.model-tooltip-bullet-item:last-child {
|
|
22575
23376
|
margin-bottom: 0;
|
|
22576
|
-
}`, "",{"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;
|
|
23377
|
+
}`, "",{"version":3,"sources":["webpack://./style/ModelSelector.css"],"names":[],"mappings":"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","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":""}]);
|
|
22577
23378
|
// Exports
|
|
22578
23379
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
22579
23380
|
|
|
@@ -23378,10 +24179,13 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
23378
24179
|
/* 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__);
|
|
23379
24180
|
/* 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");
|
|
23380
24181
|
/* 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__);
|
|
24182
|
+
/* harmony import */ var _node_modules_css_loader_dist_cjs_js_base_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!./base.css */ "./node_modules/css-loader/dist/cjs.js!./style/base.css");
|
|
23381
24183
|
// Imports
|
|
23382
24184
|
|
|
23383
24185
|
|
|
24186
|
+
|
|
23384
24187
|
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()));
|
|
24188
|
+
___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_base_css__WEBPACK_IMPORTED_MODULE_2__["default"]);
|
|
23385
24189
|
// Module
|
|
23386
24190
|
___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
23387
24191
|
* Copyright (c) Saga Inc.
|
|
@@ -23400,7 +24204,8 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
23400
24204
|
transition: border-color 0.2s;
|
|
23401
24205
|
font-family: var(--jp-ui-font-family);
|
|
23402
24206
|
resize: vertical;
|
|
23403
|
-
min-height:
|
|
24207
|
+
min-height: 100px;
|
|
24208
|
+
max-height: 50vh;
|
|
23404
24209
|
}
|
|
23405
24210
|
|
|
23406
24211
|
.rules-form textarea:focus {
|
|
@@ -23416,29 +24221,96 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
23416
24221
|
display: block;
|
|
23417
24222
|
}
|
|
23418
24223
|
|
|
24224
|
+
.rules-form .form-group-checkbox {
|
|
24225
|
+
display: flex;
|
|
24226
|
+
align-items: center;
|
|
24227
|
+
gap: 8px;
|
|
24228
|
+
}
|
|
24229
|
+
|
|
24230
|
+
.rules-form .form-group-checkbox input[type="checkbox"] {
|
|
24231
|
+
width: 16px;
|
|
24232
|
+
height: 16px;
|
|
24233
|
+
cursor: pointer;
|
|
24234
|
+
}
|
|
24235
|
+
|
|
24236
|
+
.rules-form .form-group-checkbox label {
|
|
24237
|
+
margin: 0;
|
|
24238
|
+
cursor: pointer;
|
|
24239
|
+
}
|
|
24240
|
+
|
|
24241
|
+
.rules-form-footer {
|
|
24242
|
+
display: flex;
|
|
24243
|
+
align-items: center;
|
|
24244
|
+
justify-content: space-between;
|
|
24245
|
+
gap: 16px;
|
|
24246
|
+
margin-top: 24px;
|
|
24247
|
+
flex-wrap: wrap;
|
|
24248
|
+
}
|
|
24249
|
+
|
|
24250
|
+
.rules-form-footer-left {
|
|
24251
|
+
display: flex;
|
|
24252
|
+
align-items: center;
|
|
24253
|
+
gap: 8px;
|
|
24254
|
+
flex-wrap: wrap;
|
|
24255
|
+
}
|
|
24256
|
+
|
|
24257
|
+
.rules-form-footer-left .form-group-checkbox {
|
|
24258
|
+
margin: 0;
|
|
24259
|
+
}
|
|
24260
|
+
|
|
24261
|
+
.rules-form-footer-sub {
|
|
24262
|
+
margin: 0;
|
|
24263
|
+
color: var(--jp-ui-font-color2);
|
|
24264
|
+
font-size: 12px;
|
|
24265
|
+
}
|
|
24266
|
+
|
|
24267
|
+
.rules-form .form-actions {
|
|
24268
|
+
border-top: none;
|
|
24269
|
+
margin-top: 0;
|
|
24270
|
+
padding-top: 0;
|
|
24271
|
+
}
|
|
24272
|
+
|
|
24273
|
+
/* Rules list filter */
|
|
24274
|
+
.rules-list-filter {
|
|
24275
|
+
display: flex;
|
|
24276
|
+
gap: 8px;
|
|
24277
|
+
margin-top: 16px;
|
|
24278
|
+
margin-bottom: 12px;
|
|
24279
|
+
}
|
|
24280
|
+
|
|
24281
|
+
.rules-list-filter .button-base {
|
|
24282
|
+
padding: 6px 12px;
|
|
24283
|
+
font-size: 13px;
|
|
24284
|
+
}
|
|
24285
|
+
|
|
24286
|
+
.rules-list-filter .rules-list-filter-active {
|
|
24287
|
+
background-color: var(--jp-layout-color2);
|
|
24288
|
+
font-weight: 500;
|
|
24289
|
+
}
|
|
24290
|
+
|
|
23419
24291
|
/* Rules List Styling */
|
|
23420
24292
|
.rules-list {
|
|
23421
|
-
margin-top:
|
|
24293
|
+
margin-top: 0;
|
|
23422
24294
|
display: flex;
|
|
23423
24295
|
flex-direction: column;
|
|
23424
|
-
gap: 16px;
|
|
23425
24296
|
}
|
|
23426
24297
|
|
|
23427
24298
|
.rules-list .rule-item {
|
|
23428
24299
|
display: flex;
|
|
23429
24300
|
justify-content: space-between;
|
|
23430
24301
|
align-items: center;
|
|
23431
|
-
padding:
|
|
23432
|
-
border: 1px solid var(--jp-border-color1);
|
|
23433
|
-
|
|
23434
|
-
background: var(--jp-layout-color0);
|
|
23435
|
-
transition: border-color 0.2s, box-shadow 0.2s;
|
|
24302
|
+
padding: 12px 0;
|
|
24303
|
+
border-bottom: 1px solid var(--jp-border-color1);
|
|
24304
|
+
transition: color 0.15s ease;
|
|
23436
24305
|
cursor: pointer;
|
|
23437
24306
|
}
|
|
23438
24307
|
|
|
23439
|
-
.rules-list .rule-item:
|
|
23440
|
-
border-
|
|
23441
|
-
|
|
24308
|
+
.rules-list .rule-item:last-child {
|
|
24309
|
+
border-bottom: none;
|
|
24310
|
+
}
|
|
24311
|
+
|
|
24312
|
+
.rules-list .rule-item:hover .rule-name {
|
|
24313
|
+
color: var(--purple-600);
|
|
23442
24314
|
}
|
|
23443
24315
|
|
|
23444
24316
|
.rules-list .rule-content {
|
|
@@ -23447,18 +24319,25 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
23447
24319
|
}
|
|
23448
24320
|
|
|
23449
24321
|
.rules-list .rule-name {
|
|
23450
|
-
margin: 0
|
|
24322
|
+
margin: 0;
|
|
23451
24323
|
color: var(--jp-ui-font-color1);
|
|
23452
24324
|
font-size: 14px;
|
|
23453
24325
|
font-weight: 500;
|
|
23454
24326
|
line-height: 1;
|
|
24327
|
+
display: flex;
|
|
24328
|
+
align-items: center;
|
|
24329
|
+
gap: 8px;
|
|
23455
24330
|
}
|
|
23456
24331
|
|
|
23457
|
-
.rules-list .rule-
|
|
23458
|
-
|
|
23459
|
-
|
|
23460
|
-
font-size:
|
|
23461
|
-
|
|
24332
|
+
.rules-list .rule-badge {
|
|
24333
|
+
display: inline-block;
|
|
24334
|
+
padding: 2px 6px;
|
|
24335
|
+
font-size: 11px;
|
|
24336
|
+
font-weight: 500;
|
|
24337
|
+
line-height: 1;
|
|
24338
|
+
border-radius: 3px;
|
|
24339
|
+
background-color: var(--purple-300);
|
|
24340
|
+
color: var(--purple-700);
|
|
23462
24341
|
}
|
|
23463
24342
|
|
|
23464
24343
|
.rules-list .rule-actions {
|
|
@@ -23477,7 +24356,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
23477
24356
|
margin: 0;
|
|
23478
24357
|
font-size: 16px;
|
|
23479
24358
|
}
|
|
23480
|
-
`, "",{"version":3,"sources":["webpack://./style/RulesForm.css"],"names":[],"mappings":"AAAA;;;EAGE;;
|
|
24359
|
+
`, "",{"version":3,"sources":["webpack://./style/RulesForm.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAIF;IACI,WAAW;IACX,sBAAsB;IACtB,iBAAiB;IACjB,yCAAyC;IACzC,kBAAkB;IAClB,mCAAmC;IACnC,+BAA+B;IAC/B,eAAe;IACf,6BAA6B;IAC7B,qCAAqC;IACrC,gBAAgB;IAChB,iBAAiB;IACjB,gBAAgB;AACpB;;AAEA;IACI,aAAa;IACb,+BAA+B;IAC/B,6CAA6C;AACjD;;AAEA;IACI,+BAA+B;IAC/B,eAAe;IACf,kBAAkB;IAClB,cAAc;AAClB;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,QAAQ;AACZ;;AAEA;IACI,WAAW;IACX,YAAY;IACZ,eAAe;AACnB;;AAEA;IACI,SAAS;IACT,eAAe;AACnB;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,8BAA8B;IAC9B,SAAS;IACT,gBAAgB;IAChB,eAAe;AACnB;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,QAAQ;IACR,eAAe;AACnB;;AAEA;IACI,SAAS;AACb;;AAEA;IACI,SAAS;IACT,+BAA+B;IAC/B,eAAe;AACnB;;AAEA;IACI,gBAAgB;IAChB,aAAa;IACb,cAAc;AAClB;;AAEA,sBAAsB;AACtB;IACI,aAAa;IACb,QAAQ;IACR,gBAAgB;IAChB,mBAAmB;AACvB;;AAEA;IACI,iBAAiB;IACjB,eAAe;AACnB;;AAEA;IACI,yCAAyC;IACzC,gBAAgB;AACpB;;AAEA,uBAAuB;AACvB;IACI,aAAa;IACb,aAAa;IACb,sBAAsB;AAC1B;;AAEA;IACI,aAAa;IACb,8BAA8B;IAC9B,mBAAmB;IACnB,eAAe;IACf,gDAAgD;IAChD,4BAA4B;IAC5B,eAAe;AACnB;;AAEA;IACI,mBAAmB;AACvB;;AAEA;IACI,wBAAwB;AAC5B;;AAEA;IACI,OAAO;IACP,kBAAkB;AACtB;;AAEA;IACI,SAAS;IACT,+BAA+B;IAC/B,eAAe;IACf,gBAAgB;IAChB,cAAc;IACd,aAAa;IACb,mBAAmB;IACnB,QAAQ;AACZ;;AAEA;IACI,qBAAqB;IACrB,gBAAgB;IAChB,eAAe;IACf,gBAAgB;IAChB,cAAc;IACd,kBAAkB;IAClB,mCAAmC;IACnC,wBAAwB;AAC5B;;AAEA;IACI,aAAa;IACb,QAAQ;AACZ;;AAEA;IACI,kBAAkB;IAClB,kBAAkB;IAClB,+BAA+B;IAC/B,kBAAkB;AACtB;;AAEA;IACI,SAAS;IACT,eAAe;AACnB","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n@import url('base.css');\n\n.rules-form textarea {\n width: 100%;\n box-sizing: border-box;\n padding: 8px 12px;\n border: 1px solid var(--jp-border-color1);\n border-radius: 4px;\n background: var(--jp-layout-color0);\n color: var(--jp-ui-font-color1);\n font-size: 14px;\n transition: border-color 0.2s;\n font-family: var(--jp-ui-font-family);\n resize: vertical;\n min-height: 100px;\n max-height: 50vh;\n}\n\n.rules-form textarea:focus {\n outline: none;\n border-color: var(--purple-500);\n box-shadow: 0 0 0 2px rgba(124, 58, 237, 0.1);\n}\n\n.rules-form .form-group sub {\n color: var(--jp-ui-font-color2);\n margin-top: 4px;\n margin-bottom: 4px;\n display: block;\n}\n\n.rules-form .form-group-checkbox {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.rules-form .form-group-checkbox input[type=\"checkbox\"] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n\n.rules-form .form-group-checkbox label {\n margin: 0;\n cursor: pointer;\n}\n\n.rules-form-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n margin-top: 24px;\n flex-wrap: wrap;\n}\n\n.rules-form-footer-left {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.rules-form-footer-left .form-group-checkbox {\n margin: 0;\n}\n\n.rules-form-footer-sub {\n margin: 0;\n color: var(--jp-ui-font-color2);\n font-size: 12px;\n}\n\n.rules-form .form-actions {\n border-top: none;\n margin-top: 0;\n padding-top: 0;\n}\n\n/* Rules list filter */\n.rules-list-filter {\n display: flex;\n gap: 8px;\n margin-top: 16px;\n margin-bottom: 12px;\n}\n\n.rules-list-filter .button-base {\n padding: 6px 12px;\n font-size: 13px;\n}\n\n.rules-list-filter .rules-list-filter-active {\n background-color: var(--jp-layout-color2);\n font-weight: 500;\n}\n\n/* Rules List Styling */\n.rules-list {\n margin-top: 0;\n display: flex;\n flex-direction: column;\n}\n\n.rules-list .rule-item {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 0;\n border-bottom: 1px solid var(--jp-border-color1);\n transition: color 0.15s ease;\n cursor: pointer;\n}\n\n.rules-list .rule-item:last-child {\n border-bottom: none;\n}\n\n.rules-list .rule-item:hover .rule-name {\n color: var(--purple-600);\n}\n\n.rules-list .rule-content {\n flex: 1;\n margin-right: 16px;\n}\n\n.rules-list .rule-name {\n margin: 0;\n color: var(--jp-ui-font-color1);\n font-size: 14px;\n font-weight: 500;\n line-height: 1;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.rules-list .rule-badge {\n display: inline-block;\n padding: 2px 6px;\n font-size: 11px;\n font-weight: 500;\n line-height: 1;\n border-radius: 3px;\n background-color: var(--purple-300);\n color: var(--purple-700);\n}\n\n.rules-list .rule-actions {\n display: flex;\n gap: 8px;\n}\n\n.rules-list .empty-state {\n text-align: center;\n padding: 40px 20px;\n color: var(--jp-ui-font-color2);\n font-style: italic;\n}\n\n.rules-list .empty-state p {\n margin: 0;\n font-size: 16px;\n}\n"],"sourceRoot":""}]);
|
|
23481
24360
|
// Exports
|
|
23482
24361
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
23483
24362
|
|
|
@@ -23522,8 +24401,14 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
23522
24401
|
width: 100%;
|
|
23523
24402
|
border-radius: 4px;
|
|
23524
24403
|
overflow: hidden;
|
|
23525
|
-
|
|
23526
|
-
|
|
24404
|
+
/* Theme-aware button colors set by Mito palettes */
|
|
24405
|
+
background-color: var(--mito-theme-button-background, var(--blue-300));
|
|
24406
|
+
border: 0.5px solid var(--mito-theme-button-border, var(--blue-900));
|
|
24407
|
+
transition: all 0.15s ease;
|
|
24408
|
+
}
|
|
24409
|
+
|
|
24410
|
+
.mito-run-cell-button-group:hover {
|
|
24411
|
+
background-color: var(--mito-theme-button-hover-background, var(--blue-400));
|
|
23527
24412
|
}
|
|
23528
24413
|
|
|
23529
24414
|
/* Shared button styles */
|
|
@@ -23534,7 +24419,8 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
23534
24419
|
padding: 0;
|
|
23535
24420
|
border-radius: 0;
|
|
23536
24421
|
cursor: pointer;
|
|
23537
|
-
color
|
|
24422
|
+
/* Theme-aware text color */
|
|
24423
|
+
color: var(--mito-theme-button-text, var(--blue-900));
|
|
23538
24424
|
font-size: 13px;
|
|
23539
24425
|
font-weight: 400;
|
|
23540
24426
|
transition: background-color 0.15s ease;
|
|
@@ -23543,7 +24429,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
23543
24429
|
}
|
|
23544
24430
|
|
|
23545
24431
|
.mito-run-cell-button:hover {
|
|
23546
|
-
background-color:
|
|
24432
|
+
background-color: transparent;
|
|
23547
24433
|
}
|
|
23548
24434
|
|
|
23549
24435
|
/* Main button (left side - play icon + text) */
|
|
@@ -23560,8 +24446,8 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
23560
24446
|
background: linear-gradient(
|
|
23561
24447
|
to bottom,
|
|
23562
24448
|
transparent,
|
|
23563
|
-
var(--blue-900) 20%,
|
|
23564
|
-
var(--blue-900) 80%,
|
|
24449
|
+
var(--mito-theme-button-border, var(--blue-900)) 20%,
|
|
24450
|
+
var(--mito-theme-button-border, var(--blue-900)) 80%,
|
|
23565
24451
|
transparent
|
|
23566
24452
|
);
|
|
23567
24453
|
opacity: 0.4;
|
|
@@ -23579,8 +24465,8 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
23579
24465
|
|
|
23580
24466
|
/* Play icon styling */
|
|
23581
24467
|
.mito-run-cell-button-main > svg {
|
|
23582
|
-
color: var(--blue-900);
|
|
23583
|
-
fill: var(--blue-900);
|
|
24468
|
+
color: var(--mito-theme-button-text, var(--blue-900));
|
|
24469
|
+
fill: var(--mito-theme-button-text, var(--blue-900));
|
|
23584
24470
|
width: 12px;
|
|
23585
24471
|
height: 12px;
|
|
23586
24472
|
flex-shrink: 0;
|
|
@@ -23590,7 +24476,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
23590
24476
|
.mito-run-cell-button-dropdown svg {
|
|
23591
24477
|
width: 14px;
|
|
23592
24478
|
height: 14px;
|
|
23593
|
-
color: var(--blue-900);
|
|
24479
|
+
color: var(--mito-theme-button-text, var(--blue-900));
|
|
23594
24480
|
}
|
|
23595
24481
|
|
|
23596
24482
|
/* Ensure chevron path only uses stroke, not fill */
|
|
@@ -23601,6 +24487,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
23601
24487
|
|
|
23602
24488
|
.mito-run-cell-button-text {
|
|
23603
24489
|
white-space: nowrap;
|
|
24490
|
+
color: var(--mito-theme-button-text, var(--blue-900));
|
|
23604
24491
|
}
|
|
23605
24492
|
|
|
23606
24493
|
/* Running state - applied to the group */
|
|
@@ -23738,7 +24625,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
23738
24625
|
.jp-Notebook-toolbar {
|
|
23739
24626
|
display: flex;
|
|
23740
24627
|
align-items: center;
|
|
23741
|
-
}`, "",{"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,
|
|
24628
|
+
}`, "",{"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":""}]);
|
|
23742
24629
|
// Exports
|
|
23743
24630
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
23744
24631
|
|
|
@@ -24622,14 +25509,16 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
24622
25509
|
}
|
|
24623
25510
|
|
|
24624
25511
|
.button-blue {
|
|
24625
|
-
|
|
24626
|
-
color: var(--blue-
|
|
24627
|
-
|
|
25512
|
+
/* Theme-aware button colors set by Mito palettes */
|
|
25513
|
+
background-color: var(--mito-theme-button-background, var(--blue-300));
|
|
25514
|
+
color: var(--mito-theme-button-text, var(--blue-900)) !important;
|
|
25515
|
+
border: 0.5px solid var(--mito-theme-button-border, var(--blue-900));
|
|
24628
25516
|
border-radius: 4px;
|
|
25517
|
+
transition: all 0.15s ease;
|
|
24629
25518
|
}
|
|
24630
25519
|
|
|
24631
25520
|
.button-blue:hover {
|
|
24632
|
-
background-color: var(--blue-400);
|
|
25521
|
+
background-color: var(--mito-theme-button-hover-background, var(--blue-400));
|
|
24633
25522
|
}
|
|
24634
25523
|
|
|
24635
25524
|
.button-dark-purple {
|
|
@@ -24654,7 +25543,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
24654
25543
|
font-size: 12px;
|
|
24655
25544
|
padding: 2px 5px;
|
|
24656
25545
|
}
|
|
24657
|
-
`, "",{"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,
|
|
25546
|
+
`, "",{"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":""}]);
|
|
24658
25547
|
// Exports
|
|
24659
25548
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
24660
25549
|
|
|
@@ -24697,7 +25586,7 @@ module.exports = "<svg width=\"22\" height=\"17\" viewBox=\"0 0 22 17\" fill=\"n
|
|
|
24697
25586
|
\********************************/
|
|
24698
25587
|
/***/ ((module) => {
|
|
24699
25588
|
|
|
24700
|
-
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(--
|
|
25589
|
+
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";
|
|
24701
25590
|
|
|
24702
25591
|
/***/ }),
|
|
24703
25592
|
|
|
@@ -27290,4 +28179,4 @@ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js
|
|
|
27290
28179
|
/***/ })
|
|
27291
28180
|
|
|
27292
28181
|
}]);
|
|
27293
|
-
//# sourceMappingURL=lib_index_js.
|
|
28182
|
+
//# sourceMappingURL=lib_index_js.dccfa541c464ee0e5cd4.js.map
|