mito-ai 0.1.53__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.
Files changed (44) hide show
  1. mito_ai/_version.py +1 -1
  2. mito_ai/completions/models.py +1 -1
  3. mito_ai/completions/prompt_builders/agent_system_message.py +10 -7
  4. mito_ai/streamlit_conversion/prompts/streamlit_app_creation_prompt.py +18 -2
  5. mito_ai/streamlit_conversion/streamlit_agent_handler.py +12 -12
  6. mito_ai/streamlit_preview/handlers.py +13 -6
  7. mito_ai/streamlit_preview/manager.py +4 -1
  8. mito_ai/streamlit_preview/utils.py +4 -4
  9. mito_ai/tests/streamlit_conversion/test_streamlit_agent_handler.py +7 -7
  10. mito_ai/tests/streamlit_preview/test_streamlit_preview_handler.py +4 -3
  11. {mito_ai-0.1.53.data → mito_ai-0.1.54.data}/data/share/jupyter/labextensions/mito_ai/build_log.json +1 -1
  12. {mito_ai-0.1.53.data → mito_ai-0.1.54.data}/data/share/jupyter/labextensions/mito_ai/package.json +4 -4
  13. {mito_ai-0.1.53.data → mito_ai-0.1.54.data}/data/share/jupyter/labextensions/mito_ai/schemas/mito_ai/package.json.orig +3 -3
  14. mito_ai-0.1.53.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.4b7cd47a24bb24ef84ea.js → mito_ai-0.1.54.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.31462f8f6a76b1cefbeb.js +169 -42
  15. mito_ai-0.1.54.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.31462f8f6a76b1cefbeb.js.map +1 -0
  16. mito_ai-0.1.53.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.4395ab9342efa39fc0a2.js → mito_ai-0.1.54.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.3f3c98eaba66bf084c66.js +3 -3
  17. mito_ai-0.1.53.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.4395ab9342efa39fc0a2.js.map → mito_ai-0.1.54.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.3f3c98eaba66bf084c66.js.map +1 -1
  18. {mito_ai-0.1.53.dist-info → mito_ai-0.1.54.dist-info}/METADATA +1 -1
  19. {mito_ai-0.1.53.dist-info → mito_ai-0.1.54.dist-info}/RECORD +43 -43
  20. {mito_ai-0.1.53.dist-info → mito_ai-0.1.54.dist-info}/WHEEL +1 -1
  21. mito_ai-0.1.53.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.4b7cd47a24bb24ef84ea.js.map +0 -1
  22. {mito_ai-0.1.53.data → mito_ai-0.1.54.data}/data/etc/jupyter/jupyter_server_config.d/mito_ai.json +0 -0
  23. {mito_ai-0.1.53.data → mito_ai-0.1.54.data}/data/share/jupyter/labextensions/mito_ai/schemas/mito_ai/toolbar-buttons.json +0 -0
  24. {mito_ai-0.1.53.data → mito_ai-0.1.54.data}/data/share/jupyter/labextensions/mito_ai/static/node_modules_process_browser_js.4b128e94d31a81ebd209.js +0 -0
  25. {mito_ai-0.1.53.data → mito_ai-0.1.54.data}/data/share/jupyter/labextensions/mito_ai/static/node_modules_process_browser_js.4b128e94d31a81ebd209.js.map +0 -0
  26. {mito_ai-0.1.53.data → mito_ai-0.1.54.data}/data/share/jupyter/labextensions/mito_ai/static/style.js +0 -0
  27. {mito_ai-0.1.53.data → mito_ai-0.1.54.data}/data/share/jupyter/labextensions/mito_ai/static/style_index_js.5876024bb17dbd6a3ee6.js +0 -0
  28. {mito_ai-0.1.53.data → mito_ai-0.1.54.data}/data/share/jupyter/labextensions/mito_ai/static/style_index_js.5876024bb17dbd6a3ee6.js.map +0 -0
  29. {mito_ai-0.1.53.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
  30. {mito_ai-0.1.53.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
  31. {mito_ai-0.1.53.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
  32. {mito_ai-0.1.53.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
  33. {mito_ai-0.1.53.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
  34. {mito_ai-0.1.53.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
  35. {mito_ai-0.1.53.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
  36. {mito_ai-0.1.53.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
  37. {mito_ai-0.1.53.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
  38. {mito_ai-0.1.53.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
  39. {mito_ai-0.1.53.data → mito_ai-0.1.54.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_semver_index_js.3f6754ac5116d47de76b.js +0 -0
  40. {mito_ai-0.1.53.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
  41. {mito_ai-0.1.53.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
  42. {mito_ai-0.1.53.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
  43. {mito_ai-0.1.53.dist-info → mito_ai-0.1.54.dist-info}/entry_points.txt +0 -0
  44. {mito_ai-0.1.53.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.edit_streamlit_app_prompt === undefined || agentResponse.edit_streamlit_app_prompt === null)) {
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 streamlitPreviewResponse = await streamlitPreviewManager.openAppPreview(app, agentTargetNotebookPanelRef.current);
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.edit_streamlit_app_prompt) {
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.edit_streamlit_app_prompt, agentTargetNotebookPanelRef.current);
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 edit_streamlit_app_prompt - ensure it's a string when present
4963
- const editStreamlitAppPromptType = typeof correctedResponse.edit_streamlit_app_prompt;
4964
- correctedResponse.edit_streamlit_app_prompt = editStreamlitAppPromptType === 'string' ? correctedResponse.edit_streamlit_app_prompt : undefined;
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;
@@ -6342,6 +6343,112 @@ const ManageAppsPlugin = {
6342
6343
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ManageAppsPlugin);
6343
6344
 
6344
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
+
6345
6452
  /***/ }),
6346
6453
 
6347
6454
  /***/ "./lib/Extensions/AppPreview/StreamlitPreviewPlugin.js":
@@ -6363,16 +6470,17 @@ __webpack_require__.r(__webpack_exports__);
6363
6470
  /* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_lumino_widgets__WEBPACK_IMPORTED_MODULE_2__);
6364
6471
  /* harmony import */ var _lumino_coreutils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @lumino/coreutils */ "webpack/sharing/consume/default/@lumino/coreutils");
6365
6472
  /* harmony import */ var _lumino_coreutils__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_lumino_coreutils__WEBPACK_IMPORTED_MODULE_3__);
6366
- /* harmony import */ var _restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../restAPI/RestAPI */ "./lib/restAPI/RestAPI.js");
6367
- /* harmony import */ var _AppDeploy_DeployStreamlitApp__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../AppDeploy/DeployStreamlitApp */ "./lib/Extensions/AppDeploy/DeployStreamlitApp.js");
6368
- /* harmony import */ var _AppDeploy_AppDeployPlugin__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../AppDeploy/AppDeployPlugin */ "./lib/Extensions/AppDeploy/AppDeployPlugin.js");
6369
- /* harmony import */ var _AppManager_ManageAppsPlugin__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../AppManager/ManageAppsPlugin */ "./lib/Extensions/AppManager/ManageAppsPlugin.js");
6370
- /* harmony import */ var _commands__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../commands */ "./lib/commands.js");
6371
- /* harmony import */ var _icons__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../icons */ "./lib/icons/index.js");
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");
6372
6479
  /* harmony import */ var _style_StreamlitPreviewPlugin_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../style/StreamlitPreviewPlugin.css */ "./style/StreamlitPreviewPlugin.css");
6373
6480
  /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils */ "./lib/Extensions/AppPreview/utils.js");
6374
- /* harmony import */ var _UpdateAppDropdown__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./UpdateAppDropdown */ "./lib/Extensions/AppPreview/UpdateAppDropdown.js");
6375
- /* harmony import */ var _utils_notebookMetadata__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../utils/notebookMetadata */ "./lib/utils/notebookMetadata.js");
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");
6376
6484
  /*
6377
6485
  * Copyright (c) Saga Inc.
6378
6486
  * Distributed under the terms of the GNU Affero General Public License v3.0 License.
@@ -6392,6 +6500,7 @@ __webpack_require__.r(__webpack_exports__);
6392
6500
 
6393
6501
 
6394
6502
 
6503
+
6395
6504
  /**
6396
6505
  * The token for the StreamlitPreview service.
6397
6506
  */
