mito-ai 0.1.45__py3-none-any.whl → 0.1.46__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mito_ai/__init__.py +10 -1
- mito_ai/_version.py +1 -1
- mito_ai/anthropic_client.py +90 -5
- mito_ai/chat_history/handlers.py +63 -0
- mito_ai/chat_history/urls.py +32 -0
- mito_ai/completions/handlers.py +18 -20
- mito_ai/constants.py +3 -0
- mito_ai/streamlit_conversion/agent_utils.py +148 -30
- mito_ai/streamlit_conversion/prompts/prompt_constants.py +147 -24
- mito_ai/streamlit_conversion/prompts/streamlit_app_creation_prompt.py +2 -1
- mito_ai/streamlit_conversion/prompts/streamlit_error_correction_prompt.py +2 -2
- mito_ai/streamlit_conversion/prompts/streamlit_finish_todo_prompt.py +4 -3
- mito_ai/streamlit_conversion/prompts/update_existing_app_prompt.py +50 -0
- mito_ai/streamlit_conversion/streamlit_agent_handler.py +101 -107
- mito_ai/streamlit_conversion/streamlit_system_prompt.py +1 -0
- mito_ai/streamlit_conversion/streamlit_utils.py +13 -10
- mito_ai/streamlit_conversion/validate_streamlit_app.py +77 -82
- mito_ai/streamlit_preview/handlers.py +3 -4
- mito_ai/streamlit_preview/utils.py +11 -7
- mito_ai/tests/chat_history/test_chat_history.py +211 -0
- mito_ai/tests/message_history/test_message_history_utils.py +43 -19
- mito_ai/tests/providers/test_anthropic_client.py +178 -6
- mito_ai/tests/streamlit_conversion/test_apply_patch_to_text.py +368 -0
- mito_ai/tests/streamlit_conversion/test_fix_diff_headers.py +533 -0
- mito_ai/tests/streamlit_conversion/test_streamlit_agent_handler.py +71 -74
- mito_ai/tests/streamlit_conversion/test_streamlit_utils.py +16 -16
- mito_ai/tests/streamlit_conversion/test_validate_streamlit_app.py +17 -14
- mito_ai/tests/streamlit_preview/test_streamlit_preview_handler.py +2 -2
- mito_ai/tests/user/__init__.py +2 -0
- mito_ai/tests/user/test_user.py +120 -0
- mito_ai/user/handlers.py +33 -0
- mito_ai/user/urls.py +21 -0
- mito_ai/utils/anthropic_utils.py +8 -6
- mito_ai/utils/message_history_utils.py +4 -3
- mito_ai/utils/telemetry_utils.py +7 -4
- {mito_ai-0.1.45.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/build_log.json +1 -1
- {mito_ai-0.1.45.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/package.json +2 -2
- {mito_ai-0.1.45.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/schemas/mito_ai/package.json.orig +1 -1
- mito_ai-0.1.45.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.0c3368195d954d2ed033.js → mito_ai-0.1.46.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.20f12766ecd3d430568e.js +955 -173
- mito_ai-0.1.46.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.20f12766ecd3d430568e.js.map +1 -0
- mito_ai-0.1.45.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.684f82575fcc2e3b350c.js → mito_ai-0.1.46.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.54126ab6511271265443.js +5 -5
- mito_ai-0.1.45.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.684f82575fcc2e3b350c.js.map → mito_ai-0.1.46.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.54126ab6511271265443.js.map +1 -1
- {mito_ai-0.1.45.dist-info → mito_ai-0.1.46.dist-info}/METADATA +1 -1
- {mito_ai-0.1.45.dist-info → mito_ai-0.1.46.dist-info}/RECORD +68 -58
- mito_ai-0.1.45.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.0c3368195d954d2ed033.js.map +0 -1
- {mito_ai-0.1.45.data → mito_ai-0.1.46.data}/data/etc/jupyter/jupyter_server_config.d/mito_ai.json +0 -0
- {mito_ai-0.1.45.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/schemas/mito_ai/toolbar-buttons.json +0 -0
- {mito_ai-0.1.45.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/node_modules_process_browser_js.4b128e94d31a81ebd209.js +0 -0
- {mito_ai-0.1.45.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/node_modules_process_browser_js.4b128e94d31a81ebd209.js.map +0 -0
- {mito_ai-0.1.45.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/style.js +0 -0
- {mito_ai-0.1.45.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/style_index_js.5876024bb17dbd6a3ee6.js +0 -0
- {mito_ai-0.1.45.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/style_index_js.5876024bb17dbd6a3ee6.js.map +0 -0
- {mito_ai-0.1.45.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_auth_dist_esm_providers_cognito_apis_signOut_mjs-node_module-75790d.688c25857e7b81b1740f.js +0 -0
- {mito_ai-0.1.45.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_auth_dist_esm_providers_cognito_apis_signOut_mjs-node_module-75790d.688c25857e7b81b1740f.js.map +0 -0
- {mito_ai-0.1.45.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_auth_dist_esm_providers_cognito_tokenProvider_tokenProvider_-72f1c8.a917210f057fcfe224ad.js +0 -0
- {mito_ai-0.1.45.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_auth_dist_esm_providers_cognito_tokenProvider_tokenProvider_-72f1c8.a917210f057fcfe224ad.js.map +0 -0
- {mito_ai-0.1.45.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_dist_esm_index_mjs.6bac1a8c4cc93f15f6b7.js +0 -0
- {mito_ai-0.1.45.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_dist_esm_index_mjs.6bac1a8c4cc93f15f6b7.js.map +0 -0
- {mito_ai-0.1.45.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_ui-react_dist_esm_index_mjs.4fcecd65bef9e9847609.js +0 -0
- {mito_ai-0.1.45.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_ui-react_dist_esm_index_mjs.4fcecd65bef9e9847609.js.map +0 -0
- {mito_ai-0.1.45.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_react-dom_client_js-node_modules_aws-amplify_ui-react_dist_styles_css.b43d4249e4d3dac9ad7b.js +0 -0
- {mito_ai-0.1.45.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_react-dom_client_js-node_modules_aws-amplify_ui-react_dist_styles_css.b43d4249e4d3dac9ad7b.js.map +0 -0
- {mito_ai-0.1.45.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_semver_index_js.3f6754ac5116d47de76b.js +0 -0
- {mito_ai-0.1.45.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_semver_index_js.3f6754ac5116d47de76b.js.map +0 -0
- {mito_ai-0.1.45.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_vscode-diff_dist_index_js.ea55f1f9346638aafbcf.js +0 -0
- {mito_ai-0.1.45.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_vscode-diff_dist_index_js.ea55f1f9346638aafbcf.js.map +0 -0
- {mito_ai-0.1.45.dist-info → mito_ai-0.1.46.dist-info}/WHEEL +0 -0
- {mito_ai-0.1.45.dist-info → mito_ai-0.1.46.dist-info}/entry_points.txt +0 -0
- {mito_ai-0.1.45.dist-info → mito_ai-0.1.46.dist-info}/licenses/LICENSE +0 -0
|
@@ -166,6 +166,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
166
166
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
167
167
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
168
168
|
/* harmony import */ var _SettingsManager_SettingsManagerPlugin__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../SettingsManager/SettingsManagerPlugin */ "./lib/Extensions/SettingsManager/SettingsManagerPlugin.js");
|
|
169
|
+
/* harmony import */ var _icons_MitoLogo__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../icons/MitoLogo */ "./lib/icons/MitoLogo.js");
|
|
169
170
|
/* harmony import */ var _style_CTACarousel_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../style/CTACarousel.css */ "./style/CTACarousel.css");
|
|
170
171
|
/*
|
|
171
172
|
* Copyright (c) Saga Inc.
|
|
@@ -174,6 +175,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
174
175
|
|
|
175
176
|
|
|
176
177
|
|
|
178
|
+
|
|
177
179
|
const CTACarousel = ({ app }) => {
|
|
178
180
|
const [currentIndex, setCurrentIndex] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0);
|
|
179
181
|
// Define messages inside component to access app prop
|
|
@@ -194,6 +196,9 @@ const CTACarousel = ({ app }) => {
|
|
|
194
196
|
];
|
|
195
197
|
const currentMessage = CTACAROUSEL_MESSAGES[Math.min(currentIndex, CTACAROUSEL_MESSAGES.length - 1)].content;
|
|
196
198
|
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "cta-carousel" },
|
|
199
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "cta-logo-container" },
|
|
200
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_MitoLogo__WEBPACK_IMPORTED_MODULE_3__["default"], { width: "60", height: "30" })),
|
|
201
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "cta-title" }, "Data Copilot"),
|
|
197
202
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "cta-carousel-container" },
|
|
198
203
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "cta-message", "data-testid": "cta-message" }, currentMessage)),
|
|
199
204
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "cta-carousel-dots" }, CTACAROUSEL_MESSAGES.map((_, index) => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { key: index, className: `cta-carousel-dot ${index === currentIndex ? 'active' : ''}`, onClick: () => setCurrentIndex(index), "data-testid": "cta-carousel-dot", role: "button" }))))));
|
|
@@ -1027,7 +1032,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
1027
1032
|
|
|
1028
1033
|
|
|
1029
1034
|
|
|
1030
|
-
const ChatInput = ({ app, initialContent,
|
|
1035
|
+
const ChatInput = ({ app, initialContent, onSave, onCancel, isEditing, contextManager, notebookTracker, agentModeEnabled = false, agentExecutionStatus = 'idle', operatingSystem = 'mac', displayOptimizedChatHistoryLength = 0, agentTargetNotebookPanelRef, isSignedUp = true, }) => {
|
|
1031
1036
|
var _a;
|
|
1032
1037
|
const [input, setInput] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(initialContent);
|
|
1033
1038
|
const textAreaRef = react__WEBPACK_IMPORTED_MODULE_0___default().useRef(null);
|
|
@@ -1242,6 +1247,30 @@ const ChatInput = ({ app, initialContent, placeholder, onSave, onCancel, isEditi
|
|
|
1242
1247
|
];
|
|
1243
1248
|
return expandedVariables;
|
|
1244
1249
|
};
|
|
1250
|
+
const getPlaceholderText = () => {
|
|
1251
|
+
var _a;
|
|
1252
|
+
if (!isSignedUp && displayOptimizedChatHistoryLength === 0) {
|
|
1253
|
+
return 'Sign up above to use Mito AI';
|
|
1254
|
+
}
|
|
1255
|
+
else if (agentExecutionStatus === 'working') {
|
|
1256
|
+
return `Agent is editing ${(_a = agentTargetNotebookPanelRef === null || agentTargetNotebookPanelRef === void 0 ? void 0 : agentTargetNotebookPanelRef.current) === null || _a === void 0 ? void 0 : _a.context.path.split('/').pop()}`;
|
|
1257
|
+
}
|
|
1258
|
+
else if (agentExecutionStatus === 'stopping') {
|
|
1259
|
+
return 'Agent is stopping...';
|
|
1260
|
+
}
|
|
1261
|
+
else if (agentModeEnabled) {
|
|
1262
|
+
return 'Ask agent to do anything';
|
|
1263
|
+
}
|
|
1264
|
+
else if (isEditing) {
|
|
1265
|
+
return 'Edit your message';
|
|
1266
|
+
}
|
|
1267
|
+
else if (displayOptimizedChatHistoryLength < 2) {
|
|
1268
|
+
return `Ask question (${operatingSystem === 'mac' ? '⌘' : 'Ctrl'}E), @ to mention`;
|
|
1269
|
+
}
|
|
1270
|
+
else {
|
|
1271
|
+
return `Ask followup (${operatingSystem === 'mac' ? '⌘' : 'Ctrl'}E), @ to mention`;
|
|
1272
|
+
}
|
|
1273
|
+
};
|
|
1245
1274
|
// Automatically add active cell context when in Chat mode and there's active cell code
|
|
1246
1275
|
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
|
|
1247
1276
|
if (!agentModeEnabled) {
|
|
@@ -1276,7 +1305,7 @@ const ChatInput = ({ app, initialContent, placeholder, onSave, onCancel, isEditi
|
|
|
1276
1305
|
} }, "\uFF20 Add Context"),
|
|
1277
1306
|
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 })))),
|
|
1278
1307
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: 'chat-input-text-area-container' },
|
|
1279
|
-
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:
|
|
1308
|
+
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: getPlaceholderText(), value: input, disabled: agentExecutionStatus === 'working' || agentExecutionStatus === 'stopping', onChange: handleInputChange, onKeyDown: (e) => {
|
|
1280
1309
|
// If dropdown is visible, only handle escape to close it
|
|
1281
1310
|
if (isDropdownVisible) {
|
|
1282
1311
|
if (e.key === 'Escape') {
|
|
@@ -1399,7 +1428,7 @@ const ChatMessage = ({ app, message, promptType, agentResponse, messageIndex, mi
|
|
|
1399
1428
|
setNextSteps(agentResponse.next_steps);
|
|
1400
1429
|
}
|
|
1401
1430
|
if (isEditing) {
|
|
1402
|
-
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_ChatInput__WEBPACK_IMPORTED_MODULE_4__["default"], { app: app, initialContent: message.content.replace(/```[\s\S]*?```/g, '').trim(),
|
|
1431
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_ChatInput__WEBPACK_IMPORTED_MODULE_4__["default"], { app: app, initialContent: message.content.replace(/```[\s\S]*?```/g, '').trim(), onSave: handleSave, onCancel: handleCancel, isEditing: isEditing, contextManager: contextManager, notebookTracker: notebookTracker, agentModeEnabled: false }));
|
|
1403
1432
|
}
|
|
1404
1433
|
if (mitoAIConnectionError) {
|
|
1405
1434
|
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: (0,_utils_classNames__WEBPACK_IMPORTED_MODULE_5__.classNames)("message") },
|
|
@@ -1897,7 +1926,7 @@ const DEFAULT_SUGGESTION_OPTIONS = [
|
|
|
1897
1926
|
prompt: "Graph the countries that have the highest trade surplus with America. Use the data from https://raw.githubusercontent.com/mito-ds/mito/refs/heads/dev/jupyterhub/us_tarrifs.csv"
|
|
1898
1927
|
}
|
|
1899
1928
|
];
|
|
1900
|
-
const ScrollableSuggestions = ({ onSelectSuggestion }) => {
|
|
1929
|
+
const ScrollableSuggestions = ({ onSelectSuggestion, }) => {
|
|
1901
1930
|
const suggestionsRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
|
|
1902
1931
|
// Apply the scroll mask to the suggestions container when it mounts, updates, or is scrolled
|
|
1903
1932
|
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
|
|
@@ -1998,43 +2027,46 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
1998
2027
|
/* harmony import */ var _jupyterlab_ui_components__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_jupyterlab_ui_components__WEBPACK_IMPORTED_MODULE_2__);
|
|
1999
2028
|
/* harmony import */ var _lumino_coreutils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @lumino/coreutils */ "webpack/sharing/consume/default/@lumino/coreutils");
|
|
2000
2029
|
/* harmony import */ var _lumino_coreutils__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_lumino_coreutils__WEBPACK_IMPORTED_MODULE_3__);
|
|
2001
|
-
/* harmony import */ var
|
|
2002
|
-
/* harmony import */ var
|
|
2003
|
-
/* harmony import */ var
|
|
2004
|
-
/* harmony import */ var
|
|
2005
|
-
/* harmony import */ var
|
|
2030
|
+
/* harmony import */ var _commands__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../../commands */ "./lib/commands.js");
|
|
2031
|
+
/* harmony import */ var _components_AgentComponents_ErrorFixupToolUI__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ../../components/AgentComponents/ErrorFixupToolUI */ "./lib/components/AgentComponents/ErrorFixupToolUI.js");
|
|
2032
|
+
/* harmony import */ var _components_DropdownMenu__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ../../components/DropdownMenu */ "./lib/components/DropdownMenu.js");
|
|
2033
|
+
/* harmony import */ var _components_IconButton__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../../components/IconButton */ "./lib/components/IconButton.js");
|
|
2034
|
+
/* harmony import */ var _components_LoadingCircle__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ../../components/LoadingCircle */ "./lib/components/LoadingCircle.js");
|
|
2006
2035
|
/* harmony import */ var _components_ModelSelector__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../components/ModelSelector */ "./lib/components/ModelSelector.js");
|
|
2007
|
-
/* harmony import */ var
|
|
2008
|
-
/* harmony import */ var
|
|
2009
|
-
/* harmony import */ var
|
|
2010
|
-
/* harmony import */ var
|
|
2011
|
-
/* harmony import */ var
|
|
2012
|
-
/* harmony import */ var
|
|
2013
|
-
/* harmony import */ var
|
|
2014
|
-
/* harmony import */ var
|
|
2015
|
-
/* harmony import */ var
|
|
2016
|
-
/* harmony import */ var
|
|
2017
|
-
/* harmony import */ var
|
|
2018
|
-
/* harmony import */ var
|
|
2019
|
-
/* harmony import */ var
|
|
2020
|
-
/* harmony import */ var
|
|
2021
|
-
/* harmony import */ var
|
|
2036
|
+
/* harmony import */ var _components_NextStepsPills__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ../../components/NextStepsPills */ "./lib/components/NextStepsPills.js");
|
|
2037
|
+
/* harmony import */ var _components_TextAndIconButton__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ../../components/TextAndIconButton */ "./lib/components/TextAndIconButton.js");
|
|
2038
|
+
/* harmony import */ var _components_ToggleButton__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ../../components/ToggleButton */ "./lib/components/ToggleButton.js");
|
|
2039
|
+
/* harmony import */ var _icons__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ../../icons */ "./lib/icons/index.js");
|
|
2040
|
+
/* harmony import */ var _icons_UndoIcon__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ../../icons/UndoIcon */ "./lib/icons/UndoIcon.js");
|
|
2041
|
+
/* harmony import */ var _utils_agentActions__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../utils/agentActions */ "./lib/utils/agentActions.js");
|
|
2042
|
+
/* harmony import */ var _utils_classNames__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../../utils/classNames */ "./lib/utils/classNames.js");
|
|
2043
|
+
/* harmony import */ var _utils_blacklistedWords__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../utils/blacklistedWords */ "./lib/utils/blacklistedWords.js");
|
|
2044
|
+
/* harmony import */ var _utils_checkpoint__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../utils/checkpoint */ "./lib/utils/checkpoint.js");
|
|
2045
|
+
/* harmony import */ var _utils_chatHistory__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../../utils/chatHistory */ "./lib/utils/chatHistory.js");
|
|
2046
|
+
/* harmony import */ var _utils_codeDiff__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../../utils/codeDiff */ "./lib/utils/codeDiff.js");
|
|
2047
|
+
/* harmony import */ var _utils_notebook__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../utils/notebook */ "./lib/utils/notebook.js");
|
|
2048
|
+
/* harmony import */ var _utils_cellOutput__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../utils/cellOutput */ "./lib/utils/cellOutput.js");
|
|
2049
|
+
/* harmony import */ var _utils_scroll__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../utils/scroll */ "./lib/utils/scroll.js");
|
|
2050
|
+
/* harmony import */ var _utils_strings__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../utils/strings */ "./lib/utils/strings.js");
|
|
2022
2051
|
/* harmony import */ var _utils_waitForNotebookReady__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../utils/waitForNotebookReady */ "./lib/utils/waitForNotebookReady.js");
|
|
2023
|
-
/* harmony import */ var
|
|
2024
|
-
/* harmony import */ var
|
|
2025
|
-
/* harmony import */ var
|
|
2026
|
-
/* harmony import */ var
|
|
2027
|
-
/* harmony import */ var
|
|
2052
|
+
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./utils */ "./lib/Extensions/AiChat/utils.js");
|
|
2053
|
+
/* harmony import */ var _restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../restAPI/RestAPI */ "./lib/restAPI/RestAPI.js");
|
|
2054
|
+
/* harmony import */ var _utils_userSignupState__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../utils/userSignupState */ "./lib/utils/userSignupState.js");
|
|
2055
|
+
/* harmony import */ var _SettingsManager_SettingsManagerPlugin__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../SettingsManager/SettingsManagerPlugin */ "./lib/Extensions/SettingsManager/SettingsManagerPlugin.js");
|
|
2056
|
+
/* harmony import */ var _SettingsManager_profiler_ProfilerPage__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../SettingsManager/profiler/ProfilerPage */ "./lib/Extensions/SettingsManager/profiler/ProfilerPage.js");
|
|
2057
|
+
/* harmony import */ var _CTACarousel__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./CTACarousel */ "./lib/Extensions/AiChat/CTACarousel.js");
|
|
2058
|
+
/* harmony import */ var _SignUpForm__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./SignUpForm */ "./lib/Extensions/AiChat/SignUpForm.js");
|
|
2059
|
+
/* harmony import */ var _CodeDiffDisplay__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./CodeDiffDisplay */ "./lib/Extensions/AiChat/CodeDiffDisplay.js");
|
|
2028
2060
|
/* harmony import */ var _FirstMessage__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./FirstMessage */ "./lib/Extensions/AiChat/FirstMessage.js");
|
|
2029
|
-
/* harmony import */ var
|
|
2030
|
-
/* harmony import */ var
|
|
2031
|
-
/* harmony import */ var
|
|
2032
|
-
/* harmony import */ var
|
|
2061
|
+
/* harmony import */ var _ChatMessage_ChatInput__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./ChatMessage/ChatInput */ "./lib/Extensions/AiChat/ChatMessage/ChatInput.js");
|
|
2062
|
+
/* harmony import */ var _ChatMessage_ChatMessage__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./ChatMessage/ChatMessage */ "./lib/Extensions/AiChat/ChatMessage/ChatMessage.js");
|
|
2063
|
+
/* harmony import */ var _ChatMessage_RevertQuestionnaire__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./ChatMessage/RevertQuestionnaire */ "./lib/Extensions/AiChat/ChatMessage/RevertQuestionnaire.js");
|
|
2064
|
+
/* harmony import */ var _ChatMessage_ScrollableSuggestions__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./ChatMessage/ScrollableSuggestions */ "./lib/Extensions/AiChat/ChatMessage/ScrollableSuggestions.js");
|
|
2033
2065
|
/* harmony import */ var _ChatHistoryManager__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ChatHistoryManager */ "./lib/Extensions/AiChat/ChatHistoryManager.js");
|
|
2034
2066
|
/* harmony import */ var _style_button_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../style/button.css */ "./style/button.css");
|
|
2035
2067
|
/* harmony import */ var _style_ChatTaskpane_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../style/ChatTaskpane.css */ "./style/ChatTaskpane.css");
|
|
2036
2068
|
/* harmony import */ var _style_TextButton_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../style/TextButton.css */ "./style/TextButton.css");
|
|
2037
|
-
/* harmony import */ var
|
|
2069
|
+
/* harmony import */ var _components_LoadingDots__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ../../components/LoadingDots */ "./lib/components/LoadingDots.js");
|
|
2038
2070
|
/*
|
|
2039
2071
|
* Copyright (c) Saga Inc.
|
|
2040
2072
|
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
@@ -2059,7 +2091,6 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
2059
2091
|
// Internal imports - Icons
|
|
2060
2092
|
|
|
2061
2093
|
|
|
2062
|
-
|
|
2063
2094
|
// Internal imports - Utils
|
|
2064
2095
|
|
|
2065
2096
|
|
|
@@ -2074,6 +2105,9 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
2074
2105
|
|
|
2075
2106
|
|
|
2076
2107
|
|
|
2108
|
+
|
|
2109
|
+
|
|
2110
|
+
|
|
2077
2111
|
// Internal imports - Chat components
|
|
2078
2112
|
|
|
2079
2113
|
|
|
@@ -2083,6 +2117,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
2083
2117
|
|
|
2084
2118
|
|
|
2085
2119
|
|
|
2120
|
+
|
|
2086
2121
|
// Styles
|
|
2087
2122
|
|
|
2088
2123
|
|
|
@@ -2094,7 +2129,7 @@ const getDefaultChatHistoryManager = (notebookTracker, contextManager) => {
|
|
|
2094
2129
|
return chatHistoryManager;
|
|
2095
2130
|
};
|
|
2096
2131
|
const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app, operatingSystem, websocketClient, }) => {
|
|
2097
|
-
|
|
2132
|
+
const [isSignedUp, setIsSignedUp] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);
|
|
2098
2133
|
const [chatHistoryManager, setChatHistoryManager] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(() => getDefaultChatHistoryManager(notebookTracker, contextManager));
|
|
2099
2134
|
const chatHistoryManagerRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(chatHistoryManager);
|
|
2100
2135
|
const [loadingAIResponse, setLoadingAIResponse] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);
|
|
@@ -2288,6 +2323,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
2288
2323
|
}
|
|
2289
2324
|
return newChatHistoryManager;
|
|
2290
2325
|
};
|
|
2326
|
+
// Main initialization effect - runs once on mount
|
|
2291
2327
|
(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {
|
|
2292
2328
|
const initializeChatHistory = async () => {
|
|
2293
2329
|
try {
|
|
@@ -2335,7 +2371,9 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
2335
2371
|
addAIMessageFromResponseAndUpdateState(error.hint ? error.hint : `${error}`, 'chat', newChatHistoryManager, true);
|
|
2336
2372
|
}
|
|
2337
2373
|
};
|
|
2374
|
+
void (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_11__.logEvent)('opened_ai_chat_taskpane');
|
|
2338
2375
|
void initializeChatHistory();
|
|
2376
|
+
void refreshUserSignupState(); // Get user signup state when the component first mounts
|
|
2339
2377
|
}, [websocketClient]);
|
|
2340
2378
|
(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {
|
|
2341
2379
|
/*
|
|
@@ -2360,10 +2398,15 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
2360
2398
|
*/
|
|
2361
2399
|
chatHistoryManagerRef.current = chatHistoryManager;
|
|
2362
2400
|
}, [chatHistoryManager]);
|
|
2401
|
+
// Function to refresh user signup state using the shared helper
|
|
2402
|
+
const refreshUserSignupState = async () => {
|
|
2403
|
+
const signupState = await (0,_utils_userSignupState__WEBPACK_IMPORTED_MODULE_12__.checkUserSignupState)();
|
|
2404
|
+
setIsSignedUp(signupState.isSignedUp);
|
|
2405
|
+
};
|
|
2363
2406
|
// Scroll to bottom whenever chat history updates, but only if in follow mode
|
|
2364
2407
|
(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {
|
|
2365
2408
|
if (autoScrollFollowMode) {
|
|
2366
|
-
(0,
|
|
2409
|
+
(0,_utils_scroll__WEBPACK_IMPORTED_MODULE_13__.scrollToDiv)(chatMessagesRef);
|
|
2367
2410
|
}
|
|
2368
2411
|
}, [chatHistoryManager.getDisplayOptimizedHistory().length, chatHistoryManager, autoScrollFollowMode]);
|
|
2369
2412
|
// Add scroll event handler to detect manual scrolling
|
|
@@ -2485,7 +2528,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
2485
2528
|
if (messageIndex !== undefined) {
|
|
2486
2529
|
agentExecutionMetadata.index = messageIndex;
|
|
2487
2530
|
}
|
|
2488
|
-
agentExecutionMetadata.base64EncodedActiveCellOutput = await (0,
|
|
2531
|
+
agentExecutionMetadata.base64EncodedActiveCellOutput = await (0,_utils__WEBPACK_IMPORTED_MODULE_14__.getBase64EncodedCellOutputInNotebook)(agentTargetNotebookPanel, sendCellIDOutput);
|
|
2489
2532
|
setChatHistoryManager(newChatHistoryManager);
|
|
2490
2533
|
setLoadingAIResponse(true);
|
|
2491
2534
|
// Step 2: Send the message to the AI
|
|
@@ -2521,7 +2564,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
2521
2564
|
// Add the active cell output to the metadata afterwards setting the chatHistoryManager so that
|
|
2522
2565
|
// we don't have to wait on turning the output into a base64 image before we can add the user's message
|
|
2523
2566
|
// to the chat.
|
|
2524
|
-
const activeCellOutput = await (0,
|
|
2567
|
+
const activeCellOutput = await (0,_utils_cellOutput__WEBPACK_IMPORTED_MODULE_15__.getActiveCellOutput)(notebookTracker);
|
|
2525
2568
|
if (activeCellOutput !== undefined) {
|
|
2526
2569
|
chatMessageMetadata.base64EncodedActiveCellOutput = activeCellOutput;
|
|
2527
2570
|
}
|
|
@@ -2549,7 +2592,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
2549
2592
|
const abortController = new AbortController();
|
|
2550
2593
|
activeRequestControllerRef.current = abortController;
|
|
2551
2594
|
// Capture the completion request for debugging
|
|
2552
|
-
(0,
|
|
2595
|
+
(0,_SettingsManager_profiler_ProfilerPage__WEBPACK_IMPORTED_MODULE_16__.captureCompletionRequest)(completionRequest);
|
|
2553
2596
|
if (completionRequest.stream) {
|
|
2554
2597
|
// Reset the streaming response and set streaming state
|
|
2555
2598
|
streamingContentRef.current = '';
|
|
@@ -2717,7 +2760,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
2717
2760
|
};
|
|
2718
2761
|
const startAgentExecution = async (input, messageIndex, additionalContext) => {
|
|
2719
2762
|
agentTargetNotebookPanelRef.current = notebookTracker.currentWidget;
|
|
2720
|
-
await (0,
|
|
2763
|
+
await (0,_utils_checkpoint__WEBPACK_IMPORTED_MODULE_17__.createCheckpoint)(app, setHasCheckpoint);
|
|
2721
2764
|
setAgentExecutionStatus('working');
|
|
2722
2765
|
// Enable follow mode when user starts agent execution
|
|
2723
2766
|
setAutoScrollFollowMode(true);
|
|
@@ -2749,9 +2792,9 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
2749
2792
|
const aiDisplayOptimizedChatItem = chatHistoryManagerRef.current.getLastAIDisplayOptimizedChatItem();
|
|
2750
2793
|
// # TODO: Make this is a helper function so we can also use it in the auto error fixup!
|
|
2751
2794
|
if (aiDisplayOptimizedChatItem) {
|
|
2752
|
-
const aiGeneratedCode = (0,
|
|
2795
|
+
const aiGeneratedCode = (0,_utils_strings__WEBPACK_IMPORTED_MODULE_18__.getCodeBlockFromMessage)(aiDisplayOptimizedChatItem.message);
|
|
2753
2796
|
if (aiGeneratedCode) {
|
|
2754
|
-
const securityCheck = (0,
|
|
2797
|
+
const securityCheck = (0,_utils_blacklistedWords__WEBPACK_IMPORTED_MODULE_19__.checkForBlacklistedWords)(aiGeneratedCode);
|
|
2755
2798
|
if (!securityCheck.safe) {
|
|
2756
2799
|
console.error('Security Warning:', securityCheck.reason);
|
|
2757
2800
|
addAIMessageFromResponseAndUpdateState(`I cannot execute this code without your approval because this code did not pass my security checks. ${securityCheck.reason}. For your safety, I am stopping execution of this plan.`, 'agent:execution', chatHistoryManager);
|
|
@@ -2787,8 +2830,8 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
2787
2830
|
}
|
|
2788
2831
|
if (agentResponse.type === 'cell_update' && agentResponse.cell_update) {
|
|
2789
2832
|
// Run the code and handle any errors
|
|
2790
|
-
await (0,
|
|
2791
|
-
const status = await (0,
|
|
2833
|
+
await (0,_utils_agentActions__WEBPACK_IMPORTED_MODULE_20__.acceptAndRunCellUpdate)(agentResponse.cell_update, agentTargetNotebookPanelRef.current);
|
|
2834
|
+
const status = await (0,_utils_agentActions__WEBPACK_IMPORTED_MODULE_20__.retryIfExecutionError)(agentTargetNotebookPanelRef.current, app, sendAgentSmartDebugMessage, shouldContinueAgentExecution, markAgentForStopping, chatHistoryManagerRef);
|
|
2792
2835
|
if (status === 'interupted') {
|
|
2793
2836
|
break;
|
|
2794
2837
|
}
|
|
@@ -2808,12 +2851,12 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
2808
2851
|
sendCellIDOutput = agentResponse.get_cell_output_cell_id;
|
|
2809
2852
|
}
|
|
2810
2853
|
if (agentResponse.type === 'run_all_cells') {
|
|
2811
|
-
const result = await (0,
|
|
2854
|
+
const result = await (0,_utils_agentActions__WEBPACK_IMPORTED_MODULE_20__.runAllCells)(app, agentTargetNotebookPanelRef.current);
|
|
2812
2855
|
// If run_all_cells resulted in an error, handle it through the error fixup process
|
|
2813
2856
|
if (!result.success && result.errorMessage && result.errorCellId) {
|
|
2814
2857
|
// Set the error cell as active so the error retry logic can work with it
|
|
2815
|
-
(0,
|
|
2816
|
-
const status = await (0,
|
|
2858
|
+
(0,_utils_notebook__WEBPACK_IMPORTED_MODULE_21__.setActiveCellByIDInNotebookPanel)(agentTargetNotebookPanelRef.current, result.errorCellId);
|
|
2859
|
+
const status = await (0,_utils_agentActions__WEBPACK_IMPORTED_MODULE_20__.retryIfExecutionError)(agentTargetNotebookPanelRef.current, app, sendAgentSmartDebugMessage, shouldContinueAgentExecution, markAgentForStopping, chatHistoryManagerRef);
|
|
2817
2860
|
if (status === 'interupted') {
|
|
2818
2861
|
break;
|
|
2819
2862
|
}
|
|
@@ -2834,33 +2877,33 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
2834
2877
|
if (!aiMessage) {
|
|
2835
2878
|
return;
|
|
2836
2879
|
}
|
|
2837
|
-
const updateCellCode = (0,
|
|
2880
|
+
const updateCellCode = (0,_utils_notebook__WEBPACK_IMPORTED_MODULE_21__.getCellCodeByID)(notebookTracker, updateCellID);
|
|
2838
2881
|
if (updateCellID === undefined || updateCellCode === undefined) {
|
|
2839
2882
|
return;
|
|
2840
2883
|
}
|
|
2841
2884
|
// Extract the code from the AI's message and then calculate the code diffs
|
|
2842
|
-
const aiGeneratedCode = (0,
|
|
2843
|
-
const aiGeneratedCodeCleaned = (0,
|
|
2844
|
-
const { unifiedCodeString, unifiedDiffs } = (0,
|
|
2885
|
+
const aiGeneratedCode = (0,_utils_strings__WEBPACK_IMPORTED_MODULE_18__.getCodeBlockFromMessage)(aiMessage);
|
|
2886
|
+
const aiGeneratedCodeCleaned = (0,_utils_strings__WEBPACK_IMPORTED_MODULE_18__.removeMarkdownCodeFormatting)(aiGeneratedCode || '');
|
|
2887
|
+
const { unifiedCodeString, unifiedDiffs } = (0,_utils_codeDiff__WEBPACK_IMPORTED_MODULE_22__.getCodeDiffsAndUnifiedCodeString)(updateCellCode, aiGeneratedCodeCleaned);
|
|
2845
2888
|
// Store the code cell ID where we write the code diffs so that we can
|
|
2846
2889
|
// accept or reject the code diffs to the correct cell
|
|
2847
2890
|
cellStateBeforeDiff.current = { codeCellID: updateCellID, code: updateCellCode };
|
|
2848
2891
|
// Temporarily write the unified code string to the active cell so we can display
|
|
2849
2892
|
// the code diffs to the user
|
|
2850
|
-
(0,
|
|
2893
|
+
(0,_utils_notebook__WEBPACK_IMPORTED_MODULE_21__.writeCodeToCellByID)(notebookTracker, unifiedCodeString, updateCellID);
|
|
2851
2894
|
updateCodeCellsExtensions(unifiedDiffs);
|
|
2852
2895
|
// Briefly highlight the code cell to draw the user's attention to it
|
|
2853
|
-
(0,
|
|
2896
|
+
(0,_utils_notebook__WEBPACK_IMPORTED_MODULE_21__.highlightCodeCell)(notebookTracker, updateCellID);
|
|
2854
2897
|
};
|
|
2855
2898
|
const displayOptimizedChatHistory = chatHistoryManager.getDisplayOptimizedHistory();
|
|
2856
2899
|
const previewAICodeToActiveCell = () => {
|
|
2857
2900
|
setCodeReviewStatus('codeCellPreview');
|
|
2858
|
-
const activeCellID = (0,
|
|
2901
|
+
const activeCellID = (0,_utils_notebook__WEBPACK_IMPORTED_MODULE_21__.getActiveCellID)(notebookTracker);
|
|
2859
2902
|
const lastAIDisplayMessage = chatHistoryManagerRef.current.getLastAIDisplayOptimizedChatItem();
|
|
2860
2903
|
if (activeCellID === undefined || lastAIDisplayMessage === undefined) {
|
|
2861
2904
|
return;
|
|
2862
2905
|
}
|
|
2863
|
-
(0,
|
|
2906
|
+
(0,_utils_notebook__WEBPACK_IMPORTED_MODULE_21__.scrollToCell)(notebookTracker.currentWidget, activeCellID, undefined, 'end');
|
|
2864
2907
|
updateCodeDiffStripes(lastAIDisplayMessage.message, activeCellID);
|
|
2865
2908
|
updateCellToolbarButtons();
|
|
2866
2909
|
};
|
|
@@ -2870,7 +2913,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
2870
2913
|
if (!lastAIMessage || !cellStateBeforeDiff.current) {
|
|
2871
2914
|
return;
|
|
2872
2915
|
}
|
|
2873
|
-
const aiGeneratedCode = (0,
|
|
2916
|
+
const aiGeneratedCode = (0,_utils_strings__WEBPACK_IMPORTED_MODULE_18__.getCodeBlockFromMessage)(lastAIMessage.message);
|
|
2874
2917
|
if (!aiGeneratedCode) {
|
|
2875
2918
|
return;
|
|
2876
2919
|
}
|
|
@@ -2879,10 +2922,10 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
2879
2922
|
// Write to the cell that has the code diffs
|
|
2880
2923
|
writeCodeToCellAndTurnOffDiffs(aiGeneratedCode, targetCellID);
|
|
2881
2924
|
// Focus on the active cell after the code is written
|
|
2882
|
-
const targetCell = (0,
|
|
2925
|
+
const targetCell = (0,_utils_notebook__WEBPACK_IMPORTED_MODULE_21__.getCellByID)(notebookTracker, targetCellID);
|
|
2883
2926
|
if (targetCell) {
|
|
2884
2927
|
// Make the target cell the active cell
|
|
2885
|
-
(0,
|
|
2928
|
+
(0,_utils_notebook__WEBPACK_IMPORTED_MODULE_21__.setActiveCellByID)(notebookTracker, targetCellID);
|
|
2886
2929
|
// Focus on the active cell
|
|
2887
2930
|
targetCell.activate();
|
|
2888
2931
|
}
|
|
@@ -2908,7 +2951,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
2908
2951
|
updateCodeCellsExtensions(undefined);
|
|
2909
2952
|
cellStateBeforeDiff.current = undefined;
|
|
2910
2953
|
if (codeCellID !== undefined) {
|
|
2911
|
-
(0,
|
|
2954
|
+
(0,_utils_notebook__WEBPACK_IMPORTED_MODULE_21__.writeCodeToCellByID)(notebookTracker, code, codeCellID);
|
|
2912
2955
|
updateCellToolbarButtons();
|
|
2913
2956
|
}
|
|
2914
2957
|
};
|
|
@@ -2919,17 +2962,17 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
2919
2962
|
the first time we create the chat. Registering the command when it is already created causes
|
|
2920
2963
|
errors.
|
|
2921
2964
|
*/
|
|
2922
|
-
app.commands.addCommand(
|
|
2965
|
+
app.commands.addCommand(_commands__WEBPACK_IMPORTED_MODULE_23__.COMMAND_MITO_AI_PREVIEW_LATEST_CODE, {
|
|
2923
2966
|
execute: () => {
|
|
2924
2967
|
previewAICodeToActiveCell();
|
|
2925
2968
|
}
|
|
2926
2969
|
});
|
|
2927
|
-
app.commands.addCommand(
|
|
2970
|
+
app.commands.addCommand(_commands__WEBPACK_IMPORTED_MODULE_23__.COMMAND_MITO_AI_APPLY_LATEST_CODE, {
|
|
2928
2971
|
execute: () => {
|
|
2929
2972
|
acceptAICode();
|
|
2930
2973
|
}
|
|
2931
2974
|
});
|
|
2932
|
-
app.commands.addCommand(
|
|
2975
|
+
app.commands.addCommand(_commands__WEBPACK_IMPORTED_MODULE_23__.COMMAND_MITO_AI_REJECT_LATEST_CODE, {
|
|
2933
2976
|
execute: () => {
|
|
2934
2977
|
rejectAICode();
|
|
2935
2978
|
}
|
|
@@ -2938,19 +2981,19 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
2938
2981
|
Add a new command to the JupyterLab command registry that sends the current chat message.
|
|
2939
2982
|
We use this to automatically send the message when the user adds an error to the chat.
|
|
2940
2983
|
*/
|
|
2941
|
-
app.commands.addCommand(
|
|
2984
|
+
app.commands.addCommand(_commands__WEBPACK_IMPORTED_MODULE_23__.COMMAND_MITO_AI_SEND_DEBUG_ERROR_MESSAGE, {
|
|
2942
2985
|
execute: async (args) => {
|
|
2943
2986
|
if (args === null || args === void 0 ? void 0 : args.input) {
|
|
2944
2987
|
await sendSmartDebugMessage(args.input.toString());
|
|
2945
2988
|
}
|
|
2946
2989
|
}
|
|
2947
2990
|
});
|
|
2948
|
-
app.commands.addCommand(
|
|
2991
|
+
app.commands.addCommand(_commands__WEBPACK_IMPORTED_MODULE_23__.COMMAND_MITO_AI_SEND_EXPLAIN_CODE_MESSAGE, {
|
|
2949
2992
|
execute: async () => {
|
|
2950
2993
|
await sendExplainCodeMessage();
|
|
2951
2994
|
}
|
|
2952
2995
|
});
|
|
2953
|
-
app.commands.addCommand(
|
|
2996
|
+
app.commands.addCommand(_commands__WEBPACK_IMPORTED_MODULE_23__.COMMAND_MITO_AI_SEND_AGENT_MESSAGE, {
|
|
2954
2997
|
execute: async (args) => {
|
|
2955
2998
|
if (args === null || args === void 0 ? void 0 : args.input) {
|
|
2956
2999
|
// If its not already in agent mode, start a new chat in agent mode
|
|
@@ -2967,7 +3010,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
2967
3010
|
/*
|
|
2968
3011
|
Register the code cell toolbar buttons for accepting and rejecting code.
|
|
2969
3012
|
*/
|
|
2970
|
-
app.commands.addCommand(
|
|
3013
|
+
app.commands.addCommand(_commands__WEBPACK_IMPORTED_MODULE_23__.COMMAND_MITO_AI_CELL_TOOLBAR_ACCEPT_CODE, {
|
|
2971
3014
|
label: `Accept ${operatingSystem === 'mac' ? '⌘Y' : 'Ctrl+Y'}`,
|
|
2972
3015
|
className: 'text-button-mito-ai button-base button-green',
|
|
2973
3016
|
caption: 'Accept Code',
|
|
@@ -2985,7 +3028,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
2985
3028
|
}
|
|
2986
3029
|
}
|
|
2987
3030
|
});
|
|
2988
|
-
app.commands.addCommand(
|
|
3031
|
+
app.commands.addCommand(_commands__WEBPACK_IMPORTED_MODULE_23__.COMMAND_MITO_AI_CELL_TOOLBAR_REJECT_CODE, {
|
|
2989
3032
|
label: `Reject ${operatingSystem === 'mac' ? '⌘U' : 'Ctrl+U'}`,
|
|
2990
3033
|
className: 'text-button-mito-ai button-base button-red',
|
|
2991
3034
|
caption: 'Reject Code',
|
|
@@ -3006,13 +3049,13 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
3006
3049
|
// Register keyboard shortcuts
|
|
3007
3050
|
const accelYDisposable = app.commands.addKeyBinding({
|
|
3008
3051
|
command: codeReviewStatus === 'chatPreview' ?
|
|
3009
|
-
|
|
3010
|
-
|
|
3052
|
+
_commands__WEBPACK_IMPORTED_MODULE_23__.COMMAND_MITO_AI_PREVIEW_LATEST_CODE :
|
|
3053
|
+
_commands__WEBPACK_IMPORTED_MODULE_23__.COMMAND_MITO_AI_APPLY_LATEST_CODE,
|
|
3011
3054
|
keys: ['Accel Y'],
|
|
3012
3055
|
selector: 'body',
|
|
3013
3056
|
});
|
|
3014
3057
|
const accelDDisposable = app.commands.addKeyBinding({
|
|
3015
|
-
command:
|
|
3058
|
+
command: _commands__WEBPACK_IMPORTED_MODULE_23__.COMMAND_MITO_AI_REJECT_LATEST_CODE,
|
|
3016
3059
|
keys: ['Accel U'],
|
|
3017
3060
|
selector: 'body',
|
|
3018
3061
|
preventDefault: true,
|
|
@@ -3029,8 +3072,8 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
3029
3072
|
// Without this, the user needs to take some action, like switching to a different cell
|
|
3030
3073
|
// and then switching back in order for the Jupyter to re-evaluate if it should
|
|
3031
3074
|
// show the toolbar buttons.
|
|
3032
|
-
app.commands.notifyCommandChanged(
|
|
3033
|
-
app.commands.notifyCommandChanged(
|
|
3075
|
+
app.commands.notifyCommandChanged(_commands__WEBPACK_IMPORTED_MODULE_23__.COMMAND_MITO_AI_CELL_TOOLBAR_ACCEPT_CODE);
|
|
3076
|
+
app.commands.notifyCommandChanged(_commands__WEBPACK_IMPORTED_MODULE_23__.COMMAND_MITO_AI_CELL_TOOLBAR_REJECT_CODE);
|
|
3034
3077
|
};
|
|
3035
3078
|
const codeDiffStripesCompartments = react__WEBPACK_IMPORTED_MODULE_1___default().useRef(new Map());
|
|
3036
3079
|
// Function to update the extensions of code cells
|
|
@@ -3058,13 +3101,13 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
3058
3101
|
codeDiffStripesCompartments.current.set(cellId, compartment);
|
|
3059
3102
|
// Apply the initial configuration
|
|
3060
3103
|
editorView.dispatch({
|
|
3061
|
-
effects: _codemirror_state__WEBPACK_IMPORTED_MODULE_0__.StateEffect.appendConfig.of(compartment.of(unifiedDiffLines !== undefined && isActiveCodeCell ? (0,
|
|
3104
|
+
effects: _codemirror_state__WEBPACK_IMPORTED_MODULE_0__.StateEffect.appendConfig.of(compartment.of(unifiedDiffLines !== undefined && isActiveCodeCell ? (0,_CodeDiffDisplay__WEBPACK_IMPORTED_MODULE_24__.codeDiffStripesExtension)({ unifiedDiffLines: unifiedDiffLines }) : [])),
|
|
3062
3105
|
});
|
|
3063
3106
|
}
|
|
3064
3107
|
else {
|
|
3065
3108
|
// Reconfigure the compartment
|
|
3066
3109
|
editorView.dispatch({
|
|
3067
|
-
effects: compartment.reconfigure(unifiedDiffLines !== undefined && isActiveCodeCell ? (0,
|
|
3110
|
+
effects: compartment.reconfigure(unifiedDiffLines !== undefined && isActiveCodeCell ? (0,_CodeDiffDisplay__WEBPACK_IMPORTED_MODULE_24__.codeDiffStripesExtension)({ unifiedDiffLines: unifiedDiffLines }) : []),
|
|
3068
3111
|
});
|
|
3069
3112
|
}
|
|
3070
3113
|
}
|
|
@@ -3079,7 +3122,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
3079
3122
|
// In agent mode, we group consecutive error messages together.
|
|
3080
3123
|
// In chat mode, we display messages individually as they were sent
|
|
3081
3124
|
if (agentModeEnabled) {
|
|
3082
|
-
processedDisplayOptimizedChatHistory = (0,
|
|
3125
|
+
processedDisplayOptimizedChatHistory = (0,_utils_chatHistory__WEBPACK_IMPORTED_MODULE_25__.processChatHistoryForErrorGrouping)(chatHistoryManager.getDisplayOptimizedHistory());
|
|
3083
3126
|
}
|
|
3084
3127
|
else {
|
|
3085
3128
|
processedDisplayOptimizedChatHistory = chatHistoryManager.getDisplayOptimizedHistory();
|
|
@@ -3088,19 +3131,21 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
3088
3131
|
const isGroupedErrorMessages = (item) => {
|
|
3089
3132
|
return Array.isArray(item);
|
|
3090
3133
|
};
|
|
3091
|
-
return (
|
|
3134
|
+
return (
|
|
3135
|
+
// We disable the chat taskpane if the user is not signed up AND there are no chat history items
|
|
3136
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", { className: (0,_utils_classNames__WEBPACK_IMPORTED_MODULE_26__.classNames)('chat-taskpane', { 'disabled': !(isSignedUp || displayOptimizedChatHistory.length > 0) }) },
|
|
3092
3137
|
react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", { className: "chat-taskpane-header" },
|
|
3093
3138
|
react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", { className: "chat-taskpane-header-left" },
|
|
3094
|
-
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(
|
|
3095
|
-
void app.commands.execute(
|
|
3139
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_components_IconButton__WEBPACK_IMPORTED_MODULE_27__["default"], { icon: react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_jupyterlab_ui_components__WEBPACK_IMPORTED_MODULE_2__.settingsIcon.react, null), title: "Mito AI Settings", onClick: () => {
|
|
3140
|
+
void app.commands.execute(_SettingsManager_SettingsManagerPlugin__WEBPACK_IMPORTED_MODULE_28__.COMMAND_MITO_AI_SETTINGS);
|
|
3096
3141
|
} })),
|
|
3097
3142
|
react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", { className: "chat-taskpane-header-right" },
|
|
3098
|
-
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(
|
|
3099
|
-
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(
|
|
3143
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_components_IconButton__WEBPACK_IMPORTED_MODULE_27__["default"], { icon: react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_jupyterlab_ui_components__WEBPACK_IMPORTED_MODULE_2__.addIcon.react, null), title: "Start New Chat", onClick: async () => { await startNewChat(); } }),
|
|
3144
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_components_DropdownMenu__WEBPACK_IMPORTED_MODULE_29__["default"], { trigger: react__WEBPACK_IMPORTED_MODULE_1___default().createElement("button", { className: "icon-button", title: "Chat Threads", onClick: fetchChatThreads },
|
|
3100
3145
|
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_jupyterlab_ui_components__WEBPACK_IMPORTED_MODULE_2__.historyIcon.react, null)), items: chatThreads.length > 0
|
|
3101
3146
|
? chatThreads.map(thread => ({
|
|
3102
3147
|
label: thread.name,
|
|
3103
|
-
primaryIcon: activeThreadIdRef.current === thread.thread_id ?
|
|
3148
|
+
primaryIcon: activeThreadIdRef.current === thread.thread_id ? _icons__WEBPACK_IMPORTED_MODULE_30__.OpenIndicatorLabIcon.react : undefined,
|
|
3104
3149
|
onClick: () => fetchChatHistoryAndSetActiveThread(thread.thread_id),
|
|
3105
3150
|
secondaryActions: [
|
|
3106
3151
|
{
|
|
@@ -3117,38 +3162,36 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
3117
3162
|
}], alignment: "right" }))),
|
|
3118
3163
|
react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", { className: "chat-messages", ref: chatMessagesRef },
|
|
3119
3164
|
displayOptimizedChatHistory.length === 0 &&
|
|
3120
|
-
react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", { className: "chat-empty-message" },
|
|
3121
|
-
react__WEBPACK_IMPORTED_MODULE_1___default().createElement("
|
|
3122
|
-
|
|
3123
|
-
react__WEBPACK_IMPORTED_MODULE_1___default().createElement("span", { style: { display: 'block', textAlign: 'center', fontWeight: 'bold', fontSize: '20px', marginBottom: '15px' } }, "Data Copilot"),
|
|
3124
|
-
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_CTACarousel__WEBPACK_IMPORTED_MODULE_29__["default"], { app: app })),
|
|
3165
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", { className: "chat-empty-message" }, isSignedUp === false
|
|
3166
|
+
? react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_SignUpForm__WEBPACK_IMPORTED_MODULE_31__["default"], { onSignUpSuccess: refreshUserSignupState })
|
|
3167
|
+
: react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_CTACarousel__WEBPACK_IMPORTED_MODULE_32__["default"], { app: app })),
|
|
3125
3168
|
processedDisplayOptimizedChatHistory.map((displayOptimizedChat, index) => {
|
|
3126
3169
|
if (isGroupedErrorMessages(displayOptimizedChat)) {
|
|
3127
|
-
return (react__WEBPACK_IMPORTED_MODULE_1___default().createElement(
|
|
3170
|
+
return (react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_components_AgentComponents_ErrorFixupToolUI__WEBPACK_IMPORTED_MODULE_33__["default"], { key: index, messages: displayOptimizedChat, renderMimeRegistry: renderMimeRegistry }));
|
|
3128
3171
|
}
|
|
3129
3172
|
else {
|
|
3130
|
-
return (react__WEBPACK_IMPORTED_MODULE_1___default().createElement(
|
|
3173
|
+
return (react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_ChatMessage_ChatMessage__WEBPACK_IMPORTED_MODULE_34__["default"], { key: index, message: displayOptimizedChat.message, promptType: displayOptimizedChat.promptType, agentResponse: displayOptimizedChat.agentResponse, codeCellID: displayOptimizedChat.codeCellID, mitoAIConnectionError: displayOptimizedChat.type === 'connection error', mitoAIConnectionErrorType: displayOptimizedChat.mitoAIConnectionErrorType || null, messageIndex: index, notebookTracker: notebookTracker, renderMimeRegistry: renderMimeRegistry, app: app, isLastAiMessage: index === lastAIMessagesIndex, isLastMessage: index === displayOptimizedChatHistory.length - 1, operatingSystem: operatingSystem, previewAICode: previewAICodeToActiveCell, acceptAICode: acceptAICode, rejectAICode: rejectAICode, onUpdateMessage: handleUpdateMessage, contextManager: contextManager, codeReviewStatus: codeReviewStatus, setNextSteps: setNextSteps, agentModeEnabled: agentModeEnabled, additionalContext: displayOptimizedChat.additionalContext }));
|
|
3131
3174
|
}
|
|
3132
3175
|
}).filter(message => message !== null),
|
|
3133
3176
|
loadingAIResponse &&
|
|
3134
3177
|
react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", { className: "chat-loading-message" },
|
|
3135
3178
|
"Thinking ",
|
|
3136
|
-
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(
|
|
3179
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_components_LoadingDots__WEBPACK_IMPORTED_MODULE_35__["default"], null)),
|
|
3137
3180
|
hasCheckpoint &&
|
|
3138
3181
|
agentModeEnabled &&
|
|
3139
3182
|
agentExecutionStatus === 'idle' &&
|
|
3140
3183
|
displayOptimizedChatHistory.length > 0 && (react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", { className: 'message message-assistant-chat' },
|
|
3141
|
-
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(
|
|
3142
|
-
void (0,
|
|
3184
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_components_TextAndIconButton__WEBPACK_IMPORTED_MODULE_36__["default"], { text: "Revert changes", icon: _icons_UndoIcon__WEBPACK_IMPORTED_MODULE_37__["default"], title: "Revert changes", onClick: () => {
|
|
3185
|
+
void (0,_utils_checkpoint__WEBPACK_IMPORTED_MODULE_17__.restoreCheckpoint)(app, notebookTracker, setHasCheckpoint);
|
|
3143
3186
|
setDisplayedNextStepsIfAvailable(false);
|
|
3144
3187
|
setHasCheckpoint(false);
|
|
3145
3188
|
setShowRevertQuestionnaire(true);
|
|
3146
|
-
(0,
|
|
3189
|
+
(0,_utils_scroll__WEBPACK_IMPORTED_MODULE_13__.scrollToDiv)(chatMessagesRef);
|
|
3147
3190
|
}, variant: "gray", width: "fit-contents", iconPosition: "left" }),
|
|
3148
3191
|
react__WEBPACK_IMPORTED_MODULE_1___default().createElement("p", { className: "text-muted text-sm" }, "Undo the most recent changes made by the agent"))),
|
|
3149
|
-
showRevertQuestionnaire && (react__WEBPACK_IMPORTED_MODULE_1___default().createElement(
|
|
3192
|
+
showRevertQuestionnaire && (react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_ChatMessage_RevertQuestionnaire__WEBPACK_IMPORTED_MODULE_38__["default"], { onDestroy: () => setShowRevertQuestionnaire(false), getDuplicateChatHistoryManager: getDuplicateChatHistoryManager, setChatHistoryManager: setChatHistoryManager }))),
|
|
3150
3193
|
displayOptimizedChatHistory.length === 0 && (react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", { className: "suggestions-container" },
|
|
3151
|
-
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(
|
|
3194
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_ChatMessage_ScrollableSuggestions__WEBPACK_IMPORTED_MODULE_39__["default"], { onSelectSuggestion: (prompt) => {
|
|
3152
3195
|
if (agentModeEnabled) {
|
|
3153
3196
|
void startAgentExecution(prompt);
|
|
3154
3197
|
}
|
|
@@ -3157,15 +3200,11 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
3157
3200
|
}
|
|
3158
3201
|
} }))),
|
|
3159
3202
|
react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", { className: `connected-input-container ${nextSteps.length > 0 ? 'has-next-steps' : ''}` },
|
|
3160
|
-
nextSteps.length > 0 && (react__WEBPACK_IMPORTED_MODULE_1___default().createElement(
|
|
3161
|
-
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(
|
|
3162
|
-
agentExecutionStatus === 'stopping' ? 'Agent is stopping...' :
|
|
3163
|
-
agentModeEnabled ? 'Ask agent to do anything' :
|
|
3164
|
-
displayOptimizedChatHistory.length < 2 ? `Ask question (${operatingSystem === 'mac' ? '⌘' : 'Ctrl'}E), @ to mention`
|
|
3165
|
-
: `Ask followup (${operatingSystem === 'mac' ? '⌘' : 'Ctrl'}E), @ to mention`, onSave: agentModeEnabled ? startAgentExecution : sendChatInputMessage, onCancel: undefined, isEditing: false, contextManager: contextManager, notebookTracker: notebookTracker, agentModeEnabled: agentModeEnabled, agentExecutionStatus: agentExecutionStatus })),
|
|
3203
|
+
nextSteps.length > 0 && (react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_components_NextStepsPills__WEBPACK_IMPORTED_MODULE_40__["default"], { nextSteps: nextSteps, onSelectNextStep: agentModeEnabled ? startAgentExecution : sendChatInputMessage, displayedNextStepsIfAvailable: displayedNextStepsIfAvailable, setDisplayedNextStepsIfAvailable: setDisplayedNextStepsIfAvailable })),
|
|
3204
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_ChatMessage_ChatInput__WEBPACK_IMPORTED_MODULE_41__["default"], { app: app, initialContent: '', onSave: agentModeEnabled ? startAgentExecution : sendChatInputMessage, onCancel: undefined, isEditing: false, contextManager: contextManager, notebookTracker: notebookTracker, agentModeEnabled: agentModeEnabled, agentExecutionStatus: agentExecutionStatus, operatingSystem: operatingSystem, displayOptimizedChatHistoryLength: displayOptimizedChatHistory.length, agentTargetNotebookPanelRef: agentTargetNotebookPanelRef, isSignedUp: isSignedUp })),
|
|
3166
3205
|
agentExecutionStatus !== 'working' && agentExecutionStatus !== 'stopping' && (react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", { className: "chat-controls" },
|
|
3167
3206
|
react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", { className: "chat-controls-left" },
|
|
3168
|
-
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(
|
|
3207
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_components_ToggleButton__WEBPACK_IMPORTED_MODULE_42__["default"], { leftText: "Chat", leftTooltip: "Chat mode suggests an edit to the active cell and let's you decide to accept or reject it.", rightText: "Agent", rightTooltip: "Agent mode writes and executes code until it's finished your request.", isLeftSelected: !agentModeEnabled, onChange: async (isLeftSelected) => {
|
|
3169
3208
|
await startNewChat(); // TODO: delete thread instead of starting new chat
|
|
3170
3209
|
setAgentModeEnabled(!isLeftSelected);
|
|
3171
3210
|
// Clear agent checkpoint when switching modes
|
|
@@ -3201,7 +3240,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, app
|
|
|
3201
3240
|
" \u23CE"))),
|
|
3202
3241
|
(agentExecutionStatus === 'working' || agentExecutionStatus === 'stopping') && (react__WEBPACK_IMPORTED_MODULE_1___default().createElement("button", { className: "button-base button-red stop-agent-button", onClick: () => void markAgentForStopping('userStop'), disabled: agentExecutionStatus === 'stopping', "data-testid": "stop-agent-button" }, agentExecutionStatus === 'stopping' ? (react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", { className: "stop-agent-button-content" },
|
|
3203
3242
|
"Stopping",
|
|
3204
|
-
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(
|
|
3243
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_components_LoadingCircle__WEBPACK_IMPORTED_MODULE_43__["default"], null),
|
|
3205
3244
|
" ")) : ('Stop Agent')))));
|
|
3206
3245
|
};
|
|
3207
3246
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ChatTaskpane);
|
|
@@ -3475,6 +3514,59 @@ const getFirstMessageFromCookie = () => {
|
|
|
3475
3514
|
};
|
|
3476
3515
|
|
|
3477
3516
|
|
|
3517
|
+
/***/ }),
|
|
3518
|
+
|
|
3519
|
+
/***/ "./lib/Extensions/AiChat/SignUpForm.js":
|
|
3520
|
+
/*!*********************************************!*\
|
|
3521
|
+
!*** ./lib/Extensions/AiChat/SignUpForm.js ***!
|
|
3522
|
+
\*********************************************/
|
|
3523
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
3524
|
+
|
|
3525
|
+
__webpack_require__.r(__webpack_exports__);
|
|
3526
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
3527
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
3528
|
+
/* harmony export */ });
|
|
3529
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
3530
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
3531
|
+
/* harmony import */ var _restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../restAPI/RestAPI */ "./lib/restAPI/RestAPI.js");
|
|
3532
|
+
/* harmony import */ var _icons_MitoLogo__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../icons/MitoLogo */ "./lib/icons/MitoLogo.js");
|
|
3533
|
+
/* harmony import */ var _utils_userSignupEvents__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/userSignupEvents */ "./lib/utils/userSignupEvents.js");
|
|
3534
|
+
/* harmony import */ var _style_SignUpForm_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../style/SignUpForm.css */ "./style/SignUpForm.css");
|
|
3535
|
+
/*
|
|
3536
|
+
* Copyright (c) Saga Inc.
|
|
3537
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
3538
|
+
*/
|
|
3539
|
+
|
|
3540
|
+
|
|
3541
|
+
|
|
3542
|
+
|
|
3543
|
+
|
|
3544
|
+
const SignUpForm = ({ onSignUpSuccess }) => {
|
|
3545
|
+
const [email, setEmail] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('');
|
|
3546
|
+
const handleSubmit = async (e) => {
|
|
3547
|
+
e.preventDefault();
|
|
3548
|
+
try {
|
|
3549
|
+
await (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_2__.setUserKey)('user_email', email);
|
|
3550
|
+
onSignUpSuccess === null || onSignUpSuccess === void 0 ? void 0 : onSignUpSuccess();
|
|
3551
|
+
// Emit signup success event for other components to listen to
|
|
3552
|
+
_utils_userSignupEvents__WEBPACK_IMPORTED_MODULE_3__.userSignupEvents.emitSignupSuccess();
|
|
3553
|
+
}
|
|
3554
|
+
catch (error) {
|
|
3555
|
+
console.error('Failed to set user email:', error);
|
|
3556
|
+
}
|
|
3557
|
+
};
|
|
3558
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "signup-form-container" },
|
|
3559
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "signup-form-header-logo" },
|
|
3560
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_MitoLogo__WEBPACK_IMPORTED_MODULE_4__["default"], { width: "60", height: "30" })),
|
|
3561
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "signup-form-header" }, "Sign Up for Mito"),
|
|
3562
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "signup-form-message", "data-testid": "signup-form-message" }, "To avoid abuse of our free AI credits, we ask that you login to use Mito AI. No credit card required, just an email."),
|
|
3563
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("form", { onSubmit: handleSubmit, style: { marginTop: '15px' } },
|
|
3564
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", { type: "email", value: email, onChange: (e) => setEmail(e.target.value), placeholder: "Your work email", className: "signup-form-input", required: true }),
|
|
3565
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { type: "submit", className: "button-base signup-form-button" }, "Sign Up"))));
|
|
3566
|
+
};
|
|
3567
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SignUpForm);
|
|
3568
|
+
|
|
3569
|
+
|
|
3478
3570
|
/***/ }),
|
|
3479
3571
|
|
|
3480
3572
|
/***/ "./lib/Extensions/AiChat/jupyterSettingsManager.js":
|
|
@@ -4992,14 +5084,18 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
4992
5084
|
/* harmony import */ var _jupyterlab_coreutils__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_jupyterlab_coreutils__WEBPACK_IMPORTED_MODULE_2__);
|
|
4993
5085
|
/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @lumino/widgets */ "webpack/sharing/consume/default/@lumino/widgets");
|
|
4994
5086
|
/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_lumino_widgets__WEBPACK_IMPORTED_MODULE_3__);
|
|
4995
|
-
/* harmony import */ var
|
|
4996
|
-
/* harmony import */ var
|
|
4997
|
-
/* harmony import */ var
|
|
4998
|
-
/* harmony import */ var
|
|
4999
|
-
/* harmony import */ var
|
|
5000
|
-
/* harmony import */ var
|
|
5087
|
+
/* harmony import */ var _restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../restAPI/RestAPI */ "./lib/restAPI/RestAPI.js");
|
|
5088
|
+
/* harmony import */ var _AppDeploy_DeployStreamlitApp__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../AppDeploy/DeployStreamlitApp */ "./lib/Extensions/AppDeploy/DeployStreamlitApp.js");
|
|
5089
|
+
/* harmony import */ var _AppDeploy_AppDeployPlugin__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../AppDeploy/AppDeployPlugin */ "./lib/Extensions/AppDeploy/AppDeployPlugin.js");
|
|
5090
|
+
/* harmony import */ var _AppManager_ManageAppsPlugin__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../AppManager/ManageAppsPlugin */ "./lib/Extensions/AppManager/ManageAppsPlugin.js");
|
|
5091
|
+
/* harmony import */ var _commands__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../commands */ "./lib/commands.js");
|
|
5092
|
+
/* harmony import */ var _icons__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../icons */ "./lib/icons/index.js");
|
|
5001
5093
|
/* harmony import */ var _style_StreamlitPreviewPlugin_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../style/StreamlitPreviewPlugin.css */ "./style/StreamlitPreviewPlugin.css");
|
|
5002
|
-
/* harmony import */ var
|
|
5094
|
+
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils */ "./lib/Extensions/AppPreview/utils.js");
|
|
5095
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
5096
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__);
|
|
5097
|
+
/* harmony import */ var _UpdateAppDropdown__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./UpdateAppDropdown */ "./lib/Extensions/AppPreview/UpdateAppDropdown.js");
|
|
5098
|
+
/* harmony import */ var react_dom_client__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-dom/client */ "./node_modules/react-dom/client.js");
|
|
5003
5099
|
/*
|
|
5004
5100
|
* Copyright (c) Saga Inc.
|
|
5005
5101
|
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
@@ -5018,6 +5114,10 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
5018
5114
|
|
|
5019
5115
|
|
|
5020
5116
|
|
|
5117
|
+
|
|
5118
|
+
|
|
5119
|
+
|
|
5120
|
+
|
|
5021
5121
|
/**
|
|
5022
5122
|
* Simple HTML widget for displaying iframe content.
|
|
5023
5123
|
*/
|
|
@@ -5039,17 +5139,71 @@ class IFrameWidget extends _lumino_widgets__WEBPACK_IMPORTED_MODULE_3__.Widget {
|
|
|
5039
5139
|
}
|
|
5040
5140
|
}
|
|
5041
5141
|
}
|
|
5142
|
+
async function showRecreateAppConfirmation(notebookPath) {
|
|
5143
|
+
const result = await (0,_jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.showDialog)({
|
|
5144
|
+
title: 'Recreate App',
|
|
5145
|
+
body: 'This will recreate the app from scratch, discarding all your current edits. This action cannot be undone. Are you sure you want to continue?',
|
|
5146
|
+
buttons: [
|
|
5147
|
+
_jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.Dialog.cancelButton({ label: 'Cancel' }),
|
|
5148
|
+
_jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.Dialog.warnButton({ label: 'Recreate App' })
|
|
5149
|
+
],
|
|
5150
|
+
defaultButton: 1
|
|
5151
|
+
});
|
|
5152
|
+
if (result.button.accept) {
|
|
5153
|
+
void (0,_utils__WEBPACK_IMPORTED_MODULE_7__.startStreamlitPreviewAndNotify)(notebookPath, true, undefined, 'Recreating app from scratch...', 'App recreated successfully!');
|
|
5154
|
+
}
|
|
5155
|
+
}
|
|
5156
|
+
/**
|
|
5157
|
+
* Show the update app dropdown.
|
|
5158
|
+
*/
|
|
5159
|
+
function showUpdateAppDropdown(buttonElement, notebookPath) {
|
|
5160
|
+
// Remove any existing dropdown
|
|
5161
|
+
const existingDropdown = document.querySelector('.update-app-dropdown');
|
|
5162
|
+
if (existingDropdown) {
|
|
5163
|
+
existingDropdown.remove();
|
|
5164
|
+
}
|
|
5165
|
+
// Create dropdown container
|
|
5166
|
+
const dropdownContainer = document.createElement('div');
|
|
5167
|
+
dropdownContainer.className = 'update-app-dropdown';
|
|
5168
|
+
dropdownContainer.style.position = 'absolute';
|
|
5169
|
+
dropdownContainer.style.zIndex = '1000';
|
|
5170
|
+
// Position the dropdown below the button
|
|
5171
|
+
const buttonRect = buttonElement.getBoundingClientRect();
|
|
5172
|
+
dropdownContainer.style.top = `${buttonRect.bottom + 4}px`;
|
|
5173
|
+
dropdownContainer.style.left = `${buttonRect.left}px`;
|
|
5174
|
+
// Add to document
|
|
5175
|
+
document.body.appendChild(dropdownContainer);
|
|
5176
|
+
// Render the React component
|
|
5177
|
+
(0,react_dom_client__WEBPACK_IMPORTED_MODULE_6__.createRoot)(dropdownContainer).render(react__WEBPACK_IMPORTED_MODULE_5__.createElement(_UpdateAppDropdown__WEBPACK_IMPORTED_MODULE_8__["default"], { onSubmit: async (message) => {
|
|
5178
|
+
await (0,_utils__WEBPACK_IMPORTED_MODULE_7__.startStreamlitPreviewAndNotify)(notebookPath, true, message, 'Updating app...', 'App updated successfully!');
|
|
5179
|
+
dropdownContainer.remove();
|
|
5180
|
+
}, onClose: () => {
|
|
5181
|
+
dropdownContainer.remove();
|
|
5182
|
+
} }));
|
|
5183
|
+
// Close dropdown when clicking outside
|
|
5184
|
+
const handleClickOutside = (event) => {
|
|
5185
|
+
if (!dropdownContainer.contains(event.target) &&
|
|
5186
|
+
!buttonElement.contains(event.target)) {
|
|
5187
|
+
dropdownContainer.remove();
|
|
5188
|
+
document.removeEventListener('mousedown', handleClickOutside);
|
|
5189
|
+
}
|
|
5190
|
+
};
|
|
5191
|
+
// Add click outside listener after a small delay to avoid immediate closure
|
|
5192
|
+
setTimeout(() => {
|
|
5193
|
+
document.addEventListener('mousedown', handleClickOutside);
|
|
5194
|
+
}, 100);
|
|
5195
|
+
}
|
|
5042
5196
|
/**
|
|
5043
5197
|
* The streamlit preview plugin.
|
|
5044
5198
|
*/
|
|
5045
5199
|
const StreamlitPreviewPlugin = {
|
|
5046
5200
|
id: 'mito-ai:streamlit-preview',
|
|
5047
5201
|
autoStart: true,
|
|
5048
|
-
requires: [_jupyterlab_notebook__WEBPACK_IMPORTED_MODULE_0__.INotebookTracker, _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.ICommandPalette,
|
|
5202
|
+
requires: [_jupyterlab_notebook__WEBPACK_IMPORTED_MODULE_0__.INotebookTracker, _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.ICommandPalette, _AppDeploy_AppDeployPlugin__WEBPACK_IMPORTED_MODULE_9__.IAppDeployService, _AppManager_ManageAppsPlugin__WEBPACK_IMPORTED_MODULE_10__.IAppManagerService],
|
|
5049
5203
|
activate: (app, notebookTracker, palette, appDeployService, appManagerService) => {
|
|
5050
5204
|
console.log('mito-ai: StreamlitPreviewPlugin activated');
|
|
5051
5205
|
// Add command to command palette
|
|
5052
|
-
app.commands.addCommand(
|
|
5206
|
+
app.commands.addCommand(_commands__WEBPACK_IMPORTED_MODULE_11__.COMMAND_MITO_AI_PREVIEW_AS_STREAMLIT, {
|
|
5053
5207
|
label: 'Preview as Streamlit',
|
|
5054
5208
|
caption: 'Convert current notebook to Streamlit app and preview it',
|
|
5055
5209
|
execute: async () => {
|
|
@@ -5058,7 +5212,7 @@ const StreamlitPreviewPlugin = {
|
|
|
5058
5212
|
});
|
|
5059
5213
|
// Add to command palette
|
|
5060
5214
|
palette.addItem({
|
|
5061
|
-
command:
|
|
5215
|
+
command: _commands__WEBPACK_IMPORTED_MODULE_11__.COMMAND_MITO_AI_PREVIEW_AS_STREAMLIT,
|
|
5062
5216
|
category: 'Mito AI'
|
|
5063
5217
|
});
|
|
5064
5218
|
}
|
|
@@ -5076,10 +5230,11 @@ async function previewNotebookAsStreamlit(app, notebookTracker, appDeployService
|
|
|
5076
5230
|
await notebookPanel.context.save();
|
|
5077
5231
|
const notebookPath = notebookPanel.context.path;
|
|
5078
5232
|
const notebookName = _jupyterlab_coreutils__WEBPACK_IMPORTED_MODULE_2__.PathExt.basename(notebookPath, '.ipynb');
|
|
5079
|
-
let globalNotificationId;
|
|
5080
5233
|
try {
|
|
5081
|
-
const
|
|
5082
|
-
|
|
5234
|
+
const previewData = await (0,_utils__WEBPACK_IMPORTED_MODULE_7__.startStreamlitPreviewAndNotify)(notebookPath);
|
|
5235
|
+
if (previewData === undefined) {
|
|
5236
|
+
return;
|
|
5237
|
+
}
|
|
5083
5238
|
// Create iframe widget
|
|
5084
5239
|
// TODO: Instead of having this widget creation code in the previewNotebookAsStreamlit function,
|
|
5085
5240
|
// I wonder if we can make it part of the StreamlitPreviewPlugin. What we want is the following:
|
|
@@ -5090,35 +5245,47 @@ async function previewNotebookAsStreamlit(app, notebookTracker, appDeployService
|
|
|
5090
5245
|
const widget = new _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.MainAreaWidget({ content: iframeWidget });
|
|
5091
5246
|
widget.title.label = `App Preview (${notebookName})`;
|
|
5092
5247
|
widget.title.closable = true;
|
|
5093
|
-
|
|
5094
|
-
|
|
5248
|
+
/* ******************************************************
|
|
5249
|
+
* Create Streamlit App Toolbar Buttons
|
|
5250
|
+
****************************************************** */
|
|
5251
|
+
const editAppButton = new _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.ToolbarButton({
|
|
5095
5252
|
className: 'text-button-mito-ai button-base button-small jp-ToolbarButton mito-deploy-button',
|
|
5096
5253
|
onClick: () => {
|
|
5097
|
-
|
|
5254
|
+
showUpdateAppDropdown(editAppButton.node, notebookPath);
|
|
5098
5255
|
},
|
|
5099
|
-
tooltip: '
|
|
5100
|
-
label: '
|
|
5101
|
-
icon:
|
|
5256
|
+
tooltip: 'Edit Streamlit App',
|
|
5257
|
+
label: 'Edit App',
|
|
5258
|
+
icon: _icons__WEBPACK_IMPORTED_MODULE_12__.EditLabIcon,
|
|
5259
|
+
iconClass: 'mito-ai-deploy-icon'
|
|
5260
|
+
});
|
|
5261
|
+
const recreateAppButton = new _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.ToolbarButton({
|
|
5262
|
+
className: 'text-button-mito-ai button-base button-small jp-ToolbarButton mito-deploy-button',
|
|
5263
|
+
onClick: async () => {
|
|
5264
|
+
await showRecreateAppConfirmation(notebookPath);
|
|
5265
|
+
},
|
|
5266
|
+
tooltip: 'Recreate new App from scratch based on the current state of the notebook',
|
|
5267
|
+
label: 'Recreate App',
|
|
5268
|
+
icon: _icons__WEBPACK_IMPORTED_MODULE_12__.ResetCircleLabIcon,
|
|
5102
5269
|
iconClass: 'mito-ai-deploy-icon'
|
|
5103
5270
|
});
|
|
5104
|
-
|
|
5105
|
-
const refreshButton = new _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.ToolbarButton({
|
|
5271
|
+
const deployButton = new _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.ToolbarButton({
|
|
5106
5272
|
className: 'text-button-mito-ai button-base button-small jp-ToolbarButton mito-deploy-button',
|
|
5107
5273
|
onClick: () => {
|
|
5108
|
-
void (0,
|
|
5274
|
+
void (0,_AppDeploy_DeployStreamlitApp__WEBPACK_IMPORTED_MODULE_13__.deployStreamlitApp)(notebookTracker, appDeployService, appManagerService);
|
|
5109
5275
|
},
|
|
5110
|
-
tooltip: '
|
|
5111
|
-
label: '
|
|
5112
|
-
icon:
|
|
5276
|
+
tooltip: 'Deploy Streamlit App',
|
|
5277
|
+
label: 'Deploy App',
|
|
5278
|
+
icon: _icons__WEBPACK_IMPORTED_MODULE_12__.DeployLabIcon,
|
|
5113
5279
|
iconClass: 'mito-ai-deploy-icon'
|
|
5114
5280
|
});
|
|
5115
5281
|
// Insert the button into the toolbar
|
|
5116
|
-
widget.toolbar.insertAfter('spacer', '
|
|
5117
|
-
widget.toolbar.insertAfter('
|
|
5282
|
+
widget.toolbar.insertAfter('spacer', 'edit-app-button', editAppButton);
|
|
5283
|
+
widget.toolbar.insertAfter('edit-app-button', 'recreate-app-button', recreateAppButton);
|
|
5284
|
+
widget.toolbar.insertAfter('recreate-app-button', 'deploy-app-button', deployButton);
|
|
5118
5285
|
// Handle widget disposal
|
|
5119
5286
|
widget.disposed.connect(() => {
|
|
5120
5287
|
console.log('Widget disposed, stopping preview');
|
|
5121
|
-
void (0,
|
|
5288
|
+
void (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_14__.stopStreamlitPreview)(previewData.id);
|
|
5122
5289
|
});
|
|
5123
5290
|
// Add widget to main area with split-right mode
|
|
5124
5291
|
app.shell.add(widget, 'main', {
|
|
@@ -5128,20 +5295,59 @@ async function previewNotebookAsStreamlit(app, notebookTracker, appDeployService
|
|
|
5128
5295
|
}
|
|
5129
5296
|
catch (error) {
|
|
5130
5297
|
console.error('Error starting streamlit preview:', error);
|
|
5131
|
-
// Update notification to error
|
|
5132
|
-
if (globalNotificationId) {
|
|
5133
|
-
_jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.Notification.update({
|
|
5134
|
-
id: globalNotificationId,
|
|
5135
|
-
message: `Failed to start preview: ${error instanceof Error ? error.message : 'Unknown error'}`,
|
|
5136
|
-
type: 'error',
|
|
5137
|
-
autoClose: false
|
|
5138
|
-
});
|
|
5139
|
-
}
|
|
5140
5298
|
}
|
|
5141
5299
|
}
|
|
5142
5300
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (StreamlitPreviewPlugin);
|
|
5143
5301
|
|
|
5144
5302
|
|
|
5303
|
+
/***/ }),
|
|
5304
|
+
|
|
5305
|
+
/***/ "./lib/Extensions/AppPreview/UpdateAppDropdown.js":
|
|
5306
|
+
/*!********************************************************!*\
|
|
5307
|
+
!*** ./lib/Extensions/AppPreview/UpdateAppDropdown.js ***!
|
|
5308
|
+
\********************************************************/
|
|
5309
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
5310
|
+
|
|
5311
|
+
__webpack_require__.r(__webpack_exports__);
|
|
5312
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
5313
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
5314
|
+
/* harmony export */ });
|
|
5315
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
5316
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
5317
|
+
/* harmony import */ var _style_EditAppDropdown_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../style/EditAppDropdown.css */ "./style/EditAppDropdown.css");
|
|
5318
|
+
/* harmony import */ var _utils_classNames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/classNames */ "./lib/utils/classNames.js");
|
|
5319
|
+
/*
|
|
5320
|
+
* Copyright (c) Saga Inc.
|
|
5321
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
5322
|
+
*/
|
|
5323
|
+
|
|
5324
|
+
|
|
5325
|
+
|
|
5326
|
+
const UpdateAppDropdown = ({ onSubmit, onClose }) => {
|
|
5327
|
+
const [message, setMessage] = react__WEBPACK_IMPORTED_MODULE_0___default().useState('');
|
|
5328
|
+
const handleSubmit = () => {
|
|
5329
|
+
if (message.trim()) {
|
|
5330
|
+
onSubmit(message);
|
|
5331
|
+
onClose();
|
|
5332
|
+
}
|
|
5333
|
+
};
|
|
5334
|
+
const handleKeyDown = (e) => {
|
|
5335
|
+
if (e.key === 'Escape') {
|
|
5336
|
+
onClose();
|
|
5337
|
+
}
|
|
5338
|
+
};
|
|
5339
|
+
const disabled = message.trim() === '';
|
|
5340
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "update-app-dropdown", onKeyDown: handleKeyDown },
|
|
5341
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "update-app-dropdown-content" },
|
|
5342
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", { htmlFor: "update-description", className: "update-app-dropdown-label" }, "How would you like to modify the app?"),
|
|
5343
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("textarea", { id: "update-description", value: message, onChange: (e) => setMessage(e.target.value), placeholder: "Describe your changes (e.g., Change the title, Remove a plot, etc.)", className: "update-app-dropdown-textarea", autoFocus: true }),
|
|
5344
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "update-app-dropdown-buttons" },
|
|
5345
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { onClick: onClose, className: (0,_utils_classNames__WEBPACK_IMPORTED_MODULE_2__.classNames)("update-app-dropdown-button", "update-app-dropdown-button-cancel") }, "Cancel"),
|
|
5346
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { onClick: handleSubmit, disabled: disabled, className: (0,_utils_classNames__WEBPACK_IMPORTED_MODULE_2__.classNames)('update-app-dropdown-button', 'update-app-dropdown-button-submit', { 'disabled': disabled }) }, "Submit")))));
|
|
5347
|
+
};
|
|
5348
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (UpdateAppDropdown);
|
|
5349
|
+
|
|
5350
|
+
|
|
5145
5351
|
/***/ }),
|
|
5146
5352
|
|
|
5147
5353
|
/***/ "./lib/Extensions/AppPreview/utils.js":
|
|
@@ -5163,17 +5369,29 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
5163
5369
|
*/
|
|
5164
5370
|
|
|
5165
5371
|
|
|
5166
|
-
const startStreamlitPreviewAndNotify = async (notebookPath, force_recreate = false) => {
|
|
5167
|
-
const notificationId = _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_0__.Notification.emit(
|
|
5168
|
-
|
|
5169
|
-
|
|
5170
|
-
|
|
5171
|
-
|
|
5172
|
-
|
|
5173
|
-
|
|
5174
|
-
|
|
5175
|
-
|
|
5176
|
-
|
|
5372
|
+
const startStreamlitPreviewAndNotify = async (notebookPath, force_recreate = false, edit_prompt = '', start_notification_message = 'Building App Preview...', success_notification_message = 'Streamlit preview started successfully!') => {
|
|
5373
|
+
const notificationId = _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_0__.Notification.emit(start_notification_message, 'in-progress', { autoClose: false });
|
|
5374
|
+
try {
|
|
5375
|
+
const previewData = await (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_1__.startStreamlitPreview)(notebookPath, force_recreate, edit_prompt);
|
|
5376
|
+
// Update notification to success
|
|
5377
|
+
_jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_0__.Notification.update({
|
|
5378
|
+
id: notificationId,
|
|
5379
|
+
message: success_notification_message,
|
|
5380
|
+
type: 'success',
|
|
5381
|
+
autoClose: 5 * 1000
|
|
5382
|
+
});
|
|
5383
|
+
return previewData;
|
|
5384
|
+
}
|
|
5385
|
+
catch (error) {
|
|
5386
|
+
// Display error notification
|
|
5387
|
+
_jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_0__.Notification.update({
|
|
5388
|
+
id: notificationId,
|
|
5389
|
+
message: "Failed to start app preview: " + String(error),
|
|
5390
|
+
type: 'error',
|
|
5391
|
+
autoClose: 5 * 1000
|
|
5392
|
+
});
|
|
5393
|
+
return undefined;
|
|
5394
|
+
}
|
|
5177
5395
|
};
|
|
5178
5396
|
|
|
5179
5397
|
|
|
@@ -5820,11 +6038,13 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
5820
6038
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
5821
6039
|
/* harmony import */ var _jupyterlab_notebook__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @jupyterlab/notebook */ "webpack/sharing/consume/default/@jupyterlab/notebook");
|
|
5822
6040
|
/* harmony import */ var _jupyterlab_notebook__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_jupyterlab_notebook__WEBPACK_IMPORTED_MODULE_1__);
|
|
5823
|
-
/* harmony import */ var
|
|
6041
|
+
/* harmony import */ var _commands__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../commands */ "./lib/commands.js");
|
|
5824
6042
|
/* harmony import */ var _style_NotebookFooter_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../style/NotebookFooter.css */ "./style/NotebookFooter.css");
|
|
5825
|
-
/* harmony import */ var
|
|
5826
|
-
/* harmony import */ var
|
|
5827
|
-
/* harmony import */ var
|
|
6043
|
+
/* harmony import */ var _components_LoadingCircle__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/LoadingCircle */ "./lib/components/LoadingCircle.js");
|
|
6044
|
+
/* harmony import */ var _icons_NotebookFooter_CodeIcon__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../icons/NotebookFooter/CodeIcon */ "./lib/icons/NotebookFooter/CodeIcon.js");
|
|
6045
|
+
/* harmony import */ var _icons_NotebookFooter_TextIcon__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../icons/NotebookFooter/TextIcon */ "./lib/icons/NotebookFooter/TextIcon.js");
|
|
6046
|
+
/* harmony import */ var _utils_userSignupEvents__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/userSignupEvents */ "./lib/utils/userSignupEvents.js");
|
|
6047
|
+
/* harmony import */ var _utils_userSignupState__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/userSignupState */ "./lib/utils/userSignupState.js");
|
|
5828
6048
|
/*
|
|
5829
6049
|
* Copyright (c) Saga Inc.
|
|
5830
6050
|
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
@@ -5837,16 +6057,48 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
5837
6057
|
|
|
5838
6058
|
|
|
5839
6059
|
|
|
6060
|
+
|
|
6061
|
+
|
|
5840
6062
|
const NotebookFooter = ({ notebookTracker, app }) => {
|
|
5841
6063
|
var _a;
|
|
5842
6064
|
const notebook = (_a = notebookTracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content;
|
|
5843
6065
|
const [inputValue, setInputValue] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('');
|
|
5844
6066
|
const [isGenerating, setIsGenerating] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
|
|
6067
|
+
const [isSignedUp, setIsSignedUp] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);
|
|
6068
|
+
// Function to refresh user signup state using the shared helper
|
|
6069
|
+
const refreshUserSignupState = async () => {
|
|
6070
|
+
const signupState = await (0,_utils_userSignupState__WEBPACK_IMPORTED_MODULE_3__.checkUserSignupState)();
|
|
6071
|
+
setIsSignedUp(signupState.isSignedUp);
|
|
6072
|
+
};
|
|
6073
|
+
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
|
|
6074
|
+
void refreshUserSignupState();
|
|
6075
|
+
}, []);
|
|
6076
|
+
// Listen for signup success events from other components
|
|
6077
|
+
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
|
|
6078
|
+
const handleSignupSuccess = () => {
|
|
6079
|
+
void refreshUserSignupState();
|
|
6080
|
+
};
|
|
6081
|
+
_utils_userSignupEvents__WEBPACK_IMPORTED_MODULE_4__.userSignupEvents.signupSuccess.connect(handleSignupSuccess);
|
|
6082
|
+
// Cleanup the event listener when component unmounts
|
|
6083
|
+
return () => {
|
|
6084
|
+
_utils_userSignupEvents__WEBPACK_IMPORTED_MODULE_4__.userSignupEvents.signupSuccess.disconnect(handleSignupSuccess);
|
|
6085
|
+
};
|
|
6086
|
+
}, []);
|
|
5845
6087
|
// If the notebook is not loaded yet, don't render anything
|
|
5846
|
-
// This must come after the useEffects
|
|
5847
6088
|
if (notebook === undefined || notebook.model === null) {
|
|
5848
6089
|
return null;
|
|
5849
6090
|
}
|
|
6091
|
+
const getPlaceholder = () => {
|
|
6092
|
+
if (isGenerating) {
|
|
6093
|
+
return 'Generating notebook...';
|
|
6094
|
+
}
|
|
6095
|
+
else if (isSignedUp) {
|
|
6096
|
+
return 'What analysis can I help you with?';
|
|
6097
|
+
}
|
|
6098
|
+
else {
|
|
6099
|
+
return 'Sign up to use Mito AI (see taskpane on the left)';
|
|
6100
|
+
}
|
|
6101
|
+
};
|
|
5850
6102
|
const addCell = (cellType = 'code') => {
|
|
5851
6103
|
if (notebook.widgets.length && notebook.widgets.length > 0) {
|
|
5852
6104
|
notebook.activeCellIndex = notebook.widgets.length - 1;
|
|
@@ -5870,8 +6122,8 @@ const NotebookFooter = ({ notebookTracker, app }) => {
|
|
|
5870
6122
|
if (submittedInput !== '') {
|
|
5871
6123
|
setIsGenerating(true);
|
|
5872
6124
|
setInputValue('');
|
|
5873
|
-
await app.commands.execute(
|
|
5874
|
-
await app.commands.execute(
|
|
6125
|
+
await app.commands.execute(_commands__WEBPACK_IMPORTED_MODULE_5__.COMMAND_MITO_AI_OPEN_CHAT, { focusChatInput: false });
|
|
6126
|
+
await app.commands.execute(_commands__WEBPACK_IMPORTED_MODULE_5__.COMMAND_MITO_AI_SEND_AGENT_MESSAGE, { input: submittedInput });
|
|
5875
6127
|
setIsGenerating(false);
|
|
5876
6128
|
}
|
|
5877
6129
|
};
|
|
@@ -5905,20 +6157,20 @@ const NotebookFooter = ({ notebookTracker, app }) => {
|
|
|
5905
6157
|
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "notebook-footer-container" },
|
|
5906
6158
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "input-container" },
|
|
5907
6159
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: `input-wrapper ${isGenerating ? 'generating' : ''}` },
|
|
5908
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "input-icon-left" }, isGenerating ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
5909
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", { type: "text", value: inputValue, onChange: handleInputChange, onKeyDown: handleKeyDown, onKeyPress: handleKeyPress, onFocus: handleInputFocus, onBlur: handleInputBlur, placeholder:
|
|
6160
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "input-icon-left" }, isGenerating ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_LoadingCircle__WEBPACK_IMPORTED_MODULE_6__["default"], null)) : (react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, "\u2726"))),
|
|
6161
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", { type: "text", value: inputValue, onChange: handleInputChange, onKeyDown: handleKeyDown, onKeyPress: handleKeyPress, onFocus: handleInputFocus, onBlur: handleInputBlur, placeholder: getPlaceholder(), className: "prompt-input", autoComplete: "off", spellCheck: false, disabled: isGenerating || !isSignedUp }),
|
|
5910
6162
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "input-icons-right" },
|
|
5911
6163
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { className: "input-action-button", onClick: handleInputSubmit, onMouseDown: (e) => e.stopPropagation() }, "\u25B6")))),
|
|
5912
6164
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "button-row" },
|
|
5913
6165
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { onClick: () => addCell('code'), className: "footer-button", onMouseDown: (e) => e.stopPropagation() },
|
|
5914
6166
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "button-content" },
|
|
5915
6167
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "button-icon" },
|
|
5916
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
6168
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_NotebookFooter_CodeIcon__WEBPACK_IMPORTED_MODULE_7__["default"], null)),
|
|
5917
6169
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "button-label" }, "Python"))),
|
|
5918
6170
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { onClick: () => addCell('markdown'), className: "footer-button", onMouseDown: (e) => e.stopPropagation() },
|
|
5919
6171
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "button-content" },
|
|
5920
6172
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "button-icon" },
|
|
5921
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
6173
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_NotebookFooter_TextIcon__WEBPACK_IMPORTED_MODULE_8__["default"], null)),
|
|
5922
6174
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "button-label" }, "Text"))))));
|
|
5923
6175
|
};
|
|
5924
6176
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (NotebookFooter);
|
|
@@ -8229,7 +8481,7 @@ const AttachFileButton = ({ onFileUploaded, notebookTracker }) => {
|
|
|
8229
8481
|
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { style: { position: 'relative' } },
|
|
8230
8482
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", { ref: fileInputRef, type: "file", style: { display: 'none' }, onChange: handleFileSelect, accept: "*" }),
|
|
8231
8483
|
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: {
|
|
8232
|
-
opacity:
|
|
8484
|
+
...(isUploading && { opacity: 0.5 }),
|
|
8233
8485
|
cursor: isUploading ? 'not-allowed' : 'pointer'
|
|
8234
8486
|
} })));
|
|
8235
8487
|
};
|
|
@@ -9403,8 +9655,10 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
9403
9655
|
/* harmony export */ AppBuilderExcludeCellLabIcon: () => (/* binding */ AppBuilderExcludeCellLabIcon),
|
|
9404
9656
|
/* harmony export */ AppBuilderIncludeCellLabIcon: () => (/* binding */ AppBuilderIncludeCellLabIcon),
|
|
9405
9657
|
/* harmony export */ DeployLabIcon: () => (/* binding */ DeployLabIcon),
|
|
9658
|
+
/* harmony export */ EditLabIcon: () => (/* binding */ EditLabIcon),
|
|
9406
9659
|
/* harmony export */ NucleusLabIcon: () => (/* binding */ NucleusLabIcon),
|
|
9407
9660
|
/* harmony export */ OpenIndicatorLabIcon: () => (/* binding */ OpenIndicatorLabIcon),
|
|
9661
|
+
/* harmony export */ ResetCircleLabIcon: () => (/* binding */ ResetCircleLabIcon),
|
|
9408
9662
|
/* harmony export */ lightBulbLabIcon: () => (/* binding */ lightBulbLabIcon)
|
|
9409
9663
|
/* harmony export */ });
|
|
9410
9664
|
/* harmony import */ var _jupyterlab_ui_components__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @jupyterlab/ui-components */ "webpack/sharing/consume/default/@jupyterlab/ui-components");
|
|
@@ -9415,6 +9669,8 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
9415
9669
|
/* harmony import */ var _src_icons_AppBuilderExcludeCellIcon_svg__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../src/icons/AppBuilderExcludeCellIcon.svg */ "./src/icons/AppBuilderExcludeCellIcon.svg");
|
|
9416
9670
|
/* harmony import */ var _src_icons_AppBuilderIncludeCellIcon_svg__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../src/icons/AppBuilderIncludeCellIcon.svg */ "./src/icons/AppBuilderIncludeCellIcon.svg");
|
|
9417
9671
|
/* harmony import */ var _src_icons_App_DeployIcon_svg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../src/icons/App/DeployIcon.svg */ "./src/icons/App/DeployIcon.svg");
|
|
9672
|
+
/* harmony import */ var _src_icons_PencilIcon_svg__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../src/icons/PencilIcon.svg */ "./src/icons/PencilIcon.svg");
|
|
9673
|
+
/* harmony import */ var _src_icons_ResetCircleIcon_svg__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../src/icons/ResetCircleIcon.svg */ "./src/icons/ResetCircleIcon.svg");
|
|
9418
9674
|
/*
|
|
9419
9675
|
* Copyright (c) Saga Inc.
|
|
9420
9676
|
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
@@ -9426,6 +9682,8 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
9426
9682
|
|
|
9427
9683
|
|
|
9428
9684
|
|
|
9685
|
+
|
|
9686
|
+
|
|
9429
9687
|
const lightBulbLabIcon = new _jupyterlab_ui_components__WEBPACK_IMPORTED_MODULE_0__.LabIcon({
|
|
9430
9688
|
name: 'lightbulb-icon',
|
|
9431
9689
|
svgstr: _src_icons_LightbulbIcon_svg__WEBPACK_IMPORTED_MODULE_1__
|
|
@@ -9450,6 +9708,14 @@ const DeployLabIcon = new _jupyterlab_ui_components__WEBPACK_IMPORTED_MODULE_0__
|
|
|
9450
9708
|
name: 'deploy-icon',
|
|
9451
9709
|
svgstr: _src_icons_App_DeployIcon_svg__WEBPACK_IMPORTED_MODULE_6__
|
|
9452
9710
|
});
|
|
9711
|
+
const EditLabIcon = new _jupyterlab_ui_components__WEBPACK_IMPORTED_MODULE_0__.LabIcon({
|
|
9712
|
+
name: 'edit-icon',
|
|
9713
|
+
svgstr: _src_icons_PencilIcon_svg__WEBPACK_IMPORTED_MODULE_7__
|
|
9714
|
+
});
|
|
9715
|
+
const ResetCircleLabIcon = new _jupyterlab_ui_components__WEBPACK_IMPORTED_MODULE_0__.LabIcon({
|
|
9716
|
+
name: 'reset-circle-icon',
|
|
9717
|
+
svgstr: _src_icons_ResetCircleIcon_svg__WEBPACK_IMPORTED_MODULE_8__
|
|
9718
|
+
});
|
|
9453
9719
|
|
|
9454
9720
|
|
|
9455
9721
|
/***/ }),
|
|
@@ -9520,12 +9786,16 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
9520
9786
|
|
|
9521
9787
|
__webpack_require__.r(__webpack_exports__);
|
|
9522
9788
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
9789
|
+
/* harmony export */ getChatHistoryThread: () => (/* binding */ getChatHistoryThread),
|
|
9790
|
+
/* harmony export */ getChatHistoryThreads: () => (/* binding */ getChatHistoryThreads),
|
|
9523
9791
|
/* harmony export */ getDatabaseConnections: () => (/* binding */ getDatabaseConnections),
|
|
9524
9792
|
/* harmony export */ getRule: () => (/* binding */ getRule),
|
|
9525
9793
|
/* harmony export */ getRules: () => (/* binding */ getRules),
|
|
9526
9794
|
/* harmony export */ getSetting: () => (/* binding */ getSetting),
|
|
9795
|
+
/* harmony export */ getUserKey: () => (/* binding */ getUserKey),
|
|
9527
9796
|
/* harmony export */ logEvent: () => (/* binding */ logEvent),
|
|
9528
9797
|
/* harmony export */ setRule: () => (/* binding */ setRule),
|
|
9798
|
+
/* harmony export */ setUserKey: () => (/* binding */ setUserKey),
|
|
9529
9799
|
/* harmony export */ startStreamlitPreview: () => (/* binding */ startStreamlitPreview),
|
|
9530
9800
|
/* harmony export */ stopStreamlitPreview: () => (/* binding */ stopStreamlitPreview),
|
|
9531
9801
|
/* harmony export */ updateSettings: () => (/* binding */ updateSettings)
|
|
@@ -9535,6 +9805,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
9535
9805
|
* Copyright (c) Saga Inc.
|
|
9536
9806
|
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
9537
9807
|
*/
|
|
9808
|
+
|
|
9538
9809
|
/************************************
|
|
9539
9810
|
|
|
9540
9811
|
LOG ENDPOINTS
|
|
@@ -9557,7 +9828,6 @@ const logEvent = async (logEvent, params) => {
|
|
|
9557
9828
|
SETTINGS ENDPOINTS
|
|
9558
9829
|
|
|
9559
9830
|
************************************/
|
|
9560
|
-
|
|
9561
9831
|
const getSetting = async (settingsKey) => {
|
|
9562
9832
|
var _a;
|
|
9563
9833
|
const resp = await (0,_utils__WEBPACK_IMPORTED_MODULE_0__.requestAPI)(`settings/${settingsKey}`);
|
|
@@ -9623,10 +9893,14 @@ const getDatabaseConnections = async () => {
|
|
|
9623
9893
|
STREAMLIT PREVIEW ENDPOINTS
|
|
9624
9894
|
|
|
9625
9895
|
************************************/
|
|
9626
|
-
const startStreamlitPreview = async (notebookPath, force_recreate = false) => {
|
|
9896
|
+
const startStreamlitPreview = async (notebookPath, force_recreate = false, edit_prompt = '') => {
|
|
9627
9897
|
const response = await (0,_utils__WEBPACK_IMPORTED_MODULE_0__.requestAPI)('streamlit-preview', {
|
|
9628
9898
|
method: 'POST',
|
|
9629
|
-
body: JSON.stringify({
|
|
9899
|
+
body: JSON.stringify({
|
|
9900
|
+
notebook_path: notebookPath,
|
|
9901
|
+
force_recreate: force_recreate,
|
|
9902
|
+
edit_prompt: edit_prompt
|
|
9903
|
+
})
|
|
9630
9904
|
});
|
|
9631
9905
|
if (response.error) {
|
|
9632
9906
|
throw new Error(response.error.message);
|
|
@@ -9641,6 +9915,44 @@ const stopStreamlitPreview = async (previewId) => {
|
|
|
9641
9915
|
throw new Error(response.error.message);
|
|
9642
9916
|
}
|
|
9643
9917
|
};
|
|
9918
|
+
/************************************
|
|
9919
|
+
|
|
9920
|
+
USER ENDPOINTS
|
|
9921
|
+
|
|
9922
|
+
************************************/
|
|
9923
|
+
const getUserKey = async (key) => {
|
|
9924
|
+
var _a;
|
|
9925
|
+
const resp = await (0,_utils__WEBPACK_IMPORTED_MODULE_0__.requestAPI)(`user/${key}`);
|
|
9926
|
+
if (resp.error) {
|
|
9927
|
+
throw new Error(resp.error.message);
|
|
9928
|
+
}
|
|
9929
|
+
return (_a = resp.data) === null || _a === void 0 ? void 0 : _a.value;
|
|
9930
|
+
};
|
|
9931
|
+
const setUserKey = async (key, value) => {
|
|
9932
|
+
const resp = await (0,_utils__WEBPACK_IMPORTED_MODULE_0__.requestAPI)(`user/${key}`, {
|
|
9933
|
+
method: 'PUT',
|
|
9934
|
+
body: JSON.stringify({ value: value }),
|
|
9935
|
+
});
|
|
9936
|
+
if (resp.error) {
|
|
9937
|
+
throw new Error(resp.error.message);
|
|
9938
|
+
}
|
|
9939
|
+
return resp.data || '';
|
|
9940
|
+
};
|
|
9941
|
+
const getChatHistoryThreads = async () => {
|
|
9942
|
+
var _a;
|
|
9943
|
+
const resp = await (0,_utils__WEBPACK_IMPORTED_MODULE_0__.requestAPI)('chat-history/threads');
|
|
9944
|
+
if (resp.error) {
|
|
9945
|
+
throw new Error(resp.error.message);
|
|
9946
|
+
}
|
|
9947
|
+
return ((_a = resp.data) === null || _a === void 0 ? void 0 : _a.threads) || [];
|
|
9948
|
+
};
|
|
9949
|
+
const getChatHistoryThread = async (threadId) => {
|
|
9950
|
+
const resp = await (0,_utils__WEBPACK_IMPORTED_MODULE_0__.requestAPI)(`chat-history/threads/${threadId}`);
|
|
9951
|
+
if (resp.error) {
|
|
9952
|
+
throw new Error(resp.error.message);
|
|
9953
|
+
}
|
|
9954
|
+
return resp.data;
|
|
9955
|
+
};
|
|
9644
9956
|
|
|
9645
9957
|
|
|
9646
9958
|
/***/ }),
|
|
@@ -11306,6 +11618,117 @@ const isElectronBasedFrontend = () => {
|
|
|
11306
11618
|
};
|
|
11307
11619
|
|
|
11308
11620
|
|
|
11621
|
+
/***/ }),
|
|
11622
|
+
|
|
11623
|
+
/***/ "./lib/utils/userSignupEvents.js":
|
|
11624
|
+
/*!***************************************!*\
|
|
11625
|
+
!*** ./lib/utils/userSignupEvents.js ***!
|
|
11626
|
+
\***************************************/
|
|
11627
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
11628
|
+
|
|
11629
|
+
__webpack_require__.r(__webpack_exports__);
|
|
11630
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
11631
|
+
/* harmony export */ userSignupEvents: () => (/* binding */ userSignupEvents)
|
|
11632
|
+
/* harmony export */ });
|
|
11633
|
+
/* harmony import */ var _lumino_signaling__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/signaling */ "webpack/sharing/consume/default/@lumino/signaling");
|
|
11634
|
+
/* harmony import */ var _lumino_signaling__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_lumino_signaling__WEBPACK_IMPORTED_MODULE_0__);
|
|
11635
|
+
/*
|
|
11636
|
+
* Copyright (c) Saga Inc.
|
|
11637
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
11638
|
+
*/
|
|
11639
|
+
|
|
11640
|
+
/**
|
|
11641
|
+
* Event emitter for user signup events
|
|
11642
|
+
*/
|
|
11643
|
+
class UserSignupEventEmitter {
|
|
11644
|
+
constructor() {
|
|
11645
|
+
this._signupSuccess = new _lumino_signaling__WEBPACK_IMPORTED_MODULE_0__.Signal(this);
|
|
11646
|
+
}
|
|
11647
|
+
/**
|
|
11648
|
+
* Signal emitted when a user successfully signs up
|
|
11649
|
+
*/
|
|
11650
|
+
get signupSuccess() {
|
|
11651
|
+
return this._signupSuccess;
|
|
11652
|
+
}
|
|
11653
|
+
/**
|
|
11654
|
+
* Emit a signup success event
|
|
11655
|
+
*/
|
|
11656
|
+
emitSignupSuccess() {
|
|
11657
|
+
this._signupSuccess.emit();
|
|
11658
|
+
}
|
|
11659
|
+
}
|
|
11660
|
+
// Create a singleton instance
|
|
11661
|
+
const userSignupEvents = new UserSignupEventEmitter();
|
|
11662
|
+
|
|
11663
|
+
|
|
11664
|
+
/***/ }),
|
|
11665
|
+
|
|
11666
|
+
/***/ "./lib/utils/userSignupState.js":
|
|
11667
|
+
/*!**************************************!*\
|
|
11668
|
+
!*** ./lib/utils/userSignupState.js ***!
|
|
11669
|
+
\**************************************/
|
|
11670
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
11671
|
+
|
|
11672
|
+
__webpack_require__.r(__webpack_exports__);
|
|
11673
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
11674
|
+
/* harmony export */ checkUserSignupState: () => (/* binding */ checkUserSignupState)
|
|
11675
|
+
/* harmony export */ });
|
|
11676
|
+
/* harmony import */ var _restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../restAPI/RestAPI */ "./lib/restAPI/RestAPI.js");
|
|
11677
|
+
/*
|
|
11678
|
+
* Copyright (c) Saga Inc.
|
|
11679
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
11680
|
+
*/
|
|
11681
|
+
|
|
11682
|
+
/**
|
|
11683
|
+
* Determines if a user should be considered "signed up" based on:
|
|
11684
|
+
* 1. Having an email address, OR
|
|
11685
|
+
* 2. Having existing chat history threads
|
|
11686
|
+
*
|
|
11687
|
+
* This ensures consistent behavior across all components that need to check
|
|
11688
|
+
* if a user should have access to Mito AI features.
|
|
11689
|
+
*/
|
|
11690
|
+
const checkUserSignupState = async () => {
|
|
11691
|
+
try {
|
|
11692
|
+
// Check if user has an email address
|
|
11693
|
+
const userEmail = await (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_0__.getUserKey)('user_email');
|
|
11694
|
+
const hasEmail = userEmail !== "" && userEmail !== undefined;
|
|
11695
|
+
if (hasEmail) {
|
|
11696
|
+
return {
|
|
11697
|
+
isSignedUp: true,
|
|
11698
|
+
hasEmail: true,
|
|
11699
|
+
hasChatHistory: false
|
|
11700
|
+
};
|
|
11701
|
+
}
|
|
11702
|
+
// Check for existing chat history threads
|
|
11703
|
+
const chatThreads = await (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_0__.getChatHistoryThreads)();
|
|
11704
|
+
const hasThreads = chatThreads.length > 0;
|
|
11705
|
+
if (!hasThreads) {
|
|
11706
|
+
return {
|
|
11707
|
+
isSignedUp: false,
|
|
11708
|
+
hasEmail: false,
|
|
11709
|
+
hasChatHistory: false
|
|
11710
|
+
};
|
|
11711
|
+
}
|
|
11712
|
+
// Verify the first thread has actual content (not just default empty thread)
|
|
11713
|
+
const firstThread = await (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_0__.getChatHistoryThread)(chatThreads[0].thread_id);
|
|
11714
|
+
const hasActualChatHistory = firstThread.display_history.length > 0;
|
|
11715
|
+
return {
|
|
11716
|
+
isSignedUp: hasActualChatHistory,
|
|
11717
|
+
hasEmail: false,
|
|
11718
|
+
hasChatHistory: hasActualChatHistory
|
|
11719
|
+
};
|
|
11720
|
+
}
|
|
11721
|
+
catch (error) {
|
|
11722
|
+
console.error('Failed to check user signup state:', error);
|
|
11723
|
+
return {
|
|
11724
|
+
isSignedUp: false,
|
|
11725
|
+
hasEmail: false,
|
|
11726
|
+
hasChatHistory: false
|
|
11727
|
+
};
|
|
11728
|
+
}
|
|
11729
|
+
};
|
|
11730
|
+
|
|
11731
|
+
|
|
11309
11732
|
/***/ }),
|
|
11310
11733
|
|
|
11311
11734
|
/***/ "./lib/utils/version_check.js":
|
|
@@ -13320,7 +13743,21 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
13320
13743
|
|
|
13321
13744
|
.cta-carousel-button {
|
|
13322
13745
|
margin-top: 8px;
|
|
13323
|
-
}
|
|
13746
|
+
}
|
|
13747
|
+
|
|
13748
|
+
.cta-logo-container {
|
|
13749
|
+
margin: 0 auto 8px;
|
|
13750
|
+
display: block;
|
|
13751
|
+
text-align: center;
|
|
13752
|
+
}
|
|
13753
|
+
|
|
13754
|
+
.cta-title {
|
|
13755
|
+
display: block;
|
|
13756
|
+
text-align: center;
|
|
13757
|
+
font-weight: bold;
|
|
13758
|
+
font-size: 20px;
|
|
13759
|
+
margin-bottom: 15px;
|
|
13760
|
+
}`, "",{"version":3,"sources":["webpack://./style/CTACarousel.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;IACI,WAAW;AACf;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,uBAAuB;IACvB,iBAAiB;AACrB;;AAEA;IACI,cAAc;IACd,kBAAkB;IAClB,eAAe;IACf,+BAA+B;IAC/B,mBAAmB;IACnB,OAAO;IACP,gBAAgB;IAChB,iBAAiB;IACjB,cAAc;IACd,UAAU;IACV,oCAAoC;AACxC;;AAEA;IACI,aAAa;IACb,uBAAuB;IACvB,QAAQ;IACR,eAAe;AACnB;;AAEA;IACI,WAAW;IACX,YAAY;IACZ,kBAAkB;IAClB,yCAAyC;IACzC,eAAe;IACf,sCAAsC;IACtC,sBAAsB;AAC1B;;AAEA;IACI,mCAAmC;AACvC;;AAEA;IACI,eAAe;AACnB;;AAEA;IACI,kBAAkB;IAClB,cAAc;IACd,kBAAkB;AACtB;;AAEA;IACI,cAAc;IACd,kBAAkB;IAClB,iBAAiB;IACjB,eAAe;IACf,mBAAmB;AACvB","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.cta-carousel {\n width: 100%;\n}\n\n.cta-carousel-container {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100px;\n}\n\n.cta-message {\n display: block;\n text-align: center;\n font-size: 14px;\n color: var(--jp-ui-font-color3);\n margin-bottom: 15px;\n flex: 1;\n line-height: 1.3;\n min-height: 2.5em;\n padding: 0 8px;\n opacity: 1;\n transition: opacity 0.5s ease-in-out;\n}\n\n.cta-carousel-dots {\n display: flex;\n justify-content: center;\n gap: 8px;\n margin-top: 4px;\n}\n\n.cta-carousel-dot {\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background-color: var(--jp-layout-color3);\n cursor: pointer;\n transition: background-color 0.3s ease;\n box-sizing: border-box;\n}\n\n.cta-carousel-dot.active {\n background-color: var(--purple-500);\n}\n\n.cta-carousel-button {\n margin-top: 8px;\n}\n\n.cta-logo-container {\n margin: 0 auto 8px;\n display: block;\n text-align: center;\n}\n\n.cta-title {\n display: block;\n text-align: center;\n font-weight: bold;\n font-size: 20px;\n margin-bottom: 15px;\n}"],"sourceRoot":""}]);
|
|
13324
13761
|
// Exports
|
|
13325
13762
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
13326
13763
|
|
|
@@ -13814,6 +14251,17 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
13814
14251
|
container-type: inline-size;
|
|
13815
14252
|
}
|
|
13816
14253
|
|
|
14254
|
+
.chat-taskpane.disabled button:not(.signup-form-container):not(.signup-form-container *):not(.chat-taskpane-header-left):not(.chat-taskpane-header-left *) {
|
|
14255
|
+
opacity: 0.5;
|
|
14256
|
+
pointer-events: none;
|
|
14257
|
+
}
|
|
14258
|
+
|
|
14259
|
+
.chat-taskpane.disabled textarea:not(.signup-form-container):not(.signup-form-container *) {
|
|
14260
|
+
opacity: 0.5;
|
|
14261
|
+
pointer-events: none;
|
|
14262
|
+
cursor: not-allowed;
|
|
14263
|
+
}
|
|
14264
|
+
|
|
13817
14265
|
.suggestions-container {
|
|
13818
14266
|
max-width: 600px;
|
|
13819
14267
|
margin: 0 auto;
|
|
@@ -14006,7 +14454,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
14006
14454
|
display: none;
|
|
14007
14455
|
}
|
|
14008
14456
|
}
|
|
14009
|
-
`, "",{"version":3,"sources":["webpack://./style/ChatTaskpane.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;EACE,aAAa;EACb,sBAAsB;EACtB,YAAY;EACZ,yDAAyD;EACzD,6BAA6B;EAC7B,WAAW;EACX,sBAAsB;EACtB,kBAAkB;EAClB;;;;KAIG;EACH,gBAAgB;EAChB,kBAAkB;EAClB,mBAAmB;EACnB,oBAAoB;EACpB;;;;GAIC;EACD,2BAA2B;AAC7B;;AAEA;EACE,gBAAgB;EAChB,cAAc;EACd,aAAa;EACb,2BAA2B;AAC7B;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,8BAA8B;EAC9B,mBAAmB;EACnB,iBAAiB;EACjB,mBAAmB;EACnB,gBAAgB;EAChB,2BAA2B;EAC3B,MAAM;EACN,sCAAsC;EACtC,8CAA8C;EAC9C,kDAAkD;EAClD,UAAU;EACV,wCAAwC;AAC1C;;AAEA;EACE,aAAa;EACb,QAAQ;AACV;;AAEA;EACE,aAAa;EACb,QAAQ;AACV;;AAEA;EACE,eAAe;EACf,iBAAiB;EACjB,SAAS;AACX;;AAEA;EACE,aAAa;EACb,QAAQ;AACV;;AAEA;EACE,OAAO;EACP,gBAAgB;EAChB,oBAAoB;EACpB,aAAa;EACb,sBAAsB;AACxB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,uBAAuB;EACvB,mBAAmB;EACnB,YAAY;EACZ,iBAAiB;EACjB,gBAAgB;EAChB,kBAAkB;EAClB,8BAA8B;EAC9B,aAAa;EACb,gCAAgC;EAChC,2BAA2B;EAC3B,iBAAiB;EACjB,kBAAkB;EAClB,cAAc,EAAE,qDAAqD;AACvE;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,cAAc;EACd,cAAc;AAChB;;AAEA,+CAA+C;AAC/C;EACE;IACE,aAAa;EACf;AACF;;AAEA;EACE,gBAAgB;EAChB,mBAAmB;AACrB;;AAEA;EACE,aAAa;EACb,8BAA8B;EAC9B,mBAAmB;AACrB;;AAEA;EACE,aAAa;EACb,QAAQ;EACR,mBAAmB;EACnB,2BAA2B;AAC7B;AACA;EACE,oBAAoB;AACtB;AACA;EACE,mCAAmC;EACnC,wBAAwB;EACxB,iBAAiB;AACnB;;AAEA;EACE,mCAAmC;EACnC,6CAA6C;AAC/C;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,aAAa;EACb,kBAAkB;EAClB,mBAAmB;EACnB,QAAQ;EACR,uBAAuB;AACzB;;AAEA;EACE,aAAa;EACb,QAAQ;EACR,WAAW;AACb;;AAEA;EACE,OAAO;AACT;;AAEA;EACE,WAAW;EACX,UAAU;AACZ;;AAEA,yCAAyC;AACzC;EACE,aAAa;EACb,iBAAiB;EACjB,gBAAgB;EAChB,QAAQ;EACR,oBAAoB;EACpB,aAAa;EACb,sCAAsC;EACtC,iCAAiC;EACjC,mEAAmE;EACnE,oBAAoB;EACpB,sBAAsB;EACtB,4BAA4B;EAC5B,8BAA8B;AAChC;;AAEA,0CAA0C;AAC1C;EACE,yCAAyC;EACzC,+BAA+B;EAC/B,yCAAyC;EACzC,mBAAmB;EACnB,iBAAiB;EACjB,eAAe;EACf,eAAe;EACf,6CAA6C;EAC7C,cAAc;EACd,kCAAkC;EAClC,mBAAmB;EACnB,kBAAkB;EAClB,4CAA4C;EAC5C,gBAAgB;EAChB,6BAA6B;EAC7B,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,yCAAyC;AAC3C;;AAEA,iFAAiF;AACjF;EACE;IACE,aAAa;EACf;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.chat-taskpane {\n display: flex;\n flex-direction: column;\n height: 100%;\n background-color: var(--chat-background-color) !important;\n --jp-sidebar-min-width: 350px;\n width: 100%;\n box-sizing: border-box;\n overflow-y: hidden;\n /* \n Don't set padding on top from the taskpane so we can instead\n set the padding on the chat-taskpane-header instead to make \n sure the sticky header covers all of the content behind it. \n */\n padding-top: 0px;\n padding-left: 10px;\n padding-right: 10px;\n padding-bottom: 10px;\n /*\n 'container-type: inline-size' enables container queries on this element.\n This allows child elements to use @container rules to react to the width of .chat-taskpane,\n rather than the viewport.\n */\n container-type: inline-size;\n}\n\n.suggestions-container {\n max-width: 600px;\n margin: 0 auto;\n display: flex;\n justify-content: flex-start;\n}\n\n.chat-taskpane-header {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n padding-top: 10px;\n padding-bottom: 5px;\n position: sticky;\n /* Make the header sticky */\n top: 0;\n /* Stick to the top of the container */\n background-color: var(--chat-background-color);\n /* Ensure background color covers content behind */\n z-index: 1;\n /* Ensure it stays above other content */\n}\n\n.chat-taskpane-header-left {\n display: flex;\n gap: 8px;\n}\n\n.chat-taskpane-header-right {\n display: flex;\n gap: 8px;\n}\n\n.chat-taskpane-header-title {\n font-size: 14px;\n font-weight: bold;\n margin: 0;\n}\n\n.chat-taskpane-header-buttons {\n display: flex;\n gap: 8px;\n}\n\n.chat-messages {\n flex: 1;\n overflow-y: auto;\n padding-bottom: 10px;\n display: flex;\n flex-direction: column;\n}\n\n.chat-empty-message {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n height: auto;\n min-height: 200px;\n max-height: 100%;\n text-align: center;\n color: var(--muted-text-color);\n padding: 20px;\n /* Add container query support */\n container-type: inline-size;\n user-select: none;\n overflow-y: hidden;\n margin: auto 0; /* This centers it vertically in the flex container */\n}\n\n.chat-empty-message .long-message {\n font-size: 16px;\n line-height: 1.5;\n max-width: 80%;\n margin: 0 auto;\n}\n\n/* Use container query instead of media query */\n@container (max-width: 300px) {\n .chat-empty-message .long-message {\n display: none;\n }\n}\n\n.chat-loading-message {\n margin-top: 20px;\n margin-bottom: 20px;\n}\n\n.chat-controls {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.chat-controls-left {\n display: flex;\n gap: 4px;\n align-items: center;\n justify-content: flex-start;\n}\n.chat-controls-left > * {\n margin: 0 !important;\n}\n.submit-button {\n background-color: var(--purple-400);\n color: var(--purple-700);\n padding: 2px 10px;\n}\n\n.submit-button:hover {\n background-color: var(--purple-500);\n transition: background-color 0.2s ease-in-out;\n}\n\n.stop-agent-button {\n margin-top: 8px;\n}\n\n.stop-agent-button-content {\n display: flex;\n text-align: center;\n align-items: center;\n gap: 8px;\n justify-content: center;\n}\n\n.agent-controls {\n display: flex;\n gap: 8px;\n width: 100%;\n}\n\n.agent-start-button {\n flex: 1;\n}\n\n.agent-cancel-button {\n width: 32px;\n padding: 0;\n}\n\n/* Add suggestion box container styling */\n.chat-suggestions {\n display: flex;\n flex-wrap: nowrap;\n overflow-x: auto;\n gap: 8px;\n padding-bottom: 16px;\n margin: 8px 0;\n /* smooth scrolling on touch devices */\n -webkit-overflow-scrolling: touch;\n /* Mask properties will be applied dynamically through JavaScript */\n mask-size: 100% 100%;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n -webkit-mask-repeat: no-repeat;\n}\n\n/* Add individual suggestion box styling */\n.suggestion-box {\n background-color: var(--jp-layout-color1);\n color: var(--jp-ui-font-color1);\n border: 1px solid var(--jp-border-color2);\n border-radius: 16px;\n padding: 6px 12px;\n font-size: 14px;\n cursor: pointer;\n transition: background-color 0.2s ease-in-out;\n flex-shrink: 0;\n /* wrap text onto multiple lines */\n white-space: normal;\n text-align: center;\n /* limit width for wrapping into two lines */\n max-width: 140px;\n /* align content vertically */\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.suggestion-box:hover {\n background-color: var(--jp-border-color2);\n}\n\n/* Hide the 'Submit' text in the submit button when the chat-taskpane is narrow */\n@container (max-width: 350px) {\n .submit-button .submit-text {\n display: none;\n }\n}\n"],"sourceRoot":""}]);
|
|
14457
|
+
`, "",{"version":3,"sources":["webpack://./style/ChatTaskpane.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;EACE,aAAa;EACb,sBAAsB;EACtB,YAAY;EACZ,yDAAyD;EACzD,6BAA6B;EAC7B,WAAW;EACX,sBAAsB;EACtB,kBAAkB;EAClB;;;;KAIG;EACH,gBAAgB;EAChB,kBAAkB;EAClB,mBAAmB;EACnB,oBAAoB;EACpB;;;;GAIC;EACD,2BAA2B;AAC7B;;AAEA;EACE,YAAY;EACZ,oBAAoB;AACtB;;AAEA;EACE,YAAY;EACZ,oBAAoB;EACpB,mBAAmB;AACrB;;AAEA;EACE,gBAAgB;EAChB,cAAc;EACd,aAAa;EACb,2BAA2B;AAC7B;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,8BAA8B;EAC9B,mBAAmB;EACnB,iBAAiB;EACjB,mBAAmB;EACnB,gBAAgB;EAChB,2BAA2B;EAC3B,MAAM;EACN,sCAAsC;EACtC,8CAA8C;EAC9C,kDAAkD;EAClD,UAAU;EACV,wCAAwC;AAC1C;;AAEA;EACE,aAAa;EACb,QAAQ;AACV;;AAEA;EACE,aAAa;EACb,QAAQ;AACV;;AAEA;EACE,eAAe;EACf,iBAAiB;EACjB,SAAS;AACX;;AAEA;EACE,aAAa;EACb,QAAQ;AACV;;AAEA;EACE,OAAO;EACP,gBAAgB;EAChB,oBAAoB;EACpB,aAAa;EACb,sBAAsB;AACxB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,uBAAuB;EACvB,mBAAmB;EACnB,YAAY;EACZ,iBAAiB;EACjB,gBAAgB;EAChB,kBAAkB;EAClB,8BAA8B;EAC9B,aAAa;EACb,gCAAgC;EAChC,2BAA2B;EAC3B,iBAAiB;EACjB,kBAAkB;EAClB,cAAc,EAAE,qDAAqD;AACvE;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,cAAc;EACd,cAAc;AAChB;;AAEA,+CAA+C;AAC/C;EACE;IACE,aAAa;EACf;AACF;;AAEA;EACE,gBAAgB;EAChB,mBAAmB;AACrB;;AAEA;EACE,aAAa;EACb,8BAA8B;EAC9B,mBAAmB;AACrB;;AAEA;EACE,aAAa;EACb,QAAQ;EACR,mBAAmB;EACnB,2BAA2B;AAC7B;AACA;EACE,oBAAoB;AACtB;AACA;EACE,mCAAmC;EACnC,wBAAwB;EACxB,iBAAiB;AACnB;;AAEA;EACE,mCAAmC;EACnC,6CAA6C;AAC/C;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,aAAa;EACb,kBAAkB;EAClB,mBAAmB;EACnB,QAAQ;EACR,uBAAuB;AACzB;;AAEA;EACE,aAAa;EACb,QAAQ;EACR,WAAW;AACb;;AAEA;EACE,OAAO;AACT;;AAEA;EACE,WAAW;EACX,UAAU;AACZ;;AAEA,yCAAyC;AACzC;EACE,aAAa;EACb,iBAAiB;EACjB,gBAAgB;EAChB,QAAQ;EACR,oBAAoB;EACpB,aAAa;EACb,sCAAsC;EACtC,iCAAiC;EACjC,mEAAmE;EACnE,oBAAoB;EACpB,sBAAsB;EACtB,4BAA4B;EAC5B,8BAA8B;AAChC;;AAEA,0CAA0C;AAC1C;EACE,yCAAyC;EACzC,+BAA+B;EAC/B,yCAAyC;EACzC,mBAAmB;EACnB,iBAAiB;EACjB,eAAe;EACf,eAAe;EACf,6CAA6C;EAC7C,cAAc;EACd,kCAAkC;EAClC,mBAAmB;EACnB,kBAAkB;EAClB,4CAA4C;EAC5C,gBAAgB;EAChB,6BAA6B;EAC7B,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,yCAAyC;AAC3C;;AAEA,iFAAiF;AACjF;EACE;IACE,aAAa;EACf;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.chat-taskpane {\n display: flex;\n flex-direction: column;\n height: 100%;\n background-color: var(--chat-background-color) !important;\n --jp-sidebar-min-width: 350px;\n width: 100%;\n box-sizing: border-box;\n overflow-y: hidden;\n /* \n Don't set padding on top from the taskpane so we can instead\n set the padding on the chat-taskpane-header instead to make \n sure the sticky header covers all of the content behind it. \n */\n padding-top: 0px;\n padding-left: 10px;\n padding-right: 10px;\n padding-bottom: 10px;\n /*\n 'container-type: inline-size' enables container queries on this element.\n This allows child elements to use @container rules to react to the width of .chat-taskpane,\n rather than the viewport.\n */\n container-type: inline-size;\n}\n\n.chat-taskpane.disabled button:not(.signup-form-container):not(.signup-form-container *):not(.chat-taskpane-header-left):not(.chat-taskpane-header-left *) {\n opacity: 0.5;\n pointer-events: none;\n}\n\n.chat-taskpane.disabled textarea:not(.signup-form-container):not(.signup-form-container *) {\n opacity: 0.5;\n pointer-events: none;\n cursor: not-allowed;\n}\n\n.suggestions-container {\n max-width: 600px;\n margin: 0 auto;\n display: flex;\n justify-content: flex-start;\n}\n\n.chat-taskpane-header {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n padding-top: 10px;\n padding-bottom: 5px;\n position: sticky;\n /* Make the header sticky */\n top: 0;\n /* Stick to the top of the container */\n background-color: var(--chat-background-color);\n /* Ensure background color covers content behind */\n z-index: 1;\n /* Ensure it stays above other content */\n}\n\n.chat-taskpane-header-left {\n display: flex;\n gap: 8px;\n}\n\n.chat-taskpane-header-right {\n display: flex;\n gap: 8px;\n}\n\n.chat-taskpane-header-title {\n font-size: 14px;\n font-weight: bold;\n margin: 0;\n}\n\n.chat-taskpane-header-buttons {\n display: flex;\n gap: 8px;\n}\n\n.chat-messages {\n flex: 1;\n overflow-y: auto;\n padding-bottom: 10px;\n display: flex;\n flex-direction: column;\n}\n\n.chat-empty-message {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n height: auto;\n min-height: 200px;\n max-height: 100%;\n text-align: center;\n color: var(--muted-text-color);\n padding: 20px;\n /* Add container query support */\n container-type: inline-size;\n user-select: none;\n overflow-y: hidden;\n margin: auto 0; /* This centers it vertically in the flex container */\n}\n\n.chat-empty-message .long-message {\n font-size: 16px;\n line-height: 1.5;\n max-width: 80%;\n margin: 0 auto;\n}\n\n/* Use container query instead of media query */\n@container (max-width: 300px) {\n .chat-empty-message .long-message {\n display: none;\n }\n}\n\n.chat-loading-message {\n margin-top: 20px;\n margin-bottom: 20px;\n}\n\n.chat-controls {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.chat-controls-left {\n display: flex;\n gap: 4px;\n align-items: center;\n justify-content: flex-start;\n}\n.chat-controls-left > * {\n margin: 0 !important;\n}\n.submit-button {\n background-color: var(--purple-400);\n color: var(--purple-700);\n padding: 2px 10px;\n}\n\n.submit-button:hover {\n background-color: var(--purple-500);\n transition: background-color 0.2s ease-in-out;\n}\n\n.stop-agent-button {\n margin-top: 8px;\n}\n\n.stop-agent-button-content {\n display: flex;\n text-align: center;\n align-items: center;\n gap: 8px;\n justify-content: center;\n}\n\n.agent-controls {\n display: flex;\n gap: 8px;\n width: 100%;\n}\n\n.agent-start-button {\n flex: 1;\n}\n\n.agent-cancel-button {\n width: 32px;\n padding: 0;\n}\n\n/* Add suggestion box container styling */\n.chat-suggestions {\n display: flex;\n flex-wrap: nowrap;\n overflow-x: auto;\n gap: 8px;\n padding-bottom: 16px;\n margin: 8px 0;\n /* smooth scrolling on touch devices */\n -webkit-overflow-scrolling: touch;\n /* Mask properties will be applied dynamically through JavaScript */\n mask-size: 100% 100%;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n -webkit-mask-repeat: no-repeat;\n}\n\n/* Add individual suggestion box styling */\n.suggestion-box {\n background-color: var(--jp-layout-color1);\n color: var(--jp-ui-font-color1);\n border: 1px solid var(--jp-border-color2);\n border-radius: 16px;\n padding: 6px 12px;\n font-size: 14px;\n cursor: pointer;\n transition: background-color 0.2s ease-in-out;\n flex-shrink: 0;\n /* wrap text onto multiple lines */\n white-space: normal;\n text-align: center;\n /* limit width for wrapping into two lines */\n max-width: 140px;\n /* align content vertically */\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.suggestion-box:hover {\n background-color: var(--jp-border-color2);\n}\n\n/* Hide the 'Submit' text in the submit button when the chat-taskpane is narrow */\n@container (max-width: 350px) {\n .submit-button .submit-text {\n display: none;\n }\n}\n"],"sourceRoot":""}]);
|
|
14010
14458
|
// Exports
|
|
14011
14459
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
14012
14460
|
|
|
@@ -14702,10 +15150,115 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
14702
15150
|
|
|
14703
15151
|
/***/ }),
|
|
14704
15152
|
|
|
14705
|
-
/***/ "./node_modules/css-loader/dist/cjs.js!./style/
|
|
14706
|
-
|
|
14707
|
-
!*** ./node_modules/css-loader/dist/cjs.js!./style/
|
|
14708
|
-
|
|
15153
|
+
/***/ "./node_modules/css-loader/dist/cjs.js!./style/EditAppDropdown.css":
|
|
15154
|
+
/*!*************************************************************************!*\
|
|
15155
|
+
!*** ./node_modules/css-loader/dist/cjs.js!./style/EditAppDropdown.css ***!
|
|
15156
|
+
\*************************************************************************/
|
|
15157
|
+
/***/ ((module, __webpack_exports__, __webpack_require__) => {
|
|
15158
|
+
|
|
15159
|
+
__webpack_require__.r(__webpack_exports__);
|
|
15160
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
15161
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
15162
|
+
/* harmony export */ });
|
|
15163
|
+
/* 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");
|
|
15164
|
+
/* 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__);
|
|
15165
|
+
/* 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");
|
|
15166
|
+
/* 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__);
|
|
15167
|
+
// Imports
|
|
15168
|
+
|
|
15169
|
+
|
|
15170
|
+
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()));
|
|
15171
|
+
// Module
|
|
15172
|
+
___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
15173
|
+
* Copyright (c) Saga Inc.
|
|
15174
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
15175
|
+
*/
|
|
15176
|
+
|
|
15177
|
+
/* UpdateAppDropdown Styles */
|
|
15178
|
+
|
|
15179
|
+
.update-app-dropdown {
|
|
15180
|
+
position: absolute;
|
|
15181
|
+
top: 100%;
|
|
15182
|
+
left: 0;
|
|
15183
|
+
z-index: 1000;
|
|
15184
|
+
background-color: var(--jp-layout-color1);
|
|
15185
|
+
border: 1px solid var(--jp-border-color1);
|
|
15186
|
+
border-radius: 3px;
|
|
15187
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
|
|
15188
|
+
min-width: 300px;
|
|
15189
|
+
max-width: 500px;
|
|
15190
|
+
}
|
|
15191
|
+
|
|
15192
|
+
.update-app-dropdown-content {
|
|
15193
|
+
padding: 12px;
|
|
15194
|
+
}
|
|
15195
|
+
|
|
15196
|
+
.update-app-dropdown-label {
|
|
15197
|
+
display: block;
|
|
15198
|
+
margin-bottom: 8px;
|
|
15199
|
+
font-weight: 500;
|
|
15200
|
+
color: var(--jp-ui-font-color1);
|
|
15201
|
+
font-size: var(--jp-ui-font-size1);
|
|
15202
|
+
}
|
|
15203
|
+
|
|
15204
|
+
.update-app-dropdown-textarea {
|
|
15205
|
+
width: 100%;
|
|
15206
|
+
min-height: 100px;
|
|
15207
|
+
padding: 8px;
|
|
15208
|
+
border: 1px solid var(--jp-border-color1);
|
|
15209
|
+
border-radius: 3px;
|
|
15210
|
+
font-family: var(--jp-ui-font-family);
|
|
15211
|
+
font-size: var(--jp-ui-font-size1);
|
|
15212
|
+
resize: vertical;
|
|
15213
|
+
box-sizing: border-box;
|
|
15214
|
+
background-color: var(--jp-input-background);
|
|
15215
|
+
color: var(--jp-ui-font-color1);
|
|
15216
|
+
}
|
|
15217
|
+
|
|
15218
|
+
.update-app-dropdown-buttons {
|
|
15219
|
+
display: flex;
|
|
15220
|
+
justify-content: flex-end;
|
|
15221
|
+
gap: 8px;
|
|
15222
|
+
margin-top: 12px;
|
|
15223
|
+
}
|
|
15224
|
+
|
|
15225
|
+
.update-app-dropdown-button {
|
|
15226
|
+
padding: 4px 8px;
|
|
15227
|
+
border: none;
|
|
15228
|
+
border-radius: 3px;
|
|
15229
|
+
cursor: pointer;
|
|
15230
|
+
font-family: var(--jp-ui-font-family);
|
|
15231
|
+
font-size: var(--jp-ui-font-size0);
|
|
15232
|
+
}
|
|
15233
|
+
|
|
15234
|
+
.update-app-dropdown-button-cancel {
|
|
15235
|
+
background-color: var(--jp-layout-color2);
|
|
15236
|
+
color: var(--jp-ui-font-color1);
|
|
15237
|
+
}
|
|
15238
|
+
|
|
15239
|
+
.update-app-dropdown-button-submit {
|
|
15240
|
+
|
|
15241
|
+
background-color: var(--purple-300);
|
|
15242
|
+
color: var(--purple-700);
|
|
15243
|
+
cursor: pointer;
|
|
15244
|
+
}
|
|
15245
|
+
|
|
15246
|
+
.update-app-dropdown-button-submit.disabled {
|
|
15247
|
+
background-color: var(--jp-layout-color2);
|
|
15248
|
+
color: var(--jp-ui-font-color2);
|
|
15249
|
+
cursor: not-allowed;
|
|
15250
|
+
}
|
|
15251
|
+
`, "",{"version":3,"sources":["webpack://./style/EditAppDropdown.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF,6BAA6B;;AAE7B;IACI,kBAAkB;IAClB,SAAS;IACT,OAAO;IACP,aAAa;IACb,yCAAyC;IACzC,yCAAyC;IACzC,kBAAkB;IAClB,yCAAyC;IACzC,gBAAgB;IAChB,gBAAgB;AACpB;;AAEA;IACI,aAAa;AACjB;;AAEA;IACI,cAAc;IACd,kBAAkB;IAClB,gBAAgB;IAChB,+BAA+B;IAC/B,kCAAkC;AACtC;;AAEA;IACI,WAAW;IACX,iBAAiB;IACjB,YAAY;IACZ,yCAAyC;IACzC,kBAAkB;IAClB,qCAAqC;IACrC,kCAAkC;IAClC,gBAAgB;IAChB,sBAAsB;IACtB,4CAA4C;IAC5C,+BAA+B;AACnC;;AAEA;IACI,aAAa;IACb,yBAAyB;IACzB,QAAQ;IACR,gBAAgB;AACpB;;AAEA;IACI,gBAAgB;IAChB,YAAY;IACZ,kBAAkB;IAClB,eAAe;IACf,qCAAqC;IACrC,kCAAkC;AACtC;;AAEA;IACI,yCAAyC;IACzC,+BAA+B;AACnC;;AAEA;;IAEI,mCAAmC;IACnC,wBAAwB;IACxB,eAAe;AACnB;;AAEA;IACI,yCAAyC;IACzC,+BAA+B;IAC/B,mBAAmB;AACvB","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n/* UpdateAppDropdown Styles */\n\n.update-app-dropdown {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n background-color: var(--jp-layout-color1);\n border: 1px solid var(--jp-border-color1);\n border-radius: 3px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\n min-width: 300px;\n max-width: 500px;\n}\n\n.update-app-dropdown-content {\n padding: 12px;\n}\n\n.update-app-dropdown-label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: var(--jp-ui-font-color1);\n font-size: var(--jp-ui-font-size1);\n}\n\n.update-app-dropdown-textarea {\n width: 100%;\n min-height: 100px;\n padding: 8px;\n border: 1px solid var(--jp-border-color1);\n border-radius: 3px;\n font-family: var(--jp-ui-font-family);\n font-size: var(--jp-ui-font-size1);\n resize: vertical;\n box-sizing: border-box;\n background-color: var(--jp-input-background);\n color: var(--jp-ui-font-color1);\n}\n\n.update-app-dropdown-buttons {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n margin-top: 12px;\n}\n\n.update-app-dropdown-button {\n padding: 4px 8px;\n border: none;\n border-radius: 3px;\n cursor: pointer;\n font-family: var(--jp-ui-font-family);\n font-size: var(--jp-ui-font-size0);\n}\n\n.update-app-dropdown-button-cancel {\n background-color: var(--jp-layout-color2);\n color: var(--jp-ui-font-color1);\n}\n\n.update-app-dropdown-button-submit {\n \n background-color: var(--purple-300);\n color: var(--purple-700);\n cursor: pointer;\n}\n\n.update-app-dropdown-button-submit.disabled {\n background-color: var(--jp-layout-color2);\n color: var(--jp-ui-font-color2);\n cursor: not-allowed;\n}\n"],"sourceRoot":""}]);
|
|
15252
|
+
// Exports
|
|
15253
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
15254
|
+
|
|
15255
|
+
|
|
15256
|
+
/***/ }),
|
|
15257
|
+
|
|
15258
|
+
/***/ "./node_modules/css-loader/dist/cjs.js!./style/ErrorFixupToolUI.css":
|
|
15259
|
+
/*!**************************************************************************!*\
|
|
15260
|
+
!*** ./node_modules/css-loader/dist/cjs.js!./style/ErrorFixupToolUI.css ***!
|
|
15261
|
+
\**************************************************************************/
|
|
14709
15262
|
/***/ ((module, __webpack_exports__, __webpack_require__) => {
|
|
14710
15263
|
|
|
14711
15264
|
__webpack_require__.r(__webpack_exports__);
|
|
@@ -16389,6 +16942,107 @@ a {
|
|
|
16389
16942
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
16390
16943
|
|
|
16391
16944
|
|
|
16945
|
+
/***/ }),
|
|
16946
|
+
|
|
16947
|
+
/***/ "./node_modules/css-loader/dist/cjs.js!./style/SignUpForm.css":
|
|
16948
|
+
/*!********************************************************************!*\
|
|
16949
|
+
!*** ./node_modules/css-loader/dist/cjs.js!./style/SignUpForm.css ***!
|
|
16950
|
+
\********************************************************************/
|
|
16951
|
+
/***/ ((module, __webpack_exports__, __webpack_require__) => {
|
|
16952
|
+
|
|
16953
|
+
__webpack_require__.r(__webpack_exports__);
|
|
16954
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
16955
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
16956
|
+
/* harmony export */ });
|
|
16957
|
+
/* 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");
|
|
16958
|
+
/* 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__);
|
|
16959
|
+
/* 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");
|
|
16960
|
+
/* 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__);
|
|
16961
|
+
// Imports
|
|
16962
|
+
|
|
16963
|
+
|
|
16964
|
+
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()));
|
|
16965
|
+
// Module
|
|
16966
|
+
___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
16967
|
+
* Copyright (c) Saga Inc.
|
|
16968
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
16969
|
+
*/
|
|
16970
|
+
|
|
16971
|
+
.signup-form-header {
|
|
16972
|
+
display: block;
|
|
16973
|
+
text-align: center;
|
|
16974
|
+
font-weight: bold;
|
|
16975
|
+
font-size: 20px;
|
|
16976
|
+
margin-bottom: 15px;
|
|
16977
|
+
color: var(--jp-ui-font-color0);
|
|
16978
|
+
}
|
|
16979
|
+
|
|
16980
|
+
.signup-form-header-logo {
|
|
16981
|
+
margin: 0 auto 8px;
|
|
16982
|
+
display: block;
|
|
16983
|
+
text-align: center;
|
|
16984
|
+
}
|
|
16985
|
+
|
|
16986
|
+
.signup-form-message {
|
|
16987
|
+
font-size: 14px;
|
|
16988
|
+
color: var(--jp-ui-font-color1);
|
|
16989
|
+
}
|
|
16990
|
+
|
|
16991
|
+
/* Form container to control layout */
|
|
16992
|
+
.signup-form-container form {
|
|
16993
|
+
display: flex;
|
|
16994
|
+
flex-wrap: wrap;
|
|
16995
|
+
gap: 8px;
|
|
16996
|
+
align-items: flex-start;
|
|
16997
|
+
}
|
|
16998
|
+
|
|
16999
|
+
.signup-form-input {
|
|
17000
|
+
padding: 8px 12px;
|
|
17001
|
+
border: 1px solid var(--jp-border-color1);
|
|
17002
|
+
border-radius: var(--jp-border-radius);
|
|
17003
|
+
flex: 2;
|
|
17004
|
+
min-width: 200px;
|
|
17005
|
+
margin-bottom: 0;
|
|
17006
|
+
height: 36px;
|
|
17007
|
+
box-sizing: border-box;
|
|
17008
|
+
}
|
|
17009
|
+
|
|
17010
|
+
.signup-form-input:focus {
|
|
17011
|
+
border-color: var(--purple-600);
|
|
17012
|
+
outline: none;
|
|
17013
|
+
}
|
|
17014
|
+
|
|
17015
|
+
.signup-form-button {
|
|
17016
|
+
height: 36px;
|
|
17017
|
+
box-sizing: border-box;
|
|
17018
|
+
background-color: var(--purple-700);
|
|
17019
|
+
color: white;
|
|
17020
|
+
flex: 1;
|
|
17021
|
+
}
|
|
17022
|
+
|
|
17023
|
+
.signup-form-button:hover {
|
|
17024
|
+
background-color: var(--purple-600);
|
|
17025
|
+
}
|
|
17026
|
+
|
|
17027
|
+
/* When the form wraps, make button full width */
|
|
17028
|
+
@media (max-width: 300px) {
|
|
17029
|
+
.signup-form-container form {
|
|
17030
|
+
flex-direction: column;
|
|
17031
|
+
}
|
|
17032
|
+
|
|
17033
|
+
.signup-form-input {
|
|
17034
|
+
width: 100%;
|
|
17035
|
+
min-width: unset;
|
|
17036
|
+
}
|
|
17037
|
+
|
|
17038
|
+
.signup-form-button {
|
|
17039
|
+
width: 100%;
|
|
17040
|
+
}
|
|
17041
|
+
}`, "",{"version":3,"sources":["webpack://./style/SignUpForm.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;IACI,cAAc;IACd,kBAAkB;IAClB,iBAAiB;IACjB,eAAe;IACf,mBAAmB;IACnB,+BAA+B;AACnC;;AAEA;IACI,kBAAkB;IAClB,cAAc;IACd,kBAAkB;AACtB;;AAEA;IACI,eAAe;IACf,+BAA+B;AACnC;;AAEA,qCAAqC;AACrC;IACI,aAAa;IACb,eAAe;IACf,QAAQ;IACR,uBAAuB;AAC3B;;AAEA;IACI,iBAAiB;IACjB,yCAAyC;IACzC,sCAAsC;IACtC,OAAO;IACP,gBAAgB;IAChB,gBAAgB;IAChB,YAAY;IACZ,sBAAsB;AAC1B;;AAEA;IACI,+BAA+B;IAC/B,aAAa;AACjB;;AAEA;IACI,YAAY;IACZ,sBAAsB;IACtB,mCAAmC;IACnC,YAAY;IACZ,OAAO;AACX;;AAEA;IACI,mCAAmC;AACvC;;AAEA,gDAAgD;AAChD;IACI;QACI,sBAAsB;IAC1B;;IAEA;QACI,WAAW;QACX,gBAAgB;IACpB;;IAEA;QACI,WAAW;IACf;AACJ","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.signup-form-header {\n display: block;\n text-align: center;\n font-weight: bold;\n font-size: 20px;\n margin-bottom: 15px;\n color: var(--jp-ui-font-color0);\n}\n\n.signup-form-header-logo {\n margin: 0 auto 8px;\n display: block;\n text-align: center;\n}\n\n.signup-form-message {\n font-size: 14px;\n color: var(--jp-ui-font-color1);\n}\n\n/* Form container to control layout */\n.signup-form-container form {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n align-items: flex-start;\n}\n\n.signup-form-input {\n padding: 8px 12px;\n border: 1px solid var(--jp-border-color1);\n border-radius: var(--jp-border-radius);\n flex: 2;\n min-width: 200px;\n margin-bottom: 0;\n height: 36px;\n box-sizing: border-box;\n}\n\n.signup-form-input:focus {\n border-color: var(--purple-600);\n outline: none;\n}\n\n.signup-form-button {\n height: 36px;\n box-sizing: border-box;\n background-color: var(--purple-700);\n color: white;\n flex: 1;\n}\n\n.signup-form-button:hover {\n background-color: var(--purple-600);\n}\n\n/* When the form wraps, make button full width */\n@media (max-width: 300px) {\n .signup-form-container form {\n flex-direction: column;\n }\n \n .signup-form-input {\n width: 100%;\n min-width: unset;\n }\n \n .signup-form-button {\n width: 100%;\n }\n}"],"sourceRoot":""}]);
|
|
17042
|
+
// Exports
|
|
17043
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
17044
|
+
|
|
17045
|
+
|
|
16392
17046
|
/***/ }),
|
|
16393
17047
|
|
|
16394
17048
|
/***/ "./node_modules/css-loader/dist/cjs.js!./style/StreamlitPreviewPlugin.css":
|
|
@@ -16797,6 +17451,26 @@ module.exports = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"5\" viewBox=
|
|
|
16797
17451
|
|
|
16798
17452
|
/***/ }),
|
|
16799
17453
|
|
|
17454
|
+
/***/ "./src/icons/PencilIcon.svg":
|
|
17455
|
+
/*!**********************************!*\
|
|
17456
|
+
!*** ./src/icons/PencilIcon.svg ***!
|
|
17457
|
+
\**********************************/
|
|
17458
|
+
/***/ ((module) => {
|
|
17459
|
+
|
|
17460
|
+
module.exports = "<svg width=\"14\" height=\"14\" viewBox=\"0 0 10 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g fill='currentColor'>\n <path d=\"M9.88308 1.82456C9.68326 1.49798 9.43085 1.18192 9.1259 0.876387C8.8209 0.570854 8.5054 0.317998 8.18991 0.117862C7.88492 -0.0717913 7.48531 -0.0296413 7.22238 0.223215L1.15425 6.29155C1.12269 6.32317 1.10167 6.35476 1.08065 6.39691L0.0289843 9.38893C-0.0341088 9.55749 0.00796491 9.73662 0.134151 9.86302C0.218298 9.94732 0.333977 10 0.449651 10C0.502235 10 0.554818 9.98947 0.596894 9.97894L3.58363 8.92541C3.6257 8.91488 3.65723 8.88326 3.6888 8.85168L9.76744 2.78325C10.0304 2.51987 10.0724 2.13008 9.88311 1.82454L9.88308 1.82456ZM1.56439 6.80777C1.86938 6.98685 2.18488 7.2397 2.47934 7.53471C2.77382 7.82972 3.01568 8.14578 3.19449 8.45128L1.46976 9.06235C1.41717 8.957 1.34357 8.85164 1.25942 8.76734C1.16476 8.67252 1.0701 8.60931 0.964937 8.55664L1.56439 6.80777Z\" />\n </g>\n</svg>";
|
|
17461
|
+
|
|
17462
|
+
/***/ }),
|
|
17463
|
+
|
|
17464
|
+
/***/ "./src/icons/ResetCircleIcon.svg":
|
|
17465
|
+
/*!***************************************!*\
|
|
17466
|
+
!*** ./src/icons/ResetCircleIcon.svg ***!
|
|
17467
|
+
\***************************************/
|
|
17468
|
+
/***/ ((module) => {
|
|
17469
|
+
|
|
17470
|
+
module.exports = "<svg width=\"33\" height=\"33\" viewBox=\"0 0 33 33\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g fill=\"currentColor\">\n <path d=\"M27.8204 5.193C24.7983 2.1709 20.7805 0.506836 16.5068 0.506836C7.78625 0.506836 0.506836 7.78625 0.506836 16.5068C0.506836 25.2274 7.78625 32.5068 16.5068 32.5068C25.2274 32.5068 32.5068 25.2274 32.5068 16.5068C32.5068 12.2332 30.8426 8.2151 27.8207 5.19329L27.8204 5.193ZM23.627 21.5962L21.7553 17.7403L23.4737 16.9062L24.3955 18.8053L24.4401 18.6209C24.608 17.9267 24.6932 17.2155 24.6932 16.5068C24.6932 11.6336 20.7854 7.66893 15.9819 7.66893C11.1788 7.66893 7.27066 11.6336 7.27066 16.5068C7.27066 21.3572 11.1414 25.3073 15.9137 25.3444V27.2546C10.0885 27.217 5.36066 22.41 5.36066 16.5067C5.36066 10.5804 10.1253 5.75855 15.9819 5.75855C21.8385 5.75855 26.6032 10.5801 26.6032 16.5067C26.6032 17.2903 26.5175 18.0775 26.3484 18.8468L26.315 18.999L27.9027 18.0676L28.8693 19.7151L24.9693 22.003C24.3869 22.4896 23.6689 21.9597 23.6268 21.5962L23.627 21.5962Z\"/>\n </g>\n</svg>\n";
|
|
17471
|
+
|
|
17472
|
+
/***/ }),
|
|
17473
|
+
|
|
16800
17474
|
/***/ "./style/AgentComponentHeader.css":
|
|
16801
17475
|
/*!****************************************!*\
|
|
16802
17476
|
!*** ./style/AgentComponentHeader.css ***!
|
|
@@ -17659,6 +18333,60 @@ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js
|
|
|
17659
18333
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_DropdownMenu_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_DropdownMenu_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_DropdownMenu_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
|
|
17660
18334
|
|
|
17661
18335
|
|
|
18336
|
+
/***/ }),
|
|
18337
|
+
|
|
18338
|
+
/***/ "./style/EditAppDropdown.css":
|
|
18339
|
+
/*!***********************************!*\
|
|
18340
|
+
!*** ./style/EditAppDropdown.css ***!
|
|
18341
|
+
\***********************************/
|
|
18342
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
18343
|
+
|
|
18344
|
+
__webpack_require__.r(__webpack_exports__);
|
|
18345
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
18346
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
18347
|
+
/* harmony export */ });
|
|
18348
|
+
/* 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");
|
|
18349
|
+
/* 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__);
|
|
18350
|
+
/* 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");
|
|
18351
|
+
/* 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__);
|
|
18352
|
+
/* 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");
|
|
18353
|
+
/* 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__);
|
|
18354
|
+
/* 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");
|
|
18355
|
+
/* 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__);
|
|
18356
|
+
/* 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");
|
|
18357
|
+
/* 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__);
|
|
18358
|
+
/* 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");
|
|
18359
|
+
/* 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__);
|
|
18360
|
+
/* harmony import */ var _node_modules_css_loader_dist_cjs_js_EditAppDropdown_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../node_modules/css-loader/dist/cjs.js!./EditAppDropdown.css */ "./node_modules/css-loader/dist/cjs.js!./style/EditAppDropdown.css");
|
|
18361
|
+
|
|
18362
|
+
|
|
18363
|
+
|
|
18364
|
+
|
|
18365
|
+
|
|
18366
|
+
|
|
18367
|
+
|
|
18368
|
+
|
|
18369
|
+
|
|
18370
|
+
|
|
18371
|
+
|
|
18372
|
+
var options = {};
|
|
18373
|
+
|
|
18374
|
+
options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
|
|
18375
|
+
options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
|
|
18376
|
+
|
|
18377
|
+
options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
|
|
18378
|
+
|
|
18379
|
+
options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
|
|
18380
|
+
options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
|
|
18381
|
+
|
|
18382
|
+
var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_EditAppDropdown_css__WEBPACK_IMPORTED_MODULE_6__["default"], options);
|
|
18383
|
+
|
|
18384
|
+
|
|
18385
|
+
|
|
18386
|
+
|
|
18387
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_EditAppDropdown_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_EditAppDropdown_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_EditAppDropdown_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
|
|
18388
|
+
|
|
18389
|
+
|
|
17662
18390
|
/***/ }),
|
|
17663
18391
|
|
|
17664
18392
|
/***/ "./style/ErrorFixupToolUI.css":
|
|
@@ -18415,6 +19143,60 @@ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js
|
|
|
18415
19143
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_SettingsWidget_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_SettingsWidget_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_SettingsWidget_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
|
|
18416
19144
|
|
|
18417
19145
|
|
|
19146
|
+
/***/ }),
|
|
19147
|
+
|
|
19148
|
+
/***/ "./style/SignUpForm.css":
|
|
19149
|
+
/*!******************************!*\
|
|
19150
|
+
!*** ./style/SignUpForm.css ***!
|
|
19151
|
+
\******************************/
|
|
19152
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
19153
|
+
|
|
19154
|
+
__webpack_require__.r(__webpack_exports__);
|
|
19155
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
19156
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
19157
|
+
/* harmony export */ });
|
|
19158
|
+
/* 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");
|
|
19159
|
+
/* 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__);
|
|
19160
|
+
/* 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");
|
|
19161
|
+
/* 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__);
|
|
19162
|
+
/* 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");
|
|
19163
|
+
/* 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__);
|
|
19164
|
+
/* 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");
|
|
19165
|
+
/* 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__);
|
|
19166
|
+
/* 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");
|
|
19167
|
+
/* 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__);
|
|
19168
|
+
/* 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");
|
|
19169
|
+
/* 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__);
|
|
19170
|
+
/* harmony import */ var _node_modules_css_loader_dist_cjs_js_SignUpForm_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../node_modules/css-loader/dist/cjs.js!./SignUpForm.css */ "./node_modules/css-loader/dist/cjs.js!./style/SignUpForm.css");
|
|
19171
|
+
|
|
19172
|
+
|
|
19173
|
+
|
|
19174
|
+
|
|
19175
|
+
|
|
19176
|
+
|
|
19177
|
+
|
|
19178
|
+
|
|
19179
|
+
|
|
19180
|
+
|
|
19181
|
+
|
|
19182
|
+
var options = {};
|
|
19183
|
+
|
|
19184
|
+
options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
|
|
19185
|
+
options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
|
|
19186
|
+
|
|
19187
|
+
options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
|
|
19188
|
+
|
|
19189
|
+
options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
|
|
19190
|
+
options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
|
|
19191
|
+
|
|
19192
|
+
var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_SignUpForm_css__WEBPACK_IMPORTED_MODULE_6__["default"], options);
|
|
19193
|
+
|
|
19194
|
+
|
|
19195
|
+
|
|
19196
|
+
|
|
19197
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_SignUpForm_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_SignUpForm_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_SignUpForm_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
|
|
19198
|
+
|
|
19199
|
+
|
|
18418
19200
|
/***/ }),
|
|
18419
19201
|
|
|
18420
19202
|
/***/ "./style/StreamlitPreviewPlugin.css":
|
|
@@ -18688,4 +19470,4 @@ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js
|
|
|
18688
19470
|
/***/ })
|
|
18689
19471
|
|
|
18690
19472
|
}]);
|
|
18691
|
-
//# sourceMappingURL=lib_index_js.
|
|
19473
|
+
//# sourceMappingURL=lib_index_js.20f12766ecd3d430568e.js.map
|