mito-ai 0.1.40__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.40.data → mito_ai-0.1.41.data}/data/share/jupyter/labextensions/mito_ai/build_log.json +102 -100
  22. {mito_ai-0.1.40.data → mito_ai-0.1.41.data}/data/share/jupyter/labextensions/mito_ai/package.json +4 -2
  23. {mito_ai-0.1.40.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.40.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.55d9f8ca386d87856d2d.js → mito_ai-0.1.41.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.01a962c68c8fae380f30.js +1782 -1027
  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.40.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.264103d9addd1e166113.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.40.dist-info → mito_ai-0.1.41.dist-info}/METADATA +1 -1
  41. {mito_ai-0.1.40.dist-info → mito_ai-0.1.41.dist-info}/RECORD +53 -36
  42. mito_ai-0.1.40.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.55d9f8ca386d87856d2d.js.map +0 -1
  43. mito_ai-0.1.40.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.264103d9addd1e166113.js.map +0 -1
  44. {mito_ai-0.1.40.data → mito_ai-0.1.41.data}/data/etc/jupyter/jupyter_server_config.d/mito_ai.json +0 -0
  45. {mito_ai-0.1.40.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.40.data → mito_ai-0.1.41.data}/data/share/jupyter/labextensions/mito_ai/static/style.js +0 -0
  47. {mito_ai-0.1.40.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.40.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.40.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.40.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.40.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.40.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.40.dist-info → mito_ai-0.1.41.dist-info}/WHEEL +0 -0
  54. {mito_ai-0.1.40.dist-info → mito_ai-0.1.41.dist-info}/entry_points.txt +0 -0
  55. {mito_ai-0.1.40.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,10 +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_3__ = __webpack_require__(/*! ../../../components/TextButton */ "./lib/components/TextButton.js");
527
- /* harmony import */ var _utils_errors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../utils/errors */ "./lib/utils/errors.js");
527
+ /* harmony import */ var _utils_errors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../utils/errors */ "./lib/utils/errors.js");
528
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_1__ = __webpack_require__(/*! ../../../restAPI/RestAPI */ "./lib/restAPI/RestAPI.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");
530
531
  /*
531
532
  * Copyright (c) Saga Inc.
532
533
  * Distributed under the terms of the GNU Affero General Public License v3.0 License.
@@ -536,26 +537,56 @@ __webpack_require__.r(__webpack_exports__);
536
537
 
537
538
 
538
539
 
540
+ // Add calendly link constant
541
+ const CALENDLY_LINK = 'https://calendly.com/jake_from_mito/mito-meeting';
539
542
  const AlertBlock = ({ content, mitoAIConnectionErrorType }) => {
540
543
  const [showEmailDetails, setShowEmailDetails] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
541
544
  // The first time this AlertBlock is rendered, log the error type
542
545
  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
543
- void (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_1__.logEvent)('alert_block_displayed', { 'type': mitoAIConnectionErrorType, 'error': content });
546
+ void (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_2__.logEvent)('alert_block_displayed', { 'type': mitoAIConnectionErrorType, 'error': content });
544
547
  }, []);
545
- if (mitoAIConnectionErrorType === _utils_errors__WEBPACK_IMPORTED_MODULE_2__.FREE_TIER_LIMIT_REACHED_ERROR_TITLE) {
546
- return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chat-message-alert" },
547
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null,
548
- "You've used up your free trial of Mito AI for this month. To continue using Mito AI now, upgrade to ",
549
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", { href: "https://www.trymito.io/plans", target: "_blank", rel: "noreferrer" }, "Mito Pro"),
550
- " and get access to:"),
551
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement("ul", null,
552
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null, "Unlimited AI Chat and Agent"),
553
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null, "Unlimited AI Autocompletes"),
554
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null, "All Mito Spreadsheet Pro features")),
555
- 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."),
556
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_TextButton__WEBPACK_IMPORTED_MODULE_3__["default"], { title: "Upgrade to Pro", text: "Upgrade to Pro", action: _utils_stripe__WEBPACK_IMPORTED_MODULE_4__.STRIPE_PAYMENT_LINK, variant: "purple", width: "block" })));
557
- }
558
- return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chat-message-alert-container" },
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" },
559
590
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chat-message-alert" },
560
591
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "alert-error-message" },
561
592
  "\u26A0 ",
@@ -612,10 +643,11 @@ __webpack_require__.r(__webpack_exports__);
612
643
 
613
644
 
614
645
 
615
- 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, }) => {
616
647
  const [isCodeExpanded, setIsCodeExpanded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
617
648
  const shouldShowToolbar = isLastAiMessage || isCodeComplete;
618
649
  if (agentModeEnabled) {
650
+ // Handle regular code blocks
619
651
  return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: (0,_utils_classNames__WEBPACK_IMPORTED_MODULE_3__.classNames)('code-block-container', 'agent-mode', {
620
652
  'agent-mode-collapsed': !isCodeExpanded,
621
653
  }) },
@@ -932,12 +964,13 @@ __webpack_require__.r(__webpack_exports__);
932
964
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
933
965
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
934
966
  /* harmony import */ var _utils_classNames__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../utils/classNames */ "./lib/utils/classNames.js");
935
- /* 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");
936
968
  /* harmony import */ var _utils_notebook__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../utils/notebook */ "./lib/utils/notebook.js");
937
969
  /* harmony import */ var _style_ChatInput_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../style/ChatInput.css */ "./style/ChatInput.css");
938
970
  /* harmony import */ var _style_ChatDropdown_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../style/ChatDropdown.css */ "./style/ChatDropdown.css");
939
971
  /* harmony import */ var _hooks_useDebouncedFunction__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../hooks/useDebouncedFunction */ "./lib/hooks/useDebouncedFunction.js");
940
- /* 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");
941
974
  /* harmony import */ var _components_DatabaseButton__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../components/DatabaseButton */ "./lib/components/DatabaseButton.js");
942
975
  /*
943
976
  * Copyright (c) Saga Inc.
@@ -952,6 +985,7 @@ __webpack_require__.r(__webpack_exports__);
952
985
 
953
986
 
954
987
 
988
+
955
989
  const ChatInput = ({ app, initialContent, placeholder, onSave, onCancel, isEditing, contextManager, notebookTracker, agentModeEnabled = false, agentExecutionStatus = 'idle', }) => {
956
990
  var _a;
957
991
  const [input, setInput] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(initialContent);
@@ -963,6 +997,16 @@ const ChatInput = ({ app, initialContent, placeholder, onSave, onCancel, isEditi
963
997
  const [dropdownFilter, setDropdownFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('');
964
998
  const [additionalContext, setAdditionalContext] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);
965
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
+ };
966
1010
  // Debounce the active cell ID change to avoid multiple rerenders.
967
1011
  // We use this to avoid a flickering screen when the active cell changes.
968
1012
  const debouncedSetActiveCellID = (0,_hooks_useDebouncedFunction__WEBPACK_IMPORTED_MODULE_4__.useDebouncedFunction)((newID) => {
@@ -1167,6 +1211,7 @@ const ChatInput = ({ app, initialContent, placeholder, onSave, onCancel, isEditi
1167
1211
  return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: (0,_utils_classNames__WEBPACK_IMPORTED_MODULE_5__.classNames)("chat-input-container") },
1168
1212
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: 'context-container' },
1169
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 }),
1170
1215
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { className: "context-button", onClick: () => {
1171
1216
  var _a;
1172
1217
  setDropdownVisible(true);
@@ -1174,7 +1219,7 @@ const ChatInput = ({ app, initialContent, placeholder, onSave, onCancel, isEditi
1174
1219
  setIsDropdownFromButton(true);
1175
1220
  (_a = textAreaRef.current) === null || _a === void 0 ? void 0 : _a.focus();
1176
1221
  } }, "\uFF20 Add Context"),
1177
- 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 })))),
1178
1223
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: 'chat-input-text-area-container' },
1179
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) => {
1180
1225
  // If dropdown is visible, only handle escape to close it
@@ -1203,7 +1248,7 @@ const ChatInput = ({ app, initialContent, placeholder, onSave, onCancel, isEditi
1203
1248
  }
1204
1249
  }
1205
1250
  } }),
1206
- 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 }))),
1207
1252
  isEditing &&
1208
1253
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "message-edit-buttons" },
1209
1254
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { onClick: () => onSave(input, undefined, mapAdditionalContext()) }, "Save"),
@@ -1244,6 +1289,7 @@ __webpack_require__.r(__webpack_exports__);
1244
1289
  /* harmony import */ var _components_AgentComponents_GetCellOutputToolUI__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../../components/AgentComponents/GetCellOutputToolUI */ "./lib/components/AgentComponents/GetCellOutputToolUI.js");
1245
1290
  /* harmony import */ var _components_AgentComponents_AssumptionToolUI__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../components/AgentComponents/AssumptionToolUI */ "./lib/components/AgentComponents/AssumptionToolUI.js");
