mito-ai 0.1.39__py3-none-any.whl → 0.1.41__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.

Potentially problematic release.


This version of mito-ai might be problematic. Click here for more details.

Files changed (55) hide show
  1. mito_ai/__init__.py +12 -6
  2. mito_ai/_version.py +1 -1
  3. mito_ai/app_builder/handlers.py +1 -2
  4. mito_ai/completions/handlers.py +1 -1
  5. mito_ai/completions/message_history.py +9 -1
  6. mito_ai/completions/models.py +1 -1
  7. mito_ai/completions/prompt_builders/agent_execution_prompt.py +2 -0
  8. mito_ai/completions/prompt_builders/agent_smart_debug_prompt.py +8 -0
  9. mito_ai/completions/prompt_builders/agent_system_message.py +17 -0
  10. mito_ai/constants.py +3 -2
  11. mito_ai/file_uploads/__init__.py +3 -0
  12. mito_ai/file_uploads/handlers.py +225 -0
  13. mito_ai/file_uploads/urls.py +21 -0
  14. mito_ai/openai_client.py +1 -1
  15. mito_ai/tests/file_uploads/__init__.py +2 -0
  16. mito_ai/tests/file_uploads/test_handlers.py +267 -0
  17. mito_ai/tests/message_history/test_message_history_utils.py +57 -4
  18. mito_ai/utils/mito_server_utils.py +7 -0
  19. mito_ai/utils/server_limits.py +1 -1
  20. mito_ai/utils/telemetry_utils.py +26 -9
  21. {mito_ai-0.1.39.data → mito_ai-0.1.41.data}/data/share/jupyter/labextensions/mito_ai/build_log.json +102 -100
  22. {mito_ai-0.1.39.data → mito_ai-0.1.41.data}/data/share/jupyter/labextensions/mito_ai/package.json +4 -2
  23. {mito_ai-0.1.39.data → mito_ai-0.1.41.data}/data/share/jupyter/labextensions/mito_ai/schemas/mito_ai/package.json.orig +3 -1
  24. mito_ai-0.1.39.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.16b532b655cd2906e04a.js → mito_ai-0.1.41.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.01a962c68c8fae380f30.js +1782 -891
  25. mito_ai-0.1.41.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.01a962c68c8fae380f30.js.map +1 -0
  26. mito_ai-0.1.41.data/data/share/jupyter/labextensions/mito_ai/static/node_modules_aws-amplify_core_dist_esm_singleton_apis_fetchAuthSession_mjs.182232e7bc6311fe4528.js +63 -0
  27. mito_ai-0.1.41.data/data/share/jupyter/labextensions/mito_ai/static/node_modules_aws-amplify_core_dist_esm_singleton_apis_fetchAuthSession_mjs.182232e7bc6311fe4528.js.map +1 -0
  28. mito_ai-0.1.39.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.606207904e6aaa42b1bf.js → mito_ai-0.1.41.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.9a70f033717ba8689564.js +49 -25
  29. mito_ai-0.1.41.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.9a70f033717ba8689564.js.map +1 -0
  30. mito_ai-0.1.41.data/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_auth_dist_esm_providers_cognito_tokenProvider_tokenProvider_mjs.16430abf3466c3153f59.js +4574 -0
  31. mito_ai-0.1.41.data/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_auth_dist_esm_providers_cognito_tokenProvider_tokenProvider_mjs.16430abf3466c3153f59.js.map +1 -0
  32. mito_ai-0.1.41.data/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_core_dist_esm_singleton_Amplify_mjs.3c0035b95fe369aede82.js +2345 -0
  33. mito_ai-0.1.41.data/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_core_dist_esm_singleton_Amplify_mjs.3c0035b95fe369aede82.js.map +1 -0
  34. mito_ai-0.1.41.data/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_core_dist_esm_singleton_apis_fetchAuthSession_mjs-node_modul-758875.dc495fd682071d97070c.js +7498 -0
  35. mito_ai-0.1.41.data/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_core_dist_esm_singleton_apis_fetchAuthSession_mjs-node_modul-758875.dc495fd682071d97070c.js.map +1 -0
  36. mito_ai-0.1.41.data/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_dist_esm_index_mjs.6bac1a8c4cc93f15f6b7.js +1021 -0
  37. mito_ai-0.1.41.data/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_dist_esm_index_mjs.6bac1a8c4cc93f15f6b7.js.map +1 -0
  38. mito_ai-0.1.41.data/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_ui-react_dist_esm_index_mjs.61289bff0db44828605b.js +60178 -0
  39. mito_ai-0.1.41.data/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_ui-react_dist_esm_index_mjs.61289bff0db44828605b.js.map +1 -0
  40. {mito_ai-0.1.39.dist-info → mito_ai-0.1.41.dist-info}/METADATA +1 -1
  41. {mito_ai-0.1.39.dist-info → mito_ai-0.1.41.dist-info}/RECORD +53 -36
  42. mito_ai-0.1.39.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.16b532b655cd2906e04a.js.map +0 -1
  43. mito_ai-0.1.39.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.606207904e6aaa42b1bf.js.map +0 -1
  44. {mito_ai-0.1.39.data → mito_ai-0.1.41.data}/data/etc/jupyter/jupyter_server_config.d/mito_ai.json +0 -0
  45. {mito_ai-0.1.39.data → mito_ai-0.1.41.data}/data/share/jupyter/labextensions/mito_ai/schemas/mito_ai/toolbar-buttons.json +0 -0
  46. {mito_ai-0.1.39.data → mito_ai-0.1.41.data}/data/share/jupyter/labextensions/mito_ai/static/style.js +0 -0
  47. {mito_ai-0.1.39.data → mito_ai-0.1.41.data}/data/share/jupyter/labextensions/mito_ai/static/style_index_js.5876024bb17dbd6a3ee6.js +0 -0
  48. {mito_ai-0.1.39.data → mito_ai-0.1.41.data}/data/share/jupyter/labextensions/mito_ai/static/style_index_js.5876024bb17dbd6a3ee6.js.map +0 -0
  49. {mito_ai-0.1.39.data → mito_ai-0.1.41.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_semver_index_js.9795f79265ddb416864b.js +0 -0
  50. {mito_ai-0.1.39.data → mito_ai-0.1.41.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_semver_index_js.9795f79265ddb416864b.js.map +0 -0
  51. {mito_ai-0.1.39.data → mito_ai-0.1.41.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_vscode-diff_dist_index_js.ea55f1f9346638aafbcf.js +0 -0
  52. {mito_ai-0.1.39.data → mito_ai-0.1.41.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_vscode-diff_dist_index_js.ea55f1f9346638aafbcf.js.map +0 -0
  53. {mito_ai-0.1.39.dist-info → mito_ai-0.1.41.dist-info}/WHEEL +0 -0
  54. {mito_ai-0.1.39.dist-info → mito_ai-0.1.41.dist-info}/entry_points.txt +0 -0
  55. {mito_ai-0.1.39.dist-info → mito_ai-0.1.41.dist-info}/licenses/LICENSE +0 -0
@@ -140,6 +140,7 @@ const AiChatPlugin = {
140
140
  });
141
141
  // Update jupyter settings to work best with mito-ai
142
142
  void (0,_jupyterSettingsManager__WEBPACK_IMPORTED_MODULE_10__.setRenameUntitledFileOnSave)(settingRegistry, documentManager);
143
+ void (0,_jupyterSettingsManager__WEBPACK_IMPORTED_MODULE_10__.setDefaultWindowingMode)(settingRegistry);
143
144
  // By returning a tracker token, we can require the token in other
144
145
  // plugins. This allows us to force plugin load order. For example,
145
146
  // we can ensure that the COMMAND_MITO_AI_OPEN_CHAT is created
@@ -523,9 +524,10 @@ __webpack_require__.r(__webpack_exports__);
523
524
  /* harmony export */ });
524
525
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
525
526
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
526
- /* harmony import */ var _components_TextButton__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../components/TextButton */ "./lib/components/TextButton.js");
527
- /* harmony import */ var _utils_errors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../utils/errors */ "./lib/utils/errors.js");
528
- /* harmony import */ var _utils_stripe__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../utils/stripe */ "./lib/utils/stripe.js");
527
+ /* harmony import */ var _utils_errors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../utils/errors */ "./lib/utils/errors.js");
528
+ /* harmony import */ var _utils_stripe__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../utils/stripe */ "./lib/utils/stripe.js");
529
+ /* harmony import */ var _restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../restAPI/RestAPI */ "./lib/restAPI/RestAPI.js");
530
+ /* harmony import */ var _style_AlertBlock_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../style/AlertBlock.css */ "./style/AlertBlock.css");
529
531
  /*
530
532
  * Copyright (c) Saga Inc.
531
533
  * Distributed under the terms of the GNU Affero General Public License v3.0 License.
@@ -534,21 +536,76 @@ __webpack_require__.r(__webpack_exports__);
534
536
 
535
537
 
536
538
 
539
+
540
+ // Add calendly link constant
541
+ const CALENDLY_LINK = 'https://calendly.com/jake_from_mito/mito-meeting';
537
542
  const AlertBlock = ({ content, mitoAIConnectionErrorType }) => {
538
- if (mitoAIConnectionErrorType === _utils_errors__WEBPACK_IMPORTED_MODULE_1__.FREE_TIER_LIMIT_REACHED_ERROR_TITLE) {
539
- return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chat-message-alert" },
540
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null,
541
- "You've used up your free trial of Mito AI for this month. To continue using Mito AI now, upgrade to ",
542
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", { href: "https://www.trymito.io/plans", target: "_blank", rel: "noreferrer" }, "Mito Pro"),
543
- " and get access to:"),
544
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement("ul", null,
545
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null, "Unlimited AI Chat and Agent"),
546
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null, "Unlimited AI Autocompletes"),
547
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null, "All Mito Spreadsheet Pro features")),
548
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null, "Or supply your own Open AI Key to continue using the basic version of Mito AI."),
549
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_TextButton__WEBPACK_IMPORTED_MODULE_2__["default"], { title: "Upgrade to Pro", text: "Upgrade to Pro", action: _utils_stripe__WEBPACK_IMPORTED_MODULE_3__.STRIPE_PAYMENT_LINK, variant: "purple", width: "block" })));
550
- }
551
- return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chat-message-alert" }, content));
543
+ const [showEmailDetails, setShowEmailDetails] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
544
+ // The first time this AlertBlock is rendered, log the error type
545
+ (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
546
+ void (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_2__.logEvent)('alert_block_displayed', { 'type': mitoAIConnectionErrorType, 'error': content });
547
+ }, []);
548
+ if (mitoAIConnectionErrorType === _utils_errors__WEBPACK_IMPORTED_MODULE_3__.FREE_TIER_LIMIT_REACHED_ERROR_TITLE) {
549
+ return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chat-message-alert-container upgrade" },
550
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chat-message-alert" },
551
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "alert-error-message" }, "Free Trial Limit Reached")),
552
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", { className: "alert-actions-title" }, "You've used up your free trial of Mito AI for this month."),
553
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", { className: "alert-actions-title", style: { marginTop: '0px', marginBottom: '5px' } }, "Choose how you'd like to continue:"),
554
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("ol", { style: { margin: '0', paddingLeft: '20px' } },
555
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null,
556
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("form", { action: _utils_stripe__WEBPACK_IMPORTED_MODULE_4__.STRIPE_PAYMENT_LINK, method: "POST", target: "_blank", style: { display: 'inline' } },
557
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { type: "submit", className: "secondary-option-link", style: {
558
+ background: 'none',
559
+ border: 'none',
560
+ padding: 0,
561
+ font: 'inherit',
562
+ color: 'var(--purple-700)',
563
+ textDecoration: 'underline',
564
+ cursor: 'pointer',
565
+ transition: 'color 0.2s ease'
566
+ } }, "Upgrade to Mito Pro")),
567
+ ' ',
568
+ " for unlimited AI access and dedicated support"),
569
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null,
570
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { onClick: () => {
571
+ window.open(CALENDLY_LINK, '_blank');
572
+ }, className: "secondary-option-link", style: {
573
+ background: 'none',
574
+ border: 'none',
575
+ padding: 0,
576
+ font: 'inherit',
577
+ color: 'var(--purple-700)',
578
+ textDecoration: 'underline',
579
+ cursor: 'pointer',
580
+ transition: 'color 0.2s ease'
581
+ } }, "Schedule a call with our founders"),
582
+ ' ',
583
+ " to get 3 free months of Mito Pro"),
584
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null,
585
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", { href: "https://docs.trymito.io/mito-ai/configuring-ai-provider-keys", target: "_blank", rel: "noreferrer", className: "secondary-option-link" }, "Use your own API keys"),
586
+ ' ',
587
+ " to continue using Mito AI"))));
588
+ }
589
+ return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chat-message-alert-container error" },
590
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chat-message-alert" },
591
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "alert-error-message" },
592
+ "\u26A0 ",
593
+ content)),
594
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null,
595
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", { className: "alert-actions-title" }, "If this issue persists, we recommend:"),
596
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("ul", { className: "alert-actions-list" },
597
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null, "Restarting JupyterLab completely"),
598
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null, "Upgrading to the latest version of Mito AI"),
599
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null,
600
+ "Sending us an email to founders@sagacollab.com \u00A0",
601
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "details-toggle" },
602
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { type: "button", onClick: () => setShowEmailDetails(!showEmailDetails), className: "toggle-button" },
603
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "toggle-text" }, " Info to send us"),
604
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: `toggle-caret ${showEmailDetails ? 'open' : ''}` }, "\u25BC"))),
605
+ showEmailDetails && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "details-content" },
606
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null, "A screenshot of your entire Jupyter window"),
607
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null, "A screenshot of your browser's console. You can access this by right clicking on this error message, clicking \"Inspect\", and then clicking the \"Console\" tab. Then find the red error message at the bottom of the console and screenshot it."),
608
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null, "Your `pip list` output"))))))));
552
609
  };
553
610
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AlertBlock);
554
611
 
@@ -586,10 +643,11 @@ __webpack_require__.r(__webpack_exports__);
586
643
 
587
644
 
588
645
 
589
- const AssistantCodeBlock = ({ code, codeSummary, isCodeComplete, renderMimeRegistry, previewAICode, acceptAICode, rejectAICode, isLastAiMessage, codeReviewStatus, agentModeEnabled, isErrorFixup }) => {
646
+ const AssistantCodeBlock = ({ code, codeSummary, isCodeComplete, renderMimeRegistry, previewAICode, acceptAICode, rejectAICode, isLastAiMessage, codeReviewStatus, agentModeEnabled, isErrorFixup, }) => {
590
647
  const [isCodeExpanded, setIsCodeExpanded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
591
648
  const shouldShowToolbar = isLastAiMessage || isCodeComplete;
592
649
  if (agentModeEnabled) {
650
+ // Handle regular code blocks
593
651
  return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: (0,_utils_classNames__WEBPACK_IMPORTED_MODULE_3__.classNames)('code-block-container', 'agent-mode', {
594
652
  'agent-mode-collapsed': !isCodeExpanded,
595
653
  }) },
@@ -906,12 +964,13 @@ __webpack_require__.r(__webpack_exports__);
906
964
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
907
965
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
908
966
  /* harmony import */ var _utils_classNames__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../utils/classNames */ "./lib/utils/classNames.js");
909
- /* harmony import */ var _ChatDropdown__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./ChatDropdown */ "./lib/Extensions/AiChat/ChatMessage/ChatDropdown.js");
967
+ /* harmony import */ var _ChatDropdown__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./ChatDropdown */ "./lib/Extensions/AiChat/ChatMessage/ChatDropdown.js");
910
968
  /* harmony import */ var _utils_notebook__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../utils/notebook */ "./lib/utils/notebook.js");
911
969
  /* harmony import */ var _style_ChatInput_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../style/ChatInput.css */ "./style/ChatInput.css");
912
970
  /* harmony import */ var _style_ChatDropdown_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../style/ChatDropdown.css */ "./style/ChatDropdown.css");
913
971
  /* harmony import */ var _hooks_useDebouncedFunction__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../hooks/useDebouncedFunction */ "./lib/hooks/useDebouncedFunction.js");
914
- /* harmony import */ var _components_SelectedContextContainer__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../components/SelectedContextContainer */ "./lib/components/SelectedContextContainer.js");
972
+ /* harmony import */ var _components_SelectedContextContainer__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../../components/SelectedContextContainer */ "./lib/components/SelectedContextContainer.js");
973
+ /* harmony import */ var _components_AttachFileButton__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../components/AttachFileButton */ "./lib/components/AttachFileButton.js");
915
974
  /* harmony import */ var _components_DatabaseButton__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../components/DatabaseButton */ "./lib/components/DatabaseButton.js");
916
975
  /*
917
976
  * Copyright (c) Saga Inc.
@@ -926,6 +985,7 @@ __webpack_require__.r(__webpack_exports__);
926
985
 
927
986
 
928
987
 
988
+
929
989
  const ChatInput = ({ app, initialContent, placeholder, onSave, onCancel, isEditing, contextManager, notebookTracker, agentModeEnabled = false, agentExecutionStatus = 'idle', }) => {
930
990
  var _a;
931
991
  const [input, setInput] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(initialContent);
@@ -937,6 +997,16 @@ const ChatInput = ({ app, initialContent, placeholder, onSave, onCancel, isEditi
937
997
  const [dropdownFilter, setDropdownFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('');
938
998
  const [additionalContext, setAdditionalContext] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);
939
999
  const [isDropdownFromButton, setIsDropdownFromButton] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
1000
+ const handleFileUploaded = (fileName) => {
1001
+ // Add the uploaded file to the additional context
1002
+ setAdditionalContext(prev => [
1003
+ ...prev, {
1004
+ type: 'file',
1005
+ value: fileName,
1006
+ display: fileName
1007
+ }
1008
+ ]);
1009
+ };
940
1010
  // Debounce the active cell ID change to avoid multiple rerenders.
941
1011
  // We use this to avoid a flickering screen when the active cell changes.
942
1012
  const debouncedSetActiveCellID = (0,_hooks_useDebouncedFunction__WEBPACK_IMPORTED_MODULE_4__.useDebouncedFunction)((newID) => {
@@ -1141,6 +1211,7 @@ const ChatInput = ({ app, initialContent, placeholder, onSave, onCancel, isEditi
1141
1211
  return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: (0,_utils_classNames__WEBPACK_IMPORTED_MODULE_5__.classNames)("chat-input-container") },
1142
1212
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: 'context-container' },
1143
1213
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_DatabaseButton__WEBPACK_IMPORTED_MODULE_6__["default"], { app: app }),
1214
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_AttachFileButton__WEBPACK_IMPORTED_MODULE_7__["default"], { onFileUploaded: handleFileUploaded, notebookTracker: notebookTracker }),
1144
1215
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { className: "context-button", onClick: () => {
1145
1216
  var _a;
1146
1217
  setDropdownVisible(true);
@@ -1148,7 +1219,7 @@ const ChatInput = ({ app, initialContent, placeholder, onSave, onCancel, isEditi
1148
1219
  setIsDropdownFromButton(true);
1149
1220
  (_a = textAreaRef.current) === null || _a === void 0 ? void 0 : _a.focus();
1150
1221
  } }, "\uFF20 Add Context"),
1151
- additionalContext.map((context, index) => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_SelectedContextContainer__WEBPACK_IMPORTED_MODULE_7__["default"], { key: `${context.type}-${context.value}-${index}`, title: context.type === 'db' && context.display ? context.display : context.value, type: context.type, onRemove: () => setAdditionalContext(additionalContext.filter((_, i) => i !== index)), notebookTracker: notebookTracker, activeCellID: activeCellID })))),
1222
+ additionalContext.map((context, index) => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_SelectedContextContainer__WEBPACK_IMPORTED_MODULE_8__["default"], { key: `${context.type}-${context.value}-${index}`, title: context.display || context.value, type: context.type, onRemove: () => setAdditionalContext(additionalContext.filter((_, i) => i !== index)), notebookTracker: notebookTracker, activeCellID: activeCellID })))),
1152
1223
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: 'chat-input-text-area-container' },
1153
1224
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("textarea", { ref: textAreaRef, className: (0,_utils_classNames__WEBPACK_IMPORTED_MODULE_5__.classNames)("message", "message-user", 'chat-input', { "agent-mode": agentModeEnabled }), placeholder: placeholder, value: input, disabled: agentExecutionStatus === 'working' || agentExecutionStatus === 'stopping', onChange: handleInputChange, onKeyDown: (e) => {
1154
1225
  // If dropdown is visible, only handle escape to close it
@@ -1177,7 +1248,7 @@ const ChatInput = ({ app, initialContent, placeholder, onSave, onCancel, isEditi
1177
1248
  }
1178
1249
  }
1179
1250
  } }),
1180
- isDropdownVisible && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_ChatDropdown__WEBPACK_IMPORTED_MODULE_8__["default"], { options: expandedVariables, onSelect: handleOptionSelect, filterText: dropdownFilter, isDropdownFromButton: isDropdownFromButton, onFilterChange: setDropdownFilter, onClose: handleDropdownClose }))),
1251
+ isDropdownVisible && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_ChatDropdown__WEBPACK_IMPORTED_MODULE_9__["default"], { options: expandedVariables, onSelect: handleOptionSelect, filterText: dropdownFilter, isDropdownFromButton: isDropdownFromButton, onFilterChange: setDropdownFilter, onClose: handleDropdownClose }))),
1181
1252
  isEditing &&
1182
1253
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "message-edit-buttons" },
1183
1254
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { onClick: () => onSave(input, undefined, mapAdditionalContext()) }, "Save"),
@@ -1218,6 +1289,7 @@ __webpack_require__.r(__webpack_exports__);
1218
1289
  /* harmony import */ var _components_AgentComponents_GetCellOutputToolUI__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../../components/AgentComponents/GetCellOutputToolUI */ "./lib/components/AgentComponents/GetCellOutputToolUI.js");
1219
1290
  /* harmony import */ var _components_AgentComponents_AssumptionToolUI__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../components/AgentComponents/AssumptionToolUI */ "./lib/components/AgentComponents/AssumptionToolUI.js");
1220
1291
  /* harmony import */ var _components_SelectedContextContainer__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../components/SelectedContextContainer */ "./lib/components/SelectedContextContainer.js");
