gwchq-textjam 0.3.13 → 0.3.15

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.
package/dist/index.js CHANGED
@@ -68492,8 +68492,8 @@ __webpack_require__.r(__webpack_exports__);
68492
68492
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
68493
68493
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
68494
68494
  /* harmony export */ });
68495
- /* harmony import */ var _Users_ruslanmatkovskyi_projects_gwc_gwchq_textjam_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(89379);
68496
- /* harmony import */ var _Users_ruslanmatkovskyi_projects_gwc_gwchq_textjam_node_modules_babel_runtime_helpers_esm_objectWithoutProperties_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(53986);
68495
+ /* harmony import */ var _Users_valeriya_projects_gwc_gwchq_textjam_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(89379);
68496
+ /* harmony import */ var _Users_valeriya_projects_gwc_gwchq_textjam_node_modules_babel_runtime_helpers_esm_objectWithoutProperties_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(53986);
68497
68497
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(51649);
68498
68498
  /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(14062);
68499
68499
  /* harmony import */ var _redux_EditorSlice__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(68512);
@@ -68514,7 +68514,7 @@ var DraggableTab = _ref => {
68514
68514
  draggableId,
68515
68515
  onTabClick
68516
68516
  } = _ref,
68517
- otherProps = (0,_Users_ruslanmatkovskyi_projects_gwc_gwchq_textjam_node_modules_babel_runtime_helpers_esm_objectWithoutProperties_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(_ref, _excluded);
68517
+ otherProps = (0,_Users_valeriya_projects_gwc_gwchq_textjam_node_modules_babel_runtime_helpers_esm_objectWithoutProperties_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(_ref, _excluded);
68518
68518
  var openedTabs = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(state => state.editor.openedTabs);
68519
68519
  var openFilesCount = openedTabs.filter(t => t && t.type === "file").length || 1;
68520
68520
  var dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useDispatch)();
@@ -68532,7 +68532,7 @@ var DraggableTab = _ref => {
68532
68532
  switchToFileTab((fileIndex + openFilesCount - 1) % openFilesCount);
68533
68533
  }
68534
68534
  };