1246
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");
1247
1293
  /*
1248
1294
  * Copyright (c) Saga Inc.
1249
1295
  * Distributed under the terms of the GNU Affero General Public License v3.0 License.
@@ -1267,6 +1313,7 @@ __webpack_require__.r(__webpack_exports__);
1267
1313
 
1268
1314
 
1269
1315
 
1316
+
1270
1317
  const ChatMessage = ({ app, message, promptType, agentResponse, messageIndex, mitoAIConnectionError, mitoAIConnectionErrorType, notebookTracker, renderMimeRegistry, isLastAiMessage, isLastMessage, operatingSystem, previewAICode, acceptAICode, rejectAICode, onUpdateMessage, contextManager, codeReviewStatus, setNextSteps, agentModeEnabled, additionalContext, }) => {
1271
1318
  const [isEditing, setIsEditing] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
1272
1319
  if (message.role !== 'user' && message.role !== 'assistant') {
@@ -1320,7 +1367,7 @@ const ChatMessage = ({ app, message, promptType, agentResponse, messageIndex, mi
1320
1367
  // An empty code will look like this '```python ```'
1321
1368
  if (messagePart.length > 14) {
1322
1369
  return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null,
1323
- 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 })),
1324
1371
  isLastAiMessage && isCodeComplete && codeReviewStatus === 'chatPreview' &&
1325
1372
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: 'chat-message-buttons' },
1326
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' }),
@@ -1358,7 +1405,9 @@ const ChatMessage = ({ app, message, promptType, agentResponse, messageIndex, mi
1358
1405
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { className: "message-start-editing-button", onClick: handleEditClick, title: "Edit message" },
1359
1406
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_Pencil__WEBPACK_IMPORTED_MODULE_17__["default"], null))),
1360
1407
  (agentResponse === null || agentResponse === void 0 ? void 0 : agentResponse.type) === 'get_cell_output' &&
1361
- 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)));
1362
1411
  };
1363
1412
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ChatMessage);
1364
1413
 
@@ -2642,6 +2691,22 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
2642
2691
  // in the next loop iteration
2643
2692
  sendCellIDOutput = agentResponse.get_cell_output_cell_id;
2644
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
+ }
2645
2710
  }
2646
2711
  if (agentExecutionDepth > AGENT_EXECUTION_DEPTH_LIMIT) {
2647
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);
@@ -3305,6 +3370,7 @@ const getFirstMessageFromCookie = () => {
3305
3370
 
3306
3371
  __webpack_require__.r(__webpack_exports__);
3307
3372
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
3373
+ /* harmony export */ setDefaultWindowingMode: () => (/* binding */ setDefaultWindowingMode),
3308
3374
  /* harmony export */ setRenameUntitledFileOnSave: () => (/* binding */ setRenameUntitledFileOnSave)
3309
3375
  /* harmony export */ });
3310
3376
  /*
@@ -3313,6 +3379,7 @@ __webpack_require__.r(__webpack_exports__);
3313
3379
  */
3314
3380
  // Document manager plugin ID
3315
3381
  const DOCMANAGER_PLUGIN_ID = '@jupyterlab/docmanager-extension:plugin';
3382
+ const NOTEBOOK_PLUGIN_ID = '@jupyterlab/notebook-extension:tracker';
3316
3383
  // Set renameUntitledFileOnSave to false when the extension loads
3317
3384
  const setRenameUntitledFileOnSave = async (settingRegistry, _documentManager) => {
3318
3385
  // Note we don't use the documentManager, but we require it as a parameter to make sure
@@ -3321,7 +3388,15 @@ const setRenameUntitledFileOnSave = async (settingRegistry, _documentManager) =>
3321
3388
  await settingRegistry.set(DOCMANAGER_PLUGIN_ID, 'renameUntitledFileOnSave', false);
3322
3389
  }
3323
3390
  catch (error) {
3324
- 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);
3325
3400
  }
3326
3401
  };
3327
3402
 
@@ -3539,12 +3614,13 @@ __webpack_require__.r(__webpack_exports__);
3539
3614
  /* harmony import */ var _jupyterlab_coreutils__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_jupyterlab_coreutils__WEBPACK_IMPORTED_MODULE_0__);
3540
3615
  /* harmony import */ var _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @jupyterlab/apputils */ "webpack/sharing/consume/default/@jupyterlab/apputils");
3541
3616
  /* harmony import */ var _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__);
3542
- /* harmony import */ var _requirementsUtils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./requirementsUtils */ "./lib/Extensions/AppBuilder/requirementsUtils.js");
3543
- /* 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");
3544
3619
  /* harmony import */ var _lumino_coreutils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @lumino/coreutils */ "webpack/sharing/consume/default/@lumino/coreutils");
3545
3620
  /* harmony import */ var _lumino_coreutils__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_lumino_coreutils__WEBPACK_IMPORTED_MODULE_2__);
3546
- /* 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");
3547
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");
3548
3624
  /*
3549
3625
  * Copyright (c) Saga Inc.
3550
3626
  * Distributed under the terms of the GNU Affero General Public License v3.0 License.
@@ -3556,15 +3632,32 @@ __webpack_require__.r(__webpack_exports__);
3556
3632
 
3557
3633
 
3558
3634
 
3635
+
3559
3636
  /*
3560
3637
  This function generates a requirements.txt file that lists the dependencies for the streamlit app
3561
3638
  */
3562
3639
  const convertNotebookToStreamlit = async (notebookTracker, appBuilderService) => {
3563
- // Check authentication before proceeding with deployment
3564
- const isAuthenticated = await (0,_auth__WEBPACK_IMPORTED_MODULE_3__.checkAuthenticationAndRedirect)();
3565
- if (!isAuthenticated) {
3640
+ let jwtToken = await (0,_auth__WEBPACK_IMPORTED_MODULE_3__.getJWTToken)();
3641
+ if (!jwtToken) {
3642
+ // No token found, show authentication popup
3566
3643
  console.log('User not authenticated, redirected to signup');
3567
- 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
+ }
3568
3661
  }
3569
3662
  const notebookPanel = notebookTracker.currentWidget;
3570
3663
  if (!notebookPanel) {
@@ -3578,15 +3671,14 @@ const convertNotebookToStreamlit = async (notebookTracker, appBuilderService) =>
3578
3671
  console.log('Current working directory info:', notebookPanel.context);
3579
3672
  // Build the requirements.txt file
3580
3673
  console.debug("Building requirements.txt file");
3581
- const requirementsContent = await (0,_requirementsUtils__WEBPACK_IMPORTED_MODULE_4__.generateRequirementsTxt)(notebookTracker);
3674
+ const requirementsContent = await (0,_requirementsUtils__WEBPACK_IMPORTED_MODULE_5__.generateRequirementsTxt)(notebookTracker);
3582
3675
  // Save the files to the current directory
3583
- 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);
3584
3677
  // After building the files, we need to send a request to the backend to deploy the app
3585
3678
  if (appBuilderService) {
3586
3679
  try {
3587
3680
  console.log("Sending request to deploy the app");
3588
- // Get JWT token for authentication
3589
- const jwtToken = (0,_auth__WEBPACK_IMPORTED_MODULE_3__.getJWTToken)();
3681
+ // Use the JWT token that was already obtained or refreshed above
3590
3682
  const response = await appBuilderService.client.sendMessage({
3591
3683
  type: 'build-app',
3592
3684
  message_id: _lumino_coreutils__WEBPACK_IMPORTED_MODULE_2__.UUID.uuid4(),
@@ -3601,7 +3693,7 @@ const convertNotebookToStreamlit = async (notebookTracker, appBuilderService) =>
3601
3693
  else {
3602
3694
  console.log("App deployment response:", response);
3603
3695
  const url = response.url;
3604
- (0,_DeployAppNotification__WEBPACK_IMPORTED_MODULE_6__.deployAppNotification)(url);
3696
+ (0,_DeployAppNotification__WEBPACK_IMPORTED_MODULE_7__.deployAppNotification)(url);
3605
3697
  }
3606
3698
  }
3607
3699
  catch (error) {
@@ -3615,6 +3707,116 @@ const convertNotebookToStreamlit = async (notebookTracker, appBuilderService) =>
3615
3707
  };
3616
3708
 
3617
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
+
3618
3820
  /***/ }),
3619
3821
 
3620
3822
  /***/ "./lib/Extensions/AppBuilder/auth.js":
@@ -3625,169 +3827,39 @@ const convertNotebookToStreamlit = async (notebookTracker, appBuilderService) =>
3625
3827
 
3626
3828
  __webpack_require__.r(__webpack_exports__);
3627
3829
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
3628
- /* harmony export */ checkAuthenticationAndRedirect: () => (/* binding */ checkAuthenticationAndRedirect),
3629
- /* harmony export */ exchangeCodeForTokens: () => (/* binding */ exchangeCodeForTokens),
3630
3830
  /* harmony export */ getAuthHeaders: () => (/* binding */ getAuthHeaders),
3631
- /* harmony export */ getJWTToken: () => (/* binding */ getJWTToken),
3632
- /* harmony export */ isUserAuthenticated: () => (/* binding */ isUserAuthenticated),
3633
- /* harmony export */ redirectToSignin: () => (/* binding */ redirectToSignin),
3634
- /* harmony export */ redirectToSignup: () => (/* binding */ redirectToSignup),
3635
- /* harmony export */ removeJWTToken: () => (/* binding */ removeJWTToken),
3636
- /* harmony export */ setJWTToken: () => (/* binding */ setJWTToken)
3831
+ /* harmony export */ getJWTToken: () => (/* binding */ getJWTToken)
3637
3832
  /* harmony export */ });
3638
- /* 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");
3639
3835
  /*
3640
3836
  * Copyright (c) Saga Inc.
3641
3837
  * Distributed under the terms of the GNU Affero General Public License v3.0 License.
3642
3838
  */