1292
+ /* harmony import */ var _components_AgentComponents_RunAllCellsToolUI__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../../components/AgentComponents/RunAllCellsToolUI */ "./lib/components/AgentComponents/RunAllCellsToolUI.js");
1221
1293
  /*
1222
1294
  * Copyright (c) Saga Inc.
1223
1295
  * Distributed under the terms of the GNU Affero General Public License v3.0 License.
@@ -1241,6 +1313,7 @@ __webpack_require__.r(__webpack_exports__);
1241
1313
 
1242
1314
 
1243
1315
 
1316
+
1244
1317
  const ChatMessage = ({ app, message, promptType, agentResponse, messageIndex, mitoAIConnectionError, mitoAIConnectionErrorType, notebookTracker, renderMimeRegistry, isLastAiMessage, isLastMessage, operatingSystem, previewAICode, acceptAICode, rejectAICode, onUpdateMessage, contextManager, codeReviewStatus, setNextSteps, agentModeEnabled, additionalContext, }) => {
1245
1318
  const [isEditing, setIsEditing] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
1246
1319
  if (message.role !== 'user' && message.role !== 'assistant') {
@@ -1294,7 +1367,7 @@ const ChatMessage = ({ app, message, promptType, agentResponse, messageIndex, mi
1294
1367
  // An empty code will look like this '```python ```'
1295
1368
  if (messagePart.length > 14) {
1296
1369
  return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null,
1297
- message.role === 'user' ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_UserCodeBlock__WEBPACK_IMPORTED_MODULE_7__["default"], { code: messagePart, renderMimeRegistry: renderMimeRegistry, agentModeEnabled: agentModeEnabled })) : (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_AssistantCodeBlock__WEBPACK_IMPORTED_MODULE_8__["default"], { code: messagePart, codeSummary: (_b = (_a = agentResponse === null || agentResponse === void 0 ? void 0 : agentResponse.cell_update) === null || _a === void 0 ? void 0 : _a.code_summary) !== null && _b !== void 0 ? _b : undefined, isCodeComplete: isCodeComplete, renderMimeRegistry: renderMimeRegistry, previewAICode: previewAICode, acceptAICode: acceptAICode, rejectAICode: rejectAICode, isLastAiMessage: isLastAiMessage, codeReviewStatus: codeReviewStatus, agentModeEnabled: agentModeEnabled })),
1370
+ message.role === 'user' ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_UserCodeBlock__WEBPACK_IMPORTED_MODULE_7__["default"], { code: messagePart, renderMimeRegistry: renderMimeRegistry, agentModeEnabled: agentModeEnabled })) : (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_AssistantCodeBlock__WEBPACK_IMPORTED_MODULE_8__["default"], { code: messagePart, codeSummary: (_b = (_a = agentResponse === null || agentResponse === void 0 ? void 0 : agentResponse.cell_update) === null || _a === void 0 ? void 0 : _a.code_summary) !== null && _b !== void 0 ? _b : ((agentResponse === null || agentResponse === void 0 ? void 0 : agentResponse.type) === 'run_all_cells' ? 'Running all cells' : undefined), isCodeComplete: isCodeComplete, renderMimeRegistry: renderMimeRegistry, previewAICode: previewAICode, acceptAICode: acceptAICode, rejectAICode: rejectAICode, isLastAiMessage: isLastAiMessage, codeReviewStatus: codeReviewStatus, agentModeEnabled: agentModeEnabled })),
1298
1371
  isLastAiMessage && isCodeComplete && codeReviewStatus === 'chatPreview' &&
1299
1372
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: 'chat-message-buttons' },
1300
1373
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_TextAndIconButton__WEBPACK_IMPORTED_MODULE_9__["default"], { onClick: () => { previewAICode(); }, text: 'Overwrite Active Cell', icon: _icons_PlayButtonIcon__WEBPACK_IMPORTED_MODULE_10__["default"], title: 'Write the Ai generated code to the active cell in the jupyter notebook, replacing the current code.', variant: 'gray', width: 'fit-contents' }),
@@ -1332,7 +1405,9 @@ const ChatMessage = ({ app, message, promptType, agentResponse, messageIndex, mi
1332
1405
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { className: "message-start-editing-button", onClick: handleEditClick, title: "Edit message" },
1333
1406
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_Pencil__WEBPACK_IMPORTED_MODULE_17__["default"], null))),
1334
1407
  (agentResponse === null || agentResponse === void 0 ? void 0 : agentResponse.type) === 'get_cell_output' &&
1335
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_AgentComponents_GetCellOutputToolUI__WEBPACK_IMPORTED_MODULE_18__["default"], null)));
1408
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_AgentComponents_GetCellOutputToolUI__WEBPACK_IMPORTED_MODULE_18__["default"], null),
1409
+ (agentResponse === null || agentResponse === void 0 ? void 0 : agentResponse.type) === 'run_all_cells' && agentModeEnabled &&
1410
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_AgentComponents_RunAllCellsToolUI__WEBPACK_IMPORTED_MODULE_19__["default"], null)));
1336
1411
  };
1337
1412
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ChatMessage);
1338
1413
 
@@ -2616,6 +2691,22 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
2616
2691
  // in the next loop iteration
2617
2692
  sendCellIDOutput = agentResponse.get_cell_output_cell_id;
2618
2693
  }
2694
+ if (agentResponse.type === 'run_all_cells') {
2695
+ const result = await (0,_utils_agentActions__WEBPACK_IMPORTED_MODULE_17__.runAllCells)(app, notebookTracker);
2696
+ // If run_all_cells resulted in an error, handle it through the error fixup process
2697
+ if (!result.success && result.errorMessage && result.errorCellId) {
2698
+ // Set the error cell as active so the error retry logic can work with it
2699
+ (0,_utils_notebook__WEBPACK_IMPORTED_MODULE_13__.setActiveCellByID)(notebookTracker, result.errorCellId);
2700
+ const status = await (0,_utils_agentActions__WEBPACK_IMPORTED_MODULE_17__.retryIfExecutionError)(notebookTracker, app, getDuplicateChatHistoryManager, addAIMessageFromResponseAndUpdateState, sendAgentSmartDebugMessage, previewAICodeToActiveCell, acceptAICode, shouldContinueAgentExecution, finalizeAgentStop, chatHistoryManagerRef);
2701
+ if (status === 'interupted') {
2702
+ break;
2703
+ }
2704
+ if (status === 'failure') {
2705
+ addAIMessageFromResponseAndUpdateState("I apologize, but I encountered an error while running all cells and was unable to fix it after multiple attempts. You may want to check the notebook for errors.", 'agent:execution', chatHistoryManager);
2706
+ break;
2707
+ }
2708
+ }
2709
+ }
2619
2710
  }
2620
2711
  if (agentExecutionDepth > AGENT_EXECUTION_DEPTH_LIMIT) {
2621
2712
  addAIMessageFromResponseAndUpdateState("Since I've been working for a while now, give my work a review and then tell me how to continue.", 'agent:execution', chatHistoryManager);
@@ -3279,6 +3370,7 @@ const getFirstMessageFromCookie = () => {
3279
3370
 
3280
3371
  __webpack_require__.r(__webpack_exports__);
3281
3372
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
3373
+ /* harmony export */ setDefaultWindowingMode: () => (/* binding */ setDefaultWindowingMode),
3282
3374
  /* harmony export */ setRenameUntitledFileOnSave: () => (/* binding */ setRenameUntitledFileOnSave)
3283
3375
  /* harmony export */ });
3284
3376
  /*
@@ -3287,6 +3379,7 @@ __webpack_require__.r(__webpack_exports__);
3287
3379
  */
3288
3380
  // Document manager plugin ID
3289
3381
  const DOCMANAGER_PLUGIN_ID = '@jupyterlab/docmanager-extension:plugin';
3382
+ const NOTEBOOK_PLUGIN_ID = '@jupyterlab/notebook-extension:tracker';
3290
3383
  // Set renameUntitledFileOnSave to false when the extension loads
3291
3384
  const setRenameUntitledFileOnSave = async (settingRegistry, _documentManager) => {
3292
3385
  // Note we don't use the documentManager, but we require it as a parameter to make sure
@@ -3295,7 +3388,15 @@ const setRenameUntitledFileOnSave = async (settingRegistry, _documentManager) =>
3295
3388
  await settingRegistry.set(DOCMANAGER_PLUGIN_ID, 'renameUntitledFileOnSave', false);
3296
3389
  }
3297
3390
  catch (error) {
3298
- console.error('Failed to set renameUntitledFileOnSave setting:', error);
3391
+ console.error('[mito-ai jupyter settings manager] Failed to set renameUntitledFileOnSave setting:', error);
3392
+ }
3393
+ };
3394
+ const setDefaultWindowingMode = async (settingRegistry) => {
3395
+ try {
3396
+ await settingRegistry.set(NOTEBOOK_PLUGIN_ID, 'windowingMode', 'defer');
3397
+ }
3398
+ catch (error) {
3399
+ console.log('[mito-ai jupyter settings manager] Failed to set windowingMode to defer', error);
3299
3400
  }
3300
3401
  };
3301
3402
 
@@ -3513,12 +3614,13 @@ __webpack_require__.r(__webpack_exports__);
3513
3614
  /* harmony import */ var _jupyterlab_coreutils__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_jupyterlab_coreutils__WEBPACK_IMPORTED_MODULE_0__);
3514
3615
  /* harmony import */ var _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @jupyterlab/apputils */ "webpack/sharing/consume/default/@jupyterlab/apputils");
3515
3616
  /* harmony import */ var _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__);
3516
- /* harmony import */ var _requirementsUtils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./requirementsUtils */ "./lib/Extensions/AppBuilder/requirementsUtils.js");
3517
- /* harmony import */ var _fileUtils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./fileUtils */ "./lib/Extensions/AppBuilder/fileUtils.js");
3617
+ /* harmony import */ var _requirementsUtils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./requirementsUtils */ "./lib/Extensions/AppBuilder/requirementsUtils.js");
3618
+ /* harmony import */ var _fileUtils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./fileUtils */ "./lib/Extensions/AppBuilder/fileUtils.js");
3518
3619
  /* harmony import */ var _lumino_coreutils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @lumino/coreutils */ "webpack/sharing/consume/default/@lumino/coreutils");
3519
3620
  /* harmony import */ var _lumino_coreutils__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_lumino_coreutils__WEBPACK_IMPORTED_MODULE_2__);
3520
- /* harmony import */ var _DeployAppNotification__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./DeployAppNotification */ "./lib/Extensions/AppBuilder/DeployAppNotification.js");
3621
+ /* harmony import */ var _DeployAppNotification__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./DeployAppNotification */ "./lib/Extensions/AppBuilder/DeployAppNotification.js");
3521
3622
  /* harmony import */ var _auth__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./auth */ "./lib/Extensions/AppBuilder/auth.js");
3623
+ /* harmony import */ var _authPopupUtils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./authPopupUtils */ "./lib/Extensions/AppBuilder/authPopupUtils.js");
3522
3624
  /*
3523
3625
  * Copyright (c) Saga Inc.
3524
3626
  * Distributed under the terms of the GNU Affero General Public License v3.0 License.
@@ -3530,15 +3632,32 @@ __webpack_require__.r(__webpack_exports__);
3530
3632
 
3531
3633
 
3532
3634
 
3635
+
3533
3636
  /*
3534
3637
  This function generates a requirements.txt file that lists the dependencies for the streamlit app
3535
3638
  */
3536
3639
  const convertNotebookToStreamlit = async (notebookTracker, appBuilderService) => {
3537
- // Check authentication before proceeding with deployment
3538
- const isAuthenticated = await (0,_auth__WEBPACK_IMPORTED_MODULE_3__.checkAuthenticationAndRedirect)();
3539
- if (!isAuthenticated) {
3640
+ let jwtToken = await (0,_auth__WEBPACK_IMPORTED_MODULE_3__.getJWTToken)();
3641
+ if (!jwtToken) {
3642
+ // No token found, show authentication popup
3540
3643
  console.log('User not authenticated, redirected to signup');
3541
- return;
3644
+ try {
3645
+ const user = await (0,_authPopupUtils__WEBPACK_IMPORTED_MODULE_4__.showAuthenticationPopup)();
3646
+ console.log('User authenticated successfully:', user);
3647
+ // Try to get the JWT token again after successful authentication
3648
+ jwtToken = await (0,_auth__WEBPACK_IMPORTED_MODULE_3__.getJWTToken)();
3649
+ if (!jwtToken) {
3650
+ console.error('JWT token still not available after authentication');
3651
+ _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.Notification.emit('Authentication failed - JWT token not found', 'error', {
3652
+ autoClose: false
3653
+ });
3654
+ return;
3655
+ }
3656
+ }
3657
+ catch (error) {
3658
+ console.log('Authentication cancelled or failed:', error);
3659
+ return; // Exit early if authentication was cancelled
3660
+ }
3542
3661
  }
3543
3662
  const notebookPanel = notebookTracker.currentWidget;
3544
3663
  if (!notebookPanel) {
@@ -3552,15 +3671,14 @@ const convertNotebookToStreamlit = async (notebookTracker, appBuilderService) =>
3552
3671
  console.log('Current working directory info:', notebookPanel.context);
3553
3672
  // Build the requirements.txt file
3554
3673
  console.debug("Building requirements.txt file");
3555
- const requirementsContent = await (0,_requirementsUtils__WEBPACK_IMPORTED_MODULE_4__.generateRequirementsTxt)(notebookTracker);
3674
+ const requirementsContent = await (0,_requirementsUtils__WEBPACK_IMPORTED_MODULE_5__.generateRequirementsTxt)(notebookTracker);
3556
3675
  // Save the files to the current directory
3557
- await (0,_fileUtils__WEBPACK_IMPORTED_MODULE_5__.saveFileWithKernel)(notebookTracker, './requirements.txt', requirementsContent);
3676
+ await (0,_fileUtils__WEBPACK_IMPORTED_MODULE_6__.saveFileWithKernel)(notebookTracker, './requirements.txt', requirementsContent);
3558
3677
  // After building the files, we need to send a request to the backend to deploy the app
3559
3678
  if (appBuilderService) {
3560
3679
  try {
3561
3680
  console.log("Sending request to deploy the app");
3562
- // Get JWT token for authentication
3563
- const jwtToken = (0,_auth__WEBPACK_IMPORTED_MODULE_3__.getJWTToken)();
3681
+ // Use the JWT token that was already obtained or refreshed above
3564
3682
  const response = await appBuilderService.client.sendMessage({
3565
3683
  type: 'build-app',
3566
3684
  message_id: _lumino_coreutils__WEBPACK_IMPORTED_MODULE_2__.UUID.uuid4(),
@@ -3575,7 +3693,7 @@ const convertNotebookToStreamlit = async (notebookTracker, appBuilderService) =>
3575
3693
  else {
3576
3694
  console.log("App deployment response:", response);
3577
3695
  const url = response.url;
3578
- (0,_DeployAppNotification__WEBPACK_IMPORTED_MODULE_6__.deployAppNotification)(url);
3696
+ (0,_DeployAppNotification__WEBPACK_IMPORTED_MODULE_7__.deployAppNotification)(url);
3579
3697
  }
3580
3698
  }
3581
3699
  catch (error) {
@@ -3589,6 +3707,116 @@ const convertNotebookToStreamlit = async (notebookTracker, appBuilderService) =>
3589
3707
  };
3590
3708
 
3591
3709
 
3710
+ /***/ }),
3711
+
3712
+ /***/ "./lib/Extensions/AppBuilder/auth-popup-deploy.js":
3713
+ /*!********************************************************!*\
3714
+ !*** ./lib/Extensions/AppBuilder/auth-popup-deploy.js ***!
3715
+ \********************************************************/
3716
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3717
+
3718
+ __webpack_require__.r(__webpack_exports__);
3719
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
3720
+ /* harmony export */ AuthPopup: () => (/* binding */ AuthPopup)
3721
+ /* harmony export */ });
3722
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
3723
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
3724
+ /* harmony import */ var _aws_amplify_ui_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @aws-amplify/ui-react */ "webpack/sharing/consume/default/@aws-amplify/ui-react/@aws-amplify/ui-react");
3725
+ /* harmony import */ var _aws_amplify_ui_react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_aws_amplify_ui_react__WEBPACK_IMPORTED_MODULE_1__);
3726
+ /* harmony import */ var _aws_amplify_ui_react_styles_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @aws-amplify/ui-react/styles.css */ "./node_modules/@aws-amplify/ui-react/dist/styles.css");
3727
+ /* harmony import */ var _style_ConnectionForm_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../style/ConnectionForm.css */ "./style/ConnectionForm.css");
3728
+ /* harmony import */ var _style_button_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../style/button.css */ "./style/button.css");
3729
+ /* harmony import */ var _style_AuthPopup_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../style/AuthPopup.css */ "./style/AuthPopup.css");
3730
+ /*
3731
+ * Copyright (c) Saga Inc.
3732
+ * Distributed under the terms of the GNU Affero General Public License v3.0 License.
3733
+ */
3734
+ // auth-popup.tsx - Simple authentication popup with CSS-based requirements
3735
+
3736
+
3737
+
3738
+
3739
+
3740
+
3741
+ const AuthPopup = ({ isOpen, onClose, onSuccess }) => {
3742
+ // Track if we've already called onSuccess to prevent infinite loops
3743
+ const hasCalledOnSuccess = react__WEBPACK_IMPORTED_MODULE_0___default().useRef(false);
3744
+ // Track if we should show progress bar
3745
+ const [showProgress, setShowProgress] = react__WEBPACK_IMPORTED_MODULE_0___default().useState(false);
3746
+ // Cleanup on unmount
3747
+ react__WEBPACK_IMPORTED_MODULE_0___default().useEffect(() => {
3748
+ return () => {
3749
+ setShowProgress(false);
3750
+ };
3751
+ }, []);
3752
+ if (!isOpen)
3753
+ return null;
3754
+ return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "modal-overlay" },
3755
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "modal-content" },
3756
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "modal-header" },
3757
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h3", null, "Sign In / Sign Up"),
3758
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { onClick: onClose, className: "modal-close-button", title: "Close" }, "\u00D7")),
3759
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_aws_amplify_ui_react__WEBPACK_IMPORTED_MODULE_1__.Authenticator, { loginMechanisms: ['email'], signUpAttributes: ['name', 'email'], formFields: {
3760
+ signUp: {
3761
+ name: {
3762
+ order: 1,
3763
+ placeholder: 'Enter your full name',
3764
+ label: 'Full Name *',
3765
+ required: true
3766
+ },
3767
+ email: {
3768
+ order: 2,
3769
+ placeholder: 'Enter your email address',
3770
+ label: 'Email *'
3771
+ },
3772
+ password: {
3773
+ order: 3,
3774
+ placeholder: 'Enter your password',
3775
+ label: 'Password *',
3776
+ required: true
3777
+ },
3778
+ confirm_password: {
3779
+ order: 4,
3780
+ placeholder: 'Confirm your password',
3781
+ label: 'Confirm Password *'
3782
+ }
3783
+ }
3784
+ } }, ({ user }) => {
3785
+ // Call onSuccess when user is authenticated, but only once and with delay
3786
+ if (user && !hasCalledOnSuccess.current) {
3787
+ // Show the progress bar
3788
+ setShowProgress(true);
3789
+ // Give users time to see the success message before calling onSuccess
3790
+ setTimeout(() => {
3791
+ if (!hasCalledOnSuccess.current) {
3792
+ hasCalledOnSuccess.current = true;
3793
+ onSuccess(user);
3794
+ }
3795
+ }, 3000); // 3 second delay
3796
+ }
3797
+ // If user is signed in, show the welcome message
3798
+ if (user) {
3799
+ return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "welcome-message-container" },
3800
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", { className: "welcome-message-title" }, "Welcome to mito!"),
3801
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", { className: "welcome-message-description" }, "You're all set to deploy your app."),
3802
+ showProgress && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "progress-bar-container" },
3803
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "progress-bar-fill" }))),
3804
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", { className: "progress-bar-timer" }, "Closing automatically in a few seconds...")));
3805
+ }
3806
+ // If user is not signed in, don't render anything here
3807
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { style: { display: 'none' } });
3808
+ }),
3809
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "password-requirements" },
3810
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null, "Password Requirements:"),
3811
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("ul", null,
3812
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null, "At least 8 characters long"),
3813
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null, "Contains at least one uppercase letter"),
3814
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null, "Contains at least one lowercase letter"),
3815
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null, "Contains at least one number"),
3816
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null, "Contains at least one special character"))))));
3817
+ };
3818
+
3819
+
3592
3820
  /***/ }),
3593
3821
 
3594
3822
  /***/ "./lib/Extensions/AppBuilder/auth.js":
@@ -3599,169 +3827,39 @@ const convertNotebookToStreamlit = async (notebookTracker, appBuilderService) =>
3599
3827
 
3600
3828
  __webpack_require__.r(__webpack_exports__);
3601
3829
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
3602
- /* harmony export */ checkAuthenticationAndRedirect: () => (/* binding */ checkAuthenticationAndRedirect),
3603
- /* harmony export */ exchangeCodeForTokens: () => (/* binding */ exchangeCodeForTokens),
3604
3830
  /* harmony export */ getAuthHeaders: () => (/* binding */ getAuthHeaders),
3605
- /* harmony export */ getJWTToken: () => (/* binding */ getJWTToken),
3606
- /* harmony export */ isUserAuthenticated: () => (/* binding */ isUserAuthenticated),
3607
- /* harmony export */ redirectToSignin: () => (/* binding */ redirectToSignin),
3608
- /* harmony export */ redirectToSignup: () => (/* binding */ redirectToSignup),
3609
- /* harmony export */ removeJWTToken: () => (/* binding */ removeJWTToken),
3610
- /* harmony export */ setJWTToken: () => (/* binding */ setJWTToken)
3831
+ /* harmony export */ getJWTToken: () => (/* binding */ getJWTToken)
3611
3832
  /* harmony export */ });
3612
- /* harmony import */ var _restAPI_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../restAPI/utils */ "./lib/restAPI/utils.js");
3833
+ /* harmony import */ var aws_amplify_auth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! aws-amplify/auth */ "./node_modules/@aws-amplify/core/dist/esm/singleton/apis/fetchAuthSession.mjs");
3834
+ /* harmony import */ var _aws_config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./aws-config */ "./lib/Extensions/AppBuilder/aws-config.js");
3613
3835
  /*
3614
3836
  * Copyright (c) Saga Inc.
3615
3837
  * Distributed under the terms of the GNU Affero General Public License v3.0 License.
3616
3838
  */
3617
3839
 
3618
- const domain_dev = 'https://mito-app-auth.auth.us-east-1.amazoncognito.com';
3619
- const client_id = '6ara3u3l8sss738hrhbq1qtiqf';
3620
- // Change this to domain_dev for dev deployments
3621
- const active_domain = domain_dev;
3622
- const currentUrl = window.location.href;
3623
- let redirectUrl;
3624
- // As of now we only support localhost:8888 because we have only allowed this redirect url on AWS conito
3625
- // We can modify the redirect to include other ports in the future
3626
- if (currentUrl.includes('localhost')) {
3627
- redirectUrl = 'http://localhost:8888/lab';
3628
- }
3629
- else if (currentUrl.includes('trymito')) {
3630
- redirectUrl = 'https://launch.trymito.io';
3631
- }
3632
- else {
3633
- redirectUrl = currentUrl;
3634
- }
3635
- console.log("currentUrl: ", currentUrl);
3636
- // AWS Cognito configuration
3637
- const COGNITO_CONFIG = {
3638
- SIGNUP_URL: `${active_domain}/signup?client_id=${client_id}&response_type=code&scope=email+openid+profile&redirect_uri=${redirectUrl}`,
3639
- SIGNIN_URL: `${active_domain}/login?client_id=${client_id}&response_type=code&scope=email+openid+profile&redirect_uri=${redirectUrl}`,
3640
- JWT_COOKIE_NAME: 'mito-auth-token',
3641
- JWT_COOKIE_EXPIRY_HOURS: 1
3642
- };
3643
- /**
3644
- * Check if user is authenticated by looking for JWT token in cookies
3645
- */
3646
- const isUserAuthenticated = () => {
3647
- const token = getJWTToken();
3648
- return token !== null && token !== undefined && token !== '';
3649
- };
3840
+
3841
+ // Ensure Amplify is configured before any auth operations
3842
+ (0,_aws_config__WEBPACK_IMPORTED_MODULE_0__.configureAmplify)();
3650
3843
  /**
3651
3844
  * Get JWT token from cookies
3652
3845
  */