68535
- return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(_Tabs_DraggableTabWrapper__WEBPACK_IMPORTED_MODULE_5__["default"], (0,_Users_ruslanmatkovskyi_projects_gwc_gwchq_textjam_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A)((0,_Users_ruslanmatkovskyi_projects_gwc_gwchq_textjam_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A)({
68535
+ return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(_Tabs_DraggableTabWrapper__WEBPACK_IMPORTED_MODULE_5__["default"], (0,_Users_valeriya_projects_gwc_gwchq_textjam_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A)((0,_Users_valeriya_projects_gwc_gwchq_textjam_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A)({
68536
68536
  draggableId: draggableId,
68537
68537
  index: fileIndex,
68538
68538
  onClick: e => {
@@ -68556,8 +68556,8 @@ __webpack_require__.r(__webpack_exports__);
68556
68556
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
68557
68557
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
68558
68558
  /* harmony export */ });
68559
- /* harmony import */ var _Users_ruslanmatkovskyi_projects_gwc_gwchq_textjam_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(89379);
68560
- /* harmony import */ var _Users_ruslanmatkovskyi_projects_gwc_gwchq_textjam_node_modules_babel_runtime_helpers_esm_objectWithoutProperties_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(53986);
68559
+ /* harmony import */ var _Users_valeriya_projects_gwc_gwchq_textjam_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(89379);
68560
+ /* harmony import */ var _Users_valeriya_projects_gwc_gwchq_textjam_node_modules_babel_runtime_helpers_esm_objectWithoutProperties_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(53986);
68561
68561
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(51649);
68562
68562
  /* harmony import */ var _hello_pangea_dnd__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(98850);
68563
68563
  /* harmony import */ var react_tabs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(39243);
@@ -68576,8 +68576,8 @@ var DroppableTabList = _ref => {
68576
68576
  children: _children,
68577
68577
  index
68578
68578
  } = _ref,
68579
- otherProps = (0,_Users_ruslanmatkovskyi_projects_gwc_gwchq_textjam_node_modules_babel_runtime_helpers_esm_objectWithoutProperties_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A)(_ref, _excluded);
68580
- return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react_tabs__WEBPACK_IMPORTED_MODULE_1__.TabList, (0,_Users_ruslanmatkovskyi_projects_gwc_gwchq_textjam_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)((0,_Users_ruslanmatkovskyi_projects_gwc_gwchq_textjam_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)({}, otherProps), {}, {
68579
+ otherProps = (0,_Users_valeriya_projects_gwc_gwchq_textjam_node_modules_babel_runtime_helpers_esm_objectWithoutProperties_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A)(_ref, _excluded);
68580
+ return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react_tabs__WEBPACK_IMPORTED_MODULE_1__.TabList, (0,_Users_valeriya_projects_gwc_gwchq_textjam_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)((0,_Users_valeriya_projects_gwc_gwchq_textjam_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)({}, otherProps), {}, {
68581
68581
  children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_hello_pangea_dnd__WEBPACK_IMPORTED_MODULE_6__.Droppable, {
68582
68582
  direction: "horizontal",
68583
68583
  droppableId: index.toString(),
@@ -68587,7 +68587,7 @@ var DroppableTabList = _ref => {
68587
68587
  droppableProps,
68588
68588
  placeholder
68589
68589
  } = _ref2;
68590
- return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)("div", (0,_Users_ruslanmatkovskyi_projects_gwc_gwchq_textjam_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)((0,_Users_ruslanmatkovskyi_projects_gwc_gwchq_textjam_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)({
68590
+ return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)("div", (0,_Users_valeriya_projects_gwc_gwchq_textjam_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)((0,_Users_valeriya_projects_gwc_gwchq_textjam_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)({
68591
68591
  className: "droppable-tab-list"
68592
68592
  }, droppableProps), {}, {
68593
68593
  ref: innerRef,
@@ -101977,8 +101977,8 @@ var EditorPanel = _ref => {
101977
101977
  } = (0,es.useTranslation)();
101978
101978
  var settings = (0,external_react_.useContext)(utils_settings.SettingsContext);
101979
101979
  var [characterLimitExceeded, setCharacterLimitExceeded] = (0,external_react_.useState)(false);
101980
- var [line, setLine] = (0,external_react_.useState)(0);
101981
- var [position, setPosition] = (0,external_react_.useState)(0);
101980
+ var [line, setLine] = (0,external_react_.useState)(1);
101981
+ var [position, setPosition] = (0,external_react_.useState)(1);
101982
101982
  var updateStoredProject = c(content => {
101983
101983
  dispatch((0,EditorSlice.updateProjectComponent)((0,objectSpread2/* default */.A)((0,objectSpread2/* default */.A)({}, file), {}, {
101984
101984
  content
@@ -102013,6 +102013,10 @@ var EditorPanel = _ref => {
102013
102013
  });
102014
102014
  editorViewRef.current = view;
102015
102015
 
102016
+ // New view starts at line 1
102017
+ setLine(1);
102018
+ setPosition(1);
102019
+
102016
102020
  // 'aria-hidden' to fix keyboard access accessibility error
102017
102021
  view.scrollDOM.setAttribute("aria-hidden", "true");
102018
102022
 
@@ -103160,7 +103164,7 @@ __webpack_require__.r(__webpack_exports__);
103160
103164
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
103161
103165
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
103162
103166
  /* harmony export */ });
103163
- /* harmony import */ var _Users_ruslanmatkovskyi_projects_gwc_gwchq_textjam_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(89379);
103167
+ /* harmony import */ var _Users_valeriya_projects_gwc_gwchq_textjam_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(89379);
103164
103168
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(51649);
103165
103169
  /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(14062);
103166
103170
  /* harmony import */ var _redux_EditorSlice__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(68512);
@@ -103276,7 +103280,7 @@ var ProjectName = _ref => {
103276
103280
  id: "project_name_label",
103277
103281
  className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_3__["default"].projectLabel,
103278
103282
  children: "Project Name"
103279
- }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)("div", (0,_Users_ruslanmatkovskyi_projects_gwc_gwchq_textjam_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A)((0,_Users_ruslanmatkovskyi_projects_gwc_gwchq_textjam_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A)({
103283
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)("div", (0,_Users_valeriya_projects_gwc_gwchq_textjam_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A)((0,_Users_valeriya_projects_gwc_gwchq_textjam_node_modules_babel_runtime_helpers_esm_objectSpread2_js__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A)({
103280
103284
  className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(_styles_module_scss__WEBPACK_IMPORTED_MODULE_3__["default"].projectName, className)
103281
103285
  }, hoverProps), {}, {
103282
103286
  children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)((components_Tooltip_Tooltip__WEBPACK_IMPORTED_MODULE_8___default()), {
@@ -369154,7 +369158,7 @@ const EditorInput = () => {
369154
369158
  if (!project || !project.components) {
369155
369159
  return null;
369156
369160
  }
369157
- return ((0, jsx_runtime_1.jsxs)(dnd_1.DragDropContext, { onDragStart: (input) => onDragStart(input), onDragEnd: (result) => onDragEnd(result), children: [(0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.tabbedPanel, children: (0, jsx_runtime_1.jsxs)(react_tabs_1.Tabs, { selectedIndex: fileTabFocusIndex, onSelect: selectFileTab, children: [(0, jsx_runtime_1.jsxs)("div", { className: "tabContainer", children: [(0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.scrollWrapper, children: (0, jsx_runtime_1.jsx)(DroppableTabList_1.default, { index: 0, children: openedFiles.map((file, fileIndex) => ((0, jsx_runtime_1.jsxs)(DraggableTab_1.default, { draggableId: `file-${file.id}`, fileIndex: fileIndex, onTabClick: selectFileTab, onMouseEnter: showTabTooltip(file.path), onMouseLeave: hideTabTooltip, "aria-label": file.fullName, children: [(0, jsx_runtime_1.jsxs)(Text_1.Text, { size: 12, weight: "medium", className: "tabText", ref: tabRefs.current[projectFiles.findIndex((projectFile) => projectFile.id === file.id)], children: [(0, jsx_runtime_1.jsx)(FileIcon_1.default, { ext: file.extension }), (0, projectHelpers_1.truncateFileName)(file.fullName)] }), (0, projectHelpers_1.isFileClosable)(file.fullName, defaultFileName) && ((0, jsx_runtime_1.jsx)(Button_1.default, { className: styles_module_scss_1.default.closeBtn, label: "close", onClickHandler: (e) => closeFileTab(e, file), ButtonIcon: () => (0, jsx_runtime_1.jsx)(CloseIcon_1.default, { scaleFactor: 0.85 }) }))] }, file.id))) }) }), isMobile && (0, jsx_runtime_1.jsx)(RunnerControls_1.default, {})] }), openedFiles.map((file) => ((0, jsx_runtime_1.jsxs)(react_tabs_1.TabPanel, { children: [(0, jsx_runtime_1.jsx)(ReadOnlyBanner_1.default, {}), (0, jsx_runtime_1.jsx)(EditorPanel_1.default, { file: file }, file.id)] }, file.id)))] }) }), tabTooltip && ((0, jsx_runtime_1.jsx)(Tooltip_1.default, { className: styles_module_scss_1.default.tabTooltip, message: tabTooltip.message, position: "bottom", strategy: "fixed", visible: true, style: {
369161
+ return ((0, jsx_runtime_1.jsxs)(dnd_1.DragDropContext, { onDragStart: (input) => onDragStart(input), onDragEnd: (result) => onDragEnd(result), children: [(0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.tabbedPanel, children: (0, jsx_runtime_1.jsxs)(react_tabs_1.Tabs, { selectedIndex: fileTabFocusIndex, onSelect: selectFileTab, children: [(0, jsx_runtime_1.jsxs)("div", { className: "tabContainer", children: [(0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.scrollWrapper, children: (0, jsx_runtime_1.jsx)(DroppableTabList_1.default, { index: 0, children: openedFiles.map((file, fileIndex) => ((0, jsx_runtime_1.jsxs)(DraggableTab_1.default, { draggableId: `file-${file.id}`, fileIndex: fileIndex, onTabClick: selectFileTab, onMouseEnter: showTabTooltip(file.path), onMouseLeave: hideTabTooltip, "aria-label": file.fullName, children: [(0, jsx_runtime_1.jsxs)(Text_1.Text, { size: 12, weight: "medium", className: "tabText", ref: tabRefs.current[projectFiles.findIndex((projectFile) => projectFile.id === file.id)], children: [(0, jsx_runtime_1.jsx)(FileIcon_1.default, { ext: file.extension }), (0, projectHelpers_1.truncateFileName)(file.fullName)] }), (0, projectHelpers_1.isFileClosable)(file.fullName, defaultFileName) && ((0, jsx_runtime_1.jsx)(Button_1.default, { className: styles_module_scss_1.default.closeBtn, label: "close", onClickHandler: (e) => closeFileTab(e, file), ButtonIcon: () => (0, jsx_runtime_1.jsx)(CloseIcon_1.default, { scaleFactor: 0.85 }) }))] }, file.id))) }) }), isMobile && (0, jsx_runtime_1.jsx)(RunnerControls_1.default, {})] }), openedFiles.map((file) => ((0, jsx_runtime_1.jsxs)(react_tabs_1.TabPanel, { children: [(0, jsx_runtime_1.jsx)(ReadOnlyBanner_1.default, {}), (0, jsx_runtime_1.jsx)(EditorPanel_1.default, { file: file }, file.id)] }, file.id)))] }) }), tabTooltip && ((0, jsx_runtime_1.jsx)(Tooltip_1.default, { className: styles_module_scss_1.default.tabTooltip, message: tabTooltip.message, position: "bottom", size: "fit", strategy: "fixed", visible: true, style: {
369158
369162
  top: tabTooltip.top,
369159
369163
  left: tabTooltip.left,
369160
369164
  transform: "translateX(-50%)",
@@ -372361,7 +372365,7 @@ const styles_module_scss_1 = __importDefault(__webpack_require__(44502));
372361
372365
  const FileTabHeader = ({ file, defaultFileName, onClose, }) => {
372362
372366
  const fullName = (0, projectHelpers_1.getFullComponentName)(file);
372363
372367
  const isClosable = (0, projectHelpers_1.isFileClosable)(fullName, defaultFileName);
372364
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)(Text_1.Text, { size: 12, weight: "medium", className: "tabText", tooltip: fullName, children: [(0, jsx_runtime_1.jsx)(FileIcon_1.default, { ext: file.extension }), (0, projectHelpers_1.truncateFileName)(fullName)] }), isClosable && ((0, jsx_runtime_1.jsx)(Button_1.default, { className: styles_module_scss_1.default.closeBtn, label: "close", onClickHandler: (e) => onClose(e, file.id), ButtonIcon: () => (0, jsx_runtime_1.jsx)(CloseIcon_1.default, { scaleFactor: 0.85 }) }))] }));
372368
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)(Text_1.Text, { size: 12, weight: "medium", className: "tabText", children: [(0, jsx_runtime_1.jsx)(FileIcon_1.default, { ext: file.extension }), (0, projectHelpers_1.truncateFileName)(fullName)] }), isClosable && ((0, jsx_runtime_1.jsx)(Button_1.default, { className: styles_module_scss_1.default.closeBtn, label: "close", onClickHandler: (e) => onClose(e, file.id), ButtonIcon: () => (0, jsx_runtime_1.jsx)(CloseIcon_1.default, { scaleFactor: 0.85 }) }))] }));
372365
372369
  };
372366
372370
  exports["default"] = FileTabHeader;
372367
372371
 
@@ -372512,16 +372516,19 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
372512
372516
  };
372513
372517
  Object.defineProperty(exports, "__esModule", ({ value: true }));
372514
372518
  const jsx_runtime_1 = __webpack_require__(74848);
372519
+ const dnd_1 = __webpack_require__(98850);
372515
372520
  const react_1 = __webpack_require__(51649);
372516
372521
  const react_redux_1 = __webpack_require__(14062);
372517
372522
  const react_tabs_1 = __webpack_require__(39243);
372518
- const dnd_1 = __webpack_require__(98850);
372519
- const EditorSlice_1 = __webpack_require__(68512);
372523
+ const Tooltip_1 = __importDefault(__webpack_require__(26982));
372520
372524
  const stores_1 = __webpack_require__(32132);
372521
372525
  const EditorTypes_1 = __webpack_require__(42108);
372522
372526
  const ProjectTypes_1 = __webpack_require__(27130);
372523
372527
  const projectHelpers_1 = __webpack_require__(2610);
372528
+ const EditorSlice_1 = __webpack_require__(68512);
372524
372529
  const DroppableTabList_1 = __importDefault(__webpack_require__(48339));
372530
+ const useTabTooltip_1 = __importDefault(__webpack_require__(58149));
372531
+ const styles_module_scss_1 = __importDefault(__webpack_require__(44502));
372525
372532
  const DraggableTabWrapper_1 = __importDefault(__webpack_require__(46963));
372526
372533
  const TabbedPanel_1 = __importStar(__webpack_require__(60596));
372527
372534
  const TabHeader_1 = __importDefault(__webpack_require__(33682));
@@ -372529,6 +372536,7 @@ const TabsContainer = ({ tabs, renderOutput, outputMeta, }) => {
372529
372536
  const dispatch = (0, react_redux_1.useDispatch)();
372530
372537
  const project = (0, stores_1.useAppSelector)((state) => state.editor.project);
372531
372538
  const focussedTabIndex = (0, stores_1.useAppSelector)((state) => state.editor.focussedFileIndex);
372539
+ const { tabTooltip, showTabTooltip, hideTabTooltip } = (0, useTabTooltip_1.default)();
372532
372540
  const projectFiles = (0, react_1.useMemo)(() => (project.components ?? []).filter((component) => component.type === ProjectTypes_1.ProjectComponentType.FILE), [project.components]);
372533
372541
  const defaultFileName = (0, projectHelpers_1.getDefaultFileName)(project);
372534
372542
  const hasFileTabs = (0, react_1.useMemo)(() => tabs.some((t) => t.type === EditorTypes_1.OpenedTabType.FILE), [tabs]);
@@ -372543,6 +372551,7 @@ const TabsContainer = ({ tabs, renderOutput, outputMeta, }) => {
372543
372551
  // previously active tab loses its white "selected" background immediately and we
372544
372552
  // never show two active-looking tabs mid-drag.
372545
372553
  const handleDragStart = (start) => {
372554
+ hideTabTooltip();
372546
372555
  dispatch((0, EditorSlice_1.setFocussedFileIndex)(start.source.index));
372547
372556
  };
372548
372557
  const handleDragEnd = (result) => {
@@ -372559,23 +372568,33 @@ const TabsContainer = ({ tabs, renderOutput, outputMeta, }) => {
372559
372568
  };
372560
372569
  const isTabRenderable = (tab) => tab.type === EditorTypes_1.OpenedTabType.OUTPUT ||
372561
372570
  projectFiles.some((f) => f.id === tab.id);
372571
+ const filePathForTab = (tab) => tab.type === EditorTypes_1.OpenedTabType.FILE
372572
+ ? projectFiles.find((file) => file.id === tab.id)?.path
372573
+ : undefined;
372562
372574
  const tabHeader = (tab) => ((0, jsx_runtime_1.jsx)(TabHeader_1.default, { tab: tab, outputMeta: outputMeta, projectFiles: projectFiles, defaultFileName: defaultFileName, onCloseFile: handleCloseFile }));
372563
372575
  const renderDraggableTab = (tab, index) => {
372564
372576
  if (!isTabRenderable(tab))
372565
372577
  return null;
372578
+ const filePath = filePathForTab(tab);
372566
372579
  return ((0, jsx_runtime_1.jsx)(DraggableTabWrapper_1.default, { draggableId: (0, TabbedPanel_1.tabKey)(tab), index: index, onClick: (e) => {
372567
372580
  e.stopPropagation();
372568
372581
  handleSelect(index);
372569
- }, children: tabHeader(tab) }, (0, TabbedPanel_1.tabKey)(tab)));
372582
+ }, onMouseEnter: showTabTooltip(filePath), onMouseLeave: hideTabTooltip, onFocus: showTabTooltip(filePath), onBlur: hideTabTooltip, onKeyDown: hideTabTooltip, children: tabHeader(tab) }, (0, TabbedPanel_1.tabKey)(tab)));
372570
372583
  };
372571
372584
  const renderPlainTab = (tab) => {
372572
372585
  if (!isTabRenderable(tab))
372573
372586
  return null;
372574
- return (0, jsx_runtime_1.jsx)(react_tabs_1.Tab, { children: tabHeader(tab) }, (0, TabbedPanel_1.tabKey)(tab));
372587
+ const filePath = filePathForTab(tab);
372588
+ return ((0, jsx_runtime_1.jsx)(react_tabs_1.Tab, { onMouseEnter: showTabTooltip(filePath), onMouseLeave: hideTabTooltip, onFocus: showTabTooltip(filePath), onBlur: hideTabTooltip, onKeyDown: hideTabTooltip, children: tabHeader(tab) }, (0, TabbedPanel_1.tabKey)(tab)));
372575
372589
  };
372576
372590
  const tabListMarkup = hasFileTabs ? ((0, jsx_runtime_1.jsx)(DroppableTabList_1.default, { index: 0, children: tabs.map((tab, index) => renderDraggableTab(tab, index)) })) : ((0, jsx_runtime_1.jsx)(react_tabs_1.TabList, { children: tabs.map((tab) => renderPlainTab(tab)) }));
372577
372591
  const tabsMarkup = ((0, jsx_runtime_1.jsx)(TabbedPanel_1.default, { tabs: tabs, selectedIndex: focussedTabIndex, onSelect: handleSelect, tabList: tabListMarkup, projectFiles: projectFiles, renderOutput: renderOutput }));
372578
- return hasFileTabs ? ((0, jsx_runtime_1.jsx)(dnd_1.DragDropContext, { onDragStart: handleDragStart, onDragEnd: handleDragEnd, children: tabsMarkup })) : (tabsMarkup);
372592
+ const tabTooltipMarkup = tabTooltip ? ((0, jsx_runtime_1.jsx)(Tooltip_1.default, { className: styles_module_scss_1.default.tabTooltip, message: tabTooltip.message, visible: true, position: "bottom", strategy: "fixed", size: "fit", style: {
372593
+ top: tabTooltip.top,
372594
+ left: tabTooltip.left,
372595
+ transform: "translateX(-50%)",
372596
+ } })) : null;
372597
+ return hasFileTabs ? ((0, jsx_runtime_1.jsxs)(dnd_1.DragDropContext, { onDragStart: handleDragStart, onDragEnd: handleDragEnd, children: [tabsMarkup, tabTooltipMarkup] })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [tabsMarkup, tabTooltipMarkup] }));
372579
372598
  };
372580
372599
  exports["default"] = TabsContainer;
372581
372600
 
@@ -376238,7 +376257,7 @@ const EditorSlice_1 = __webpack_require__(68512);
376238
376257
  const types_1 = __webpack_require__(92932);
376239
376258
  const stores_1 = __webpack_require__(32132);
376240
376259
  const sendToast_1 = __webpack_require__(50068);
376241
- const SUCCESS_MESSAGE = ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["All set! Your project is back to the old version.", (0, jsx_runtime_1.jsx)("br", {}), "Click ", (0, jsx_runtime_1.jsx)("b", { children: "Save" }), " to apply changes to server."] }));
376260
+ const SUCCESS_MESSAGE = ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["All set! Your project is back to the old version.", (0, jsx_runtime_1.jsx)("br", {}), "After your first edit, ", (0, jsx_runtime_1.jsx)("b", { children: "Save" }), " will be enabled so you can apply changes to the server."] }));
376242
376261
  const ERROR_MESSAGE = ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Oops! The version couldn't be restored.", (0, jsx_runtime_1.jsx)("br", {}), "Please try again."] }));
376243
376262
  /**
376244
376263
  * Fires a success or error toast when a user-triggered version revert completes.
@@ -376878,15 +376897,15 @@ exports["default"] = exports.UserSlice.reducer;
376878
376897
 
376879
376898
  Object.defineProperty(exports, "__esModule", ({ value: true }));
376880
376899
  exports.fsImportFolder = exports.fsImportFiles = exports.fsRemove = exports.fsAdd = exports.fsMove = exports.fsRename = void 0;
376900
+ const sendToast_1 = __webpack_require__(50068);
376901
+ const fileValidation_1 = __webpack_require__(59615);
376881
376902
  const planners_1 = __webpack_require__(5819);
376882
- const EditorTypes_1 = __webpack_require__(42108);
376883
- const EditorSlice_1 = __webpack_require__(68512);
376884
- const ProjectTypes_1 = __webpack_require__(27130);
376885
376903
  const utils_1 = __webpack_require__(33321);
376886
- const sendToast_1 = __webpack_require__(50068);
376887
376904
  const constants_1 = __webpack_require__(16287);
376888
- const fileValidation_1 = __webpack_require__(59615);
376905
+ const EditorTypes_1 = __webpack_require__(42108);
376906
+ const ProjectTypes_1 = __webpack_require__(27130);
376889
376907
  const macSystemFiles_1 = __webpack_require__(18213);
376908
+ const EditorSlice_1 = __webpack_require__(68512);
376890
376909
  const selectComponents = (state) => {
376891
376910
  return state.editor.project.components ?? [];
376892
376911
  };
@@ -376968,9 +376987,6 @@ const fsImportFiles = ({ files, parentId }) => async (dispatch, getState) => {
376968
376987
  }
376969
376988
  const { validFiles, importErrors } = (0, fileValidation_1.validateFiles)(importableFiles);
376970
376989
  const hasDuplicates = hasCaseInsensitiveDuplicateNames(validFiles);
376971
- for (const error of importErrors) {
376972
- (0, sendToast_1.showError)(error.reason);
376973
- }
376974
376990
  if (validFiles.length > 0) {
376975
376991
  (0, sendToast_1.showSuccess)(`Selected files uploaded successfully.\n${validFiles.length} of ${importableFiles.length} file(s) uploaded.`);
376976
376992
  if (hasDuplicates) {
@@ -376979,6 +376995,11 @@ const fsImportFiles = ({ files, parentId }) => async (dispatch, getState) => {
376979
376995
  }
376980
376996
  else {
376981
376997
  (0, sendToast_1.showError)(`Selected files couldn’t be uploaded.\n${importableFiles.length} file(s) failed to upload.`);
376998
+ }
376999
+ for (const error of importErrors) {
377000
+ (0, sendToast_1.showError)(error.reason);
377001
+ }
377002
+ if (validFiles.length === 0) {
376982
377003
  return;
376983
377004
  }
376984
377005
  const componentsMap = (0, utils_1.buildComponentsById)(components);
@@ -377006,9 +377027,6 @@ const fsImportFolder = ({ files, parentId }) => async (dispatch, getState) => {
377006
377027
  const folderName = importableFiles[0]?.webkitRelativePath?.split("/")[0];
377007
377028
  const { validFiles, importErrors } = (0, fileValidation_1.validateFiles)(importableFiles);
377008
377029
  const hasDuplicates = hasCaseInsensitiveDuplicateNames(validFiles);
377009
- for (const error of importErrors) {
377010
- (0, sendToast_1.showError)(error.reason);
377011
- }
377012
377030
  if (validFiles.length > 0) {
377013
377031
  (0, sendToast_1.showSuccess)(`Folder '${folderName}' upload complete.\n${validFiles.length} of ${importableFiles.length} file(s) uploaded successfully.`);
377014
377032
  if (hasDuplicates) {
@@ -377017,6 +377035,11 @@ const fsImportFolder = ({ files, parentId }) => async (dispatch, getState) => {
377017
377035
  }
377018
377036
  else {
377019
377037
  (0, sendToast_1.showError)(`'${folderName}' folder couldn't be uploaded.\n${importableFiles.length} file(s) failed to upload.`);
377038
+ }
377039
+ for (const error of importErrors) {
377040
+ (0, sendToast_1.showError)(error.reason);
377041
+ }
377042
+ if (validFiles.length === 0) {
377020
377043
  return;
377021
377044
  }
377022
377045
  const componentsMap = (0, utils_1.buildComponentsById)(components);
package/dist/style.css CHANGED
@@ -693,7 +693,7 @@
693
693
  :root{--rpf-white: #ffffff}.styles-module__editorStatistic--EyK0S{display:flex;justify-content:space-between;align-items:center;inline-size:100%;border-block-start:1px solid #e5e5e5;padding:calc(.625rem*var(--scale-factor, 1)) calc(.75rem*var(--scale-factor, 1));font-weight:400;font-size:calc(.75rem*var(--scale-factor, 1));line-height:calc(1.5rem*var(--scale-factor, 1))}.styles-module__editorStatistic--EyK0S .styles-module__contentType--Sb4eE{text-transform:uppercase}
694
694
  .styles-module__previewContainer--gHB-N{block-size:100%;display:flex;align-items:center;justify-content:center}
695
695
  :root{--rpf-white: #ffffff}.styles-module__readOnlyContainer--GooG6{display:flex;justify-content:flex-end;margin:8px 4px 4px 4px}.styles-module__readOnlyContainerLeft--D6yHv{justify-content:flex-start}.styles-module__readOnlyBanner--b4PPC{background-color:#e5e5e5;padding:4px 8px;border-radius:12px;font-weight:400;font-size:calc(.5rem*var(--scale-factor, 1));line-height:calc(1rem*var(--scale-factor, 1));display:flex;gap:4px;align-items:center;color:#69746d}
696
- :root{--rpf-white: #ffffff}.styles-module__tabbedPanel--Sovmr{display:flex;flex-direction:column;block-size:100%;inline-size:100%}.styles-module__tabbedPanel--Sovmr .styles-module__viewOnlyBanner--vSOaw{font-weight:700;padding:var(--space-0-5) var(--space-1);border-block-end:1px solid var(--editor-color-outline)}.styles-module__tabbedPanel--Sovmr .styles-module__scrollWrapper--Q8zaL{position:absolute;inset:0;overflow-x:auto;overflow-y:hidden;white-space:nowrap;scrollbar-color:HSL(0, 0%, 14%, 30%) rgba(0,0,0,0);scrollbar-width:none;-ms-overflow-style:none}.styles-module__tabbedPanel--Sovmr .styles-module__scrollWrapper--Q8zaL::-webkit-scrollbar{block-size:0;transition:height .2s ease}.styles-module__tabbedPanel--Sovmr .styles-module__scrollWrapper--Q8zaL:hover{scrollbar-width:thin}.styles-module__tabbedPanel--Sovmr .styles-module__scrollWrapper--Q8zaL:hover::-webkit-scrollbar{block-size:calc(.25rem*var(--scale-factor, 1))}.styles-module__tabbedPanel--Sovmr .styles-module__closeBtn--g8-AM{block-size:100%;padding:0;padding-inline-start:calc(1rem*var(--scale-factor, 1));background-color:rgba(0,0,0,0)}.styles-module__tabbedPanel--Sovmr .styles-module__closeBtn--g8-AM:focus-visible{border:0}.styles-module__tabTooltip--DO-Hr{margin-block-start:0}.tabContainer{border-block-end:1px solid #e5e5e5;background-color:#e5f6f1;position:relative;block-size:calc(2.625rem*var(--scale-factor, 1));overflow:hidden}.tabText{display:flex;align-items:center;block-size:fit-content;inline-size:fit-content;margin:0;gap:calc(.5rem*var(--scale-factor, 1));line-height:calc(1rem*var(--scale-factor, 1));white-space:nowrap}.react-tabs{flex:1;display:flex;flex-flow:column;overflow:hidden;position:relative;border-radius:calc(.5rem*var(--scale-factor, 1)) calc(.5rem*var(--scale-factor, 1)) calc(.25rem*var(--scale-factor, 1)) calc(.25rem*var(--scale-factor, 1))}.react-tabs__tab{border:none;background-color:rgba(0,0,0,0);padding:0 calc(1rem*var(--scale-factor, 1));margin:0;inset-block-start:0;inset-block-end:0;min-block-size:calc(2.625rem*var(--scale-factor, 1));display:flex;align-items:center;justify-content:center;font-weight:700;color:#33625e;border-inline-end:1px solid #e5e5e5;flex:0 0 auto}.react-tabs__tab--selected{border-radius:0;background-color:#fff}.react-tabs__tab:focus{box-shadow:none;border-color:#e5e5e5}.react-tabs__tab:focus-visible{outline-offset:-3px}.react-tabs__tab:focus:after{display:none}.react-tabs__tab-list{border-block-end:none;box-sizing:border-box;display:inline-flex;align-items:center;flex-wrap:nowrap;margin:0;min-inline-size:100%}.react-tabs__tab-panel--selected{flex:1;display:flex;flex-direction:column;overflow-y:auto;background-color:#fff}
696
+ :root{--rpf-white: #ffffff}.styles-module__tabbedPanel--Sovmr{display:flex;flex-direction:column;block-size:100%;inline-size:100%}.styles-module__tabbedPanel--Sovmr .styles-module__viewOnlyBanner--vSOaw{font-weight:700;padding:var(--space-0-5) var(--space-1);border-block-end:1px solid var(--editor-color-outline)}.styles-module__tabbedPanel--Sovmr .styles-module__scrollWrapper--Q8zaL{position:absolute;inset:0;overflow-x:auto;overflow-y:hidden;white-space:nowrap;scrollbar-color:HSL(0, 0%, 14%, 30%) rgba(0,0,0,0);scrollbar-width:none;-ms-overflow-style:none}.styles-module__tabbedPanel--Sovmr .styles-module__scrollWrapper--Q8zaL::-webkit-scrollbar{block-size:0;transition:height .2s ease}.styles-module__tabbedPanel--Sovmr .styles-module__scrollWrapper--Q8zaL:hover{scrollbar-width:thin}.styles-module__tabbedPanel--Sovmr .styles-module__scrollWrapper--Q8zaL:hover::-webkit-scrollbar{block-size:calc(.25rem*var(--scale-factor, 1))}.styles-module__tabbedPanel--Sovmr .styles-module__closeBtn--g8-AM{block-size:100%;padding:0;padding-inline-start:calc(1rem*var(--scale-factor, 1));background-color:rgba(0,0,0,0)}.styles-module__tabbedPanel--Sovmr .styles-module__closeBtn--g8-AM:focus-visible{border:0}.styles-module__tabTooltip--DO-Hr{min-inline-size:auto;inline-size:max-content;max-inline-size:min(90vw,32rem);margin-block-start:0}.tabContainer{border-block-end:1px solid #e5e5e5;background-color:#e5f6f1;position:relative;block-size:calc(2.625rem*var(--scale-factor, 1));overflow:hidden}.tabText{display:flex;align-items:center;block-size:fit-content;inline-size:fit-content;margin:0;gap:calc(.5rem*var(--scale-factor, 1));line-height:calc(1rem*var(--scale-factor, 1));white-space:nowrap}.react-tabs{flex:1;display:flex;flex-flow:column;overflow:hidden;position:relative;border-radius:calc(.5rem*var(--scale-factor, 1)) calc(.5rem*var(--scale-factor, 1)) calc(.25rem*var(--scale-factor, 1)) calc(.25rem*var(--scale-factor, 1))}.react-tabs__tab{border:none;background-color:rgba(0,0,0,0);padding:0 calc(1rem*var(--scale-factor, 1));margin:0;inset-block-start:0;inset-block-end:0;min-block-size:calc(2.625rem*var(--scale-factor, 1));display:flex;align-items:center;justify-content:center;font-weight:700;color:#33625e;border-inline-end:1px solid #e5e5e5;flex:0 0 auto}.react-tabs__tab--selected{border-radius:0;background-color:#fff}.react-tabs__tab:focus{box-shadow:none;border-color:#e5e5e5}.react-tabs__tab:focus-visible{outline-offset:-3px}.react-tabs__tab:focus:after{display:none}.react-tabs__tab-list{border-block-end:none;box-sizing:border-box;display:inline-flex;align-items:center;flex-wrap:nowrap;margin:0;min-inline-size:100%}.react-tabs__tab-panel--selected{flex:1;display:flex;flex-direction:column;overflow-y:auto;background-color:#fff}
697
697
  :root{--rpf-white: #ffffff}.styles-module__proj--ZFm0o{display:flex;flex-flow:column;overflow:hidden;block-size:100%}.styles-module__projContainer--foKo4{display:flex;flex-direction:row;overflow-y:hidden;margin:0 8px 6px 0px;block-size:100%}.styles-module__projContainer--foKo4 .styles-module__projectWrapper--Yq8Yr{container-type:inline-size;display:flex;flex-direction:column;flex:1 1 auto;overflow:hidden}.styles-module__projContainer--foKo4 .styles-module__projEditorWrapper--SISJR{display:flex;flex:0 1 auto;flex-flow:column;grid-gap:calc(.625rem*var(--scale-factor, 1));overflow:hidden;block-size:100%;inline-size:100%}@container (min-width: 720px){.styles-module__projContainer--foKo4 .styles-module__projEditorWrapper--SISJR{flex-flow:row}.styles-module__projContainer--foKo4 .styles-module__projEditorContainer--jWAlR{max-block-size:100% !important}}.styles-module__projContainer--foKo4 .styles-module__projEditorContainer--jWAlR{display:flex;box-sizing:border-box;background-color:#fff;min-block-size:30%;max-block-size:70%;border-radius:8px}.styles-module__projContainer--foKo4 .styles-module__projEditorContainer--jWAlR .styles-module__react-tabs__tab-panel--selected--RwR-m{overflow-y:hidden}.styles-module__projContainer--foKo4 .styles-module__projEditorContainer--jWAlR .styles-module__react-tabs__tab-list--gM7uT{flex:1}.styles-module__projContainer--foKo4 .styles-module__projEditorContainer--jWAlR .styles-module__react-tabs__tab-container--ycENl .styles-module__btn--run--u9TgZ,.styles-module__projContainer--foKo4 .styles-module__projEditorContainer--jWAlR .styles-module__react-tabs__tab-container--ycENl .styles-module__btn--stop--gJCsY{margin-block-start:0;margin-block-end:0}
698
698
  :root{--rpf-white: #ffffff}.styles-module__viewSwitcher--h0ODR{display:flex}.styles-module__viewSwitcherBtn--v6-ir{inline-size:calc(2.75rem*var(--scale-factor, 1));block-size:calc(2.75rem*var(--scale-factor, 1));cursor:pointer;transition:background-color .15s ease}.styles-module__viewSwitcherBtnWrapper--OarYg{position:relative;display:flex}.styles-module__viewSwitcherBtnWrapper--OarYg:first-child .styles-module__viewSwitcherBtn--v6-ir{border-radius:calc(.75rem*var(--scale-factor, 1)) 0 0 calc(.75rem*var(--scale-factor, 1))}.styles-module__viewSwitcherBtnWrapper--OarYg:last-child .styles-module__viewSwitcherBtn--v6-ir{border-radius:0 calc(.75rem*var(--scale-factor, 1)) calc(.75rem*var(--scale-factor, 1)) 0}.styles-module__viewSwitcherBtnActive--m2JP-{background-color:#fff}
699
699
  :root{--rpf-white: #ffffff}.styles-module__container--uYbdi{color:#e0201c;padding:calc(.75rem*var(--scale-factor, 1)) calc(1.25rem*var(--scale-factor, 1));overflow-y:auto;display:flex;flex-direction:column;gap:calc(1rem*var(--scale-factor, 1));min-block-size:fit-content}.styles-module__message--hNGZt{padding:0;margin:0;white-space:pre-wrap;word-break:break-word;font-size:13px;line-height:18px;font-family:"Roboto Mono",source-code-pro,Menlo,Monaco,Consolas,"Courier New",monospace}.styles-module__infoBox--Ti35B{inline-size:100%;overflow-wrap:break-word;padding:calc(.5rem*var(--scale-factor, 1));background-color:#ffd5ce;color:#520e0e;display:flex;flex-direction:row;align-items:start;justify-content:flex-start;border:1px solid #e0201c;border-radius:calc(.5rem*var(--scale-factor, 1));gap:calc(.25rem*var(--scale-factor, 1))}.styles-module__infoBox--Ti35B svg{color:#e0201c}.styles-module__infoText--jXz2P{display:flex;flex-direction:column;align-items:flex-start;gap:calc(.3125rem*var(--scale-factor, 1))}.styles-module__notFoundContainer--YfNdr{inline-size:100%;block-size:100%;display:flex;flex-direction:column;align-items:center;gap:calc(2rem*var(--scale-factor, 1));padding:calc(2rem*var(--scale-factor, 1)) calc(1rem*var(--scale-factor, 1));overflow:scroll;justify-content:space-evenly}.styles-module__notFoundText--q6EKC{display:flex;flex-direction:column;align-items:center;gap:calc(1rem*var(--scale-factor, 1))}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "gwchq-textjam",
3
3
  "description": "Embeddable React editor used in Raspberry Pi text-based projects.",
4
- "version": "0.3.13",
4
+ "version": "0.3.15",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://github.com/GirlsFirst/gwchq-textjam",
7
7
  "author": "Girls Who Code HQ",
@@ -47,7 +47,7 @@
47
47
  "*.scss"
48
48
  ],
49
49
  "dependencies": {
50
- "@babel/core": "^7.17.10",
50
+ "@babel/core": "^7.29.7",
51
51
  "@codemirror/commands": "^6.1.1",
52
52
  "@codemirror/lang-css": "^6.0.0",
53
53
  "@codemirror/lang-html": "^6.1.2",
@@ -61,11 +61,11 @@
61
61
  "@juggle/resize-observer": "^3.3.1",
62
62
  "@lezer/highlight": "^1.0.0",
63
63
  "@raspberrypifoundation/design-system-react": "^2.7.0",
64
- "@reduxjs/toolkit": "^1.6.2",
64
+ "@reduxjs/toolkit": "^2.12.0",
65
65
  "@replit/codemirror-indentation-markers": "^6.1.0",
66
66
  "@szhsin/react-menu": "^4.5.1",
67
67
  "assert": "^2.1.0",
68
- "axios": "^0.24.0",
68
+ "axios": "^1.18.0",
69
69
  "classnames": "^2.5.1",
70
70
  "codemirror": "^6.0.1",
71
71
  "date-fns": "^4.1.0",
@@ -81,9 +81,9 @@
81
81
  "jszip-utils": "^0.1.0",
82
82
  "marked": "^15.0.6",
83
83
  "mime-types": "^2.1.35",
84
- "node-html-parser": "^6.1.5",
85
- "plotly.js": "^3.0.2",
86
- "prismjs": "^1.29.0",
84
+ "node-html-parser": "^7.1.0",
85
+ "plotly.js": "^3.6.0",
86
+ "prismjs": "^1.30.0",
87
87
  "process": "^0.11.10",
88
88
  "prop-types": "^15.8.1",
89
89
  "rc-resize-observer": "^1.3.1",
@@ -97,7 +97,7 @@
97
97
  "react-redux": "^7.2.5",
98
98
  "react-refresh": "^0.8.3",
99
99
  "react-responsive": "^9.0.2",
100
- "react-router-dom": "^6.7.0",
100
+ "react-router-dom": "^6.30.4",
101
101
  "react-tabs": "^4.2.1",
102
102
  "react-timer-hook": "^3.0.5",
103
103
  "react-toastify": "^8.1.0",
@@ -123,7 +123,7 @@
123
123
  "@babel/preset-env": "^7.17.10",
124
124
  "@babel/preset-typescript": "^7.28.5",
125
125
  "@pmmmwh/react-refresh-webpack-plugin": "0.4.3",
126
- "@svgr/webpack": "5.5.0",
126
+ "@svgr/webpack": "8.1.0",
127
127
  "@testing-library/jest-dom": "^5.16.5",
128
128
  "@testing-library/react": "14.3.1",
129
129
  "@testing-library/user-event": "^12.1.10",
@@ -180,7 +180,6 @@
180
180
  "lint-staged": "^16.3.2",
181
181
  "mini-css-extract-plugin": "^2.9.4",
182
182
  "mock-match-media": "^0.4.3",
183
- "optimize-css-assets-webpack-plugin": "5.0.4",
184
183
  "path-browserify": "^1.0.1",
185
184
  "pnp-webpack-plugin": "1.6.4",
186
185
  "postcss-flexbugs-fixes": "4.2.1",
@@ -192,7 +191,7 @@
192
191
  "prettier": "^2.8.8",
193
192
  "react": "^18.1.0",
194
193
  "react-app-polyfill": "^3.0.0",
195
- "react-dev-utils": "^11.0.3",
194
+ "react-dev-utils": "^12.0.1",
196
195
  "react-dom": "^18.1.0",
197
196
  "react-test-renderer": "^18.1.0",
198
197
  "redux-mock-store": "^1.5.4",
@@ -297,5 +296,12 @@
297
296
  "resetMocks": true,
298
297
  "coverageDirectory": "./coverage"
299
298
  },
299
+ "resolutions": {
300
+ "@babel/core": "7.29.7",
301
+ "form-data@~2.3.2": "2.5.6",
302
+ "form-data@^4.0.0": "4.0.6",
303
+ "form-data@^4.0.5": "4.0.6",
304
+ "protocol-buffers-schema@^3.3.1": "3.6.1"
305
+ },
300
306
  "packageManager": "yarn@3.4.1"
301
307
  }