mito-ai 0.1.52__py3-none-any.whl → 0.1.54__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/_version.py +1 -1
- mito_ai/anthropic_client.py +4 -3
- mito_ai/completions/models.py +1 -1
- mito_ai/completions/prompt_builders/agent_system_message.py +10 -7
- mito_ai/streamlit_conversion/prompts/streamlit_app_creation_prompt.py +18 -2
- mito_ai/streamlit_conversion/streamlit_agent_handler.py +12 -12
- mito_ai/streamlit_preview/handlers.py +13 -6
- mito_ai/streamlit_preview/manager.py +4 -1
- mito_ai/streamlit_preview/utils.py +4 -4
- mito_ai/tests/streamlit_conversion/test_streamlit_agent_handler.py +7 -7
- mito_ai/tests/streamlit_preview/test_streamlit_preview_handler.py +4 -3
- mito_ai/utils/anthropic_utils.py +28 -3
- mito_ai/utils/tokens.py +29 -0
- {mito_ai-0.1.52.data → mito_ai-0.1.54.data}/data/share/jupyter/labextensions/mito_ai/build_log.json +1 -1
- {mito_ai-0.1.52.data → mito_ai-0.1.54.data}/data/share/jupyter/labextensions/mito_ai/package.json +4 -4
- {mito_ai-0.1.52.data → mito_ai-0.1.54.data}/data/share/jupyter/labextensions/mito_ai/schemas/mito_ai/package.json.orig +3 -3
- mito_ai-0.1.52.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.5ec1e525d244fc8588cf.js → mito_ai-0.1.54.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.31462f8f6a76b1cefbeb.js +575 -104
- mito_ai-0.1.54.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.31462f8f6a76b1cefbeb.js.map +1 -0
- mito_ai-0.1.52.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.89927e1d3b5962d57ae3.js → mito_ai-0.1.54.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.3f3c98eaba66bf084c66.js +3 -3
- mito_ai-0.1.52.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.89927e1d3b5962d57ae3.js.map → mito_ai-0.1.54.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.3f3c98eaba66bf084c66.js.map +1 -1
- {mito_ai-0.1.52.dist-info → mito_ai-0.1.54.dist-info}/METADATA +1 -1
- {mito_ai-0.1.52.dist-info → mito_ai-0.1.54.dist-info}/RECORD +46 -45
- {mito_ai-0.1.52.dist-info → mito_ai-0.1.54.dist-info}/WHEEL +1 -1
- mito_ai-0.1.52.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.5ec1e525d244fc8588cf.js.map +0 -1
- {mito_ai-0.1.52.data → mito_ai-0.1.54.data}/data/etc/jupyter/jupyter_server_config.d/mito_ai.json +0 -0
- {mito_ai-0.1.52.data → mito_ai-0.1.54.data}/data/share/jupyter/labextensions/mito_ai/schemas/mito_ai/toolbar-buttons.json +0 -0
- {mito_ai-0.1.52.data → mito_ai-0.1.54.data}/data/share/jupyter/labextensions/mito_ai/static/node_modules_process_browser_js.4b128e94d31a81ebd209.js +0 -0
- {mito_ai-0.1.52.data → mito_ai-0.1.54.data}/data/share/jupyter/labextensions/mito_ai/static/node_modules_process_browser_js.4b128e94d31a81ebd209.js.map +0 -0
- {mito_ai-0.1.52.data → mito_ai-0.1.54.data}/data/share/jupyter/labextensions/mito_ai/static/style.js +0 -0
- {mito_ai-0.1.52.data → mito_ai-0.1.54.data}/data/share/jupyter/labextensions/mito_ai/static/style_index_js.5876024bb17dbd6a3ee6.js +0 -0
- {mito_ai-0.1.52.data → mito_ai-0.1.54.data}/data/share/jupyter/labextensions/mito_ai/static/style_index_js.5876024bb17dbd6a3ee6.js.map +0 -0
- {mito_ai-0.1.52.data → mito_ai-0.1.54.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.52.data → mito_ai-0.1.54.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.52.data → mito_ai-0.1.54.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.52.data → mito_ai-0.1.54.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.52.data → mito_ai-0.1.54.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.52.data → mito_ai-0.1.54.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.52.data → mito_ai-0.1.54.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.52.data → mito_ai-0.1.54.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.52.data → mito_ai-0.1.54.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.52.data → mito_ai-0.1.54.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.52.data → mito_ai-0.1.54.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_semver_index_js.3f6754ac5116d47de76b.js +0 -0
- {mito_ai-0.1.52.data → mito_ai-0.1.54.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_semver_index_js.3f6754ac5116d47de76b.js.map +0 -0
- {mito_ai-0.1.52.data → mito_ai-0.1.54.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_vscode-diff_dist_index_js.ea55f1f9346638aafbcf.js +0 -0
- {mito_ai-0.1.52.data → mito_ai-0.1.54.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.52.dist-info → mito_ai-0.1.54.dist-info}/entry_points.txt +0 -0
- {mito_ai-0.1.52.dist-info → mito_ai-0.1.54.dist-info}/licenses/LICENSE +0 -0
|
@@ -3740,7 +3740,7 @@ const useAgentExecution = ({ notebookTracker, app, streamlitPreviewManager, webs
|
|
|
3740
3740
|
break;
|
|
3741
3741
|
}
|
|
3742
3742
|
// TODO: If we created a validated type in the agent response validation function, then we woulnd't need to do these checks
|
|
3743
|
-
if (agentResponse.type === 'edit_streamlit_app' && (agentResponse.
|
|
3743
|
+
if (agentResponse.type === 'edit_streamlit_app' && (agentResponse.streamlit_app_prompt === undefined || agentResponse.streamlit_app_prompt === null)) {
|
|
3744
3744
|
await markAgentForStopping();
|
|
3745
3745
|
isAgentFinished = true;
|
|
3746
3746
|
break;
|
|
@@ -3785,12 +3785,13 @@ const useAgentExecution = ({ notebookTracker, app, streamlitPreviewManager, webs
|
|
|
3785
3785
|
}
|
|
3786
3786
|
if (agentResponse.type === 'create_streamlit_app') {
|
|
3787
3787
|
// Create new preview using the service
|
|
3788
|
-
const
|
|
3788
|
+
const createStreamlitAppPrompt = agentResponse.streamlit_app_prompt || '';
|
|
3789
|
+
const streamlitPreviewResponse = await streamlitPreviewManager.openAppPreview(app, agentTargetNotebookPanelRef.current, createStreamlitAppPrompt);
|
|
3789
3790
|
if (streamlitPreviewResponse.type === 'error') {
|
|
3790
3791
|
messageToShareWithAgent = streamlitPreviewResponse.message;
|
|
3791
3792
|
}
|
|
3792
3793
|
}
|
|
3793
|
-
if (agentResponse.type === 'edit_streamlit_app' && agentResponse.
|
|
3794
|
+
if (agentResponse.type === 'edit_streamlit_app' && agentResponse.streamlit_app_prompt) {
|
|
3794
3795
|
// Ensure there is an active preview to edit
|
|
3795
3796
|
let streamlitPreviewResponse = await streamlitPreviewManager.openAppPreview(app, agentTargetNotebookPanelRef.current);
|
|
3796
3797
|
if (streamlitPreviewResponse.type === 'error') {
|
|
@@ -3798,7 +3799,7 @@ const useAgentExecution = ({ notebookTracker, app, streamlitPreviewManager, webs
|
|
|
3798
3799
|
continue;
|
|
3799
3800
|
}
|
|
3800
3801
|
// Edit the existing preview
|
|
3801
|
-
streamlitPreviewResponse = await streamlitPreviewManager.editExistingPreview(agentResponse.
|
|
3802
|
+
streamlitPreviewResponse = await streamlitPreviewManager.editExistingPreview(agentResponse.streamlit_app_prompt, agentTargetNotebookPanelRef.current);
|
|
3802
3803
|
if (streamlitPreviewResponse.type === 'error') {
|
|
3803
3804
|
messageToShareWithAgent = streamlitPreviewResponse.message;
|
|
3804
3805
|
}
|
|
@@ -4959,9 +4960,9 @@ function validateAndCorrectAgentResponse(agentResponse) {
|
|
|
4959
4960
|
// No empty strings in the assumptions
|
|
4960
4961
|
correctedResponse.analysis_assumptions = (_a = correctedResponse.analysis_assumptions) === null || _a === void 0 ? void 0 : _a.filter(assumption => assumption.trim() !== '');
|
|
4961
4962
|
}
|
|
4962
|
-
// Correct
|
|
4963
|
-
const editStreamlitAppPromptType = typeof correctedResponse.
|
|
4964
|
-
correctedResponse.
|
|
4963
|
+
// Correct streamlit_app_prompt - ensure it's a string when present
|
|
4964
|
+
const editStreamlitAppPromptType = typeof correctedResponse.streamlit_app_prompt;
|
|
4965
|
+
correctedResponse.streamlit_app_prompt = editStreamlitAppPromptType === 'string' ? correctedResponse.streamlit_app_prompt : undefined;
|
|
4965
4966
|
// For now we don't validate the cell_update object itself, as this is more complex and has
|
|
4966
4967
|
// not caused issues thus far.
|
|
4967
4968
|
return correctedResponse;
|
|
@@ -5998,9 +5999,11 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
5998
5999
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
5999
6000
|
/* harmony import */ var _jupyterlab_ui_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @jupyterlab/ui-components */ "webpack/sharing/consume/default/@jupyterlab/ui-components");
|
|
6000
6001
|
/* harmony import */ var _jupyterlab_ui_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_jupyterlab_ui_components__WEBPACK_IMPORTED_MODULE_1__);
|
|
6001
|
-
/* harmony import */ var
|
|
6002
|
-
/* harmony import */ var
|
|
6002
|
+
/* harmony import */ var _AppDeploy_auth__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../AppDeploy/auth */ "./lib/Extensions/AppDeploy/auth.js");
|
|
6003
|
+
/* harmony import */ var _ListAppsAPI__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ListAppsAPI */ "./lib/Extensions/AppManager/ListAppsAPI.js");
|
|
6004
|
+
/* harmony import */ var _AppDeploy_authPopupUtils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../AppDeploy/authPopupUtils */ "./lib/Extensions/AppDeploy/authPopupUtils.js");
|
|
6003
6005
|
/* harmony import */ var _style_AppsList_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../style/AppsList.css */ "./style/AppsList.css");
|
|
6006
|
+
/* harmony import */ var _style_button_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../style/button.css */ "./style/button.css");
|
|
6004
6007
|
/*
|
|
6005
6008
|
* Copyright (c) Saga Inc.
|
|
6006
6009
|
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
@@ -6011,48 +6014,46 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
6011
6014
|
|
|
6012
6015
|
|
|
6013
6016
|
|
|
6017
|
+
|
|
6018
|
+
|
|
6014
6019
|
const AppsList = ({ appManagerService }) => {
|
|
6015
6020
|
const [apps, setApps] = react__WEBPACK_IMPORTED_MODULE_0__.useState([]);
|
|
6016
6021
|
const [loading, setLoading] = react__WEBPACK_IMPORTED_MODULE_0__.useState(true);
|
|
6017
6022
|
const [error, setError] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null);
|
|
6018
|
-
|
|
6019
|
-
|
|
6020
|
-
|
|
6021
|
-
|
|
6022
|
-
|
|
6023
|
-
|
|
6024
|
-
|
|
6025
|
-
|
|
6026
|
-
|
|
6027
|
-
console.log('[AppsList] fetchUserApps response:', response);
|
|
6028
|
-
if ((0,_ListAppsAPI__WEBPACK_IMPORTED_MODULE_3__.isGetAppsSuccess)(response)) {
|
|
6029
|
-
setApps(response.apps);
|
|
6030
|
-
}
|
|
6031
|
-
else {
|
|
6032
|
-
setError(response.errorMessage || 'Failed to load apps');
|
|
6033
|
-
setApps([]);
|
|
6034
|
-
}
|
|
6023
|
+
const refreshApps = async () => {
|
|
6024
|
+
try {
|
|
6025
|
+
console.log('[AppsList] Refreshing apps...');
|
|
6026
|
+
setLoading(true);
|
|
6027
|
+
setError(null);
|
|
6028
|
+
const response = await (0,_ListAppsAPI__WEBPACK_IMPORTED_MODULE_4__.fetchUserApps)(appManagerService);
|
|
6029
|
+
console.log('[AppsList] fetchUserApps response:', response);
|
|
6030
|
+
if ((0,_ListAppsAPI__WEBPACK_IMPORTED_MODULE_4__.isGetAppsSuccess)(response)) {
|
|
6031
|
+
setApps(response.apps);
|
|
6035
6032
|
}
|
|
6036
|
-
|
|
6037
|
-
|
|
6038
|
-
setError(err instanceof Error ? err.message : 'An unexpected error occurred');
|
|
6033
|
+
else {
|
|
6034
|
+
setError(response.errorMessage || 'Failed to load apps');
|
|
6039
6035
|
setApps([]);
|
|
6040
6036
|
}
|
|
6041
|
-
finally {
|
|
6042
|
-
setLoading(false);
|
|
6043
|
-
}
|
|
6044
|
-
};
|
|
6045
|
-
console.log('[AppsList] Component mounted, calling loadApps...');
|
|
6046
|
-
void loadApps();
|
|
6047
|
-
}, [appManagerService]);
|
|
6048
|
-
const refreshApps = async () => {
|
|
6049
|
-
const response = await (0,_ListAppsAPI__WEBPACK_IMPORTED_MODULE_3__.fetchUserApps)(appManagerService);
|
|
6050
|
-
if ((0,_ListAppsAPI__WEBPACK_IMPORTED_MODULE_3__.isGetAppsSuccess)(response)) {
|
|
6051
|
-
setApps(response.apps);
|
|
6052
|
-
setError(null);
|
|
6053
6037
|
}
|
|
6054
|
-
|
|
6055
|
-
|
|
6038
|
+
catch (err) {
|
|
6039
|
+
console.error('[AppsList] Error loading apps:', err);
|
|
6040
|
+
setError(err instanceof Error ? err.message : 'An unexpected error occurred');
|
|
6041
|
+
setApps([]);
|
|
6042
|
+
}
|
|
6043
|
+
finally {
|
|
6044
|
+
setLoading(false);
|
|
6045
|
+
}
|
|
6046
|
+
};
|
|
6047
|
+
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {
|
|
6048
|
+
void refreshApps();
|
|
6049
|
+
}, []);
|
|
6050
|
+
const handleLogin = async () => {
|
|
6051
|
+
try {
|
|
6052
|
+
await (0,_AppDeploy_authPopupUtils__WEBPACK_IMPORTED_MODULE_5__.showAuthenticationPopup)();
|
|
6053
|
+
await refreshApps();
|
|
6054
|
+
}
|
|
6055
|
+
catch (err) {
|
|
6056
|
+
console.warn('[AppsList] Login popup closed or failed:', err);
|
|
6056
6057
|
}
|
|
6057
6058
|
};
|
|
6058
6059
|
const copyToClipboard = async (url, appName) => {
|
|
@@ -6093,15 +6094,26 @@ const AppsList = ({ appManagerService }) => {
|
|
|
6093
6094
|
react__WEBPACK_IMPORTED_MODULE_0__.createElement("h3", { className: "apps-list-title" }, "Your Apps"),
|
|
6094
6095
|
react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { className: "apps-list-actions" },
|
|
6095
6096
|
react__WEBPACK_IMPORTED_MODULE_0__.createElement("button", { onClick: refreshApps, disabled: loading, className: "apps-list-button", title: "Refresh apps" }, loading ? 'Loading...' : 'Refresh'),
|
|
6096
|
-
react__WEBPACK_IMPORTED_MODULE_0__.createElement("button", { onClick: () => {
|
|
6097
|
+
react__WEBPACK_IMPORTED_MODULE_0__.createElement("button", { onClick: async () => {
|
|
6097
6098
|
console.log('Logout clicked');
|
|
6098
|
-
|
|
6099
|
+
try {
|
|
6100
|
+
await (0,_AppDeploy_auth__WEBPACK_IMPORTED_MODULE_6__.logoutAndClearJWTTokens)();
|
|
6101
|
+
}
|
|
6102
|
+
catch (err) {
|
|
6103
|
+
console.error('[AppsList] Error during logout:', err);
|
|
6104
|
+
}
|
|
6105
|
+
finally {
|
|
6106
|
+
await refreshApps();
|
|
6107
|
+
}
|
|
6099
6108
|
}, className: "apps-list-button", title: "Logout" }, "Logout"))),
|
|
6100
|
-
loading ? (react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { className: "apps-list-loading" }, "Loading apps...")) : error ? (react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { className: "apps-list-
|
|
6101
|
-
"
|
|
6102
|
-
error,
|
|
6103
|
-
react__WEBPACK_IMPORTED_MODULE_0__.createElement(
|
|
6104
|
-
|
|
6109
|
+
react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { className: "apps-list-content" }, loading ? (react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { className: "apps-list-loading" }, "Loading apps...")) : error ? (error === 'User not authenticated' ? (react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { className: "apps-list-auth-message" },
|
|
6110
|
+
react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { className: "apps-list-auth-text" }, "User not authenticated"),
|
|
6111
|
+
react__WEBPACK_IMPORTED_MODULE_0__.createElement("button", { onClick: handleLogin, className: "button-base button-purple apps-list-auth-login-button" }, "Login"))) : (react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { className: "apps-list-error" },
|
|
6112
|
+
react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null,
|
|
6113
|
+
"Error: ",
|
|
6114
|
+
error,
|
|
6115
|
+
react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { className: "apps-list-error-actions" },
|
|
6116
|
+
react__WEBPACK_IMPORTED_MODULE_0__.createElement("button", { onClick: refreshApps, className: "apps-list-button primary" }, "Try Again")))))) : apps.length === 0 ? (react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { className: "apps-list-empty" }, "No apps deployed yet")) : (react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", null, apps.map((app) => (react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { key: app.name, className: "app-item" },
|
|
6105
6117
|
react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { className: "app-item-header" },
|
|
6106
6118
|
react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { className: "app-item-content" },
|
|
6107
6119
|
react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { className: "app-item-name" }, app.name),
|
|
@@ -6114,7 +6126,7 @@ const AppsList = ({ appManagerService }) => {
|
|
|
6114
6126
|
react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { className: "app-item-url-container" },
|
|
6115
6127
|
react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { className: "app-item-url" }, app.url),
|
|
6116
6128
|
react__WEBPACK_IMPORTED_MODULE_0__.createElement("button", { onClick: () => copyToClipboard(app.url, app.name), className: "app-item-copy-button", title: `Copy URL for ${app.name}` },
|
|
6117
|
-
react__WEBPACK_IMPORTED_MODULE_0__.createElement(_jupyterlab_ui_components__WEBPACK_IMPORTED_MODULE_1__.copyIcon.react, { width: "14px", height: "14px", fill: "var(--jp-ui-font-color2)" }))))))))));
|
|
6129
|
+
react__WEBPACK_IMPORTED_MODULE_0__.createElement(_jupyterlab_ui_components__WEBPACK_IMPORTED_MODULE_1__.copyIcon.react, { width: "14px", height: "14px", fill: "var(--jp-ui-font-color2)" })))))))))));
|
|
6118
6130
|
};
|
|
6119
6131
|
|
|
6120
6132
|
|
|
@@ -6331,6 +6343,112 @@ const ManageAppsPlugin = {
|
|
|
6331
6343
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ManageAppsPlugin);
|
|
6332
6344
|
|
|
6333
6345
|
|
|
6346
|
+
/***/ }),
|
|
6347
|
+
|
|
6348
|
+
/***/ "./lib/Extensions/AppPreview/PlaceholderWidget.js":
|
|
6349
|
+
/*!********************************************************!*\
|
|
6350
|
+
!*** ./lib/Extensions/AppPreview/PlaceholderWidget.js ***!
|
|
6351
|
+
\********************************************************/
|
|
6352
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
6353
|
+
|
|
6354
|
+
__webpack_require__.r(__webpack_exports__);
|
|
6355
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
6356
|
+
/* harmony export */ PlaceholderWidget: () => (/* binding */ PlaceholderWidget)
|
|
6357
|
+
/* harmony export */ });
|
|
6358
|
+
/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/widgets */ "webpack/sharing/consume/default/@lumino/widgets");
|
|
6359
|
+
/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__);
|
|
6360
|
+
/*
|
|
6361
|
+
* Copyright (c) Saga Inc.
|
|
6362
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
6363
|
+
*/
|
|
6364
|
+
|
|
6365
|
+
/**
|
|
6366
|
+
* Simple placeholder widget for loading state.
|
|
6367
|
+
*/
|
|
6368
|
+
class PlaceholderWidget extends _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget {
|
|
6369
|
+
constructor() {
|
|
6370
|
+
var _a, _b;
|
|
6371
|
+
super();
|
|
6372
|
+
this.addClass('jp-placeholder-widget');
|
|
6373
|
+
const container = document.createElement('div');
|
|
6374
|
+
container.style.display = 'flex';
|
|
6375
|
+
container.style.flexDirection = 'column';
|
|
6376
|
+
container.style.alignItems = 'center';
|
|
6377
|
+
container.style.justifyContent = 'center';
|
|
6378
|
+
container.style.height = '100%';
|
|
6379
|
+
container.style.width = '100%';
|
|
6380
|
+
container.style.padding = '40px 20px';
|
|
6381
|
+
container.style.textAlign = 'center';
|
|
6382
|
+
const emojiContainer = document.createElement('div');
|
|
6383
|
+
emojiContainer.style.fontSize = '64px';
|
|
6384
|
+
emojiContainer.style.minHeight = '80px';
|
|
6385
|
+
emojiContainer.style.display = 'flex';
|
|
6386
|
+
emojiContainer.style.alignItems = 'center';
|
|
6387
|
+
emojiContainer.style.justifyContent = 'center';
|
|
6388
|
+
emojiContainer.style.marginBottom = '24px';
|
|
6389
|
+
emojiContainer.style.transition = 'opacity 0.3s ease-in-out';
|
|
6390
|
+
const emojis = ['🚧', '🧱', '🏗️', '🔨', '🔧', '⚙️', '🛠️', '🔩', '📐'];
|
|
6391
|
+
let currentEmojiIndex = 0;
|
|
6392
|
+
emojiContainer.textContent = (_a = emojis[currentEmojiIndex]) !== null && _a !== void 0 ? _a : '';
|
|
6393
|
+
const emojiInterval = setInterval(() => {
|
|
6394
|
+
emojiContainer.style.opacity = '0';
|
|
6395
|
+
setTimeout(() => {
|
|
6396
|
+
var _a;
|
|
6397
|
+
currentEmojiIndex = (currentEmojiIndex + 1) % emojis.length;
|
|
6398
|
+
emojiContainer.textContent = (_a = emojis[currentEmojiIndex]) !== null && _a !== void 0 ? _a : '';
|
|
6399
|
+
emojiContainer.style.opacity = '1';
|
|
6400
|
+
}, 150);
|
|
6401
|
+
}, 2000);
|
|
6402
|
+
const message = document.createElement('div');
|
|
6403
|
+
message.textContent = 'Building your app. This might take a couple of minutes.';
|
|
6404
|
+
message.style.fontSize = '16px';
|
|
6405
|
+
message.style.fontWeight = '500';
|
|
6406
|
+
message.style.color = 'var(--jp-content-font-color1)';
|
|
6407
|
+
message.style.marginBottom = '12px';
|
|
6408
|
+
message.style.textAlign = 'center';
|
|
6409
|
+
message.style.lineHeight = '1.5';
|
|
6410
|
+
const statusMessages = [
|
|
6411
|
+
'Starting build...',
|
|
6412
|
+
'Processing cells...',
|
|
6413
|
+
'Analyzing notebook structure...',
|
|
6414
|
+
'Converting to Streamlit format...',
|
|
6415
|
+
'Configuring app components...',
|
|
6416
|
+
'Evaluating Streamlit Apps...',
|
|
6417
|
+
'Initializing server...',
|
|
6418
|
+
'Almost there...',
|
|
6419
|
+
'Finalizing your app...',
|
|
6420
|
+
'Preparing preview...'
|
|
6421
|
+
];
|
|
6422
|
+
const statusMessage = document.createElement('div');
|
|
6423
|
+
let currentStatusIndex = 0;
|
|
6424
|
+
statusMessage.textContent = (_b = statusMessages[currentStatusIndex]) !== null && _b !== void 0 ? _b : '';
|
|
6425
|
+
statusMessage.style.fontSize = '13px';
|
|
6426
|
+
statusMessage.style.color = 'var(--jp-content-font-color3)';
|
|
6427
|
+
statusMessage.style.textAlign = 'center';
|
|
6428
|
+
statusMessage.style.lineHeight = '1.4';
|
|
6429
|
+
statusMessage.style.transition = 'opacity 0.2s ease-in-out';
|
|
6430
|
+
const statusInterval = setInterval(() => {
|
|
6431
|
+
statusMessage.style.opacity = '0';
|
|
6432
|
+
setTimeout(() => {
|
|
6433
|
+
var _a;
|
|
6434
|
+
currentStatusIndex = (currentStatusIndex + 1) % statusMessages.length;
|
|
6435
|
+
statusMessage.textContent = (_a = statusMessages[currentStatusIndex]) !== null && _a !== void 0 ? _a : '';
|
|
6436
|
+
statusMessage.style.opacity = '1';
|
|
6437
|
+
}, 200);
|
|
6438
|
+
}, 20000);
|
|
6439
|
+
// Clean up intervals when widget is disposed
|
|
6440
|
+
this.disposed.connect(() => {
|
|
6441
|
+
clearInterval(emojiInterval);
|
|
6442
|
+
clearInterval(statusInterval);
|
|
6443
|
+
});
|
|
6444
|
+
container.appendChild(emojiContainer);
|
|
6445
|
+
container.appendChild(message);
|
|
6446
|
+
container.appendChild(statusMessage);
|
|
6447
|
+
this.node.appendChild(container);
|
|
6448
|
+
}
|
|
6449
|
+
}
|
|
6450
|
+
|
|
6451
|
+
|
|
6334
6452
|
/***/ }),
|
|
6335
6453
|
|
|
6336
6454
|
/***/ "./lib/Extensions/AppPreview/StreamlitPreviewPlugin.js":
|
|
@@ -6352,16 +6470,17 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
6352
6470
|
/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_lumino_widgets__WEBPACK_IMPORTED_MODULE_2__);
|
|
6353
6471
|
/* harmony import */ var _lumino_coreutils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @lumino/coreutils */ "webpack/sharing/consume/default/@lumino/coreutils");
|
|
6354
6472
|
/* harmony import */ var _lumino_coreutils__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_lumino_coreutils__WEBPACK_IMPORTED_MODULE_3__);
|
|
6355
|
-
/* harmony import */ var
|
|
6356
|
-
/* harmony import */ var
|
|
6357
|
-
/* harmony import */ var
|
|
6358
|
-
/* harmony import */ var
|
|
6359
|
-
/* harmony import */ var
|
|
6360
|
-
/* harmony import */ var
|
|
6473
|
+
/* harmony import */ var _restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../restAPI/RestAPI */ "./lib/restAPI/RestAPI.js");
|
|
6474
|
+
/* harmony import */ var _AppDeploy_DeployStreamlitApp__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../AppDeploy/DeployStreamlitApp */ "./lib/Extensions/AppDeploy/DeployStreamlitApp.js");
|
|
6475
|
+
/* harmony import */ var _AppDeploy_AppDeployPlugin__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../AppDeploy/AppDeployPlugin */ "./lib/Extensions/AppDeploy/AppDeployPlugin.js");
|
|
6476
|
+
/* harmony import */ var _AppManager_ManageAppsPlugin__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../AppManager/ManageAppsPlugin */ "./lib/Extensions/AppManager/ManageAppsPlugin.js");
|
|
6477
|
+
/* harmony import */ var _commands__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../commands */ "./lib/commands.js");
|
|
6478
|
+
/* harmony import */ var _icons__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../icons */ "./lib/icons/index.js");
|
|
6361
6479
|
/* harmony import */ var _style_StreamlitPreviewPlugin_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../style/StreamlitPreviewPlugin.css */ "./style/StreamlitPreviewPlugin.css");
|
|
6362
6480
|
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils */ "./lib/Extensions/AppPreview/utils.js");
|
|
6363
|
-
/* harmony import */ var
|
|
6364
|
-
/* harmony import */ var
|
|
6481
|
+
/* harmony import */ var _UpdateAppDropdown__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./UpdateAppDropdown */ "./lib/Extensions/AppPreview/UpdateAppDropdown.js");
|
|
6482
|
+
/* harmony import */ var _utils_notebookMetadata__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../utils/notebookMetadata */ "./lib/utils/notebookMetadata.js");
|
|
6483
|
+
/* harmony import */ var _PlaceholderWidget__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./PlaceholderWidget */ "./lib/Extensions/AppPreview/PlaceholderWidget.js");
|
|
6365
6484
|
/*
|
|
6366
6485
|
* Copyright (c) Saga Inc.
|
|
6367
6486
|
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
@@ -6381,6 +6500,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
6381
6500
|
|
|
6382
6501
|
|
|
6383
6502
|
|
|
6503
|
+
|
|
6384
6504
|
/**
|
|
6385
6505
|
* The token for the StreamlitPreview service.
|
|
6386
6506
|
*/
|
|
@@ -6419,16 +6539,33 @@ class StreamlitAppPreviewManager {
|
|
|
6419
6539
|
/**
|
|
6420
6540
|
* Create a new Streamlit app preview, replacing any existing preview.
|
|
6421
6541
|
*/
|
|
6422
|
-
async openAppPreview(app, notebookPanel) {
|
|
6542
|
+
async openAppPreview(app, notebookPanel, createStreamlitAppPrompt = '') {
|
|
6423
6543
|
// If the user has a different app open, we first close that one
|
|
6424
6544
|
if (!this.isCurrentPreivewForCurrentNotebook(notebookPanel)) {
|
|
6425
6545
|
this.closeCurrentPreview();
|
|
6426
6546
|
}
|
|
6547
|
+
// Create and show placeholder panel immediately
|
|
6548
|
+
let placeholderWidget = null;
|
|
6549
|
+
if (!this.isCurrentPreivewForCurrentNotebook(notebookPanel)) {
|
|
6550
|
+
const placeholderContent = new _PlaceholderWidget__WEBPACK_IMPORTED_MODULE_5__.PlaceholderWidget();
|
|
6551
|
+
placeholderWidget = new _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.MainAreaWidget({ content: placeholderContent });
|
|
6552
|
+
placeholderWidget.title.label = (0,_utils__WEBPACK_IMPORTED_MODULE_6__.getAppPreviewNameFromNotebookPanel)(notebookPanel);
|
|
6553
|
+
placeholderWidget.title.closable = true;
|
|
6554
|
+
// Add placeholder to main area with split-right mode
|
|
6555
|
+
app.shell.add(placeholderWidget, 'main', {
|
|
6556
|
+
mode: 'split-right',
|
|
6557
|
+
ref: notebookPanel.id
|
|
6558
|
+
});
|
|
6559
|
+
}
|
|
6427
6560
|
// First save the notebook to ensure the app is up to date
|
|
6428
6561
|
await notebookPanel.context.save();
|
|
6429
6562
|
const notebookPath = notebookPanel.context.path;
|
|
6430
|
-
const notebookID = (0,
|
|
6431
|
-
const streamlitPreviewResponse = await (0,_utils__WEBPACK_IMPORTED_MODULE_6__.startStreamlitPreviewAndNotify)(notebookPath, notebookID);
|
|
6563
|
+
const notebookID = (0,_utils_notebookMetadata__WEBPACK_IMPORTED_MODULE_7__.getNotebookIDAndSetIfNonexistant)(notebookPanel);
|
|
6564
|
+
const streamlitPreviewResponse = await (0,_utils__WEBPACK_IMPORTED_MODULE_6__.startStreamlitPreviewAndNotify)(notebookPath, notebookID, false, createStreamlitAppPrompt);
|
|
6565
|
+
// Close placeholder before handling response (always dispose if it exists)
|
|
6566
|
+
if (placeholderWidget) {
|
|
6567
|
+
placeholderWidget.dispose();
|
|
6568
|
+
}
|
|
6432
6569
|
if (streamlitPreviewResponse.type === 'error') {
|
|
6433
6570
|
return streamlitPreviewResponse;
|
|
6434
6571
|
}
|
|
@@ -6462,9 +6599,9 @@ class StreamlitAppPreviewManager {
|
|
|
6462
6599
|
// Because we are parsing the notebook on the backend by reading
|
|
6463
6600
|
// the file system, it only sees the last saved version of the notebook.
|
|
6464
6601
|
await notebookPanel.context.save();
|
|
6465
|
-
const notebookID = (0,
|
|
6602
|
+
const notebookID = (0,_utils_notebookMetadata__WEBPACK_IMPORTED_MODULE_7__.getNotebookIDAndSetIfNonexistant)(notebookPanel);
|
|
6466
6603
|
// Update the app with the edit prompt
|
|
6467
|
-
const streamlitPreviewResponse = await (0,_utils__WEBPACK_IMPORTED_MODULE_6__.startStreamlitPreviewAndNotify)(notebookPanel.context.path, notebookID,
|
|
6604
|
+
const streamlitPreviewResponse = await (0,_utils__WEBPACK_IMPORTED_MODULE_6__.startStreamlitPreviewAndNotify)(notebookPanel.context.path, notebookID, false, // force_recreate
|
|
6468
6605
|
editPrompt, 'Editing Streamlit app...', 'Streamlit app updated successfully!');
|
|
6469
6606
|
return streamlitPreviewResponse;
|
|
6470
6607
|
}
|
|
@@ -6505,22 +6642,22 @@ class StreamlitAppPreviewManager {
|
|
|
6505
6642
|
createPreviewWidget(app, notebookPanel, appDeployService, appManagerService, previewData) {
|
|
6506
6643
|
const iframeWidget = new IFrameWidget(previewData.url);
|
|
6507
6644
|
// Log that the preview is open
|
|
6508
|
-
void (0,
|
|
6645
|
+
void (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_8__.logEvent)('opened_streamlit_app_preview');
|
|
6509
6646
|
// Create main area widget
|
|
6510
6647
|
const widget = new _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.MainAreaWidget({ content: iframeWidget });
|
|
6511
6648
|
const notebookPath = notebookPanel.context.path;
|
|
6512
|
-
const notebookID = (0,
|
|
6649
|
+
const notebookID = (0,_utils_notebookMetadata__WEBPACK_IMPORTED_MODULE_7__.getNotebookIDAndSetIfNonexistant)(notebookPanel);
|
|
6513
6650
|
widget.title.label = (0,_utils__WEBPACK_IMPORTED_MODULE_6__.getAppPreviewNameFromNotebookPanel)(notebookPanel);
|
|
6514
6651
|
widget.title.closable = true;
|
|
6515
6652
|
// Create toolbar buttons
|
|
6516
6653
|
const editAppButton = new _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.ToolbarButton({
|
|
6517
6654
|
className: 'text-button-mito-ai button-base button-small jp-ToolbarButton mito-deploy-button',
|
|
6518
6655
|
onClick: () => {
|
|
6519
|
-
(0,
|
|
6656
|
+
(0,_UpdateAppDropdown__WEBPACK_IMPORTED_MODULE_9__.showUpdateAppDropdown)(editAppButton.node, notebookPanel);
|
|
6520
6657
|
},
|
|
6521
6658
|
tooltip: 'Edit Streamlit App',
|
|
6522
6659
|
label: 'Edit App',
|
|
6523
|
-
icon:
|
|
6660
|
+
icon: _icons__WEBPACK_IMPORTED_MODULE_10__.EditLabIcon,
|
|
6524
6661
|
iconClass: 'mito-ai-deploy-icon'
|
|
6525
6662
|
});
|
|
6526
6663
|
const recreateAppButton = new _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.ToolbarButton({
|
|
@@ -6530,30 +6667,30 @@ class StreamlitAppPreviewManager {
|
|
|
6530
6667
|
},
|
|
6531
6668
|
tooltip: 'Recreate new App from scratch based on the current state of the notebook',
|
|
6532
6669
|
label: 'Recreate App',
|
|
6533
|
-
icon:
|
|
6670
|
+
icon: _icons__WEBPACK_IMPORTED_MODULE_10__.ResetCircleLabIcon,
|
|
6534
6671
|
iconClass: 'mito-ai-deploy-icon'
|
|
6535
6672
|
});
|
|
6536
6673
|
const deployButton = new _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.ToolbarButton({
|
|
6537
6674
|
className: 'text-button-mito-ai button-base button-small jp-ToolbarButton mito-deploy-button',
|
|
6538
6675
|
onClick: () => {
|
|
6539
|
-
void (0,
|
|
6676
|
+
void (0,_AppDeploy_DeployStreamlitApp__WEBPACK_IMPORTED_MODULE_11__.deployStreamlitApp)(notebookPanel, appDeployService, appManagerService);
|
|
6540
6677
|
},
|
|
6541
6678
|
tooltip: 'Deploy Streamlit App',
|
|
6542
6679
|
label: 'Deploy App',
|
|
6543
|
-
icon:
|
|
6680
|
+
icon: _icons__WEBPACK_IMPORTED_MODULE_10__.DeployLabIcon,
|
|
6544
6681
|
iconClass: 'mito-ai-deploy-icon'
|
|
6545
6682
|
});
|
|
6546
6683
|
// Insert the buttons into the toolbar
|
|
6547
6684
|
widget.toolbar.insertAfter('spacer', 'edit-app-button', editAppButton);
|
|
6548
6685
|
widget.toolbar.insertAfter('edit-app-button', 'recreate-app-button', recreateAppButton);
|
|
6549
|
-
if (app.commands.hasCommand(
|
|
6686
|
+
if (app.commands.hasCommand(_commands__WEBPACK_IMPORTED_MODULE_12__.COMMAND_MITO_AI_BETA_MODE_ENABLED)) {
|
|
6550
6687
|
widget.toolbar.insertAfter('recreate-app-button', 'deploy-app-button', deployButton);
|
|
6551
6688
|
}
|
|
6552
6689
|
// Handle widget disposal
|
|
6553
6690
|
widget.disposed.connect(() => {
|
|
6554
6691
|
console.log('Widget disposed, stopping preview');
|
|
6555
6692
|
if (previewData) {
|
|
6556
|
-
void (0,
|
|
6693
|
+
void (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_8__.stopStreamlitPreview)(previewData.id);
|
|
6557
6694
|
}
|
|
6558
6695
|
// Clear our reference when the widget is disposed
|
|
6559
6696
|
if (this.currentPreview === widget) {
|
|
@@ -6569,14 +6706,14 @@ class StreamlitAppPreviewManager {
|
|
|
6569
6706
|
const StreamlitPreviewPlugin = {
|
|
6570
6707
|
id: 'mito-ai:streamlit-preview',
|
|
6571
6708
|
autoStart: true,
|
|
6572
|
-
requires: [_jupyterlab_notebook__WEBPACK_IMPORTED_MODULE_0__.INotebookTracker, _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.ICommandPalette,
|
|
6709
|
+
requires: [_jupyterlab_notebook__WEBPACK_IMPORTED_MODULE_0__.INotebookTracker, _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.ICommandPalette, _AppDeploy_AppDeployPlugin__WEBPACK_IMPORTED_MODULE_13__.IAppDeployService, _AppManager_ManageAppsPlugin__WEBPACK_IMPORTED_MODULE_14__.IAppManagerService],
|
|
6573
6710
|
provides: IStreamlitPreviewManager,
|
|
6574
6711
|
activate: (app, notebookTracker, palette, appDeployService, appManagerService) => {
|
|
6575
6712
|
console.log('mito-ai: StreamlitPreviewPlugin activated');
|
|
6576
6713
|
// Create the service instance
|
|
6577
6714
|
const streamlitPreviewManager = new StreamlitAppPreviewManager(appDeployService, appManagerService);
|
|
6578
6715
|
// Add command to command palette
|
|
6579
|
-
app.commands.addCommand(
|
|
6716
|
+
app.commands.addCommand(_commands__WEBPACK_IMPORTED_MODULE_12__.COMMAND_MITO_AI_PREVIEW_AS_STREAMLIT, {
|
|
6580
6717
|
label: 'Preview as Streamlit',
|
|
6581
6718
|
caption: 'Convert current notebook to Streamlit app and preview it',
|
|
6582
6719
|
execute: async () => {
|
|
@@ -6592,7 +6729,7 @@ const StreamlitPreviewPlugin = {
|
|
|
6592
6729
|
});
|
|
6593
6730
|
// Add to command palette
|
|
6594
6731
|
palette.addItem({
|
|
6595
|
-
command:
|
|
6732
|
+
command: _commands__WEBPACK_IMPORTED_MODULE_12__.COMMAND_MITO_AI_PREVIEW_AS_STREAMLIT,
|
|
6596
6733
|
category: 'Mito AI'
|
|
6597
6734
|
});
|
|
6598
6735
|
// Return the service so other plugins can use it
|
|
@@ -6728,7 +6865,8 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
6728
6865
|
|
|
6729
6866
|
const startStreamlitPreviewAndNotify = async (notebookPath, notebookID, force_recreate = false, edit_prompt = '', start_notification_message = 'Building App Preview...', success_notification_message = 'Streamlit preview started successfully!') => {
|
|
6730
6867
|
const notificationId = _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.Notification.emit(start_notification_message, 'in-progress', { autoClose: false });
|
|
6731
|
-
|
|
6868
|
+
// TODO: I can have one function for creating new streamlit app and another function for editing a streamlit app
|
|
6869
|
+
const previewData = await (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_2__.startStreamlitAppPreview)(notebookPath, notebookID, force_recreate, edit_prompt);
|
|
6732
6870
|
if (previewData.type === 'success') {
|
|
6733
6871
|
// Update notification to success
|
|
6734
6872
|
_jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.Notification.update({
|
|
@@ -6760,7 +6898,7 @@ async function showRecreateAppConfirmation(notebookPath, notebookID) {
|
|
|
6760
6898
|
defaultButton: 1
|
|
6761
6899
|
});
|
|
6762
6900
|
if (result.button.accept) {
|
|
6763
|
-
void startStreamlitPreviewAndNotify(notebookPath, notebookID, true,
|
|
6901
|
+
void startStreamlitPreviewAndNotify(notebookPath, notebookID, true, '', 'Recreating app from scratch...', 'App recreated successfully!');
|
|
6764
6902
|
}
|
|
6765
6903
|
}
|
|
6766
6904
|
const getAppPreviewNameFromNotebookPanel = (notebookPanel) => {
|
|
@@ -10279,9 +10417,13 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
10279
10417
|
/* harmony export */ });
|
|
10280
10418
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
10281
10419
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
10282
|
-
/* harmony import */ var
|
|
10283
|
-
/* harmony import */ var
|
|
10284
|
-
/* harmony import */ var
|
|
10420
|
+
/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ "webpack/sharing/consume/default/react-dom");
|
|
10421
|
+
/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_1__);
|
|
10422
|
+
/* harmony import */ var _style_ModelSelector_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../style/ModelSelector.css */ "./style/ModelSelector.css");
|
|
10423
|
+
/* harmony import */ var _icons_NucleausIcon__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../icons/NucleausIcon */ "./lib/icons/NucleausIcon.js");
|
|
10424
|
+
/* harmony import */ var _icons_BrainIcon__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../icons/BrainIcon */ "./lib/icons/BrainIcon.js");
|
|
10425
|
+
/* harmony import */ var _icons_LightningIcon__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../icons/LightningIcon */ "./lib/icons/LightningIcon.js");
|
|
10426
|
+
/* harmony import */ var _utils_models__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/models */ "./lib/utils/models.js");
|
|
10285
10427
|
/*
|
|
10286
10428
|
* Copyright (c) Saga Inc.
|
|
10287
10429
|
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
@@ -10290,18 +10432,94 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
10290
10432
|
|
|
10291
10433
|
|
|
10292
10434
|
|
|
10435
|
+
|
|
10436
|
+
|
|
10437
|
+
|
|
10293
10438
|
const MODEL_MAPPINGS = [
|
|
10294
|
-
{
|
|
10295
|
-
|
|
10296
|
-
|
|
10297
|
-
|
|
10439
|
+
{
|
|
10440
|
+
displayName: 'GPT 4.1',
|
|
10441
|
+
fullName: 'gpt-4.1',
|
|
10442
|
+
type: 'smart',
|
|
10443
|
+
goodFor: [
|
|
10444
|
+
'Complex data analysis',
|
|
10445
|
+
'Advanced debugging',
|
|
10446
|
+
'Statistical analysis and modeling',
|
|
10447
|
+
'Multi-step data workflows'
|
|
10448
|
+
],
|
|
10449
|
+
provider: 'OpenAI',
|
|
10450
|
+
tokenLimit: '1M',
|
|
10451
|
+
speed: 'Medium',
|
|
10452
|
+
complexityHandling: 'High'
|
|
10453
|
+
},
|
|
10454
|
+
{
|
|
10455
|
+
displayName: _utils_models__WEBPACK_IMPORTED_MODULE_3__.CLAUDE_HAIKU_DISPLAY_NAME,
|
|
10456
|
+
fullName: _utils_models__WEBPACK_IMPORTED_MODULE_3__.CLAUDE_HAIKU_MODEL_NAME,
|
|
10457
|
+
type: 'fast',
|
|
10458
|
+
goodFor: [
|
|
10459
|
+
'Quick data exploration',
|
|
10460
|
+
'Pandas operations',
|
|
10461
|
+
'Basic data cleaning',
|
|
10462
|
+
'Fast code iterations'
|
|
10463
|
+
],
|
|
10464
|
+
provider: 'Anthropic',
|
|
10465
|
+
tokenLimit: '200K',
|
|
10466
|
+
speed: 'Fast',
|
|
10467
|
+
complexityHandling: 'Medium'
|
|
10468
|
+
},
|
|
10469
|
+
{
|
|
10470
|
+
displayName: _utils_models__WEBPACK_IMPORTED_MODULE_3__.CLAUDE_SONNET_DISPLAY_NAME,
|
|
10471
|
+
fullName: _utils_models__WEBPACK_IMPORTED_MODULE_3__.CLAUDE_SONNET_MODEL_NAME,
|
|
10472
|
+
type: 'smart',
|
|
10473
|
+
goodFor: [
|
|
10474
|
+
'Complex data analysis',
|
|
10475
|
+
'Advanced debugging',
|
|
10476
|
+
'Statistical analysis and modeling',
|
|
10477
|
+
'Multi-step data workflows'
|
|
10478
|
+
],
|
|
10479
|
+
provider: 'Anthropic',
|
|
10480
|
+
tokenLimit: '1M',
|
|
10481
|
+
speed: 'Medium',
|
|
10482
|
+
complexityHandling: 'High'
|
|
10483
|
+
},
|
|
10484
|
+
{
|
|
10485
|
+
displayName: 'Gemini 2.5 Pro',
|
|
10486
|
+
fullName: 'gemini-2.5-pro',
|
|
10487
|
+
type: 'smart',
|
|
10488
|
+
goodFor: [
|
|
10489
|
+
'Complex data analysis',
|
|
10490
|
+
'Advanced debugging',
|
|
10491
|
+
'Statistical analysis and modeling',
|
|
10492
|
+
'Multi-step data workflows'
|
|
10493
|
+
],
|
|
10494
|
+
provider: 'Google',
|
|
10495
|
+
tokenLimit: '1M',
|
|
10496
|
+
speed: 'Medium',
|
|
10497
|
+
complexityHandling: 'High'
|
|
10498
|
+
},
|
|
10499
|
+
{
|
|
10500
|
+
displayName: 'Gemini 3 Pro',
|
|
10501
|
+
fullName: 'gemini-3-pro-preview',
|
|
10502
|
+
type: 'smart',
|
|
10503
|
+
goodFor: [
|
|
10504
|
+
'Most complex data analysis',
|
|
10505
|
+
'Advanced debugging',
|
|
10506
|
+
'Statistical analysis and modeling',
|
|
10507
|
+
'Multi-step data workflows'
|
|
10508
|
+
],
|
|
10509
|
+
provider: 'Google',
|
|
10510
|
+
tokenLimit: '1M',
|
|
10511
|
+
speed: 'Slow',
|
|
10512
|
+
complexityHandling: 'High'
|
|
10513
|
+
}
|
|
10298
10514
|
];
|
|
10299
10515
|
const ALL_MODEL_DISPLAY_NAMES = MODEL_MAPPINGS.map(mapping => mapping.displayName);
|
|
10300
10516
|
// Maximum length for displayed model name before truncating
|
|
10301
|
-
const DEFAULT_MODEL =
|
|
10517
|
+
const DEFAULT_MODEL = _utils_models__WEBPACK_IMPORTED_MODULE_3__.CLAUDE_SONNET_DISPLAY_NAME;
|
|
10302
10518
|
const ModelSelector = ({ onConfigChange }) => {
|
|
10303
10519
|
const [selectedModel, setSelectedModel] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(DEFAULT_MODEL);
|
|
10304
10520
|
const [isOpen, setIsOpen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
|
|
10521
|
+
const [hoveredModel, setHoveredModel] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);
|
|
10522
|
+
const dropdownRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
|
|
10305
10523
|
// Load config from localStorage on component mount and notify parent
|
|
10306
10524
|
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
|
|
10307
10525
|
var _a;
|
|
@@ -10354,17 +10572,60 @@ const ModelSelector = ({ onConfigChange }) => {
|
|
|
10354
10572
|
document.removeEventListener('mousedown', handleClickOutside);
|
|
10355
10573
|
};
|
|
10356
10574
|
}, []);
|
|
10575
|
+
// Set CSS custom properties for tooltip positioning
|
|
10576
|
+
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
|
|
10577
|
+
if (isOpen && dropdownRef.current) {
|
|
10578
|
+
const rect = dropdownRef.current.getBoundingClientRect();
|
|
10579
|
+
// Align bottom of tooltip with bottom of dropdown (which is at rect.top)
|
|
10580
|
+
// Tooltip height is approximately 180px
|
|
10581
|
+
const tooltipHeight = 180;
|
|
10582
|
+
const tooltipBottom = rect.top;
|
|
10583
|
+
const tooltipTop = tooltipBottom - tooltipHeight;
|
|
10584
|
+
document.documentElement.style.setProperty('--tooltip-top', `${tooltipTop - 32}px`);
|
|
10585
|
+
document.documentElement.style.setProperty('--tooltip-left', `${rect.left + 160}px`);
|
|
10586
|
+
}
|
|
10587
|
+
}, [isOpen]);
|
|
10357
10588
|
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "model-selector" },
|
|
10358
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: `model-selector-dropdown`, onClick: () => setIsOpen(!isOpen),
|
|
10589
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { ref: dropdownRef, className: `model-selector-dropdown`, onClick: () => setIsOpen(!isOpen), "data-testid": "model-selector" },
|
|
10359
10590
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "selected-model" },
|
|
10360
10591
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "model-icon" },
|
|
10361
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
10592
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_NucleausIcon__WEBPACK_IMPORTED_MODULE_4__["default"], { height: 10, width: 10 })),
|
|
10362
10593
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "model-name" }, selectedModel),
|
|
10363
10594
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "dropdown-arrow" }, "\u25BC")),
|
|
10364
|
-
isOpen && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: `model-options dropup`, style: { minWidth: '150px' }
|
|
10365
|
-
|
|
10366
|
-
|
|
10367
|
-
|
|
10595
|
+
isOpen && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: `model-options dropup`, style: { minWidth: '150px' }, onMouseLeave: () => setHoveredModel(null) }, ALL_MODEL_DISPLAY_NAMES.map(model => {
|
|
10596
|
+
const modelMapping = MODEL_MAPPINGS.find(m => m.displayName === model);
|
|
10597
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { key: model, className: `model-option ${model === selectedModel ? 'selected' : ''}`, onClick: (e) => {
|
|
10598
|
+
e.stopPropagation();
|
|
10599
|
+
handleModelChange(model);
|
|
10600
|
+
}, onMouseEnter: () => setHoveredModel(modelMapping || null), "data-testid": "model-option" },
|
|
10601
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "model-option-name" }, model),
|
|
10602
|
+
(modelMapping === null || modelMapping === void 0 ? void 0 : modelMapping.type) === 'smart' && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "model-type-icon" },
|
|
10603
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_BrainIcon__WEBPACK_IMPORTED_MODULE_5__["default"], { height: 12, width: 12 }))),
|
|
10604
|
+
(modelMapping === null || modelMapping === void 0 ? void 0 : modelMapping.type) === 'fast' && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "model-type-icon" },
|
|
10605
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_LightningIcon__WEBPACK_IMPORTED_MODULE_6__["default"], { height: 12, width: 12 })))));
|
|
10606
|
+
})))),
|
|
10607
|
+
isOpen && hoveredModel && react_dom__WEBPACK_IMPORTED_MODULE_1___default().createPortal(react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "model-tooltip" },
|
|
10608
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "model-tooltip-content" },
|
|
10609
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "model-tooltip-header" },
|
|
10610
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "model-tooltip-title-row" },
|
|
10611
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "model-tooltip-title-icon" }, hoveredModel.type === 'smart' ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_BrainIcon__WEBPACK_IMPORTED_MODULE_5__["default"], { height: 16, width: 16 })) : (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_LightningIcon__WEBPACK_IMPORTED_MODULE_6__["default"], { height: 16, width: 16 }))),
|
|
10612
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "model-tooltip-title" }, hoveredModel.displayName)),
|
|
10613
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "model-tooltip-metadata" },
|
|
10614
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "model-tooltip-metadata-item" },
|
|
10615
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "model-tooltip-metadata-label" }, "Provider:"),
|
|
10616
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "model-tooltip-metadata-value" }, hoveredModel.provider)),
|
|
10617
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "model-tooltip-metadata-item" },
|
|
10618
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "model-tooltip-metadata-label" }, "Tokens:"),
|
|
10619
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "model-tooltip-metadata-value" }, hoveredModel.tokenLimit)),
|
|
10620
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "model-tooltip-metadata-item" },
|
|
10621
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "model-tooltip-metadata-label" }, "Speed:"),
|
|
10622
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "model-tooltip-metadata-value" }, hoveredModel.speed)),
|
|
10623
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "model-tooltip-metadata-item" },
|
|
10624
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "model-tooltip-metadata-label" }, "Complexity:"),
|
|
10625
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "model-tooltip-metadata-value" }, hoveredModel.complexityHandling)))),
|
|
10626
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "model-tooltip-section" },
|
|
10627
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "model-tooltip-section-label" }, "Good For:"),
|
|
10628
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("ul", { className: "model-tooltip-bullet-list" }, hoveredModel.goodFor.map((item, index) => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", { key: index, className: "model-tooltip-bullet-item" }, item))))))), document.body)));
|
|
10368
10629
|
};
|
|
10369
10630
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ModelSelector);
|
|
10370
10631
|
|
|
@@ -10750,6 +11011,31 @@ const AppIcon = () => {
|
|
|
10750
11011
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AppIcon);
|
|
10751
11012
|
|
|
10752
11013
|
|
|
11014
|
+
/***/ }),
|
|
11015
|
+
|
|
11016
|
+
/***/ "./lib/icons/BrainIcon.js":
|
|
11017
|
+
/*!********************************!*\
|
|
11018
|
+
!*** ./lib/icons/BrainIcon.js ***!
|
|
11019
|
+
\********************************/
|
|
11020
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
11021
|
+
|
|
11022
|
+
__webpack_require__.r(__webpack_exports__);
|
|
11023
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
11024
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
11025
|
+
/* harmony export */ });
|
|
11026
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
11027
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
11028
|
+
/*
|
|
11029
|
+
* Copyright (c) Saga Inc.
|
|
11030
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
11031
|
+
*/
|
|
11032
|
+
|
|
11033
|
+
const BrainIcon = ({ height = 14, width = 14, fill = 'currentColor' }) => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("svg", { width: width, height: height, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", stroke: fill, strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" },
|
|
11034
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("path", { d: "M12 5a3 3 0 1 0-5.997.142 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588 4 4 0 0 0 7.636 2.106 3.2 3.2 0 0 0 .164-.546c.628-.5 1.2-1.1 1.7-1.8a3.2 3.2 0 0 0 .164-.546 4 4 0 0 0 7.636-2.106 4 4 0 0 0 .556-6.588 4 4 0 0 0-2.526-5.77A3 3 0 1 0 12 5Z" }),
|
|
11035
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("path", { d: "M8 12h.01M12 12h.01M16 12h.01M8 8h.01M12 8h.01M16 8h.01M8 16h.01M12 16h.01M16 16h.01" })));
|
|
11036
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BrainIcon);
|
|
11037
|
+
|
|
11038
|
+
|
|
10753
11039
|
/***/ }),
|
|
10754
11040
|
|
|
10755
11041
|
/***/ "./lib/icons/CodeIcon.js":
|
|
@@ -10877,6 +11163,30 @@ const ExpandIcon = ({ isExpanded }) => (react__WEBPACK_IMPORTED_MODULE_0___defau
|
|
|
10877
11163
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ExpandIcon);
|
|
10878
11164
|
|
|
10879
11165
|
|
|
11166
|
+
/***/ }),
|
|
11167
|
+
|
|
11168
|
+
/***/ "./lib/icons/LightningIcon.js":
|
|
11169
|
+
/*!************************************!*\
|
|
11170
|
+
!*** ./lib/icons/LightningIcon.js ***!
|
|
11171
|
+
\************************************/
|
|
11172
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
11173
|
+
|
|
11174
|
+
__webpack_require__.r(__webpack_exports__);
|
|
11175
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
11176
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
11177
|
+
/* harmony export */ });
|
|
11178
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
11179
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
11180
|
+
/*
|
|
11181
|
+
* Copyright (c) Saga Inc.
|
|
11182
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
11183
|
+
*/
|
|
11184
|
+
|
|
11185
|
+
const LightningIcon = ({ height = 14, width = 14, fill = 'currentColor' }) => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("svg", { width: width, height: height, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", stroke: fill, strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" },
|
|
11186
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("path", { d: "M13 2L3 14h9l-1 8 10-12h-9l1-8z" })));
|
|
11187
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (LightningIcon);
|
|
11188
|
+
|
|
11189
|
+
|
|
10880
11190
|
/***/ }),
|
|
10881
11191
|
|
|
10882
11192
|
/***/ "./lib/icons/MagicWand.js":
|
|
@@ -11351,7 +11661,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
11351
11661
|
/* harmony export */ logEvent: () => (/* binding */ logEvent),
|
|
11352
11662
|
/* harmony export */ setRule: () => (/* binding */ setRule),
|
|
11353
11663
|
/* harmony export */ setUserKey: () => (/* binding */ setUserKey),
|
|
11354
|
-
/* harmony export */
|
|
11664
|
+
/* harmony export */ startStreamlitAppPreview: () => (/* binding */ startStreamlitAppPreview),
|
|
11355
11665
|
/* harmony export */ stopStreamlitPreview: () => (/* binding */ stopStreamlitPreview),
|
|
11356
11666
|
/* harmony export */ updateSettings: () => (/* binding */ updateSettings)
|
|
11357
11667
|
/* harmony export */ });
|
|
@@ -11448,14 +11758,14 @@ const getDatabaseConnections = async () => {
|
|
|
11448
11758
|
STREAMLIT PREVIEW ENDPOINTS
|
|
11449
11759
|
|
|
11450
11760
|
************************************/
|
|
11451
|
-
const
|
|
11761
|
+
const startStreamlitAppPreview = async (notebookPath, notebookID, force_recreate = false, streamlit_app_prompt = '') => {
|
|
11452
11762
|
const response = await (0,_utils__WEBPACK_IMPORTED_MODULE_0__.requestAPI)('streamlit-preview', {
|
|
11453
11763
|
method: 'POST',
|
|
11454
11764
|
body: JSON.stringify({
|
|
11455
11765
|
notebook_path: notebookPath,
|
|
11456
11766
|
notebook_id: notebookID,
|
|
11457
11767
|
force_recreate: force_recreate,
|
|
11458
|
-
|
|
11768
|
+
streamlit_app_prompt: streamlit_app_prompt
|
|
11459
11769
|
})
|
|
11460
11770
|
});
|
|
11461
11771
|
if (response.error) {
|
|
@@ -12726,6 +13036,8 @@ const uploadFileToBackend = async (file, notebookTracker, onFileUploaded) => {
|
|
|
12726
13036
|
|
|
12727
13037
|
__webpack_require__.r(__webpack_exports__);
|
|
12728
13038
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
13039
|
+
/* harmony export */ CLAUDE_HAIKU_DISPLAY_NAME: () => (/* binding */ CLAUDE_HAIKU_DISPLAY_NAME),
|
|
13040
|
+
/* harmony export */ CLAUDE_HAIKU_MODEL_NAME: () => (/* binding */ CLAUDE_HAIKU_MODEL_NAME),
|
|
12729
13041
|
/* harmony export */ CLAUDE_SONNET_DISPLAY_NAME: () => (/* binding */ CLAUDE_SONNET_DISPLAY_NAME),
|
|
12730
13042
|
/* harmony export */ CLAUDE_SONNET_MODEL_NAME: () => (/* binding */ CLAUDE_SONNET_MODEL_NAME),
|
|
12731
13043
|
/* harmony export */ GPT_4_1_DISPLAY_NAME: () => (/* binding */ GPT_4_1_DISPLAY_NAME),
|
|
@@ -12735,8 +13047,10 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
12735
13047
|
* Copyright (c) Saga Inc.
|
|
12736
13048
|
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
12737
13049
|
*/
|
|
12738
|
-
const CLAUDE_SONNET_DISPLAY_NAME = 'Claude 4.5
|
|
13050
|
+
const CLAUDE_SONNET_DISPLAY_NAME = 'Claude Sonnet 4.5';
|
|
12739
13051
|
const CLAUDE_SONNET_MODEL_NAME = 'claude-sonnet-4-5-20250929';
|
|
13052
|
+
const CLAUDE_HAIKU_DISPLAY_NAME = 'Claude Haiku 4.5';
|
|
13053
|
+
const CLAUDE_HAIKU_MODEL_NAME = 'claude-haiku-4-5-20251001';
|
|
12740
13054
|
const GPT_4_1_DISPLAY_NAME = 'GPT 4.1';
|
|
12741
13055
|
const GPT_4_1_MODEL_NAME = 'gpt-4.1';
|
|
12742
13056
|
|
|
@@ -14920,16 +15234,28 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
14920
15234
|
|
|
14921
15235
|
/* apps-list.css */
|
|
14922
15236
|
.apps-list-container {
|
|
14923
|
-
|
|
15237
|
+
display: flex;
|
|
15238
|
+
flex-direction: column;
|
|
15239
|
+
height: 100%;
|
|
14924
15240
|
font-size: 13px;
|
|
14925
15241
|
font-family: var(--jp-ui-font-family);
|
|
15242
|
+
overflow: hidden;
|
|
14926
15243
|
}
|
|
14927
15244
|
|
|
14928
15245
|
.apps-list-header {
|
|
14929
15246
|
display: flex;
|
|
14930
15247
|
justify-content: space-between;
|
|
14931
15248
|
align-items: center;
|
|
14932
|
-
|
|
15249
|
+
padding: 16px;
|
|
15250
|
+
flex-shrink: 0;
|
|
15251
|
+
border-bottom: 1px solid var(--jp-border-color2);
|
|
15252
|
+
}
|
|
15253
|
+
|
|
15254
|
+
.apps-list-content {
|
|
15255
|
+
flex: 1;
|
|
15256
|
+
overflow-y: auto;
|
|
15257
|
+
padding: 16px;
|
|
15258
|
+
min-height: 0;
|
|
14933
15259
|
}
|
|
14934
15260
|
|
|
14935
15261
|
.apps-list-title {
|
|
@@ -14989,6 +15315,30 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
14989
15315
|
margin-top: 8px;
|
|
14990
15316
|
}
|
|
14991
15317
|
|
|
15318
|
+
.apps-list-auth-message {
|
|
15319
|
+
color: var(--jp-ui-font-color1);
|
|
15320
|
+
background-color: var(--jp-layout-color0);
|
|
15321
|
+
border: 1px solid var(--jp-border-color2);
|
|
15322
|
+
border-radius: 4px;
|
|
15323
|
+
padding: 24px 16px;
|
|
15324
|
+
text-align: center;
|
|
15325
|
+
display: flex;
|
|
15326
|
+
flex-direction: column;
|
|
15327
|
+
align-items: center;
|
|
15328
|
+
gap: 12px;
|
|
15329
|
+
}
|
|
15330
|
+
|
|
15331
|
+
.apps-list-auth-text {
|
|
15332
|
+
font-size: 14px;
|
|
15333
|
+
font-weight: bold;
|
|
15334
|
+
font-family: var(--jp-ui-font-family);
|
|
15335
|
+
}
|
|
15336
|
+
|
|
15337
|
+
.apps-list-auth-login-button {
|
|
15338
|
+
font-size: 13px;
|
|
15339
|
+
min-width: 96px;
|
|
15340
|
+
}
|
|
15341
|
+
|
|
14992
15342
|
.apps-list-empty {
|
|
14993
15343
|
color: var(--jp-ui-font-color2);
|
|
14994
15344
|
text-align: center;
|
|
@@ -15078,7 +15428,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
15078
15428
|
.app-item-copy-button:hover {
|
|
15079
15429
|
background-color: var(--jp-layout-color2);
|
|
15080
15430
|
}
|
|
15081
|
-
`, "",{"version":3,"sources":["webpack://./style/AppsList.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF,kBAAkB;AAClB;EACE,aAAa;EACb,eAAe;EACf,qCAAqC;
|
|
15431
|
+
`, "",{"version":3,"sources":["webpack://./style/AppsList.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF,kBAAkB;AAClB;EACE,aAAa;EACb,sBAAsB;EACtB,YAAY;EACZ,eAAe;EACf,qCAAqC;EACrC,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,8BAA8B;EAC9B,mBAAmB;EACnB,aAAa;EACb,cAAc;EACd,gDAAgD;AAClD;;AAEA;EACE,OAAO;EACP,gBAAgB;EAChB,aAAa;EACb,aAAa;AACf;;AAEA;EACE,SAAS;EACT,eAAe;EACf,iBAAiB;EACjB,+BAA+B;AACjC;;AAEA;EACE,aAAa;EACb,QAAQ;AACV;;AAEA;EACE,gBAAgB;EAChB,eAAe;EACf,6BAA6B;EAC7B,+BAA+B;EAC/B,yCAAyC;EACzC,kBAAkB;EAClB,eAAe;EACf,mBAAmB;EACnB,sCAAsC;AACxC;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,wCAAwC;EACxC,YAAY;EACZ,YAAY;AACd;;AAEA;EACE,+BAA+B;EAC/B,kBAAkB;EAClB,eAAe;AACjB;;AAEA;EACE,cAAc;EACd,kBAAkB;EAClB,eAAe;EACf,yCAAyC;EACzC,yBAAyB;EACzB,kBAAkB;AACpB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,+BAA+B;EAC/B,yCAAyC;EACzC,yCAAyC;EACzC,kBAAkB;EAClB,kBAAkB;EAClB,kBAAkB;EAClB,aAAa;EACb,sBAAsB;EACtB,mBAAmB;EACnB,SAAS;AACX;;AAEA;EACE,eAAe;EACf,iBAAiB;EACjB,qCAAqC;AACvC;;AAEA;EACE,eAAe;EACf,eAAe;AACjB;;AAEA;EACE,+BAA+B;EAC/B,kBAAkB;EAClB,eAAe;AACjB;;AAEA;EACE,yCAAyC;EACzC,kBAAkB;EAClB,aAAa;EACb,kBAAkB;EAClB,yCAAyC;AAC3C;;AAEA;EACE,aAAa;EACb,8BAA8B;EAC9B,uBAAuB;EACvB,kBAAkB;AACpB;;AAEA;EACE,OAAO;AACT;;AAEA;EACE,iBAAiB;EACjB,+BAA+B;EAC/B,kBAAkB;AACpB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,kBAAkB;AACpB;;AAEA;EACE,qBAAqB;EACrB,UAAU;EACV,WAAW;EACX,kBAAkB;EAClB,iBAAiB;AACnB;;AAEA;EACE,+BAA+B;EAC/B,eAAe;AACjB;;AAEA;EACE,+BAA+B;EAC/B,eAAe;AACjB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,yCAAyC;EACzC,yCAAyC;EACzC,kBAAkB;EAClB,gBAAgB;AAClB;;AAEA;EACE,OAAO;EACP,+BAA+B;EAC/B,eAAe;EACf,gBAAgB;EAChB,uBAAuB;EACvB,mBAAmB;EACnB,uCAAuC;AACzC;;AAEA;EACE,YAAY;EACZ,uBAAuB;EACvB,eAAe;EACf,YAAY;EACZ,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,gBAAgB;EAChB,kBAAkB;AACpB;;AAEA;EACE,yCAAyC;AAC3C","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n/* apps-list.css */\n.apps-list-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n font-size: 13px;\n font-family: var(--jp-ui-font-family);\n overflow: hidden;\n}\n\n.apps-list-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px;\n flex-shrink: 0;\n border-bottom: 1px solid var(--jp-border-color2);\n}\n\n.apps-list-content {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n min-height: 0;\n}\n\n.apps-list-title {\n margin: 0;\n font-size: 14px;\n font-weight: bold;\n color: var(--jp-ui-font-color1);\n}\n\n.apps-list-actions {\n display: flex;\n gap: 8px;\n}\n\n.apps-list-button {\n padding: 4px 8px;\n font-size: 11px;\n background-color: transparent;\n color: var(--jp-ui-font-color2);\n border: 1px solid var(--jp-border-color2);\n border-radius: 3px;\n cursor: pointer;\n font-weight: normal;\n transition: background-color 0.2s ease;\n}\n\n.apps-list-button:hover {\n background-color: var(--jp-layout-color2);\n}\n\n.apps-list-button:disabled {\n cursor: not-allowed;\n}\n\n.apps-list-button.primary {\n background-color: var(--jp-brand-color1);\n color: white;\n border: none;\n}\n\n.apps-list-loading {\n color: var(--jp-ui-font-color2);\n text-align: center;\n padding: 20px 0;\n}\n\n.apps-list-error {\n color: #f44336;\n text-align: center;\n padding: 20px 0;\n background-color: var(--jp-layout-color1);\n border: 1px solid #f44336;\n border-radius: 4px;\n}\n\n.apps-list-error-actions {\n margin-top: 8px;\n}\n\n.apps-list-auth-message {\n color: var(--jp-ui-font-color1);\n background-color: var(--jp-layout-color0);\n border: 1px solid var(--jp-border-color2);\n border-radius: 4px;\n padding: 24px 16px;\n text-align: center;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n}\n\n.apps-list-auth-text {\n font-size: 14px;\n font-weight: bold;\n font-family: var(--jp-ui-font-family);\n}\n\n.apps-list-auth-login-button {\n font-size: 13px;\n min-width: 96px;\n}\n\n.apps-list-empty {\n color: var(--jp-ui-font-color2);\n text-align: center;\n padding: 20px 0;\n}\n\n.app-item {\n border: 1px solid var(--jp-border-color1);\n border-radius: 4px;\n padding: 12px;\n margin-bottom: 8px;\n background-color: var(--jp-layout-color0);\n}\n\n.app-item-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 8px;\n}\n\n.app-item-content {\n flex: 1;\n}\n\n.app-item-name {\n font-weight: bold;\n color: var(--jp-ui-font-color1);\n margin-bottom: 4px;\n}\n\n.app-item-status-container {\n display: flex;\n align-items: center;\n margin-bottom: 4px;\n}\n\n.app-item-status-indicator {\n display: inline-block;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n margin-right: 6px;\n}\n\n.app-item-status-text {\n color: var(--jp-ui-font-color2);\n font-size: 12px;\n}\n\n.app-item-last-deployed {\n color: var(--jp-ui-font-color2);\n font-size: 11px;\n}\n\n.app-item-url-container {\n display: flex;\n align-items: center;\n background-color: var(--jp-layout-color1);\n border: 1px solid var(--jp-border-color2);\n border-radius: 3px;\n padding: 6px 8px;\n}\n\n.app-item-url {\n flex: 1;\n color: var(--jp-ui-font-color1);\n font-size: 11px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-family: var(--jp-code-font-family);\n}\n\n.app-item-copy-button {\n border: none;\n background: transparent;\n cursor: pointer;\n padding: 2px;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-left: 8px;\n border-radius: 2px;\n}\n\n.app-item-copy-button:hover {\n background-color: var(--jp-layout-color2);\n}\n"],"sourceRoot":""}]);
|
|
15082
15432
|
// Exports
|
|
15083
15433
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
15084
15434
|
|
|
@@ -15320,7 +15670,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
15320
15670
|
|
|
15321
15671
|
/* Tab styling for sign in/sign up tabs */
|
|
15322
15672
|
.modal-content .amplify-tabs__item {
|
|
15323
|
-
color: var(--
|
|
15673
|
+
color: var(--purple-500) !important;
|
|
15324
15674
|
border-bottom: 2px solid transparent !important;
|
|
15325
15675
|
}
|
|
15326
15676
|
|
|
@@ -15338,7 +15688,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
15338
15688
|
|
|
15339
15689
|
|
|
15340
15690
|
.modal-content .amplify-tabs__item:hover {
|
|
15341
|
-
color: var(--
|
|
15691
|
+
color: var(--purple-700) !important;
|
|
15342
15692
|
}
|
|
15343
15693
|
|
|
15344
15694
|
/* Override any default blue tab styling from Amplify */
|
|
@@ -15614,7 +15964,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
15614
15964
|
margin: 0;
|
|
15615
15965
|
font-family: var(--jp-ui-font-family);
|
|
15616
15966
|
font-style: italic;
|
|
15617
|
-
}`, "",{"version":3,"sources":["webpack://./style/AuthPopup.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/* Auth popup specific styling to integrate AWS Amplify with Mito theme */\n.modal-content .amplify-authenticator {\n --amplify-colors-font-primary: var(--jp-ui-font-color1);\n --amplify-colors-font-secondary: var(--jp-ui-font-color2);\n --amplify-colors-background-primary: var(--jp-layout-color0);\n --amplify-colors-background-secondary: var(--jp-layout-color1);\n --amplify-colors-border-primary: var(--jp-border-color1);\n --amplify-colors-brand-primary-10: var(--purple-700);\n --amplify-colors-brand-primary-80: var(--purple-500);\n --amplify-colors-brand-primary-90: var(--purple-400);\n --amplify-colors-brand-primary-100: var(--purple-300);\n --amplify-radii-small: 4px;\n --amplify-radii-medium: 4px;\n --amplify-space-small: 8px;\n --amplify-space-medium: 12px;\n --amplify-space-large: 16px;\n --amplify-font-sizes-small: 14px;\n --amplify-font-sizes-medium: 14px;\n \n /* Remove the blue top border on active tabs */\n --amplify-components-tabs-item-active-border-width: 0;\n --amplify-components-tabs-item-border-width: 0;\n \n /* Ensure active tab bottom border uses purple */\n --amplify-components-tabs-item-active-border-color: var(--purple-500);\n --amplify-components-tabs-item-active-color: var(--purple-700);\n}\n\n/* Ensure modal content has adequate width for auth form */\n.modal-content:has(.amplify-authenticator) {\n width: 480px;\n max-width: 90vw;\n min-width: 400px;\n}\n\n/* Style the authenticator container */\n.modal-content .amplify-authenticator__modal {\n background: transparent !important;\n box-shadow: none !important;\n border: none !important;\n}\n\n/* Constrain authenticator content within modal bounds */\n.modal-content .amplify-authenticator {\n width: 100% !important;\n max-width: 100% !important;\n overflow: hidden !important;\n}\n\n/* Specifically target the data-amplify-container to prevent overflow */\n.modal-content [data-amplify-container] {\n width: 100% !important;\n max-width: 100% !important;\n overflow: hidden !important;\n box-sizing: border-box !important;\n}\n\n\n\n/* Constrain the tabs container */\n.modal-content .amplify-tabs {\n width: 100% !important;\n max-width: 100% !important;\n overflow: hidden !important;\n}\n\n/* Ensure form fields don't overflow */\n.modal-content .amplify-field,\n.modal-content .amplify-field__group {\n width: 100% !important;\n max-width: 100% !important;\n box-sizing: border-box !important;\n}\n\n/* Align form elements with Mito styling */\n.modal-content .amplify-field__label {\n color: var(--jp-ui-font-color1) !important;\n font-weight: 500 !important;\n}\n\n.modal-content .amplify-input,\n.modal-content .amplify-select {\n background: var(--jp-layout-color0) !important;\n border: 1px solid var(--jp-border-color1) !important;\n color: var(--jp-ui-font-color1) !important;\n border-radius: 4px !important;\n}\n\n.modal-content .amplify-input:focus,\n.modal-content .amplify-select:focus {\n border-color: var(--purple-500) !important;\n box-shadow: 0 0 0 2px rgba(124, 58, 237, 0.1) !important;\n}\n\n\n\n/* Style Amplify buttons to match Mito theme */\n.modal-content .amplify-button--primary {\n background-color: var(--purple-400) !important;\n color: var(--purple-700) !important;\n border: none !important;\n border-radius: 4px !important;\n font-weight: 500 !important;\n padding: 8px 16px !important;\n width: 100% !important;\n max-width: 100% !important;\n box-sizing: border-box !important;\n}\n\n.modal-content .amplify-button--primary:hover {\n background-color: var(--purple-500) !important;\n}\n\n.modal-content .amplify-button--link {\n color: var(--purple-600) !important;\n text-decoration: none !important;\n}\n\n.modal-content .amplify-button--link:hover {\n color: var(--purple-700) !important;\n text-decoration: underline !important;\n}\n\n/* Error and success message styling */\n.modal-content .amplify-alert--error {\n background-color: var(--red-300) !important;\n color: var(--red-900) !important;\n border: 1px solid var(--red-400) !important;\n border-radius: 4px !important;\n}\n\n.modal-content .amplify-alert--info {\n background-color: var(--purple-300) !important;\n color: var(--purple-700) !important;\n border: 1px solid var(--purple-400) !important;\n border-radius: 4px !important;\n}\n\n/* Tab styling for sign in/sign up tabs */\n.modal-content .amplify-tabs__item {\n color: var(--jp-ui-font-color2) !important;\n border-bottom: 2px solid transparent !important;\n}\n\n.modal-content .amplify-tabs__item[data-state=\"active\"] {\n color: var(--purple-700) !important;\n border-bottom-color: var(--purple-500) !important;\n}\n\n/* Ensure inactive tabs don't have purple styling */\n.modal-content .amplify-tabs__item[data-state=\"inactive\"] {\n color: var(--jp-ui-font-color2) !important;\n border-bottom: 2px solid transparent !important;\n}\n\n\n\n.modal-content .amplify-tabs__item:hover {\n color: var(--jp-ui-font-color1) !important;\n}\n\n/* Override any default blue tab styling from Amplify */\n.modal-content .amplify-tabs__list {\n border-bottom: 1px solid var(--jp-border-color1) !important;\n}\n\n.modal-content .amplify-tabs__item[data-state=\"active\"]:after,\n.modal-content .amplify-tabs__item[aria-selected=\"true\"]:after {\n background-color: var(--purple-500) !important;\n border-color: var(--purple-500) !important;\n}\n\n/* Override any Amplify default blue colors */\n.modal-content .amplify-tabs [data-amplify-color-mode] .amplify-tabs__item[data-state=\"active\"] {\n color: var(--purple-700) !important;\n border-bottom-color: var(--purple-500) !important;\n}\n\n.modal-content .amplify-tabs [data-amplify-color-mode] .amplify-tabs__item[aria-selected=\"true\"] {\n color: var(--purple-700) !important;\n border-bottom-color: var(--purple-500) !important;\n}\n\n/* Additional selectors to ensure default active state on initial load */\n.modal-content .amplify-tabs__item[aria-selected=\"true\"] {\n color: var(--purple-700) !important;\n border-bottom: 2px solid var(--purple-500) !important;\n}\n\n\n\n/* Loading spinner colors */\n.modal-content .amplify-loader {\n border-top-color: var(--purple-500) !important;\n}\n\n/* Additional purple color overrides for any remaining blue elements */\n.modal-content .amplify-tabs__item[data-state=\"active\"] *,\n.modal-content .amplify-tabs__item[aria-selected=\"true\"] * {\n color: var(--purple-700) !important;\n}\n\n/* Override focus states to use purple */\n.modal-content .amplify-tabs__item:focus,\n.modal-content .amplify-tabs__item:focus-visible {\n border-bottom-color: var(--purple-500) !important;\n outline-color: var(--purple-500) !important;\n}\n\n/* Ensure any nested tab content uses purple theme */\n.modal-content [data-amplify-authenticator] [data-amplify-router] .amplify-tabs__item[data-state=\"active\"] {\n color: var(--purple-700) !important;\n border-bottom-color: var(--purple-500) !important;\n}\n\n/* Remove any top borders, outlines, or blue styling from tabs */\n.modal-content .amplify-tabs__item {\n border-top: none !important;\n border-left: none !important;\n border-right: none !important;\n outline: none !important;\n}\n\n.modal-content .amplify-tabs__item[data-state=\"active\"],\n.modal-content .amplify-tabs__item[aria-selected=\"true\"] {\n border-top: none !important;\n border-left: none !important;\n border-right: none !important;\n outline: none !important;\n box-shadow: none !important;\n}\n\n/* Remove any pseudo-element borders that might create blue lines */\n.modal-content .amplify-tabs__item:before,\n.modal-content .amplify-tabs__item:after,\n.modal-content .amplify-tabs__item[data-state=\"active\"]:before,\n.modal-content .amplify-tabs__item[aria-selected=\"true\"]:before {\n display: none !important;\n border: none !important;\n background: none !important;\n}\n\n\n\n/* Additional containment rules for better layout */\n.modal-content .amplify-authenticator * {\n box-sizing: border-box !important;\n}\n\n/* Prevent any Amplify containers from overflowing */\n.modal-content [data-amplify-authenticator],\n.modal-content [data-amplify-router],\n.modal-content [data-amplify-authenticator-signin],\n.modal-content [data-amplify-authenticator-signup] {\n width: 100% !important;\n max-width: 100% !important;\n overflow: hidden !important;\n box-sizing: border-box !important;\n}\n\n/* Remove any default margins or padding that might cause overflow */\n.modal-content [data-amplify-container] * {\n max-width: 100% !important;\n}\n\n/* Ensure modal content itself doesn't allow horizontal scroll */\n.modal-content:has(.amplify-authenticator) {\n overflow-x: hidden !important;\n}\n\n/* Target main Amplify containers but not inputs */\n.modal-content div[data-amplify-container] {\n width: 100% !important;\n max-width: 100% !important;\n box-sizing: border-box !important;\n}\n\n/* Ensure tab panels fit within bounds */\n.modal-content .amplify-tabs__panel {\n width: 100% !important;\n max-width: 100% !important;\n overflow: hidden !important;\n padding: 16px !important;\n}\n\n/* Ensure tab list doesn't overflow */\n.modal-content .amplify-tabs__list {\n width: 100% !important;\n max-width: 100% !important;\n display: flex !important;\n justify-content: space-around !important;\n}\n\n.modal-content .amplify-tabs__item {\n flex: 1 !important;\n text-align: center !important;\n max-width: 50% !important;\n}\n\n/* Add this to your AuthPopup.css file */\n\n/* Hide password requirements by default */\n.password-requirements {\n display: none;\n padding: 16px 20px;\n background-color: var(--jp-layout-color2);\n border-top: 1px solid var(--jp-border-color1);\n font-size: 13px;\n}\n\n/* Show password requirements when sign-up form is present */\n.modal-content:has([data-amplify-authenticator-signup]) .password-requirements {\n display: block;\n}\n\n/* Style the requirements content */\n.password-requirements p {\n margin: 0 0 8px 0;\n font-weight: bold;\n color: var(--jp-ui-font-color1);\n}\n\n.password-requirements ul {\n margin: 0;\n padding-left: 20px;\n color: var(--jp-ui-font-color2);\n font-size: 12px;\n}\n\n/* Success message styling */\n.auth-success-message {\n padding: 32px 24px;\n text-align: center;\n background: var(--jp-layout-color0);\n border-radius: 8px;\n}\n\n.success-icon {\n margin-bottom: 20px;\n display: flex;\n justify-content: center;\n}\n\n.success-title {\n color: var(--jp-ui-font-color1);\n font-size: 24px;\n font-weight: 600;\n margin: 0 0 12px 0;\n font-family: var(--jp-ui-font-family);\n}\n\n.success-description {\n color: var(--jp-ui-font-color1);\n font-size: 16px;\n margin: 0 0 16px 0;\n font-family: var(--jp-ui-font-family);\n line-height: 1.5;\n}\n\n.success-timer {\n color: var(--jp-ui-font-color2);\n font-size: 14px;\n margin: 0 0 24px 0;\n font-family: var(--jp-ui-font-family);\n font-style: italic;\n}\n\n.success-actions {\n display: flex;\n justify-content: center;\n gap: 12px;\n}\n\n/* Progress bar animation */\n@keyframes progressFill {\n from { width: 0%; }\n to { width: 100%; }\n}\n\n/* Welcome message container styling */\n.welcome-message-container {\n border: 1px solid var(--jp-border-color1);\n border-radius: 8px;\n padding: 32px 24px;\n margin: 16px 0;\n background-color: var(--jp-layout-color0);\n text-align: center;\n}\n\n/* Welcome message title */\n.welcome-message-title {\n color: var(--jp-ui-font-color1);\n font-size: 24px;\n font-weight: 600;\n margin: 0 0 12px 0;\n font-family: var(--jp-ui-font-family);\n}\n\n/* Welcome message description */\n.welcome-message-description {\n color: var(--jp-ui-font-color1);\n font-size: 16px;\n margin: 0 0 16px 0;\n font-family: var(--jp-ui-font-family);\n line-height: 1.5;\n}\n\n/* Progress bar container */\n.progress-bar-container {\n width: 100%;\n height: 4px;\n background-color: var(--jp-border-color1);\n border-radius: 2px;\n overflow: hidden;\n margin-top: 20px;\n margin-bottom: 12px;\n}\n\n/* Progress bar fill with CSS animation */\n.progress-bar-fill {\n width: 0%;\n height: 100%;\n background-color: var(--purple-500);\n border-radius: 2px;\n animation: progressFill 3s linear forwards;\n}\n\n/* Progress bar timer text */\n.progress-bar-timer {\n color: var(--jp-ui-font-color2);\n font-size: 14px;\n margin: 0;\n font-family: var(--jp-ui-font-family);\n font-style: italic;\n}"],"sourceRoot":""}]);
|
|
15967
|
+
}`, "",{"version":3,"sources":["webpack://./style/AuthPopup.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/* Auth popup specific styling to integrate AWS Amplify with Mito theme */\n.modal-content .amplify-authenticator {\n --amplify-colors-font-primary: var(--jp-ui-font-color1);\n --amplify-colors-font-secondary: var(--jp-ui-font-color2);\n --amplify-colors-background-primary: var(--jp-layout-color0);\n --amplify-colors-background-secondary: var(--jp-layout-color1);\n --amplify-colors-border-primary: var(--jp-border-color1);\n --amplify-colors-brand-primary-10: var(--purple-700);\n --amplify-colors-brand-primary-80: var(--purple-500);\n --amplify-colors-brand-primary-90: var(--purple-400);\n --amplify-colors-brand-primary-100: var(--purple-300);\n --amplify-radii-small: 4px;\n --amplify-radii-medium: 4px;\n --amplify-space-small: 8px;\n --amplify-space-medium: 12px;\n --amplify-space-large: 16px;\n --amplify-font-sizes-small: 14px;\n --amplify-font-sizes-medium: 14px;\n \n /* Remove the blue top border on active tabs */\n --amplify-components-tabs-item-active-border-width: 0;\n --amplify-components-tabs-item-border-width: 0;\n \n /* Ensure active tab bottom border uses purple */\n --amplify-components-tabs-item-active-border-color: var(--purple-500);\n --amplify-components-tabs-item-active-color: var(--purple-700);\n}\n\n/* Ensure modal content has adequate width for auth form */\n.modal-content:has(.amplify-authenticator) {\n width: 480px;\n max-width: 90vw;\n min-width: 400px;\n}\n\n/* Style the authenticator container */\n.modal-content .amplify-authenticator__modal {\n background: transparent !important;\n box-shadow: none !important;\n border: none !important;\n}\n\n/* Constrain authenticator content within modal bounds */\n.modal-content .amplify-authenticator {\n width: 100% !important;\n max-width: 100% !important;\n overflow: hidden !important;\n}\n\n/* Specifically target the data-amplify-container to prevent overflow */\n.modal-content [data-amplify-container] {\n width: 100% !important;\n max-width: 100% !important;\n overflow: hidden !important;\n box-sizing: border-box !important;\n}\n\n\n\n/* Constrain the tabs container */\n.modal-content .amplify-tabs {\n width: 100% !important;\n max-width: 100% !important;\n overflow: hidden !important;\n}\n\n/* Ensure form fields don't overflow */\n.modal-content .amplify-field,\n.modal-content .amplify-field__group {\n width: 100% !important;\n max-width: 100% !important;\n box-sizing: border-box !important;\n}\n\n/* Align form elements with Mito styling */\n.modal-content .amplify-field__label {\n color: var(--jp-ui-font-color1) !important;\n font-weight: 500 !important;\n}\n\n.modal-content .amplify-input,\n.modal-content .amplify-select {\n background: var(--jp-layout-color0) !important;\n border: 1px solid var(--jp-border-color1) !important;\n color: var(--jp-ui-font-color1) !important;\n border-radius: 4px !important;\n}\n\n.modal-content .amplify-input:focus,\n.modal-content .amplify-select:focus {\n border-color: var(--purple-500) !important;\n box-shadow: 0 0 0 2px rgba(124, 58, 237, 0.1) !important;\n}\n\n\n\n/* Style Amplify buttons to match Mito theme */\n.modal-content .amplify-button--primary {\n background-color: var(--purple-400) !important;\n color: var(--purple-700) !important;\n border: none !important;\n border-radius: 4px !important;\n font-weight: 500 !important;\n padding: 8px 16px !important;\n width: 100% !important;\n max-width: 100% !important;\n box-sizing: border-box !important;\n}\n\n.modal-content .amplify-button--primary:hover {\n background-color: var(--purple-500) !important;\n}\n\n.modal-content .amplify-button--link {\n color: var(--purple-600) !important;\n text-decoration: none !important;\n}\n\n.modal-content .amplify-button--link:hover {\n color: var(--purple-700) !important;\n text-decoration: underline !important;\n}\n\n/* Error and success message styling */\n.modal-content .amplify-alert--error {\n background-color: var(--red-300) !important;\n color: var(--red-900) !important;\n border: 1px solid var(--red-400) !important;\n border-radius: 4px !important;\n}\n\n.modal-content .amplify-alert--info {\n background-color: var(--purple-300) !important;\n color: var(--purple-700) !important;\n border: 1px solid var(--purple-400) !important;\n border-radius: 4px !important;\n}\n\n/* Tab styling for sign in/sign up tabs */\n.modal-content .amplify-tabs__item {\n color: var(--purple-500) !important;\n border-bottom: 2px solid transparent !important;\n}\n\n.modal-content .amplify-tabs__item[data-state=\"active\"] {\n color: var(--purple-700) !important;\n border-bottom-color: var(--purple-500) !important;\n}\n\n/* Ensure inactive tabs don't have purple styling */\n.modal-content .amplify-tabs__item[data-state=\"inactive\"] {\n color: var(--jp-ui-font-color2) !important;\n border-bottom: 2px solid transparent !important;\n}\n\n\n\n.modal-content .amplify-tabs__item:hover {\n color: var(--purple-700) !important;\n}\n\n/* Override any default blue tab styling from Amplify */\n.modal-content .amplify-tabs__list {\n border-bottom: 1px solid var(--jp-border-color1) !important;\n}\n\n.modal-content .amplify-tabs__item[data-state=\"active\"]:after,\n.modal-content .amplify-tabs__item[aria-selected=\"true\"]:after {\n background-color: var(--purple-500) !important;\n border-color: var(--purple-500) !important;\n}\n\n/* Override any Amplify default blue colors */\n.modal-content .amplify-tabs [data-amplify-color-mode] .amplify-tabs__item[data-state=\"active\"] {\n color: var(--purple-700) !important;\n border-bottom-color: var(--purple-500) !important;\n}\n\n.modal-content .amplify-tabs [data-amplify-color-mode] .amplify-tabs__item[aria-selected=\"true\"] {\n color: var(--purple-700) !important;\n border-bottom-color: var(--purple-500) !important;\n}\n\n/* Additional selectors to ensure default active state on initial load */\n.modal-content .amplify-tabs__item[aria-selected=\"true\"] {\n color: var(--purple-700) !important;\n border-bottom: 2px solid var(--purple-500) !important;\n}\n\n\n\n/* Loading spinner colors */\n.modal-content .amplify-loader {\n border-top-color: var(--purple-500) !important;\n}\n\n/* Additional purple color overrides for any remaining blue elements */\n.modal-content .amplify-tabs__item[data-state=\"active\"] *,\n.modal-content .amplify-tabs__item[aria-selected=\"true\"] * {\n color: var(--purple-700) !important;\n}\n\n/* Override focus states to use purple */\n.modal-content .amplify-tabs__item:focus,\n.modal-content .amplify-tabs__item:focus-visible {\n border-bottom-color: var(--purple-500) !important;\n outline-color: var(--purple-500) !important;\n}\n\n/* Ensure any nested tab content uses purple theme */\n.modal-content [data-amplify-authenticator] [data-amplify-router] .amplify-tabs__item[data-state=\"active\"] {\n color: var(--purple-700) !important;\n border-bottom-color: var(--purple-500) !important;\n}\n\n/* Remove any top borders, outlines, or blue styling from tabs */\n.modal-content .amplify-tabs__item {\n border-top: none !important;\n border-left: none !important;\n border-right: none !important;\n outline: none !important;\n}\n\n.modal-content .amplify-tabs__item[data-state=\"active\"],\n.modal-content .amplify-tabs__item[aria-selected=\"true\"] {\n border-top: none !important;\n border-left: none !important;\n border-right: none !important;\n outline: none !important;\n box-shadow: none !important;\n}\n\n/* Remove any pseudo-element borders that might create blue lines */\n.modal-content .amplify-tabs__item:before,\n.modal-content .amplify-tabs__item:after,\n.modal-content .amplify-tabs__item[data-state=\"active\"]:before,\n.modal-content .amplify-tabs__item[aria-selected=\"true\"]:before {\n display: none !important;\n border: none !important;\n background: none !important;\n}\n\n\n\n/* Additional containment rules for better layout */\n.modal-content .amplify-authenticator * {\n box-sizing: border-box !important;\n}\n\n/* Prevent any Amplify containers from overflowing */\n.modal-content [data-amplify-authenticator],\n.modal-content [data-amplify-router],\n.modal-content [data-amplify-authenticator-signin],\n.modal-content [data-amplify-authenticator-signup] {\n width: 100% !important;\n max-width: 100% !important;\n overflow: hidden !important;\n box-sizing: border-box !important;\n}\n\n/* Remove any default margins or padding that might cause overflow */\n.modal-content [data-amplify-container] * {\n max-width: 100% !important;\n}\n\n/* Ensure modal content itself doesn't allow horizontal scroll */\n.modal-content:has(.amplify-authenticator) {\n overflow-x: hidden !important;\n}\n\n/* Target main Amplify containers but not inputs */\n.modal-content div[data-amplify-container] {\n width: 100% !important;\n max-width: 100% !important;\n box-sizing: border-box !important;\n}\n\n/* Ensure tab panels fit within bounds */\n.modal-content .amplify-tabs__panel {\n width: 100% !important;\n max-width: 100% !important;\n overflow: hidden !important;\n padding: 16px !important;\n}\n\n/* Ensure tab list doesn't overflow */\n.modal-content .amplify-tabs__list {\n width: 100% !important;\n max-width: 100% !important;\n display: flex !important;\n justify-content: space-around !important;\n}\n\n.modal-content .amplify-tabs__item {\n flex: 1 !important;\n text-align: center !important;\n max-width: 50% !important;\n}\n\n/* Add this to your AuthPopup.css file */\n\n/* Hide password requirements by default */\n.password-requirements {\n display: none;\n padding: 16px 20px;\n background-color: var(--jp-layout-color2);\n border-top: 1px solid var(--jp-border-color1);\n font-size: 13px;\n}\n\n/* Show password requirements when sign-up form is present */\n.modal-content:has([data-amplify-authenticator-signup]) .password-requirements {\n display: block;\n}\n\n/* Style the requirements content */\n.password-requirements p {\n margin: 0 0 8px 0;\n font-weight: bold;\n color: var(--jp-ui-font-color1);\n}\n\n.password-requirements ul {\n margin: 0;\n padding-left: 20px;\n color: var(--jp-ui-font-color2);\n font-size: 12px;\n}\n\n/* Success message styling */\n.auth-success-message {\n padding: 32px 24px;\n text-align: center;\n background: var(--jp-layout-color0);\n border-radius: 8px;\n}\n\n.success-icon {\n margin-bottom: 20px;\n display: flex;\n justify-content: center;\n}\n\n.success-title {\n color: var(--jp-ui-font-color1);\n font-size: 24px;\n font-weight: 600;\n margin: 0 0 12px 0;\n font-family: var(--jp-ui-font-family);\n}\n\n.success-description {\n color: var(--jp-ui-font-color1);\n font-size: 16px;\n margin: 0 0 16px 0;\n font-family: var(--jp-ui-font-family);\n line-height: 1.5;\n}\n\n.success-timer {\n color: var(--jp-ui-font-color2);\n font-size: 14px;\n margin: 0 0 24px 0;\n font-family: var(--jp-ui-font-family);\n font-style: italic;\n}\n\n.success-actions {\n display: flex;\n justify-content: center;\n gap: 12px;\n}\n\n/* Progress bar animation */\n@keyframes progressFill {\n from { width: 0%; }\n to { width: 100%; }\n}\n\n/* Welcome message container styling */\n.welcome-message-container {\n border: 1px solid var(--jp-border-color1);\n border-radius: 8px;\n padding: 32px 24px;\n margin: 16px 0;\n background-color: var(--jp-layout-color0);\n text-align: center;\n}\n\n/* Welcome message title */\n.welcome-message-title {\n color: var(--jp-ui-font-color1);\n font-size: 24px;\n font-weight: 600;\n margin: 0 0 12px 0;\n font-family: var(--jp-ui-font-family);\n}\n\n/* Welcome message description */\n.welcome-message-description {\n color: var(--jp-ui-font-color1);\n font-size: 16px;\n margin: 0 0 16px 0;\n font-family: var(--jp-ui-font-family);\n line-height: 1.5;\n}\n\n/* Progress bar container */\n.progress-bar-container {\n width: 100%;\n height: 4px;\n background-color: var(--jp-border-color1);\n border-radius: 2px;\n overflow: hidden;\n margin-top: 20px;\n margin-bottom: 12px;\n}\n\n/* Progress bar fill with CSS animation */\n.progress-bar-fill {\n width: 0%;\n height: 100%;\n background-color: var(--purple-500);\n border-radius: 2px;\n animation: progressFill 3s linear forwards;\n}\n\n/* Progress bar timer text */\n.progress-bar-timer {\n color: var(--jp-ui-font-color2);\n font-size: 14px;\n margin: 0;\n font-family: var(--jp-ui-font-family);\n font-style: italic;\n}"],"sourceRoot":""}]);
|
|
15618
15968
|
// Exports
|
|
15619
15969
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
15620
15970
|
|
|
@@ -17724,6 +18074,25 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
17724
18074
|
transition: background-color 0.2s;
|
|
17725
18075
|
white-space: nowrap;
|
|
17726
18076
|
/* Prevent text wrapping */
|
|
18077
|
+
display: flex;
|
|
18078
|
+
align-items: center;
|
|
18079
|
+
justify-content: space-between;
|
|
18080
|
+
gap: 8px;
|
|
18081
|
+
}
|
|
18082
|
+
|
|
18083
|
+
.model-option-name {
|
|
18084
|
+
flex: 1;
|
|
18085
|
+
min-width: 0;
|
|
18086
|
+
overflow: hidden;
|
|
18087
|
+
text-overflow: ellipsis;
|
|
18088
|
+
}
|
|
18089
|
+
|
|
18090
|
+
.model-type-icon {
|
|
18091
|
+
display: flex;
|
|
18092
|
+
align-items: center;
|
|
18093
|
+
justify-content: center;
|
|
18094
|
+
flex-shrink: 0;
|
|
18095
|
+
opacity: 0.7;
|
|
17727
18096
|
}
|
|
17728
18097
|
|
|
17729
18098
|
.model-option:hover {
|
|
@@ -17787,7 +18156,109 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
17787
18156
|
.model-name {
|
|
17788
18157
|
display: none;
|
|
17789
18158
|
}
|
|
17790
|
-
}
|
|
18159
|
+
}
|
|
18160
|
+
|
|
18161
|
+
/* Model tooltip - appears to the right of the dropdown, rendered via portal */
|
|
18162
|
+
.model-tooltip {
|
|
18163
|
+
position: fixed;
|
|
18164
|
+
top: var(--tooltip-top, 200px);
|
|
18165
|
+
left: var(--tooltip-left, 200px);
|
|
18166
|
+
background-color: var(--jp-layout-color1);
|
|
18167
|
+
border: 1px solid var(--jp-layout-color2);
|
|
18168
|
+
border-radius: 4px;
|
|
18169
|
+
padding: 12px;
|
|
18170
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
|
|
18171
|
+
z-index: 10000; /* High z-index to appear above Jupyter notebook */
|
|
18172
|
+
width: 280px;
|
|
18173
|
+
pointer-events: none; /* Prevent tooltip from blocking mouse events */
|
|
18174
|
+
}
|
|
18175
|
+
|
|
18176
|
+
.model-tooltip-content {
|
|
18177
|
+
display: flex;
|
|
18178
|
+
flex-direction: column;
|
|
18179
|
+
gap: 12px;
|
|
18180
|
+
}
|
|
18181
|
+
|
|
18182
|
+
.model-tooltip-header {
|
|
18183
|
+
display: flex;
|
|
18184
|
+
flex-direction: column;
|
|
18185
|
+
gap: 8px;
|
|
18186
|
+
}
|
|
18187
|
+
|
|
18188
|
+
.model-tooltip-title-row {
|
|
18189
|
+
display: flex;
|
|
18190
|
+
align-items: center;
|
|
18191
|
+
gap: 6px;
|
|
18192
|
+
}
|
|
18193
|
+
|
|
18194
|
+
.model-tooltip-title-icon {
|
|
18195
|
+
flex-shrink: 0;
|
|
18196
|
+
opacity: 0.8;
|
|
18197
|
+
display: flex;
|
|
18198
|
+
align-items: center;
|
|
18199
|
+
justify-content: center;
|
|
18200
|
+
line-height: 1;
|
|
18201
|
+
}
|
|
18202
|
+
|
|
18203
|
+
.model-tooltip-title {
|
|
18204
|
+
font-size: 14px;
|
|
18205
|
+
font-weight: 600;
|
|
18206
|
+
color: var(--jp-content-font-color1);
|
|
18207
|
+
line-height: 1.2;
|
|
18208
|
+
}
|
|
18209
|
+
|
|
18210
|
+
.model-tooltip-metadata {
|
|
18211
|
+
display: grid;
|
|
18212
|
+
grid-template-columns: 1fr 1fr;
|
|
18213
|
+
gap: 6px 12px;
|
|
18214
|
+
font-size: 11px;
|
|
18215
|
+
}
|
|
18216
|
+
|
|
18217
|
+
.model-tooltip-metadata-item {
|
|
18218
|
+
display: flex;
|
|
18219
|
+
gap: 4px;
|
|
18220
|
+
}
|
|
18221
|
+
|
|
18222
|
+
.model-tooltip-metadata-label {
|
|
18223
|
+
color: var(--jp-content-font-color2);
|
|
18224
|
+
font-weight: 500;
|
|
18225
|
+
}
|
|
18226
|
+
|
|
18227
|
+
.model-tooltip-metadata-value {
|
|
18228
|
+
color: var(--jp-content-font-color1);
|
|
18229
|
+
font-weight: 600;
|
|
18230
|
+
}
|
|
18231
|
+
|
|
18232
|
+
.model-tooltip-section {
|
|
18233
|
+
display: flex;
|
|
18234
|
+
flex-direction: column;
|
|
18235
|
+
gap: 6px;
|
|
18236
|
+
}
|
|
18237
|
+
|
|
18238
|
+
.model-tooltip-section-label {
|
|
18239
|
+
font-size: 11px;
|
|
18240
|
+
font-weight: 600;
|
|
18241
|
+
color: var(--jp-content-font-color1);
|
|
18242
|
+
text-transform: uppercase;
|
|
18243
|
+
letter-spacing: 0.5px;
|
|
18244
|
+
}
|
|
18245
|
+
|
|
18246
|
+
.model-tooltip-bullet-list {
|
|
18247
|
+
margin: 0;
|
|
18248
|
+
padding-left: 16px;
|
|
18249
|
+
list-style-type: disc;
|
|
18250
|
+
}
|
|
18251
|
+
|
|
18252
|
+
.model-tooltip-bullet-item {
|
|
18253
|
+
font-size: 12px;
|
|
18254
|
+
color: var(--jp-content-font-color2);
|
|
18255
|
+
line-height: 1.5;
|
|
18256
|
+
margin-bottom: 4px;
|
|
18257
|
+
}
|
|
18258
|
+
|
|
18259
|
+
.model-tooltip-bullet-item:last-child {
|
|
18260
|
+
margin-bottom: 0;
|
|
18261
|
+
}`, "",{"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 color: var(--purple-700);\n}\n\n.model-option.selected {\n background-color: var(--jp-layout-color2);\n color: var(--purple-700);\n}\n\n/* When inside chat-controls - ensure proper alignment with other controls */\n.chat-controls .model-selector {\n height: 20px;\n display: flex;\n align-items: center;\n}\n\n.chat-controls .model-selector-dropdown {\n height: 20px;\n align-self: center;\n}\n\n/* Ensure dropdown appears above other elements */\n.model-options {\n z-index: 1010;\n /* Higher z-index to ensure visibility */\n}\n\n.model-name {\n display: inline-block;\n max-width: 120px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n vertical-align: bottom;\n}\n\n/* On wider screens, show only the name of the model*/\n.model-icon {\n display: none;\n}\n\n.model-name {\n display: inline;\n}\n\n/* On compact screens, show only the icon */\n@container (max-width: 260px) {\n\n /* Shift the dropdown to the left to help prevent right-edge overflow */\n .model-options {\n left: -40px;\n }\n\n .model-icon {\n display: inline;\n }\n\n .model-name {\n display: none;\n }\n}\n\n/* Model tooltip - appears to the right of the dropdown, rendered via portal */\n.model-tooltip {\n position: fixed;\n top: var(--tooltip-top, 200px);\n left: var(--tooltip-left, 200px);\n background-color: var(--jp-layout-color1);\n border: 1px solid var(--jp-layout-color2);\n border-radius: 4px;\n padding: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\n z-index: 10000; /* High z-index to appear above Jupyter notebook */\n width: 280px;\n pointer-events: none; /* Prevent tooltip from blocking mouse events */\n}\n\n.model-tooltip-content {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.model-tooltip-header {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.model-tooltip-title-row {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.model-tooltip-title-icon {\n flex-shrink: 0;\n opacity: 0.8;\n display: flex;\n align-items: center;\n justify-content: center;\n line-height: 1;\n}\n\n.model-tooltip-title {\n font-size: 14px;\n font-weight: 600;\n color: var(--jp-content-font-color1);\n line-height: 1.2;\n}\n\n.model-tooltip-metadata {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 6px 12px;\n font-size: 11px;\n}\n\n.model-tooltip-metadata-item {\n display: flex;\n gap: 4px;\n}\n\n.model-tooltip-metadata-label {\n color: var(--jp-content-font-color2);\n font-weight: 500;\n}\n\n.model-tooltip-metadata-value {\n color: var(--jp-content-font-color1);\n font-weight: 600;\n}\n\n.model-tooltip-section {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.model-tooltip-section-label {\n font-size: 11px;\n font-weight: 600;\n color: var(--jp-content-font-color1);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.model-tooltip-bullet-list {\n margin: 0;\n padding-left: 16px;\n list-style-type: disc;\n}\n\n.model-tooltip-bullet-item {\n font-size: 12px;\n color: var(--jp-content-font-color2);\n line-height: 1.5;\n margin-bottom: 4px;\n}\n\n.model-tooltip-bullet-item:last-child {\n margin-bottom: 0;\n}"],"sourceRoot":""}]);
|
|
17791
18262
|
// Exports
|
|
17792
18263
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
17793
18264
|
|
|
@@ -21892,4 +22363,4 @@ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js
|
|
|
21892
22363
|
/***/ })
|
|
21893
22364
|
|
|
21894
22365
|
}]);
|
|
21895
|
-
//# sourceMappingURL=lib_index_js.
|
|
22366
|
+
//# sourceMappingURL=lib_index_js.31462f8f6a76b1cefbeb.js.map
|