3653
- const getJWTToken = () => {
3654
- const cookies = document.cookie.split(';');
3655
- const jwtCookie = cookies.find(cookie => cookie.trim().startsWith(`${COGNITO_CONFIG.JWT_COOKIE_NAME}=`));
3656
- if (jwtCookie) {
3657
- const token = jwtCookie.split('=')[1];
3658
- return token || null;
3659
- }
3660
- return null;
3661
- };
3662
- /**
3663
- * Set JWT token as a cookie
3664
- */
3665
- const setJWTToken = (token) => {
3666
- const date = new Date();
3667
- date.setTime(date.getTime() + (COGNITO_CONFIG.JWT_COOKIE_EXPIRY_HOURS * 60 * 60 * 1000));
3668
- const expires = "expires=" + date.toUTCString();
3669
- // Set cookie for all subdomains of trymito.io (production)
3670
- document.cookie = `${COGNITO_CONFIG.JWT_COOKIE_NAME}=${token}; ${expires}; path=/; domain=.trymito.io; SameSite=Lax; Secure`;
3671
- // For localhost development
3672
- if (window.location.hostname === 'localhost') {
3673
- document.cookie = `${COGNITO_CONFIG.JWT_COOKIE_NAME}=${token}; ${expires}; path=/`;
3674
- }
3675
- };
3676
- /**
3677
- * Remove JWT token from cookies
3678
- */
3679
- const removeJWTToken = () => {
3680
- // Delete for current domain
3681
- document.cookie = `${COGNITO_CONFIG.JWT_COOKIE_NAME}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`;
3682
- // Delete for all subdomains
3683
- document.cookie = `${COGNITO_CONFIG.JWT_COOKIE_NAME}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; domain=.trymito.io;`;
3684
- };
3685
- /**
3686
- * Exchange authorization code for JWT tokens
3687
- */
3688
- const exchangeCodeForTokens = async (code) => {
3846
+ const getJWTToken = async () => {
3847
+ var _a, _b;
3689
3848
  try {
3690
- const response = await (0,_restAPI_utils__WEBPACK_IMPORTED_MODULE_0__.requestAPI)('auth/token', {
3691
- method: 'POST',
3692
- body: JSON.stringify({ code })
3693
- });
3694
- if (response.error) {
3695
- console.error('Failed to exchange code for tokens:', response.error);
3696
- return false;
3697
- }
3698
- if (response.data) {
3699
- const data = response.data;
3700
- const { access_token } = data;
3701
- // Store the access token as the JWT token
3702
- if (access_token) {
3703
- setJWTToken(access_token);
3704
- return true;
3705
- }
3706
- }
3707
- return false;
3849
+ const session = await (0,aws_amplify_auth__WEBPACK_IMPORTED_MODULE_1__.fetchAuthSession)();
3850
+ const accessToken = (_b = (_a = session.tokens) === null || _a === void 0 ? void 0 : _a.accessToken) === null || _b === void 0 ? void 0 : _b.toString();
3851
+ return accessToken || '';
3708
3852
  }
3709
3853
  catch (error) {
3710
- console.error('Error exchanging code for tokens:', error);
3711
- return false;
3712
- }
3713
- };
3714
- /**
3715
- * Redirect user to AWS Cognito signup page
3716
- */
3717
- const redirectToSignup = () => {
3718
- window.location.href = COGNITO_CONFIG.SIGNUP_URL;
3719
- };
3720
- /**
3721
- * Redirect user to AWS Cognito signin page
3722
- */
3723
- const redirectToSignin = () => {
3724
- window.location.href = COGNITO_CONFIG.SIGNIN_URL;
3725
- };
3726
- /**
3727
- * Handle authentication check and redirect if needed
3728
- * Returns true if user is authenticated, false if redirected
3729
- */
3730
- const checkAuthenticationAndRedirect = async () => {
3731
- if (!isUserAuthenticated()) {
3732
- // Check if there's a code parameter in the URL (indicating return from Cognito)
3733
- const urlParams = new URLSearchParams(window.location.search);
3734
- const code = urlParams.get('code');
3735
- if (code) {
3736
- // User has returned from Cognito with authorization code
3737
- console.log('Received authorization code from Cognito:', code);
3738
- // Exchange the code for JWT tokens
3739
- const success = await exchangeCodeForTokens(code);
3740
- if (success) {
3741
- // Clean up URL
3742
- const newUrl = window.location.pathname;
3743
- window.history.replaceState({}, document.title, newUrl);
3744
- return true;
3745
- }
3746
- else {
3747
- // Failed to exchange code, redirect to signup
3748
- redirectToSignup();
3749
- return false;
3750
- }
3751
- }
3752
- else {
3753
- // No token and no code, redirect to signup
3754
- redirectToSignup();
3755
- return false;
3756
- }
3854
+ console.error('Error getting JWT token:', error);
3855
+ return '';
3757
3856
  }
3758
- return true;
3759
3857
  };
3760
3858
  /**
3761
3859
  * Get authentication headers for API requests
3762
3860
  */
3763
- const getAuthHeaders = () => {
3764
- const token = getJWTToken();
3861
+ const getAuthHeaders = async () => {
3862
+ const token = await getJWTToken();
3765
3863
  if (token) {
3766
3864
  return {
3767
3865
  'Authorization': `Bearer ${token}`
@@ -3771,6 +3869,101 @@ const getAuthHeaders = () => {
3771
3869
  };
3772
3870
 
3773
3871
 
3872
+ /***/ }),
3873
+
3874
+ /***/ "./lib/Extensions/AppBuilder/authPopupUtils.js":
3875
+ /*!*****************************************************!*\
3876
+ !*** ./lib/Extensions/AppBuilder/authPopupUtils.js ***!
3877
+ \*****************************************************/
3878
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3879
+
3880
+ __webpack_require__.r(__webpack_exports__);
3881
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
3882
+ /* harmony export */ showAuthenticationPopup: () => (/* binding */ showAuthenticationPopup)
3883
+ /* harmony export */ });
3884
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
3885
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
3886
+ /* harmony import */ var react_dom_client__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom/client */ "./node_modules/react-dom/client.js");
3887
+ /* harmony import */ var _auth_popup_deploy__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./auth-popup-deploy */ "./lib/Extensions/AppBuilder/auth-popup-deploy.js");
3888
+ /*
3889
+ * Copyright (c) Saga Inc.
3890
+ * Distributed under the terms of the GNU Affero General Public License v3.0 License.
3891
+ */
3892
+
3893
+
3894
+
3895
+ /**
3896
+ * Shows an authentication popup and returns a promise that resolves when authentication is successful
3897
+ */
3898
+ const showAuthenticationPopup = () => {
3899
+ return new Promise((resolve, reject) => {
3900
+ // Create a container for the popup
3901
+ const popupContainer = document.createElement('div');
3902
+ popupContainer.id = 'auth-popup-container';
3903
+ document.body.appendChild(popupContainer);
3904
+ // Create root for React 18
3905
+ const root = (0,react_dom_client__WEBPACK_IMPORTED_MODULE_1__.createRoot)(popupContainer);
3906
+ const handleSuccess = (user) => {
3907
+ // Clean up the popup
3908
+ root.unmount();
3909
+ document.body.removeChild(popupContainer);
3910
+ resolve(user);
3911
+ };
3912
+ const handleClose = () => {
3913
+ // Clean up the popup
3914
+ root.unmount();
3915
+ document.body.removeChild(popupContainer);
3916
+ reject(new Error('Authentication cancelled'));
3917
+ };
3918
+ // Render the AuthPopup
3919
+ root.render(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_auth_popup_deploy__WEBPACK_IMPORTED_MODULE_2__.AuthPopup, { isOpen: true, onSuccess: handleSuccess, onClose: handleClose }));
3920
+ });
3921
+ };
3922
+
3923
+
3924
+ /***/ }),
3925
+
3926
+ /***/ "./lib/Extensions/AppBuilder/aws-config.js":
3927
+ /*!*************************************************!*\
3928
+ !*** ./lib/Extensions/AppBuilder/aws-config.js ***!
3929
+ \*************************************************/
3930
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3931
+
3932
+ __webpack_require__.r(__webpack_exports__);
3933
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
3934
+ /* harmony export */ configureAmplify: () => (/* binding */ configureAmplify)
3935
+ /* harmony export */ });
3936
+ /* harmony import */ var aws_amplify__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! aws-amplify */ "webpack/sharing/consume/default/aws-amplify/aws-amplify?b926");
3937
+ /* harmony import */ var aws_amplify__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(aws_amplify__WEBPACK_IMPORTED_MODULE_0__);
3938
+ /*
3939
+ * Copyright (c) Saga Inc.
3940
+ * Distributed under the terms of the GNU Affero General Public License v3.0 License.
3941
+ */
3942
+
3943
+ const userPoolIdDev = 'us-east-1_Kk0f9mOfx';
3944
+ const userPoolClientIdDev = '6ara3u3l8sss738hrhbq1qtiqf';
3945
+ // TODO: modify to prod user ID and client ID on after creating teh cognito resources in prod
3946
+ const userPoolId = userPoolIdDev;
3947
+ const userPoolClientId = userPoolClientIdDev;
3948
+ const configureAmplify = () => {
3949
+ aws_amplify__WEBPACK_IMPORTED_MODULE_0__.Amplify.configure({
3950
+ Auth: {
3951
+ Cognito: {
3952
+ userPoolId: userPoolId,
3953
+ userPoolClientId: userPoolClientId,
3954
+ loginWith: {
3955
+ email: true,
3956
+ username: false,
3957
+ }
3958
+ },
3959
+ }
3960
+ });
3961
+ console.log('Amplify configuration loaded successfully');
3962
+ };
3963
+ // Configure immediately when this module is imported
3964
+ configureAmplify();
3965
+
3966
+
3774
3967
  /***/ }),
3775
3968
 
3776
3969
  /***/ "./lib/Extensions/AppBuilder/fileUtils.js":
@@ -4179,7 +4372,13 @@ def get_dataframe_structure(df, sample_size=5):
4179
4372
  # Handle None and NaN (convert to None, which maps to null in JSON)
4180
4373
  return None
4181
4374
  elif not isinstance(value, (str, int, float, bool, type(None))):
4182
- return str(value)
4375
+ value_str = str(value)
4376
+ if len(value_str) > 50:
4377
+ return value_str[:50] + "..."
4378
+ return value_str
4379
+ elif isinstance(value, str) and len(value) > 50:
4380
+ # Truncate strings longer than 50 characters
4381
+ return value[:50] + "..."
4183
4382
  return value
4184
4383
 
4185
4384
  structure = {}
@@ -4237,10 +4436,17 @@ def structured_globals():
4237
4436
 
4238
4437
  else:
4239
4438
 
4439
+ max_value_length = 4000 # This is roughly 1000 tokens in the LLM
4440
+ truncated_value = str(repr(v)) # Force to string
4441
+
4442
+ if len(truncated_value) > max_value_length:
4443
+ split_length = max_value_length // 2
4444
+ truncated_value = truncated_value[:split_length] + '... <middle of value truncated> ...' + truncated_value[-split_length:]
4445
+
4240
4446
  new_variable = {
4241
4447
  "variable_name": k,
4242
4448
  "type": str(type(v)),
4243
- "value": repr(v)
4449
+ "value": truncated_value
4244
4450
  }
4245
4451
 
4246
4452
  try:
@@ -6616,11 +6822,12 @@ __webpack_require__.r(__webpack_exports__);
6616
6822
  /* harmony import */ var _utils_classNames__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/classNames */ "./lib/utils/classNames.js");
6617
6823
  /* harmony import */ var _utils_strings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/strings */ "./lib/utils/strings.js");
6618
6824
  /* harmony import */ var _Extensions_AiChat_ChatMessage_PythonCode__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../Extensions/AiChat/ChatMessage/PythonCode */ "./lib/Extensions/AiChat/ChatMessage/PythonCode.js");
6619
- /* harmony import */ var _Extensions_AiChat_ChatMessage_AssistantCodeBlock__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../Extensions/AiChat/ChatMessage/AssistantCodeBlock */ "./lib/Extensions/AiChat/ChatMessage/AssistantCodeBlock.js");
6825
+ /* harmony import */ var _Extensions_AiChat_ChatMessage_AssistantCodeBlock__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../Extensions/AiChat/ChatMessage/AssistantCodeBlock */ "./lib/Extensions/AiChat/ChatMessage/AssistantCodeBlock.js");
6620
6826
  /* harmony import */ var _icons_AlertIcon__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../icons/AlertIcon */ "./lib/icons/AlertIcon.js");
6621
6827
  /* harmony import */ var _AgentComponentHeader__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./AgentComponentHeader */ "./lib/components/AgentComponents/AgentComponentHeader.js");
6622
6828
  /* harmony import */ var _style_ErrorFixupToolUI_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../style/ErrorFixupToolUI.css */ "./style/ErrorFixupToolUI.css");
6623
6829
  /* harmony import */ var _style_AgentComponentHeader_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../style/AgentComponentHeader.css */ "./style/AgentComponentHeader.css");
6830
+ /* harmony import */ var _RunAllCellsToolUI__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./RunAllCellsToolUI */ "./lib/components/AgentComponents/RunAllCellsToolUI.js");
6624
6831
  /*
6625
6832
  * Copyright (c) Saga Inc.
6626
6833
  * Distributed under the terms of the GNU Affero General Public License v3.0 License.
@@ -6634,6 +6841,7 @@ __webpack_require__.r(__webpack_exports__);
6634
6841
 
6635
6842
 
6636
6843
 
6844
+
6637
6845
  const parsePythonErrorType = (content) => {
6638
6846
  if (!content)
6639
6847
  return 'Error';
@@ -6666,12 +6874,15 @@ const GroupedErrorsAndFixes = ({ messages, renderMimeRegistry, }) => {
6666
6874
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "error-fixup-header" },
6667
6875
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null, "Fixing an error")),
6668
6876
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "error-fixup-messages-container" }, messages.map((messageItem, index) => {
6669
- var _a, _b, _c;
6877
+ var _a, _b, _c, _d;
6670
6878
  const isUserMessage = messageItem.message.role === 'user';
6671
6879
  if (isUserMessage) {
6672
6880
  return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ErrorDetectedBlock, { key: `error-${index}`, errorMessage: messageItem.message, renderMimeRegistry: renderMimeRegistry }));
6673
6881
  }
6674
- return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Extensions_AiChat_ChatMessage_AssistantCodeBlock__WEBPACK_IMPORTED_MODULE_8__["default"], { key: `assistant-${index}`, code: messageItem.message.content, codeSummary: (_c = (_b = (_a = messageItem.agentResponse) === null || _a === void 0 ? void 0 : _a.cell_update) === null || _b === void 0 ? void 0 : _b.code_summary) !== null && _c !== void 0 ? _c : undefined, isCodeComplete: true, renderMimeRegistry: renderMimeRegistry, previewAICode: () => { }, acceptAICode: () => { }, rejectAICode: () => { }, isLastAiMessage: false, codeReviewStatus: "chatPreview", agentModeEnabled: true, isErrorFixup: true }));
6882
+ if (((_a = messageItem.agentResponse) === null || _a === void 0 ? void 0 : _a.type) === 'run_all_cells') {
6883
+ return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_RunAllCellsToolUI__WEBPACK_IMPORTED_MODULE_8__["default"], { key: `run-all-cells-${index}`, inErrorFixup: true }));
6884
+ }
6885
+ return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Extensions_AiChat_ChatMessage_AssistantCodeBlock__WEBPACK_IMPORTED_MODULE_9__["default"], { key: `assistant-${index}`, code: messageItem.message.content, codeSummary: (_d = (_c = (_b = messageItem.agentResponse) === null || _b === void 0 ? void 0 : _b.cell_update) === null || _c === void 0 ? void 0 : _c.code_summary) !== null && _d !== void 0 ? _d : 'Fixing error', isCodeComplete: true, renderMimeRegistry: renderMimeRegistry, previewAICode: () => { }, acceptAICode: () => { }, rejectAICode: () => { }, isLastAiMessage: false, codeReviewStatus: "chatPreview", agentModeEnabled: true, isErrorFixup: true }));
6675
6886
  }))));
6676
6887
  };
6677
6888
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (GroupedErrorsAndFixes);
@@ -6692,7 +6903,7 @@ __webpack_require__.r(__webpack_exports__);
6692
6903
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
6693
6904
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
6694
6905
  /* harmony import */ var _icons_MagnifyingGlassIcon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../icons/MagnifyingGlassIcon */ "./lib/icons/MagnifyingGlassIcon.js");
6695
- /* harmony import */ var _style_GetCellOutputToolUI_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../style/GetCellOutputToolUI.css */ "./style/GetCellOutputToolUI.css");
6906
+ /* harmony import */ var _style_AgentToolUIComponent_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../style/AgentToolUIComponent.css */ "./style/AgentToolUIComponent.css");
6696
6907
  /*
6697
6908
  * Copyright (c) Saga Inc.
6698
6909
  * Distributed under the terms of the GNU Affero General Public License v3.0 License.
@@ -6701,8 +6912,8 @@ __webpack_require__.r(__webpack_exports__);
6701
6912
 
6702
6913
 
6703
6914
  const GetCellOutputToolUI = () => {
6704
- return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "get-cell-output-container" },
6705
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "get-cell-output-content" },
6915
+ return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "agent-tool-ui-container" },
6916
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "agent-tool-ui-content" },
6706
6917
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_MagnifyingGlassIcon__WEBPACK_IMPORTED_MODULE_2__["default"], null),
6707
6918
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, "Taking a look at the cell output"))));
6708
6919
  };
@@ -6711,10 +6922,10 @@ const GetCellOutputToolUI = () => {
6711
6922
 
6712
6923
  /***/ }),
6713
6924
 
6714
- /***/ "./lib/components/DatabaseButton.js":
6715
- /*!******************************************!*\
6716
- !*** ./lib/components/DatabaseButton.js ***!
6717
- \******************************************/
6925
+ /***/ "./lib/components/AgentComponents/RunAllCellsToolUI.js":
6926
+ /*!*************************************************************!*\
6927
+ !*** ./lib/components/AgentComponents/RunAllCellsToolUI.js ***!
6928
+ \*************************************************************/
6718
6929
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
6719
6930
 
6720
6931
  __webpack_require__.r(__webpack_exports__);
@@ -6723,10 +6934,9 @@ __webpack_require__.r(__webpack_exports__);
6723
6934
  /* harmony export */ });
6724
6935
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
6725
6936
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
6726
- /* harmony import */ var _IconButton__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./IconButton */ "./lib/components/IconButton.js");
6727
- /* harmony import */ var _icons_DatabaseOutlineIcon__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../icons/DatabaseOutlineIcon */ "./lib/icons/DatabaseOutlineIcon.js");
6728
- /* harmony import */ var _Extensions_SettingsManager_SettingsManagerPlugin__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../Extensions/SettingsManager/SettingsManagerPlugin */ "./lib/Extensions/SettingsManager/SettingsManagerPlugin.js");
6729
- /* harmony import */ var _restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../restAPI/RestAPI */ "./lib/restAPI/RestAPI.js");
6937
+ /* harmony import */ var _icons_PlayButtonIcon__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../icons/PlayButtonIcon */ "./lib/icons/PlayButtonIcon.js");
6938
+ /* harmony import */ var _style_AgentToolUIComponent_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../style/AgentToolUIComponent.css */ "./style/AgentToolUIComponent.css");
6939
+ /* harmony import */ var _utils_classNames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/classNames */ "./lib/utils/classNames.js");
6730
6940
  /*
6731
6941
  * Copyright (c) Saga Inc.
6732
6942
  * Distributed under the terms of the GNU Affero General Public License v3.0 License.
@@ -6735,42 +6945,23 @@ __webpack_require__.r(__webpack_exports__);
6735
6945
 
6736
6946
 
6737
6947
 
6738
-
6739
- const DatabaseButton = ({ app }) => {
6740
- const [databaseConnections, setDatabaseConnections] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});
6741
- const [isIconVisible, setIsIconVisible] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);
6742
- // Fetch database connections
6743
- const fetchDatabaseConnections = async () => {
6744
- const databaseConnections = await (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_1__.getDatabaseConnections)();
6745
- setDatabaseConnections(databaseConnections);
6746
- };
6747
- // Fetch database connections
6748
- (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
6749
- void fetchDatabaseConnections();
6750
- }, []);
6751
- // Determine notification dot type based on connections
6752
- const getNotificationDotType = () => {
6753
- if (!isIconVisible) {
6754
- return null;
6755
- }
6756
- return Object.keys(databaseConnections).length > 0 ? 'success' : 'warning';
6757
- };
6758
- return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_IconButton__WEBPACK_IMPORTED_MODULE_2__["default"], { icon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_DatabaseOutlineIcon__WEBPACK_IMPORTED_MODULE_3__["default"], null), title: 'Add Database', onClick: () => {
6759
- void app.commands.execute(_Extensions_SettingsManager_SettingsManagerPlugin__WEBPACK_IMPORTED_MODULE_4__.COMMAND_MITO_AI_SETTINGS);
6760
- setIsIconVisible(false);
6761
- }, notificationDotType: getNotificationDotType(), className: 'icon-button-hover', style: {
6762
- height: 'var(--chat-context-button-height)'
6763
- } }));
6948
+ const RunAllCellsToolUI = ({ inErrorFixup }) => {
6949
+ return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: (0,_utils_classNames__WEBPACK_IMPORTED_MODULE_2__.classNames)('agent-tool-ui-container', {
6950
+ 'agent-tool-ui-error-fixup': inErrorFixup,
6951
+ }) },
6952
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "agent-tool-ui-content" },
6953
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_PlayButtonIcon__WEBPACK_IMPORTED_MODULE_3__["default"], null),
6954
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, "Running all cells"))));
6764
6955
  };
6765
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DatabaseButton);
6956
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RunAllCellsToolUI);
6766
6957
 
6767
6958
 
6768
6959
  /***/ }),
6769
6960
 
6770
- /***/ "./lib/components/DropdownMenu.js":
6771
- /*!****************************************!*\
6772
- !*** ./lib/components/DropdownMenu.js ***!
6773
- \****************************************/
6961
+ /***/ "./lib/components/AttachFileButton.js":
6962
+ /*!********************************************!*\
6963
+ !*** ./lib/components/AttachFileButton.js ***!
6964
+ \********************************************/
6774
6965
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
6775
6966
 
6776
6967
  __webpack_require__.r(__webpack_exports__);
@@ -6779,48 +6970,309 @@ __webpack_require__.r(__webpack_exports__);
6779
6970
  /* harmony export */ });
6780
6971
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
6781
6972
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
6782
- /* harmony import */ var _style_DropdownMenu_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../style/DropdownMenu.css */ "./style/DropdownMenu.css");
6973
+ /* harmony import */ var _IconButton__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./IconButton */ "./lib/components/IconButton.js");
6974
+ /* harmony import */ var _icons_PaperClipIcon__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../icons/PaperClipIcon */ "./lib/icons/PaperClipIcon.js");
6975
+ /* harmony import */ var _restAPI_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../restAPI/utils */ "./lib/restAPI/utils.js");
6976
+ /* harmony import */ var _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @jupyterlab/apputils */ "webpack/sharing/consume/default/@jupyterlab/apputils");
6977
+ /* harmony import */ var _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__);
6783
6978
  /*
6784
6979
  * Copyright (c) Saga Inc.
6785
6980
  * Distributed under the terms of the GNU Affero General Public License v3.0 License.
6786
6981
  */
6787
6982
 
6788
6983
 