3643
3839
 
3644
- const domain_dev = 'https://mito-app-auth.auth.us-east-1.amazoncognito.com';
3645
- const client_id = '6ara3u3l8sss738hrhbq1qtiqf';
3646
- // Change this to domain_dev for dev deployments
3647
- const active_domain = domain_dev;
3648
- const currentUrl = window.location.href;
3649
- let redirectUrl;
3650
- // As of now we only support localhost:8888 because we have only allowed this redirect url on AWS conito
3651
- // We can modify the redirect to include other ports in the future
3652
- if (currentUrl.includes('localhost')) {
3653
- redirectUrl = 'http://localhost:8888/lab';
3654
- }
3655
- else if (currentUrl.includes('trymito')) {
3656
- redirectUrl = 'https://launch.trymito.io';
3657
- }
3658
- else {
3659
- redirectUrl = currentUrl;
3660
- }
3661
- console.log("currentUrl: ", currentUrl);
3662
- // AWS Cognito configuration
3663
- const COGNITO_CONFIG = {
3664
- SIGNUP_URL: `${active_domain}/signup?client_id=${client_id}&response_type=code&scope=email+openid+profile&redirect_uri=${redirectUrl}`,
3665
- SIGNIN_URL: `${active_domain}/login?client_id=${client_id}&response_type=code&scope=email+openid+profile&redirect_uri=${redirectUrl}`,
3666
- JWT_COOKIE_NAME: 'mito-auth-token',
3667
- JWT_COOKIE_EXPIRY_HOURS: 1
3668
- };
3669
- /**
3670
- * Check if user is authenticated by looking for JWT token in cookies
3671
- */
3672
- const isUserAuthenticated = () => {
3673
- const token = getJWTToken();
3674
- return token !== null && token !== undefined && token !== '';
3675
- };
3840
+
3841
+ // Ensure Amplify is configured before any auth operations
3842
+ (0,_aws_config__WEBPACK_IMPORTED_MODULE_0__.configureAmplify)();
3676
3843
  /**
3677
3844
  * Get JWT token from cookies
3678
3845
  */
3679
- const getJWTToken = () => {
3680
- const cookies = document.cookie.split(';');
3681
- const jwtCookie = cookies.find(cookie => cookie.trim().startsWith(`${COGNITO_CONFIG.JWT_COOKIE_NAME}=`));
3682
- if (jwtCookie) {
3683
- const token = jwtCookie.split('=')[1];
3684
- return token || null;
3685
- }
3686
- return null;
3687
- };
3688
- /**
3689
- * Set JWT token as a cookie
3690
- */
3691
- const setJWTToken = (token) => {
3692
- const date = new Date();
3693
- date.setTime(date.getTime() + (COGNITO_CONFIG.JWT_COOKIE_EXPIRY_HOURS * 60 * 60 * 1000));
3694
- const expires = "expires=" + date.toUTCString();
3695
- // Set cookie for all subdomains of trymito.io (production)
3696
- document.cookie = `${COGNITO_CONFIG.JWT_COOKIE_NAME}=${token}; ${expires}; path=/; domain=.trymito.io; SameSite=Lax; Secure`;
3697
- // For localhost development
3698
- if (window.location.hostname === 'localhost') {
3699
- document.cookie = `${COGNITO_CONFIG.JWT_COOKIE_NAME}=${token}; ${expires}; path=/`;
3700
- }
3701
- };
3702
- /**
3703
- * Remove JWT token from cookies
3704
- */
3705
- const removeJWTToken = () => {
3706
- // Delete for current domain
3707
- document.cookie = `${COGNITO_CONFIG.JWT_COOKIE_NAME}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`;
3708
- // Delete for all subdomains
3709
- document.cookie = `${COGNITO_CONFIG.JWT_COOKIE_NAME}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; domain=.trymito.io;`;
3710
- };
3711
- /**
3712
- * Exchange authorization code for JWT tokens
3713
- */
3714
- const exchangeCodeForTokens = async (code) => {
3846
+ const getJWTToken = async () => {
3847
+ var _a, _b;
3715
3848
  try {
3716
- const response = await (0,_restAPI_utils__WEBPACK_IMPORTED_MODULE_0__.requestAPI)('auth/token', {
3717
- method: 'POST',
3718
- body: JSON.stringify({ code })
3719
- });
3720
- if (response.error) {
3721
- console.error('Failed to exchange code for tokens:', response.error);
3722
- return false;
3723
- }
3724
- if (response.data) {
3725
- const data = response.data;
3726
- const { access_token } = data;
3727
- // Store the access token as the JWT token
3728
- if (access_token) {
3729
- setJWTToken(access_token);
3730
- return true;
3731
- }
3732
- }
3733
- 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 || '';
3734
3852
  }
3735
3853
  catch (error) {
3736
- console.error('Error exchanging code for tokens:', error);
3737
- return false;
3738
- }
3739
- };
3740
- /**
3741
- * Redirect user to AWS Cognito signup page
3742
- */
3743
- const redirectToSignup = () => {
3744
- window.location.href = COGNITO_CONFIG.SIGNUP_URL;
3745
- };
3746
- /**
3747
- * Redirect user to AWS Cognito signin page
3748
- */
3749
- const redirectToSignin = () => {
3750
- window.location.href = COGNITO_CONFIG.SIGNIN_URL;
3751
- };
3752
- /**
3753
- * Handle authentication check and redirect if needed
3754
- * Returns true if user is authenticated, false if redirected
3755
- */
3756
- const checkAuthenticationAndRedirect = async () => {
3757
- if (!isUserAuthenticated()) {
3758
- // Check if there's a code parameter in the URL (indicating return from Cognito)
3759
- const urlParams = new URLSearchParams(window.location.search);
3760
- const code = urlParams.get('code');
3761
- if (code) {
3762
- // User has returned from Cognito with authorization code
3763
- console.log('Received authorization code from Cognito:', code);
3764
- // Exchange the code for JWT tokens
3765
- const success = await exchangeCodeForTokens(code);
3766
- if (success) {
3767
- // Clean up URL
3768
- const newUrl = window.location.pathname;
3769
- window.history.replaceState({}, document.title, newUrl);
3770
- return true;
3771
- }
3772
- else {
3773
- // Failed to exchange code, redirect to signup
3774
- redirectToSignup();
3775
- return false;
3776
- }
3777
- }
3778
- else {
3779
- // No token and no code, redirect to signup
3780
- redirectToSignup();
3781
- return false;
3782
- }
3854
+ console.error('Error getting JWT token:', error);
3855
+ return '';
3783
3856
  }
3784
- return true;
3785
3857
  };
3786
3858
  /**
3787
3859
  * Get authentication headers for API requests
3788
3860
  */
3789
- const getAuthHeaders = () => {
3790
- const token = getJWTToken();
3861
+ const getAuthHeaders = async () => {
3862
+ const token = await getJWTToken();
3791
3863
  if (token) {
3792
3864
  return {
3793
3865
  'Authorization': `Bearer ${token}`
@@ -3797,6 +3869,101 @@ const getAuthHeaders = () => {
3797
3869
  };
3798
3870
 
3799
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
+
3800
3967
  /***/ }),
3801
3968
 
3802
3969
  /***/ "./lib/Extensions/AppBuilder/fileUtils.js":
@@ -4269,10 +4436,17 @@ def structured_globals():
4269
4436
 
4270
4437
  else:
4271
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
+
4272
4446
  new_variable = {
4273
4447
  "variable_name": k,
4274
4448
  "type": str(type(v)),
4275
- "value": repr(v)
4449
+ "value": truncated_value
4276
4450
  }
4277
4451
 
4278
4452
  try:
@@ -6648,11 +6822,12 @@ __webpack_require__.r(__webpack_exports__);
6648
6822
  /* harmony import */ var _utils_classNames__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/classNames */ "./lib/utils/classNames.js");
6649
6823
  /* harmony import */ var _utils_strings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/strings */ "./lib/utils/strings.js");
6650
6824
  /* harmony import */ var _Extensions_AiChat_ChatMessage_PythonCode__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../Extensions/AiChat/ChatMessage/PythonCode */ "./lib/Extensions/AiChat/ChatMessage/PythonCode.js");
6651
- /* 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");
6652
6826
  /* harmony import */ var _icons_AlertIcon__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../icons/AlertIcon */ "./lib/icons/AlertIcon.js");
6653
6827
  /* harmony import */ var _AgentComponentHeader__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./AgentComponentHeader */ "./lib/components/AgentComponents/AgentComponentHeader.js");
6654
6828
  /* harmony import */ var _style_ErrorFixupToolUI_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../style/ErrorFixupToolUI.css */ "./style/ErrorFixupToolUI.css");