@@ -6430,16 +6539,33 @@ class StreamlitAppPreviewManager {
6430
6539
  /**
6431
6540
  * Create a new Streamlit app preview, replacing any existing preview.
6432
6541
  */
6433
- async openAppPreview(app, notebookPanel) {
6542
+ async openAppPreview(app, notebookPanel, createStreamlitAppPrompt = '') {
6434
6543
  // If the user has a different app open, we first close that one
6435
6544
  if (!this.isCurrentPreivewForCurrentNotebook(notebookPanel)) {
6436
6545
  this.closeCurrentPreview();
6437
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
+ }
6438
6560
  // First save the notebook to ensure the app is up to date
6439
6561
  await notebookPanel.context.save();
6440
6562
  const notebookPath = notebookPanel.context.path;
6441
- const notebookID = (0,_utils_notebookMetadata__WEBPACK_IMPORTED_MODULE_5__.getNotebookIDAndSetIfNonexistant)(notebookPanel);
6442
- 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
+ }
6443
6569
  if (streamlitPreviewResponse.type === 'error') {
6444
6570
  return streamlitPreviewResponse;
6445
6571
  }
@@ -6473,9 +6599,9 @@ class StreamlitAppPreviewManager {
6473
6599
  // Because we are parsing the notebook on the backend by reading
6474
6600
  // the file system, it only sees the last saved version of the notebook.
6475
6601
  await notebookPanel.context.save();
6476
- const notebookID = (0,_utils_notebookMetadata__WEBPACK_IMPORTED_MODULE_5__.getNotebookIDAndSetIfNonexistant)(notebookPanel);
6602
+ const notebookID = (0,_utils_notebookMetadata__WEBPACK_IMPORTED_MODULE_7__.getNotebookIDAndSetIfNonexistant)(notebookPanel);
6477
6603
  // Update the app with the edit prompt
6478
- const streamlitPreviewResponse = await (0,_utils__WEBPACK_IMPORTED_MODULE_6__.startStreamlitPreviewAndNotify)(notebookPanel.context.path, notebookID, true, // force_recreate
6604
+ const streamlitPreviewResponse = await (0,_utils__WEBPACK_IMPORTED_MODULE_6__.startStreamlitPreviewAndNotify)(notebookPanel.context.path, notebookID, false, // force_recreate
6479
6605
  editPrompt, 'Editing Streamlit app...', 'Streamlit app updated successfully!');
6480
6606
  return streamlitPreviewResponse;
6481
6607
  }
@@ -6516,22 +6642,22 @@ class StreamlitAppPreviewManager {
6516
6642
  createPreviewWidget(app, notebookPanel, appDeployService, appManagerService, previewData) {
6517
6643
  const iframeWidget = new IFrameWidget(previewData.url);
6518
6644
  // Log that the preview is open
6519
- void (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_7__.logEvent)('opened_streamlit_app_preview');
6645
+ void (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_8__.logEvent)('opened_streamlit_app_preview');
6520
6646
  // Create main area widget
6521
6647
  const widget = new _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.MainAreaWidget({ content: iframeWidget });
6522
6648
  const notebookPath = notebookPanel.context.path;
6523
- const notebookID = (0,_utils_notebookMetadata__WEBPACK_IMPORTED_MODULE_5__.getNotebookIDAndSetIfNonexistant)(notebookPanel);
6649
+ const notebookID = (0,_utils_notebookMetadata__WEBPACK_IMPORTED_MODULE_7__.getNotebookIDAndSetIfNonexistant)(notebookPanel);
6524
6650
  widget.title.label = (0,_utils__WEBPACK_IMPORTED_MODULE_6__.getAppPreviewNameFromNotebookPanel)(notebookPanel);
6525
6651
  widget.title.closable = true;
6526
6652
  // Create toolbar buttons
6527
6653
  const editAppButton = new _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.ToolbarButton({
6528
6654
  className: 'text-button-mito-ai button-base button-small jp-ToolbarButton mito-deploy-button',
6529
6655
  onClick: () => {
6530
- (0,_UpdateAppDropdown__WEBPACK_IMPORTED_MODULE_8__.showUpdateAppDropdown)(editAppButton.node, notebookPanel);
6656
+ (0,_UpdateAppDropdown__WEBPACK_IMPORTED_MODULE_9__.showUpdateAppDropdown)(editAppButton.node, notebookPanel);
6531
6657
  },
6532
6658
  tooltip: 'Edit Streamlit App',
6533
6659
  label: 'Edit App',
6534
- icon: _icons__WEBPACK_IMPORTED_MODULE_9__.EditLabIcon,
6660
+ icon: _icons__WEBPACK_IMPORTED_MODULE_10__.EditLabIcon,
6535
6661
  iconClass: 'mito-ai-deploy-icon'
6536
6662
  });
6537
6663
  const recreateAppButton = new _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.ToolbarButton({
@@ -6541,30 +6667,30 @@ class StreamlitAppPreviewManager {
6541
6667
  },
6542
6668
  tooltip: 'Recreate new App from scratch based on the current state of the notebook',
6543
6669
  label: 'Recreate App',
6544
- icon: _icons__WEBPACK_IMPORTED_MODULE_9__.ResetCircleLabIcon,
6670
+ icon: _icons__WEBPACK_IMPORTED_MODULE_10__.ResetCircleLabIcon,
6545
6671
  iconClass: 'mito-ai-deploy-icon'
6546
6672
  });
6547
6673
  const deployButton = new _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.ToolbarButton({
6548
6674
  className: 'text-button-mito-ai button-base button-small jp-ToolbarButton mito-deploy-button',
6549
6675
  onClick: () => {
6550
- void (0,_AppDeploy_DeployStreamlitApp__WEBPACK_IMPORTED_MODULE_10__.deployStreamlitApp)(notebookPanel, appDeployService, appManagerService);
6676
+ void (0,_AppDeploy_DeployStreamlitApp__WEBPACK_IMPORTED_MODULE_11__.deployStreamlitApp)(notebookPanel, appDeployService, appManagerService);
6551
6677
  },
6552
6678
  tooltip: 'Deploy Streamlit App',
6553
6679
  label: 'Deploy App',
6554
- icon: _icons__WEBPACK_IMPORTED_MODULE_9__.DeployLabIcon,
6680
+ icon: _icons__WEBPACK_IMPORTED_MODULE_10__.DeployLabIcon,
6555
6681
  iconClass: 'mito-ai-deploy-icon'
6556
6682
  });
6557
6683
  // Insert the buttons into the toolbar
6558
6684
  widget.toolbar.insertAfter('spacer', 'edit-app-button', editAppButton);
6559
6685
  widget.toolbar.insertAfter('edit-app-button', 'recreate-app-button', recreateAppButton);
6560
- if (app.commands.hasCommand(_commands__WEBPACK_IMPORTED_MODULE_11__.COMMAND_MITO_AI_BETA_MODE_ENABLED)) {
6686
+ if (app.commands.hasCommand(_commands__WEBPACK_IMPORTED_MODULE_12__.COMMAND_MITO_AI_BETA_MODE_ENABLED)) {
6561
6687
  widget.toolbar.insertAfter('recreate-app-button', 'deploy-app-button', deployButton);
6562
6688
  }
6563
6689
  // Handle widget disposal
6564
6690
  widget.disposed.connect(() => {
6565
6691
  console.log('Widget disposed, stopping preview');
6566
6692
  if (previewData) {
6567
- void (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_7__.stopStreamlitPreview)(previewData.id);
6693
+ void (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_8__.stopStreamlitPreview)(previewData.id);
6568
6694
  }
6569
6695
  // Clear our reference when the widget is disposed
6570
6696
  if (this.currentPreview === widget) {
@@ -6580,14 +6706,14 @@ class StreamlitAppPreviewManager {
6580
6706
  const StreamlitPreviewPlugin = {
6581
6707
  id: 'mito-ai:streamlit-preview',
6582
6708
  autoStart: true,
6583
- requires: [_jupyterlab_notebook__WEBPACK_IMPORTED_MODULE_0__.INotebookTracker, _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.ICommandPalette, _AppDeploy_AppDeployPlugin__WEBPACK_IMPORTED_MODULE_12__.IAppDeployService, _AppManager_ManageAppsPlugin__WEBPACK_IMPORTED_MODULE_13__.IAppManagerService],
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],
6584
6710
  provides: IStreamlitPreviewManager,
6585
6711
  activate: (app, notebookTracker, palette, appDeployService, appManagerService) => {
6586
6712
  console.log('mito-ai: StreamlitPreviewPlugin activated');
6587
6713
  // Create the service instance
6588
6714
  const streamlitPreviewManager = new StreamlitAppPreviewManager(appDeployService, appManagerService);
6589
6715
  // Add command to command palette
6590
- app.commands.addCommand(_commands__WEBPACK_IMPORTED_MODULE_11__.COMMAND_MITO_AI_PREVIEW_AS_STREAMLIT, {
6716
+ app.commands.addCommand(_commands__WEBPACK_IMPORTED_MODULE_12__.COMMAND_MITO_AI_PREVIEW_AS_STREAMLIT, {
6591
6717
  label: 'Preview as Streamlit',
6592
6718
  caption: 'Convert current notebook to Streamlit app and preview it',
6593
6719
  execute: async () => {
@@ -6603,7 +6729,7 @@ const StreamlitPreviewPlugin = {
6603
6729
  });
6604
6730
  // Add to command palette
6605
6731
  palette.addItem({
6606
- command: _commands__WEBPACK_IMPORTED_MODULE_11__.COMMAND_MITO_AI_PREVIEW_AS_STREAMLIT,
6732
+ command: _commands__WEBPACK_IMPORTED_MODULE_12__.COMMAND_MITO_AI_PREVIEW_AS_STREAMLIT,
6607
6733
  category: 'Mito AI'
6608
6734
  });
6609
6735
  // Return the service so other plugins can use it
@@ -6739,7 +6865,8 @@ __webpack_require__.r(__webpack_exports__);
6739
6865
 
6740
6866
  const startStreamlitPreviewAndNotify = async (notebookPath, notebookID, force_recreate = false, edit_prompt = '', start_notification_message = 'Building App Preview...', success_notification_message = 'Streamlit preview started successfully!') => {
6741
6867
  const notificationId = _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.Notification.emit(start_notification_message, 'in-progress', { autoClose: false });
6742
- const previewData = await (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_2__.startStreamlitPreview)(notebookPath, notebookID, force_recreate, edit_prompt);
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);
6743
6870
  if (previewData.type === 'success') {
6744
6871
  // Update notification to success
6745
6872
  _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.Notification.update({
@@ -6771,7 +6898,7 @@ async function showRecreateAppConfirmation(notebookPath, notebookID) {
6771
6898
  defaultButton: 1
6772
6899
  });
6773
6900
  if (result.button.accept) {
6774
- void startStreamlitPreviewAndNotify(notebookPath, notebookID, true, undefined, 'Recreating app from scratch...', 'App recreated successfully!');
6901
+ void startStreamlitPreviewAndNotify(notebookPath, notebookID, true, '', 'Recreating app from scratch...', 'App recreated successfully!');
6775
6902
  }
6776
6903
  }
6777
6904
  const getAppPreviewNameFromNotebookPanel = (notebookPanel) => {
@@ -10356,7 +10483,7 @@ const MODEL_MAPPINGS = [
10356
10483
  },
10357
10484
  {
10358
10485
  displayName: 'Gemini 2.5 Pro',
10359
- fullName: 'gemini-2.5-pro-preview-03-25',
10486
+ fullName: 'gemini-2.5-pro',
10360
10487
  type: 'smart',
10361
10488
  goodFor: [
10362
10489
  'Complex data analysis',
@@ -11534,7 +11661,7 @@ __webpack_require__.r(__webpack_exports__);
11534
11661
  /* harmony export */ logEvent: () => (/* binding */ logEvent),
11535
11662
  /* harmony export */ setRule: () => (/* binding */ setRule),
11536
11663
  /* harmony export */ setUserKey: () => (/* binding */ setUserKey),
11537
- /* harmony export */ startStreamlitPreview: () => (/* binding */ startStreamlitPreview),
11664
+ /* harmony export */ startStreamlitAppPreview: () => (/* binding */ startStreamlitAppPreview),
11538
11665
  /* harmony export */ stopStreamlitPreview: () => (/* binding */ stopStreamlitPreview),
11539
11666
  /* harmony export */ updateSettings: () => (/* binding */ updateSettings)
11540
11667
  /* harmony export */ });
@@ -11631,14 +11758,14 @@ const getDatabaseConnections = async () => {
11631
11758
  STREAMLIT PREVIEW ENDPOINTS
11632
11759
 
11633
11760
  ************************************/
11634
- const startStreamlitPreview = async (notebookPath, notebookID, force_recreate = false, edit_prompt = '') => {
11761
+ const startStreamlitAppPreview = async (notebookPath, notebookID, force_recreate = false, streamlit_app_prompt = '') => {
11635
11762
  const response = await (0,_utils__WEBPACK_IMPORTED_MODULE_0__.requestAPI)('streamlit-preview', {
11636
11763
  method: 'POST',
11637
11764
  body: JSON.stringify({
11638
11765
  notebook_path: notebookPath,
11639
11766
  notebook_id: notebookID,
11640
11767
  force_recreate: force_recreate,
11641
- edit_prompt: edit_prompt
11768
+ streamlit_app_prompt: streamlit_app_prompt
11642
11769
  })
11643
11770
  });
11644
11771
  if (response.error) {
@@ -15543,7 +15670,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
15543
15670
 
15544
15671
  /* Tab styling for sign in/sign up tabs */
15545
15672
  .modal-content .amplify-tabs__item {
15546
- color: var(--jp-ui-font-color2) !important;
15673
+ color: var(--purple-500) !important;
15547
15674
  border-bottom: 2px solid transparent !important;
15548
15675
  }
15549
15676
 
@@ -15561,7 +15688,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
15561
15688
 
15562
15689
 
15563
15690
  .modal-content .amplify-tabs__item:hover {
15564
- color: var(--jp-ui-font-color1) !important;
15691
+ color: var(--purple-700) !important;
15565
15692
  }
15566
15693
 
15567
15694
  /* Override any default blue tab styling from Amplify */
@@ -15837,7 +15964,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
15837
15964
  margin: 0;
15838
15965
  font-family: var(--jp-ui-font-family);
15839
15966
  font-style: italic;
15840
- }`, "",{"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":""}]);
15841
15968
  // Exports
15842
15969
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
15843
15970
 
@@ -22236,4 +22363,4 @@ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js
22236
22363
  /***/ })
22237
22364
 
22238
22365
  }]);
22239
- //# sourceMappingURL=lib_index_js.4b7cd47a24bb24ef84ea.js.map
22366
+ //# sourceMappingURL=lib_index_js.31462f8f6a76b1cefbeb.js.map