6789
- const DropdownMenu = ({ trigger, items, className = '', alignment = 'left', }) => {
6790
- const [isOpen, setIsOpen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
6791
- const dropdownRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
6792
- // Close dropdown when clicking outside
6793
- (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
6794
- const handleClickOutside = (event) => {
6795
- if (dropdownRef.current &&
6796
- !dropdownRef.current.contains(event.target)) {
6797
- setIsOpen(false);
6798
- }
6799
- };
6800
- document.addEventListener('mousedown', handleClickOutside);
6801
- return () => document.removeEventListener('mousedown', handleClickOutside);
6802
- }, []);
6803
- // Handle the main click (primary action)
6804
- const handlePrimaryClick = (onClick, disabled) => {
6805
- if (disabled)
6984
+
6985
+
6986
+
6987
+ // Constants for file handling
6988
+ const CHUNKED_UPLOAD_SIZE_CUTOFF = 25 * 1024 * 1024; // 25MB cutoff for chunked uploads
6989
+ const CHUNK_SIZE = 10 * 1024 * 1024; // 10MB chunks
6990
+ const AttachFileButton = ({ onFileUploaded, notebookTracker }) => {
6991
+ const fileInputRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
6992
+ const [isUploading, setIsUploading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
6993
+ // Helper function to get notebook directory from notebook path
6994
+ const getNotebookDirectory = (notebookPath) => {
6995
+ const lastSlashIndex = notebookPath.lastIndexOf('/');
6996
+ if (lastSlashIndex === -1) {
6997
+ // No directory, just filename (root directory)
6998
+ return '.';
6999
+ }
7000
+ return notebookPath.substring(0, lastSlashIndex);
7001
+ };
7002
+ const handleClick = () => {
7003
+ var _a;
7004
+ // Don't allow clicks if uploading
7005
+ if (isUploading)
6806
7006
  return;
6807
- onClick();
6808
- setIsOpen(false);
7007
+ // Trigger the hidden file input
7008
+ (_a = fileInputRef.current) === null || _a === void 0 ? void 0 : _a.click();
6809
7009
  };
6810
- // Choose the alignment class
6811
- const alignmentClass = alignment === 'right' ? 'dropdown-menu-right' : 'dropdown-menu-left';
6812
- return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: `dropdown-container ${className}`, ref: dropdownRef },
6813
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { onClick: () => setIsOpen(!isOpen) }, trigger),
6814
- isOpen && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: `dropdown-menu ${alignmentClass}` }, items.map((item, index) => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { key: index, className: `dropdown-item-row ${item.disabled ? 'dropdown-item-disabled' : ''}` },
6815
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { className: "dropdown-item-main", onClick: () => handlePrimaryClick(item.onClick, item.disabled), disabled: item.disabled, title: item.disabled ? item.disabledTooltip : item.label },
6816
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "dropdown-item-icon" }, item.primaryIcon && react__WEBPACK_IMPORTED_MODULE_0___default().createElement(item.primaryIcon)),
6817
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "dropdown-item-label" }, item.label)),
6818
- item.secondaryActions && item.secondaryActions.map((action, actionIndex) => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { key: actionIndex, className: "dropdown-item-secondary", onClick: (e) => {
6819
- e.stopPropagation(); // prevent triggering the main onClick
6820
- if (!action.disabled) {
6821
- action.onClick();
6822
- setIsOpen(false); // optional: close the dropdown after secondary action
6823
- }
7010
+ const handleFileSelect = async (event) => {
7011
+ const files = event.target.files;
7012
+ if (!files || files.length === 0)
7013
+ return;
7014
+ const file = files[0];
7015
+ if (!file)
7016
+ return;
7017
+ // Don't allow new uploads if already uploading
7018
+ if (isUploading)
7019
+ return;
7020
+ setIsUploading(true);
7021
+ try {
7022
+ // Check file size and handle accordingly
7023
+ if (file.size > CHUNKED_UPLOAD_SIZE_CUTOFF) {
7024
+ console.log(`File ${file.name} is larger than 25MB (${(file.size / (1024 * 1024)).toFixed(2)}MB). Splitting into chunks...`);
7025
+ await handleLargeFile(file);
7026
+ }
7027
+ else {
7028
+ // Upload file directly for files <= 25MB
7029
+ await uploadFile(file);
7030
+ }
7031
+ }
7032
+ catch (error) {
7033
+ _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.Notification.emit(`Upload failed: ${error}`, "error", {
7034
+ autoClose: 5 * 1000 // 5 seconds
7035
+ });
7036
+ console.error('Error during file upload:', error);
7037
+ }
7038
+ finally {
7039
+ setIsUploading(false);
7040
+ // Clear the file input
7041
+ if (fileInputRef.current) {
7042
+ fileInputRef.current.value = '';
7043
+ }
7044
+ }
7045
+ };
7046
+ const handleLargeFile = async (file) => {
7047
+ const totalChunks = Math.ceil(file.size / CHUNK_SIZE);
7048
+ console.log(`Splitting file into ${totalChunks} chunks of ${(CHUNK_SIZE / (1024 * 1024)).toFixed(2)}MB each`);
7049
+ // Get notebook directory path
7050
+ const notebookPanel = notebookTracker.currentWidget;
7051
+ if (!notebookPanel) {
7052
+ console.error('No notebook is currently active');
7053
+ throw new Error('No notebook is currently active');
7054
+ }
7055
+ const notebookPath = notebookPanel.context.path;
7056
+ const notebookDir = getNotebookDirectory(notebookPath);
7057
+ for (let chunkIndex = 0; chunkIndex < totalChunks; chunkIndex++) {
7058
+ const start = chunkIndex * CHUNK_SIZE;
7059
+ const end = Math.min(start + CHUNK_SIZE, file.size);
7060
+ const chunk = file.slice(start, end);
7061
+ console.log(`Uploading chunk ${chunkIndex + 1}/${totalChunks}:`, {
7062
+ chunkNumber: chunkIndex + 1,
7063
+ totalChunks: totalChunks,
7064
+ chunkSize: chunk.size,
7065
+ chunkSizeMB: (chunk.size / (1024 * 1024)).toFixed(2),
7066
+ startByte: start,
7067
+ endByte: end,
7068
+ fileName: file.name,
7069
+ originalFileSize: file.size,
7070
+ originalFileSizeMB: (file.size / (1024 * 1024)).toFixed(2)
7071
+ });
7072
+ // Upload chunk to backend
7073
+ const success = await uploadChunk(chunk, file.name, chunkIndex + 1, totalChunks, notebookDir);
7074
+ if (!success) {
7075
+ console.error(`Failed to upload chunk ${chunkIndex + 1}`);
7076
+ throw new Error(`Failed to upload chunk ${chunkIndex + 1}`);
7077
+ }
7078
+ }
7079
+ console.log(`Successfully uploaded all ${totalChunks} chunks for file: ${file.name}`);
7080
+ // Notify the parent component that the file was uploaded
7081
+ onFileUploaded(file.name);
7082
+ };
7083
+ const uploadChunk = async (chunk, filename, chunkNumber, totalChunks, notebookDir) => {
7084
+ try {
7085
+ // Create FormData for chunk upload
7086
+ const formData = new FormData();
7087
+ formData.append('file', chunk, filename);
7088
+ formData.append('chunk_number', chunkNumber.toString());
7089
+ formData.append('total_chunks', totalChunks.toString());
7090
+ formData.append('notebook_dir', notebookDir);
7091
+ // Upload chunk to backend
7092
+ const resp = await (0,_restAPI_utils__WEBPACK_IMPORTED_MODULE_2__.requestAPI)('upload', {
7093
+ method: 'POST',
7094
+ body: formData
7095
+ });
7096
+ if (resp.error) {
7097
+ _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.Notification.emit(`Upload failed: ${resp.error.message}`, "error", {
7098
+ autoClose: 5 * 1000 // 5 seconds
7099
+ });
7100
+ console.error(`Chunk ${chunkNumber} upload failed:`, resp.error.message);
7101
+ return false;
7102
+ }
7103
+ else if (resp.data) {
7104
+ if (resp.data.chunk_complete) {
7105
+ console.log(`All chunks uploaded successfully. File reconstructed: ${resp.data.filename}`);
7106
+ }
7107
+ else if (resp.data.chunk_received) {
7108
+ console.log(`Chunk ${resp.data.chunk_number}/${resp.data.total_chunks} uploaded successfully`);
7109
+ }
7110
+ return true;
7111
+ }
7112
+ return false;
7113
+ }
7114
+ catch (error) {
7115
+ _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.Notification.emit(`Upload failed: ${error}`, "error", {
7116
+ autoClose: 5 * 1000 // 5 seconds
7117
+ });
7118
+ console.error(`Error uploading chunk ${chunkNumber}:`, error);
7119
+ return false;
7120
+ }
7121
+ };
7122
+ const uploadFile = async (file) => {
7123
+ // Get notebook directory path
7124
+ const notebookPanel = notebookTracker.currentWidget;
7125
+ if (!notebookPanel) {
7126
+ console.error('No notebook is currently active');
7127
+ throw new Error('No notebook is currently active');
7128
+ }
7129
+ const notebookPath = notebookPanel.context.path;
7130
+ const notebookDir = getNotebookDirectory(notebookPath);
7131
+ // Create FormData for file upload
7132
+ const formData = new FormData();
7133
+ formData.append('file', file);
7134
+ formData.append('notebook_dir', notebookDir);
7135
+ // Upload file to backend using FormData
7136
+ const resp = await (0,_restAPI_utils__WEBPACK_IMPORTED_MODULE_2__.requestAPI)('upload', {
7137
+ method: 'POST',
7138
+ body: formData
7139
+ });
7140
+ if (resp.error) {
7141
+ _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.Notification.emit(`Upload failed: ${resp.error.message}`, "error", {
7142
+ autoClose: 5 * 1000 // 5 seconds
7143
+ });
7144
+ console.error('Upload failed:', resp.error.message);
7145
+ throw new Error(resp.error.message);
7146
+ }
7147
+ else if (resp.data) {
7148
+ console.log('File uploaded successfully:', resp.data);
7149
+ // Notify the parent component that the file was uploaded,
7150
+ // which will update the context manager.
7151
+ onFileUploaded(file.name);
7152
+ }
7153
+ };
7154
+ return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { style: { position: 'relative' } },
7155
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", { ref: fileInputRef, type: "file", style: { display: 'none' }, onChange: handleFileSelect, accept: "*" }),
7156
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_IconButton__WEBPACK_IMPORTED_MODULE_3__["default"], { icon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_PaperClipIcon__WEBPACK_IMPORTED_MODULE_4__["default"], null), title: isUploading ? 'Uploading...' : 'Attach File', onClick: handleClick, className: 'icon-button-hover', disabled: isUploading, style: {
7157
+ opacity: isUploading ? 0.5 : 1,
7158
+ cursor: isUploading ? 'not-allowed' : 'pointer'
7159
+ } })));
7160
+ };
7161
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AttachFileButton);
7162
+
7163
+
7164
+ /***/ }),
7165
+
7166
+ /***/ "./lib/components/DatabaseButton.js":
7167
+ /*!******************************************!*\
7168
+ !*** ./lib/components/DatabaseButton.js ***!
7169
+ \******************************************/
7170
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
7171
+
7172
+ __webpack_require__.r(__webpack_exports__);
7173
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
7174
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
7175
+ /* harmony export */ });
7176
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
7177
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
7178
+ /* harmony import */ var _IconButton__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./IconButton */ "./lib/components/IconButton.js");
7179
+ /* harmony import */ var _icons_DatabaseOutlineIcon__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../icons/DatabaseOutlineIcon */ "./lib/icons/DatabaseOutlineIcon.js");
7180
+ /* harmony import */ var _Extensions_SettingsManager_SettingsManagerPlugin__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../Extensions/SettingsManager/SettingsManagerPlugin */ "./lib/Extensions/SettingsManager/SettingsManagerPlugin.js");
7181
+ /* harmony import */ var _restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../restAPI/RestAPI */ "./lib/restAPI/RestAPI.js");
7182
+ /*
7183
+ * Copyright (c) Saga Inc.
7184
+ * Distributed under the terms of the GNU Affero General Public License v3.0 License.
7185
+ */
7186
+
7187
+
7188
+
7189
+
7190
+
7191
+ const DatabaseButton = ({ app }) => {
7192
+ const [databaseConnections, setDatabaseConnections] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});
7193
+ const [isIconVisible, setIsIconVisible] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);
7194
+ // Fetch database connections
7195
+ const fetchDatabaseConnections = async () => {
7196
+ const databaseConnections = await (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_1__.getDatabaseConnections)();
7197
+ setDatabaseConnections(databaseConnections);
7198
+ };
7199
+ // Fetch database connections
7200
+ (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
7201
+ void fetchDatabaseConnections();
7202
+ }, []);
7203
+ // Determine notification dot type based on connections
7204
+ const getNotificationDotType = () => {
7205
+ if (!isIconVisible) {
7206
+ return null;
7207
+ }
7208
+ return Object.keys(databaseConnections).length > 0 ? 'success' : 'warning';
7209
+ };
7210
+ return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_IconButton__WEBPACK_IMPORTED_MODULE_2__["default"], { icon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_DatabaseOutlineIcon__WEBPACK_IMPORTED_MODULE_3__["default"], null), title: 'Add Database', onClick: () => {
7211
+ void app.commands.execute(_Extensions_SettingsManager_SettingsManagerPlugin__WEBPACK_IMPORTED_MODULE_4__.COMMAND_MITO_AI_SETTINGS);
7212
+ setIsIconVisible(false);
7213
+ }, notificationDotType: getNotificationDotType(), className: 'icon-button-hover', style: {
7214
+ height: 'var(--chat-context-button-height)'
7215
+ } }));
7216
+ };
7217
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DatabaseButton);
7218
+
7219
+
7220
+ /***/ }),
7221
+
7222
+ /***/ "./lib/components/DropdownMenu.js":
7223
+ /*!****************************************!*\
7224
+ !*** ./lib/components/DropdownMenu.js ***!
7225
+ \****************************************/
7226
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
7227
+
7228
+ __webpack_require__.r(__webpack_exports__);
7229
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
7230
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
7231
+ /* harmony export */ });
7232
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
7233
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
7234
+ /* harmony import */ var _style_DropdownMenu_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../style/DropdownMenu.css */ "./style/DropdownMenu.css");
7235
+ /*
7236
+ * Copyright (c) Saga Inc.
7237
+ * Distributed under the terms of the GNU Affero General Public License v3.0 License.
7238
+ */
7239
+
7240
+
7241
+ const DropdownMenu = ({ trigger, items, className = '', alignment = 'left', }) => {
7242
+ const [isOpen, setIsOpen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
7243
+ const dropdownRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
7244
+ // Close dropdown when clicking outside
7245
+ (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
7246
+ const handleClickOutside = (event) => {
7247
+ if (dropdownRef.current &&
7248
+ !dropdownRef.current.contains(event.target)) {
7249
+ setIsOpen(false);
7250
+ }
7251
+ };
7252
+ document.addEventListener('mousedown', handleClickOutside);
7253
+ return () => document.removeEventListener('mousedown', handleClickOutside);
7254
+ }, []);
7255
+ // Handle the main click (primary action)
7256
+ const handlePrimaryClick = (onClick, disabled) => {
7257
+ if (disabled)
7258
+ return;
7259
+ onClick();
7260
+ setIsOpen(false);
7261
+ };
7262
+ // Choose the alignment class
7263
+ const alignmentClass = alignment === 'right' ? 'dropdown-menu-right' : 'dropdown-menu-left';
7264
+ return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: `dropdown-container ${className}`, ref: dropdownRef },
7265
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { onClick: () => setIsOpen(!isOpen) }, trigger),
7266
+ isOpen && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: `dropdown-menu ${alignmentClass}` }, items.map((item, index) => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { key: index, className: `dropdown-item-row ${item.disabled ? 'dropdown-item-disabled' : ''}` },
7267
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { className: "dropdown-item-main", onClick: () => handlePrimaryClick(item.onClick, item.disabled), disabled: item.disabled, title: item.disabled ? item.disabledTooltip : item.label },
7268
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "dropdown-item-icon" }, item.primaryIcon && react__WEBPACK_IMPORTED_MODULE_0___default().createElement(item.primaryIcon)),
7269
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "dropdown-item-label" }, item.label)),
7270
+ item.secondaryActions && item.secondaryActions.map((action, actionIndex) => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { key: actionIndex, className: "dropdown-item-secondary", onClick: (e) => {
7271
+ e.stopPropagation(); // prevent triggering the main onClick
7272
+ if (!action.disabled) {
7273
+ action.onClick();
7274
+ setIsOpen(false); // optional: close the dropdown after secondary action
7275
+ }
6824
7276
  }, disabled: action.disabled, title: action.tooltip, style: {
6825
7277
  background: 'none',
6826
7278
  border: 'none',
@@ -6856,8 +7308,8 @@ __webpack_require__.r(__webpack_exports__);
6856
7308
 
6857
7309
 
6858
7310
 
6859
- const IconButton = ({ icon, onClick, title, style, notificationDotType = null, className }) => {
6860
- return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { className: (0,_utils_classNames__WEBPACK_IMPORTED_MODULE_3__.classNames)("icon-button", className), onClick: onClick, title: title, style: style },
7311
+ const IconButton = ({ icon, onClick, title, style, notificationDotType = null, className, disabled = false }) => {
7312
+ return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { className: (0,_utils_classNames__WEBPACK_IMPORTED_MODULE_3__.classNames)("icon-button", className), onClick: onClick, title: title, style: style, disabled: disabled },
6861
7313
  icon,
6862
7314
  notificationDotType && react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: `notification-dot notification-dot-${notificationDotType}` })));
6863
7315
  };
@@ -7683,6 +8135,31 @@ const NucleausIcon = ({ height = 20, width = 20, }) => (react__WEBPACK_IMPORTED_
7683
8135
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (NucleausIcon);
7684
8136
 
7685
8137
 
8138
+ /***/ }),
8139
+
8140
+ /***/ "./lib/icons/PaperClipIcon.js":
8141
+ /*!************************************!*\
8142
+ !*** ./lib/icons/PaperClipIcon.js ***!
8143
+ \************************************/
8144
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
8145
+
8146
+ __webpack_require__.r(__webpack_exports__);
8147
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
8148
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
8149
+ /* harmony export */ });
8150
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
8151
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
8152
+ /*
8153
+ * Copyright (c) Saga Inc.
8154
+ * Distributed under the terms of the GNU Affero General Public License v3.0 License.
8155
+ */
8156
+
8157
+ const PaperClipIcon = () => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("svg", { width: "14", height: "14", viewBox: "0 0 72 86", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
8158
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("g", { fill: "currentColor" },
8159
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("path", { d: "M70.363 44.59C68.6013 43.258 66.0935 43.6017 64.7575 45.3634L46.4995 69.4724C39.73 78.4099 27.0735 80.6284 17.6905 74.5154C12.71 71.2693 9.39359 66.2537 8.37409 60.3904C7.31939 54.3435 8.8819 48.0154 12.6632 43.0234L35.3312 13.0894C39.5773 7.48783 47.5812 6.37853 53.1902 10.6246C58.7879 14.8668 59.8894 22.8746 55.6472 28.4766L50.8425 34.8204L32.6475 58.8434C31.1709 60.7965 28.4366 61.3629 26.5577 60.109C25.5304 59.4215 24.8546 58.3863 24.6515 57.1832C24.4484 55.984 24.7413 54.7887 25.4757 53.8199L43.8707 29.5389C45.2027 27.7772 44.859 25.2694 43.0973 23.9334C41.3356 22.6014 38.8278 22.9452 37.4918 24.7069L19.0968 48.9879C17.0499 51.691 16.1984 55.1637 16.7648 58.5113C17.296 61.6597 18.964 64.4019 21.4914 66.316C21.6945 66.4722 21.9054 66.6207 22.1203 66.7652C27.3781 70.273 34.5073 69.0933 38.6323 64.1441C38.6948 64.0699 38.769 64.0113 38.8276 63.9332L39.0229 63.6714L62.0229 33.3044C68.9291 24.1833 67.1362 11.1484 58.0112 4.23843C48.8979 -2.66387 35.8632 -0.863167 28.9522 8.25793L6.2842 38.1919L5.88967 38.7115C5.8428 38.774 5.81545 38.8404 5.77248 38.9029C1.03418 45.5435 -0.895518 53.8209 0.491282 61.7619C1.77648 69.1252 5.68268 75.5239 11.5693 79.9849C12.1357 80.4146 12.7216 80.8247 13.3232 81.2154C26.2102 89.606 43.5812 86.567 52.8782 74.2974L71.1362 50.1924C72.4721 48.4307 72.1247 45.9221 70.363 44.59Z" }))));
8160
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PaperClipIcon);
8161
+
8162
+
7686
8163
  /***/ }),
7687
8164
 
7688
8165
  /***/ "./lib/icons/Pencil.js":
@@ -8161,7 +8638,8 @@ __webpack_require__.r(__webpack_exports__);
8161
8638
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
8162
8639
  /* harmony export */ acceptAndRunCellUpdate: () => (/* binding */ acceptAndRunCellUpdate),
8163
8640
  /* harmony export */ acceptAndRunCode: () => (/* binding */ acceptAndRunCode),
8164
- /* harmony export */ retryIfExecutionError: () => (/* binding */ retryIfExecutionError)
8641
+ /* harmony export */ retryIfExecutionError: () => (/* binding */ retryIfExecutionError),
8642
+ /* harmony export */ runAllCells: () => (/* binding */ runAllCells)
8165
8643
  /* harmony export */ });
8166
8644
  /* harmony import */ var _Extensions_ErrorMimeRenderer_errorUtils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Extensions/ErrorMimeRenderer/errorUtils */ "./lib/Extensions/ErrorMimeRenderer/errorUtils.js");
8167
8645
  /* harmony import */ var _sleep__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sleep */ "./lib/utils/sleep.js");
@@ -8217,12 +8695,14 @@ const acceptAndRunCode = async (app, notebookTracker, previewAICodeToActiveCell,
8217
8695
  await (0,_sleep__WEBPACK_IMPORTED_MODULE_1__.sleep)(1000);
8218
8696
  };