6655
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");
6656
6831
  /*
6657
6832
  * Copyright (c) Saga Inc.
6658
6833
  * Distributed under the terms of the GNU Affero General Public License v3.0 License.
@@ -6666,6 +6841,7 @@ __webpack_require__.r(__webpack_exports__);
6666
6841
 
6667
6842
 
6668
6843
 
6844
+
6669
6845
  const parsePythonErrorType = (content) => {
6670
6846
  if (!content)
6671
6847
  return 'Error';
@@ -6698,12 +6874,15 @@ const GroupedErrorsAndFixes = ({ messages, renderMimeRegistry, }) => {
6698
6874
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "error-fixup-header" },
6699
6875
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null, "Fixing an error")),
6700
6876
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "error-fixup-messages-container" }, messages.map((messageItem, index) => {
6701
- var _a, _b, _c;
6877
+ var _a, _b, _c, _d;
6702
6878
  const isUserMessage = messageItem.message.role === 'user';
6703
6879
  if (isUserMessage) {
6704
6880
  return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ErrorDetectedBlock, { key: `error-${index}`, errorMessage: messageItem.message, renderMimeRegistry: renderMimeRegistry }));
6705
6881
  }
6706
- 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 }));
6707
6886
  }))));
6708
6887
  };
6709
6888
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (GroupedErrorsAndFixes);
@@ -6724,7 +6903,7 @@ __webpack_require__.r(__webpack_exports__);
6724
6903
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
6725
6904
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
6726
6905
  /* harmony import */ var _icons_MagnifyingGlassIcon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../icons/MagnifyingGlassIcon */ "./lib/icons/MagnifyingGlassIcon.js");
6727
- /* 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");
6728
6907
  /*
6729
6908
  * Copyright (c) Saga Inc.
6730
6909
  * Distributed under the terms of the GNU Affero General Public License v3.0 License.
@@ -6733,8 +6912,8 @@ __webpack_require__.r(__webpack_exports__);
6733
6912
 
6734
6913
 
6735
6914
  const GetCellOutputToolUI = () => {
6736
- return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "get-cell-output-container" },
6737
- 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" },
6738
6917
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_MagnifyingGlassIcon__WEBPACK_IMPORTED_MODULE_2__["default"], null),
6739
6918
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, "Taking a look at the cell output"))));
6740
6919
  };
@@ -6743,10 +6922,10 @@ const GetCellOutputToolUI = () => {
6743
6922
 
6744
6923
  /***/ }),
6745
6924
 
6746
- /***/ "./lib/components/DatabaseButton.js":
6747
- /*!******************************************!*\
6748
- !*** ./lib/components/DatabaseButton.js ***!
6749
- \******************************************/
6925
+ /***/ "./lib/components/AgentComponents/RunAllCellsToolUI.js":
6926
+ /*!*************************************************************!*\
6927
+ !*** ./lib/components/AgentComponents/RunAllCellsToolUI.js ***!
6928
+ \*************************************************************/
6750
6929
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
6751
6930
 
6752
6931
  __webpack_require__.r(__webpack_exports__);
@@ -6755,10 +6934,9 @@ __webpack_require__.r(__webpack_exports__);
6755
6934
  /* harmony export */ });
6756
6935
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
6757
6936
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
6758
- /* harmony import */ var _IconButton__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./IconButton */ "./lib/components/IconButton.js");
6759
- /* harmony import */ var _icons_DatabaseOutlineIcon__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../icons/DatabaseOutlineIcon */ "./lib/icons/DatabaseOutlineIcon.js");
6760
- /* harmony import */ var _Extensions_SettingsManager_SettingsManagerPlugin__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../Extensions/SettingsManager/SettingsManagerPlugin */ "./lib/Extensions/SettingsManager/SettingsManagerPlugin.js");
6761
- /* 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");
6762
6940
  /*
6763
6941
  * Copyright (c) Saga Inc.
6764
6942
  * Distributed under the terms of the GNU Affero General Public License v3.0 License.
@@ -6767,42 +6945,23 @@ __webpack_require__.r(__webpack_exports__);
6767
6945
 
6768
6946
 
6769
6947
 
6770
-
6771
- const DatabaseButton = ({ app }) => {
6772
- const [databaseConnections, setDatabaseConnections] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});
6773
- const [isIconVisible, setIsIconVisible] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);
6774
- // Fetch database connections
6775
- const fetchDatabaseConnections = async () => {
6776
- const databaseConnections = await (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_1__.getDatabaseConnections)();
6777
- setDatabaseConnections(databaseConnections);
6778
- };
6779
- // Fetch database connections
6780
- (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
6781
- void fetchDatabaseConnections();
6782
- }, []);
6783
- // Determine notification dot type based on connections
6784
- const getNotificationDotType = () => {
6785
- if (!isIconVisible) {
6786
- return null;
6787
- }
6788
- return Object.keys(databaseConnections).length > 0 ? 'success' : 'warning';
6789
- };
6790
- 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: () => {
6791
- void app.commands.execute(_Extensions_SettingsManager_SettingsManagerPlugin__WEBPACK_IMPORTED_MODULE_4__.COMMAND_MITO_AI_SETTINGS);
6792
- setIsIconVisible(false);
6793
- }, notificationDotType: getNotificationDotType(), className: 'icon-button-hover', style: {
6794
- height: 'var(--chat-context-button-height)'
6795
- } }));
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"))));
6796
6955
  };
6797
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DatabaseButton);
6956
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RunAllCellsToolUI);
6798
6957
 
6799
6958
 
6800
6959
  /***/ }),
6801
6960
 
6802
- /***/ "./lib/components/DropdownMenu.js":
6803
- /*!****************************************!*\
6804
- !*** ./lib/components/DropdownMenu.js ***!
6805
- \****************************************/
6961
+ /***/ "./lib/components/AttachFileButton.js":
6962
+ /*!********************************************!*\
6963
+ !*** ./lib/components/AttachFileButton.js ***!
6964
+ \********************************************/
6806
6965
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
6807
6966
 
6808
6967
  __webpack_require__.r(__webpack_exports__);
@@ -6811,46 +6970,307 @@ __webpack_require__.r(__webpack_exports__);
6811
6970
  /* harmony export */ });
6812
6971
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
6813
6972
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
6814
- /* 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__);
6815
6978
  /*
6816
6979
  * Copyright (c) Saga Inc.
6817
6980
  * Distributed under the terms of the GNU Affero General Public License v3.0 License.
6818
6981
  */
6819
6982
 
6820
6983
 
6821
- const DropdownMenu = ({ trigger, items, className = '', alignment = 'left', }) => {
6822
- const [isOpen, setIsOpen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
6823
- const dropdownRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
6824
- // Close dropdown when clicking outside
6825
- (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
6826
- const handleClickOutside = (event) => {
6827
- if (dropdownRef.current &&
6828
- !dropdownRef.current.contains(event.target)) {
6829
- setIsOpen(false);
6830
- }
6831
- };
6832
- document.addEventListener('mousedown', handleClickOutside);
6833
- return () => document.removeEventListener('mousedown', handleClickOutside);
6834
- }, []);
6835
- // Handle the main click (primary action)
6836
- const handlePrimaryClick = (onClick, disabled) => {
6837
- 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)
6838
7006
  return;
6839
- onClick();
6840
- setIsOpen(false);
7007
+ // Trigger the hidden file input
7008
+ (_a = fileInputRef.current) === null || _a === void 0 ? void 0 : _a.click();
6841
7009
  };
6842
- // Choose the alignment class
6843
- const alignmentClass = alignment === 'right' ? 'dropdown-menu-right' : 'dropdown-menu-left';
6844
- return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: `dropdown-container ${className}`, ref: dropdownRef },
6845
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { onClick: () => setIsOpen(!isOpen) }, trigger),
6846
- 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' : ''}` },
6847
- 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 },
6848
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "dropdown-item-icon" }, item.primaryIcon && react__WEBPACK_IMPORTED_MODULE_0___default().createElement(item.primaryIcon)),
6849
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "dropdown-item-label" }, item.label)),
6850
- item.secondaryActions && item.secondaryActions.map((action, actionIndex) => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { key: actionIndex, className: "dropdown-item-secondary", onClick: (e) => {
6851
- e.stopPropagation(); // prevent triggering the main onClick
6852
- if (!action.disabled) {
6853
- action.onClick();
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();
6854
7274
  setIsOpen(false); // optional: close the dropdown after secondary action
6855
7275
  }
6856
7276
  }, disabled: action.disabled, title: action.tooltip, style: {
@@ -6888,8 +7308,8 @@ __webpack_require__.r(__webpack_exports__);
6888
7308
 
6889
7309
 
6890
7310
 
6891
- const IconButton = ({ icon, onClick, title, style, notificationDotType = null, className }) => {
6892
- 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 },
6893
7313
  icon,
6894
7314
  notificationDotType && react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: `notification-dot notification-dot-${notificationDotType}` })));
6895
7315
  };
@@ -7715,6 +8135,31 @@ const NucleausIcon = ({ height = 20, width = 20, }) => (react__WEBPACK_IMPORTED_
7715
8135
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (NucleausIcon);
7716
8136
 
7717
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
+
7718
8163
  /***/ }),
7719
8164
 
7720
8165
  /***/ "./lib/icons/Pencil.js":
@@ -8193,7 +8638,8 @@ __webpack_require__.r(__webpack_exports__);
8193
8638
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
8194
8639
  /* harmony export */ acceptAndRunCellUpdate: () => (/* binding */ acceptAndRunCellUpdate),
8195
8640
  /* harmony export */ acceptAndRunCode: () => (/* binding */ acceptAndRunCode),
8196
- /* harmony export */ retryIfExecutionError: () => (/* binding */ retryIfExecutionError)
8641
+ /* harmony export */ retryIfExecutionError: () => (/* binding */ retryIfExecutionError),
8642
+ /* harmony export */ runAllCells: () => (/* binding */ runAllCells)
8197
8643
  /* harmony export */ });