8219
8697
  const retryIfExecutionError = async (notebookTracker, app, getDuplicateChatHistoryManager, addAIMessageFromResponseAndUpdateState, sendAgentSmartDebugMessage, previewAICodeToActiveCell, acceptAICode, shouldContinueAgentExecution, finalizeAgentStop, chatHistoryManagerRef) => {
8220
- var _a, _b, _c, _d, _e;
8698
+ var _a, _b, _c;
8221
8699
  const cell = (_b = (_a = notebookTracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content) === null || _b === void 0 ? void 0 : _b.activeCell;
8222
8700
  // Note: If you update the max retries, update the message we display on each failure
8223
8701
  // attempt to ensure we don't say "third attempt" over and over again.
8224
8702
  const MAX_RETRIES = 3;
8225
8703
  let attempts = 0;
8704
+ let runAllCellsAttempts = 0;
8705
+ const MAX_RUN_ALL_CELLS_ATTEMPTS = 2; // Only allow two run_all_cells attempt per error cycle
8226
8706
  while ((0,_notebook__WEBPACK_IMPORTED_MODULE_0__.didCellExecutionError)(cell) && attempts < MAX_RETRIES) {
8227
8707
  if (!shouldContinueAgentExecution.current) {
8228
8708
  finalizeAgentStop();
@@ -8237,16 +8717,35 @@ const retryIfExecutionError = async (notebookTracker, app, getDuplicateChatHisto
8237
8717
  const errorMessage = (0,_Extensions_ErrorMimeRenderer_errorUtils__WEBPACK_IMPORTED_MODULE_2__.getFullErrorMessageFromTraceback)(errorOutput.traceback);
8238
8718
  await sendAgentSmartDebugMessage(errorMessage);
8239
8719
  const aiDisplayOptimizedChatItem = chatHistoryManagerRef.current.getLastAIDisplayOptimizedChatItem();
8240
- // TODO: We expect that the agent responds with a cell_update if they are prompted to fix an error.
8241
- // But we are not enforcing that right now. We can fix this by setting the response_format for agent:smartDebug
8242
- // to only allow cell_updates and then we can return the agentResponse from sendAgentSmartDebugMessage so
8243
- // typescript knows what type it is.
8244
- if (((_d = aiDisplayOptimizedChatItem === null || aiDisplayOptimizedChatItem === void 0 ? void 0 : aiDisplayOptimizedChatItem.agentResponse) === null || _d === void 0 ? void 0 : _d.type) !== 'cell_update' || ((_e = aiDisplayOptimizedChatItem === null || aiDisplayOptimizedChatItem === void 0 ? void 0 : aiDisplayOptimizedChatItem.agentResponse) === null || _e === void 0 ? void 0 : _e.cell_update) === undefined) {
8720
+ // Handle different response types from the agent when fixing errors
8721
+ const agentResponse = aiDisplayOptimizedChatItem === null || aiDisplayOptimizedChatItem === void 0 ? void 0 : aiDisplayOptimizedChatItem.agentResponse;
8722
+ if (!agentResponse) {
8245
8723
  return 'failure';
8246
8724
  }
8247
- const cellUpdate = aiDisplayOptimizedChatItem.agentResponse.cell_update;
8248
- if (cellUpdate !== undefined && cellUpdate !== null) {
8249
- await acceptAndRunCellUpdate(cellUpdate, notebookTracker, app, previewAICodeToActiveCell, acceptAICode);
8725
+ if (agentResponse.type === 'cell_update') {
8726
+ const cellUpdate = agentResponse.cell_update;
8727
+ if (cellUpdate !== undefined && cellUpdate !== null) {
8728
+ await acceptAndRunCellUpdate(cellUpdate, notebookTracker, app, previewAICodeToActiveCell, acceptAICode);
8729
+ }
8730
+ }
8731
+ else if (agentResponse.type === 'run_all_cells') {
8732
+ // Prevent infinite loops by limiting run_all_cells attempts
8733
+ if (runAllCellsAttempts >= MAX_RUN_ALL_CELLS_ATTEMPTS) {
8734
+ console.log('Maximum run_all_cells attempts reached, treating as failure');
8735
+ return 'failure';
8736
+ }
8737
+ runAllCellsAttempts++;
8738
+ // Execute runAllCells to fix NameError issues
8739
+ const result = await runAllCells(app, notebookTracker);
8740
+ if (!result.success) {
8741
+ // If run_all_cells resulted in an error, we should continue with error handling
8742
+ // The error will be caught in the main loop
8743
+ console.log('Error after running all cells:', result.errorMessage);
8744
+ }
8745
+ }
8746
+ else {
8747
+ // Agent responded with an unexpected type for error fixing
8748
+ return 'failure';
8250
8749
  }
8251
8750
  attempts++;
8252
8751
  // If this was the last attempt and it still failed
@@ -8256,6 +8755,37 @@ const retryIfExecutionError = async (notebookTracker, app, getDuplicateChatHisto
8256
8755
  }
8257
8756
  return 'success';
8258
8757
  };
8758
+ const runAllCells = async (app, notebookTracker) => {
8759
+ var _a, _b;
8760
+ await app.commands.execute("notebook:run-all-cells");
8761
+ // Give the execution some time to complete and update variables
8762
+ // This ensures that the variable manager has time to update the state
8763
+ await (0,_sleep__WEBPACK_IMPORTED_MODULE_1__.sleep)(2000);
8764
+ // Check all cells for errors after execution
8765
+ const notebook = (_a = notebookTracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content;
8766
+ if (!notebook) {
8767
+ return { success: false, errorMessage: "No active notebook found" };
8768
+ }
8769
+ // Iterate through all cells to find any with errors
8770
+ for (let i = 0; i < notebook.widgets.length; i++) {
8771
+ const cell = notebook.widgets[i];
8772
+ if (cell && cell.model.type === 'code') {
8773
+ const codeCell = cell;
8774
+ if ((0,_notebook__WEBPACK_IMPORTED_MODULE_0__.didCellExecutionError)(codeCell)) {
8775
+ const errorOutput = (_b = codeCell.model.outputs) === null || _b === void 0 ? void 0 : _b.toJSON().find(output => output.output_type === "error");
8776
+ if (errorOutput) {
8777
+ const errorMessage = (0,_Extensions_ErrorMimeRenderer_errorUtils__WEBPACK_IMPORTED_MODULE_2__.getFullErrorMessageFromTraceback)(errorOutput.traceback);
8778
+ return {
8779
+ success: false,
8780
+ errorMessage: errorMessage,
8781
+ errorCellId: codeCell.model.id
8782
+ };
8783
+ }
8784
+ }
8785
+ }
8786
+ }
8787
+ return { success: true };
8788
+ };
8259
8789
 
8260
8790
 
8261
8791
  /***/ }),
@@ -10411,10 +10941,10 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
10411
10941
 
10412
10942
  /***/ }),
10413
10943
 
10414
- /***/ "./node_modules/css-loader/dist/cjs.js!./style/AssumptionTool.css":
10415
- /*!************************************************************************!*\
10416
- !*** ./node_modules/css-loader/dist/cjs.js!./style/AssumptionTool.css ***!
10417
- \************************************************************************/
10944
+ /***/ "./node_modules/css-loader/dist/cjs.js!./style/AgentToolUIComponent.css":
10945
+ /*!******************************************************************************!*\
10946
+ !*** ./node_modules/css-loader/dist/cjs.js!./style/AgentToolUIComponent.css ***!
10947
+ \******************************************************************************/
10418
10948
  /***/ ((module, __webpack_exports__, __webpack_require__) => {
10419
10949
 
10420
10950
  __webpack_require__.r(__webpack_exports__);
@@ -10435,57 +10965,42 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
10435
10965
  * Distributed under the terms of the GNU Affero General Public License v3.0 License.
10436
10966
  */
10437
10967
 
10438
- .assumption-tool-container {
10439
- color: var(--jp-ui-font-color2);
10968
+ .agent-tool-ui-container {
10440
10969
  display: flex;
10441
- justify-content: space-between;
10970
+ flex-direction: row;
10442
10971
  align-items: center;
10443
- margin-top: 10px;
10444
- margin-bottom: 10px;
10445
- position: relative;
10446
- padding: 8px var(--chat-taskpane-tool-call-horizontal-padding);
10447
- border-radius: var(--chat-taskpane-item-border-radius);
10448
- border: 1px solid var(--jp-cell-editor-border-color);
10449
- cursor: default;
10972
+ justify-content: start;
10973
+ background-color: transparent;
10974
+ padding: 10px;
10975
+ color: var(--jp-ui-font-color2);
10450
10976
  }
10451
10977
 
10452
- .assumption-header-label {
10453
- position: absolute;
10454
- top: -10px;
10455
- left: 12px;
10456
- background-color: var(--chat-background-color);
10457
- padding: 2px 8px;
10458
- border-radius: 4px;
10459
- font-size: 12px;
10460
- color: var(--jp-ui-font-color2);
10461
- font-style: italic;
10978
+ .agent-tool-ui-container:not(.agent-tool-ui-error-fixup) {
10979
+ margin: 10px 0;
10980
+ border-radius: 5px;
10981
+ border: 1px solid var(--jp-cell-editor-border-color);
10462
10982
  }
10463
10983
 
10464
- .assumption-content {
10465
- display: flex;
10466
- align-items: flex-start;
10467
- gap: 8px;
10468
- color: var(--jp-ui-font-color2);
10469
- font-size: 14px;
10470
- line-height: 1.4;
10471
- margin: 0;
10472
- padding: 10px 10px 5px 10px;
10984
+ .agent-tool-ui-container:not(.agent-tool-ui-error-fixup) .agent-tool-ui-content {
10985
+ margin-left: 5px;
10473
10986
  }
10474
10987
 
10475
- .assumption-content ul {
10476
- margin: 0;
10477
- padding-left: 10px;
10478
- }`, "",{"version":3,"sources":["webpack://./style/AssumptionTool.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;IACI,+BAA+B;IAC/B,aAAa;IACb,8BAA8B;IAC9B,mBAAmB;IACnB,gBAAgB;IAChB,mBAAmB;IACnB,kBAAkB;IAClB,8DAA8D;IAC9D,sDAAsD;IACtD,oDAAoD;IACpD,eAAe;AACnB;;AAEA;IACI,kBAAkB;IAClB,UAAU;IACV,UAAU;IACV,8CAA8C;IAC9C,gBAAgB;IAChB,kBAAkB;IAClB,eAAe;IACf,+BAA+B;IAC/B,kBAAkB;AACtB;;AAEA;IACI,aAAa;IACb,uBAAuB;IACvB,QAAQ;IACR,+BAA+B;IAC/B,eAAe;IACf,gBAAgB;IAChB,SAAS;IACT,2BAA2B;AAC/B;;AAEA;IACI,SAAS;IACT,kBAAkB;AACtB","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.assumption-tool-container {\n color: var(--jp-ui-font-color2);\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-top: 10px;\n margin-bottom: 10px;\n position: relative;\n padding: 8px var(--chat-taskpane-tool-call-horizontal-padding);\n border-radius: var(--chat-taskpane-item-border-radius);\n border: 1px solid var(--jp-cell-editor-border-color);\n cursor: default;\n}\n\n.assumption-header-label {\n position: absolute;\n top: -10px;\n left: 12px;\n background-color: var(--chat-background-color);\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 12px;\n color: var(--jp-ui-font-color2);\n font-style: italic;\n}\n\n.assumption-content {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n color: var(--jp-ui-font-color2);\n font-size: 14px;\n line-height: 1.4;\n margin: 0;\n padding: 10px 10px 5px 10px;\n}\n\n.assumption-content ul {\n margin: 0;\n padding-left: 10px;\n}"],"sourceRoot":""}]);
10988
+ .agent-tool-ui-content {
10989
+ display: flex;
10990
+ align-items: center;
10991
+ gap: 10px;
10992
+ }
10993
+ `, "",{"version":3,"sources":["webpack://./style/AgentToolUIComponent.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;IACI,aAAa;IACb,mBAAmB;IACnB,mBAAmB;IACnB,sBAAsB;IACtB,6BAA6B;IAC7B,aAAa;IACb,+BAA+B;AACnC;;AAEA;IACI,cAAc;IACd,kBAAkB;IAClB,oDAAoD;AACxD;;AAEA;IACI,gBAAgB;AACpB;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,SAAS;AACb","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.agent-tool-ui-container {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: start;\n background-color: transparent;\n padding: 10px;\n color: var(--jp-ui-font-color2);\n}\n\n.agent-tool-ui-container:not(.agent-tool-ui-error-fixup) {\n margin: 10px 0;\n border-radius: 5px;\n border: 1px solid var(--jp-cell-editor-border-color);\n}\n\n.agent-tool-ui-container:not(.agent-tool-ui-error-fixup) .agent-tool-ui-content {\n margin-left: 5px;\n}\n\n.agent-tool-ui-content {\n display: flex;\n align-items: center;\n gap: 10px;\n} \n"],"sourceRoot":""}]);
10479
10994
  // Exports
10480
10995
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
10481
10996
 
10482
10997
 
10483
10998
  /***/ }),
10484
10999
 
10485
- /***/ "./node_modules/css-loader/dist/cjs.js!./style/CTACarousel.css":
10486
- /*!*********************************************************************!*\
10487
- !*** ./node_modules/css-loader/dist/cjs.js!./style/CTACarousel.css ***!
10488
- \*********************************************************************/
11000
+ /***/ "./node_modules/css-loader/dist/cjs.js!./style/AlertBlock.css":
11001
+ /*!********************************************************************!*\
11002
+ !*** ./node_modules/css-loader/dist/cjs.js!./style/AlertBlock.css ***!
11003
+ \********************************************************************/
10489
11004
  /***/ ((module, __webpack_exports__, __webpack_require__) => {
10490
11005
 
10491
11006
  __webpack_require__.r(__webpack_exports__);
@@ -10506,7 +11021,743 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
10506
11021
  * Distributed under the terms of the GNU Affero General Public License v3.0 License.
10507
11022
  */
10508
11023
 
10509
- .cta-carousel {
11024
+ /* Base alert container styles */
11025
+ .chat-message-alert-container {
11026
+ display: flex;
11027
+ flex-direction: column;
11028
+ gap: 10px;
11029
+ border-radius: 5px;
11030
+ padding: 10px;
11031
+ border: 1px solid;
11032
+ }
11033
+
11034
+ /* Red variant for errors */
11035
+ .chat-message-alert-container.error {
11036
+ background-color: var(--red-300);
11037
+ border-color: var(--red-900);
11038
+ color: var(--red-900);
11039
+ }
11040
+
11041
+ /* Purple variant for upgrades/CTAs */
11042
+ .chat-message-alert-container.upgrade {
11043
+ background-color: var(--purple-300);
11044
+ color: var(--grey-900);
11045
+ }
11046
+
11047
+ .chat-message-alert a {
11048
+ color: var(--purple-700) !important;
11049
+ text-decoration: underline;
11050
+ }
11051
+
11052
+ /* Error message styles - red variant */
11053
+ .alert-error-message {
11054
+ font-size: 14px;
11055
+ font-weight: 600;
11056
+ line-height: 1.4;
11057
+ margin-bottom: 8px;
11058
+ }
11059
+
11060
+ .chat-message-alert-container.error .alert-error-message {
11061
+ color: var(--red-900);
11062
+ }
11063
+
11064
+ .alert-actions-header {
11065
+ margin-bottom: 12px;
11066
+ }
11067
+
11068
+ .alert-actions-title {
11069
+ font-weight: 500;
11070
+ margin: 0 0 8px 0;
11071
+ font-size: 13px;
11072
+ }
11073
+
11074
+ .chat-message-alert-container.error .alert-actions-title {
11075
+ color: var(--red-900);
11076
+ }
11077
+
11078
+ .alert-actions-list {
11079
+ margin: 0;
11080
+ padding-left: 16px;
11081
+ }
11082
+
11083
+ .chat-message-alert-container.error .alert-actions-list {
11084
+ color: var(--red-800);
11085
+ }
11086
+
11087
+ .chat-message-alert-container.upgrade .alert-actions-list {
11088
+ color: var(--purple-800);
11089
+ }
11090
+
11091
+ .alert-actions-list li {
11092
+ margin-bottom: 4px;
11093
+ font-size: 13px;
11094
+ line-height: 1.4;
11095
+ }
11096
+
11097
+ .alert-action-item {
11098
+ display: flex;
11099
+ align-items: flex-start;
11100
+ gap: 8px;
11101
+ padding: 8px 0;
11102
+ font-size: 13px;
11103
+ line-height: 1.4;
11104
+ }
11105
+
11106
+ .chat-message-alert-container.error .alert-action-item {
11107
+ color: var(--red-800);
11108
+ }
11109
+
11110
+ .chat-message-alert-container.upgrade .alert-action-item {
11111
+ color: var(--purple-800);
11112
+ }
11113
+
11114
+ .action-icon {
11115
+ font-size: 16px;
11116
+ flex-shrink: 0;
11117
+ margin-top: 1px;
11118
+ }
11119
+
11120
+ .details-toggle {
11121
+ display: inline-flex;
11122
+ align-items: center;
11123
+ }
11124
+
11125
+ .toggle-button {
11126
+ background: none;
11127
+ border: none;
11128
+ padding: 0;
11129
+ cursor: pointer;
11130
+ display: flex;
11131
+ align-items: center;
11132
+ gap: 4px;
11133
+ font-size: 12px;
11134
+ font-family: inherit;
11135
+ text-decoration: underline;
11136
+ }
11137
+
11138
+ .chat-message-alert-container.error .toggle-button {
11139
+ color: var(--red-900);
11140
+ }
11141
+
11142
+ .toggle-button:hover {
11143
+ text-decoration: none;
11144
+ }
11145
+
11146
+ .chat-message-alert-container.error .toggle-button:hover {
11147
+ color: var(--red-800);
11148
+ }
11149
+
11150
+ .chat-message-alert-container.upgrade .toggle-button:hover {
11151
+ color: var(--purple-800);
11152
+ }
11153
+
11154
+ .toggle-caret {
11155
+ font-size: 10px;
11156
+ transition: transform 0.2s ease;
11157
+ display: inline-block;
11158
+ text-decoration: none !important;
11159
+ }
11160
+
11161
+ .toggle-caret.open {
11162
+ transform: rotate(180deg);
11163
+ }
11164
+
11165
+ .details-content {
11166
+ margin-top: 8px;
11167
+ margin-left: 16px;
11168
+ padding: 8px;
11169
+ background-color: var(--grey-100);
11170
+ border-radius: 4px;
11171
+ animation: slideDown 0.2s ease-out;
11172
+ }
11173
+
11174
+ @keyframes slideDown {
11175
+ from {
11176
+ opacity: 0;
11177
+ transform: translateY(-4px);
11178
+ }
11179
+ to {
11180
+ opacity: 1;
11181
+ transform: translateY(0);
11182
+ }
11183
+ }
11184
+
11185
+ .secondary-option-link {
11186
+ color: var(--purple-700) !important;
11187
+ text-decoration: underline !important;
11188
+ }
11189
+
11190
+ .secondary-option-link:hover {
11191
+ color: var(--purple-600) !important;
11192
+ }
11193
+ `, "",{"version":3,"sources":["webpack://./style/AlertBlock.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF,gCAAgC;AAChC;EACE,aAAa;EACb,sBAAsB;EACtB,SAAS;EACT,kBAAkB;EAClB,aAAa;EACb,iBAAiB;AACnB;;AAEA,2BAA2B;AAC3B;EACE,gCAAgC;EAChC,4BAA4B;EAC5B,qBAAqB;AACvB;;AAEA,qCAAqC;AACrC;EACE,mCAAmC;EACnC,sBAAsB;AACxB;;AAEA;EACE,mCAAmC;EACnC,0BAA0B;AAC5B;;AAEA,uCAAuC;AACvC;EACE,eAAe;EACf,gBAAgB;EAChB,gBAAgB;EAChB,kBAAkB;AACpB;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,gBAAgB;EAChB,iBAAiB;EACjB,eAAe;AACjB;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,SAAS;EACT,kBAAkB;AACpB;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,kBAAkB;EAClB,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,uBAAuB;EACvB,QAAQ;EACR,cAAc;EACd,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,eAAe;EACf,cAAc;EACd,eAAe;AACjB;;AAEA;EACE,oBAAoB;EACpB,mBAAmB;AACrB;;AAEA;EACE,gBAAgB;EAChB,YAAY;EACZ,UAAU;EACV,eAAe;EACf,aAAa;EACb,mBAAmB;EACnB,QAAQ;EACR,eAAe;EACf,oBAAoB;EACpB,0BAA0B;AAC5B;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,eAAe;EACf,+BAA+B;EAC/B,qBAAqB;EACrB,gCAAgC;AAClC;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,eAAe;EACf,iBAAiB;EACjB,YAAY;EACZ,iCAAiC;EACjC,kBAAkB;EAClB,kCAAkC;AACpC;;AAEA;EACE;IACE,UAAU;IACV,2BAA2B;EAC7B;EACA;IACE,UAAU;IACV,wBAAwB;EAC1B;AACF;;AAEA;IACI,mCAAmC;IACnC,qCAAqC;AACzC;;AAEA;IACI,mCAAmC;AACvC","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n/* Base alert container styles */\n.chat-message-alert-container {\n display: flex;\n flex-direction: column;\n gap: 10px;\n border-radius: 5px;\n padding: 10px;\n border: 1px solid;\n}\n\n/* Red variant for errors */\n.chat-message-alert-container.error {\n background-color: var(--red-300);\n border-color: var(--red-900);\n color: var(--red-900);\n}\n\n/* Purple variant for upgrades/CTAs */\n.chat-message-alert-container.upgrade {\n background-color: var(--purple-300);\n color: var(--grey-900);\n}\n\n.chat-message-alert a {\n color: var(--purple-700) !important;\n text-decoration: underline;\n}\n\n/* Error message styles - red variant */\n.alert-error-message {\n font-size: 14px;\n font-weight: 600;\n line-height: 1.4;\n margin-bottom: 8px;\n}\n\n.chat-message-alert-container.error .alert-error-message {\n color: var(--red-900);\n}\n\n.alert-actions-header {\n margin-bottom: 12px;\n}\n\n.alert-actions-title {\n font-weight: 500;\n margin: 0 0 8px 0;\n font-size: 13px;\n}\n\n.chat-message-alert-container.error .alert-actions-title {\n color: var(--red-900);\n}\n\n.alert-actions-list {\n margin: 0;\n padding-left: 16px;\n}\n\n.chat-message-alert-container.error .alert-actions-list {\n color: var(--red-800);\n}\n\n.chat-message-alert-container.upgrade .alert-actions-list {\n color: var(--purple-800);\n}\n\n.alert-actions-list li {\n margin-bottom: 4px;\n font-size: 13px;\n line-height: 1.4;\n}\n\n.alert-action-item {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 8px 0;\n font-size: 13px;\n line-height: 1.4;\n}\n\n.chat-message-alert-container.error .alert-action-item {\n color: var(--red-800);\n}\n\n.chat-message-alert-container.upgrade .alert-action-item {\n color: var(--purple-800);\n}\n\n.action-icon {\n font-size: 16px;\n flex-shrink: 0;\n margin-top: 1px;\n}\n\n.details-toggle {\n display: inline-flex;\n align-items: center;\n}\n\n.toggle-button {\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n font-family: inherit;\n text-decoration: underline;\n}\n\n.chat-message-alert-container.error .toggle-button {\n color: var(--red-900);\n}\n\n.toggle-button:hover {\n text-decoration: none;\n}\n\n.chat-message-alert-container.error .toggle-button:hover {\n color: var(--red-800);\n}\n\n.chat-message-alert-container.upgrade .toggle-button:hover {\n color: var(--purple-800);\n}\n\n.toggle-caret {\n font-size: 10px;\n transition: transform 0.2s ease;\n display: inline-block;\n text-decoration: none !important;\n}\n\n.toggle-caret.open {\n transform: rotate(180deg);\n}\n\n.details-content {\n margin-top: 8px;\n margin-left: 16px;\n padding: 8px;\n background-color: var(--grey-100);\n border-radius: 4px;\n animation: slideDown 0.2s ease-out;\n}\n\n@keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-4px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.secondary-option-link {\n color: var(--purple-700) !important;\n text-decoration: underline !important;\n}\n\n.secondary-option-link:hover {\n color: var(--purple-600) !important;\n}\n"],"sourceRoot":""}]);
11194
+ // Exports
11195
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
11196
+
11197
+
11198
+ /***/ }),
11199
+
11200
+ /***/ "./node_modules/css-loader/dist/cjs.js!./style/AssumptionTool.css":
11201
+ /*!************************************************************************!*\
11202
+ !*** ./node_modules/css-loader/dist/cjs.js!./style/AssumptionTool.css ***!
11203
+ \************************************************************************/
11204
+ /***/ ((module, __webpack_exports__, __webpack_require__) => {
11205
+
11206
+ __webpack_require__.r(__webpack_exports__);
11207
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
11208
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
11209
+ /* harmony export */ });
11210
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js");
11211
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
11212
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
11213
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
11214
+ // Imports
11215
+
11216
+
11217
+ var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
11218
+ // Module
11219
+ ___CSS_LOADER_EXPORT___.push([module.id, `/*
11220
+ * Copyright (c) Saga Inc.
11221
+ * Distributed under the terms of the GNU Affero General Public License v3.0 License.
11222
+ */
11223
+
11224
+ .assumption-tool-container {
11225
+ color: var(--jp-ui-font-color2);
11226
+ display: flex;
11227
+ justify-content: space-between;
11228
+ align-items: center;
11229
+ margin-top: 10px;
11230
+ margin-bottom: 10px;
11231
+ position: relative;
11232
+ padding: 8px var(--chat-taskpane-tool-call-horizontal-padding);
11233
+ border-radius: var(--chat-taskpane-item-border-radius);
11234
+ border: 1px solid var(--jp-cell-editor-border-color);
11235
+ cursor: default;
11236
+ }
11237
+
11238
+ .assumption-header-label {
11239
+ position: absolute;
11240
+ top: -10px;
11241
+ left: 12px;
11242
+ background-color: var(--chat-background-color);
11243
+ padding: 2px 8px;
11244
+ border-radius: 4px;
11245
+ font-size: 12px;
11246
+ color: var(--jp-ui-font-color2);
11247
+ font-style: italic;
11248
+ }
11249
+
11250
+ .assumption-content {
11251
+ display: flex;
11252
+ align-items: flex-start;
11253
+ gap: 8px;
11254
+ color: var(--jp-ui-font-color2);
11255
+ font-size: 14px;
11256
+ line-height: 1.4;
11257
+ margin: 0;
11258
+ padding: 10px 10px 5px 10px;
11259
+ }
11260
+
11261
+ .assumption-content ul {
11262
+ margin: 0;
11263
+ padding-left: 10px;
11264
+ }`, "",{"version":3,"sources":["webpack://./style/AssumptionTool.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;IACI,+BAA+B;IAC/B,aAAa;IACb,8BAA8B;IAC9B,mBAAmB;IACnB,gBAAgB;IAChB,mBAAmB;IACnB,kBAAkB;IAClB,8DAA8D;IAC9D,sDAAsD;IACtD,oDAAoD;IACpD,eAAe;AACnB;;AAEA;IACI,kBAAkB;IAClB,UAAU;IACV,UAAU;IACV,8CAA8C;IAC9C,gBAAgB;IAChB,kBAAkB;IAClB,eAAe;IACf,+BAA+B;IAC/B,kBAAkB;AACtB;;AAEA;IACI,aAAa;IACb,uBAAuB;IACvB,QAAQ;IACR,+BAA+B;IAC/B,eAAe;IACf,gBAAgB;IAChB,SAAS;IACT,2BAA2B;AAC/B;;AAEA;IACI,SAAS;IACT,kBAAkB;AACtB","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.assumption-tool-container {\n color: var(--jp-ui-font-color2);\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-top: 10px;\n margin-bottom: 10px;\n position: relative;\n padding: 8px var(--chat-taskpane-tool-call-horizontal-padding);\n border-radius: var(--chat-taskpane-item-border-radius);\n border: 1px solid var(--jp-cell-editor-border-color);\n cursor: default;\n}\n\n.assumption-header-label {\n position: absolute;\n top: -10px;\n left: 12px;\n background-color: var(--chat-background-color);\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 12px;\n color: var(--jp-ui-font-color2);\n font-style: italic;\n}\n\n.assumption-content {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n color: var(--jp-ui-font-color2);\n font-size: 14px;\n line-height: 1.4;\n margin: 0;\n padding: 10px 10px 5px 10px;\n}\n\n.assumption-content ul {\n margin: 0;\n padding-left: 10px;\n}"],"sourceRoot":""}]);
11265
+ // Exports
11266
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
11267
+
11268
+
11269
+ /***/ }),
11270
+
11271
+ /***/ "./node_modules/css-loader/dist/cjs.js!./style/AuthPopup.css":
11272
+ /*!*******************************************************************!*\
11273
+ !*** ./node_modules/css-loader/dist/cjs.js!./style/AuthPopup.css ***!
11274
+ \*******************************************************************/
11275
+ /***/ ((module, __webpack_exports__, __webpack_require__) => {
11276
+
11277
+ __webpack_require__.r(__webpack_exports__);
11278
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
11279
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
11280
+ /* harmony export */ });
11281
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js");
11282
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
11283
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
11284
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
11285
+ // Imports
11286
+
11287
+
11288
+ var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
11289
+ // Module
11290
+ ___CSS_LOADER_EXPORT___.push([module.id, `/*
11291
+ * Copyright (c) Saga Inc.
11292
+ * Distributed under the terms of the GNU Affero General Public License v3.0 License.
11293
+ */
11294
+
11295
+ /* Auth popup specific styling to integrate AWS Amplify with Mito theme */
11296
+ .modal-content .amplify-authenticator {
11297
+ --amplify-colors-font-primary: var(--jp-ui-font-color1);
11298
+ --amplify-colors-font-secondary: var(--jp-ui-font-color2);
11299
+ --amplify-colors-background-primary: var(--jp-layout-color0);
11300
+ --amplify-colors-background-secondary: var(--jp-layout-color1);
11301
+ --amplify-colors-border-primary: var(--jp-border-color1);
11302
+ --amplify-colors-brand-primary-10: var(--purple-700);
11303
+ --amplify-colors-brand-primary-80: var(--purple-500);
11304
+ --amplify-colors-brand-primary-90: var(--purple-400);
11305
+ --amplify-colors-brand-primary-100: var(--purple-300);
11306
+ --amplify-radii-small: 4px;
11307
+ --amplify-radii-medium: 4px;
11308
+ --amplify-space-small: 8px;
11309
+ --amplify-space-medium: 12px;
11310
+ --amplify-space-large: 16px;
11311
+ --amplify-font-sizes-small: 14px;
11312
+ --amplify-font-sizes-medium: 14px;
11313
+
11314
+ /* Remove the blue top border on active tabs */
11315
+ --amplify-components-tabs-item-active-border-width: 0;
11316
+ --amplify-components-tabs-item-border-width: 0;
11317
+
11318
+ /* Ensure active tab bottom border uses purple */
11319
+ --amplify-components-tabs-item-active-border-color: var(--purple-500);
11320
+ --amplify-components-tabs-item-active-color: var(--purple-700);
11321
+ }
11322
+
11323
+ /* Ensure modal content has adequate width for auth form */
11324
+ .modal-content:has(.amplify-authenticator) {
11325
+ width: 480px;
11326
+ max-width: 90vw;
11327
+ min-width: 400px;
11328
+ }
11329
+
11330
+ /* Style the authenticator container */
11331
+ .modal-content .amplify-authenticator__modal {
11332
+ background: transparent !important;
11333
+ box-shadow: none !important;
11334
+ border: none !important;
11335
+ }
11336
+
11337
+ /* Constrain authenticator content within modal bounds */
11338
+ .modal-content .amplify-authenticator {
11339
+ width: 100% !important;
11340
+ max-width: 100% !important;
11341
+ overflow: hidden !important;
11342
+ }
11343
+
11344
+ /* Specifically target the data-amplify-container to prevent overflow */
11345
+ .modal-content [data-amplify-container] {
11346
+ width: 100% !important;
11347
+ max-width: 100% !important;
11348
+ overflow: hidden !important;
11349
+ box-sizing: border-box !important;
11350
+ }
11351
+
11352
+
11353
+
11354
+ /* Constrain the tabs container */
11355
+ .modal-content .amplify-tabs {
11356
+ width: 100% !important;
11357
+ max-width: 100% !important;
11358
+ overflow: hidden !important;
11359
+ }
11360
+
11361
+ /* Ensure form fields don't overflow */
11362
+ .modal-content .amplify-field,
11363
+ .modal-content .amplify-field__group {
11364
+ width: 100% !important;
11365
+ max-width: 100% !important;
11366
+ box-sizing: border-box !important;
11367
+ }
11368
+
11369
+ /* Align form elements with Mito styling */
11370
+ .modal-content .amplify-field__label {
11371
+ color: var(--jp-ui-font-color1) !important;
11372
+ font-weight: 500 !important;
11373
+ }
11374
+
11375
+ .modal-content .amplify-input,
11376
+ .modal-content .amplify-select {
11377
+ background: var(--jp-layout-color0) !important;
11378
+ border: 1px solid var(--jp-border-color1) !important;
11379
+ color: var(--jp-ui-font-color1) !important;
11380
+ border-radius: 4px !important;
11381
+ }
11382
+
11383
+ .modal-content .amplify-input:focus,
11384
+ .modal-content .amplify-select:focus {
11385
+ border-color: var(--purple-500) !important;
11386
+ box-shadow: 0 0 0 2px rgba(124, 58, 237, 0.1) !important;
11387
+ }
11388
+
11389
+
11390
+
11391
+ /* Style Amplify buttons to match Mito theme */
11392
+ .modal-content .amplify-button--primary {
11393
+ background-color: var(--purple-400) !important;
11394
+ color: var(--purple-700) !important;
11395
+ border: none !important;
11396
+ border-radius: 4px !important;
11397
+ font-weight: 500 !important;
11398
+ padding: 8px 16px !important;
11399
+ width: 100% !important;
11400
+ max-width: 100% !important;
11401
+ box-sizing: border-box !important;
11402
+ }
11403
+
11404
+ .modal-content .amplify-button--primary:hover {
11405
+ background-color: var(--purple-500) !important;
11406
+ }
11407
+
11408
+ .modal-content .amplify-button--link {
11409
+ color: var(--purple-600) !important;
11410
+ text-decoration: none !important;
11411
+ }
11412
+
11413
+ .modal-content .amplify-button--link:hover {
11414
+ color: var(--purple-700) !important;
11415
+ text-decoration: underline !important;
11416
+ }
11417
+
11418
+ /* Error and success message styling */
11419
+ .modal-content .amplify-alert--error {
11420
+ background-color: var(--red-300) !important;
11421
+ color: var(--red-900) !important;
11422
+ border: 1px solid var(--red-400) !important;
11423
+ border-radius: 4px !important;
11424
+ }
11425
+
11426
+ .modal-content .amplify-alert--info {
11427
+ background-color: var(--purple-300) !important;
11428
+ color: var(--purple-700) !important;
11429
+ border: 1px solid var(--purple-400) !important;
11430
+ border-radius: 4px !important;
11431
+ }
11432
+
11433
+ /* Tab styling for sign in/sign up tabs */
11434
+ .modal-content .amplify-tabs__item {
11435
+ color: var(--jp-ui-font-color2) !important;
11436
+ border-bottom: 2px solid transparent !important;
11437
+ }
11438
+
11439
+ .modal-content .amplify-tabs__item[data-state="active"] {
11440
+ color: var(--purple-700) !important;
11441
+ border-bottom-color: var(--purple-500) !important;
11442
+ }
11443
+
11444
+ /* Ensure inactive tabs don't have purple styling */
11445
+ .modal-content .amplify-tabs__item[data-state="inactive"] {
11446
+ color: var(--jp-ui-font-color2) !important;
11447
+ border-bottom: 2px solid transparent !important;
11448
+ }
11449
+
11450
+
11451
+
11452
+ .modal-content .amplify-tabs__item:hover {
11453
+ color: var(--jp-ui-font-color1) !important;
11454
+ }
11455
+
11456
+ /* Override any default blue tab styling from Amplify */
11457
+ .modal-content .amplify-tabs__list {
11458
+ border-bottom: 1px solid var(--jp-border-color1) !important;
11459
+ }
11460
+
11461
+ .modal-content .amplify-tabs__item[data-state="active"]:after,
11462
+ .modal-content .amplify-tabs__item[aria-selected="true"]:after {
11463
+ background-color: var(--purple-500) !important;
11464
+ border-color: var(--purple-500) !important;
11465
+ }
11466
+
11467
+ /* Override any Amplify default blue colors */
11468
+ .modal-content .amplify-tabs [data-amplify-color-mode] .amplify-tabs__item[data-state="active"] {
11469
+ color: var(--purple-700) !important;
11470
+ border-bottom-color: var(--purple-500) !important;
11471
+ }
11472
+
11473
+ .modal-content .amplify-tabs [data-amplify-color-mode] .amplify-tabs__item[aria-selected="true"] {
11474
+ color: var(--purple-700) !important;
11475
+ border-bottom-color: var(--purple-500) !important;
11476
+ }
11477
+
11478
+ /* Additional selectors to ensure default active state on initial load */
11479
+ .modal-content .amplify-tabs__item[aria-selected="true"] {
11480
+ color: var(--purple-700) !important;
11481
+ border-bottom: 2px solid var(--purple-500) !important;
11482
+ }
11483
+
11484
+
11485
+
11486
+ /* Loading spinner colors */
11487
+ .modal-content .amplify-loader {
11488
+ border-top-color: var(--purple-500) !important;
11489
+ }
11490
+
11491
+ /* Additional purple color overrides for any remaining blue elements */
11492
+ .modal-content .amplify-tabs__item[data-state="active"] *,
11493
+ .modal-content .amplify-tabs__item[aria-selected="true"] * {
11494
+ color: var(--purple-700) !important;
11495
+ }
11496
+
11497
+ /* Override focus states to use purple */
11498
+ .modal-content .amplify-tabs__item:focus,
11499
+ .modal-content .amplify-tabs__item:focus-visible {
11500
+ border-bottom-color: var(--purple-500) !important;
11501
+ outline-color: var(--purple-500) !important;
11502
+ }
11503
+
11504
+ /* Ensure any nested tab content uses purple theme */
11505
+ .modal-content [data-amplify-authenticator] [data-amplify-router] .amplify-tabs__item[data-state="active"] {
11506
+ color: var(--purple-700) !important;
11507
+ border-bottom-color: var(--purple-500) !important;
11508
+ }
11509
+
11510
+ /* Remove any top borders, outlines, or blue styling from tabs */
11511
+ .modal-content .amplify-tabs__item {
11512
+ border-top: none !important;
11513
+ border-left: none !important;
11514
+ border-right: none !important;
11515
+ outline: none !important;
11516
+ }
11517
+
11518
+ .modal-content .amplify-tabs__item[data-state="active"],
11519
+ .modal-content .amplify-tabs__item[aria-selected="true"] {
11520
+ border-top: none !important;
11521
+ border-left: none !important;
11522
+ border-right: none !important;
11523
+ outline: none !important;
11524
+ box-shadow: none !important;
11525
+ }
11526
+
11527
+ /* Remove any pseudo-element borders that might create blue lines */
11528
+ .modal-content .amplify-tabs__item:before,
11529
+ .modal-content .amplify-tabs__item:after,
11530
+ .modal-content .amplify-tabs__item[data-state="active"]:before,
11531
+ .modal-content .amplify-tabs__item[aria-selected="true"]:before {
11532
+ display: none !important;
11533
+ border: none !important;
11534
+ background: none !important;
11535
+ }
11536
+
11537
+
11538
+
11539
+ /* Additional containment rules for better layout */
11540
+ .modal-content .amplify-authenticator * {
11541
+ box-sizing: border-box !important;
11542
+ }
11543
+
11544
+ /* Prevent any Amplify containers from overflowing */
11545
+ .modal-content [data-amplify-authenticator],
11546
+ .modal-content [data-amplify-router],
11547
+ .modal-content [data-amplify-authenticator-signin],
11548
+ .modal-content [data-amplify-authenticator-signup] {
11549
+ width: 100% !important;
11550
+ max-width: 100% !important;
11551
+ overflow: hidden !important;
11552
+ box-sizing: border-box !important;
11553
+ }
11554
+
11555
+ /* Remove any default margins or padding that might cause overflow */
11556
+ .modal-content [data-amplify-container] * {
11557
+ max-width: 100% !important;
11558
+ }
11559
+
11560
+ /* Ensure modal content itself doesn't allow horizontal scroll */
11561
+ .modal-content:has(.amplify-authenticator) {
11562
+ overflow-x: hidden !important;
11563
+ }
11564
+
11565
+ /* Target main Amplify containers but not inputs */
11566
+ .modal-content div[data-amplify-container] {
11567
+ width: 100% !important;
11568
+ max-width: 100% !important;
11569
+ box-sizing: border-box !important;
11570
+ }
11571
+
11572
+ /* Ensure tab panels fit within bounds */
11573
+ .modal-content .amplify-tabs__panel {
11574
+ width: 100% !important;
11575
+ max-width: 100% !important;
11576
+ overflow: hidden !important;
11577
+ padding: 16px !important;
11578
+ }
11579
+
11580
+ /* Ensure tab list doesn't overflow */
11581
+ .modal-content .amplify-tabs__list {
11582
+ width: 100% !important;
11583
+ max-width: 100% !important;
11584
+ display: flex !important;
11585
+ justify-content: space-around !important;
11586
+ }
11587
+
11588
+ .modal-content .amplify-tabs__item {
11589
+ flex: 1 !important;
11590
+ text-align: center !important;
11591
+ max-width: 50% !important;
11592
+ }
11593
+
11594
+ /* Add this to your AuthPopup.css file */
11595
+
11596
+ /* Hide password requirements by default */
11597
+ .password-requirements {
11598
+ display: none;
11599
+ padding: 16px 20px;
11600
+ background-color: var(--jp-layout-color2);
11601
+ border-top: 1px solid var(--jp-border-color1);
11602
+ font-size: 13px;
11603
+ }
11604
+
11605
+ /* Show password requirements when sign-up form is present */
11606
+ .modal-content:has([data-amplify-authenticator-signup]) .password-requirements {
11607
+ display: block;
11608
+ }
11609
+
11610
+ /* Style the requirements content */
11611
+ .password-requirements p {
11612
+ margin: 0 0 8px 0;
11613
+ font-weight: bold;
11614
+ color: var(--jp-ui-font-color1);
11615
+ }
11616
+
11617
+ .password-requirements ul {
11618
+ margin: 0;
11619
+ padding-left: 20px;
11620
+ color: var(--jp-ui-font-color2);
11621
+ font-size: 12px;
11622
+ }
11623
+
11624
+ /* Success message styling */
11625
+ .auth-success-message {
11626
+ padding: 32px 24px;
11627
+ text-align: center;
11628
+ background: var(--jp-layout-color0);
11629
+ border-radius: 8px;
11630
+ }
11631
+
11632
+ .success-icon {
11633
+ margin-bottom: 20px;
11634
+ display: flex;
11635
+ justify-content: center;
11636
+ }
11637
+
11638
+ .success-title {
11639
+ color: var(--jp-ui-font-color1);
11640
+ font-size: 24px;
11641
+ font-weight: 600;
11642
+ margin: 0 0 12px 0;
11643
+ font-family: var(--jp-ui-font-family);
11644
+ }
11645
+
11646
+ .success-description {
11647
+ color: var(--jp-ui-font-color1);
11648
+ font-size: 16px;
11649
+ margin: 0 0 16px 0;
11650
+ font-family: var(--jp-ui-font-family);
11651
+ line-height: 1.5;
11652
+ }
11653
+
11654
+ .success-timer {
11655
+ color: var(--jp-ui-font-color2);
11656
+ font-size: 14px;
11657
+ margin: 0 0 24px 0;
11658
+ font-family: var(--jp-ui-font-family);
11659
+ font-style: italic;
11660
+ }
11661
+
11662
+ .success-actions {
11663
+ display: flex;
11664
+ justify-content: center;
11665
+ gap: 12px;
11666
+ }
11667
+
11668
+ /* Progress bar animation */
11669
+ @keyframes progressFill {
11670
+ from { width: 0%; }
11671
+ to { width: 100%; }
11672
+ }
11673
+
11674
+ /* Welcome message container styling */
11675
+ .welcome-message-container {
11676
+ border: 1px solid var(--jp-border-color1);
11677
+ border-radius: 8px;
11678
+ padding: 32px 24px;
11679
+ margin: 16px 0;
11680
+ background-color: var(--jp-layout-color0);
11681
+ text-align: center;
11682
+ }
11683
+
11684
+ /* Welcome message title */
11685
+ .welcome-message-title {
11686
+ color: var(--jp-ui-font-color1);
11687
+ font-size: 24px;
11688
+ font-weight: 600;
11689
+ margin: 0 0 12px 0;
11690
+ font-family: var(--jp-ui-font-family);
11691
+ }
11692
+
11693
+ /* Welcome message description */
11694
+ .welcome-message-description {
11695
+ color: var(--jp-ui-font-color1);
11696
+ font-size: 16px;
11697
+ margin: 0 0 16px 0;
11698
+ font-family: var(--jp-ui-font-family);
11699
+ line-height: 1.5;
11700
+ }
11701
+
11702
+ /* Progress bar container */
11703
+ .progress-bar-container {
11704
+ width: 100%;
11705
+ height: 4px;
11706
+ background-color: var(--jp-border-color1);
11707
+ border-radius: 2px;
11708
+ overflow: hidden;
11709
+ margin-top: 20px;
11710
+ margin-bottom: 12px;
11711
+ }
11712
+
11713
+ /* Progress bar fill with CSS animation */
11714
+ .progress-bar-fill {
11715
+ width: 0%;
11716
+ height: 100%;
11717
+ background-color: var(--purple-500);
11718
+ border-radius: 2px;
11719
+ animation: progressFill 3s linear forwards;
11720
+ }
11721
+
11722
+ /* Progress bar timer text */
11723
+ .progress-bar-timer {
11724
+ color: var(--jp-ui-font-color2);
11725
+ font-size: 14px;
11726
+ margin: 0;
11727
+ font-family: var(--jp-ui-font-family);
11728
+ font-style: italic;
11729
+ }`, "",{"version":3,"sources":["webpack://./style/AuthPopup.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF,yEAAyE;AACzE;EACE,uDAAuD;EACvD,yDAAyD;EACzD,4DAA4D;EAC5D,8DAA8D;EAC9D,wDAAwD;EACxD,oDAAoD;EACpD,oDAAoD;EACpD,oDAAoD;EACpD,qDAAqD;EACrD,0BAA0B;EAC1B,2BAA2B;EAC3B,0BAA0B;EAC1B,4BAA4B;EAC5B,2BAA2B;EAC3B,gCAAgC;EAChC,iCAAiC;;EAEjC,8CAA8C;EAC9C,qDAAqD;EACrD,8CAA8C;;EAE9C,gDAAgD;EAChD,qEAAqE;EACrE,8DAA8D;AAChE;;AAEA,0DAA0D;AAC1D;EACE,YAAY;EACZ,eAAe;EACf,gBAAgB;AAClB;;AAEA,sCAAsC;AACtC;EACE,kCAAkC;EAClC,2BAA2B;EAC3B,uBAAuB;AACzB;;AAEA,wDAAwD;AACxD;EACE,sBAAsB;EACtB,0BAA0B;EAC1B,2BAA2B;AAC7B;;AAEA,uEAAuE;AACvE;EACE,sBAAsB;EACtB,0BAA0B;EAC1B,2BAA2B;EAC3B,iCAAiC;AACnC;;;;AAIA,iCAAiC;AACjC;EACE,sBAAsB;EACtB,0BAA0B;EAC1B,2BAA2B;AAC7B;;AAEA,sCAAsC;AACtC;;EAEE,sBAAsB;EACtB,0BAA0B;EAC1B,iCAAiC;AACnC;;AAEA,0CAA0C;AAC1C;EACE,0CAA0C;EAC1C,2BAA2B;AAC7B;;AAEA;;EAEE,8CAA8C;EAC9C,oDAAoD;EACpD,0CAA0C;EAC1C,6BAA6B;AAC/B;;AAEA;;EAEE,0CAA0C;EAC1C,wDAAwD;AAC1D;;;;AAIA,8CAA8C;AAC9C;EACE,8CAA8C;EAC9C,mCAAmC;EACnC,uBAAuB;EACvB,6BAA6B;EAC7B,2BAA2B;EAC3B,4BAA4B;EAC5B,sBAAsB;EACtB,0BAA0B;EAC1B,iCAAiC;AACnC;;AAEA;EACE,8CAA8C;AAChD;;AAEA;EACE,mCAAmC;EACnC,gCAAgC;AAClC;;AAEA;EACE,mCAAmC;EACnC,qCAAqC;AACvC;;AAEA,sCAAsC;AACtC;EACE,2CAA2C;EAC3C,gCAAgC;EAChC,2CAA2C;EAC3C,6BAA6B;AAC/B;;AAEA;EACE,8CAA8C;EAC9C,mCAAmC;EACnC,8CAA8C;EAC9C,6BAA6B;AAC/B;;AAEA,yCAAyC;AACzC;EACE,0CAA0C;EAC1C,+CAA+C;AACjD;;AAEA;EACE,mCAAmC;EACnC,iDAAiD;AACnD;;AAEA,mDAAmD;AACnD;EACE,0CAA0C;EAC1C,+CAA+C;AACjD;;;;AAIA;EACE,0CAA0C;AAC5C;;AAEA,uDAAuD;AACvD;EACE,2DAA2D;AAC7D;;AAEA;;EAEE,8CAA8C;EAC9C,0CAA0C;AAC5C;;AAEA,6CAA6C;AAC7C;EACE,mCAAmC;EACnC,iDAAiD;AACnD;;AAEA;EACE,mCAAmC;EACnC,iDAAiD;AACnD;;AAEA,wEAAwE;AACxE;EACE,mCAAmC;EACnC,qDAAqD;AACvD;;;;AAIA,2BAA2B;AAC3B;EACE,8CAA8C;AAChD;;AAEA,sEAAsE;AACtE;;EAEE,mCAAmC;AACrC;;AAEA,wCAAwC;AACxC;;EAEE,iDAAiD;EACjD,2CAA2C;AAC7C;;AAEA,oDAAoD;AACpD;EACE,mCAAmC;EACnC,iDAAiD;AACnD;;AAEA,gEAAgE;AAChE;EACE,2BAA2B;EAC3B,4BAA4B;EAC5B,6BAA6B;EAC7B,wBAAwB;AAC1B;;AAEA;;EAEE,2BAA2B;EAC3B,4BAA4B;EAC5B,6BAA6B;EAC7B,wBAAwB;EACxB,2BAA2B;AAC7B;;AAEA,mEAAmE;AACnE;;;;EAIE,wBAAwB;EACxB,uBAAuB;EACvB,2BAA2B;AAC7B;;;;AAIA,mDAAmD;AACnD;EACE,iCAAiC;AACnC;;AAEA,oDAAoD;AACpD;;;;EAIE,sBAAsB;EACtB,0BAA0B;EAC1B,2BAA2B;EAC3B,iCAAiC;AACnC;;AAEA,oEAAoE;AACpE;EACE,0BAA0B;AAC5B;;AAEA,gEAAgE;AAChE;EACE,6BAA6B;AAC/B;;AAEA,kDAAkD;AAClD;EACE,sBAAsB;EACtB,0BAA0B;EAC1B,iCAAiC;AACnC;;AAEA,wCAAwC;AACxC;EACE,sBAAsB;EACtB,0BAA0B;EAC1B,2BAA2B;EAC3B,wBAAwB;AAC1B;;AAEA,qCAAqC;AACrC;EACE,sBAAsB;EACtB,0BAA0B;EAC1B,wBAAwB;EACxB,wCAAwC;AAC1C;;AAEA;EACE,kBAAkB;EAClB,6BAA6B;EAC7B,yBAAyB;AAC3B;;AAEA,wCAAwC;;AAExC,0CAA0C;AAC1C;EACE,aAAa;EACb,kBAAkB;EAClB,yCAAyC;EACzC,6CAA6C;EAC7C,eAAe;AACjB;;AAEA,4DAA4D;AAC5D;EACE,cAAc;AAChB;;AAEA,mCAAmC;AACnC;EACE,iBAAiB;EACjB,iBAAiB;EACjB,+BAA+B;AACjC;;AAEA;EACE,SAAS;EACT,kBAAkB;EAClB,+BAA+B;EAC/B,eAAe;AACjB;;AAEA,4BAA4B;AAC5B;EACE,kBAAkB;EAClB,kBAAkB;EAClB,mCAAmC;EACnC,kBAAkB;AACpB;;AAEA;EACE,mBAAmB;EACnB,aAAa;EACb,uBAAuB;AACzB;;AAEA;EACE,+BAA+B;EAC/B,eAAe;EACf,gBAAgB;EAChB,kBAAkB;EAClB,qCAAqC;AACvC;;AAEA;EACE,+BAA+B;EAC/B,eAAe;EACf,kBAAkB;EAClB,qCAAqC;EACrC,gBAAgB;AAClB;;AAEA;EACE,+BAA+B;EAC/B,eAAe;EACf,kBAAkB;EAClB,qCAAqC;EACrC,kBAAkB;AACpB;;AAEA;EACE,aAAa;EACb,uBAAuB;EACvB,SAAS;AACX;;AAEA,2BAA2B;AAC3B;EACE,OAAO,SAAS,EAAE;EAClB,KAAK,WAAW,EAAE;AACpB;;AAEA,sCAAsC;AACtC;EACE,yCAAyC;EACzC,kBAAkB;EAClB,kBAAkB;EAClB,cAAc;EACd,yCAAyC;EACzC,kBAAkB;AACpB;;AAEA,0BAA0B;AAC1B;EACE,+BAA+B;EAC/B,eAAe;EACf,gBAAgB;EAChB,kBAAkB;EAClB,qCAAqC;AACvC;;AAEA,gCAAgC;AAChC;EACE,+BAA+B;EAC/B,eAAe;EACf,kBAAkB;EAClB,qCAAqC;EACrC,gBAAgB;AAClB;;AAEA,2BAA2B;AAC3B;EACE,WAAW;EACX,WAAW;EACX,yCAAyC;EACzC,kBAAkB;EAClB,gBAAgB;EAChB,gBAAgB;EAChB,mBAAmB;AACrB;;AAEA,yCAAyC;AACzC;EACE,SAAS;EACT,YAAY;EACZ,mCAAmC;EACnC,kBAAkB;EAClB,0CAA0C;AAC5C;;AAEA,4BAA4B;AAC5B;EACE,+BAA+B;EAC/B,eAAe;EACf,SAAS;EACT,qCAAqC;EACrC,kBAAkB;AACpB","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n/* 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":""}]);
11730
+ // Exports
11731
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
11732
+
11733
+
11734
+ /***/ }),
11735
+
11736
+ /***/ "./node_modules/css-loader/dist/cjs.js!./style/CTACarousel.css":
11737
+ /*!*********************************************************************!*\
11738
+ !*** ./node_modules/css-loader/dist/cjs.js!./style/CTACarousel.css ***!
11739
+ \*********************************************************************/
11740
+ /***/ ((module, __webpack_exports__, __webpack_require__) => {
11741
+
11742
+ __webpack_require__.r(__webpack_exports__);
11743
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
11744
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
11745
+ /* harmony export */ });
11746
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js");
11747
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
11748
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
11749
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
11750
+ // Imports
11751
+
11752
+
11753
+ var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
11754
+ // Module
11755
+ ___CSS_LOADER_EXPORT___.push([module.id, `/*
11756
+ * Copyright (c) Saga Inc.
11757
+ * Distributed under the terms of the GNU Affero General Public License v3.0 License.
11758
+ */
11759
+
11760
+ .cta-carousel {
10510
11761
  width: 100%;
10511
11762
  }
10512
11763
 
@@ -10985,21 +12236,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
10985
12236
 
10986
12237
  .message-edit-buttons button:hover {
10987
12238
  background-color: var(--jp-layout-color2);
10988
- }
10989
-
10990
- .chat-message-alert {
10991
- background-color: var(--purple-300);
10992
- border-radius: 5px;
10993
- padding: 10px;
10994
- border: 1px solid var(--purple-500);
10995
- color: var(--grey-900);
10996
- }
10997
-
10998
- .chat-message-alert a {
10999
- color: var(--purple-700);
11000
- text-decoration: underline;
11001
- }
11002
- `, "",{"version":3,"sources":["webpack://./style/ChatMessage.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;EACE,kBAAkB;EAClB,mBAAmB;EACnB,sBAAsB;EACtB,WAAW;EACX,eAAe;EACf,sDAAsD;EACtD,2CAA2C;AAC7C;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,2DAA2D;EAC3D,0CAA0C;EAC1C,aAAa;AACf;;AAEA;EACE,+CAA+C;AACjD;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,QAAQ;EACR,gBAAgB;EAChB,kBAAkB;EAClB,eAAe;AACjB;;AAEA;EACE,gBAAgB;EAChB,sBAAsB;EACtB,SAAS;EACT,gBAAgB;AAClB;;AAEA;EACE,mBAAmB;AACrB;;AAEA,qCAAqC;AACrC;EACE,kBAAkB;EAClB,WAAW;EACX,UAAU;EACV,aAAa;EACb,kBAAkB;EAClB,gBAAgB,EAAE,0DAA0D;AAC9E;;AAEA,qCAAqC;AACrC;;EAEE,eAAe;EACf,UAAU;EACV;;qCAEmC;EACnC,yCAAyC;EACzC,YAAY;EACZ,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,oCAAoC;AACtC;;AAEA,gCAAgC;AAChC;EACE,WAAW;EACX,YAAY;EACZ,UAAU;EACV,gBAAgB,EAAE,oCAAoC;AACxD;;AAEA,yCAAyC;AACzC;EACE,+CAA+C;AACjD;;AAEA,8FAA8F;AAC9F;;EAEE,gBAAgB;AAClB;;AAEA,2BAA2B;AAC3B;EACE,kBAAkB;EAClB,YAAY;EACZ,kBAAkB;AACpB;;AAEA,mBAAmB;AACnB;EACE,oCAAoC;AACtC;;AAEA,iBAAiB;AACjB;;EAEE,yCAAyC;AAC3C;;AAEA,kCAAkC;AAClC;;EAEE,UAAU;AACZ;;AAEA;EACE,aAAa;EACb,QAAQ;EACR,YAAY;AACd;;AAEA;EACE,iBAAiB;EACjB,kBAAkB;EAClB,yCAAyC;EACzC,oCAAoC;EACpC,yCAAyC;EACzC,eAAe;AACjB;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,mCAAmC;EACnC,kBAAkB;EAClB,aAAa;EACb,mCAAmC;EACnC,sBAAsB;AACxB;;AAEA;EACE,wBAAwB;EACxB,0BAA0B;AAC5B","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.message {\n position: relative;\n height: min-content;\n box-sizing: border-box;\n width: 100%;\n font-size: 14px;\n border-radius: var(--chat-taskpane-item-border-radius);\n padding: 0 var(--chat-taskpane-item-indent);\n}\n\n.message:not(.chat-input) {\n margin-bottom: 20px;\n}\n\n.message:hover .message-start-editing-button {\n opacity: 1 !important;\n}\n\n.message-user {\n background-color: var(--chat-user-message-background-color);\n color: var(--chat-user-message-font-color);\n padding: 10px;\n}\n\n.message-assistant-chat {\n color: var(--chat-assistant-message-font-color);\n}\n\n.chat-message-buttons {\n display: flex;\n flex-direction: row;\n gap: 8px;\n margin-top: 10px;\n margin-bottom: 4px;\n flex-wrap: wrap;\n}\n\n.chat-taskpane-smart-debug-error-message {\n white-space: pre;\n font-family: monospace;\n margin: 0;\n overflow-x: auto;\n}\n\n.message-text {\n align-items: center;\n}\n\n/* Message Action Buttons Container */\n.message-action-buttons {\n position: absolute;\n bottom: 8px;\n right: 8px;\n display: flex;\n border-radius: 4px;\n overflow: hidden; /* Ensures inner buttons don't break the rounded corners */\n}\n\n/* Common styles for action buttons */\n.message-action-buttons button,\n.message-start-editing-button {\n cursor: pointer;\n opacity: 0;\n transition:\n opacity 0.2s ease-in-out,\n background-color 0.2s ease-in-out;\n background-color: var(--jp-layout-color3);\n border: none;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--jp-content-font-color1);\n}\n\n/* Action buttons in the group */\n.message-action-buttons button {\n width: 28px;\n height: 28px;\n padding: 0;\n border-radius: 0; /* Remove individual button radius */\n}\n\n/* Add subtle separator between buttons */\n.message-action-buttons button:not(:last-child) {\n border-right: 1px solid var(--jp-border-color1);\n}\n\n/* Remove the individual button radius styles since we're handling it at the container level */\n.message-action-buttons button:first-child,\n.message-action-buttons button:last-child {\n border-radius: 0;\n}\n\n/* Standalone edit button */\n.message-start-editing-button {\n position: relative;\n padding: 4px;\n border-radius: 4px;\n}\n\n/* SVG icon color */\n.message-action-buttons button svg {\n color: var(--jp-content-font-color1);\n}\n\n/* Hover states */\n.message-action-buttons button:hover,\n.message-start-editing-button:hover {\n background-color: var(--jp-layout-color4);\n}\n\n/* Show buttons on message hover */\n.message:hover .message-action-buttons button,\n.message:hover .message-start-editing-button {\n opacity: 1;\n}\n\n.message-edit-buttons {\n display: flex;\n gap: 8px;\n padding: 5px;\n}\n\n.message-edit-buttons button {\n padding: 4px 12px;\n border-radius: 4px;\n background-color: var(--jp-layout-color1);\n color: var(--jp-content-font-color1);\n border: 1px solid var(--jp-border-color1);\n cursor: pointer;\n}\n\n.message-edit-buttons button:hover {\n background-color: var(--jp-layout-color2);\n}\n\n.chat-message-alert {\n background-color: var(--purple-300);\n border-radius: 5px;\n padding: 10px;\n border: 1px solid var(--purple-500);\n color: var(--grey-900);\n}\n\n.chat-message-alert a {\n color: var(--purple-700);\n text-decoration: underline;\n}\n"],"sourceRoot":""}]);
12239
+ }`, "",{"version":3,"sources":["webpack://./style/ChatMessage.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;EACE,kBAAkB;EAClB,mBAAmB;EACnB,sBAAsB;EACtB,WAAW;EACX,eAAe;EACf,sDAAsD;EACtD,2CAA2C;AAC7C;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,2DAA2D;EAC3D,0CAA0C;EAC1C,aAAa;AACf;;AAEA;EACE,+CAA+C;AACjD;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,QAAQ;EACR,gBAAgB;EAChB,kBAAkB;EAClB,eAAe;AACjB;;AAEA;EACE,gBAAgB;EAChB,sBAAsB;EACtB,SAAS;EACT,gBAAgB;AAClB;;AAEA;EACE,mBAAmB;AACrB;;AAEA,qCAAqC;AACrC;EACE,kBAAkB;EAClB,WAAW;EACX,UAAU;EACV,aAAa;EACb,kBAAkB;EAClB,gBAAgB,EAAE,0DAA0D;AAC9E;;AAEA,qCAAqC;AACrC;;EAEE,eAAe;EACf,UAAU;EACV;;qCAEmC;EACnC,yCAAyC;EACzC,YAAY;EACZ,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,oCAAoC;AACtC;;AAEA,gCAAgC;AAChC;EACE,WAAW;EACX,YAAY;EACZ,UAAU;EACV,gBAAgB,EAAE,oCAAoC;AACxD;;AAEA,yCAAyC;AACzC;EACE,+CAA+C;AACjD;;AAEA,8FAA8F;AAC9F;;EAEE,gBAAgB;AAClB;;AAEA,2BAA2B;AAC3B;EACE,kBAAkB;EAClB,YAAY;EACZ,kBAAkB;AACpB;;AAEA,mBAAmB;AACnB;EACE,oCAAoC;AACtC;;AAEA,iBAAiB;AACjB;;EAEE,yCAAyC;AAC3C;;AAEA,kCAAkC;AAClC;;EAEE,UAAU;AACZ;;AAEA;EACE,aAAa;EACb,QAAQ;EACR,YAAY;AACd;;AAEA;EACE,iBAAiB;EACjB,kBAAkB;EAClB,yCAAyC;EACzC,oCAAoC;EACpC,yCAAyC;EACzC,eAAe;AACjB;;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.message {\n position: relative;\n height: min-content;\n box-sizing: border-box;\n width: 100%;\n font-size: 14px;\n border-radius: var(--chat-taskpane-item-border-radius);\n padding: 0 var(--chat-taskpane-item-indent);\n}\n\n.message:not(.chat-input) {\n margin-bottom: 20px;\n}\n\n.message:hover .message-start-editing-button {\n opacity: 1 !important;\n}\n\n.message-user {\n background-color: var(--chat-user-message-background-color);\n color: var(--chat-user-message-font-color);\n padding: 10px;\n}\n\n.message-assistant-chat {\n color: var(--chat-assistant-message-font-color);\n}\n\n.chat-message-buttons {\n display: flex;\n flex-direction: row;\n gap: 8px;\n margin-top: 10px;\n margin-bottom: 4px;\n flex-wrap: wrap;\n}\n\n.chat-taskpane-smart-debug-error-message {\n white-space: pre;\n font-family: monospace;\n margin: 0;\n overflow-x: auto;\n}\n\n.message-text {\n align-items: center;\n}\n\n/* Message Action Buttons Container */\n.message-action-buttons {\n position: absolute;\n bottom: 8px;\n right: 8px;\n display: flex;\n border-radius: 4px;\n overflow: hidden; /* Ensures inner buttons don't break the rounded corners */\n}\n\n/* Common styles for action buttons */\n.message-action-buttons button,\n.message-start-editing-button {\n cursor: pointer;\n opacity: 0;\n transition:\n opacity 0.2s ease-in-out,\n background-color 0.2s ease-in-out;\n background-color: var(--jp-layout-color3);\n border: none;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--jp-content-font-color1);\n}\n\n/* Action buttons in the group */\n.message-action-buttons button {\n width: 28px;\n height: 28px;\n padding: 0;\n border-radius: 0; /* Remove individual button radius */\n}\n\n/* Add subtle separator between buttons */\n.message-action-buttons button:not(:last-child) {\n border-right: 1px solid var(--jp-border-color1);\n}\n\n/* Remove the individual button radius styles since we're handling it at the container level */\n.message-action-buttons button:first-child,\n.message-action-buttons button:last-child {\n border-radius: 0;\n}\n\n/* Standalone edit button */\n.message-start-editing-button {\n position: relative;\n padding: 4px;\n border-radius: 4px;\n}\n\n/* SVG icon color */\n.message-action-buttons button svg {\n color: var(--jp-content-font-color1);\n}\n\n/* Hover states */\n.message-action-buttons button:hover,\n.message-start-editing-button:hover {\n background-color: var(--jp-layout-color4);\n}\n\n/* Show buttons on message hover */\n.message:hover .message-action-buttons button,\n.message:hover .message-start-editing-button {\n opacity: 1;\n}\n\n.message-edit-buttons {\n display: flex;\n gap: 8px;\n padding: 5px;\n}\n\n.message-edit-buttons button {\n padding: 4px 12px;\n border-radius: 4px;\n background-color: var(--jp-layout-color1);\n color: var(--jp-content-font-color1);\n border: 1px solid var(--jp-border-color1);\n cursor: pointer;\n}\n\n.message-edit-buttons button:hover {\n background-color: var(--jp-layout-color2);\n}"],"sourceRoot":""}]);
11003
12240
  // Exports
11004
12241
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
11005
12242
 
@@ -12107,55 +13344,6 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
12107
13344
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
12108
13345
 
12109
13346
 
12110
- /***/ }),
12111
-
12112
- /***/ "./node_modules/css-loader/dist/cjs.js!./style/GetCellOutputToolUI.css":
12113
- /*!*****************************************************************************!*\
12114
- !*** ./node_modules/css-loader/dist/cjs.js!./style/GetCellOutputToolUI.css ***!
12115
- \*****************************************************************************/
12116
- /***/ ((module, __webpack_exports__, __webpack_require__) => {
12117
-
12118
- __webpack_require__.r(__webpack_exports__);
12119
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
12120
- /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
12121
- /* harmony export */ });
12122
- /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js");
12123
- /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
12124
- /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
12125
- /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
12126
- // Imports
12127
-
12128
-
12129
- var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
12130
- // Module
12131
- ___CSS_LOADER_EXPORT___.push([module.id, `/*
12132
- * Copyright (c) Saga Inc.
12133
- * Distributed under the terms of the GNU Affero General Public License v3.0 License.
12134
- */
12135
-
12136
- .get-cell-output-container {
12137
- display: flex;
12138
- flex-direction: row;
12139
- align-items: center;
12140
- justify-content: start;
12141
- background-color: transparent;
12142
- padding: 10px;
12143
- border-radius: 5px;
12144
- border: 1px solid var(--jp-cell-editor-border-color);
12145
- margin: 10px 0;
12146
- color: var(--jp-ui-font-color2);
12147
- }
12148
-
12149
- .get-cell-output-content {
12150
- display: flex;
12151
- align-items: center;
12152
- gap: 10px;
12153
- margin-left: 5px;
12154
- } `, "",{"version":3,"sources":["webpack://./style/GetCellOutputToolUI.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;IACI,aAAa;IACb,mBAAmB;IACnB,mBAAmB;IACnB,sBAAsB;IACtB,6BAA6B;IAC7B,aAAa;IACb,kBAAkB;IAClB,oDAAoD;IACpD,cAAc;IACd,+BAA+B;AACnC;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,SAAS;IACT,gBAAgB;AACpB","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.get-cell-output-container {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: start;\n background-color: transparent;\n padding: 10px;\n border-radius: 5px;\n border: 1px solid var(--jp-cell-editor-border-color);\n margin: 10px 0;\n color: var(--jp-ui-font-color2);\n}\n\n.get-cell-output-content {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-left: 5px;\n} "],"sourceRoot":""}]);
12155
- // Exports
12156
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
12157
-
12158
-
12159
13347
  /***/ }),
12160
13348
 
12161
13349
  /***/ "./node_modules/css-loader/dist/cjs.js!./style/IconButton.css":
@@ -13012,15 +14200,19 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
13012
14200
  white-space: pre !important;
13013
14201
  }
13014
14202
 
13015
- .code-block-python-code .jp-RenderedHTMLCommon > *:last-child {
14203
+ .code-block-python-code .jp-RenderedHTMLCommon {
14204
+ /* Remove default Jupyter padding */
14205
+ padding-right: 0px !important;
14206
+ }
14207
+
14208
+ .code-block-python-code .jp-RenderedHTMLCommon>*:last-child {
13016
14209
  /*
13017
14210
  Remove the default Jupyter ending margin
13018
14211
  so that the rendered code is flush with the bottom
13019
14212
  of the CodeMessagePart
13020
14213
  */
13021
14214
  margin-bottom: 0px;
13022
- }
13023
- `, "",{"version":3,"sources":["webpack://./style/PythonCode.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;EACE,YAAY;EACZ,YAAY;EACZ,WAAW;EACX,oBAAoB;EACpB,wBAAwB;EACxB,0BAA0B;EAC1B,gBAAgB;AAClB;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE;;;;KAIG;EACH,kBAAkB;AACpB","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.code-block-python-code pre {\n flex-grow: 1;\n height: 100%;\n width: 100%;\n margin: 0 !important;\n padding: 10px !important;\n font-size: 12px !important;\n overflow-x: auto;\n}\n\n.code-block-python-code code {\n white-space: pre !important;\n}\n\n.code-block-python-code .jp-RenderedHTMLCommon > *:last-child {\n /* \n Remove the default Jupyter ending margin \n so that the rendered code is flush with the bottom\n of the CodeMessagePart\n */\n margin-bottom: 0px;\n}\n"],"sourceRoot":""}]);
14215
+ }`, "",{"version":3,"sources":["webpack://./style/PythonCode.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;EACE,YAAY;EACZ,YAAY;EACZ,WAAW;EACX,oBAAoB;EACpB,wBAAwB;EACxB,0BAA0B;EAC1B,gBAAgB;AAClB;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,mCAAmC;EACnC,6BAA6B;AAC/B;;AAEA;EACE;;;;KAIG;EACH,kBAAkB;AACpB","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.code-block-python-code pre {\n flex-grow: 1;\n height: 100%;\n width: 100%;\n margin: 0 !important;\n padding: 10px !important;\n font-size: 12px !important;\n overflow-x: auto;\n}\n\n.code-block-python-code code {\n white-space: pre !important;\n}\n\n.code-block-python-code .jp-RenderedHTMLCommon {\n /* Remove default Jupyter padding */\n padding-right: 0px !important;\n}\n\n.code-block-python-code .jp-RenderedHTMLCommon>*:last-child {\n /* \n Remove the default Jupyter ending margin \n so that the rendered code is flush with the bottom\n of the CodeMessagePart\n */\n margin-bottom: 0px;\n}"],"sourceRoot":""}]);
13024
14216
  // Exports