8198
8644
  /* harmony import */ var _Extensions_ErrorMimeRenderer_errorUtils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Extensions/ErrorMimeRenderer/errorUtils */ "./lib/Extensions/ErrorMimeRenderer/errorUtils.js");
8199
8645
  /* harmony import */ var _sleep__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sleep */ "./lib/utils/sleep.js");
@@ -8249,12 +8695,14 @@ const acceptAndRunCode = async (app, notebookTracker, previewAICodeToActiveCell,
8249
8695
  await (0,_sleep__WEBPACK_IMPORTED_MODULE_1__.sleep)(1000);
8250
8696
  };
8251
8697
  const retryIfExecutionError = async (notebookTracker, app, getDuplicateChatHistoryManager, addAIMessageFromResponseAndUpdateState, sendAgentSmartDebugMessage, previewAICodeToActiveCell, acceptAICode, shouldContinueAgentExecution, finalizeAgentStop, chatHistoryManagerRef) => {
8252
- var _a, _b, _c, _d, _e;
8698
+ var _a, _b, _c;
8253
8699
  const cell = (_b = (_a = notebookTracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content) === null || _b === void 0 ? void 0 : _b.activeCell;
8254
8700
  // Note: If you update the max retries, update the message we display on each failure
8255
8701
  // attempt to ensure we don't say "third attempt" over and over again.
8256
8702
  const MAX_RETRIES = 3;
8257
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
8258
8706
  while ((0,_notebook__WEBPACK_IMPORTED_MODULE_0__.didCellExecutionError)(cell) && attempts < MAX_RETRIES) {
8259
8707
  if (!shouldContinueAgentExecution.current) {
8260
8708
  finalizeAgentStop();
@@ -8269,16 +8717,35 @@ const retryIfExecutionError = async (notebookTracker, app, getDuplicateChatHisto
8269
8717
  const errorMessage = (0,_Extensions_ErrorMimeRenderer_errorUtils__WEBPACK_IMPORTED_MODULE_2__.getFullErrorMessageFromTraceback)(errorOutput.traceback);
8270
8718
  await sendAgentSmartDebugMessage(errorMessage);
8271
8719
  const aiDisplayOptimizedChatItem = chatHistoryManagerRef.current.getLastAIDisplayOptimizedChatItem();
8272
- // TODO: We expect that the agent responds with a cell_update if they are prompted to fix an error.
8273
- // But we are not enforcing that right now. We can fix this by setting the response_format for agent:smartDebug
8274
- // to only allow cell_updates and then we can return the agentResponse from sendAgentSmartDebugMessage so
8275
- // typescript knows what type it is.
8276
- 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) {
8277
8723
  return 'failure';
8278
8724
  }
8279
- const cellUpdate = aiDisplayOptimizedChatItem.agentResponse.cell_update;
8280
- if (cellUpdate !== undefined && cellUpdate !== null) {
8281
- 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';
8282
8749
  }
8283
8750
  attempts++;
8284
8751
  // If this was the last attempt and it still failed
@@ -8288,6 +8755,37 @@ const retryIfExecutionError = async (notebookTracker, app, getDuplicateChatHisto
8288
8755
  }
8289
8756
  return 'success';
8290
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
+ };
8291
8789
 
8292
8790
 
8293
8791
  /***/ }),
@@ -10443,10 +10941,10 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
10443
10941
 
10444
10942
  /***/ }),
10445
10943
 