13025
14217
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
13026
14218
 
@@ -13685,472 +14877,63 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
13685
14877
  color: var(--green-900) !important;
13686
14878
  }
13687
14879
 
13688
- .button-green:hover {
13689
- background-color: var(--green-500);
13690
- }
13691
-
13692
- .button-red {
13693
- background-color: var(--red-400);
13694
- color: var(--red-900) !important;
13695
- }
13696
-
13697
- .button-red:hover {
13698
- background-color: var(--red-500);
13699
- }
13700
-
13701
- .button-gray {
13702
- background-color: var(--jp-layout-color2);
13703
- color: var(--jp-content-font-color1) !important;
13704
- }
13705
-
13706
- .button-gray:hover {
13707
- background-color: var(--jp-layout-color3);
13708
- }
13709
-
13710
- .button-purple {
13711
- background-color: var(--purple-300);
13712
- color: var(--purple-700) !important;
13713
- }
13714
-
13715
- .button-purple:hover {
13716
- background-color: var(--purple-400);
13717
- }
13718
-
13719
- .button-width-block {
13720
- width: 100%;
13721
- }
13722
-
13723
- .button-width-fit-contents {
13724
- width: fit-content;
13725
- }
13726
-
13727
- .button-small {
13728
- height: 20px;
13729
- font-size: 12px;
13730
- padding: 2px 5px;
13731
- }
13732
- `, "",{"version":3,"sources":["webpack://./style/button.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;CAIC;;AAED;EACE,YAAY;EACZ,kBAAkB;EAClB,eAAe;EACf,eAAe;EACf,2EAA2E;EAC3E,mBAAmB;EACnB,iBAAiB;AACnB;;AAEA;EACE,kCAAkC;EAClC,kCAAkC;AACpC;;AAEA;EACE,kCAAkC;AACpC;;AAEA;EACE,gCAAgC;EAChC,gCAAgC;AAClC;;AAEA;EACE,gCAAgC;AAClC;;AAEA;EACE,yCAAyC;EACzC,+CAA+C;AACjD;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,mCAAmC;EACnC,mCAAmC;AACrC;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,YAAY;EACZ,eAAe;EACf,gBAAgB;AAClB","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n/* \n Classes that can be used for any button, making it easier to keep \n the theme consistent. For example, use them to make a textButton or\n textAndIconButton green.\n*/\n\n.button-base {\n border: none;\n border-radius: 3px;\n cursor: pointer;\n font-size: 14px;\n /* Make sure the button grows large enough so that the text does not wrap */\n white-space: nowrap;\n padding: 5px 10px;\n}\n\n.button-green {\n background-color: var(--green-400);\n color: var(--green-900) !important;\n}\n\n.button-green:hover {\n background-color: var(--green-500);\n}\n\n.button-red {\n background-color: var(--red-400);\n color: var(--red-900) !important;\n}\n\n.button-red:hover {\n background-color: var(--red-500);\n}\n\n.button-gray {\n background-color: var(--jp-layout-color2);\n color: var(--jp-content-font-color1) !important;\n}\n\n.button-gray:hover {\n background-color: var(--jp-layout-color3);\n}\n\n.button-purple {\n background-color: var(--purple-300);\n color: var(--purple-700) !important;\n}\n\n.button-purple:hover {\n background-color: var(--purple-400);\n}\n\n.button-width-block {\n width: 100%;\n}\n\n.button-width-fit-contents {\n width: fit-content;\n}\n\n.button-small {\n height: 20px;\n font-size: 12px;\n padding: 2px 5px;\n}\n"],"sourceRoot":""}]);
13733
- // Exports
13734
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
13735
-
13736
-
13737
- /***/ }),
13738
-
13739
- /***/ "./node_modules/css-loader/dist/runtime/api.js":
13740
- /*!*****************************************************!*\
13741
- !*** ./node_modules/css-loader/dist/runtime/api.js ***!
13742
- \*****************************************************/
13743
- /***/ ((module) => {
13744
-
13745
-
13746
-
13747
- /*
13748
- MIT License http://www.opensource.org/licenses/mit-license.php
13749
- Author Tobias Koppers @sokra
13750
- */
13751
- module.exports = function (cssWithMappingToString) {
13752
- var list = [];
13753
-
13754
- // return the list of modules as css string
13755
- list.toString = function toString() {
13756
- return this.map(function (item) {
13757
- var content = "";
13758
- var needLayer = typeof item[5] !== "undefined";
13759
- if (item[4]) {
13760
- content += "@supports (".concat(item[4], ") {");
13761
- }
13762
- if (item[2]) {
13763
- content += "@media ".concat(item[2], " {");
13764
- }
13765
- if (needLayer) {
13766
- content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {");
13767
- }
13768
- content += cssWithMappingToString(item);
13769
- if (needLayer) {
13770
- content += "}";
13771
- }
13772
- if (item[2]) {
13773
- content += "}";
13774
- }
13775
- if (item[4]) {
13776
- content += "}";
13777
- }
13778
- return content;
13779
- }).join("");
13780
- };
13781
-
13782
- // import a list of modules into the list
13783
- list.i = function i(modules, media, dedupe, supports, layer) {
13784
- if (typeof modules === "string") {
13785
- modules = [[null, modules, undefined]];
13786
- }
13787
- var alreadyImportedModules = {};
13788
- if (dedupe) {
13789
- for (var k = 0; k < this.length; k++) {
13790
- var id = this[k][0];
13791
- if (id != null) {
13792
- alreadyImportedModules[id] = true;
13793
- }
13794
- }
13795
- }
13796
- for (var _k = 0; _k < modules.length; _k++) {
13797
- var item = [].concat(modules[_k]);
13798
- if (dedupe && alreadyImportedModules[item[0]]) {
13799
- continue;
13800
- }
13801
- if (typeof layer !== "undefined") {
13802
- if (typeof item[5] === "undefined") {
13803
- item[5] = layer;
13804
- } else {
13805
- item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}");
13806
- item[5] = layer;
13807
- }
13808
- }
13809
- if (media) {
13810
- if (!item[2]) {
13811
- item[2] = media;
13812
- } else {
13813
- item[1] = "@media ".concat(item[2], " {").concat(item[1], "}");
13814
- item[2] = media;
13815
- }
13816
- }
13817
- if (supports) {
13818
- if (!item[4]) {
13819
- item[4] = "".concat(supports);
13820
- } else {
13821
- item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}");
13822
- item[4] = supports;
13823
- }
13824
- }
13825
- list.push(item);
13826
- }
13827
- };
13828
- return list;
13829
- };
13830
-
13831
- /***/ }),
13832
-
13833
- /***/ "./node_modules/css-loader/dist/runtime/sourceMaps.js":
13834
- /*!************************************************************!*\
13835
- !*** ./node_modules/css-loader/dist/runtime/sourceMaps.js ***!
13836
- \************************************************************/
13837
- /***/ ((module) => {
13838
-
13839
-
13840
-
13841
- module.exports = function (item) {
13842
- var content = item[1];
13843
- var cssMapping = item[3];
13844
- if (!cssMapping) {
13845
- return content;
13846
- }
13847
- if (typeof btoa === "function") {
13848
- var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));
13849
- var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64);
13850
- var sourceMapping = "/*# ".concat(data, " */");
13851
- return [content].concat([sourceMapping]).join("\n");
13852
- }
13853
- return [content].join("\n");
13854
- };
13855
-
13856
- /***/ }),
13857
-
13858
- /***/ "./node_modules/react-dom/client.js":
13859
- /*!******************************************!*\
13860
- !*** ./node_modules/react-dom/client.js ***!
13861
- \******************************************/
13862
- /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
13863
-
13864
-
13865
-
13866
- var m = __webpack_require__(/*! react-dom */ "webpack/sharing/consume/default/react-dom");
13867
- if (false) {} else {
13868
- var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
13869
- exports.createRoot = function(c, o) {
13870
- i.usingClientEntryPoint = true;
13871
- try {
13872
- return m.createRoot(c, o);
13873
- } finally {
13874
- i.usingClientEntryPoint = false;
13875
- }
13876
- };
13877
- exports.hydrateRoot = function(c, h, o) {
13878
- i.usingClientEntryPoint = true;
13879
- try {
13880
- return m.hydrateRoot(c, h, o);
13881
- } finally {
13882
- i.usingClientEntryPoint = false;
13883
- }
13884
- };
13885
- }
13886
-
13887
-
13888
- /***/ }),
13889
-
13890
- /***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js":
13891
- /*!****************************************************************************!*\
13892
- !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***!
13893
- \****************************************************************************/
13894
- /***/ ((module) => {
13895
-
13896
-
13897
-
13898
- var stylesInDOM = [];
13899
- function getIndexByIdentifier(identifier) {
13900
- var result = -1;
13901
- for (var i = 0; i < stylesInDOM.length; i++) {
13902
- if (stylesInDOM[i].identifier === identifier) {
13903
- result = i;
13904
- break;
13905
- }
13906
- }
13907
- return result;
13908
- }
13909
- function modulesToDom(list, options) {
13910
- var idCountMap = {};
13911
- var identifiers = [];
13912
- for (var i = 0; i < list.length; i++) {
13913
- var item = list[i];
13914
- var id = options.base ? item[0] + options.base : item[0];
13915
- var count = idCountMap[id] || 0;
13916
- var identifier = "".concat(id, " ").concat(count);
13917
- idCountMap[id] = count + 1;
13918
- var indexByIdentifier = getIndexByIdentifier(identifier);
13919
- var obj = {
13920
- css: item[1],
13921
- media: item[2],
13922
- sourceMap: item[3],
13923
- supports: item[4],
13924
- layer: item[5]
13925
- };
13926
- if (indexByIdentifier !== -1) {
13927
- stylesInDOM[indexByIdentifier].references++;
13928
- stylesInDOM[indexByIdentifier].updater(obj);
13929
- } else {
13930
- var updater = addElementStyle(obj, options);
13931
- options.byIndex = i;
13932
- stylesInDOM.splice(i, 0, {
13933
- identifier: identifier,
13934
- updater: updater,
13935
- references: 1
13936
- });
13937
- }
13938
- identifiers.push(identifier);
13939
- }
13940
- return identifiers;
13941
- }
13942
- function addElementStyle(obj, options) {
13943
- var api = options.domAPI(options);
13944
- api.update(obj);
13945
- var updater = function updater(newObj) {
13946
- if (newObj) {
13947
- if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {
13948
- return;
13949
- }
13950
- api.update(obj = newObj);
13951
- } else {
13952
- api.remove();
13953
- }
13954
- };
13955
- return updater;
13956
- }
13957
- module.exports = function (list, options) {
13958
- options = options || {};
13959
- list = list || [];
13960
- var lastIdentifiers = modulesToDom(list, options);
13961
- return function update(newList) {
13962
- newList = newList || [];
13963
- for (var i = 0; i < lastIdentifiers.length; i++) {
13964
- var identifier = lastIdentifiers[i];
13965
- var index = getIndexByIdentifier(identifier);
13966
- stylesInDOM[index].references--;
13967
- }
13968
- var newLastIdentifiers = modulesToDom(newList, options);
13969
- for (var _i = 0; _i < lastIdentifiers.length; _i++) {
13970
- var _identifier = lastIdentifiers[_i];
13971
- var _index = getIndexByIdentifier(_identifier);
13972
- if (stylesInDOM[_index].references === 0) {
13973
- stylesInDOM[_index].updater();
13974
- stylesInDOM.splice(_index, 1);
13975
- }
13976
- }
13977
- lastIdentifiers = newLastIdentifiers;
13978
- };
13979
- };
13980
-
13981
- /***/ }),
13982
-
13983
- /***/ "./node_modules/style-loader/dist/runtime/insertBySelector.js":
13984
- /*!********************************************************************!*\
13985
- !*** ./node_modules/style-loader/dist/runtime/insertBySelector.js ***!
13986
- \********************************************************************/
13987
- /***/ ((module) => {
13988
-
13989
-
13990
-
13991
- var memo = {};
13992
-
13993
- /* istanbul ignore next */
13994
- function getTarget(target) {
13995
- if (typeof memo[target] === "undefined") {
13996
- var styleTarget = document.querySelector(target);
13997
-
13998
- // Special case to return head of iframe instead of iframe itself
13999
- if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {
14000
- try {
14001
- // This will throw an exception if access to iframe is blocked
14002
- // due to cross-origin restrictions
14003
- styleTarget = styleTarget.contentDocument.head;
14004
- } catch (e) {
14005
- // istanbul ignore next
14006
- styleTarget = null;
14007
- }
14008
- }
14009
- memo[target] = styleTarget;
14010
- }
14011
- return memo[target];
14012
- }
14013
-
14014
- /* istanbul ignore next */
14015
- function insertBySelector(insert, style) {
14016
- var target = getTarget(insert);
14017
- if (!target) {
14018
- throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");
14019
- }
14020
- target.appendChild(style);
14021
- }
14022
- module.exports = insertBySelector;
14023
-
14024
- /***/ }),
14025
-
14026
- /***/ "./node_modules/style-loader/dist/runtime/insertStyleElement.js":
14027
- /*!**********************************************************************!*\
14028
- !*** ./node_modules/style-loader/dist/runtime/insertStyleElement.js ***!
14029
- \**********************************************************************/
14030
- /***/ ((module) => {
14031
-
14032
-
14033
-
14034
- /* istanbul ignore next */
14035
- function insertStyleElement(options) {
14036
- var element = document.createElement("style");
14037
- options.setAttributes(element, options.attributes);
14038
- options.insert(element, options.options);
14039
- return element;
14040
- }
14041
- module.exports = insertStyleElement;
14042
-
14043
- /***/ }),
14044
-
14045
- /***/ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js":
14046
- /*!**********************************************************************************!*\
14047
- !*** ./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js ***!
14048
- \**********************************************************************************/
14049
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
14050
-
14051
-
14052
-
14053
- /* istanbul ignore next */
14054
- function setAttributesWithoutAttributes(styleElement) {
14055
- var nonce = true ? __webpack_require__.nc : 0;
14056
- if (nonce) {
14057
- styleElement.setAttribute("nonce", nonce);
14058
- }
14059
- }
14060
- module.exports = setAttributesWithoutAttributes;
14061
-
14062
- /***/ }),
14063
-
14064
- /***/ "./node_modules/style-loader/dist/runtime/styleDomAPI.js":
14065
- /*!***************************************************************!*\
14066
- !*** ./node_modules/style-loader/dist/runtime/styleDomAPI.js ***!
14067
- \***************************************************************/
14068
- /***/ ((module) => {
14880
+ .button-green:hover {
14881
+ background-color: var(--green-500);
14882
+ }
14069
14883
 
14884
+ .button-red {
14885
+ background-color: var(--red-400);
14886
+ color: var(--red-900) !important;
14887
+ }
14070
14888
 
14889
+ .button-red:hover {
14890
+ background-color: var(--red-500);
14891
+ }
14071
14892
 
14072
- /* istanbul ignore next */
14073
- function apply(styleElement, options, obj) {
14074
- var css = "";
14075
- if (obj.supports) {
14076
- css += "@supports (".concat(obj.supports, ") {");
14077
- }
14078
- if (obj.media) {
14079
- css += "@media ".concat(obj.media, " {");
14080
- }
14081
- var needLayer = typeof obj.layer !== "undefined";
14082
- if (needLayer) {
14083
- css += "@layer".concat(obj.layer.length > 0 ? " ".concat(obj.layer) : "", " {");
14084
- }
14085
- css += obj.css;
14086
- if (needLayer) {
14087
- css += "}";
14088
- }
14089
- if (obj.media) {
14090
- css += "}";
14091
- }
14092
- if (obj.supports) {
14093
- css += "}";
14094
- }
14095
- var sourceMap = obj.sourceMap;
14096
- if (sourceMap && typeof btoa !== "undefined") {
14097
- css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */");
14098
- }
14893
+ .button-gray {
14894
+ background-color: var(--jp-layout-color2);
14895
+ color: var(--jp-content-font-color1) !important;
14896
+ }
14099
14897
 
14100
- // For old IE
14101
- /* istanbul ignore if */
14102
- options.styleTagTransform(css, styleElement, options.options);
14898
+ .button-gray:hover {
14899
+ background-color: var(--jp-layout-color3);
14103
14900
  }
14104
- function removeStyleElement(styleElement) {
14105
- // istanbul ignore if
14106
- if (styleElement.parentNode === null) {
14107
- return false;
14108
- }
14109
- styleElement.parentNode.removeChild(styleElement);
14901
+
14902
+ .button-purple {
14903
+ background-color: var(--purple-300);
14904
+ color: var(--purple-700) !important;
14110
14905
  }
14111
14906
 
14112
- /* istanbul ignore next */
14113
- function domAPI(options) {
14114
- if (typeof document === "undefined") {
14115
- return {
14116
- update: function update() {},
14117
- remove: function remove() {}
14118
- };
14119
- }
14120
- var styleElement = options.insertStyleElement(options);
14121
- return {
14122
- update: function update(obj) {
14123
- apply(styleElement, options, obj);
14124
- },
14125
- remove: function remove() {
14126
- removeStyleElement(styleElement);
14127
- }
14128
- };
14907
+ .button-purple:hover {
14908
+ background-color: var(--purple-400);
14129
14909
  }
14130
- module.exports = domAPI;
14131
14910
 
14132
- /***/ }),
14911
+ .button-dark-purple {
14912
+ background-color: var(--purple-500);
14913
+ color: var(--white) !important;
14914
+ }
14133
14915
 
14134
- /***/ "./node_modules/style-loader/dist/runtime/styleTagTransform.js":
14135
- /*!*********************************************************************!*\
14136
- !*** ./node_modules/style-loader/dist/runtime/styleTagTransform.js ***!
14137
- \*********************************************************************/
14138
- /***/ ((module) => {
14916
+ .button-dark-purple:hover {
14917
+ background-color: var(--purple-600);
14918
+ }
14139
14919
 
14920
+ .button-width-block {
14921
+ width: 100%;
14922
+ }
14140
14923
 
14924
+ .button-width-fit-contents {
14925
+ width: fit-content;
14926
+ }
14141
14927
 
14142
- /* istanbul ignore next */
14143
- function styleTagTransform(css, styleElement) {
14144
- if (styleElement.styleSheet) {
14145
- styleElement.styleSheet.cssText = css;
14146
- } else {
14147
- while (styleElement.firstChild) {
14148
- styleElement.removeChild(styleElement.firstChild);
14149
- }
14150
- styleElement.appendChild(document.createTextNode(css));
14151
- }
14928
+ .button-small {
14929
+ height: 20px;
14930
+ font-size: 12px;
14931
+ padding: 2px 5px;
14152
14932
  }
14153
- module.exports = styleTagTransform;
14933
+ `, "",{"version":3,"sources":["webpack://./style/button.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;CAIC;;AAED;EACE,YAAY;EACZ,kBAAkB;EAClB,eAAe;EACf,eAAe;EACf,2EAA2E;EAC3E,mBAAmB;EACnB,iBAAiB;AACnB;;AAEA;EACE,kCAAkC;EAClC,kCAAkC;AACpC;;AAEA;EACE,kCAAkC;AACpC;;AAEA;EACE,gCAAgC;EAChC,gCAAgC;AAClC;;AAEA;EACE,gCAAgC;AAClC;;AAEA;EACE,yCAAyC;EACzC,+CAA+C;AACjD;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,mCAAmC;EACnC,mCAAmC;AACrC;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,mCAAmC;EACnC,8BAA8B;AAChC;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,YAAY;EACZ,eAAe;EACf,gBAAgB;AAClB","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n/* \n Classes that can be used for any button, making it easier to keep \n the theme consistent. For example, use them to make a textButton or\n textAndIconButton green.\n*/\n\n.button-base {\n border: none;\n border-radius: 3px;\n cursor: pointer;\n font-size: 14px;\n /* Make sure the button grows large enough so that the text does not wrap */\n white-space: nowrap;\n padding: 5px 10px;\n}\n\n.button-green {\n background-color: var(--green-400);\n color: var(--green-900) !important;\n}\n\n.button-green:hover {\n background-color: var(--green-500);\n}\n\n.button-red {\n background-color: var(--red-400);\n color: var(--red-900) !important;\n}\n\n.button-red:hover {\n background-color: var(--red-500);\n}\n\n.button-gray {\n background-color: var(--jp-layout-color2);\n color: var(--jp-content-font-color1) !important;\n}\n\n.button-gray:hover {\n background-color: var(--jp-layout-color3);\n}\n\n.button-purple {\n background-color: var(--purple-300);\n color: var(--purple-700) !important;\n}\n\n.button-purple:hover {\n background-color: var(--purple-400);\n}\n\n.button-dark-purple {\n background-color: var(--purple-500);\n color: var(--white) !important;\n}\n\n.button-dark-purple:hover {\n background-color: var(--purple-600);\n}\n\n.button-width-block {\n width: 100%;\n}\n\n.button-width-fit-contents {\n width: fit-content;\n}\n\n.button-small {\n height: 20px;\n font-size: 12px;\n padding: 2px 5px;\n}\n"],"sourceRoot":""}]);
14934
+ // Exports
14935
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
14936
+
14154
14937
 
14155
14938
  /***/ }),
14156
14939
 
@@ -14266,6 +15049,114 @@ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js
14266
15049
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_AgentComponentHeader_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_AgentComponentHeader_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_AgentComponentHeader_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
14267
15050
 
14268
15051
 
15052
+ /***/ }),
15053
+
15054
+ /***/ "./style/AgentToolUIComponent.css":
15055
+ /*!****************************************!*\
15056
+ !*** ./style/AgentToolUIComponent.css ***!
15057
+ \****************************************/
15058
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
15059
+
15060
+ __webpack_require__.r(__webpack_exports__);
15061
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
15062
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
15063
+ /* harmony export */ });
15064
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
15065
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
15066
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
15067
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
15068
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
15069
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
15070
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
15071
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
15072
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
15073
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
15074
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
15075
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
15076
+ /* harmony import */ var _node_modules_css_loader_dist_cjs_js_AgentToolUIComponent_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../node_modules/css-loader/dist/cjs.js!./AgentToolUIComponent.css */ "./node_modules/css-loader/dist/cjs.js!./style/AgentToolUIComponent.css");
15077
+
15078
+
15079
+
15080
+
15081
+
15082
+
15083
+
15084
+
15085
+
15086
+
15087
+
15088
+ var options = {};
15089
+
15090
+ options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
15091
+ options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
15092
+
15093
+ options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
15094
+
15095
+ options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
15096
+ options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
15097
+
15098
+ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_AgentToolUIComponent_css__WEBPACK_IMPORTED_MODULE_6__["default"], options);
15099
+
15100
+
15101
+
15102
+
15103
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_AgentToolUIComponent_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_AgentToolUIComponent_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_AgentToolUIComponent_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
15104
+
15105
+
15106
+ /***/ }),
15107
+
15108
+ /***/ "./style/AlertBlock.css":
15109
+ /*!******************************!*\
15110
+ !*** ./style/AlertBlock.css ***!
15111
+ \******************************/
15112
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
15113
+
15114
+ __webpack_require__.r(__webpack_exports__);
15115
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
15116
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
15117
+ /* harmony export */ });
15118
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
15119
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
15120
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
15121
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
15122
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
15123
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
15124
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
15125
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
15126
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
15127
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
15128
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
15129
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
15130
+ /* harmony import */ var _node_modules_css_loader_dist_cjs_js_AlertBlock_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../node_modules/css-loader/dist/cjs.js!./AlertBlock.css */ "./node_modules/css-loader/dist/cjs.js!./style/AlertBlock.css");
15131
+
15132
+
15133
+
15134
+
15135
+
15136
+
15137
+
15138
+
15139
+
15140
+
15141
+
15142
+ var options = {};
15143
+
15144
+ options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
15145
+ options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
15146
+
15147
+ options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
15148
+
15149
+ options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
15150
+ options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
15151
+
15152
+ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_AlertBlock_css__WEBPACK_IMPORTED_MODULE_6__["default"], options);
15153
+
15154
+
15155
+
15156
+
15157
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_AlertBlock_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_AlertBlock_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_AlertBlock_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
15158
+
15159
+
14269
15160
  /***/ }),
14270
15161
 
14271
15162
  /***/ "./style/AssumptionTool.css":
@@ -14320,6 +15211,60 @@ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js
14320
15211
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_AssumptionTool_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_AssumptionTool_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_AssumptionTool_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
14321
15212
 
14322
15213
 
15214
+ /***/ }),
15215
+
15216
+ /***/ "./style/AuthPopup.css":
15217
+ /*!*****************************!*\
15218
+ !*** ./style/AuthPopup.css ***!
15219
+ \*****************************/
15220
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
15221
+
15222
+ __webpack_require__.r(__webpack_exports__);
15223
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
15224
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
15225
+ /* harmony export */ });
15226
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
15227
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
15228
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
15229
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
15230
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
15231
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
15232
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
15233
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
15234
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
15235
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
15236
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
15237
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
15238
+ /* harmony import */ var _node_modules_css_loader_dist_cjs_js_AuthPopup_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../node_modules/css-loader/dist/cjs.js!./AuthPopup.css */ "./node_modules/css-loader/dist/cjs.js!./style/AuthPopup.css");
15239
+
15240
+
15241
+
15242
+
15243
+
15244
+
15245
+
15246
+
15247
+
15248
+
15249
+
15250
+ var options = {};
15251
+
15252
+ options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
15253
+ options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
15254
+
15255
+ options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
15256
+
15257
+ options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
15258
+ options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
15259
+
15260
+ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_AuthPopup_css__WEBPACK_IMPORTED_MODULE_6__["default"], options);
15261
+
15262
+
15263
+
15264
+
15265
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_AuthPopup_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_AuthPopup_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_AuthPopup_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
15266
+
15267
+
14323
15268
  /***/ }),
14324
15269
 
14325
15270
  /***/ "./style/CTACarousel.css":
@@ -14968,60 +15913,6 @@ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js
14968
15913
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_ErrorMimeRendererPlugin_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_ErrorMimeRendererPlugin_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_ErrorMimeRendererPlugin_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
14969
15914
 
14970
15915
 
14971
- /***/ }),
14972
-
14973
- /***/ "./style/GetCellOutputToolUI.css":
14974
- /*!***************************************!*\
14975
- !*** ./style/GetCellOutputToolUI.css ***!
14976
- \***************************************/
14977
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
14978
-
14979
- __webpack_require__.r(__webpack_exports__);
14980
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
14981
- /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
14982
- /* harmony export */ });
14983
- /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
14984
- /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
14985
- /* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
14986
- /* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
14987
- /* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
14988
- /* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
14989
- /* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
14990
- /* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
14991
- /* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
14992
- /* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
14993
- /* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
14994
- /* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
14995
- /* harmony import */ var _node_modules_css_loader_dist_cjs_js_GetCellOutputToolUI_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../node_modules/css-loader/dist/cjs.js!./GetCellOutputToolUI.css */ "./node_modules/css-loader/dist/cjs.js!./style/GetCellOutputToolUI.css");
14996
-
14997
-
14998
-
14999
-
15000
-
15001
-
15002
-
15003
-
15004
-
15005
-
15006
-
15007
- var options = {};
15008
-
15009
- options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
15010
- options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
15011
-
15012
- options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
15013
-
15014
- options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
15015
- options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
15016
-
15017
- var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_GetCellOutputToolUI_css__WEBPACK_IMPORTED_MODULE_6__["default"], options);
15018
-
15019
-
15020
-
15021
-
15022
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_GetCellOutputToolUI_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_GetCellOutputToolUI_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_GetCellOutputToolUI_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
15023
-
15024
-
15025
15916
  /***/ }),
15026
15917
 
15027
15918
  /***/ "./style/IconButton.css":
@@ -15781,4 +16672,4 @@ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js
15781
16672
  /***/ })
15782
16673
 
15783
16674
  }]);
15784
- //# sourceMappingURL=lib_index_js.16b532b655cd2906e04a.js.map
16675
+ //# sourceMappingURL=lib_index_js.01a962c68c8fae380f30.js.map