10446
- /***/ "./node_modules/css-loader/dist/cjs.js!./style/AssumptionTool.css":
10447
- /*!************************************************************************!*\
10448
- !*** ./node_modules/css-loader/dist/cjs.js!./style/AssumptionTool.css ***!
10449
- \************************************************************************/
10944
+ /***/ "./node_modules/css-loader/dist/cjs.js!./style/AgentToolUIComponent.css":
10945
+ /*!******************************************************************************!*\
10946
+ !*** ./node_modules/css-loader/dist/cjs.js!./style/AgentToolUIComponent.css ***!
10947
+ \******************************************************************************/
10450
10948
  /***/ ((module, __webpack_exports__, __webpack_require__) => {
10451
10949
 
10452
10950
  __webpack_require__.r(__webpack_exports__);
@@ -10467,57 +10965,42 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
10467
10965
  * Distributed under the terms of the GNU Affero General Public License v3.0 License.
10468
10966
  */
10469
10967
 
10470
- .assumption-tool-container {
10471
- color: var(--jp-ui-font-color2);
10968
+ .agent-tool-ui-container {
10472
10969
  display: flex;
10473
- justify-content: space-between;
10970
+ flex-direction: row;
10474
10971
  align-items: center;
10475
- margin-top: 10px;
10476
- margin-bottom: 10px;
10477
- position: relative;
10478
- padding: 8px var(--chat-taskpane-tool-call-horizontal-padding);
10479
- border-radius: var(--chat-taskpane-item-border-radius);
10480
- border: 1px solid var(--jp-cell-editor-border-color);
10481
- cursor: default;
10972
+ justify-content: start;
10973
+ background-color: transparent;
10974
+ padding: 10px;
10975
+ color: var(--jp-ui-font-color2);
10482
10976
  }
10483
10977
 
10484
- .assumption-header-label {
10485
- position: absolute;
10486
- top: -10px;
10487
- left: 12px;
10488
- background-color: var(--chat-background-color);
10489
- padding: 2px 8px;
10490
- border-radius: 4px;
10491
- font-size: 12px;
10492
- color: var(--jp-ui-font-color2);
10493
- 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);
10494
10982
  }
10495
10983
 
10496
- .assumption-content {
10497
- display: flex;
10498
- align-items: flex-start;
10499
- gap: 8px;
10500
- color: var(--jp-ui-font-color2);
10501
- font-size: 14px;
10502
- line-height: 1.4;
10503
- margin: 0;
10504
- padding: 10px 10px 5px 10px;
10984
+ .agent-tool-ui-container:not(.agent-tool-ui-error-fixup) .agent-tool-ui-content {
10985
+ margin-left: 5px;
10505
10986
  }
10506
10987
 
10507
- .assumption-content ul {
10508
- margin: 0;
10509
- padding-left: 10px;
10510
- }`, "",{"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":""}]);
10511
10994
  // Exports
10512
10995
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
10513
10996
 
10514
10997
 
10515
10998
  /***/ }),
10516
10999
 
10517
- /***/ "./node_modules/css-loader/dist/cjs.js!./style/CTACarousel.css":
10518
- /*!*********************************************************************!*\
10519
- !*** ./node_modules/css-loader/dist/cjs.js!./style/CTACarousel.css ***!
10520
- \*********************************************************************/
11000
+ /***/ "./node_modules/css-loader/dist/cjs.js!./style/AlertBlock.css":
11001
+ /*!********************************************************************!*\
11002
+ !*** ./node_modules/css-loader/dist/cjs.js!./style/AlertBlock.css ***!
11003
+ \********************************************************************/
10521
11004
  /***/ ((module, __webpack_exports__, __webpack_require__) => {
10522
11005
 
10523
11006
  __webpack_require__.r(__webpack_exports__);
@@ -10538,9 +11021,745 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
10538
11021
  * Distributed under the terms of the GNU Affero General Public License v3.0 License.
10539
11022
  */
10540
11023
 
10541
- .cta-carousel {
10542
- width: 100%;
10543
- }
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 {
11761
+ width: 100%;
11762
+ }
10544
11763
 
10545
11764
  .cta-carousel-container {
10546
11765
  display: flex;
@@ -10970,172 +12189,54 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
10970
12189
  border-right: 1px solid var(--jp-border-color1);
10971
12190
  }
10972
12191
 
10973
- /* Remove the individual button radius styles since we're handling it at the container level */
10974
- .message-action-buttons button:first-child,
10975
- .message-action-buttons button:last-child {
10976
- border-radius: 0;
10977
- }
10978
-
10979
- /* Standalone edit button */
10980
- .message-start-editing-button {
10981
- position: relative;
10982
- padding: 4px;
10983
- border-radius: 4px;
10984
- }
10985
-
10986
- /* SVG icon color */
10987
- .message-action-buttons button svg {
10988
- color: var(--jp-content-font-color1);
10989
- }
10990
-
10991
- /* Hover states */
10992
- .message-action-buttons button:hover,
10993
- .message-start-editing-button:hover {
10994
- background-color: var(--jp-layout-color4);
10995
- }
10996
-
10997
- /* Show buttons on message hover */
10998
- .message:hover .message-action-buttons button,
10999
- .message:hover .message-start-editing-button {
11000
- opacity: 1;
11001
- }
11002
-
11003
- .message-edit-buttons {
11004
- display: flex;
11005
- gap: 8px;
11006
- padding: 5px;
11007
- }
11008
-
11009
- .message-edit-buttons button {
11010
- padding: 4px 12px;
11011
- border-radius: 4px;
11012
- background-color: var(--jp-layout-color1);
11013
- color: var(--jp-content-font-color1);
11014
- border: 1px solid var(--jp-border-color1);
11015
- cursor: pointer;
11016
- }
11017
-
11018
- .message-edit-buttons button:hover {
11019
- background-color: var(--jp-layout-color2);
11020
- }
11021
-
11022
- .chat-message-alert-container {
11023
- display: flex;
11024
- flex-direction: column;
11025
- gap: 10px;
11026
- background-color: var(--red-300);
11027
- border-radius: 5px;
11028
- padding: 10px;
11029
- border: 1px solid var(--red-900);
11030
- color: var(--red-900);
11031
- }
11032
-
11033
- .chat-message-alert a {
11034
- color: var(--purple-700);
11035
- text-decoration: underline;
11036
- }
11037
-
11038
- /* New style for the main error message */
11039
- .alert-error-message {
11040
- font-size: 14px;
11041
- font-weight: 600;
11042
- line-height: 1.4;
11043
- color: var(--red-900);
11044
- margin-bottom: 8px;
11045
- }
11046
-
11047
- .alert-actions-header {
11048
- margin-bottom: 12px;
11049
- }
11050
-
11051
- .alert-actions-title {
11052
- font-weight: 500;
11053
- margin: 0 0 8px 0;
11054
- color: var(--red-900);
11055
- font-size: 13px;
11056
- }
11057
-
11058
- .alert-actions-list {
11059
- margin: 0;
11060
- padding-left: 16px;
11061
- color: var(--red-800);
11062
- }
11063
-
11064
- .alert-actions-list li {
11065
- margin-bottom: 4px;
11066
- font-size: 13px;
11067
- line-height: 1.4;
11068
- }
11069
-
11070
- .alert-action-item {
11071
- display: flex;
11072
- align-items: flex-start;
11073
- gap: 8px;
11074
- padding: 8px 0;
11075
- color: var(--red-800);
11076
- font-size: 13px;
11077
- line-height: 1.4;
11078
- }
11079
-
11080
- .action-icon {
11081
- font-size: 16px;
11082
- flex-shrink: 0;
11083
- margin-top: 1px;
12192
+ /* Remove the individual button radius styles since we're handling it at the container level */
12193
+ .message-action-buttons button:first-child,
12194
+ .message-action-buttons button:last-child {
12195
+ border-radius: 0;
11084
12196
  }
11085
12197
 
11086
- .details-toggle {
11087
- display: inline-flex;
11088
- align-items: center;
12198
+ /* Standalone edit button */
12199
+ .message-start-editing-button {
12200
+ position: relative;
12201
+ padding: 4px;
12202
+ border-radius: 4px;
11089
12203
  }
11090
12204
 
11091
- .toggle-button {
11092
- background: none;
11093
- border: none;
11094
- padding: 0;
11095
- cursor: pointer;
11096
- display: flex;
11097
- align-items: center;
11098
- gap: 4px;
11099
- color: var(--red-900);
11100
- font-size: 12px;
11101
- font-family: inherit;
11102
- text-decoration: underline;
12205
+ /* SVG icon color */
12206
+ .message-action-buttons button svg {
12207
+ color: var(--jp-content-font-color1);
11103
12208
  }
11104
12209
 
11105
- .toggle-button:hover {
11106
- color: var(--red-800);
12210
+ /* Hover states */
12211
+ .message-action-buttons button:hover,
12212
+ .message-start-editing-button:hover {
12213
+ background-color: var(--jp-layout-color4);
11107
12214
  }
11108
12215
 
11109
- .toggle-caret {
11110
- font-size: 10px;
11111
- transition: transform 0.2s ease;
11112
- display: inline-block;
11113
- text-decoration: none !important;
12216
+ /* Show buttons on message hover */
12217
+ .message:hover .message-action-buttons button,
12218
+ .message:hover .message-start-editing-button {
12219
+ opacity: 1;
11114
12220
  }
11115
12221
 
11116
- .toggle-caret.open {
11117
- transform: rotate(180deg);
12222
+ .message-edit-buttons {
12223
+ display: flex;
12224
+ gap: 8px;
12225
+ padding: 5px;
11118
12226
  }
11119
12227
 
11120
- .details-content {
11121
- margin-top: 8px;
11122
- margin-left: 16px;
11123
- padding: 8px;
11124
- background-color: var(--grey-100);
12228
+ .message-edit-buttons button {
12229
+ padding: 4px 12px;
11125
12230
  border-radius: 4px;
11126
- animation: slideDown 0.2s ease-out;
12231
+ background-color: var(--jp-layout-color1);
12232
+ color: var(--jp-content-font-color1);
12233
+ border: 1px solid var(--jp-border-color1);
12234
+ cursor: pointer;
11127
12235
  }
11128
12236
 
11129
- @keyframes slideDown {
11130
- from {
11131
- opacity: 0;
11132
- transform: translateY(-4px);
11133
- }
11134
- to {
11135
- opacity: 1;
11136
- transform: translateY(0);
11137
- }
11138
- }`, "",{"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,aAAa;EACb,sBAAsB;EACtB,SAAS;EACT,gCAAgC;EAChC,kBAAkB;EAClB,aAAa;EACb,gCAAgC;EAChC,qBAAqB;AACvB;;AAEA;EACE,wBAAwB;EACxB,0BAA0B;AAC5B;;AAEA,yCAAyC;AACzC;EACE,eAAe;EACf,gBAAgB;EAChB,gBAAgB;EAChB,qBAAqB;EACrB,kBAAkB;AACpB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,gBAAgB;EAChB,iBAAiB;EACjB,qBAAqB;EACrB,eAAe;AACjB;;AAEA;EACE,SAAS;EACT,kBAAkB;EAClB,qBAAqB;AACvB;;AAEA;EACE,kBAAkB;EAClB,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,uBAAuB;EACvB,QAAQ;EACR,cAAc;EACd,qBAAqB;EACrB,eAAe;EACf,gBAAgB;AAClB;;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,qBAAqB;EACrB,eAAe;EACf,oBAAoB;EACpB,0BAA0B;AAC5B;;AAEA;EACE,qBAAqB;AACvB;;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","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-container {\n display: flex;\n flex-direction: column;\n gap: 10px;\n background-color: var(--red-300);\n border-radius: 5px;\n padding: 10px;\n border: 1px solid var(--red-900);\n color: var(--red-900);\n}\n\n.chat-message-alert a {\n color: var(--purple-700);\n text-decoration: underline;\n}\n\n/* New style for the main error message */\n.alert-error-message {\n font-size: 14px;\n font-weight: 600;\n line-height: 1.4;\n color: var(--red-900);\n margin-bottom: 8px;\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 color: var(--red-900);\n font-size: 13px;\n}\n\n.alert-actions-list {\n margin: 0;\n padding-left: 16px;\n color: var(--red-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 color: var(--red-800);\n font-size: 13px;\n line-height: 1.4;\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 color: var(--red-900);\n font-size: 12px;\n font-family: inherit;\n text-decoration: underline;\n}\n\n.toggle-button:hover {\n color: var(--red-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}"],"sourceRoot":""}]);
12237
+ .message-edit-buttons button:hover {
12238
+ background-color: var(--jp-layout-color2);
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":""}]);
11139
12240
  // Exports
11140
12241
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
11141
12242
 
@@ -12243,55 +13344,6 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
12243
13344
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
12244
13345
 
12245
13346
 
12246
- /***/ }),
12247
-
12248
- /***/ "./node_modules/css-loader/dist/cjs.js!./style/GetCellOutputToolUI.css":
12249
- /*!*****************************************************************************!*\
12250
- !*** ./node_modules/css-loader/dist/cjs.js!./style/GetCellOutputToolUI.css ***!
12251
- \*****************************************************************************/
12252
- /***/ ((module, __webpack_exports__, __webpack_require__) => {
12253
-
12254
- __webpack_require__.r(__webpack_exports__);
12255
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
12256
- /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
12257
- /* harmony export */ });
12258
- /* 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");
12259
- /* 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__);
12260
- /* 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");
12261
- /* 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__);
12262
- // Imports
12263
-
12264
-
12265
- 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()));
12266
- // Module
12267
- ___CSS_LOADER_EXPORT___.push([module.id, `/*
12268
- * Copyright (c) Saga Inc.
12269
- * Distributed under the terms of the GNU Affero General Public License v3.0 License.
12270
- */
12271
-
12272
- .get-cell-output-container {
12273
- display: flex;
12274
- flex-direction: row;
12275
- align-items: center;
12276
- justify-content: start;
12277
- background-color: transparent;
12278
- padding: 10px;
12279
- border-radius: 5px;
12280
- border: 1px solid var(--jp-cell-editor-border-color);
12281
- margin: 10px 0;
12282
- color: var(--jp-ui-font-color2);
12283
- }
12284
-
12285
- .get-cell-output-content {
12286
- display: flex;
12287
- align-items: center;
12288
- gap: 10px;
12289
- margin-left: 5px;
12290
- } `, "",{"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":""}]);
12291
- // Exports
12292
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
12293
-
12294
-
12295
13347
  /***/ }),
12296
13348
 
12297
13349
  /***/ "./node_modules/css-loader/dist/cjs.js!./style/IconButton.css":
@@ -13148,15 +14200,19 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
13148
14200
  white-space: pre !important;
13149
14201
  }
13150
14202
 
13151
- .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 {
13152
14209
  /*
13153
14210
  Remove the default Jupyter ending margin
13154
14211
  so that the rendered code is flush with the bottom
13155
14212
  of the CodeMessagePart
13156
14213
  */
13157
14214
  margin-bottom: 0px;
13158
- }
13159
- `, "",{"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":""}]);
13160
14216
  // Exports
13161
14217
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
13162
14218
 
@@ -13821,472 +14877,63 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
13821
14877
  color: var(--green-900) !important;
13822
14878
  }
13823
14879
 
13824
- .button-green:hover {
13825
- background-color: var(--green-500);
13826
- }
13827
-
13828
- .button-red {
13829
- background-color: var(--red-400);
13830
- color: var(--red-900) !important;
13831
- }
13832
-
13833
- .button-red:hover {
13834
- background-color: var(--red-500);
13835
- }
13836
-
13837
- .button-gray {
13838
- background-color: var(--jp-layout-color2);
13839
- color: var(--jp-content-font-color1) !important;
13840
- }
13841
-
13842
- .button-gray:hover {
13843
- background-color: var(--jp-layout-color3);
13844
- }
13845
-
13846
- .button-purple {
13847
- background-color: var(--purple-300);
13848
- color: var(--purple-700) !important;
13849
- }
13850
-
13851
- .button-purple:hover {
13852
- background-color: var(--purple-400);
13853
- }
13854
-
13855
- .button-width-block {
13856
- width: 100%;
13857
- }
13858
-
13859
- .button-width-fit-contents {
13860
- width: fit-content;
13861
- }
13862
-
13863
- .button-small {
13864
- height: 20px;
13865
- font-size: 12px;
13866
- padding: 2px 5px;
13867
- }
13868
- `, "",{"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":""}]);
13869
- // Exports
13870
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
13871
-
13872
-
13873
- /***/ }),
13874
-
13875
- /***/ "./node_modules/css-loader/dist/runtime/api.js":
13876
- /*!*****************************************************!*\
13877
- !*** ./node_modules/css-loader/dist/runtime/api.js ***!
13878
- \*****************************************************/
13879
- /***/ ((module) => {
13880
-
13881
-
13882
-
13883
- /*
13884
- MIT License http://www.opensource.org/licenses/mit-license.php
13885
- Author Tobias Koppers @sokra
13886
- */
13887
- module.exports = function (cssWithMappingToString) {
13888
- var list = [];
13889
-
13890
- // return the list of modules as css string
13891
- list.toString = function toString() {
13892
- return this.map(function (item) {
13893
- var content = "";
13894
- var needLayer = typeof item[5] !== "undefined";
13895
- if (item[4]) {
13896
- content += "@supports (".concat(item[4], ") {");
13897
- }
13898
- if (item[2]) {
13899
- content += "@media ".concat(item[2], " {");
13900
- }
13901
- if (needLayer) {
13902
- content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {");
13903
- }
13904
- content += cssWithMappingToString(item);
13905
- if (needLayer) {
13906
- content += "}";
13907
- }
13908
- if (item[2]) {
13909
- content += "}";
13910
- }
13911
- if (item[4]) {
13912
- content += "}";
13913
- }
13914
- return content;
13915
- }).join("");
13916
- };
13917
-
13918
- // import a list of modules into the list
13919
- list.i = function i(modules, media, dedupe, supports, layer) {
13920
- if (typeof modules === "string") {
13921
- modules = [[null, modules, undefined]];
13922
- }
13923
- var alreadyImportedModules = {};
13924
- if (dedupe) {
13925
- for (var k = 0; k < this.length; k++) {
13926
- var id = this[k][0];
13927
- if (id != null) {
13928
- alreadyImportedModules[id] = true;
13929
- }
13930
- }
13931
- }
13932
- for (var _k = 0; _k < modules.length; _k++) {
13933
- var item = [].concat(modules[_k]);
13934
- if (dedupe && alreadyImportedModules[item[0]]) {
13935
- continue;
13936
- }
13937
- if (typeof layer !== "undefined") {
13938
- if (typeof item[5] === "undefined") {
13939
- item[5] = layer;
13940
- } else {
13941
- item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}");
13942
- item[5] = layer;
13943
- }
13944
- }
13945
- if (media) {
13946
- if (!item[2]) {
13947
- item[2] = media;
13948
- } else {
13949
- item[1] = "@media ".concat(item[2], " {").concat(item[1], "}");
13950
- item[2] = media;
13951
- }
13952
- }
13953
- if (supports) {
13954
- if (!item[4]) {
13955
- item[4] = "".concat(supports);
13956
- } else {
13957
- item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}");
13958
- item[4] = supports;
13959
- }
13960
- }
13961
- list.push(item);
13962
- }
13963
- };
13964
- return list;
13965
- };
13966
-
13967
- /***/ }),
13968
-
13969
- /***/ "./node_modules/css-loader/dist/runtime/sourceMaps.js":
13970
- /*!************************************************************!*\
13971
- !*** ./node_modules/css-loader/dist/runtime/sourceMaps.js ***!
13972
- \************************************************************/
13973
- /***/ ((module) => {
13974
-
13975
-
13976
-
13977
- module.exports = function (item) {
13978
- var content = item[1];
13979
- var cssMapping = item[3];
13980
- if (!cssMapping) {
13981
- return content;
13982
- }
13983
- if (typeof btoa === "function") {
13984
- var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));
13985
- var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64);
13986
- var sourceMapping = "/*# ".concat(data, " */");
13987
- return [content].concat([sourceMapping]).join("\n");
13988
- }
13989
- return [content].join("\n");
13990
- };
13991
-
13992
- /***/ }),
13993
-
13994
- /***/ "./node_modules/react-dom/client.js":
13995
- /*!******************************************!*\
13996
- !*** ./node_modules/react-dom/client.js ***!
13997
- \******************************************/
13998
- /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
13999
-
14000
-
14001
-
14002
- var m = __webpack_require__(/*! react-dom */ "webpack/sharing/consume/default/react-dom");
14003
- if (false) {} else {
14004
- var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
14005
- exports.createRoot = function(c, o) {
14006
- i.usingClientEntryPoint = true;
14007
- try {
14008
- return m.createRoot(c, o);
14009
- } finally {
14010
- i.usingClientEntryPoint = false;
14011
- }
14012
- };
14013
- exports.hydrateRoot = function(c, h, o) {
14014
- i.usingClientEntryPoint = true;
14015
- try {
14016
- return m.hydrateRoot(c, h, o);
14017
- } finally {
14018
- i.usingClientEntryPoint = false;
14019
- }
14020
- };
14021
- }
14022
-
14023
-
14024
- /***/ }),
14025
-
14026
- /***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js":
14027
- /*!****************************************************************************!*\
14028
- !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***!
14029
- \****************************************************************************/
14030
- /***/ ((module) => {
14031
-
14032
-
14033
-
14034
- var stylesInDOM = [];
14035
- function getIndexByIdentifier(identifier) {
14036
- var result = -1;
14037
- for (var i = 0; i < stylesInDOM.length; i++) {
14038
- if (stylesInDOM[i].identifier === identifier) {
14039
- result = i;
14040
- break;
14041
- }
14042
- }
14043
- return result;
14044
- }
14045
- function modulesToDom(list, options) {
14046
- var idCountMap = {};
14047
- var identifiers = [];
14048
- for (var i = 0; i < list.length; i++) {
14049
- var item = list[i];
14050
- var id = options.base ? item[0] + options.base : item[0];
14051
- var count = idCountMap[id] || 0;
14052
- var identifier = "".concat(id, " ").concat(count);
14053
- idCountMap[id] = count + 1;
14054
- var indexByIdentifier = getIndexByIdentifier(identifier);
14055
- var obj = {
14056
- css: item[1],
14057
- media: item[2],
14058
- sourceMap: item[3],
14059
- supports: item[4],
14060
- layer: item[5]
14061
- };
14062
- if (indexByIdentifier !== -1) {
14063
- stylesInDOM[indexByIdentifier].references++;
14064
- stylesInDOM[indexByIdentifier].updater(obj);
14065
- } else {
14066
- var updater = addElementStyle(obj, options);
14067
- options.byIndex = i;
14068
- stylesInDOM.splice(i, 0, {
14069
- identifier: identifier,
14070
- updater: updater,
14071
- references: 1
14072
- });
14073
- }
14074
- identifiers.push(identifier);
14075
- }
14076
- return identifiers;
14077
- }
14078
- function addElementStyle(obj, options) {
14079
- var api = options.domAPI(options);
14080
- api.update(obj);
14081
- var updater = function updater(newObj) {
14082
- if (newObj) {
14083
- if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {
14084
- return;
14085
- }
14086
- api.update(obj = newObj);
14087
- } else {
14088
- api.remove();
14089
- }
14090
- };
14091
- return updater;
14092
- }
14093
- module.exports = function (list, options) {
14094
- options = options || {};
14095
- list = list || [];
14096
- var lastIdentifiers = modulesToDom(list, options);
14097
- return function update(newList) {
14098
- newList = newList || [];
14099
- for (var i = 0; i < lastIdentifiers.length; i++) {
14100
- var identifier = lastIdentifiers[i];
14101
- var index = getIndexByIdentifier(identifier);
14102
- stylesInDOM[index].references--;
14103
- }
14104
- var newLastIdentifiers = modulesToDom(newList, options);
14105
- for (var _i = 0; _i < lastIdentifiers.length; _i++) {
14106
- var _identifier = lastIdentifiers[_i];
14107
- var _index = getIndexByIdentifier(_identifier);
14108
- if (stylesInDOM[_index].references === 0) {
14109
- stylesInDOM[_index].updater();
14110
- stylesInDOM.splice(_index, 1);
14111
- }
14112
- }
14113
- lastIdentifiers = newLastIdentifiers;
14114
- };
14115
- };
14116
-
14117
- /***/ }),
14118
-
14119
- /***/ "./node_modules/style-loader/dist/runtime/insertBySelector.js":
14120
- /*!********************************************************************!*\
14121
- !*** ./node_modules/style-loader/dist/runtime/insertBySelector.js ***!
14122
- \********************************************************************/
14123
- /***/ ((module) => {
14124
-
14125
-
14126
-
14127
- var memo = {};
14128
-
14129
- /* istanbul ignore next */
14130
- function getTarget(target) {
14131
- if (typeof memo[target] === "undefined") {
14132
- var styleTarget = document.querySelector(target);
14133
-
14134
- // Special case to return head of iframe instead of iframe itself
14135
- if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {
14136
- try {
14137
- // This will throw an exception if access to iframe is blocked
14138
- // due to cross-origin restrictions
14139
- styleTarget = styleTarget.contentDocument.head;
14140
- } catch (e) {
14141
- // istanbul ignore next
14142
- styleTarget = null;
14143
- }
14144
- }
14145
- memo[target] = styleTarget;
14146
- }
14147
- return memo[target];
14148
- }
14149
-
14150
- /* istanbul ignore next */
14151
- function insertBySelector(insert, style) {
14152
- var target = getTarget(insert);
14153
- if (!target) {
14154
- throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");
14155
- }
14156
- target.appendChild(style);
14157
- }
14158
- module.exports = insertBySelector;
14159
-
14160
- /***/ }),
14161
-
14162
- /***/ "./node_modules/style-loader/dist/runtime/insertStyleElement.js":
14163
- /*!**********************************************************************!*\
14164
- !*** ./node_modules/style-loader/dist/runtime/insertStyleElement.js ***!
14165
- \**********************************************************************/
14166
- /***/ ((module) => {
14167
-
14168
-
14169
-
14170
- /* istanbul ignore next */
14171
- function insertStyleElement(options) {
14172
- var element = document.createElement("style");
14173
- options.setAttributes(element, options.attributes);
14174
- options.insert(element, options.options);
14175
- return element;
14176
- }
14177
- module.exports = insertStyleElement;
14178
-
14179
- /***/ }),
14180
-
14181
- /***/ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js":
14182
- /*!**********************************************************************************!*\
14183
- !*** ./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js ***!
14184
- \**********************************************************************************/
14185
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
14186
-
14187
-
14188
-
14189
- /* istanbul ignore next */
14190
- function setAttributesWithoutAttributes(styleElement) {
14191
- var nonce = true ? __webpack_require__.nc : 0;
14192
- if (nonce) {
14193
- styleElement.setAttribute("nonce", nonce);
14194
- }
14195
- }
14196
- module.exports = setAttributesWithoutAttributes;
14197
-
14198
- /***/ }),
14199
-
14200
- /***/ "./node_modules/style-loader/dist/runtime/styleDomAPI.js":
14201
- /*!***************************************************************!*\
14202
- !*** ./node_modules/style-loader/dist/runtime/styleDomAPI.js ***!
14203
- \***************************************************************/
14204
- /***/ ((module) => {
14880
+ .button-green:hover {
14881
+ background-color: var(--green-500);
14882
+ }
14205
14883
 
14884
+ .button-red {
14885
+ background-color: var(--red-400);
14886
+ color: var(--red-900) !important;
14887
+ }
14206
14888
 
14889
+ .button-red:hover {
14890
+ background-color: var(--red-500);
14891
+ }
14207
14892
 
14208
- /* istanbul ignore next */
14209
- function apply(styleElement, options, obj) {
14210
- var css = "";
14211
- if (obj.supports) {
14212
- css += "@supports (".concat(obj.supports, ") {");
14213
- }
14214
- if (obj.media) {
14215
- css += "@media ".concat(obj.media, " {");
14216
- }
14217
- var needLayer = typeof obj.layer !== "undefined";
14218
- if (needLayer) {
14219
- css += "@layer".concat(obj.layer.length > 0 ? " ".concat(obj.layer) : "", " {");
14220
- }
14221
- css += obj.css;
14222
- if (needLayer) {
14223
- css += "}";
14224
- }
14225
- if (obj.media) {
14226
- css += "}";
14227
- }
14228
- if (obj.supports) {
14229
- css += "}";
14230
- }
14231
- var sourceMap = obj.sourceMap;
14232
- if (sourceMap && typeof btoa !== "undefined") {
14233
- css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */");
14234
- }
14893
+ .button-gray {
14894
+ background-color: var(--jp-layout-color2);
14895
+ color: var(--jp-content-font-color1) !important;
14896
+ }
14235
14897
 
14236
- // For old IE
14237
- /* istanbul ignore if */
14238
- options.styleTagTransform(css, styleElement, options.options);
14898
+ .button-gray:hover {
14899
+ background-color: var(--jp-layout-color3);
14239
14900
  }
14240
- function removeStyleElement(styleElement) {
14241
- // istanbul ignore if
14242
- if (styleElement.parentNode === null) {
14243
- return false;
14244
- }
14245
- styleElement.parentNode.removeChild(styleElement);
14901
+
14902
+ .button-purple {
14903
+ background-color: var(--purple-300);
14904
+ color: var(--purple-700) !important;
14246
14905
  }
14247
14906
 
14248
- /* istanbul ignore next */
14249
- function domAPI(options) {
14250
- if (typeof document === "undefined") {
14251
- return {
14252
- update: function update() {},
14253
- remove: function remove() {}
14254
- };
14255
- }
14256
- var styleElement = options.insertStyleElement(options);
14257
- return {
14258
- update: function update(obj) {
14259
- apply(styleElement, options, obj);
14260
- },
14261
- remove: function remove() {
14262
- removeStyleElement(styleElement);
14263
- }
14264
- };
14907
+ .button-purple:hover {
14908
+ background-color: var(--purple-400);
14265
14909
  }
14266
- module.exports = domAPI;
14267
14910
 
14268
- /***/ }),
14911
+ .button-dark-purple {
14912
+ background-color: var(--purple-500);
14913
+ color: var(--white) !important;
14914
+ }
14269
14915
 
14270
- /***/ "./node_modules/style-loader/dist/runtime/styleTagTransform.js":
14271
- /*!*********************************************************************!*\
14272
- !*** ./node_modules/style-loader/dist/runtime/styleTagTransform.js ***!
14273
- \*********************************************************************/
14274
- /***/ ((module) => {
14916
+ .button-dark-purple:hover {
14917
+ background-color: var(--purple-600);
14918
+ }
14275
14919
 
14920
+ .button-width-block {
14921
+ width: 100%;
14922
+ }
14276
14923
 
14924
+ .button-width-fit-contents {
14925
+ width: fit-content;
14926
+ }
14277
14927
 
14278
- /* istanbul ignore next */
14279
- function styleTagTransform(css, styleElement) {
14280
- if (styleElement.styleSheet) {
14281
- styleElement.styleSheet.cssText = css;
14282
- } else {
14283
- while (styleElement.firstChild) {
14284
- styleElement.removeChild(styleElement.firstChild);
14285
- }
14286
- styleElement.appendChild(document.createTextNode(css));
14287
- }
14928
+ .button-small {
14929
+ height: 20px;
14930
+ font-size: 12px;
14931
+ padding: 2px 5px;
14288
14932
  }
14289
- 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
+
14290
14937
 
14291
14938
  /***/ }),
14292
14939
 
@@ -14402,6 +15049,114 @@ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js
14402
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);
14403
15050
 
14404
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
+
14405
15160
  /***/ }),
14406
15161
 
14407
15162
  /***/ "./style/AssumptionTool.css":
@@ -14456,6 +15211,60 @@ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js
14456
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);
14457
15212
 
14458
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
+
14459
15268
  /***/ }),
14460
15269
 
14461
15270
  /***/ "./style/CTACarousel.css":
@@ -15104,60 +15913,6 @@ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js
15104
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);
15105
15914
 
15106
15915
 
15107
- /***/ }),
15108
-
15109
- /***/ "./style/GetCellOutputToolUI.css":
15110
- /*!***************************************!*\
15111
- !*** ./style/GetCellOutputToolUI.css ***!
15112
- \***************************************/
15113
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
15114
-
15115
- __webpack_require__.r(__webpack_exports__);
15116
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
15117
- /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
15118
- /* harmony export */ });
15119
- /* 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");
15120
- /* 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__);
15121
- /* 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");
15122
- /* 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__);
15123
- /* 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");
15124
- /* 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__);
15125
- /* 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");
15126
- /* 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__);
15127
- /* 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");
15128
- /* 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__);
15129
- /* 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");
15130
- /* 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__);
15131
- /* 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");
15132
-
15133
-
15134
-
15135
-
15136
-
15137
-
15138
-
15139
-
15140
-
15141
-
15142
-
15143
- var options = {};
15144
-
15145
- options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
15146
- options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
15147
-
15148
- options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
15149
-
15150
- options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
15151
- options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
15152
-
15153
- 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);
15154
-
15155
-
15156
-
15157
-
15158
- /* 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);
15159
-
15160
-
15161
15916
  /***/ }),
15162
15917
 
15163
15918
  /***/ "./style/IconButton.css":
@@ -15917,4 +16672,4 @@ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js
15917
16672
  /***/ })
15918
16673
 
15919
16674
  }]);
15920
- //# sourceMappingURL=lib_index_js.55d9f8ca386d87856d2d.js.map
16675
+ //# sourceMappingURL=lib_index_js.01a962c68c8fae380f30.js.map